# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# Andreas Christoffersen <andreas@proto-design.dk>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2022-10-22 07:32+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#.  vim: set syntax=asciidoc:
#. type: Attribute :lang:
#: README.adoc:1 INSTALL.adoc:1 src/Master_Developer.adoc:1
#: src/Master_Documentation.adoc:1 src/Master_Getting_Started.adoc:1
#: src/Master_Integrator.adoc:1 help/rtfaults.adoc:1 help/tklinuxcnc.adoc:1
#: src/code/adding-configs.adoc:1 src/code/building-linuxcnc.adoc:1
#: src/code/code-notes.adoc:1 src/code/contributing-to-linuxcnc.adoc:1
#: src/code/nml-messages.adoc:1 src/code/rs274.adoc:1
#: src/code/style-guide.adoc:1 src/common/emc-history.adoc:1
#: src/common/glossary.adoc:1 src/common/gpld-copyright.adoc:1
#: src/common/linux-faq.adoc:1 src/common/overleaf.adoc:1
#: src/config/core-components.adoc:1 src/config/ini-config.adoc:1
#: src/config/ini-homing.adoc:1 src/config/integrator-concepts.adoc:1
#: src/config/iov2.adoc:1 src/config/lathe-config.adoc:1
#: src/config/moveoff.adoc:1 src/config/pncconf.adoc:1
#: src/config/python-interface.adoc:1 src/config/stepconf.adoc:1
#: src/config/stepper.adoc:1 src/config/stepper-diagnostics.adoc:1
#: src/config/stepper-quickstart.adoc:1 src/drivers/ax5214h.adoc:1
#: src/drivers/gm.adoc:1 src/drivers/gs2.adoc:1 src/drivers/hostmot2.adoc:1
#: src/drivers/mb2hal.adoc:1 src/drivers/mitsub-vfd.adoc:1
#: src/drivers/motenc.adoc:1 src/drivers/opto22.adoc:1
#: src/drivers/pico-ppmc.adoc:1 src/drivers/pluto-p.adoc:1
#: src/drivers/pmx485.adoc:1 src/drivers/servo-to-go.adoc:1
#: src/drivers/shuttle.adoc:1 src/drivers/vfs11.adoc:1
#: src/examples/gcode.adoc:1 src/examples/gs2-example.adoc:1
#: src/examples/mpg.adoc:1 src/examples/pci-parallel-port.adoc:1
#: src/examples/spindle.adoc:1 src/gcode/coordinates.adoc:1
#: src/gcode/g-code.adoc:1 src/gcode/machining-center.adoc:1
#: src/gcode/m-code.adoc:1 src/gcode/o-code.adoc:1 src/gcode/other-code.adoc:1
#: src/gcode/overview.adoc:1 src/gcode/rs274ngc.adoc:1
#: src/gcode/tool-compensation.adoc:1 src/getting-started/about-linuxcnc.adoc:1
#: src/getting-started/getting-linuxcnc.adoc:1
#: src/getting-started/running-linuxcnc.adoc:1
#: src/getting-started/system-requirements.adoc:1
#: src/getting-started/updating-linuxcnc.adoc:1 src/gui/axis.adoc:1
#: src/gui/filter-programs.adoc:1 src/gui/gladevcp.adoc:1
#: src/gui/gladevcp-libraries.adoc:1 src/gui/gmoccapy.adoc:1
#: src/gui/gscreen.adoc:1 src/gui/gstat.adoc:1 src/gui/halui.adoc:1
#: src/gui/image-to-gcode.adoc:1 src/gui/mdro.adoc:1 src/gui/ngcgui.adoc:1
#: src/gui/panelui.adoc:1 src/gui/pyvcp.adoc:1 src/gui/pyvcp-examples.adoc:1
#: src/gui/qtdragon.adoc:1 src/gui/qtvcp.adoc:1
#: src/gui/qtvcp-code-snippets.adoc:1 src/gui/qtvcp-custom-widgets.adoc:1
#: src/gui/qtvcp-development.adoc:1 src/gui/qtvcp-libraries.adoc:1
#: src/gui/qtvcp-vcp-panels.adoc:1 src/gui/qtvcp-vismach.adoc:1
#: src/gui/qtvcp-widgets.adoc:1 src/gui/tklinuxcnc.adoc:1
#: src/gui/tooledit.adoc:1 src/gui/touchy.adoc:1 src/gui/vismach.adoc:1
#: src/hal/basic-hal.adoc:1 src/hal/canonical-devices.adoc:1
#: src/hal/comp.adoc:1 src/hal/components.adoc:1 src/hal/general-ref.adoc:1
#: src/hal/hal-examples.adoc:1 src/hal/halmodule.adoc:1 src/hal/halshow.adoc:1
#: src/hal/haltcl.adoc:1 src/hal/halui-examples.adoc:1 src/hal/intro.adoc:1
#: src/hal/parallel-port.adoc:1 src/hal/rtcomps.adoc:1 src/hal/tools.adoc:1
#: src/hal/tutorial.adoc:1 src/hal/twopass.adoc:1
#: src/install/latency-test.adoc:1 src/integrator/steppers.adoc:1
#: src/integrator/stepper-timing.adoc:1 src/integrator/wiring.adoc:1
#: src/ladder/classic-ladder.adoc:1 src/ladder/ladder-examples.adoc:1
#: src/ladder/ladder-intro.adoc:1 src/lathe/lathe-user.adoc:1
#: src/motion/5-axis-kinematics.adoc:1 src/motion/dh-parameters.adoc:1
#: src/motion/external-offsets.adoc:1 src/motion/kinematics.adoc:1
#: src/motion/pid-theory.adoc:1 src/motion/switchkins.adoc:1
#: src/motion/tweaking-steppers.adoc:1 src/plasma/plasma-cnc-primer.adoc:1
#: src/plasma/qtplasmac.adoc:1 src/remap/remap.adoc:1
#: src/source-highlight/hal-demo.adoc:1 src/source-highlight/ini-demo.adoc:1
#: src/source-highlight/ngc-demo.adoc:1 src/tooldatabase/tooldatabase.adoc:1
#: src/user/starting-linuxcnc.adoc:1 src/user/user-concepts.adoc:1
#: src/user/user-foreword.adoc:1 src/user/user-intro.adoc:1
#, no-wrap
msgid "en"
msgstr "da"

#. type: Title =
#: README.adoc:4
#, no-wrap
msgid "README for Document Writers"
msgstr ""

#. type: Title ==
#: README.adoc:6
#, no-wrap
msgid "Adding files"
msgstr ""

#. type: Plain text
#: README.adoc:10
msgid ""
"The src/Submakefile, src/docs.xml, docs/po4a.cfg and src/index.tmpl files "
"must be updated to add a new document file."
msgstr ""

#. type: Plain text
#: README.adoc:14
msgid ""
"The relevant pdf.adoc must be updated to include the new document in the pdf "
"documentation. e.g. if a new document belongs in the Master Documentation "
"then an entry is required in src/Master_Documentation.adoc."
msgstr ""

#. type: Plain text
#: README.adoc:18
msgid ""
"docs.xml is used to create the \"previous\" and \"next\" buttons at the top "
"of each individual HTML document. It should generally match the order of the "
"index.tmpl."
msgstr ""

#. type: Plain text
#: README.adoc:21
msgid ""
"po4a.cfg is used to map source files to translated documentation when "
"generating translated files using the files in docs/po/."
msgstr ""

#. type: Title ==
#: README.adoc:22
#, no-wrap
msgid "Notes on LinuxCNC documentation"
msgstr ""

#. type: Plain text
#: README.adoc:27
msgid ""
"The main LinuxCNC makefile can optionally build the documentation and other "
"files in this directory tree. Use \"--enable-build-documentation\" when "
"invoking src/configure, and run \"make\" from src."
msgstr ""

#. type: Title ==
#: README.adoc:28
#, no-wrap
msgid "Notes about drawings"
msgstr ""

#. type: Plain text
#: README.adoc:39
msgid ""
"Many of the documents include drawings. Most of them originally created "
"using the non-free Windows app EasyCAD and then exported to .eps files and "
"included in the the docs. The original 'source' files (EasyCad .FC7 format) "
"were not usable on a free system.  To fix this problem, all of the source "
"files have been converted to .dxf files, and added to Git. The .dxf files "
"can be edited with multiple CAD packages, and serve as the 'source' files "
"for future changes to the drawings.  They can be converted from .dxf to "
"postscript (not .eps) using QCAD, which is available for many systems, see "
"link:https://repology.org/project/qcad/[here]."
msgstr ""

#. type: Plain text
#: README.adoc:51
msgid ""
"Unfortunately, EasyCAD (and AutoCAD) support a number of entities that QCAD "
"does not import properly. Including some that were used in the LinuxCNC "
"drawings: filled circles, filled arrowheads, non-zero width lines, and "
"dashed lines.  Qcad renders filled circles as hollow, it renders all lines "
"the same width, and it renders dashed lines as solid, unless you tell it to "
"do otherwise.  All of these things make the drawings less attractive, but "
"are somewhat acceptable.  However, Qcad doesn't import filled arrowheads at "
"all, which seriously hurts the drawings.  So EasyCad was used to convert the "
"arrowheads to hollow before exporting them.  Hollow arrowheads don't look as "
"nice as solid ones, but at least they are visible."
msgstr ""

#. type: Plain text
#: README.adoc:57
msgid ""
"Once exported, the arrowheads lose their relationship with the line they are "
"on, and need to be moved and/or rotated manually if the line is moved.  I "
"believe that even if they were imported back into EasyCad, the line/arrow "
"connection would remain broken. New lines with arrowheads can be created in "
"Qcad with the 'leader' dimension tool."
msgstr ""

#. type: Plain text
#: README.adoc:64
msgid ""
"Because the original EPS files with filled lines and circles, wide lines, "
"and dashed lines look so much nicer, they will remain in Git and should "
"probably be used for the documents, however if they become inaccurate "
"because of changes in the software, we will have to edit the DXF files, "
"generate PostScript, and use the less pretty, but factually correct images."
msgstr ""

#. type: Plain text
#: README.adoc:72
msgid ""
"Since QCAD itself is a GUI application, the DXF to PostScript conversion "
"involves going clicky clicky, and can't be automated and made part of the "
"makefile. Also, not everyone will have QCAD installed on their system.  "
"Therefore, both the DXF files and the resulting postscript files are stored "
"in Git, and the normal documentation build process only uses the PostScript "
"files. If/when the DXF files are edited, they have to be converted to "
"PostScript manually as follows:"
msgstr ""

#. type: Plain text
#: README.adoc:74
msgid "Start QCAD"
msgstr ""

#. type: Plain text
#: README.adoc:75
msgid "File → Open → choose DXF file (the drawing appears in window)"
msgstr ""

#. type: Plain text
#: README.adoc:77
#, no-wrap
msgid ""
"Edit → Current Drawing Preferences → Paper\n"
"Set:"
msgstr ""

#. type: Plain text
#: README.adoc:78
msgid "Paper size to \"Letter\","
msgstr ""

#. type: Plain text
#: README.adoc:80
msgid ""
"Orientation to \"Landscape\" or Portrait\", depending on the aspect ratio of "
"the drawing."
msgstr ""

#. type: Plain text
#: README.adoc:83
#, no-wrap
msgid ""
"File → Print Preview\n"
"Click the \"Fit to page\" button on the toolbar (last button on the right - at least on version 2.0.4.0 of QCAD)."
msgstr ""

#. type: Plain text
#: README.adoc:84
msgid "File → Print"
msgstr ""

#. type: Plain text
#: README.adoc:85
msgid "Select \"Print to file\"."
msgstr ""

#. type: Plain text
#: README.adoc:86
msgid "Set the path to point to the same directory as the source .dxf file."
msgstr ""

#. type: Plain text
#: README.adoc:88
msgid ""
"Set the name to be the same as the source file, but .ps instead of .dxf."
msgstr ""

#. type: Plain text
#: README.adoc:89
msgid "Click \"OK\"."
msgstr ""

#. type: Plain text
#: README.adoc:94
msgid ""
"The makers of QCAD also have a GPL'ed format converter called vec2web, which "
"can do dxf to postscript conversion from the command-line. It is not "
"available as a pre-compiled package, but available in source form from "
"https://github.com/Seablade/vec2web."
msgstr ""

#. type: Plain text
#: README.adoc:99
msgid ""
"vec2web depends on Qt 3 development packages to compile, so it should not be "
"a dependency for building the LinuxCNC docs. But if configure can detect it, "
"it would be nice to automate conversion from DXF to PS for systems where "
"vec2web is installed."
msgstr ""

#. type: Plain text
#: README.adoc:103
msgid ""
"To build vec2web, apt-get install qt3-dev-tools.  The vec2web tarball "
"contains a build script, but before you run it you must set $QTDIR to point "
"at your Qt 3 installation — in my case it was:"
msgstr ""

#. type: Plain text
#: README.adoc:107
msgid "``` export QTDIR=/usr/share/qt3 ```"
msgstr ""

#. type: Plain text
#: README.adoc:109
msgid "Then run the build script:"
msgstr ""

#. type: Plain text
#: README.adoc:111 README.adoc:113
msgid "```"
msgstr ""

#. type: Block title
#: README.adoc:111
#, no-wrap
msgid "/build_vec2web.sh"
msgstr ""

#. type: Plain text
#: README.adoc:118
msgid ""
"There is no install step, the executable gets dumped into the build "
"directory.  There is also no man page, but running it with no args prints "
"the following usage instructions:"
msgstr ""

#. type: Plain text
#: README.adoc:125
#, no-wrap
msgid ""
"```\n"
"Usage: vec2web <input file> <output file> [options]\n"
"Where options are:\n"
"        -x #      maximum x size for the output bitmap in pixel\n"
"        -y #      maximum y size for the output bitmap in pixel\n"
"        -b        black/white instead of using colors\n"
msgstr ""

#. type: Plain text
#: README.adoc:126
#, no-wrap
msgid "[l|p]  orientation for PS output (landscape or portrait)\n"
msgstr ""

#. type: Plain text
#: README.adoc:127
#, no-wrap
msgid "-s ..     page size for PS output (A4, A5)\n"
msgstr ""

#. type: Plain text
#: README.adoc:131
#, no-wrap
msgid ""
"e.g. vec2web drawing.dxf drawing.png\n"
"        converts drawing.dxf to a portable network graphic\n"
"```\n"
msgstr ""

#. type: Plain text
#: README.adoc:137
msgid ""
"Initial attempts to use vec2web resulted in the graphical parts of the "
"drawing being converted, but all text was lost. I don't know if vec2web is "
"worth spending much more time on, however, it _is_ GPLv2, and it includes a "
"library for reading DXF files, which might be worthwhile to the LinuxCNC "
"community."
msgstr ""

#. type: Title ===
#: README.adoc:138
#, no-wrap
msgid "Drawings from QCAD"
msgstr ""

#. type: Plain text
#: README.adoc:141
msgid "Save as .dxf to the same directory as the image."
msgstr ""

#. type: Plain text
#: README.adoc:142
msgid "Set line thickness to 0.50&thinsp;mm."
msgstr ""

#. type: Plain text
#: README.adoc:143
msgid "Export the image as 480 x 480 Resolution Auto .png."
msgstr ""

#. type: Title ==
#: README.adoc:144
#, no-wrap
msgid "Provide translated documentation"
msgstr ""

#. type: Plain text
#: README.adoc:155
msgid ""
"The complete set of documents are translated using gettext PO files using "
"the https://po4a.alioth.debian.org/[po4a]po4a system.  If you want to "
"contribute a translation, please use the link:https://hosted.weblate.org/"
"projects/linuxcnc/[web based translation editor Weblate].  Registered "
"Weblate users can translate directly, while non-registered users can propose "
"translations for others to review.  Translations are done paragraph by "
"paragraph.  If there is no existing translation of the documentation to your "
"language, you can add it in the Weblate interface."
msgstr ""

#. type: Plain text
#: README.adoc:164
msgid ""
"With po4a, the English text is the master document, and each paragraph is "
"translated using gettext, just like the strings in our software.  Some "
"documentation of po4a is available in the https://po4a.alioth.debian.org/man/"
"man7/po4a.7.php[po4a(7)] manpage.  As the po4a support for asciidoc has been "
"rapidly improving since LinuxCNC started using it, based on bug reports from "
"the LinuxCNC community, a very recent version of po4a is needed.  At the "
"moment, at least version 0.67 is needed, available in Debian Bookworm."
msgstr ""

#. type: Title ===
#: README.adoc:165
#, no-wrap
msgid "When the master document (english) changes"
msgstr ""

#. type: Plain text
#: README.adoc:171
msgid ""
"When the master document (english) file has changed, the POT file with the "
"set of translatable strings need to be updated, and the updates need to be "
"propagated into the PO files for each translation.  This can be done using "
"the build system:"
msgstr ""

#. type: Plain text
#: README.adoc:175
msgid "``` make -C src translateddocs ```"
msgstr ""

#. type: Plain text
#: README.adoc:178
msgid ""
"Once this is completed, the files in docs/po/ will be updated, and should be "
"committed into git and pulled into Weblate."
msgstr ""

#. type: Title ===
#: README.adoc:179
#, no-wrap
msgid "How to add a new translation language"
msgstr ""

#. type: Plain text
#: README.adoc:185
msgid ""
"Once a new PO files for a fresh translation is added via Weblate, and the "
"translation level raise to a sensible level (for example not 0%), build "
"rules need to be added to use the generated translations to build HTML and "
"PDF editions of the translation."
msgstr ""

#. type: Plain text
#: README.adoc:188
msgid ""
"Add the new language code to the proper place in docs/po4a.cfg.  Update "
"build rules for the new language in `docs/src/Submakefile`."
msgstr ""

#. type: Plain text
#: README.adoc:192
msgid ""
"Edit debian/control.in to add the new linuxcnc-doc-$NEWLANG package.  Add "
"the new doc package to the \"or\" list of the \"Recommends\" line of the "
"linuxcnc main package."
msgstr ""

#. type: Plain text
#: README.adoc:195
msgid ""
"Add the new language to the list in the DOCS_PACKAGES variable in debian/"
"configure."
msgstr ""

#. type: Plain text
#: README.adoc:198
msgid ""
"If there is a texlive-lang-$NEWLANGUAGE package for your new language, add "
"it to the DOC_DEPENDS variable in debian/configure."
msgstr ""

#. type: Plain text
#: README.adoc:201
msgid ""
"Add the appropriate `linuxcnc-doc-$NEWLANG.*` files for the new package, "
"probably by copying and editing `debian/linuxcnc-doc-en.*`."
msgstr ""

#. type: Plain text
#: README.adoc:203
msgid "Test build the packages and verify!"
msgstr ""

#. type: Title =
#: INSTALL.adoc:4
#, no-wrap
msgid "Build LinuxCNC for \"run in place\""
msgstr ""

#. type: Title ==
#: INSTALL.adoc:6
#, no-wrap
msgid "Basic Instructions"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:9
msgid "From the repository top level directory:"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:11
#, no-wrap
msgid "*Build LinuxCNC* +\n"
msgstr ""

#. type: delimited block -
#: INSTALL.adoc:19
#, no-wrap
msgid ""
"cd src                                            <1>\n"
"./autogen.sh                                      <2>\n"
"./configure [--with-realtime=uspace|/usr/rtai...] <3>\n"
"make clean                                        <4>\n"
"make                                              <5>\n"
"sudo make setuid                                  <6>\n"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:21
msgid "Change to source directory"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:22
msgid "Builds the configure script (uses `configure.in`)"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:25
#, no-wrap
msgid ""
"Configure the package for your system\n"
"Running `configure` takes awhile. While running, it prints some messages telling which features it is checking for."
msgstr ""

#. type: Plain text
#: INSTALL.adoc:26
msgid "Remove previous build(s) artifacts"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:27
msgid "Build/compile the software package"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:28
msgid "Set ownership and mode of built files"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:32
#, no-wrap
msgid ""
"If you're using `csh` on an old version of System V, you might\n"
"      need to type `sh ./configure` instead to prevent `csh' from trying\n"
"      to execute `configure' itself.\n"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:34
#, no-wrap
msgid "*Run LinuxCNC* +\n"
msgstr ""

#. type: delimited block -
#: INSTALL.adoc:39
#, no-wrap
msgid ""
"cd ..                           <1>\n"
"source scripts/rip-environment  <2>\n"
"linuxcnc                        <3>\n"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:41
msgid "Change back up to top level directory"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:42
msgid "Configure shell environment for LinuxCNC commands and Python modules"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:43
msgid "Run LinuxCNC"
msgstr ""

#. type: Title ==
#: INSTALL.adoc:44
#, no-wrap
msgid "Detailed description"
msgstr ""

#. type: Title ===
#: INSTALL.adoc:46
#, no-wrap
msgid "Run-time script"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:50
msgid ""
"The runtime script is called *linuxcnc*, thus allowing you on an installed "
"system to just type `linuxcnc` and get it running."
msgstr ""

#. type: Plain text
#: INSTALL.adoc:58
msgid ""
"On a run-in-place system (e.g. the one you just got out of git), the "
"runscript is `scripts/linuxcnc`.  When you just checked out a fresh copy of "
"LinuxCNC, you'll see there is no `scripts/linuxcnc`, just a `scripts/"
"linuxcnc.in`. By running `configure` that one will get changed to `scripts/"
"linuxcnc`.  `configure` will also replace some default values for your "
"system (folders, paths, etc)."
msgstr ""

#. type: Title ===
#: INSTALL.adoc:60
#, no-wrap
msgid "Configure script"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:65
msgid ""
"The *`configure`* shell script attempts to guess correct values for various "
"system-dependent variables used during compilation. It uses those values to "
"create:"
msgstr ""

#. type: Labeled list
#: INSTALL.adoc:66
#, no-wrap
msgid "`Makefile.inc` file"
msgstr ""

#. type: Labeled list
#: INSTALL.adoc:68
#, no-wrap
msgid "`config.status` shell script"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:70
msgid "That you can run in the future to recreate the current configuration;"
msgstr ""

#. type: Labeled list
#: INSTALL.adoc:71
#, no-wrap
msgid "`config.cache` file"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:73
msgid "That saves the results of its tests to speed up reconfiguring;"
msgstr ""

#. type: Labeled list
#: INSTALL.adoc:74
#, no-wrap
msgid "`config.log` file"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:76
msgid "Containing compiler output (useful mainly for debugging `configure`)."
msgstr ""

#. type: Plain text
#: INSTALL.adoc:81
msgid ""
"The *`configure.ac`* file is used by the `autogen.sh` script, from the "
"`autoconf` package, to create the `configure` script.  You only need "
"`configure.ac` if you want to change `configure`, or regenerate it using a "
"newer version of `autoconf`."
msgstr ""

#. type: Title ====
#: INSTALL.adoc:82
#, no-wrap
msgid "Optional Features"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:89
msgid ""
"LinuxCNC can operate hardware only if a _real time system_ has been "
"installed: either *RT-PREEMPT* or *RTAI*. If you don't have any installed, "
"you cannot run LinuxCNC to control any machines. Please install one of the "
"RT patches (refer to the documentation of the project on how to achieve "
"that)."
msgstr ""

#.  FIXME Add pointers for RT install
#. type: Plain text
#: INSTALL.adoc:95
msgid ""
"However, it is possible to test LinuxCNC without a realtime system. This is "
"possible using a _simulator mode_, which doesn't allow hardware control.  "
"This is an alternate mode of *uspace* _realtime_."
msgstr ""

#. type: Plain text
#: INSTALL.adoc:98
msgid ""
"To specify RT-PREEMPT or non-realtime, use `--with-realtime=uspace`.  "
"Otherwise, use `--with-realtime=[location where rtai is installed]`."
msgstr ""

#. type: Plain text
#: INSTALL.adoc:101
msgid ""
"If you don't want to generate the documentation from source use `--disable-"
"build-documentation`"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:103
msgid ""
"`configure` also accepts other arguments. Use `--help` to view the list."
msgstr ""

#. type: Title ====
#: INSTALL.adoc:104
#, no-wrap
msgid "Operation Controls"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:107
msgid ""
"`configure` recognizes the following options to control how it operates:"
msgstr ""

#. type: Labeled list
#: INSTALL.adoc:108
#, no-wrap
msgid "`--cache-file=FILE`"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:112
msgid ""
"Use and save the results of the tests in FILE instead of `./config.cache`.  "
"Set FILE to `/dev/null` to disable caching, for debugging `configure`."
msgstr ""

#. type: Labeled list
#: INSTALL.adoc:113
#, no-wrap
msgid "`--help`"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:115
msgid "Print a summary of the options to `configure`, and exit."
msgstr ""

#. type: Labeled list
#: INSTALL.adoc:116
#, no-wrap
msgid "`--quiet` | `--silent` | `-q`"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:120
msgid ""
"Do not print messages saying which checks are being made.  To suppress all "
"normal output, redirect it to `/dev/null` (any error messages will still be "
"shown)."
msgstr ""

#. type: Labeled list
#: INSTALL.adoc:121
#, no-wrap
msgid "`--srcdir=DIR`"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:124
msgid ""
"Look for the package's source code in directory DIR.  Usually `configure` "
"can determine that directory automatically."
msgstr ""

#. type: Labeled list
#: INSTALL.adoc:125
#, no-wrap
msgid "`--version`"
msgstr ""

#. type: Plain text
#: INSTALL.adoc:127
msgid ""
"Print the version of _Autoconf_ used to generate the `configure' script and "
"exit."
msgstr ""

#. type: Title =
#: src/Master_Developer.adoc:7
#, no-wrap
msgid "Developer Manual V{lversion}, {date}"
msgstr ""

#. type: Title ==
#: src/Master_Developer.adoc:9 src/code/building-linuxcnc.adoc:6
#: src/code/contributing-to-linuxcnc.adoc:12 src/config/stepconf.adoc:7
#: src/config/stepper.adoc:13 src/drivers/hostmot2.adoc:13
#: src/drivers/mb2hal.adoc:13 src/gcode/coordinates.adoc:13
#: src/gui/axis.adoc:13 src/gui/filter-programs.adoc:6 src/gui/gmoccapy.adoc:14
#: src/gui/gscreen.adoc:13 src/gui/halui.adoc:14 src/gui/mdro.adoc:13
#: src/gui/panelui.adoc:11 src/gui/pyvcp.adoc:13 src/gui/qtdragon.adoc:11
#: src/gui/qtvcp-vismach.adoc:13 src/gui/tklinuxcnc.adoc:14
#: src/hal/canonical-devices.adoc:7 src/hal/comp.adoc:13
#: src/hal/tutorial.adoc:7 src/ladder/ladder-intro.adoc:37
#: src/motion/5-axis-kinematics.adoc:17 src/motion/kinematics.adoc:7
#: src/motion/switchkins.adoc:13 src/plasma/qtplasmac.adoc:21
#: src/user/user-intro.adoc:7
#, no-wrap
msgid "Introduction"
msgstr ""

#. type: Target for macro image
#: src/Master_Developer.adoc:11 src/Master_Getting_Started.adoc:13
#, no-wrap
msgid "common/images/emc2-intro.png"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:8
#, no-wrap
msgid "LinuxCNC V{lversion}, {date}"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:11
#, no-wrap
msgid "Getting Started & Configuration"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:14
#, no-wrap
msgid "Getting Started with LinuxCNC"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:31
#, no-wrap
msgid "General User Information"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:50
#, no-wrap
msgid "Configuration Wizards"
msgstr ""

#. type: Title ===
#: src/Master_Documentation.adoc:59 src/config/ini-homing.adoc:116
#: src/drivers/hostmot2.adoc:738
#, no-wrap
msgid "Configuration"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:84
#, no-wrap
msgid "HAL (Hardware Abstraction Layer)"
msgstr ""

#. type: Title ===
#: src/Master_Documentation.adoc:115 src/hal/components.adoc:83
#, no-wrap
msgid "Hardware Drivers"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:150
#, no-wrap
msgid "Hardware Examples"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:164
#, no-wrap
msgid "ClassicLadder"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:175
#, no-wrap
msgid "Advanced Topics"
msgstr ""

#. type: Content of: <html><body><h3>
#: src/Master_Documentation.adoc:200 src/code/rs274.adoc:15
#: src/config/iov2.adoc:52 src/drivers/mb2hal.adoc:41
#: src/gui/qtvcp-libraries.adoc:30 src/gui/qtvcp-libraries.adoc:205
#: src/gui/qtvcp-libraries.adoc:261 src/gui/qtvcp-libraries.adoc:534
#: src/gui/qtvcp-libraries.adoc:568 src/gui/qtvcp-libraries.adoc:667
#: src/gui/qtvcp-libraries.adoc:703 src/gui/qtvcp-libraries.adoc:962
#: src/gui/qtvcp-libraries.adoc:1084 src/gui/qtvcp-libraries.adoc:1299
#: src/motion/external-offsets.adoc:65 src/motion/switchkins.adoc:135
#: src/tooldatabase/tooldatabase.adoc:113 src/index.tmpl:242
#, no-wrap
msgid "Usage"
msgstr ""

#. type: Title ==
#: src/Master_Documentation.adoc:203 src/code/code-notes.adoc:804
#, no-wrap
msgid "User Interfaces"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:226
#, no-wrap
msgid "G-code Programming"
msgstr ""

#. type: Title ==
#: src/Master_Documentation.adoc:253 src/user/user-intro.adoc:152
#, no-wrap
msgid "Virtual Control Panels"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:282
#, no-wrap
msgid "User Interface Programming"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:301
#, no-wrap
msgid "Glossary, Copyright & History"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:304
#, no-wrap
msgid "Overleaf"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:311
#, no-wrap
msgid "Copyright"
msgstr ""

#. type: Title =
#: src/Master_Documentation.adoc:317
#, no-wrap
msgid "LinuxCNC History"
msgstr ""

#. type: Title =
#: src/Master_Getting_Started.adoc:7
#, no-wrap
msgid "Getting Started V{lversion}, {date}"
msgstr ""

#. type: Plain text
#: src/Master_Getting_Started.adoc:10
msgid "The LinuxCNC Team"
msgstr ""

#. type: Title =
#: src/Master_Integrator.adoc:7
#, no-wrap
msgid "Integrator Information V{lversion}, {date}"
msgstr ""

#. type: Title =
#: help/rtfaults.adoc:3
#, no-wrap
msgid "RT Faults"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:6
msgid "Finding line number information for faults in realtime components"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:9
msgid ""
"Get a version of LinuxCNC which prints the faulting instruction address "
"(that includes this version of LinuxCNC)"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:13
#, no-wrap
msgid ""
"Include debugging info in your modules.\n"
"For built-in modules, below the definition of EXTRA_CFLAGS in Makefile, add:"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:15
#, no-wrap
msgid "EXTRA_CFLAGS += -g\n"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:17
msgid "For standalone modules, add the same line just above the line:"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:19
#, no-wrap
msgid "  ifeq ($(BUILDSYS),kbuild)\n"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:21
msgid "and (re)build the component"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:25
#, no-wrap
msgid ""
"Run hal until the following fault occurs: *DO NOT EXIT THE HAL SESSION YET*.\n"
"You must find the start of the module (step 5) first."
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:27
msgid "Note the ip (instruction pointer) address in dmesg, e.g.:"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:30
#, no-wrap
msgid ""
"RTAPI: Task 1[c2800000]: Fault with vec=14, signo=11 ip=c93dc01a.\n"
"^^^^^^^^\n"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:32
msgid "Find the module which contains the offending IP."
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:37
#, no-wrap
msgid ""
"$ cat /proc/modules\n"
"motmod 142230 0 - Live 0xc93df000\n"
"fault 1626 1 motmod, Live 0xc93dc000\n"
"hal_lib 30517 2 motmod,fault, Live 0xc93d5000\n"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:39
msgid "Now you can exit hal/emc2."
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:43
#, no-wrap
msgid ""
"Subtract the start of the module from the faulting ip (in this case, 0x1a)\n"
"Among other ways to do this, you can use the shell:"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:46
#, no-wrap
msgid ""
"$ printf \"0x%x\\n\" $((0xc93dc01a-0xc93dc000))\n"
"0x1a\n"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:48
msgid "Use addr2line to find out the source code line:"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:51
#, no-wrap
msgid ""
"$ addr2line -e emc2-dev/src/fault.ko 0x1a\n"
"/usr/src/linux-headers-2.6.32-122-rtai/hal/components/fault.comp:9\n"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:54
msgid ""
"Ignore how the directory name is wrong and see whether this has helped you "
"localize the problem:"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:56
#, no-wrap
msgid "  fault.comp:9          *(int*)0 = 0;\n"
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:58
msgid "Yup! Looks like it has."
msgstr ""

#. type: Plain text
#: help/rtfaults.adoc:63
msgid ""
"Note that even if you do not prefix the address argument to addr2line with "
"0x, it is interpreted as a hex number, and you'll get the wrong line-number "
"information if passing a decimal number. Thus take care to always use hex "
"addresses with addr2line."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:4 src/config/pncconf.adoc:166
#: src/getting-started/updating-linuxcnc.adoc:936 src/user/user-intro.adoc:137
#, no-wrap
msgid "TkLinuxCNC"
msgstr ""

#. type: Title ==
#: help/tklinuxcnc.adoc:12
#, no-wrap
msgid "Menus"
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:14
#, no-wrap
msgid "*File -> Run...*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:17
#, no-wrap
msgid ""
"Prompts for an NC program to run.\n"
"You need to be in Auto mode, or you'll get an error."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:18
#, no-wrap
msgid "*File -> Reset*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:21
#, no-wrap
msgid ""
"Resets the interpreter.\n"
"The modal G- and M-codes are set to their defaults."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:22
#, no-wrap
msgid "*File -> Quit*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:25
#, no-wrap
msgid ""
"Quits the Tkemc graphical application.\n"
"The controller will also shut down."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:26
#, no-wrap
msgid "*View -> Tools*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:33
#, no-wrap
msgid ""
"Shows the tool table.\n"
"You can edit the table.\n"
"Selecting the 'Done' button will save the table and reload it into the controller.\n"
"Note that Tab and Return affect the text, so you have to click the 'Done' button with the mouse."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:34
#, no-wrap
msgid "*View -> Offsets and Variables*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:42
#, no-wrap
msgid ""
"Shows the interpreter parameters, which hold the work offsets and user variables.\n"
"You can edit the file.\n"
"Selecting the Done button will save the file and reload it into the controller.\n"
"Note that Tab and Return affect the text, so you have to click the Done button with the mouse."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:43
#, no-wrap
msgid "*Settings -> Relative Display, Actual Display*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:47
#, no-wrap
msgid ""
"Sets the display to show positions as relative to the current work offset, or in absolute machine coordinates.\n"
"In relative display mode, the work offsets are shown also."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:48
#, no-wrap
msgid "*Settings -> Actual Position, Commanded Position*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:52
msgid ""
"Sets the display to show either the actual position of the axes, as reported "
"by their feedback, or the commanded position, which is where the controller "
"is commanding them to go."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:53
#, no-wrap
msgid "*Help -> Help...*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:55
msgid "Brings up this help window."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:56
#, no-wrap
msgid "*Help -> About...*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:58
msgid "Brings up a credits window."
msgstr ""

#. type: Title ==
#: help/tklinuxcnc.adoc:59
#, no-wrap
msgid "Status Command Buttons"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:65
msgid ""
"The buttons in the next two rows are labeled according to the current EMC "
"status. Click on them to pop up menus that send commands to the EMC. The "
"labels on these buttons will change to reflect the new status."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:66
#, no-wrap
msgid "*ON/ESTOP - RESET/ESTOP*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:75
#, no-wrap
msgid ""
"Changes the power state of the machine.\n"
"At startup the machine is in ESTOP. Selecting Estop Reset will enable the estop circuitry, but the servos will not yet be enabled. Selecting Machine On will enable the servos. Selecting Machine Off will disable the servos. Selecting Estop at any time will return the machine to the initial estopped state. Function keys F1 and F2 will toggle the states of the estop and servo systems, respectively. The Function Keys are listed completely below."
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:81
#, no-wrap
msgid ""
"*SAFETY NOTE:* ESTOP will put the machine into the estopped state, but\n"
"should not be relied on for this action in the event of an emergency.\n"
"Always use the hardware estop to assure physical disabling of the\n"
"machine.\n"
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:82
#, no-wrap
msgid "*MANUAL / AUTO / MDI*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:84
msgid "Changes the execution mode of the machine. +"
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:84
#, no-wrap
msgid "*Manual mode*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:88
#, no-wrap
msgid ""
"Allows the operator to jog and home the axes, and control\n"
"the coolant and spindle. +\n"
"Function key F3 puts the controller into Manual mode.\n"
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:88
#, no-wrap
msgid "*Auto mode*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:92
#, no-wrap
msgid ""
"Allows the operator to load programs into the machine, run\n"
"them, and pause/step/resume them. +\n"
"F4 puts the controller into Auto mode.\n"
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:92
#, no-wrap
msgid "*Manual Data Input (MDI)*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:95
#, no-wrap
msgid ""
"Mode allows the operator to type in blocks of NC code interactively. +\n"
"F5 puts the controller into MDI mode.\n"
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:96
#, no-wrap
msgid "*MIST ON/OFF, FLOOD ON/OFF*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:101
#, no-wrap
msgid ""
"Turns mist or flood coolant on or off.\n"
"Function key F7 toggles the state of the mist coolant.\n"
"Function key F8 toggles the state of the flood coolant.\n"
"These buttons and function keys only work in Manual mode."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:102
#, no-wrap
msgid "*SPINDLE FORWARD/REVERSE/OFF*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:108
#, no-wrap
msgid ""
"Turns the spindle on forward, reverse,or off. Function key F9 turns the spindle on forward if it's off, or off if it's on.\n"
"F10 turns the spindle on reverse if it's off, or off it it's on.\n"
"These buttons and function keys only work in Manual mode."
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:116
#, no-wrap
msgid ""
"The speed of the spindle can be decreased or increased using the < and > buttons to the left and right of the spindle control button, respectively.\n"
"F11 and F12, while pressed, decrease or increase the spindle speed, respectively, until they are released.\n"
"These buttons and function keys work in Manual, Auto, or MDI mode.\n"
"They are not active when the spindle is off."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:117
#, no-wrap
msgid "*BRAKE ON/OFF*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:122
#, no-wrap
msgid ""
"Puts the spindle brake on, or releases it.\n"
"This can be used to manually operate the spindle brake for maintenance or tramming operations.\n"
"The 'B' and 'b' key, in Manual mode,"
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:123
#, no-wrap
msgid "*ABORT*"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:128
#, no-wrap
msgid ""
"Stops all motion and any program that is running.\n"
"The Escape key accomplishes the same result.\n"
"Use ABORT or the Escape key to stop machine motions while testing programs."
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:130
msgid "ABORT will not affect the estop state of the machine."
msgstr ""

#. type: Title ==
#: help/tklinuxcnc.adoc:131
#, no-wrap
msgid "Tool and Tool Offset"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:137
msgid ""
"At the left, below the command buttons, is a display of the currently loaded "
"tool and the tool offset, if any. A value of 0 for the Tool means that no "
"tool is in the spindle. The offset is non-zero if a tool length offset is "
"active."
msgstr ""

#. type: Title ==
#: help/tklinuxcnc.adoc:138
#, no-wrap
msgid "Position Display Options and Work Offsets"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:149
msgid ""
"At the right, below the command buttons, is a display showing how to "
"interpret the position numbers. There are two sources of position feedback, "
"either Commanded or Actual. Commanded numbers are what the motion system "
"asks for, and is not necessarily what the machine axes positions are (servo "
"lag may mean they are different). Actual numbers reflect the current "
"position of the axes. Normally, actual numbers are what you want. In some "
"cases, for example running a program in simulation with the axes inhibited "
"or disconnected, commanded numbers are what you want."
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:155
msgid ""
"Position numbers can also be Absolute or Relative. Absolute numbers are not "
"affected by any work offsets in a program. They are relative to the machine "
"home position. Relative numbers include any work offset. If Relative numbers "
"are selected, the applicable Work Offsets are shown."
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:159
msgid ""
"To change these settings, use the '@' key for Commanded/Actual, and the '#' "
"key for Absolute/Relative. The default values can be set in the INI file, e."
"g.,"
msgstr ""

#. type: delimited block -
#: help/tklinuxcnc.adoc:165
#, no-wrap
msgid ""
"[DISPLAY]\n"
"POSITION_OFFSET =   RELATIVE\n"
"POSITION_FEEDBACK = ACTUAL\n"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:168 src/common/linux-faq.adoc:193
#: src/getting-started/getting-linuxcnc.adoc:87
#: src/getting-started/getting-linuxcnc.adoc:110 man/man1/iocontrol.1:14
msgid "or"
msgstr ""

#. type: delimited block -
#: help/tklinuxcnc.adoc:174
#, no-wrap
msgid ""
"[DISPLAY]\n"
"POSITION_OFFSET =   ABSOLUTE\n"
"POSITION_FEEDBACK = COMMANDED\n"
msgstr ""

#. type: Title ==
#: help/tklinuxcnc.adoc:176
#, no-wrap
msgid "Axis Positions"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:181
msgid ""
"Axis positions are displayed in a large font in the middle of the display. "
"The values are interpreted in units, commanded/actual, and absolute/"
"relative, as described above."
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:186
msgid ""
"The color of the numbers shows the state of each axis. Yellow numbers mean "
"the axis has not yet been homed. Green numbers mean the axis has been homed "
"and is within limits. Red numbers mean the axis is at a soft or hard limit."
msgstr ""

#. type: Title ==
#: help/tklinuxcnc.adoc:187
#, no-wrap
msgid "Axis Command Buttons"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:193
msgid ""
"Below the axis position numbers is a row of command buttons that affect axis "
"motion. The Axis Speed setting, displayed in units/minute, can be changed by "
"clicking and holding the < or > buttons until the desired setting is reached."
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:198
msgid ""
"The Increment button shows the current value of the jog increment, or "
"\"continuous\" for continuous jogging. Clicking on this button brings up a "
"menu that changes the jog increment or selects continuous jogging."
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:202
msgid ""
"The Axis Motion buttons jog an axis in the negative direction using the \"-"
"\" button, positive direction using the \"+\" button, or home the axis using "
"the \"home\" button."
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:206
msgid ""
"The Feed Override value in percent is displayed, and can be changed by "
"clicking and holding the < or > buttons until the desired setting is reached."
msgstr ""

#. type: Title ==
#: help/tklinuxcnc.adoc:207
#, no-wrap
msgid "Manual Data Input (MDI) Box"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:216
msgid ""
"Below the axis command buttons is an input box labeled \"MDI:\" that is "
"active when the machine is in manual data input (MDI) mode. You can type NC "
"code statements into this box, and hit Enter to send the command. Note that "
"many of the function and alphanumeric accelerator keys don't work as "
"accelerator keys, so that they can be used to compose MDI statements. Keys "
"F1-F5 (estop state and Manual/Auto/MDI mode), and F11-F12 (spindle speed "
"control) do work; others do not."
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:223
msgid ""
"Below the MDI box is a display of the current modal settings for G, M, F, "
"and S codes. These are only valid when in MDI mode. In Auto mode, they hold "
"the modal values up to the point where the interpreter has read, usually far "
"ahead of the executing line in the program. They do, however, always show "
"the modal groups that are applicable when you next enter an MDI line."
msgstr ""

#. type: Title ==
#: help/tklinuxcnc.adoc:224
#, no-wrap
msgid "Program Display"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:232
msgid ""
"At the bottom of the main screen is a label showing the current program, or "
"the last program loaded. Below this is a row of command buttons to Open, "
"Run, Pause, Resume, or Step the program. The Open button is identical to the "
"File->Open... menu at the top, as is the 'o' or 'O' accelerator. The run, "
"pause, resume, and step accelerators are 'r', 'p', 's', and 'a', "
"respectively, lower or upper case."
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:236
msgid ""
"The window at the bottom shows a few lines of text of the currently loaded "
"program. The display window is moved through the program so that the "
"currently executing line is always at the top."
msgstr ""

#. type: Title ==
#: help/tklinuxcnc.adoc:237
#, no-wrap
msgid "Function and Accelerator Keys"
msgstr ""

#. type: delimited block -
#: help/tklinuxcnc.adoc:273
#, no-wrap
msgid ""
"Escape  abort motion                        <-|\n"
"F1      toggle estop/estop reset state        |\n"
"F2      toggle machine off/machine on state   |- work in MDI mode also\n"
"F3      Manual mode                           |\n"
"F4      Auto mode                             |\n"
"F5      MDI mode                            <-|\n"
"F6      reset interpreter\n"
"F7      toggle mist on/mist off\n"
"F8      toggle flood on/flood off\n"
"F9      toggle spindle forward/off\n"
"F10     toggle spindle reverse/off\n"
"F11     decrease spindle speed              <-|- work in MDI mode also\n"
"F12     increase spindle speed              <-|\n"
"x       select X axis\n"
"y       select Y axis\n"
"z       select Z axis\n"
"Left, Right Arrow  jog X axis\n"
"Up, Down Arrow     jog Y axis\n"
"Page Up, Down      jog Z axis\n"
"Home    home selected axis\n"
"<, >    decrement or increment axis speed\n"
"c/C     select continuous jogging\n"
"i/I     select incremental jog, and toggle through increments\n"
"1-9,0   set feed override to 10%-90%, 0 is 100%\n"
"@       toggle commanded/actual position display\n"
"#       toggle absolute/relative position display\n"
"o/O     open a program\n"
"r/R     run an opened program\n"
"p/P     pause an executing program\n"
"s/S     resume a paused program\n"
"a/A     step one line in a paused program\n"
"b       take spindle brake off\n"
"Alt-b   put spindle brake on\n"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:278
msgid ""
"Note that MDI mode disables most of the keys, since they are valid symbols "
"that can be typed in. F1-F5 work in MDI, as do the spindle speed change keys "
"F11 and F12."
msgstr ""

#. type: Title ==
#: help/tklinuxcnc.adoc:279
#, no-wrap
msgid "The RS-274-NGC Interpreter"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:285
msgid ""
"The EMC runs a dialect of RS-274 \"G-codes\" that originated from Allen-"
"Bradley as part of their work for the National Center for Manufacturing "
"Sciences (NCMS) on the Next Generation Controller (NGC)  project. The "
"dialect is similar to the Fanuc series of CNCs."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:286 src/remap/remap.adoc:320
#, no-wrap
msgid "G-codes"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: help/tklinuxcnc.adoc:289 help/tklinuxcnc.adoc:339 src/gcode/g-code.adoc:60
#: src/gcode/g-code.adoc:1233 src/gcode/m-code.adoc:15
#: src/plasma/qtplasmac.adoc:1246 src/plasma/qtplasmac.adoc:3962
#: html/gcode.html:54
#, no-wrap
msgid "Code"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: help/tklinuxcnc.adoc:290 help/tklinuxcnc.adoc:340 src/config/iov2.adoc:13
#: src/drivers/mb2hal.adoc:62 src/drivers/mb2hal.adoc:90
#: src/drivers/pmx485.adoc:49 src/drivers/shuttle.adoc:7
#: src/gcode/g-code.adoc:61 src/gcode/m-code.adoc:16 src/gui/gmoccapy.adoc:1558
#: src/hal/tools.adoc:248 src/plasma/qtplasmac.adoc:117
#: src/plasma/qtplasmac.adoc:393 src/plasma/qtplasmac.adoc:410
#: src/plasma/qtplasmac.adoc:754 src/plasma/qtplasmac.adoc:778
#: src/plasma/qtplasmac.adoc:816 src/plasma/qtplasmac.adoc:834
#: src/plasma/qtplasmac.adoc:847 src/plasma/qtplasmac.adoc:886
#: src/plasma/qtplasmac.adoc:896 src/plasma/qtplasmac.adoc:911
#: src/plasma/qtplasmac.adoc:929 src/plasma/qtplasmac.adoc:946
#: src/plasma/qtplasmac.adoc:957 src/plasma/qtplasmac.adoc:1024
#: src/plasma/qtplasmac.adoc:1045 src/plasma/qtplasmac.adoc:1061
#: src/plasma/qtplasmac.adoc:1071 src/plasma/qtplasmac.adoc:1081
#: src/plasma/qtplasmac.adoc:1091 src/plasma/qtplasmac.adoc:1108
#: src/plasma/qtplasmac.adoc:1142 src/plasma/qtplasmac.adoc:1204
#: src/plasma/qtplasmac.adoc:1524 src/plasma/qtplasmac.adoc:1537
#: src/plasma/qtplasmac.adoc:1551 src/plasma/qtplasmac.adoc:1790
#: src/plasma/qtplasmac.adoc:2338 src/plasma/qtplasmac.adoc:2581
#: src/plasma/qtplasmac.adoc:3745 src/plasma/qtplasmac.adoc:3961
#: src/plasma/qtplasmac.adoc:4034 html/gcode.html:54
#, no-wrap
msgid "Description"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:290
#, no-wrap
msgid "G00 X Y Z"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:291
#, no-wrap
msgid "rapid feed"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:291
#, no-wrap
msgid "G01 X Y Z"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:292
#, no-wrap
msgid "linear feed, e.g., G01 X10 Y20 Z30 F60 for 60 ipm"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:292
#, no-wrap
msgid "G02 X Y Z I J"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:293
#, no-wrap
msgid "clockwise circular feed (helical with Z)"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:293
#, no-wrap
msgid "G03 X Y Z I J"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:294
#, no-wrap
msgid "counterclockwise circular feed (helical with Z)"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:294
#, no-wrap
msgid "G04 P<#>"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:295
#, no-wrap
msgid "dwell # of seconds"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:295
#, no-wrap
msgid "G10 L2 P<#> X Y Z"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:296
#, no-wrap
msgid "set coordinates for system #1-9, 1 = G54, 9 = G59.3"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:296 src/gcode/overview.adoc:476
#: src/remap/remap.adoc:2165
#, no-wrap
msgid "G17"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:297
#, no-wrap
msgid "XY plane circular interpolation"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:297 src/gcode/overview.adoc:477
#: src/remap/remap.adoc:2166
#, no-wrap
msgid "G18"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:298
#, no-wrap
msgid "ZX plane circular interpolation"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:298 src/gcode/overview.adoc:478
#: src/remap/remap.adoc:2167
#, no-wrap
msgid "G19"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:299
#, no-wrap
msgid "YZ plane circular interpolation"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:299 src/remap/remap.adoc:2174
#, no-wrap
msgid "G20"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:300
#, no-wrap
msgid "English units (inches)"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:300 src/remap/remap.adoc:2175
#, no-wrap
msgid "G21"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:301
#, no-wrap
msgid "metric units (millimeters)"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:301 src/code/code-notes.adoc:1403
#: src/gcode/overview.adoc:489 src/remap/remap.adoc:2206
#: src/remap/remap.adoc:2215
#, no-wrap
msgid "G40"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:302
#, no-wrap
msgid "cancel cutter compensation"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:302
#, no-wrap
msgid "G41 D<#>"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:303
#, no-wrap
msgid "cutter compensation for tool <#>, tool on left"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:303
#, no-wrap
msgid "G42 D<#>"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:304
#, no-wrap
msgid "cutter compensation for tool <#>, tool on right"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:304
#, no-wrap
msgid "G43 H<#>"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:305
#, no-wrap
msgid "use tool length offset for tool #, 0 = no offset"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:305
#, no-wrap
msgid "G49"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:306
#, no-wrap
msgid "cancel tool length offset"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:306 src/remap/remap.adoc:2225
#, no-wrap
msgid "G53"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:307
#, no-wrap
msgid "turn any coordinate offsets off for this block"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:307 src/gcode/g-code.adoc:776
#: src/gcode/g-code.adoc:1569 src/gcode/overview.adoc:511
#: src/remap/remap.adoc:2226
#, no-wrap
msgid "G54"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:308
#, no-wrap
msgid "use coordinate offsets for system #1, from G10 L2 P1"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:308 src/gcode/g-code.adoc:777
#: src/gcode/g-code.adoc:1570 src/gcode/overview.adoc:512
#: src/remap/remap.adoc:2227
#, no-wrap
msgid "G55"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:309
#, no-wrap
msgid "\"\" for system #2, from G10 L2 P2"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:309 src/gcode/g-code.adoc:778
#: src/gcode/g-code.adoc:1571 src/gcode/overview.adoc:513
#: src/remap/remap.adoc:2228
#, no-wrap
msgid "G56"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:310
#, no-wrap
msgid "\"\" for system #3, from G10 L2 P3"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:310 src/gcode/g-code.adoc:779
#: src/gcode/g-code.adoc:1572 src/gcode/overview.adoc:514
#: src/remap/remap.adoc:2229
#, no-wrap
msgid "G57"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:311
#, no-wrap
msgid "\"\" for system #4, from G10 L2 P4"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:311 src/gcode/g-code.adoc:780
#: src/gcode/g-code.adoc:1573 src/gcode/overview.adoc:515
#: src/remap/remap.adoc:2230
#, no-wrap
msgid "G58"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:312
#, no-wrap
msgid "\"\" for system #5, from G10 L2 P5"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:312 src/gcode/g-code.adoc:781
#: src/gcode/g-code.adoc:1574 src/gcode/overview.adoc:516
#: src/remap/remap.adoc:2231
#, no-wrap
msgid "G59"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:313
#, no-wrap
msgid "\"\" for system #6, from G10 L2 P6"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:313 src/gcode/g-code.adoc:782
#: src/gcode/g-code.adoc:1575 src/gcode/overview.adoc:517
#: src/remap/remap.adoc:2231
#, no-wrap
msgid "G59.1"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:314
#, no-wrap
msgid "\"\" for system #7, G10 L2 P7"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:314 src/gcode/g-code.adoc:783
#: src/gcode/g-code.adoc:1576 src/gcode/overview.adoc:518
#: src/remap/remap.adoc:2231
#, no-wrap
msgid "G59.2"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:315
#, no-wrap
msgid "\"\" for system #8, G10 L2 P8"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:315 src/gcode/g-code.adoc:784
#: src/gcode/g-code.adoc:1577 src/gcode/overview.adoc:519
#: src/remap/remap.adoc:2231
#, no-wrap
msgid "G59.3"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:316
#, no-wrap
msgid "\"\" for system #9, G10 L2 P9"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:316 src/remap/remap.adoc:2239
#, no-wrap
msgid "G61"
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:317 src/gcode/machining-center.adoc:257
#, no-wrap
msgid "exact stop mode"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:317 src/remap/remap.adoc:2242
#, no-wrap
msgid "G64"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:318
#, no-wrap
msgid "cutting mode"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:318 src/gcode/overview.adoc:458
#: src/remap/remap.adoc:2260
#, no-wrap
msgid "G76"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:319
#, no-wrap
msgid "threading canned cycle"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:319 src/gcode/overview.adoc:459
#: src/remap/remap.adoc:2270
#, no-wrap
msgid "G80"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:320
#, no-wrap
msgid "cancel fixed (canned) cycle"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:320 src/gcode/overview.adoc:460
#: src/remap/remap.adoc:2271
#, no-wrap
msgid "G81"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:321
#, no-wrap
msgid "drilling cycle, no dwell, rapid out"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:321 src/gcode/overview.adoc:461
#: src/remap/remap.adoc:2272
#, no-wrap
msgid "G82"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:322
#, no-wrap
msgid "drilling cycle, dwell, rapid out"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:322 src/gcode/overview.adoc:462
#: src/remap/remap.adoc:2273
#, no-wrap
msgid "G83"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:323
#, no-wrap
msgid "deep hole peck drilling cycle"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:323 src/gcode/overview.adoc:463
#: src/remap/remap.adoc:2274
#, no-wrap
msgid "G84"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:324
#, no-wrap
msgid "tapping cycle"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:324 src/gcode/overview.adoc:464
#: src/remap/remap.adoc:2275
#, no-wrap
msgid "G85"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:325
#, no-wrap
msgid "boring cycle, no dwell, feed out"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:325 src/gcode/overview.adoc:465
#: src/remap/remap.adoc:2276
#, no-wrap
msgid "G86"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:326
#, no-wrap
msgid "boring cycle, spindle stop, rapid out"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:326 src/gcode/overview.adoc:466
#: src/remap/remap.adoc:2277
#, no-wrap
msgid "G87"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:327
#, no-wrap
msgid "back boring cycle"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:327 src/gcode/overview.adoc:467
#: src/remap/remap.adoc:2278
#, no-wrap
msgid "G88"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:328
#, no-wrap
msgid "boring cycle, spindle stop, manual out"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:328 src/gcode/overview.adoc:468
#: src/remap/remap.adoc:2279
#, no-wrap
msgid "G89"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:329
#, no-wrap
msgid "boring cycle, with dwell, feed out"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:329 src/remap/remap.adoc:2286
#, no-wrap
msgid "G90"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:330
#, no-wrap
msgid "non-incremental programming (the usual)"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:330 src/remap/remap.adoc:2287
#, no-wrap
msgid "G91"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:331
#, no-wrap
msgid "incremental programming"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:331 src/remap/remap.adoc:2289
#, no-wrap
msgid "G93"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:332
#, no-wrap
msgid "inverse time feed mode"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:332 src/remap/remap.adoc:2290
#, no-wrap
msgid "G94"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:333
#, no-wrap
msgid "feed per minute mode (the usual)"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:333
#, no-wrap
msgid "G98,G99"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:334
#, no-wrap
msgid "set canned cycle return level"
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:336 src/remap/remap.adoc:324
#, no-wrap
msgid "M-codes"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:340
#, no-wrap
msgid "M0"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:341
#, no-wrap
msgid "optional program stop"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:341
#, no-wrap
msgid "M1"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:342
#, no-wrap
msgid "program stop"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:342
#, no-wrap
msgid "M2"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:343
#, no-wrap
msgid "program end"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:343
#, no-wrap
msgid "M3"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:344
#, no-wrap
msgid "turn spindle clockwise, e.g., S1000 M3 for 1000 rpm"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:344
#, no-wrap
msgid "M4"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:345
#, no-wrap
msgid "turn spindle counterclockwise"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:345
#, no-wrap
msgid "M5"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:346
#, no-wrap
msgid "turn spindle off"
msgstr ""

#. type: Title ====
#: help/tklinuxcnc.adoc:346 src/code/code-notes.adoc:1266
#, no-wrap
msgid "M6"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:347
#, no-wrap
msgid "tool change, e.g., T1 M6 for tool 1"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:347
#, no-wrap
msgid "M7"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:348
#, no-wrap
msgid "mist coolant on"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:348
#, no-wrap
msgid "M8"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:349
#, no-wrap
msgid "flood coolant on"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:349
#, no-wrap
msgid "M9"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:350
#, no-wrap
msgid "all coolant off"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:350
#, no-wrap
msgid "M48"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:351
#, no-wrap
msgid "disable override control for M50-51 switches"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:351
#, no-wrap
msgid "M49"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:352
#, no-wrap
msgid "enable override control for M50-51 switches"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:352
#, no-wrap
msgid "M50"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:353
#, no-wrap
msgid "enable/disable feed override"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:353
#, no-wrap
msgid "M51"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:354
#, no-wrap
msgid "enable/disable spindle speed override"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:354
#, no-wrap
msgid "M52"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:355
#, no-wrap
msgid "enable/disable adaptive feed override"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:355
#, no-wrap
msgid "M53"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:356
#, no-wrap
msgid "enable/disable feed hold"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:356
#, no-wrap
msgid "M62"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:357
#, no-wrap
msgid ".."
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:358
#, no-wrap
msgid "digital IO control"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:358
#, no-wrap
msgid "M65"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:359
#, no-wrap
msgid "M100..M199"
msgstr ""

#. type: Table
#: help/tklinuxcnc.adoc:360
#, no-wrap
msgid "user defined commands"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:363
msgid "(check the user manual for details)."
msgstr ""

#. type: Title ==
#: help/tklinuxcnc.adoc:364
#, no-wrap
msgid "Frequently Asked Questions (FAQ)"
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:367
#, no-wrap
msgid "The axes don't move when I try to jog them"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:369
msgid "Make sure you're out of estop, in Manual mode."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:370
#, no-wrap
msgid "Software limits don't work. I can jog past a soft limit."
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:373
msgid ""
"Software limits only work when an axis has been homed, since otherwise the "
"machine doesn't know where the limits really are."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:374
#, no-wrap
msgid "Why doesn't the mouse or return key work?"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:377
msgid ""
"Sometimes the cursor needs to be in the part of the window with the text in "
"it. Move the cursor to a different region and try it."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:378
#, no-wrap
msgid "Why are the modal G- and M-codes not correct in Auto mode?"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:381
msgid ""
"The modes that will be active when you enter MDI mode are shown. These are "
"read ahead of actual program execution."
msgstr ""

#. type: Labeled list
#: help/tklinuxcnc.adoc:382
#, no-wrap
msgid "How can I change the fonts/colors/sizes in the Tkemc display?"
msgstr ""

#. type: Plain text
#: help/tklinuxcnc.adoc:386
msgid ""
"The \"Tkemc\" file in the emc/ directory contains the X resources used by "
"the program. Almost nothing is hard coded in the program itself. You can "
"change any of these values and see the effects."
msgstr ""

#. type: Title =
#: src/code/adding-configs.adoc:3
#, no-wrap
msgid "Adding Configuration Selection Items"
msgstr ""

#. type: Plain text
#: src/code/adding-configs.adoc:7
msgid ""
"Example Configurations can be added to the Configuration Selector by two "
"methods:"
msgstr ""

#. type: Plain text
#: src/code/adding-configs.adoc:12
msgid ""
"Auxiliary applications -- Applications installed independently with a deb "
"package can place configuration subdirectories in a specified system "
"directory.  The directory name is specified using the shell linuxcnc_var "
"script:"
msgstr ""

#. type: delimited block -
#: src/code/adding-configs.adoc:16
#, no-wrap
msgid ""
"$ linuxcnc_var LINUXCNC_AUX_EXAMPLES\n"
"/usr/share/linuxcnc/aux_examples\n"
msgstr ""

#. type: Plain text
#: src/code/adding-configs.adoc:25
msgid ""
"Runtime settings -- the configuration selector can also offer configuration "
"subdirectories specified at runtime using an exported environamental "
"variable (LINUXCNC_AUX_CONFIGS).  This variable should be a path list of one "
"or more configuration directories separated by a (:).  Typically, this "
"variable would be set in a shell starting linuxcnc or in a user's ~/.profile "
"startup script.  Example:"
msgstr ""

#. type: delimited block -
#: src/code/adding-configs.adoc:28
#, no-wrap
msgid "export LINUXCNC_AUX_CONFIGS=~/myconfigs:/opt/otherconfigs\n"
msgstr ""

#. type: Title =
#: src/code/building-linuxcnc.adoc:4
#, no-wrap
msgid "Building LinuxCNC"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:14
msgid ""
"This document describes how to build the LinuxCNC software and documentation "
"from source.  This is primarily useful if you are a developer who is "
"modifying LinuxCNC.  It can also be useful if you're a user who is testing "
"developer branches, though then you also have the option of just installing "
"Debian packages from the buildbot: http://buildbot.linuxcnc.org"
msgstr ""

#. type: Title ===
#: src/code/building-linuxcnc.adoc:16
#, no-wrap
msgid "Quick Start"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:19
msgid "For the impatient, try this:"
msgstr ""

#. type: delimited block -
#: src/code/building-linuxcnc.adoc:26
#, no-wrap
msgid ""
"$ git clone https://github.com/LinuxCNC/linuxcnc.git linuxcnc-dev\n"
"$ cd linuxcnc-dev/src\n"
"$ ./autogen.sh\n"
"$ ./configure --with-realtime=uspace\n"
"$ make\n"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:32
msgid ""
"That will probably fail! That doesn't make you a bad person, it just means "
"you should read this whole document to find out how to fix your problems.  "
"Especially the section on <<Satisfying-Build-Dependencies, Satisfying Build "
"Dependencies>>."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:36
msgid ""
"If you are running on a realtime-capable system (such as an install from the "
"LinuxCNC Live/Install Image, see the <<sub:realtime,Realtime>> section "
"below), one extra build step is needed at this time:"
msgstr ""

#. type: delimited block -
#: src/code/building-linuxcnc.adoc:39 src/code/building-linuxcnc.adoc:90
#, no-wrap
msgid "$ sudo make setuid\n"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:42
msgid "After you've successfully built LinuxCNC it's time to run the tests:"
msgstr ""

#. type: delimited block -
#: src/code/building-linuxcnc.adoc:46
#, no-wrap
msgid ""
"$ source ../scripts/rip-environment\n"
"$ runtests\n"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:50
msgid ""
"This might fail too! Read this whole document, but especially the section on "
"<<Setting-up-the-environment,Setting up the test environment>>."
msgstr ""

#. type: Title ==
#: src/code/building-linuxcnc.adoc:51
#, no-wrap
msgid "Supported Platforms"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:55
msgid ""
"The LinuxCNC project targets modern Debian-based distributions, including "
"Debian, Ubuntu, and Mint."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:58
msgid ""
"We continuously test on the platforms listed at http://buildbot.linuxcnc.org."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:62
msgid ""
"LinuxCNC builds on most other Linux distributions, though dependency "
"management will be more manual and less automatic. Patches to improve "
"portability to new platforms are always welcome."
msgstr ""

#. type: Title ===
#: src/code/building-linuxcnc.adoc:64
#, no-wrap
msgid "Realtime"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:68
msgid ""
"LinuxCNC is a machine tool controller, and it requires a realtime platform "
"to do this job. This version of LinuxCNC supports three realtime platforms"
msgstr ""

#. type: Table
#: src/code/building-linuxcnc.adoc:69 src/common/glossary.adoc:297
#: src/config/integrator-concepts.adoc:261
#: src/getting-started/getting-linuxcnc.adoc:272
#: src/getting-started/getting-linuxcnc.adoc:274
#: src/getting-started/getting-linuxcnc.adoc:277
#, no-wrap
msgid "RTAI"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:73
msgid ""
"From https://www.rtai.org. A Linux kernel with the RTAI patch is available "
"from the Debian archive at http://www.linuxcnc.org. See <<cha:getting-"
"linuxcnc,Getting LinuxCNC>> for installation instructions."
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:74
#, no-wrap
msgid "Xenomai"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:77
msgid ""
"From https://xenomai.org. You will have to compile or obtain a Xenomai "
"kernel yourself."
msgstr ""

#. type: Table
#: src/code/building-linuxcnc.adoc:78
#: src/getting-started/getting-linuxcnc.adoc:275
#, no-wrap
msgid "Preempt-RT"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:83
msgid ""
"From https://rt.wiki.kernel.org. A Linux kernel with the Preempt-RT patch is "
"occasionally available from the Debian archive at https://www.debian.org, "
"and from the wayback machine at https://snapshot.debian.org."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:87
msgid ""
"To make use of the realtime capabilities of LinuxCNC, certain parts of "
"LinuxCNC need to run with root privileges.  To enable root for these parts, "
"run this extra command after the `make` that builds LinuxCNC:"
msgstr ""

#. type: Title ===
#: src/code/building-linuxcnc.adoc:92
#, no-wrap
msgid "Non-realtime"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:96
msgid ""
"LinuxCNC can also be built and run on non-realtime platforms, such as a "
"regular install of Debian or Ubuntu without any special realtime kernel."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:101
msgid ""
"In this mode LinuxCNC is not useful for controlling machine tools, but it is "
"useful for simulating the execution of G-code and for testing the non-"
"realtime parts of the system (such as the user interfaces, and some kinds of "
"components and device drivers)."
msgstr ""

#. type: Title ==
#: src/code/building-linuxcnc.adoc:102
#, no-wrap
msgid "Build modes"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:106
msgid ""
"There are two ways to build LinuxCNC: the developer-friendly \"run in place"
"\" mode and the user-friendly Debian packaging mode."
msgstr ""

#. type: Title ===
#: src/code/building-linuxcnc.adoc:107
#, no-wrap
msgid "Building for Run In Place"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:112
msgid ""
"In a Run-In-Place build, the LinuxCNC programs are compiled from source and "
"then run directly from within the build directory.  Nothing is installed "
"outside the build directory."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:114
msgid "This is quick and easy, and suitable for rapid iteration of changes."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:116
msgid "The LinuxCNC test suite runs only in a Run-In-Place build."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:118
msgid "Most LinuxCNC developers primarily build using this mode."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:122
msgid ""
"Building for Run-In-Place follows the steps in the <<Quick-Start,Quick "
"Start>> section at the top of this document, possibly with different "
"arguments to `src/configure` and `make`."
msgstr ""

#. type: Title ====
#: src/code/building-linuxcnc.adoc:124
#, no-wrap
msgid "`src/configure` arguments"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:128
msgid ""
"The `src/configure` script configures how the source code will be compiled.  "
"It takes many optional arguments."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:130
msgid "List all arguments to `src/configure` by running this:"
msgstr ""

#. type: delimited block -
#: src/code/building-linuxcnc.adoc:134
#, no-wrap
msgid ""
"$ cd linuxcnc-dev/src\n"
"$ ./configure --help\n"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:137
msgid "The most commonly used arguments are:"
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:138
#, no-wrap
msgid "`--with-realtime=uspace`"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:147
msgid ""
"Build for any realtime platform, or for non-realtime.  The resulting "
"LinuxCNC executables will run on both a Linux kernel with Preempt-RT patches "
"(providing realtime machine control) and on a vanilla (un-patched) Linux "
"kernel (providing G-code simulation but no realtime machine control).  If "
"development files are installed for Xenomai (typically from package "
"libxenomai-dev) or RTAI (typically from a package with a name starting "
"\"rtai-modules\"), support for these real-time kernels will also be enabled."
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:148
#, no-wrap
msgid "`--with-realtime=/usr/realtime-$VERSION`"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:155
msgid ""
"Build for the RTAI realtime platform using the older \"kernel realtime\" "
"model.  This requires that you have an RTAI kernel and the RTAI modules "
"installed in `/usr/realtime-$VERSION`. The resulting LinuxCNC executables "
"will only run on the specified RTAI kernel. As of LinuxCNC 2.7, this "
"produces the best realtime performance."
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:156
#, no-wrap
msgid "`--enable-build-documentation`"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:161
msgid ""
"Build the documentation, in addition to the executables.  This option adds "
"significantly to the time required for compilation, as building the docs is "
"quite time consuming.  If you are not actively working on the documentation "
"you may want to omit this argument."
msgstr ""

#. type: Title ====
#: src/code/building-linuxcnc.adoc:163
#, no-wrap
msgid "`make` arguments"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:166
msgid "The `make` command takes two useful optional arguments."
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:167
#, no-wrap
msgid "Parallel compilation"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:171
msgid ""
"`make` takes an optional argument `-jN` (where N is a number).  This enables "
"parallel compilation with N simultaneous processes, which can significantly "
"speed up your build."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:174
msgid ""
"A useful value for N is the number of CPUs in your build system.  You can "
"discover the number of CPUs by running `nproc`."
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:175
#, no-wrap
msgid "Building just a specific target"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:180
msgid ""
"If you want to build just a specific part of LinuxCNC, you can name the "
"thing you want to build on the `make` command line.  For example, if you are "
"working on a component named `froboz`, you can build its executable by "
"running:"
msgstr ""

#. type: delimited block -
#: src/code/building-linuxcnc.adoc:184
#, no-wrap
msgid ""
"$ cd linuxcnc-dev/src\n"
"$ make ../bin/froboz\n"
msgstr ""

#. type: Title ===
#: src/code/building-linuxcnc.adoc:186
#, no-wrap
msgid "Building Debian Packages"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:192
msgid ""
"When building Debian packages, the LinuxCNC programs are compiled from "
"source and then stored in a Debian package, complete with dependency "
"information.  This takes more time, and the programs can't be used until the "
"Debian package is installed on a target machine."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:197
msgid ""
"This build mode is primarily useful when packaging the software for delivery "
"to end users, and when building the software for a machine that doesn't have "
"the build environment installed, or that doesn't have internet access."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:200
msgid ""
"Building Debian packages requires the `dpkg-buildpackage` tool, from the "
"`dpkg-dev` package:"
msgstr ""

#. type: delimited block -
#: src/code/building-linuxcnc.adoc:203 src/code/building-linuxcnc.adoc:300
#, no-wrap
msgid "$ sudo apt-get install dpkg-dev\n"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:208
msgid ""
"Building Debian packages also requires that all build dependencies are "
"installed, as described in the section <<Satisfying-Build-Dependencies, "
"Satisfying Build Dependencies>>."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:211
msgid ""
"Once those prerequisites are met, building the Debian packages consists of "
"two steps."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:214
msgid ""
"The first step is generating the Debian package scripts and meta-data from "
"the git repo by running this:"
msgstr ""

#. type: delimited block -
#: src/code/building-linuxcnc.adoc:219 src/code/building-linuxcnc.adoc:309
#, no-wrap
msgid ""
"$ cd linuxcnc-dev/debian\n"
"$ ./configure uspace\n"
"$ cd ..\n"
msgstr ""

#. type: delimited block =
#: src/code/building-linuxcnc.adoc:225
msgid ""
"The `debian/configure` script is different from the `src/configure` script!"
msgstr ""

#. type: delimited block =
#: src/code/building-linuxcnc.adoc:229
msgid ""
"The `debian/configure` script needs different arguments depending on the "
"platform you're building on/for, see the <<debian-configure-arguments, "
"`debian/configure` arguments>> section."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:234
msgid ""
"Once the Debian package scripts and meta-data are configured, build the "
"package by running `dpkg-buildpackage` (note that it needs to run from the "
"`linuxcnc-dev` directory, *not* from `linuxcnc-dev/debian`):"
msgstr ""

#. type: delimited block -
#: src/code/building-linuxcnc.adoc:237
#, no-wrap
msgid "$ dpkg-buildpackage -b -uc\n"
msgstr ""

#. type: Title ====
#: src/code/building-linuxcnc.adoc:240
#, no-wrap
msgid "`debian/configure` arguments"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:244
msgid ""
"The `debian/configure` script configures the Debian packaging.  It must be "
"run before `dpkg-checkbuilddeps` and `dpkg-buildpackage` can be run."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:247
msgid ""
"It takes a single argument which specifies the realtime or non-realtime "
"platform to build for.  The normal values for this argument are:"
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:248
#, no-wrap
msgid "`uspace`"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:251
msgid ""
"Configure the Debian package for Preempt-RT realtime or for non-realtime "
"(these two are compatible)."
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:252
#, no-wrap
msgid "`noauto`"
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:253
#, no-wrap
msgid "`rtai`"
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:254
#, no-wrap
msgid "`xenomai`"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:259
msgid ""
"Normally, the lists of RTOSes for uspace realtime to support is detected "
"automatically.  However, if you wish, you may specify one or more of these "
"after `uspace` to enable support for these RTOSes.  Or, to disable "
"autodetection, specify `noauto`."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:262
msgid ""
"If you want just the traditional RTAI \"kernel module\" realtime, use `-r` "
"or `$KERNEL_VERSION` instead."
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:263
#, no-wrap
msgid "`rtai=<package name>`"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:267
msgid ""
"If the development package for rtai lxrt does not start with \"rtai-modules"
"\", or if the first such package listed by apt-cache search is not the "
"desired one, then explicitly specify the package name."
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:268
#, no-wrap
msgid "`-r`"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:272
msgid ""
"Configure the Debian package for the currently running RTAI kernel.  You "
"must be running an RTAI kernel on your build machine for this to work!"
msgstr ""

#. type: Labeled list
#: src/code/building-linuxcnc.adoc:273
#, no-wrap
msgid "`$KERNEL_VERSION`"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:281
msgid ""
"Configure the debian package for the specified RTAI kernel version (for "
"example \"3.4.9-rtai-686-pae\").  The matching kernel headers debian package "
"must be installed on your build machine (for example \"linux-headers-3.4.9-"
"rtai-686-pae\").  Note that you can _build_ LinuxCNC in this configuration, "
"but if you are not running the matching RTAI kernel you will not be able to "
"_run_ LinuxCNC, including the test suite."
msgstr ""

#. type: Title ==
#: src/code/building-linuxcnc.adoc:283
#, no-wrap
msgid "Satisfying Build Dependencies"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:290
msgid ""
"On Debian-based platforms we provide packaging meta-data that knows what "
"external software packages need to be installed in order to build LinuxCNC.  "
"This is called the Build Dependencies of LinuxCNC.  You can use this meta-"
"data to easily list the required packages missing from your build system."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:295
msgid ""
"Debian systems provide a program called `dpkg-checkbuilddeps` that parses "
"the package meta-data and compares the packages listed as build dependencies "
"against the list of installed packages, and tells you what's missing."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:297
msgid "First, install the `dpkg-checkbuilddeps` program by running:"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:304
msgid ""
"Then ask your LinuxCNC git checkout to generate its Debian package meta-data:"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:313
msgid ""
"Finally ask `dpkg-checkbuilddeps` to do its job (note that it needs to run "
"from the `linuxcnc-dev` directory, *not* from `linuxcnc-dev/debian`):"
msgstr ""

#. type: delimited block -
#: src/code/building-linuxcnc.adoc:316
#, no-wrap
msgid "$ dpkg-checkbuilddeps\n"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:321
msgid ""
"It will emit a list of packages that are required to build LinuxCNC on your "
"system, but that are not installed yet.  Install them all with `sudo apt-get "
"install`, followed by the package names."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:324
msgid ""
"You can rerun `dpkg-checkbuilddeps` any time you want, to list any missing "
"packages."
msgstr ""

#. type: Title ==
#: src/code/building-linuxcnc.adoc:326
#, no-wrap
msgid "Setting up the environment"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:330
msgid ""
"This section describes the special steps needed to set up a machine to run "
"the LinuxCNC programs, including the tests."
msgstr ""

#. type: Title ===
#: src/code/building-linuxcnc.adoc:331
#, no-wrap
msgid "Increase the locked memory limit"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:336
msgid ""
"LinuxCNC tries to improve its realtime latency by locking the memory it uses "
"into RAM.  It does this in order to prevent the operating system from "
"swapping LinuxCNC out to disk, which would have bad effects on latency."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:339
msgid ""
"Normally locking memory into RAM is frowned upon, and the operating system "
"places a strict limit on how much memory a user is allowed to have locked."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:344
msgid ""
"When using the Preempt-RT realtime platform LinuxCNC runs with enough "
"privilege to raise its memory lock limit itself.  When using the RTAI "
"realtime platform it does not have enough privilege, and the user must raise "
"the memory lock limit."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:347
msgid ""
"If LinuxCNC displays the following message on startup, the problem is your "
"system's configured limit on locked memory:"
msgstr ""

#. type: delimited block -
#: src/code/building-linuxcnc.adoc:351
#, no-wrap
msgid ""
"RTAPI: ERROR: failed to map shmem\n"
"RTAPI: Locked memory limit is 32KiB, recommended at least 20480KiB.\n"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:357
msgid ""
"To fix this problem, add a file named `/etc/security/limits.d/linuxcnc.conf` "
"(as root) with your favorite text editor (e.g., `sudo gedit /etc/security/"
"limits.d/linuxcnc.conf`).  The file should contain the following line:"
msgstr ""

#. type: delimited block -
#: src/code/building-linuxcnc.adoc:360
#, no-wrap
msgid "* - memlock 20480\n"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:364
msgid ""
"Log out and log back in to make the changes take effect.  Verify that the "
"memory lock limit is raised using the following command:"
msgstr ""

#. type: delimited block -
#: src/code/building-linuxcnc.adoc:367
#, no-wrap
msgid "$ ulimit -l\n"
msgstr ""

#. type: Title ==
#: src/code/building-linuxcnc.adoc:369
#, no-wrap
msgid "Options for checking out the git repo"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:375
msgid ""
"The <<Quick-Start,Quick Start>> instructions at the top of this document "
"clone our git repo at https://github.com/LinuxCNC/linuxcnc.git.  This is the "
"quickest, easiest way to get started.  However, there are other options to "
"consider."
msgstr ""

#. type: Title ===
#: src/code/building-linuxcnc.adoc:376
#, no-wrap
msgid "Fork us on Github"
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:382
msgid ""
"The LinuxCNC project git repo is at http://github.com/LinuxCNC/linuxcnc.  "
"github is a popular git hosting service and code sharing website.  You can "
"easily (and for no cost) create a fork of our git repo at github, and use "
"that to track and publish your changes."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:385
msgid ""
"After creating your own github fork of LinuxCNC, clone it to your "
"development machine and proceed with your hacking as usual."
msgstr ""

#. type: Plain text
#: src/code/building-linuxcnc.adoc:390
msgid ""
"We of the LinuxCNC project hope that you will share your changes with us, so "
"that the community can benefit from your work.  Github makes this sharing "
"very easy: after you polish your changes and push them to your github fork, "
"send us a Pull Request."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:5 src/motion/switchkins.adoc:370
#, no-wrap
msgid "Code Notes"
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:13
#, no-wrap
msgid "Intended audience"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:20
msgid ""
"This document is a collection of notes about the internals of LinuxCNC. It "
"is primarily of interest to developers, however much of the information here "
"may also be of interest to system integrators and others who are simply "
"curious about how LinuxCNC works. Much of this information is now outdated "
"and has never been reviewed for accuracy."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:21
#, no-wrap
msgid "Organization"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:26
msgid ""
"There will be a chapter for each of the major components of LinuxCNC, as "
"well as chapter(s) covering how they work together. This document is very "
"much a work in progress, and its layout may change in the future."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:27
#, no-wrap
msgid "Terms and definitions"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:49
msgid ""
"'AXIS' - An axis is one of the nine degrees of freedom that define a tool "
"position in three-dimensional Cartesian space. Those nine axes are referred "
"to as X, Y, Z, A, B, C, U, V, and W. The linear orthogonal coordinates X, Y, "
"and Z determine where the tip of the tool is positioned. The angular "
"coordinates A, B, and C determine the tool orientation. A second set of "
"linear orthogonal coordinates U, V, and W allows tool motion (typically for "
"cutting actions) relative to the previously offset and rotated axes.  "
"Unfortunately \"axis\" is also sometimes used to mean a degree of freedom of "
"the machine itself, such as the saddle, table, or quill of a Bridgeport type "
"milling machine. On a Bridgeport this causes no confusion, since movement of "
"the table directly corresponds to movement along the X axis. However, the "
"shoulder and elbow joints of a robot arm and the linear actuators of a "
"hexapod do not correspond to movement along any Cartesian axis, and in "
"general it is important to make the distinction between the Cartesian axes "
"and the machine degrees of freedom. In this document, the latter will be "
"called 'joints', not axes. The GUIs and some other parts of the code may not "
"always follow this distinction, but the internals of the motion controller "
"do."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:67
msgid ""
"'JOINT' - A joint is one of the movable parts of the machine. Joints are "
"distinct from axes, although the two terms are sometimes (mis)used to mean "
"the same thing. In LinuxCNC, a joint is a physical thing that can be moved, "
"not a coordinate in space. For example, the quill, knee, saddle, and table "
"of a Bridgeport mill are all joints. The shoulder, elbow, and wrist of a "
"robot arm are joints, as are the linear actuators of a hexapod. Every joint "
"has a motor or actuator of some type associated with it. Joints do not "
"necessarily correspond to the X, Y, and Z axes, although for machines with "
"trivial kinematics that may be the case.  Even on those machines, joint "
"position and axis position are fundamentally different things. In this "
"document, the terms 'joint' and 'axis' are used carefully to respect their "
"distinct meanings.  Unfortunately that isn't necessarily true everywhere "
"else. In particular, GUIs for machines with trivial kinematics may gloss "
"over or completely hide the distinction between joints and axes. In "
"addition, the INI file uses the term 'axis' for data that would more "
"accurately be described as joint data, such as input and output scaling, etc."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:74
msgid ""
"This distinction was made in version 2.8 of LinuxCNC.  The INI file got a "
"new section [JOINT_<num>]. Many of the parameters that were previously "
"proper to the [AXIS_<letter>] section are now in the new section. Other "
"sections, such as [KINS], also take on new parameters to match this.  An "
"update script has been provided to transform old INI files to the new axes/"
"joints configuration."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:79
msgid ""
"'POSE' - A pose is a fully specified position in 3D Cartesian space. In the "
"LinuxCNC motion controller, when we refer to a pose we mean an EmcPose "
"structure, containing six linear coordinates (X, Y, Z, U, V, and W) and "
"three angular ones (A, B, and C)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:85
msgid ""
"'coord', or coordinated mode, means that all articulations are synchronized "
"and they move together as directed by the higher-level code. It is the "
"normal mode when machining.  In coordinated mode, commands are assumed to be "
"given in the Cartesian reference frame, and if the machine is not Cartesian, "
"the commands are translated by the kinematics to drive each joint into the "
"joint space as needed."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:91
msgid ""
"'free' means that commands are interpreted in joint space.  It is used to "
"manually move (jog) individual joints, although it does not prevent them "
"from moving multiple joints at once (I think).  Homing is also done in free "
"mode; in fact, machines with non-trivial kinematics must be homed before "
"they can go into coord or teleop mode."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:97
msgid ""
"'teleop' is the mode you probably need if you are jogging with a hexapod.  "
"The jog commands implemented by the motion controller are joint jogs, which "
"work in free mode. But if you want to move a hexapod or similar machine "
"along a cartesian axis in particular, you must operate more than one joint.  "
"That's what 'teleop' is for."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:98
#, no-wrap
msgid "Architecture overview"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:107
msgid ""
"There are four components contained in the LinuxCNC Architecture: a motion "
"controller (EMCMOT), a discrete IO controller (EMCIO), a task executor which "
"coordinates them (EMCTASK) and several text-mode and graphical User "
"Interfaces. Each of them will be described in the current document, both "
"from the design point of view and from the developers point of view (where "
"to find needed data, how to easily extend/modify things, etc.)."
msgstr ""

#. type: Target for macro image
#: src/code/code-notes.adoc:108
#, no-wrap
msgid "LinuxCNC-block-diagram-small.png"
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:110
#, no-wrap
msgid "LinuxCNC software architecture"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:122
msgid ""
"At the coarsest level, LinuxCNC is a hierarchy of three controllers: the "
"task level command handler and program interpreter, the motion controller, "
"and the discrete I/O controller. The discrete I/O controller is implemented "
"as a hierarchy of controllers, in this case for spindle, coolant, and "
"auxiliary (e.g., estop, lube)  subsystems. The task controller coordinates "
"the actions of the motion and discrete I/O controllers. Their actions are "
"programmed in conventional numerical control \"G and M code\" programs, "
"which are interpreted by the task controller into NML messages and sent to "
"either the motion or discrete I/O controllers at the appropriate times."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:123
#, no-wrap
msgid "Motion Controller Introduction"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:136
msgid ""
"The motion controller receives commands from user space modules via a shared "
"memory buffer, and executes those commands in realtime. The status of the "
"controller is made available to the user space modules through the same "
"shared memory area. The motion controller interacts with the motors and "
"other hardware using the HAL (Hardware Abstraction Layer). This document "
"assumes that the reader has a basic understanding of the HAL, and uses terms "
"like HAL pins, HAL signals, etc, without explaining them. For more "
"information about the HAL, see the HAL Manual. Another chapter of this "
"document will eventually go into the internals of the HAL itself, but in "
"this chapter, we only use the HAL API as defined in src/hal/hal.h."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:137
#, no-wrap
msgid "Motion Controller Modules"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:142
msgid ""
"The realtime functions of the motion controller are implemented with modules "
"-- shared objects for rtpreempt systems or kernel modules for some "
"implementations (RTAI):"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:144
msgid "'tpmod' - trajectory planning"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:145
msgid "'homemod' - homing functions"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:146
msgid "'motmod' - processes NML commands and controls hardware via hal"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:148
msgid ""
"'kinematics module' - performs forward (joints-->coordinates) and inverse "
"(coordinates->joints) kinematics calculations"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:155
msgid ""
"LinuxCNC is started by a *linuxcnc* script which reads a configuration INI "
"file and starts all needed processes.  For realtime motion control, the "
"script first loads the default tpmod and homemod modules and then loads the "
"kinematics and motion modules according to settings in halfiles specified by "
"the INI file."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:161
msgid ""
"Custom (user-built) homing or trajectory-planning modules can be used in "
"place of the default modules via INI file settings or command line options.  "
"Custom modules must implement all functions used by the default modules.  "
"The halcompile utility can be used to create a custom module."
msgstr ""

#. type: Target for macro image
#: src/code/code-notes.adoc:162
#, no-wrap
msgid "LinuxCNC-motion-controller-small.png"
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:164
#, no-wrap
msgid "Block diagrams and Data Flow"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:173
msgid ""
"The following figure is a block diagram of a joint controller. There is one "
"joint controller per joint. The joint controllers work at a lower level than "
"the kinematics, a level where all joints are completely independent. All the "
"data for a joint is in a single joint structure. Some members of that "
"structure are visible in the block diagram, such as coarse_pos, pos_cmd, and "
"motor_pos_fb."
msgstr ""

#. type: Block title
#: src/code/code-notes.adoc:174
#, no-wrap
msgid "Joint Controller Block Diagram"
msgstr ""

#. type: Target for macro image
#: src/code/code-notes.adoc:175
#, no-wrap
msgid "emc2-motion-joint-controller-block-diag.png"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:180
msgid ""
"The above figure shows five of the seven sets of position information that "
"form the main data flow through the motion controller. The seven forms of "
"position data are as follows:"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:187
msgid ""
"'emcmotStatus\\->carte_pos_cmd' - This is the desired position, in Cartesian "
"coordinates. It is updated at the traj rate, not the servo rate. In coord "
"mode, it is determined by the traj planner. In teleop mode, it is determined "
"by the traj planner? In free mode, it is either copied from actualPos, or "
"generated by applying forward kins to (2) or (3)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:192
msgid ""
"'emcmotStatus\\->joints[n].coarse_pos' - This is the desired position, in "
"joint coordinates, but before interpolation. It is updated at the traj rate, "
"not the servo rate. In coord mode, it is generated by applying inverse kins "
"to (1) In teleop mode, it is generated by applying inverse kins to (1) In "
"free mode, it is copied from (3), I think."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:198
msgid ""
"'emcmotStatus\\->joints[n].pos_cmd - This is the desired position, in joint "
"coords, after interpolation. A new set of these coords is generated every "
"servo period. In coord mode, it is generated from (2)  by the interpolator. "
"In teleop mode, it is generated from (2) by the interpolator. In free mode, "
"it is generated by the free mode traj planner."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:203
msgid ""
"'emcmotStatus\\->joints[n].motor_pos_cmd' - This is the desired position, in "
"motor coords. Motor coords are generated by adding backlash compensation, "
"lead screw error compensation, and offset (for homing) to (3). It is "
"generated the same way regardless of the mode, and is the output to the PID "
"loop or other position loop."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:207
msgid ""
"'emcmotStatus\\->joints[n].motor_pos_fb' - This is the actual position, in "
"motor coords. It is the input from encoders or other feedback device (or "
"from virtual encoders on open loop machines). It is \"generated\" by reading "
"the feedback device."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:211
msgid ""
"'emcmotStatus\\->joints[n].pos_fb' - This is the actual position, in joint "
"coordinates. It is generated by subtracting offset, lead screw error "
"compensation, and backlash compensation from (5). It is generated the same "
"way regardless of the operating mode."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:224
msgid ""
"'emcmotStatus\\->carte_pos_fb' - This is the actual position, in Cartesian "
"coordinates. It is updated at the traj rate, not the servo rate.  Ideally, "
"actualPos would always be calculated by applying forward kinematics to (6). "
"However, forward kinematics may not be available, or they may be unusable "
"because one or more axes aren't homed. In that case, the options are: A) "
"fake it by copying (1), or B) admit that we don't really know the Cartesian "
"coordinates, and simply don't update actualPos. Whatever approach is used, I "
"can see no reason not to do it the same way regardless of the operating "
"mode. I would propose the following: If there are forward kins, use them, "
"unless they don't work because of unhomed axes or other problems, in which "
"case do (B). If no forward kins, do (A), since otherwise actualPos would "
"_never_ get updated."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:225 src/config/ini-config.adoc:1197
#: src/getting-started/updating-linuxcnc.adoc:1356
#: src/getting-started/updating-linuxcnc.adoc:1415 src/gui/halui.adoc:136
#: src/user/user-concepts.adoc:233
#, no-wrap
msgid "Homing"
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:227
#, no-wrap
msgid "Homing state diagram"
msgstr ""

#. type: Target for macro image
#: src/code/code-notes.adoc:229
#, no-wrap
msgid "homing.svg"
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:231
#, no-wrap
msgid "Another homing diagram"
msgstr ""

#. type: Target for macro image
#: src/code/code-notes.adoc:233
#, no-wrap
msgid "hss.svg"
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:235
#, no-wrap
msgid "Commands"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:242
msgid ""
"This section simply lists all of the commands that can be sent to the motion "
"module, along with detailed explanations of what they do. The command names "
"are defined in a large typedef enum in {linuxcnc}/src/emc/motion/motion.h, "
"called cmd_code_t. (Note that in the code, each command name starts with "
"'EMCMOT_', which is omitted here.)"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:246
msgid ""
"The commands are implemented by a large switch statement in the function "
"emcmotCommandHandler(), which is called at the servo rate.  More on that "
"function later."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:249
msgid ""
"There are approximately 44 commands - this list is still under construction."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:255
msgid ""
"The cmd_code_t enumeration, in motion.h, contains 73 commands, but the "
"switch statement in command.c contemplates only 70 commands (as of "
"6/5/2020).  ENABLE_WATCHDOG / DISABLE_WATCHDOG commands are in motion-logger."
"c. Maybe they are obsolete.  The SET_TELEOP_VECTOR command only appears in "
"motion-logger.c, with no effect other than its own log."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:256
#, no-wrap
msgid "ABORT"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:269
msgid ""
"The ABORT command simply stops all motion. It can be issued at any time, and "
"will always be accepted. It does not disable the motion controller or change "
"any state information, it simply cancels any motion that is currently in "
"progress.footnote:[It seems that the higher level code (TASK and above) also "
"use ABORT to clear faults.  Whenever there is a persistent fault (such as "
"being outside the hardware limit switches), the higher level code sends a "
"constant stream of ABORTs to the motion controller trying to make the fault "
"go away. Thousands of them.... That means that the motion controller should "
"avoid persistent faults. This needs to be looked into.]"
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:270 src/code/code-notes.adoc:295
#: src/code/code-notes.adoc:327 src/code/code-notes.adoc:355
#: src/code/code-notes.adoc:379 src/code/code-notes.adoc:396
#: src/code/code-notes.adoc:415 src/code/code-notes.adoc:432
#: src/code/code-notes.adoc:449 src/code/code-notes.adoc:466
#: src/code/code-notes.adoc:482 src/code/code-notes.adoc:498
#: src/code/code-notes.adoc:516 src/code/code-notes.adoc:530
#: src/code/code-notes.adoc:547 src/code/code-notes.adoc:565
#: src/code/code-notes.adoc:581 src/code/code-notes.adoc:602
#: src/code/code-notes.adoc:621 src/code/code-notes.adoc:649
#: src/code/code-notes.adoc:679 src/drivers/pluto-p.adoc:11
#: src/gui/gmoccapy.adoc:50
#, no-wrap
msgid "Requirements"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:273
msgid "None. The command is always accepted and acted on immediately."
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:274 src/code/code-notes.adoc:306
#: src/code/code-notes.adoc:339 src/code/code-notes.adoc:367
#: src/code/code-notes.adoc:384 src/code/code-notes.adoc:401
#: src/code/code-notes.adoc:420 src/code/code-notes.adoc:437
#: src/code/code-notes.adoc:454 src/code/code-notes.adoc:471
#: src/code/code-notes.adoc:487 src/code/code-notes.adoc:503
#: src/code/code-notes.adoc:521 src/code/code-notes.adoc:535
#: src/code/code-notes.adoc:552 src/code/code-notes.adoc:570
#: src/code/code-notes.adoc:586 src/code/code-notes.adoc:606
#: src/code/code-notes.adoc:629 src/code/code-notes.adoc:657
#: src/code/code-notes.adoc:687
#, no-wrap
msgid "Results"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:284
msgid ""
"In free mode, the free mode trajectory planners are disabled. That results "
"in each joint stopping as fast as its accel (decel) limit allows. The stop "
"is not coordinated. In teleop mode, the commanded Cartesian velocity is set "
"to zero. I don't know exactly what kind of stop results (coordinated, "
"uncoordinated, etc), but will figure it out eventually. In coord mode, the "
"coord mode trajectory planner is told to abort the current move. Again, I "
"don't know the exact result of this, but will document it when I figure it "
"out."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:285
#, no-wrap
msgid "FREE"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:294
msgid ""
"The FREE command puts the motion controller in free mode. Free mode means "
"that each joint is independent of all the other joints. Cartesian "
"coordinates, poses, and kinematics are ignored when in free mode. In "
"essence, each joint has its own simple trajectory planner, and each joint "
"completely ignores the other joints. Some commands (like Joint JOG and HOME) "
"only work in free mode. Other commands, including anything that deals with "
"Cartesian coordinates, do not work at all in free mode."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:305
msgid ""
"The command handler applies no requirements to the FREE command, it will "
"always be accepted. However, if any joint is in motion "
"(GET_MOTION_INPOS_FLAG() == FALSE), then the command will be ignored.  This "
"behavior is controlled by code that is now located in the function "
"'set_operating_mode()' in control.c, that code needs to be cleaned up.  I "
"believe the command should not be silently ignored, instead the command "
"handler should determine whether it can be executed and return an error if "
"it cannot."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:312
msgid ""
"If the machine is already in free mode, nothing. Otherwise, the machine is "
"placed in free mode. Each joint's free mode trajectory planner is "
"initialized to the current location of the joint, but the planners are not "
"enabled and the joints are stationary."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:313
#, no-wrap
msgid "TELEOP"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:326
msgid ""
"The TELEOP command places the machine in teleoperating mode. In teleop mode, "
"movement of the machine is based on Cartesian coordinates using kinematics, "
"rather than on individual joints as in free mode. However the trajectory "
"planner per se is not used, instead movement is controlled by a velocity "
"vector. Movement in teleop mode is much like jogging, except that it is done "
"in Cartesian space instead of joint space. On a machine with trivial "
"kinematics, there is little difference between teleop mode and free mode, "
"and GUIs for those machines might never even issue this command. However for "
"non-trivial machines like robots and hexapods, teleop mode is used for most "
"user commanded jog type movements."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:338
msgid ""
"The command handler will reject the TELEOP command with an error message if "
"the kinematics cannot be activated because the one or more joints have not "
"been homed. In addition, if any joint is in motion (GET_MOTION_INPOS_FLAG() "
"== FALSE), then the command will be ignored (with no error message). This "
"behavior is controlled by code that is now located in the function "
"'set_operating_mode()' in control.c. I believe the command should not be "
"silently ignored, instead the command handler should determine whether it "
"can be executed and return an error if it cannot."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:345
msgid ""
"If the machine is already in teleop mode, nothing. Otherwise the machine is "
"placed in teleop mode. The kinematics code is activated, interpolators are "
"drained and flushed, and the Cartesian velocity commands are set to zero."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:346
#, no-wrap
msgid "COORD"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:354
msgid ""
"The COORD command places the machine in coordinated mode. In coord mode, "
"movement of the machine is based on Cartesian coordinates using kinematics, "
"rather than on individual joints as in free mode. In addition, the main "
"trajectory planner is used to generate motion, based on queued LINE, CIRCLE, "
"and/or PROBE commands. Coord mode is the mode that is used when executing a "
"G-code program."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:366
msgid ""
"The command handler will reject the COORD command with an error message if "
"the kinematics cannot be activated because the one or more joints have not "
"been homed. In addition, if any joint is in motion (GET_MOTION_INPOS_FLAG() "
"== FALSE), then the command will be ignored (with no error message). This "
"behavior is controlled by code that is now located in the function "
"'set_operating_mode()' in control.c. I believe the command should not be "
"silently ignored, instead the command handler should determine whether it "
"can be executed and return an error if it cannot."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:374
msgid ""
"If the machine is already in coord mode, nothing. Otherwise, the machine is "
"placed in coord mode. The kinematics code is activated, interpolators are "
"drained and flushed, and the trajectory planner queues are empty. The "
"trajectory planner is active and awaiting a LINE, CIRCLE, or PROBE command."
msgstr ""

#. type: Table
#: src/code/code-notes.adoc:375 src/plasma/qtplasmac.adoc:896
#, no-wrap
msgid "ENABLE"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:378
msgid "The ENABLE command enables the motion controller."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:383 src/code/code-notes.adoc:400
#: src/code/code-notes.adoc:419 src/code/code-notes.adoc:436
#: src/code/code-notes.adoc:453 src/code/code-notes.adoc:470
#: src/code/code-notes.adoc:486 src/code/code-notes.adoc:502
#: src/code/code-notes.adoc:520 src/code/code-notes.adoc:534
#: src/code/code-notes.adoc:551 src/code/code-notes.adoc:569
msgid ""
"None. The command can be issued at any time, and will always be accepted."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:391
msgid ""
"If the controller is already enabled, nothing. If not, the controller is "
"enabled. Queues and interpolators are flushed. Any movement or homing "
"operations are terminated. The amp-enable outputs associated with active "
"joints are turned on. If forward kinematics are not available, the machine "
"is switched to free mode."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:392
#, no-wrap
msgid "DISABLE"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:395
msgid "The DISABLE command disables the motion controller."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:408
msgid ""
"If the controller is already disabled, nothing. If not, the controller is "
"disabled. Queues and interpolators are flushed. Any movement or homing "
"operations are terminated. The amp-enable outputs associated with active "
"joints are turned off. If forward kinematics are not available, the machine "
"is switched to free mode."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:409
#, no-wrap
msgid "ENABLE_AMPLIFIER"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:414
msgid ""
"The ENABLE_AMPLIFIER command turns on the amp enable output for a single "
"output amplifier, without changing anything else. Can be used to enable a "
"spindle speed controller."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:425
msgid ""
"Currently, nothing. (A call to the old extAmpEnable function is currently "
"commented out.) Eventually it will set the amp enable HAL pin true."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:426
#, no-wrap
msgid "DISABLE_AMPLIFIER"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:431
msgid ""
"The DISABLE_AMPLIFIER command turns off the amp enable output for a single "
"amplifier, without changing anything else. Again, useful for spindle speed "
"controllers."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:442
msgid ""
"Currently, nothing. (A call to the old extAmpEnable function is currently "
"commented out.) Eventually it will set the amp enable HAL pin false."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:443
#, no-wrap
msgid "ACTIVATE_JOINT"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:448
msgid ""
"The ACTIVATE_JOINT command turns on all the calculations associated with a "
"single joint, but does not change the joint's amp enable output pin."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:459
msgid ""
"Calculations for the specified joint are enabled. The amp enable pin is not "
"changed, however, any subsequent ENABLE or DISABLE commands will modify the "
"joint's amp enable pin."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:460
#, no-wrap
msgid "DEACTIVATE_JOINT"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:465
msgid ""
"The DEACTIVATE_JOINT command turns off all the calculations associated with "
"a single joint, but does not change the joint's amp enable output pin."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:476
msgid ""
"Calculations for the specified joint are enabled. The amp enable pin is not "
"changed, and subsequent ENABLE or DISABLE commands will not modify the "
"joint's amp enable pin."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:477
#, no-wrap
msgid "ENABLE_WATCHDOG"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:481
msgid ""
"The ENABLE_WATCHDOG command enables a hardware based watchdog (if present)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:492 src/code/code-notes.adoc:508
msgid ""
"Currently nothing. The old watchdog was a strange thing that used a specific "
"sound card. A new watchdog interface may be designed in the future."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:493
#, no-wrap
msgid "DISABLE_WATCHDOG"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:497
msgid ""
"The DISABLE_WATCHDOG command disables a hardware based watchdog (if present)."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:509
#, no-wrap
msgid "PAUSE"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:515
msgid ""
"The PAUSE command stops the trajectory planner. It has no effect in free or "
"teleop mode. At this point I don't know if it pauses all motion immediately, "
"or if it completes the current move and then pauses before pulling another "
"move from the queue."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:524
msgid "The trajectory planner pauses."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:525
#, no-wrap
msgid "RESUME"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:529
msgid ""
"The RESUME command restarts the trajectory planner if it is paused. It has "
"no effect in free or teleop mode, or if the planner is not paused."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:538
msgid "The trajectory planner resumes."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:539
#, no-wrap
msgid "STEP"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:546
msgid ""
"The STEP command restarts the trajectory planner if it is paused, and tells "
"the planner to stop again when it reaches a specific point. It has no effect "
"in free or teleop mode. At this point I don't know exactly how this works. "
"I'll add more documentation here when I dig deeper into the trajectory "
"planner."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:556
msgid ""
"The trajectory planner resumes, and later pauses when it reaches a specific "
"point."
msgstr ""

#. type: TH
#: src/code/code-notes.adoc:557 src/plasma/qtplasmac.adoc:2756
#: man/man9/scale.9:9
#, no-wrap
msgid "SCALE"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:564
msgid ""
"The SCALE command scales all velocity limits and commands by a specified "
"amount. It is used to implement feed rate override and other similar "
"functions. The scaling works in free, teleop, and coord modes, and affects "
"everything, including homing velocities, etc. However, individual joint "
"velocity limits are unaffected."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:573
msgid "All velocity commands are scaled by the specified constant."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:574
#, no-wrap
msgid "OVERRIDE_LIMITS"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:580
msgid ""
"The OVERRIDE_LIMITS command prevents limits from tripping until the end of "
"the next JOG command. It is normally used to allow a machine to be jogged "
"off of a limit switch after tripping. (The command can actually be used to "
"override limits, or to cancel a previous override.)"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:585
msgid ""
"None. The command can be issued at any time, and will always be accepted. (I "
"think it should only work in free mode.)"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:592
msgid ""
"Limits on all joints are over-ridden until the end of the next JOG command. "
"(This is currently broken... once an OVERRIDE_LIMITS command is received, "
"limits are ignored until another OVERRIDE_LIMITS command re-enables them.)"
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:593
#, no-wrap
msgid "HOME"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:601
msgid ""
"The HOME command initiates a homing sequence on a specified joint. The "
"actual homing sequence is determined by a number of configuration "
"parameters, and can range from simply setting the current position to zero, "
"to a multi-stage search for a home switch and index pulse, followed by a "
"move to an arbitrary home location. For more information about the homing "
"sequence, see the homing section of the Integrator Manual."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:605
msgid ""
"The command will be ignored silently unless the machine is in free mode."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:610
msgid ""
"Any jog or other joint motion is aborted, and the homing sequence starts."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:611
#, no-wrap
msgid "JOG_CONT"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:620
msgid ""
"The JOG_CONT command initiates a continuous jog on a single joint. A "
"continuous jog is generated by setting the free mode trajectory planner's "
"target position to a point beyond the end of the joint's range of travel. "
"This ensures that the planner will move constantly until it is stopped by "
"either the joint limits or an ABORT command.  Normally, a GUI sends a "
"JOG_CONT command when the user presses a jog button, and ABORT when the "
"button is released."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:628
msgid ""
"The command handler will reject the JOG_CONT command with an error message "
"if machine is not in free mode, or if any joint is in motion "
"(GET_MOTION_INPOS_FLAG() == FALSE), or if motion is not enabled. It will "
"also silently ignore the command if the joint is already at or beyond its "
"limit and the commanded jog would make it worse."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:638
msgid ""
"The free mode trajectory planner for the joint identified by emcmotCommand\\-"
">axis is activated, with a target position beyond the end of joint travel, "
"and a velocity limit of emcmotCommand\\->vel. This starts the joint moving, "
"and the move will continue until stopped by an ABORT command or by hitting a "
"limit. The free mode planner accelerates at the joint accel limit at the "
"beginning of the move, and will decelerate at the joint accel limit when it "
"stops."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:639
#, no-wrap
msgid "JOG_INCR"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:648
msgid ""
"The JOG_INCR command initiates an incremental jog on a single joint.  "
"Incremental jogs are cumulative, in other words, issuing two JOG_INCR "
"commands that each ask for 0.100 inches of movement will result in 0.200 "
"inches of travel, even if the second command is issued before the first one "
"finishes. Normally incremental jogs stop when they have traveled the desired "
"distance, however they also stop when they hit a limit, or on an ABORT "
"command."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:656
msgid ""
"The command handler will silently reject the JOG_INCR command if machine is "
"not in free mode, or if any joint is in motion (GET_MOTION_INPOS_FLAG() == "
"FALSE), or if motion is not enabled. It will also silently ignore the "
"command if the joint is already at or beyond its limit and the commanded jog "
"would make it worse."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:670
msgid ""
"The free mode trajectory planner for the joint identified by emcmotCommand\\-"
">axis is activated, the target position is incremented/decremented by "
"emcmotCommand\\->offset, and the velocity limit is set to emcmotCommand\\-"
">vel. The free mode trajectory planner will generate a smooth trapezoidal "
"move from the present position to the target position. The planner can "
"correctly handle changes in the target position that happen while the move "
"is in progress, so multiple JOG_INCR commands can be issued in quick "
"succession. The free mode planner accelerates at the joint accel limit at "
"the beginning of the move, and will decelerate at the joint accel limit to "
"stop at the target position."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:671
#, no-wrap
msgid "JOG_ABS"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:678
msgid ""
"The JOG_ABS command initiates an absolute jog on a single joint. An absolute "
"jog is a simple move to a specific location, in joint coordinates. Normally "
"absolute jogs stop when they reach the desired location, however they also "
"stop when they hit a limit, or on an ABORT command."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:686
msgid ""
"The command handler will silently reject the JOG_ABS command if machine is "
"not in free mode, or if any joint is in motion (GET_MOTION_INPOS_FLAG() == "
"FALSE), or if motion is not enabled. It will also silently ignore the "
"command if the joint is already at or beyond its limit and the commanded jog "
"would make it worse."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:701
msgid ""
"The free mode trajectory planner for the joint identified by emcmotCommand\\-"
">axis is activated, the target position is set to emcmotCommand\\->offset, "
"and the velocity limit is set to emcmotCommand\\->vel. The free mode "
"trajectory planner will generate a smooth trapezoidal move from the present "
"position to the target position. The planner can correctly handle changes in "
"the target position that happen while the move is in progress. If multiple "
"JOG_ABS commands are issued in quick succession, each new command changes "
"the target position and the machine goes to the final commanded position.  "
"The free mode planner accelerates at the joint accel limit at the beginning "
"of the move, and will decelerate at the joint accel limit to stop at the "
"target position."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:702
#, no-wrap
msgid "SET_LINE"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:706
msgid ""
"The SET_LINE command adds a straight line to the trajectory planner queue."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:708 src/code/code-notes.adoc:715
#: src/code/code-notes.adoc:722 src/code/code-notes.adoc:730
#: src/code/code-notes.adoc:738
msgid "(More later)"
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:709
#, no-wrap
msgid "SET_CIRCLE"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:713
msgid ""
"The SET_CIRCLE command adds a circular move to the trajectory planner queue."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:716
#, no-wrap
msgid "SET_TELEOP_VECTOR"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:720
msgid ""
"The SET_TELEOP_VECTOR command instructs the motion controller to move along "
"a specific vector in Cartesian space."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:723
#, no-wrap
msgid "PROBE"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:728
msgid ""
"The PROBE command instructs the motion controller to move toward a specific "
"point in Cartesian space, stopping and recording its position if the probe "
"input is triggered."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:731
#, no-wrap
msgid "CLEAR_PROBE_FLAG"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:736
msgid ""
"The CLEAR_PROBE_FLAG command is used to reset the probe input in preparation "
"for a PROBE command. (Question: why shouldn't the PROBE command "
"automatically reset the input?)"
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:739
#, no-wrap
msgid "SET_xix"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:748
msgid ""
"There are approximately 15 SET_xxx commands, where xxx is the name of some "
"configuration parameter. It is anticipated that there will be several more "
"SET commands as more parameters are added. I would like to find a cleaner "
"way of setting and reading configuration parameters. The existing methods "
"require many lines of code to be added to multiple files each time a "
"parameter is added. Much of that code is identical or nearly identical for "
"every parameter."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:749
#, no-wrap
msgid "Backlash and Screw Error Compensation"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:752
msgid "FIXME Backlash and Screw Error Compensation"
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:753
#, no-wrap
msgid "Task controller (EMCTASK)"
msgstr ""

#. type: Table
#: src/code/code-notes.adoc:755 src/plasma/qtplasmac.adoc:3744
#, no-wrap
msgid "State"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:759
msgid ""
"Task has three possible internal states: *E-stop*, *E-stop Reset*, and "
"*Machine On*."
msgstr ""

#. type: Target for macro image
#: src/code/code-notes.adoc:760
#, no-wrap
msgid "task-state-transitions.svg"
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:762
#, no-wrap
msgid "IO controller (EMCIO)"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:768
msgid ""
"The I/O Controller is separate module that accepts NML commands from TASK.  "
"It interacts with external I/O using HAL pins.  iocontrol.cc is loaded via "
"the linuxcnc script before TASK is.  There are currently two versions of "
"iocontrol. The second version handles toolchange hardware errors."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:771
msgid ""
"Currently ESTOP/Enable, coolant, lube, and tool changing are handled by "
"iocontrol. These are relatively low speed events, high speed coordinated I/O "
"is handled in motion."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:776
msgid ""
"emctaskmain.cc sends I/O commands via taskclass.cc.  Taskclass's functions "
"send NML messages out to iocontrol.cc.  Taskclass either uses the commands "
"defined in c++ in it's file or, if defined, runs python based commands "
"defined in files provided by the user."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:778
msgid "iocontrol main loop process:"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:780
msgid "registers for SIGTERM and SIGINT signals from the OS."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:781
msgid "checks to see it HAL inputs have changed"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:782
msgid ""
"checks if read_tool_inputs() indicates the tool change is finished and set "
"emcioStatus.status"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:783
msgid "checks for I/O related NML messages"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:785
msgid "nml message numbers: from emc.hh:"
msgstr ""

#. type: delimited block -
#: src/code/code-notes.adoc:802
#, no-wrap
msgid ""
"#define EMC_IO_INIT_TYPE                             ((NMLTYPE) 1601)\n"
"#define EMC_TOOL_STAT_TYPE                           ((NMLTYPE) 1199)\n"
"#define EMC_TOOL_INIT_TYPE                           ((NMLTYPE) 1101)\n"
"#define EMC_TOOL_HALT_TYPE                           ((NMLTYPE) 1102)\n"
"#define EMC_TOOL_ABORT_TYPE                          ((NMLTYPE) 1103)\n"
"#define EMC_TOOL_PREPARE_TYPE                        ((NMLTYPE) 1104)\n"
"#define EMC_TOOL_LOAD_TYPE                           ((NMLTYPE) 1105)\n"
"#define EMC_TOOL_UNLOAD_TYPE                         ((NMLTYPE) 1106)\n"
"#define EMC_TOOL_LOAD_TOOL_TABLE_TYPE                ((NMLTYPE) 1107)\n"
"#define EMC_TOOL_SET_OFFSET_TYPE                     ((NMLTYPE) 1108)\n"
"#define EMC_TOOL_SET_NUMBER_TYPE                     ((NMLTYPE) 1109)\n"
"// the following message is sent to io at the very start of an M6\n"
"// even before emccanon issues the move to toolchange position\n"
"#define EMC_TOOL_START_CHANGE_TYPE                   ((NMLTYPE) 1110)\n"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:807
#, no-wrap
msgid "  FIXME User Interfaces\n"
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:808
#, no-wrap
msgid "libnml Introduction"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:816
msgid ""
"libnml is derived from the NIST rcslib without all the multi-platform "
"support. Many of the wrappers around platform specific code has been removed "
"along with much of the code that is not required by LinuxCNC. It is hoped "
"that sufficient compatibility remains with rcslib so that applications can "
"be implemented on non-Linux platforms and still be able to communicate with "
"LinuxCNC."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:821
msgid ""
"This chapter is not intended to be a definitive guide to using libnml (or "
"rcslib), instead, it will eventually provide an overview of each C++ class "
"and their member functions. Initially, most of these notes will be random "
"comments added as the code scrutinized and modified."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:822
#, no-wrap
msgid "LinkedList"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:827
msgid ""
"Base class to maintain a linked list. This is one of the core building "
"blocks used in passing NML messages and assorted internal data structures."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:828
#, no-wrap
msgid "LinkedListNode"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:833
msgid ""
"Base class for producing a linked list - Purpose, to hold pointers to the "
"previous and next nodes, pointer to the data, and the size of the data."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:835
msgid "No memory for data storage is allocated."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:836
#, no-wrap
msgid "SharedMemory"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:841
msgid ""
"Provides a block of shared memory along with a semaphore (inherited from the "
"Semaphore class). Creation and destruction of the semaphore is handled by "
"the SharedMemory constructor and destructor."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:842
#, no-wrap
msgid "ShmBuffer"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:847
msgid ""
"Class for passing NML messages between local processes using a shared memory "
"buffer. Much of internal workings are inherited from the CMS class."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:848
#, no-wrap
msgid "Timer"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:854
msgid ""
"The Timer class provides a periodic timer limited only by the resolution of "
"the system clock. If, for example, a process needs to be run every 5 seconds "
"regardless of the time taken to run the process, the following code snippet "
"demonstrates how :"
msgstr ""

#. type: delimited block -
#: src/code/code-notes.adoc:866
#, no-wrap
msgid ""
"main()\n"
"{\n"
"    timer = new Timer(5.0);    /* Initialize a timer with a 5 second loop */\n"
"    while(0) {\n"
"        /* Do some process */\n"
"        timer.wait();    /* Wait till the next 5 second interval */\n"
"    }\n"
"    delete timer;\n"
"}\n"
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:868
#, no-wrap
msgid "Semaphore"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:876
msgid ""
"The Semaphore class provides a method of mutual exclusions for accessing a "
"shared resource. The function to get a semaphore can either block until "
"access is available, return after a timeout, or return immediately with or "
"without gaining the semaphore. The constructor will create a semaphore or "
"attach to an existing one if the ID is already in use."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:878
msgid "The Semaphore::destroy() must be called by the last process only."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:879
#, no-wrap
msgid "CMS"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:889
msgid ""
"At the heart of libnml is the CMS class, it contains most of the functions "
"used by libnml and ultimately NML. Many of the internal functions are "
"overloaded to allow for specific hardware dependent methods of data passing. "
"Ultimately, everything revolves around a central block of memory (referred "
"to as the 'message buffer' or just 'buffer'). This buffer may exist as a "
"shared memory block accessed by other CMS/NML processes, or a local and "
"private buffer for data being transferred by network or serial interfaces."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:896
msgid ""
"The buffer is dynamically allocated at run time to allow for greater "
"flexibility of the CMS/NML sub-system. The buffer size must be large enough "
"to accommodate the largest message, a small amount for internal use and "
"allow for the message to be encoded if this option is chosen (encoded data "
"will be covered later). The following figure is an internal view of the "
"buffer space."
msgstr ""

#. type: Target for macro image
#: src/code/code-notes.adoc:897
#, no-wrap
msgid "CMS_buffer.png"
msgstr ""

#. type: Block title
#: src/code/code-notes.adoc:899
#, no-wrap
msgid "CMS buffer"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:902
msgid ""
"The CMS base class is primarily responsible for creating the communications "
"pathways and interfacing to the operating system."
msgstr ""

#
#
#. == NML Notes /* FIX ME */
#. A collection of random notes and thought whilst studying the libnml
#. and rcslib code.
#. Much of this needs to be edited and re-written in a coherent manner
#. before publication.
#. type: Title ==
#: src/code/code-notes.adoc:913
#, no-wrap
msgid "Configuration file format"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:917
msgid ""
"NML configuration consists of two types of line formats. One for Buffers, "
"and a second for Processes that connect to the buffers."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:918
#, no-wrap
msgid "Buffer line"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:921
msgid "The original NIST format of the buffer line is:"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:923
msgid ""
"'B name type host size neut RPC# buffer# max_procs key [type specific "
"configs]'"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:924
msgid "'B' - identifies this line as a Buffer configuration."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:925
msgid "'name' - is the identifier of the buffer."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:926
msgid ""
"'type' - describes the buffer type - SHMEM, LOCMEM, FILEMEM, PHANTOM, or "
"GLOBMEM."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:927
msgid "'host' - is either an IP address or host name for the NML server"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:928
msgid "'size' - is the size of the buffer"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:930
msgid ""
"'neut' - a boolean to indicate if the data in the buffer is encoded in a "
"machine independent format, or raw."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:931
msgid ""
"'RPC#' - Obsolete - Place holder retained for backward compatibility only."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:932
msgid ""
"'buffer#' - A unique ID number used if a server controls multiple buffers."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:933
msgid ""
"'max_procs' - is the maximum processes allowed to connect to this buffer."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:934
msgid "'key' - is a numerical identifier for a shared memory buffer"
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:935
#, no-wrap
msgid "Type specific configs"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:941
msgid ""
"The buffer type implies additional configuration options whilst the host "
"operating system precludes certain combinations. In an attempt to distill "
"published documentation in to a coherent format, only the *SHMEM* buffer "
"type will be covered."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:943
msgid ""
"'mutex=os_sem' - default mode for providing semaphore locking of the buffer "
"memory."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:944
msgid "'mutex=none' - Not used"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:945
msgid "'mutex=no_interrupts' - not applicable on a Linux system"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:946
msgid "'mutex=no_switching' - not applicable on a Linux system"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:949
msgid ""
"'mutex=mao split' - Splits the buffer in to half (or more) and allows one "
"process to access part of the buffer whilst a second process is writing to "
"another part."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:950
msgid "'TCP=(port number)' - Specifies which network port to use."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:951
msgid "'UDP=(port number)' - ditto"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:952
msgid "'STCP=(port number)' - ditto"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:953
msgid "'serialPortDevName=(serial port)' - Undocumented."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:955
msgid ""
"'passwd=file_name.pwd' - Adds a layer of security to the buffer by requiring "
"each process to provide a password."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:957
msgid ""
"'bsem' - NIST documentation implies a key for a blocking semaphore, and if "
"bsem=-1, blocking reads are prevented."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:958
msgid "'queue' - Enables queued message passing."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:959
msgid "'ascii' - Encode messages in a plain text format"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:960
msgid "'disp' - Encode messages in a format suitable for display (???)"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:961
msgid ""
"'xdr' - Encode messages in External Data Representation. (see rpc/xdr.h for "
"details)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:962
msgid ""
"'diag' - Enables diagnostics stored in the buffer (timings and byte counts ?)"
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:963
#, no-wrap
msgid "Process line"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:966
msgid "The original NIST format of the process line is:"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:968
#, no-wrap
msgid "*P name buffer type host ops server timeout master c_num [type specific configs]*\n"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:970
msgid "'P' - identifies this line as a Process configuration."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:971
msgid "'name' - is the identifier of the process."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:972
msgid "'buffer' - is one of the buffers defined elsewhere in the config file."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:973
msgid ""
"'type' - defines whether this process is local or remote relative to the "
"buffer."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:974
msgid "'host' - specifies where on the network this process is running."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:975
msgid ""
"'ops' - gives the process read only, write only, or read/write access to the "
"buffer."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:976
msgid ""
"'server' - specifies if this process will running a server for this buffer."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:977
msgid ""
"'timeout' - sets the timeout characteristics for accesses to the buffer."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:978
msgid ""
"'master' - indicates if this process is responsible for creating and "
"destroying the buffer."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:979
msgid "'c_num' - an integer between zero and (max_procs -1)"
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:980
#, no-wrap
msgid "Configuration Comments"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:989
msgid ""
"Some of the configuration combinations are invalid, whilst others imply "
"certain constraints. On a Linux system, GLOBMEM is obsolete, whilst PHANTOM "
"is only really useful in the testing stage of an application, likewise for "
"FILEMEM. LOCMEM is of little use for a multi-process application, and only "
"offers limited performance advantages over SHMEM. This leaves SHMEM as the "
"only buffer type to use with LinuxCNC."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:995
msgid ""
"The neut option is only of use in a multi-processor system where different "
"(and incompatible) architectures are sharing a block of memory. The "
"likelihood of seeing a system of this type outside of a museum or research "
"establishment is remote and is only relevant to GLOBMEM buffers."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:998
msgid ""
"The RPC number is documented as being obsolete and is retained only for "
"compatibility reasons."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1003
msgid ""
"With a unique buffer name, having a numerical identity seems to be "
"pointless. Need to review the code to identify the logic. Likewise, the key "
"field at first appears to be redundant, and it could be derived from the "
"buffer name."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1008
msgid ""
"The purpose of limiting the number of processes allowed to connect to any "
"one buffer is unclear from existing documentation and from the original "
"source code. Allowing unspecified multiple processes to connect to a buffer "
"is no more difficult to implement."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1013
msgid ""
"The mutex types boil down to one of two, the default \"os_sem\" or \"mao "
"split\". Most of the NML messages are relatively short and can be copied to "
"or from the buffer with minimal delays, so split reads are not essential."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1018
msgid ""
"Data encoding is only relevant when transmitted to a remote process - Using "
"TCP or UDP implies XDR encoding. Whilst ASCII encoding may have some use in "
"diagnostics or for passing data to an embedded system that does not "
"implement NML."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1021
msgid ""
"UDP protocols have fewer checks on data and allows a percentage of packets "
"to be dropped. TCP is more reliable, but is marginally slower."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1027
msgid ""
"If LinuxCNC is to be connected to a network, one would hope that it is local "
"and behind a firewall. About the only reason to allow access to LinuxCNC via "
"the Internet would be for remote diagnostics - This can be achieved far more "
"securely using other means, perhaps by a web interface."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1032
msgid ""
"The exact behavior when timeout is set to zero or a negative value is "
"unclear from the NIST documents. Only INF and positive values are mentioned. "
"However, buried in the source code of rcslib, it is apparent that the "
"following applies:"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1035
msgid ""
"timeout > 0 Blocking access until the timeout interval is reached or access "
"to the buffer is available."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1038
msgid ""
"timeout = 0 Access to the buffer is only possible if no other process is "
"reading or writing at the time."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1040
msgid "timeout < 0 or INF Access is blocked until the buffer is available."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:1041
#, no-wrap
msgid "NML base class"
msgstr ""

#.  FIXME
#. type: Plain text
#: src/code/code-notes.adoc:1047
msgid ""
"Expand on the lists and the relationship between NML, NMLmsg, and the lower "
"level cms classes."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1049
msgid "Not to be confused with NMLmsg, RCS_STAT_MSG, or RCS_CMD_MSG."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1053
msgid ""
"NML is responsible for parsing the config file, configuring the cms buffers "
"and is the mechanism for routing messages to the correct buffer(s). To do "
"this, NML creates several lists for:"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1055
msgid "cms buffers created or connected to."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1056
msgid "processes and the buffers they connect to"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1057
msgid "a long list of format functions for each message type"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1069
msgid ""
"This last item is probably the nub of much of the malignment of libnml/"
"rcslib and NML in general. Each message that is passed via NML requires a "
"certain amount of information to be attached in addition to the actual data. "
"To do this, several formatting functions are called in sequence to assemble "
"fragments of the overall message. The format functions will include "
"NML_TYPE, MSG_TYPE, in addition to the data declared in derived NMLmsg "
"classes. Changes to the order in which the formatting functions are called "
"and also the variables passed will break compatibility with rcslib if messed "
"with - There are reasons for maintaining rcslib compatibility, and good "
"reasons for messing with the code. The question is, which set of reasons are "
"overriding?"
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:1070
#, no-wrap
msgid "NML internals"
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:1072
#, no-wrap
msgid "NML constructor"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1079
msgid ""
"NML::NML() parses the config file and stores it in a linked list to be "
"passed to cms constructors in single lines. It is the function of the NML "
"constructor to call the relevant cms constructor for each buffer and "
"maintain a list of the cms objects and the processes associated with each "
"buffer."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1082
msgid ""
"It is from the pointers stored in the lists that NML can interact with cms "
"and why Doxygen fails to show the real relationships involved."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1090
msgid ""
"The config is stored in memory before passing a pointer to a specific line "
"to the cms constructor. The cms constructor then parses the line again to "
"extract a couple of variables... It would make more sense to do ALL the "
"parsing and save the variables in a struct that is passed to the cms "
"constructor - This would eliminate string handling and reduce duplicate code "
"in cms..."
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:1091
#, no-wrap
msgid "NML read/write"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1096
msgid ""
"Calls to NML::read and NML::write both perform similar tasks in so much as "
"processing the message - The only real variation is in the direction of data "
"flow."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1105
msgid ""
"A call to the read function first gets data from the buffer, then calls "
"format_output(), whilst a write function would call format_input() before "
"passing the data to the buffer. It is in format_xxx() that the work of "
"constructing or deconstructing the message takes place. A list of assorted "
"functions are called in turn to place various parts of the NML header (not "
"to be confused with the cms header) in the right order - The last function "
"called is emcFormat() in emc.cc."
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:1106
#, no-wrap
msgid "NMLmsg and NML relationships"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1116
msgid ""
"NMLmsg is the base class from which all message classes are derived.  Each "
"message class must have a unique ID defined (and passed to the constructor) "
"and also an update(*cms) function. The update() will be called by the NML "
"read/write functions when the NML formatter is called -- the pointer to the "
"formatter will have been declared in the NML constructor at some point. By "
"virtue of the linked lists NML creates, it is able to select cms pointer "
"that is passed to the formatter and therefor which buffer is to be used."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:1117
#, no-wrap
msgid "Adding custom NML commands"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1126
msgid ""
"LinuxCNC is pretty awesome, but some parts need some tweaking. As you know "
"communication is done through NML channels, the data sent through such a "
"channel is one of the classes defined in emc.hh (implemented in emc.cc). If "
"somebody needs a message type that doesn't exist, he should follow these "
"steps to add a new one. (The Message I added in the example is called "
"EMC_IO_GENERIC (inherits EMC_IO_CMD_MSG (inherits RCS_CMD_MSG)))"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1128
msgid ""
"add the definition of the EMC_IO_GENERIC class to emc2/src/emc/nml_intf/emc."
"hh"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1129
msgid "add the type define: #define EMC_IO_GENERIC_TYPE ((NMLTYPE) 1605) +"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1130
msgid ""
"(I chose 1605, because it was available) to emc2/src/emc/nml_intf/emc.hh"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1131
msgid ""
"add case EMC_IO_GENERIC_TYPE to emcFormat in emc2/src/emc/nml_intf/emc.cc"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1132
msgid ""
"add case EMC_IO_GENERIC_TYPE to emc_symbol_lookup in emc2/src/emc/nml_intf/"
"emc.cc"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1133
msgid "add EMC_IO_GENERIC::update function to emc2/src/emc/nml_intf/emc.cc"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1137
msgid ""
"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."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:1138
#, no-wrap
msgid "The Tool Table and Toolchanger"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1143
msgid ""
"LinuxCNC interfaces with toolchanger hardware, and has an internal "
"toolchanger abstraction.  LinuxCNC manages tool information in a tool table "
"file."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:1144
#, no-wrap
msgid "Toolchanger abstraction in LinuxCNC"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1150
msgid ""
"LinuxCNC supports two kinds of toolchanger hardware, called _nonrandom_ and "
"_random_.  The INI setting <<sub:ini:sec:emcio,[EMCIO]RANDOM_TOOLCHANGER>> "
"controls which of these kinds of hardware LinuxCNC thinks it's connected to."
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:1151
#, no-wrap
msgid "Nonrandom Toolchangers"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1155
msgid ""
"Nonrandom toolchanger hardware puts each tool back in the pocket it was "
"originally loaded from."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1158
msgid ""
"Examples of nonrandom toolchanger hardware are the \"manual\" toolchanger, "
"lathe tool turrents, and rack toolchangers."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1164
msgid ""
"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."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1169
msgid ""
"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."
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:1170
#, no-wrap
msgid "Random Toolchangers"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1175
msgid ""
"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."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1177
msgid "An example of random toolchanger hardware is a carousel toolchanger."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1186
msgid ""
"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."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1192
msgid ""
"If LinuxCNC is 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."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:1193
#, no-wrap
msgid "The Tool Table"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1197
msgid ""
"LinuxCNC keeps track of tools in a file called the <<sec:tool-table,tool "
"table>>.  The tool table records the following information for each tool:"
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1198
#, no-wrap
msgid "tool number"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1202
msgid ""
"An integer that uniquely identifies this tool.  Tool numbers are handled "
"differently by LinuxCNC when configured for random and nonrandom "
"toolchangers:"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1206
msgid ""
"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."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1209
msgid ""
"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\", i.e. the empty pocket."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1210
#, no-wrap
msgid "pocket number"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1215
msgid ""
"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:"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1222
msgid ""
"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."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1225
msgid ""
"When LinuxCNC is configured for a random toolchanger, the pocket numbers in "
"the tool file must be between 0 and 1000, inclusive.  Pockets 1-1000 are in "
"the toolchanger, pocket 0 is the spindle."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1226 src/gui/gladevcp.adoc:1574
#, no-wrap
msgid "diameter"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1228
msgid "Diameter of the tool, in machine units."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1229
#, no-wrap
msgid "tool length offset"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1232
msgid ""
"Tool length offset (also called TLO), in up to 9 axes, in machine units.  "
"Axes that don't have a specified TLO get 0."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:1233
#, no-wrap
msgid "G-codes affecting tools"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1236
msgid "The G-codes that use or affect tool information are:"
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:1237
#, no-wrap
msgid "Txxx"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1241
msgid ""
"Tells the toolchanger hardware to prepare to switch to a specified tool +xxx"
"+."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1243
msgid "Handled by +Interp::convert_tool_select()+."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1247
msgid ""
"The machine is asked to prepare to switch to the selected tool by calling "
"the Canon function +SELECT_TOOL()+ with the tool number of the requested "
"tool."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1248
msgid "(saicanon) No-op."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1258
msgid ""
"(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."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1260
msgid ""
"Back in interp, +settings->selected_pocket+ is assigned the tooldata index "
"of the requested tool _xxx_."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1265
msgid ""
"The legacy names *selected_pocket* and *current_pocket* actually reference a "
"sequential tooldata index for tool items loaded from a tool table "
"([EMCIO]TOOL_TABLE) or via a tooldata database ([EMCIO]DB_PROGRAM)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1270
msgid ""
"Tells the toolchanger to switch to the currently selected tool (selected by "
"the previous Txxx command)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1272 src/code/code-notes.adoc:1386
msgid "Handled by +Interp::convert_tool_change()+."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1276
msgid ""
"The machine is asked to change to the selected tool by calling the Canon "
"function +CHANGE_TOOL()+ with +settings->selected_pocket+ (a tooldata index)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1280
msgid ""
"(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]+)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1291
msgid ""
"(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_TOOL()+).  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."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1294
msgid ""
"+load_tool()+ with a nonrandom toolchanger config copies the tool "
"information from the selected pocket to the spindle (pocket 0)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1297
msgid ""
"+load_tool()+ with a random toolchanger config swaps tool information "
"between pocket 0 (the spindle) and the selected pocket, then saves the tool "
"table."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1301
msgid ""
"Back in interp, +settings->current_pocket+ is assigned the new tooldata "
"index 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)."
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:1302
#, no-wrap
msgid "G43/G43.1/G49"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1308
msgid ""
"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)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1310
msgid "Handled by +Interp::convert_tool_length_offset()+."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1316
msgid ""
"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."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1317
msgid "The offsets are passed to Canon's +USE_TOOL_LENGTH_OFFSET()+ function."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1318
msgid "(saicanon) Records the TLO in +_tool_offset+."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1324
msgid ""
"(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."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1327
msgid ""
"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."
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:1328
#, no-wrap
msgid "G10 L1/L10/L11"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1331
msgid "Modifies the tool table."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1333
msgid "Handled by +Interp::convert_setup_tool()+."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1336
msgid ""
"Picks the tool number out of the P-word in the block and finds the pocket "
"for that tool:"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1339
msgid ""
"With a nonrandom toolchanger config this is always the pocket number in the "
"toolchanger (even when the tool is in the spindle)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1343
msgid ""
"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.)"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1344
msgid "Figures out what the new offsets should be."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1347
msgid ""
"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()."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1349
msgid ""
"(saicanon)  Copy the new tool information to the specified pocket (in sai's "
"internal tool table, +_tools+)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1358
msgid ""
"(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."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1365
msgid ""
"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.)"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1371
msgid ""
"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)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1378
msgid ""
"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.)"
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:1379
#, no-wrap
msgid "M61"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1384
msgid ""
"Set current tool number.  This switches LinuxCNC's internal representation "
"of which tool is in the spindle, without actually moving the toolchanger or "
"swapping any tools."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1388
msgid "Canon: +CHANGE_TOOL_NUMBER()+"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1391
msgid ""
"settings->current_pocket is assigned the tooldata index currently holding "
"the tool specified by the Q-word argument."
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:1392
#, no-wrap
msgid "G41/G41.1/G42/G42.1"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1395
msgid "Enable cutter radius compensation (usually called _cutter comp_)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1397
msgid "Handled by +Interp::convert_cutter_compensation_on()+."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1402
msgid ""
"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)."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1406
msgid "Cancel cutter radius compensation."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1408
msgid "Handled by +Interp::convert_cutter_compensation_off()+."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1411
msgid ""
"No Canon call, cutter comp happens in the interpreter.  Does not use the "
"tool table."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:1412
#, no-wrap
msgid "Internal state variables"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1416
msgid ""
"This is not an exhaustive list! Tool information is spread through out "
"LinuxCNC."
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:1417
#, no-wrap
msgid "IO"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1420
msgid "+emcioStatus+ is of type +EMC_IO_STAT+"
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1421
#, no-wrap
msgid "emcioStatus.tool.pocketPrepped"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1427
msgid ""
"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."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1428
#, no-wrap
msgid "emcioStatus.tool.toolInSpindle"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1431
msgid ""
"Tool number of the tool currently installed in the spindle.  Exported on the "
"HAL pin +iocontrol.0.tool-number+ (s32)."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1432
#, no-wrap
msgid "emcioStatus.tool.toolTable[]"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1439
msgid ""
"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+."
msgstr ""

#. type: Title ====
#: src/code/code-notes.adoc:1440
#, no-wrap
msgid "interp"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1444
msgid ""
"+settings+ is of type +settings+, defined as +struct setup_struct+ in +src/"
"emc/rs274ngc/interp_internal.hh+."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1445
#, no-wrap
msgid "settings.selected_pocket"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1447
msgid "Tooldata index of the tool most recently selected by +Txxx+."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1448
#, no-wrap
msgid "settings.current_pocket"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1452
msgid ""
"Original tooldata index of the tool currently in the spindle.  In other "
"words: which tooldata index the tool that's currently in the spindle was "
"loaded from."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1453
#, no-wrap
msgid "settings.tool_table[]"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1457
msgid ""
"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."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1458
#, no-wrap
msgid "settings.tool_offset_index"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1460
msgid "Unused.  FIXME: Should probably be removed."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1461
#, no-wrap
msgid "settings.toolchange_flag"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1467
msgid ""
"Interp sets this to true when calling Canon's CHANGE_TOOL()  function.  It "
"is checked in +Interp::convert_tool_length_offset()+ to decide which "
"tooldata index to use for G43 (with no H-word): +settings->current_pocket+ "
"if the tool change is still in progress, tooldata index 0 (the spindle) if "
"the tool change is complete."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1468
#, no-wrap
msgid "settings.random_toolchanger"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1475
msgid ""
"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\".)"
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1476
#, no-wrap
msgid "settings.tool_offset"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1478
msgid "This is an +EmcPose+ variable."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1480
msgid "Used to compute position in various places."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1485
msgid ""
"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."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1486
#, no-wrap
msgid "settings.pockets_max"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1490
msgid ""
"Used interchangeably with +CANON_POCKETS_MAX+ (a #defined constant, set to "
"1000 as of April 2020).  FIXME: This settings variable is not currently "
"useful and should probably be removed."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1491
#, no-wrap
msgid "settings.tool_table"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1500
msgid ""
"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 to "
"(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."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1501
#, no-wrap
msgid "settings.tool_change_at_g30"
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1502
#, no-wrap
msgid "settings.tool_change_quill_up"
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1503
#, no-wrap
msgid "settings.tool_change_with_spindle_on"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1506
msgid ""
"These are set from INI variables in the +[EMCIO]+ section, and determine how "
"tool changes are performed."
msgstr ""

#. type: Title ==
#: src/code/code-notes.adoc:1507
#, no-wrap
msgid "Reckoning of joints and axes"
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:1509
#, no-wrap
msgid "In the status buffer"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1512
msgid "The status buffer is used by Task and the UIs."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1514
msgid "FIXME: `axis_mask` and `axes` overspecify the number of axes"
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1515
#, no-wrap
msgid "`status.motion.traj.axis_mask`"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1521
msgid ""
"A bitmask with a \"1\" for the axes that are present and a \"0\" for the "
"axes that are not present. X is bit 0 with value 2^0^ = 1 if set, Y is bit 1 "
"with value 2^1^ = 2, Z is bit 2 with value 4, etc.  For example, a machine "
"with X and Z axes would have an `axis_mask` of 0x5, an XYZ machine would "
"have 0x7, and an XYZB machine would have an `axis_mask` of 0x17."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1522
#, no-wrap
msgid "`status.motion.traj.axes` (removed)"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1524
msgid ""
"This value was removed in LinuxCNC version 2.9.  Use `axis_mask` instead."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1525
#, no-wrap
msgid "`status.motion.traj.joints`"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1531
msgid ""
"A count of the number of joints the machine has. A normal lathe has 2 "
"joints; one driving the X axis and one driving the Z axis.  An XYYZ gantry "
"mill has 4 joints: one driving X, one driving one side of the Y, one driving "
"the other side of the Y, and one driving Z.  An XYZA mill also has 4 joints."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1532
#, no-wrap
msgid "`status.motion.axis[EMCMOT_MAX_AXIS]`"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1537
msgid ""
"An array of `EMCMOT_MAX_AXIS` axis structures. `axis[n]` is valid if "
"`(axis_mask & (1 << n))` is True. If `(axis_mask & (1 << n))` is False, then "
"`axis[n]` does not exist on this machine and must be ignored."
msgstr ""

#. type: Labeled list
#: src/code/code-notes.adoc:1538
#, no-wrap
msgid "`status.motion.joint[EMCMOT_MAX_JOINTS]`"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1542
msgid ""
"An array of `EMCMOT_MAX_JOINTS` joint structures. `joint[0]` through "
"`joint[joints-1]` are valid, the others do not exist on this machine and "
"must be ignored."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1548
msgid ""
"Things are not this way currently in the joints-axes branch, but deviations "
"from this design are considered bugs. For an example of such a bug, see the "
"treatment of axes in src/emc/ini/initraj.cc:loadTraj().  There are "
"undoubtedly more, and I need your help to find them and fix them."
msgstr ""

#. type: Title ===
#: src/code/code-notes.adoc:1549
#, no-wrap
msgid "In Motion"
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1554
msgid ""
"The Motion controller realtime component first gets the number of joints "
"from the `num_joints` load-time parameter.  This determines how many joints "
"worth of HAL pins are created at startup."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1557
msgid ""
"Motion's number of joints can be changed at runtime using the "
"`EMCMOT_SET_NUM_JOINTS` command from Task."
msgstr ""

#. type: Plain text
#: src/code/code-notes.adoc:1560
msgid ""
"The Motion controller always operates on `EMCMOT_MAX_AXIS` axes.  It always "
"creates nine sets of `axis.*.*` pins."
msgstr ""

#. type: Title =
#: src/code/contributing-to-linuxcnc.adoc:4
#, no-wrap
msgid "Contributing to LinuxCNC"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:17
msgid ""
"This document contains information for developers about LinuxCNC "
"infrastructure, and describes the best practices for contributing code and "
"documentation updates to the LinuxCNC project."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:20
msgid ""
"Throughout this document, \"source\" means both the source code to the "
"programs and libraries, and the source text for the documentation."
msgstr ""

#. type: Title ==
#: src/code/contributing-to-linuxcnc.adoc:21
#, no-wrap
msgid "Communication among LinuxCNC developers"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:24
msgid ""
"The two main ways that project developers communicate with each other are:"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:27
msgid ""
"Via IRC, at irc://irc.libera.chat/%23linuxcnc-devel[#linuxcnc-devel] on "
"https://libera.chat/[Libera.chat]."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:28
msgid ""
"Via email, on the https://lists.sourceforge.net/lists/listinfo/emc-"
"developers[developers' mailing list]"
msgstr ""

#. type: Title ==
#: src/code/contributing-to-linuxcnc.adoc:29
#, no-wrap
msgid "The LinuxCNC Source Forge project"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:33
msgid ""
"We use Source Forge for http://sourceforge.net/p/emc/mailman/[mailing lists]."
msgstr ""

#. type: Title ==
#: src/code/contributing-to-linuxcnc.adoc:34
#, no-wrap
msgid "The Git Revision Control System"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:38
msgid ""
"All of the LinuxCNC source is maintained in the http://git-scm.com/[Git "
"revision control system]."
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:39
#, no-wrap
msgid "LinuxCNC official Git repo"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:42
msgid ""
"The official LinuxCNC git repo is at http://github.com/linuxcnc/linuxcnc/"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:44
msgid "Anyone can get a read-only copy of the LinuxCNC source tree via git:"
msgstr ""

#. type: delimited block -
#: src/code/contributing-to-linuxcnc.adoc:47
#, no-wrap
msgid "git clone https://github.com/linuxcnc/linuxcnc linuxcnc-dev\n"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:51
msgid ""
"If you are a developer with push access, then follow github's instructions "
"for setting up a repository that you can push from."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:57
msgid ""
"Note that the clone command put the local LinuxCNC repo in a directory "
"called `linuxcnc-dev`, instead of the default `linuxcnc`.  This is because "
"the LinuxCNC software by default expects configs and G-code programs in a "
"directory called `$HOME/linuxcnc`, and having the git repo there too is "
"confusing."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:61
msgid ""
"Issues and pull requests (abbreviated PRs) are welcome on GitHub: https://"
"github.com/LinuxCNC/linuxcnc/issues https://github.com/LinuxCNC/linuxcnc/"
"pulls"
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:62
#, no-wrap
msgid "Use of Git in the LinuxCNC project"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:66
msgid ""
"We use the \"merging upwards\" and \"topic branches\" git workflows "
"described here:"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:68
msgid "https://www.kernel.org/pub/software/scm/git/docs/gitworkflows.html"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:72
msgid ""
"We have a development branch called `master`, and one or more stable "
"branches with names like `2.6` and `2.7` indicating the version number of "
"the releases we make from it."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:77
msgid ""
"Bugfixes go in the oldest applicable stable branch, and that branch gets "
"merged into the next newer stable branch, and so on up to `master`.  The "
"committer of the bugfix may do the merges themselves, or they may leave the "
"merges for someone else."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:82
msgid ""
"New features generally go in the `master` branch, but some kinds of features "
"(specifically well isolated device drivers and documentation)  may (at the "
"discretion of the stable branch release managers) go into a stable branch "
"and get merged up just like bugfixes do."
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:83
#, no-wrap
msgid "git tutorials"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:86
msgid "There are many excellent, free git tutorials on the internet."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:91
msgid ""
"The first place to look is probably the \"gittutorial\" manpage.  This "
"manpage is accessible by running \"man gittutorial\" in a terminal (if you "
"have the git manpages installed).  The gittutorial and its follow-on "
"documentation are also available online here:"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:94
msgid ""
"git tutorial: https://www.kernel.org/pub/software/scm/git/docs/gittutorial."
"html"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:96
msgid ""
"git tutorial 2: https://www.kernel.org/pub/software/scm/git/docs/"
"gittutorial-2.html"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:98
msgid ""
"Everyday git with 20 commands or so: https://www.kernel.org/pub/software/scm/"
"git/docs/giteveryday.html"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:100
msgid ""
"Git User's Manual: https://www.kernel.org/pub/software/scm/git/docs/user-"
"manual.html"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:103
msgid ""
"For a more thorough documentation of git see the \"Pro Git\" book: http://"
"git-scm.com/book"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:106
msgid ""
"Another online tutorial that has been recommended is \"Git for the Lazy\": "
"https://wiki.spheredev.org/index.php/Git_for_the_lazy"
msgstr ""

#. type: Title ==
#: src/code/contributing-to-linuxcnc.adoc:107
#, no-wrap
msgid "Overview of the process"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:111
msgid ""
"The high-level overview of how to contribute changes to the source goes like "
"this:"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:114
msgid ""
"Communicate with the project developers and let us know what you're hacking "
"on"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:115
msgid "Clone the git repo"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:117
msgid ""
"Make your changes in a local branch, making sure you \"sign off\" your "
"commits according to our signed-off-by policy (see below)."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:120
msgid ""
"Adding documentation and tests is an important part of adding a new "
"feature.  Otherwise, others won't know how to use your feature, and if other "
"changes break your feature it can go unnoticed without a test."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:121
msgid ""
"Share your changes with the other project developers in one of these ways:"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:123
msgid ""
"Push your branch to github and create a github pull request to https://"
"github.com/linuxcnc/linuxcnc (this requires a github account)"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:126
msgid ""
"Push your branch to a publicly visible git repo (such as github, bitbucket, "
"your own publicly-accessible server, etc) and share that location on the emc-"
"developers mailing list, or"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:129
msgid ""
"Email your commits to the LinuxCNC-developers mailing list (emc-"
"developers@lists.sourceforge.net) (use `git format-patch` to create the "
"patches)"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:130
msgid "Advocate for your patch"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:132
msgid ""
"Explain what problem it addresses and why it should be included in LinuxCNC"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:133
msgid "Be receptive to questions and feedback from the developer community."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:135
msgid ""
"It is not uncommon for a patch to go through several revisions before it is "
"accepted."
msgstr ""

#. type: Title ==
#: src/code/contributing-to-linuxcnc.adoc:136
#, no-wrap
msgid "git configuration"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:141
msgid ""
"In order to be considered for inclusion in the LinuxCNC source, commits must "
"have correct Author fields identifying the author of the commit.  A good way "
"to ensure this is to set your global git config:"
msgstr ""

#. type: delimited block -
#: src/code/contributing-to-linuxcnc.adoc:145
#, no-wrap
msgid ""
"git config --global user.name \"Your full name\"\n"
"git config --global user.email \"you@example.com\"\n"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:148
msgid ""
"Use your real name (not a handle), and use an unobfuscated e-mail address."
msgstr ""

#. type: Title ==
#: src/code/contributing-to-linuxcnc.adoc:149
#, no-wrap
msgid "Effective use of git"
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:151
#, no-wrap
msgid "Commit contents"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:155
msgid ""
"Keep your commits small and to the point.  Each commit should accomplish one "
"logical change to the repo."
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:156
#, no-wrap
msgid "Write good commit messages"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:160
msgid ""
"Keep commit messages around 72 columns wide (so that in a default-size "
"terminal window, they don't wrap when shown by `git log`)."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:164
msgid ""
"Use the first line as a summary of the intent of the change (almost like the "
"subject line of an e-mail). Follow it with a blank line, then a longer "
"message explaining the change. Example:"
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:165
#, no-wrap
msgid "Commit to the proper branch"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:170
msgid ""
"Bugfixes should go on the oldest applicable branch.  New features should go "
"in the master branch.  If you're not sure where a change belongs, ask on irc "
"or on the mailing list."
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:171
#, no-wrap
msgid "Use multiple commits to organize changes"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:179
msgid ""
"When appropriate, organize your changes into a branch (a series of commits) "
"where each commit is a logical step towards your ultimate goal. For example, "
"first factor out some complex code into a new function. Then, in a second "
"commit, fix an underlying bug. Then, in the third commit, add a new feature "
"which is made easier by the refactoring and which would not have worked "
"without fixing that bug."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:184
msgid ""
"This is helpful to reviewers, because it is easier to see that the \"factor "
"out code into new function\" step was right when there aren't other edits "
"mixed in; it's easier to see that the bug is fixed when the change that "
"fixes it is separate from the new feature; and so on."
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:185
#, no-wrap
msgid "Follow the style of the surrounding code"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:191
msgid ""
"Make an effort to follow the prevailing indentation style of surrounding "
"code. In particular, changes to whitespace make it harder for other "
"developers to track changes over time. When reformatting code must be done, "
"do it as a commit separate from any semantic changes."
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:192
#, no-wrap
msgid "Get rid of RTAPI_SUCCESS, use 0 instead"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:197
msgid ""
"The test \"retval < 0\" should feel familiar; it's the same kind of test you "
"use in userspace (returns -1 for error) and in kernel space (returns -ERRNO "
"for error)."
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:198
#, no-wrap
msgid "Simplify complicated history before sharing with fellow developers"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:204
msgid ""
"With git, it's possible to record every edit and false start as a separate "
"commit. This is very convenient as a way to create checkpoints during "
"development, but often you don't want to share these false starts with "
"others."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:207
msgid ""
"Git provides two main ways to clean history, both of which can be done "
"freely before you share the change:"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:212
msgid ""
"`git commit --amend` lets you make additional changes to the last thing you "
"committed, optionally modifying the commit message as well. Use this if you "
"realized right away that you left something out of the commit, or if you "
"typo'd the commit message."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:218
msgid ""
"`git rebase --interactive` upstream-branch lets you go back through each "
"commit made since you forked your feature branch from the upstream branch, "
"possibly editing commits, dropping commits, or squashing (combining)  "
"commits with others. Rebase can also be used to split individual commits "
"into multiple new commits."
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:219
#, no-wrap
msgid "Make sure every commit builds"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:227
msgid ""
"If your change consists of several patches, `git rebase -i` may be used to "
"reorder these patches into a sequence of commits which more clearly lays out "
"the steps of your work.  A potential consequence of reordering patches is "
"that one might get dependencies wrong - for instance, introducing a use of a "
"variable, and the declaration of that variable only follows in a later patch."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:233
msgid ""
"While the branch HEAD will build, not every commit might build in such a "
"case.  That breaks `git bisect` - something somebody else might use later on "
"to find the commit which introduced a bug.  So beyond making sure your "
"branch builds, it is important to assure every single commit builds as well."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:239
msgid ""
"There's an automatic way to check a branch for each commit being buildable - "
"see http://dustin.sallings.org/2010/03/28/git-test-sequence.html and the "
"code at https://github.com/dustin/bindir/blob/master/git-test-sequence.  Use "
"as follows (in this case testing every commit from origin/master to HEAD, "
"including running regression tests):"
msgstr ""

#. type: delimited block -
#: src/code/contributing-to-linuxcnc.adoc:243
#, no-wrap
msgid ""
"cd linuxcnc-dev\n"
"git-test-sequence origin/master..  '(cd src && make && ../scripts/runtests)'\n"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:246
msgid "This will either report 'All is well' or 'Broke on <commit>'"
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:247
#, no-wrap
msgid "Renaming files"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:253
msgid ""
"Please use the ability to rename files very cautiously. Like running indent "
"on single files, renames still make it more difficult to follow changes over "
"time. At a minimum, you should seek consensus on irc or the mailing list "
"that the rename is an improvement."
msgstr ""

#. type: Title ===
#: src/code/contributing-to-linuxcnc.adoc:254
#, no-wrap
msgid "Prefer \"rebase\""
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:261
msgid ""
"Use `git pull --rebase` instead of bare `git pull` in order to keep a nice "
"linear history. When you rebase, you always retain your work as revisions "
"that are ahead of origin/master, so you can do things like `git format-"
"patch` them to share with others without pushing to the central repository."
msgstr ""

#. type: Title ==
#: src/code/contributing-to-linuxcnc.adoc:262
#, no-wrap
msgid "Translations"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:269
msgid ""
"The LinuxCNC project uses `gettext` to translate the software into many "
"languages. We welcome contributions and help in this area! Improving and "
"extending the translations is easy: you don't need to know any programming, "
"and you don't need to install any special translation programs or other "
"software."
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:273
msgid ""
"The easiest way to help with translations is using Weblate, an open-source "
"web service.  Our translation project is here: https://hosted.weblate.org/"
"projects/linuxcnc/"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:276
msgid ""
"Documentation on how to use Weblate is here: https://docs.weblate.org/en/"
"latest/user/basic.html"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:280
msgid ""
"If web services are not your thing, you can also work on translations using "
"a variety of local gettext translator apps including gtranslator, poedit, "
"and many more."
msgstr ""

#. type: Title ==
#: src/code/contributing-to-linuxcnc.adoc:281
#, no-wrap
msgid "Other ways to contribute"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:285
msgid ""
"There are many ways to contribute to LinuxCNC, that are not addressed by "
"this document. These ways include:"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:287
msgid "Answering questions on the forum, mailing lists, and in IRC"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:288
msgid "Reporting bugs on the bug tracker, forum, mailing lists, or in IRC"
msgstr ""

#. type: Plain text
#: src/code/contributing-to-linuxcnc.adoc:289
msgid "Helping test experimental features"
msgstr ""

#. type: Title =
#: src/code/nml-messages.adoc:5
#, no-wrap
msgid "NML Messages"
msgstr ""

#. type: Plain text
#: src/code/nml-messages.adoc:9
#, no-wrap
msgid ""
"List of NML messages.\n"
"For details see `src/emc/nml_intf/emc.hh`."
msgstr ""

#. type: Title ==
#: src/code/nml-messages.adoc:11
#, no-wrap
msgid "OPERATOR"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:17
#, no-wrap
msgid ""
"EMC_OPERATOR_ERROR_TYPE\n"
"EMC_OPERATOR_TEXT_TYPE\n"
"EMC_OPERATOR_DISPLAY_TYPE\n"
msgstr ""

#. type: Title ==
#: src/code/nml-messages.adoc:20
#, no-wrap
msgid "JOINT"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:44
#, no-wrap
msgid ""
"EMC_JOINT_SET_JOINT_TYPE\n"
"EMC_JOINT_SET_UNITS_TYPE\n"
"EMC_JOINT_SET_MIN_POSITION_LIMIT_TYPE\n"
"EMC_JOINT_SET_MAX_POSITION_LIMIT_TYPE\n"
"EMC_JOINT_SET_FERROR_TYPE\n"
"EMC_JOINT_SET_HOMING_PARAMS_TYPE\n"
"EMC_JOINT_SET_MIN_FERROR_TYPE\n"
"EMC_JOINT_SET_MAX_VELOCITY_TYPE\n"
"EMC_JOINT_INIT_TYPE\n"
"EMC_JOINT_HALT_TYPE\n"
"EMC_JOINT_ABORT_TYPE\n"
"EMC_JOINT_ENABLE_TYPE\n"
"EMC_JOINT_DISABLE_TYPE\n"
"EMC_JOINT_HOME_TYPE\n"
"EMC_JOINT_ACTIVATE_TYPE\n"
"EMC_JOINT_DEACTIVATE_TYPE\n"
"EMC_JOINT_OVERRIDE_LIMITS_TYPE\n"
"EMC_JOINT_LOAD_COMP_TYPE\n"
"EMC_JOINT_SET_BACKLASH_TYPE\n"
"EMC_JOINT_UNHOME_TYPE\n"
"EMC_JOINT_STAT_TYPE\n"
msgstr ""

#. type: TH
#: src/code/nml-messages.adoc:47 src/config/pncconf.adoc:158
#: src/gui/gladevcp.adoc:27 src/gui/pyvcp-examples.adoc:12
#: src/user/user-intro.adoc:103 man/man1/axis.1:26
#, no-wrap
msgid "AXIS"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:51
#, no-wrap
msgid "EMC_AXIS_STAT_TYPE\n"
msgstr ""

#. type: Table
#: src/code/nml-messages.adoc:54 src/plasma/qtplasmac.adoc:801
#, no-wrap
msgid "JOG"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:61
#, no-wrap
msgid ""
"EMC_JOG_CONT_TYPE\n"
"EMC_JOG_INCR_TYPE\n"
"EMC_JOG_ABS_TYPE\n"
"EMC_JOG_STOP_TYPE\n"
msgstr ""

#. type: Title ==
#: src/code/nml-messages.adoc:64
#, no-wrap
msgid "TRAJ"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:105
#, no-wrap
msgid ""
"EMC_TRAJ_SET_AXES_TYPE\n"
"EMC_TRAJ_SET_UNITS_TYPE\n"
"EMC_TRAJ_SET_CYCLE_TIME_TYPE\n"
"EMC_TRAJ_SET_MODE_TYPE\n"
"EMC_TRAJ_SET_VELOCITY_TYPE\n"
"EMC_TRAJ_SET_ACCELERATION_TYPE\n"
"EMC_TRAJ_SET_MAX_VELOCITY_TYPE\n"
"EMC_TRAJ_SET_MAX_ACCELERATION_TYPE\n"
"EMC_TRAJ_SET_SCALE_TYPE\n"
"EMC_TRAJ_SET_RAPID_SCALE_TYPE\n"
"EMC_TRAJ_SET_MOTION_ID_TYPE\n"
"EMC_TRAJ_INIT_TYPE\n"
"EMC_TRAJ_HALT_TYPE\n"
"EMC_TRAJ_ENABLE_TYPE\n"
"EMC_TRAJ_DISABLE_TYPE\n"
"EMC_TRAJ_ABORT_TYPE\n"
"EMC_TRAJ_PAUSE_TYPE\n"
"EMC_TRAJ_STEP_TYPE\n"
"EMC_TRAJ_RESUME_TYPE\n"
"EMC_TRAJ_DELAY_TYPE\n"
"EMC_TRAJ_LINEAR_MOVE_TYPE\n"
"EMC_TRAJ_CIRCULAR_MOVE_TYPE\n"
"EMC_TRAJ_SET_TERM_COND_TYPE\n"
"EMC_TRAJ_SET_OFFSET_TYPE\n"
"EMC_TRAJ_SET_G5X_TYPE\n"
"EMC_TRAJ_SET_HOME_TYPE\n"
"EMC_TRAJ_SET_ROTATION_TYPE\n"
"EMC_TRAJ_SET_G92_TYPE\n"
"EMC_TRAJ_CLEAR_PROBE_TRIPPED_FLAG_TYPE\n"
"EMC_TRAJ_PROBE_TYPE\n"
"EMC_TRAJ_SET_TELEOP_ENABLE_TYPE\n"
"EMC_TRAJ_SET_SPINDLESYNC_TYPE\n"
"EMC_TRAJ_SET_SPINDLE_SCALE_TYPE\n"
"EMC_TRAJ_SET_FO_ENABLE_TYPE\n"
"EMC_TRAJ_SET_SO_ENABLE_TYPE\n"
"EMC_TRAJ_SET_FH_ENABLE_TYPE\n"
"EMC_TRAJ_RIGID_TAP_TYPE\n"
"EMC_TRAJ_STAT_TYPE\n"
msgstr ""

#. type: TH
#: src/code/nml-messages.adoc:108 man/man9/motion.9:1
#, no-wrap
msgid "MOTION"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:118
#, no-wrap
msgid ""
"EMC_MOTION_INIT_TYPE\n"
"EMC_MOTION_HALT_TYPE\n"
"EMC_MOTION_ABORT_TYPE\n"
"EMC_MOTION_SET_AOUT_TYPE\n"
"EMC_MOTION_SET_DOUT_TYPE\n"
"EMC_MOTION_ADAPTIVE_TYPE\n"
"EMC_MOTION_STAT_TYPE\n"
msgstr ""

#. type: Labeled list
#: src/code/nml-messages.adoc:121 src/common/glossary.adoc:354
#, no-wrap
msgid "TASK"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:144
#, no-wrap
msgid ""
"EMC_TASK_INIT_TYPE\n"
"EMC_TASK_HALT_TYPE\n"
"EMC_TASK_ABORT_TYPE\n"
"EMC_TASK_SET_MODE_TYPE\n"
"EMC_TASK_SET_STATE_TYPE\n"
"EMC_TASK_PLAN_OPEN_TYPE\n"
"EMC_TASK_PLAN_RUN_TYPE\n"
"EMC_TASK_PLAN_READ_TYPE\n"
"EMC_TASK_PLAN_EXECUTE_TYPE\n"
"EMC_TASK_PLAN_PAUSE_TYPE\n"
"EMC_TASK_PLAN_STEP_TYPE\n"
"EMC_TASK_PLAN_RESUME_TYPE\n"
"EMC_TASK_PLAN_END_TYPE\n"
"EMC_TASK_PLAN_CLOSE_TYPE\n"
"EMC_TASK_PLAN_INIT_TYPE\n"
"EMC_TASK_PLAN_SYNCH_TYPE\n"
"EMC_TASK_PLAN_SET_OPTIONAL_STOP_TYPE\n"
"EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE\n"
"EMC_TASK_PLAN_OPTIONAL_STOP_TYPE\n"
"EMC_TASK_STAT_TYPE\n"
msgstr ""

#. type: Title ==
#: src/code/nml-messages.adoc:147
#, no-wrap
msgid "TOOL"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:161
#, no-wrap
msgid ""
"EMC_TOOL_INIT_TYPE\n"
"EMC_TOOL_HALT_TYPE\n"
"EMC_TOOL_ABORT_TYPE\n"
"EMC_TOOL_PREPARE_TYPE\n"
"EMC_TOOL_LOAD_TYPE\n"
"EMC_TOOL_UNLOAD_TYPE\n"
"EMC_TOOL_LOAD_TOOL_TABLE_TYPE\n"
"EMC_TOOL_SET_OFFSET_TYPE\n"
"EMC_TOOL_SET_NUMBER_TYPE\n"
"EMC_TOOL_START_CHANGE_TYPE\n"
"EMC_TOOL_STAT_TYPE\n"
msgstr ""

#. type: Title ==
#: src/code/nml-messages.adoc:164
#, no-wrap
msgid "AUX"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:172
#, no-wrap
msgid ""
"EMC_AUX_ESTOP_ON_TYPE\n"
"EMC_AUX_ESTOP_OFF_TYPE\n"
"EMC_AUX_ESTOP_RESET_TYPE\n"
"EMC_AUX_INPUT_WAIT_TYPE\n"
"EMC_AUX_STAT_TYPE\n"
msgstr ""

#. type: TH
#: src/code/nml-messages.adoc:175 src/gui/gmoccapy.adoc:633
#: man/man9/spindle.9:9
#, no-wrap
msgid "SPINDLE"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:189
#, no-wrap
msgid ""
"EMC_SPINDLE_ON_TYPE\n"
"EMC_SPINDLE_OFF_TYPE\n"
"EMC_SPINDLE_INCREASE_TYPE\n"
"EMC_SPINDLE_DECREASE_TYPE\n"
"EMC_SPINDLE_CONSTANT_TYPE\n"
"EMC_SPINDLE_BRAKE_RELEASE_TYPE\n"
"EMC_SPINDLE_BRAKE_ENGAGE_TYPE\n"
"EMC_SPINDLE_SPEED_TYPE\n"
"EMC_SPINDLE_ORIENT_TYPE\n"
"EMC_SPINDLE_WAIT_ORIENT_COMPLETE_TYPE\n"
"EMC_SPINDLE_STAT_TYPE\n"
msgstr ""

#. type: Title ==
#: src/code/nml-messages.adoc:192
#, no-wrap
msgid "COOLANT"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:200
#, no-wrap
msgid ""
"EMC_COOLANT_MIST_ON_TYPE\n"
"EMC_COOLANT_MIST_OFF_TYPE\n"
"EMC_COOLANT_FLOOD_ON_TYPE\n"
"EMC_COOLANT_FLOOD_OFF_TYPE\n"
"EMC_COOLANT_STAT_TYPE\n"
msgstr ""

#. type: Title ==
#: src/code/nml-messages.adoc:203
#, no-wrap
msgid "LUBE"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:209
#, no-wrap
msgid ""
"EMC_LUBE_ON_TYPE\n"
"EMC_LUBE_OFF_TYPE\n"
"EMC_LUBE_STAT_TYPE\n"
msgstr ""

#. type: Title ==
#: src/code/nml-messages.adoc:212
#, no-wrap
msgid "IO (Input/Output)"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:221
#, no-wrap
msgid ""
"EMC_IO_INIT_TYPE\n"
"EMC_IO_HALT_TYPE\n"
"EMC_IO_ABORT_TYPE\n"
"EMC_IO_SET_CYCLE_TIME_TYPE\n"
"EMC_IO_STAT_TYPE\n"
"EMC_IO_PLUGIN_CALL_TYPE\n"
msgstr ""

#. type: Title ==
#: src/code/nml-messages.adoc:224
#, no-wrap
msgid "Others"
msgstr ""

#. type: delimited block -
#: src/code/nml-messages.adoc:235
#, no-wrap
msgid ""
"EMC_NULL_TYPE\n"
"EMC_SET_DEBUG_TYPE\n"
"EMC_SYSTEM_CMD_TYPE\n"
"EMC_INIT_TYPE\n"
"EMC_HALT_TYPE\n"
"EMC_ABORT_TYPE\n"
"EMC_STAT_TYPE\n"
"EMC_EXEC_PLUGIN_CALL_TYPE\n"
msgstr ""

#. type: Title =
#: src/code/rs274.adoc:5
#, no-wrap
msgid "Stand Alone Interpreter"
msgstr ""

#. type: Plain text
#: src/code/rs274.adoc:14
msgid ""
"The rs274 stand alone interpreter is available for use via the command line."
msgstr ""

#. type: Plain text
#: src/code/rs274.adoc:20 man/man1/rs274.1:37
#, no-wrap
msgid ""
"Usage: rs274 [-p interp.so] [-t tool.tbl] [-v var-file.var] [-n 0|1|2]\n"
"          [-b] [-s] [-g] [input file [output file]]\n"
msgstr ""

#. type: Plain text
#: src/code/rs274.adoc:34 man/man1/rs274.1:51
#, no-wrap
msgid ""
"    -p: Specify the pluggable interpreter to use\n"
"    -t: Specify the .tbl (tool table) file to use\n"
"    -v: Specify the .var (parameter) file to use\n"
"    -n: Specify the continue mode:\n"
"           0: continue\n"
"           1: enter MDI mode\n"
"           2: stop (default)\n"
"    -b: Toggle the 'block delete' flag (default: OFF)\n"
"    -s: Toggle the 'print stack' flag (default: OFF)\n"
"    -g: Toggle the 'go (batch mode)' flag (default: OFF)\n"
"    -i: specify the .ini file (default: no ini file)\n"
"    -T: call task_init()\n"
"    -l: specify the log_level (default: -1)\n"
msgstr ""

#. type: SH
#: src/code/rs274.adoc:36 src/examples/gs2-example.adoc:13
#: src/gui/qtvcp-code-snippets.adoc:53 src/gui/qtvcp-libraries.adoc:56
#: src/gui/qtvcp-libraries.adoc:993 src/hal/comp.adoc:62
#: src/hal/halmodule.adoc:182 src/hal/halmodule.adoc:191
#: src/hal/halmodule.adoc:209 src/hal/halmodule.adoc:218
#: src/hal/halmodule.adoc:227 src/hal/halmodule.adoc:273
#: src/hal/halmodule.adoc:355 src/hal/haltcl.adoc:25 src/hal/haltcl.adoc:182
#: src/hal/haltcl.adoc:200 src/hal/haltcl.adoc:260 src/hal/twopass.adoc:78
#: src/hal/twopass.adoc:164 src/ladder/ladder-intro.adoc:75
#: src/plasma/qtplasmac.adoc:4035 man/man1/rs274.1:52
#, no-wrap
msgid "Example"
msgstr ""

#. type: Plain text
#: src/code/rs274.adoc:41 man/man1/rs274.1:57
msgid ""
"To see the output of a loop for example we can run rs274 on the following "
"file and see that the loop never ends. To break out of the loop use Ctrl Z. "
"The following two files are needed to run the example."
msgstr ""

#. type: Block title
#: src/code/rs274.adoc:42
#, no-wrap
msgid "test.ngc"
msgstr ""

#. type: delimited block -
#: src/code/rs274.adoc:46
#, no-wrap
msgid "#<test> = 123.352\n"
msgstr ""

#. type: delimited block -
#: src/code/rs274.adoc:51
#, no-wrap
msgid ""
"o101 while [[#<test> MOD 60 ] NE 0]\n"
"(debug,#<test>)\n"
"    #<test> = [#<test> + 1]\n"
"o101 endwhile\n"
msgstr ""

#. type: delimited block -
#: src/code/rs274.adoc:53 src/gcode/coordinates.adoc:467
#, no-wrap
msgid "M2\n"
msgstr ""

#. type: Block title
#: src/code/rs274.adoc:55
#, no-wrap
msgid "test.tbl"
msgstr ""

#. type: delimited block -
#: src/code/rs274.adoc:60
#, no-wrap
msgid ""
"T1 P1 Z0.511 D0.125 ;1/8 end mill\n"
"T2 P2 Z0.1 D0.0625 ;1/16 end mill\n"
"T3 P3 Z1.273 D0.201 ;#7 tap drill\n"
msgstr ""

#. type: Block title
#: src/code/rs274.adoc:62
#, no-wrap
msgid "command"
msgstr ""

#. type: delimited block -
#: src/code/rs274.adoc:65
#, no-wrap
msgid "rs274 -g test.ngc -t test.tbl\n"
msgstr ""

#. type: Title =
#: src/code/style-guide.adoc:4
#, no-wrap
msgid "Coding Style"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:7
msgid ""
"This chapter describes the source code style preferred by the LinuxCNC team."
msgstr ""

#. type: Title ==
#: src/code/style-guide.adoc:8
#, no-wrap
msgid "Do no harm"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:13
msgid ""
"When making small edits to code in a style different than the one described "
"below, observe the local coding style. Rapid changes from one coding style "
"to another decrease code readability."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:17
msgid ""
"Never check in code after running \"indent\" on it. The whitespace changes "
"introduced by indent make it more difficult to follow the revision history "
"of the file."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:21
msgid ""
"Do not use an editor that makes unneeded changes to whitespace (e.g., which "
"replaces 8 spaces with a tabstop on a line not otherwise modified, or word-"
"wraps lines not otherwise modified)."
msgstr ""

#. type: Title ==
#: src/code/style-guide.adoc:22
#, no-wrap
msgid "Tab Stops"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:26
msgid ""
"A tab stop always corresponds to 8 spaces. Do not write code that displays "
"correctly only with a differing tab stop setting."
msgstr ""

#. type: Title ==
#: src/code/style-guide.adoc:27
#, no-wrap
msgid "Indentation"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:31
msgid ""
"Use 4 spaces per level of indentation. Combining 8 spaces into one tab is "
"acceptable but not required."
msgstr ""

#. type: Title ==
#: src/code/style-guide.adoc:32
#, no-wrap
msgid "Placing Braces"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:35
msgid ""
"Put the opening brace last on the line, and put the closing brace first:"
msgstr ""

#. type: delimited block -
#: src/code/style-guide.adoc:41
#, no-wrap
msgid ""
"if (x) {\n"
"    // do something appropriate\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:46
msgid ""
"The closing brace is on a line of its own, except in the cases where it is "
"followed by a continuation of the same statement, i.e. a 'while' in a do-"
"statement or an 'else' in an if-statement, like this:"
msgstr ""

#. type: delimited block -
#: src/code/style-guide.adoc:52
#, no-wrap
msgid ""
"do {\n"
"    // something important\n"
"} while (x > 0);\n"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:55 src/gui/pyvcp.adoc:290
msgid "and"
msgstr ""

#. type: delimited block -
#: src/code/style-guide.adoc:65
#, no-wrap
msgid ""
"if (x == y) {\n"
"    // do one thing\n"
"} else if (x < y) {\n"
"    // do another thing\n"
"} else {\n"
"    // do a third thing\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:70
msgid ""
"This brace-placement also minimizes the number of empty (or almost empty) "
"lines, which allows a greater amount of code or comments to be visible at "
"once in a terminal of a fixed size."
msgstr ""

#. type: Title ==
#: src/code/style-guide.adoc:71
#, no-wrap
msgid "Naming"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:78
msgid ""
"C is a Spartan language, and so should your naming be. Unlike Modula-2 and "
"Pascal programmers, C programmers do not use cute names like "
"ThisVariableIsATemporaryCounter. A C programmer would call that variable "
"'tmp', which is much easier to write, and not the least more difficult to "
"understand."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:81
msgid ""
"However, descriptive names for global variables are a must. To call a global "
"function 'foo' is a shooting offense."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:87
#, no-wrap
msgid ""
"GLOBAL variables (to be used only if you *really*  need them) need to\n"
"have descriptive names, as do global functions. If\n"
"you have a function that counts the number of active users, you should\n"
" call that 'count_active_users()' or similar, you should *not* call it\n"
"'cntusr()'.\n"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:92
msgid ""
"Encoding the type of a function into the name (so-called Hungarian notation) "
"is brain damaged - the compiler knows the types anyway and can check those, "
"and it only confuses the programmer. No wonder Microsoft makes buggy "
"programs."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:98
msgid ""
"LOCAL variable names should be short, and to the point. If you have some "
"random integer loop counter, it should probably be called 'i'.  Calling it "
"'loop_counter' is non-productive, if there is no chance of it being "
"misunderstood. Similarly, 'tmp' can be just about any type of variable that "
"is used to hold a temporary value."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:102
msgid ""
"If you are afraid to mix up your local variable names, you have another "
"problem, which is called the function-growth-hormone-imbalance syndrome. See "
"next chapter."
msgstr ""

#. type: Title ===
#: src/code/style-guide.adoc:103 src/config/core-components.adoc:200
#: src/drivers/ax5214h.adoc:70 src/drivers/motenc.adoc:108
#: src/drivers/pico-ppmc.adoc:233 src/drivers/servo-to-go.adoc:117
#: src/gui/gstat.adoc:496 src/gui/qtvcp-widgets.adoc:2332
#: src/hal/basic-hal.adoc:394 src/hal/basic-hal.adoc:426
#: src/hal/basic-hal.adoc:456 src/hal/basic-hal.adoc:488
#: src/hal/parallel-port.adoc:257 src/hal/rtcomps.adoc:327
#: src/hal/rtcomps.adoc:473 src/hal/rtcomps.adoc:591 src/hal/rtcomps.adoc:650
#: src/hal/rtcomps.adoc:723 src/hal/rtcomps.adoc:787
#, no-wrap
msgid "Functions"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:108
msgid ""
"Functions should be short and sweet, and do just one thing. They should fit "
"on one or two screenfuls of text (the ISO/ANSI screen size is 80x24, as we "
"all know), and do one thing and do that well."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:114
msgid ""
"The maximum length of a function is inversely proportional to the complexity "
"and indentation level of that function. So, if you have a conceptually "
"simple function that is just one long (but simple)  case-statement, where "
"you have to do lots of small things for a lot of different cases, it's OK to "
"have a longer function."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:122
msgid ""
"However, if you have a complex function, and you suspect that a less-than-"
"gifted first-year high-school student might not even understand what the "
"function is all about, you should adhere to the maximum limits all the more "
"closely. Use helper functions with descriptive names (you can ask the "
"compiler to in-line them if you think it's performance-critical, and it will "
"probably do a better job of it that you would have done)."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:129
msgid ""
"Another measure of the function is the number of local variables. They "
"shouldn't exceed 5-10, or you're doing something wrong. Re-think the "
"function, and split it into smaller pieces. A human brain can generally "
"easily keep track of about 7 different things, anything more and it gets "
"confused. You know you're brilliant, but maybe you'd like to understand what "
"you did 2 weeks from now."
msgstr ""

#. type: Title ==
#: src/code/style-guide.adoc:130
#, no-wrap
msgid "Commenting"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:136
msgid ""
"Comments are good, but there is also a danger of over-commenting.  NEVER try "
"to explain HOW your code works in a comment: it's much better to write the "
"code so that the *working* is obvious, and it's a waste of time to explain "
"badly written code."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:146
msgid ""
"Generally, you want your comments to tell WHAT your code does, not HOW. A "
"boxed comment describing the function, return value, and who calls it placed "
"above the body is good. Also, try to avoid putting comments inside a "
"function body: if the function is so complex that you need to separately "
"comment parts of it, you should probably re-read the Functions section "
"again. You can make small comments to note or warn about something "
"particularly clever (or ugly), but try to avoid excess.  Instead, put the "
"comments at the head of the function, telling people what it does, and "
"possibly WHY it does it."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:151
msgid ""
"If comments along the lines of /* Fix me */ are used, please, please, say "
"why something needs fixing. When a change has been made to the affected "
"portion of code, either remove the comment, or amend it to indicate a change "
"has been made and needs testing."
msgstr ""

#. type: Title ==
#: src/code/style-guide.adoc:152
#, no-wrap
msgid "Shell Scripts & Makefiles"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:158
msgid ""
"Not everyone has the same tools and packages installed. Some people use vi, "
"others emacs - A few even avoid having either package installed, preferring "
"a lightweight text editor such as nano or the one built in to Midnight "
"Commander."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:165
msgid ""
"gawk versus mawk - Again, not everyone will have gawk installed, mawk is "
"nearly a tenth of the size and yet conforms to the POSIX AWK standard. If "
"some obscure gawk specific command is needed that mawk does not provide, "
"than the script will break for some users. The same would apply to mawk. In "
"short, use the generic awk invocation in preference to gawk or mawk."
msgstr ""

#. type: Title ==
#: src/code/style-guide.adoc:166
#, no-wrap
msgid "C++ Conventions"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:172
msgid ""
"C++ coding styles are always likely to end up in heated debates (a bit like "
"the emacs versus vi arguments). One thing is certain however, a common style "
"used by everyone working on a project leads to uniform and readable code."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:176
msgid ""
"Naming conventions: Constants either from #defines or enumerations should be "
"in upper case through out. Rationale: Makes it easier to spot compile time "
"constants in the source code, e.g., EMC_MESSAGE_TYPE."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:180
msgid ""
"Classes and Namespaces should capitalize the first letter of each word and "
"avoid underscores. Rationale: Identifies classes, constructors and "
"destructors, e.g., GtkWidget."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:184
msgid ""
"Methods (or function names) should follow the C recommendations above and "
"should not include the class name. Rationale: Maintains a common style "
"across C and C++ sources, e.g., get_foo_bar()."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:189
msgid ""
"However, boolean methods are easier to read if they avoid underscores and "
"use an 'is' prefix (not to be confused with methods that manipulate a "
"boolean). Rationale: Identifies the return value as TRUE or FALSE and "
"nothing else, e.g., isOpen, isHomed."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:192
msgid ""
"Do NOT use 'Not' in a boolean name, it leads only leads to confusion when "
"doing logical tests, e.g., isNotOnLimit or is_not_on_limit are BAD."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:198
msgid ""
"Variable names should avoid the use of upper case and underscores except for "
"local or private names. The use of global variables should be avoided as "
"much as possible. Rationale: Clarifies which are variables and which are "
"methods. Public: e.g., axislimit Private: e.g., maxvelocity_ ."
msgstr ""

#. type: Title ===
#: src/code/style-guide.adoc:199
#, no-wrap
msgid "Specific method naming conventions"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:204
msgid ""
"The terms get and set should be used where an attribute is accessed "
"directly. Rationale: Indicates the purpose of the function or method, e.g., "
"get_foo set_bar."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:207
msgid ""
"For methods involving boolean attributes, set & reset is preferred.  "
"Rationale: As above. e.g. set_amp_enable reset_amp_fault"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:211
msgid ""
"Math intensive methods should use compute as a prefix. Rationale: Shows that "
"it is computationally intensive and will hog the CPU. e.g.  compute_PID"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:216
msgid ""
"Abbreviations in names should be avoided where possible - The exception is "
"for local variable names. Rationale: Clarity of code. e.g.  pointer is "
"preferred over ptr compute is preferred over cmp compare is again preferred "
"over cmp."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:219
msgid ""
"Enumerates and other constants can be prefixed by a common type name, e.g., "
"`enum COLOR { COLOR_RED, COLOR_BLUE };` ."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:223
msgid ""
"Excessive use of macros and defines should be avoided - Using simple methods "
"or functions is preferred. Rationale: Improves the debugging process."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:230
msgid ""
"Include Statements Header files must be included at the top of a source file "
"and not scattered throughout the body. They should be sorted and grouped by "
"their hierarchical position within the system with the low level files "
"included first. Include file paths should NEVER be absolute - Use the "
"compiler -I flag instead to extend the search path. Rationale: Headers may "
"not be in the same place on all systems."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:234
msgid ""
"Pointers and references should have their reference symbol next to the "
"variable name rather than the type name. Rationale: Reduces confusion, e.g., "
"`float *x` or `int &i`."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:237
msgid ""
"Implicit tests for zero should not be used except for boolean variables, e."
"g., `if (spindle_speed != 0)` NOT `if (spindle_speed)`."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:241
#, no-wrap
msgid ""
"Only loop control statements must be included in a for() construct, e.g., `sum = 0; for (i=0; i<10; i++) { sum += value[i]; }`\n"
"NOT: `for (i=0, sum=0; i<10; i++) sum += value[i];`."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:244
msgid ""
"Likewise, executable statements in conditionals must be avoided, e.g., `if "
"(fd = open(file_name)` is bad."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:247
msgid ""
"Complex conditional statements should be avoided - Introduce temporary "
"boolean variables instead."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:251
msgid ""
"Parentheses should be used in plenty in mathematical expressions - Do not "
"rely on operator precedence when an extra parentheses would clarify things."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:256
msgid ""
"File names: C++ sources and headers use .cc and .hh extension. The use of .c "
"and .h are reserved for plain C. Headers are for class, method, and "
"structure declarations, not code (unless the functions are declared inline)."
msgstr ""

#. type: Title ==
#: src/code/style-guide.adoc:257
#, no-wrap
msgid "Python coding standards"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:261
msgid ""
"Use the http://www.python.org/dev/peps/pep-0008/[PEP 8] style for Python "
"code."
msgstr ""

#. type: Title ==
#: src/code/style-guide.adoc:262
#, no-wrap
msgid "Comp coding standards"
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:267
msgid ""
"In the declaration portion of a .comp file, begin each declaration at the "
"first column. Insert extra blank lines when they help group related items."
msgstr ""

#. type: Plain text
#: src/code/style-guide.adoc:269
msgid "In the code portion of a .comp file, follow normal C coding style."
msgstr ""

#. type: Title =
#: src/common/emc-history.adoc:5
#, no-wrap
msgid "Origin(((History)))"
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:11
msgid ""
"EMC (the Enhanced Machine Controller) was created by http://www.nist.gov/"
"index.html[NIST] , the National Institute of Standards and Technology, which "
"is an agency of the Commerce Department of the United States government."
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:17
msgid ""
"NIST first became interested in writing a motion control package as a test "
"platform for concepts and standards. Early sponsorship from General Motors "
"resulted in an adaptation of the fledgling version of EMC using PMAC "
"intelligent control boards running under a \"real time\" version of Windows "
"NT and controlling a large milling machine."
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:28
msgid ""
"As is required of all 'work product' of US federal government employees, the "
"resulting software and the report about it are required to be in the public "
"domain and a report about it was duly published, including on the Internet. "
"It was there that Matt Shaver discovered EMC. He contacted NIST and entered "
"into discussions with Fred Proctor about adapting the code for use in "
"controlling less expensive hardware to be used for upgrades and replacements "
"of CNC controls that were obsolete or just plain dead. NIST was intrigued "
"because they too wanted something less expensive. In order to launch a "
"cooperative effort, a formal agreement was created which guaranteed that the "
"resulting code and design would remain in the public domain."
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:45
msgid ""
"Early considerations focused on replacing the expensive and temperamental "
"\"real time\" Windows NT system. It was proposed that a relatively new (at "
"the time) real time extension of the Linux operating system be tried. This "
"idea was pursued with success. Next up was the issue of the expensive "
"intelligent motion control boards. By this time the processing power of a PC "
"was considered great enough to directly take control of the motion "
"routines.  A quick search of available hardware resulted in the selection of "
"a http://www.servotogo.com/[Servo-To-Go] interface board as the first "
"platform for letting the PC directly control the motors. Software for "
"trajectory planning and PID loop control was added to the existing user "
"interface and RS274 interpreter. Matt successfully used this version to "
"upgrade a couple of machines with dead controls and this became the EMC "
"system that first caught the attention of the outside world. Mention of EMC "
"on the rec.crafts.metalworking USENET newsgroup resulted in early adopters "
"like http://pico-systems.com/motion.html[Jon Elson] building systems to take "
"advantage of EMC."
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:55
msgid ""
"NIST set up a mailing list for people interested in EMC. As time went on, "
"others outside NIST became interested in improving EMC. Many people "
"requested or coded small improvements to the code. Ray Henry wanted to "
"refine the user interface. Since Ray was reluctant to try tampering with the "
"C code in which the user interface was written, a simpler method was sought. "
"Fred Proctor of NIST suggested a scripting language and wrote code to "
"interface the Tcl/Tk scripting language to the internal NML communications "
"of EMC. With this tool Ray went on to write a Tcl/Tk program that became the "
"predominant user interface for EMC at the time."
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:60
msgid ""
"For NIST's perspective, see this http://web.archive.org/web/20120417094958/"
"http://www.isd.mel.nist.gov/documents/shackleford/4191_05.pdf[paper] written "
"by William Shackleford and Frederick Proctor, describing the history of EMC "
"and its transition to open source."
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:74
msgid ""
"By this time interest in EMC as beginning to pick up substantially. As more "
"and more people attempted installation of EMC, the difficulty of patching a "
"Linux kernel with the real time extensions and of compiling the EMC code "
"became glaringly obvious. Many attempts to document the process and write "
"scripts were attempted, some with moderate success. The problem of matching "
"the correct version of the patches and compilers with the selected version "
"of Linux kept cropping up. Paul Corner came to the rescue with the BDI "
"(brain dead install) which was a CD from which a complete working system "
"(Linux, patches, and EMC) could be installed.  The BDI approach opened the "
"world of EMC to a much larger user community. As this community continued to "
"grow, the EMC mailing list and code archives were moved to http://www."
"sourceforge.net/projects/emc/[SourceForge] and the LinuxCNC web site was "
"established."
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:84
msgid ""
"With a larger community of users participating, EMC became a major focus of "
"interest at the on-going CNC exhibits at NAMES and NAMES became the annual "
"meeting event for EMC. For the first couple of years, the meetings just "
"happened because the interested parties were at NAMES. In 2003 the EMC user "
"community had its first announced public meeting. It was held the Monday "
"after NAMES in the lobby of the arena where the NAMES show was held.  "
"Organization was loose, but the idea of a hardware abstraction layer (HAL) "
"was born and the movement to restructure the code for ease of development "
"(EMC2) was proposed."
msgstr ""

#. type: Title ==
#: src/common/emc-history.adoc:85
#, no-wrap
msgid "Name Change"
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:92
msgid ""
"In the spring of 2011, the LinuxCNC Board of Directors was contacted by a "
"law firm representing EMC Corporation (www.emc.com) about the use of \"EMC\" "
"and \"EMC2\" to identify the software offered on linuxcnc.org. EMC "
"Corporation has registered various trademarks relating to EMC and EMC² (EMC "
"with superscripted numeral two)."
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:99
msgid ""
"After a number of conversations with the representative of EMC Corporation, "
"the final result is that, starting with the next major release of the "
"software, linuxcnc.org will stop identifying the software using \"emc\" or "
"\"EMC\", or those terms followed by digits. To the extent that the LinuxCNC "
"Board of Directors controls the names used to identify the software offered "
"on linuxcnc.org, the board has agreed to this."
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:103
msgid ""
"As a result, it was necessary to choose a new name for the software. Of the "
"options the board considered, there was consensus that \"LinuxCNC\" is the "
"best option, as this has been our website's name for years."
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:108
msgid ""
"In preparation for the new name, we have received a sub-license of the "
"LINUX® trademark from the Linux Foundation (www.linuxfoundation.org), "
"protecting our use of the LinuxCNC name. (LINUX® is the registered trademark "
"of Linus Torvalds in the U.S. and other countries.)"
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:112
msgid ""
"The rebranding effort included the linuxcnc.org website, the IRC channels, "
"and versions of the software and documentation since version 2.5.0."
msgstr ""

#. type: Title ==
#: src/common/emc-history.adoc:113
#, no-wrap
msgid "Additional Info"
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:119
msgid ""
"NIST published a paper describing the https://www.nist.gov/"
"node/704046[RS274NGC] language and the abstract machining center it "
"controls, as well as an early implementation of EMC.  The paper is also "
"available at http://linuxcnc.org/files/RS274NGCv3.pdf ."
msgstr ""

#. type: Plain text
#: src/common/emc-history.adoc:123
msgid ""
"NIST also published a paper on the history of EMC and its transition to "
"https://www.nist.gov/node/702276[open source]. The paper is also available "
"at http://linuxcnc.org/files/Use-of-Open-Source-Distribution-for-a-Machine-"
"Tool-Controller.pdf"
msgstr ""

#. type: Title =
#: src/common/glossary.adoc:3
#, no-wrap
msgid "Glossary"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:8
msgid ""
"A listing of terms and what they mean. Some terms have a general meaning and "
"several additional meanings for users, installers, and developers."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:9
#, no-wrap
msgid "Acme Screw"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:14
msgid ""
"(((acme screw))) A type of lead-screw that uses an Acme thread form. Acme "
"threads have somewhat lower friction and wear than simple triangular "
"threads, but ball-screws are lower yet. Most manual machine tools use acme "
"lead-screws."
msgstr ""

#. type: Title ===
#: src/common/glossary.adoc:15 src/config/stepper-quickstart.adoc:46
#: src/config/stepper-quickstart.adoc:85 src/gcode/coordinates.adoc:102
#: src/gui/halui.adoc:221
#, no-wrap
msgid "Axis"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:22
msgid ""
"(((axis))) One of the computer controlled movable parts of the machine. For "
"a typical vertical mill, the table is the X axis, the saddle is the Y axis, "
"and the quill or knee is the Z axis. Angular axes like rotary tables are "
"referred to as A, B, and C. Additional linear axes relative to the tool are "
"called U, V, and W respectively."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:23
#, no-wrap
msgid "Axis(GUI)"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:29
msgid ""
"(((GUI))) One of the Graphical User Interfaces available to users of "
"LinuxCNC. It features the modern use of menus and mouse buttons while "
"automating and hiding some of the more traditional LinuxCNC controls. It is "
"the only open-source interface that displays the entire tool path as soon as "
"a file is opened."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:30
#, no-wrap
msgid "GMOCCAPY (GUI)"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:36
msgid ""
"(((GUI))) A Graphical User Interfaces available to users of LinuxCNC. It "
"features the use and feel of an industrial control and can be used with "
"touch screen, mouse and keyboard. It support embedded tabs and hal driven "
"user messages, it offers a lot of hal beens to be controlled with hardware. "
"GMOCCAPY is highly customizable."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:37
#, no-wrap
msgid "Backlash"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:48
msgid ""
"(((backlash))) The amount of \"play\" or lost motion that occurs when "
"direction is reversed in a lead screw. or other mechanical motion driving "
"system. It can result from nuts that are loose on leadscrews, slippage in "
"belts, cable slack, \"wind-up\" in rotary couplings, and other places where "
"the mechanical system is not \"tight\".  Backlash will result in inaccurate "
"motion, or in the case of motion caused by external forces (think cutting "
"tool pulling on the work piece) the result can be broken cutting tools. This "
"can happen because of the sudden increase in chip load on the cutter as the "
"work piece is pulled across the backlash distance by the cutting tool."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:49
#, no-wrap
msgid "Backlash Compensation"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:58
msgid ""
"(((backlash compensation))) Any technique that attempts to reduce the effect "
"of backlash without actually removing it from the mechanical system. This is "
"typically done in software in the controller. This can correct the final "
"resting place of the part in motion but fails to solve problems related to "
"direction changes while in motion (think circular interpolation) and motion "
"that is caused when external forces (think cutting tool pulling on the work "
"piece) are the source of the motion."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:59
#, no-wrap
msgid "Ball Screw"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:64
msgid ""
"(((ball screw))) A type of lead-screw that uses small hardened steel balls "
"between the nut and screw to reduce friction.  Ball-screws have very low "
"friction and backlash, but are usually quite expensive."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:65
#, no-wrap
msgid "Ball Nut"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:69
msgid ""
"(((ball nut))) A special nut designed for use with a ball-screw. It contains "
"an internal passage to re-circulate the balls from one end of the screw to "
"the other."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:70
#, no-wrap
msgid "CNC"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:75
msgid ""
"(((CNC))) Computer Numerical Control. The general term used to refer to "
"computer control of machinery. Instead of a human operator turning cranks to "
"move a cutting tool, CNC uses a computer and motors to move the tool, based "
"on a part program."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:76
#, no-wrap
msgid "Comp"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:79
msgid ""
"(((comp))) A tool used to build, compile and install LinuxCNC HAL components."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:80
#, no-wrap
msgid "Configuration(n)"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:86
msgid ""
"A directory containing a set of configuration files. Custom configurations "
"are normally saved in the users home/linuxcnc/configs directory. These files "
"include LinuxCNC's traditional INI file and HAL files. A configuration may "
"also contain several general files that describe tools, parameters, and NML "
"connections."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:87
#, no-wrap
msgid "Configuration(v)"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:90
msgid ""
"The task of setting up LinuxCNC so that it matches the hardware on a machine "
"tool."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:91
#, no-wrap
msgid "Coordinate Measuring Machine"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:97
msgid ""
"(((coordinate measuring machine))) A Coordinate Measuring Machine is used to "
"make many accurate measurements on parts. These machines can be used to "
"create CAD data for parts where no drawings can be found, when a hand-made "
"prototype needs to be digitized for moldmaking, or to check the accuracy of "
"machined or molded parts."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:98 src/gui/gladevcp.adoc:1515
#, no-wrap
msgid "Display units"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:101
msgid ""
"(((display units))) The linear and angular units used for onscreen display."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:102
#, no-wrap
msgid "DRO"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:113
msgid ""
"(((DRO))) A Digital Read Out is a system of position-measuring devices "
"attached to the slides of a machine tool, which are connected to a numeric "
"display showing the current location of the tool with respect to some "
"reference position.  DROs are very popular on hand-operated machine tools "
"because they measure the true tool position without backlash, even if the "
"machine has very loose Acme screws.  Some DROs use linear quadrature "
"encoders to pick up position information from the machine, and some use "
"methods similar to a resolver which keeps rolling over."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:114
#, no-wrap
msgid "EDM"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:124
msgid ""
"(((EDM))) EDM is a method of removing metal in hard or difficult to machine "
"or tough metals, or where rotating tools would not be able to produce the "
"desired shape in a cost-effective manner. An excellent example is "
"rectangular punch dies, where sharp internal corners are desired. Milling "
"operations can not give sharp internal corners with finite diameter tools. A "
"'wire' EDM machine can make internal corners with a radius only slightly "
"larger than the wire's radius. A 'sinker' EDM can make internal corners with "
"a radius only slightly larger than the radius on the corner of the sinking "
"electrode."
msgstr ""

#. type: Title ===
#: src/common/glossary.adoc:125 src/drivers/gm.adoc:609
#, no-wrap
msgid "EMC"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:128
msgid ""
"(((EMC))) The Enhanced Machine Controller. Initially a NIST project. Renamed "
"to LinuxCNC in 2012."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:129
#, no-wrap
msgid "EMCIO"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:132
msgid ""
"(((EMCIO))) The module within LinuxCNC that handles general purpose I/O, "
"unrelated to the actual motion of the axes."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:133
#, no-wrap
msgid "EMCMOT"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:137
msgid ""
"(((EMCMOT))) The module within LinuxCNC that handles the actual motion of "
"the cutting tool. It runs as a real-time program and directly controls the "
"motors."
msgstr ""

#. type: Title ==
#: src/common/glossary.adoc:138 src/drivers/gm.adoc:154
#: src/drivers/hostmot2.adoc:292 src/drivers/hostmot2.adoc:303
#: src/drivers/hostmot2.adoc:314 src/drivers/hostmot2.adoc:331
#: src/drivers/hostmot2.adoc:345 src/drivers/hostmot2.adoc:359
#: src/drivers/hostmot2.adoc:369 src/drivers/hostmot2.adoc:381
#: src/drivers/hostmot2.adoc:661
#, no-wrap
msgid "Encoder"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:143
msgid ""
"(((encoder))) A device to measure position. Usually a mechanical-optical "
"device, which outputs a quadrature signal. The signal can be counted by "
"special hardware, or directly by the parport with LinuxCNC."
msgstr ""

#. type: Title ====
#: src/common/glossary.adoc:144 src/man/man1/xhc-whb04b-6.1.adoc:197
#, no-wrap
msgid "Feed"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:147
msgid ""
"(((feed))) Relatively slow, controlled motion of the tool used when making a "
"cut."
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:148 src/gcode/overview.adoc:120
#: src/gui/qtvcp-widgets.adoc:1640 src/gui/qtvcp-widgets.adoc:1784
#, no-wrap
msgid "Feed rate"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:152
msgid ""
"(((feed rate))) The speed at which a cutting motion occurs.  In auto or MDI "
"mode, feed rate is commanded using an F word.  F10 would mean ten machine "
"units per minute."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:153
#, no-wrap
msgid "Feedback"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:156
msgid ""
"(((feedback))) A method (e.g., quadrature encoder signals)  by which "
"LinuxCNC receives information about the position of motors."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:157
#, no-wrap
msgid "Feedrate Override"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:162
msgid ""
"(((feedrate override))) A manual, operator controlled change in the rate at "
"which the tool moves while cutting. Often used to allow the operator to "
"adjust for tools that are a little dull, or anything else that requires the "
"feed rate to be \"tweaked\"."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:163
#, no-wrap
msgid "Floating Point Number"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:165
msgid ""
"A number that has a decimal point. (12.300) In HAL it is known as float."
msgstr ""

#. type: Table
#: src/common/glossary.adoc:166 src/gcode/g-code.adoc:774
#, no-wrap
msgid "G-code"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:170
msgid ""
"(((G-code))) The generic term used to refer to the most common part "
"programming language. There are several dialects of G-code, LinuxCNC uses "
"RS274/NGC."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:171
#, no-wrap
msgid "GUI"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:173
msgid "(((GUI))) Graphical User Interface."
msgstr ""

#. type: Title ==
#: src/common/glossary.adoc:173 src/gui/gmoccapy.adoc:1286
#: src/motion/dh-parameters.adoc:24
#, no-wrap
msgid "General"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:177
#, no-wrap
msgid ""
"A type of interface that allows communications between a computer\n"
"and a human (in most cases) via the manipulation of icons and other\n"
"elements (widgets) on a computer screen.\n"
msgstr ""

#. type: Content of: <html><head><title>
#: src/common/glossary.adoc:178 man/man1/elbpcom.1:2 man/man1/moveoff_gui.1:25
#: man/man1/sim_pin.1:25 man/man9/streamer.9:10 src/index.tmpl:7
#, no-wrap
msgid "LinuxCNC"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:182
#, no-wrap
msgid ""
"An application that presents a graphical screen to the machine\n"
"operator allowing manipulation of the machine and the corresponding\n"
"controlling program.\n"
msgstr ""

#. type: TH
#: src/common/glossary.adoc:183 src/getting-started/updating-linuxcnc.adoc:1430
#: man/man3/hal_add_funct_to_thread.3hal:1 man/man3/hal_create_thread.3hal:1
#: man/man3/hal_exit.3hal:1 man/man3/hal_export_funct.3hal:1
#: man/man3/hal_init.3hal:1 man/man3/hal_malloc.3hal:1
#: man/man3/hal_param_alias.3hal:1 man/man3/hal_param_new.3hal:1
#: man/man3/hal_parport.3hal:1 man/man3/hal_pin_alias.3hal:1
#: man/man3/hal_pin_new.3hal:1 man/man3/hal_port.3hal:1
#: man/man3/hal_ready.3hal:1 man/man3/hal_set_constructor.3hal:1
#: man/man3/hal_set_lock.3hal:1 man/man3/hal_signal_new.3hal:1
#: man/man3/hal_start_threads.3hal:1 man/man3/hal_stream.3hal:1
#: man/man3/hal_type_t.3hal:1 man/man3/intro.3hal:1
#: man/man3/rtapi_app_exit.3rtapi:1 man/man3/rtapi_app_main.3rtapi:1
#: man/man3/rtapi_get_time.3rtapi:1 man/man3/undocumented.3hal:1
#, no-wrap
msgid "HAL"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:189
msgid ""
"(((HAL))) Hardware Abstraction Layer. At the highest level, it is simply a "
"way to allow a number of building blocks to be loaded and interconnected to "
"assemble a complex system. Many of the building blocks are drivers for "
"hardware devices.  However, HAL can do more than just configure hardware "
"drivers."
msgstr ""

#. type: Table
#: src/common/glossary.adoc:190 src/gui/tklinuxcnc.adoc:262
#, no-wrap
msgid "Home"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:194
msgid ""
"(((home))) A specific location in the machine's work envelope that is used "
"to make sure the computer and the actual machine both agree on the tool "
"position."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:195
#, no-wrap
msgid "ini file"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:198
msgid ""
"(((INI))) A text file that contains most of the information that configures "
"LinuxCNC for a particular machine."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:199
#, no-wrap
msgid "Instance"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:204
msgid ""
"(((Instance))) One can have an instance of a class or a particular object. "
"The instance is the actual object created at runtime. In programmer jargon, "
"the \"Lassie\" object is an instance of the \"Dog\" class."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:205
#, no-wrap
msgid "Joint Coordinates"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:208
msgid ""
"(((joint coordinates))) These specify the angles between the individual "
"joints of the machine. See also Kinematics"
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:209
#, no-wrap
msgid "Jog"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:214
msgid ""
"(((jog))) Manually moving an axis of a machine. Jogging either moves the "
"axis a fixed amount for each key-press, or moves the axis at a constant "
"speed as long as you hold down the key. In manual mode, jog speed can be set "
"from the graphical interface."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:215
#, no-wrap
msgid "kernel-space"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:217
msgid "See real-time."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:218
#, no-wrap
msgid "Kinematics"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:225
msgid ""
"(((kinematics))) The position relationship between world coordinates and "
"joint coordinates of a machine. There are two types of kinematics. Forward "
"kinematics is used to calculate world coordinates from joint coordinates. "
"Inverse kinematics is used for exactly the opposite purpose. Note that "
"kinematics does not take into account, the forces, moments etc. on the "
"machine. It is for positioning only."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:226
#, no-wrap
msgid "Lead-screw"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:232
msgid ""
"(((lead screw))) An screw that is rotated by a motor to move a table or "
"other part of a machine. Lead-screws are usually either ball-screws or acme "
"screws, although conventional triangular threaded screws may be used where "
"accuracy and long life are not as important as low cost."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:233
#, no-wrap
msgid "Machine units"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:237
msgid ""
"(((machine units))) The linear and angular units used for machine "
"configuration. These units are specified and used in the ini file.  HAL pins "
"and parameters are also generally in machine units."
msgstr ""

#. type: TH
#: src/common/glossary.adoc:238 src/gui/axis.adoc:549 src/gui/halui.adoc:37
#: src/gui/halui.adoc:168 src/plasma/qtplasmac.adoc:817
#: src/plasma/qtplasmac.adoc:2530 man/man1/mdi.1:25
#, no-wrap
msgid "MDI"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:242
msgid ""
"(((MDI))) Manual Data Input. This is a mode of operation where the "
"controller executes single lines of G-code as they are typed by the operator."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:243
#, no-wrap
msgid "NIST"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:246
msgid ""
"(((NIST))) National Institute of Standards and Technology.  An agency of the "
"Department of Commerce in the United States."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:247
#, no-wrap
msgid "NML"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:252
msgid ""
"(((NML))) Neutral Message Language provides a mechanism for handling "
"multiple types of messages in the same buffer as well as simplifying the "
"interface for encoding and decoding buffers in neutral format and the "
"configuration mechanism."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:252
#, no-wrap
msgid "Offsets"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:262
msgid ""
"(((offsets)))  An arbitrary amount, added to the value of something to make "
"it equal to some desired value. For example, G-code programs are often "
"written around some convenient point, such as X0, Y0.  Fixture offsets can "
"be used to shift the actual execution point of that G-code program to "
"properly fit the true location of the vice and jaws.  Tool offsets can be "
"used to shift the \"uncorrected\" length of a tool to equal that tool's "
"actual length."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:263
#, no-wrap
msgid "Part Program"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:267
msgid ""
"(((part Program))) A description of a part, in a language that the "
"controller can understand. For LinuxCNC, that language is RS-274/NGC, "
"commonly known as G-code."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:268
#, no-wrap
msgid "Program Units"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:273
msgid ""
"(((program units))) The linear and angular units used in a part program.  "
"The linear program units do not have to be the same as the linear machine "
"units.  See G20 and G21 for more information. The angular program units are "
"always measured in degrees."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:274
#, no-wrap
msgid "Python"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:278
msgid ""
"General-purpose, very high-level programming language. Used in LinuxCNC for "
"the Axis GUI, the Stepconf configuration tool, and several G-code "
"programming scripts."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:279
#, no-wrap
msgid "Rapid"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:283
msgid ""
"(((rapid))) Fast, possibly less precise motion of the tool, commonly used to "
"move between cuts. If the tool meets the workpiece or the fixturing during a "
"rapid, it is probably a bad thing!"
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:284
#, no-wrap
msgid "Rapid rate"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:289
msgid ""
"(((rapid rate)))The speed at which a rapid motion occurs.  In auto or MDI "
"mode, rapid rate is usually the maximum speed of the machine.  It is often "
"desirable to limit the rapid rate when testing a G-code program for the "
"first time."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:290
#, no-wrap
msgid "Real-time"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:296
msgid ""
"(((real-time))) Software that is intended to meet very strict timing "
"deadlines. Under Linux, in order to meet these requirements it is necessary "
"to install a realtime kernel such as RTAI and build the software to run in "
"the special real-time environment. For this reason real-time software runs "
"in kernel-space."
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:301
msgid ""
"(((RTAI))) Real Time Application Interface, see https://www.rtai.org/"
"[https://www.rtai.org/], the real-time extensions for Linux that LinuxCNC "
"can use to achieve real-time performance."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:302
#, no-wrap
msgid "RTLINUX"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:307
msgid ""
"(((RTLINUX))) See https://en.wikipedia.org/wiki/RTLinux[https://en.wikipedia."
"org/wiki/RTLinux], an older real-time extension for Linux that LinuxCNC used "
"to use to achieve real-time performance.  Obsolete, replaced by RTAI."
msgstr ""

#. type: TH
#: src/common/glossary.adoc:308 man/man3/intro.3rtapi:1
#: man/man3/rtapi_atomic.3rtapi:1 man/man3/rtapi_bool.3rtapi:22
#: man/man3/rtapi_byteorder.3rtapi:22 man/man3/rtapi_clock_set_period.3rtapi:1
#: man/man3/rtapi_delay.3rtapi:1 man/man3/rtapi_device.3rtapi:22
#: man/man3/rtapi_div_u64.3rtapi:16 man/man3/rtapi_exit.3rtapi:1
#: man/man3/rtapi_firmware.3rtapi:22 man/man3/rtapi_gfp.3rtapi:22
#: man/man3/rtapi_init.3rtapi:1 man/man3/rtapi_io.3rtapi:22
#: man/man3/rtapi_is.3rtapi:22 man/man3/rtapi_list.3rtapi:22
#: man/man3/rtapi_module_param.3rtapi:1 man/man3/rtapi_mutex.3rtapi:1
#: man/man3/rtapi_open_as_root.3rtapi:1 man/man3/rtapi_outb.3rtapi:1
#: man/man3/rtapi_parport.3rtapi:22 man/man3/rtapi_pci.3rtapi:22
#: man/man3/rtapi_print.3rtapi:1 man/man3/rtapi_prio.3rtapi:1
#: man/man3/rtapi_region.3rtapi:1 man/man3/rtapi_set_msg_level.3rtapi:1
#: man/man3/rtapi_shmem.3rtapi:1 man/man3/rtapi_slab.3rtapi:22
#: man/man3/rtapi_snprintf.3rtapi:1 man/man3/rtapi_stdint.3rtapi:22
#: man/man3/rtapi_string.3rtapi:22 man/man3/rtapi_strlcpy.3rtapi:22
#: man/man3/rtapi_task_new.3rtapi:1 man/man3/rtapi_task_pause.3rtapi:1
#: man/man3/rtapi_task_self.3rtapi:1 man/man3/rtapi_task_start.3rtapi:1
#: man/man3/rtapi_task_wait.3rtapi:1 man/man3/undocumented.3rtapi:1
#, no-wrap
msgid "RTAPI"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:311
msgid ""
"(((RTAPI)))A portable interface to real-time operating systems including "
"RTAI and POSIX pthreads with realtime extensions."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:312
#, no-wrap
msgid "RS-274/NGC"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:315
msgid ""
"(((RS274NGC))) The formal name for the language used by LinuxCNC part "
"programs."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:316
#, no-wrap
msgid "Servo Motor"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:321
msgid ""
"(((servo motor))) Generally, any motor that is used with error-sensing "
"feedback to correct the position of an actuator.  Also, a motor which is "
"specially-designed to provide improved performance in such applications."
msgstr ""

#. type: Block title
#: src/common/glossary.adoc:322 src/config/integrator-concepts.adoc:145
#, no-wrap
msgid "Servo Loop"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:325
msgid ""
"(((loop))) A control loop used to control position or velocity of an motor "
"equipped with a feedback device."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:326
#, no-wrap
msgid "Signed Integer"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:330
msgid ""
"(((Signed Integer))) A whole number that can have a positive or negative "
"sign. In HAL it is known as s32. (A signed 32-bit integer has a usable range "
"of -2,147,483,647 to +2,147,483,647.)"
msgstr ""

#. type: Title ====
#: src/common/glossary.adoc:331 src/config/core-components.adoc:208
#: src/gui/gmoccapy.adoc:1326 src/gui/halui.adoc:302 src/gui/qtdragon.adoc:448
#: src/man/man1/xhc-whb04b-6.1.adoc:165
#, no-wrap
msgid "Spindle"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:335
msgid ""
"(((spindle))) The part of a machine tool that spins to do the cutting. On a "
"mill or drill, the spindle holds the cutting tool. On a lathe, the spindle "
"holds the workpiece."
msgstr ""

#. type: Title ===
#: src/common/glossary.adoc:336 src/gui/axis.adoc:572
#, no-wrap
msgid "Spindle Speed Override"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:341
msgid ""
"A manual, operator controlled change in the rate at which the tool rotates "
"while cutting. Often used to allow the operator to adjust for chatter caused "
"by the cutter's teeth. Spindle Speed Override assumes that the LinuxCNC "
"software has been configured to control spindle speed."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:342
#, no-wrap
msgid "Stepconf"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:347
msgid ""
"An LinuxCNC configuration wizard. It is able to handle many step-and-"
"direction motion command based machines. It writes a full configuration "
"after the user answers a few questions about the computer and machine that "
"LinuxCNC is to run on."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:348
#, no-wrap
msgid "Stepper Motor"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:353
msgid ""
"(((stepper motor))) A type of motor that turns in fixed steps. By counting "
"steps, it is possible to determine how far the motor has turned. If the load "
"exceeds the torque capability of the motor, it will skip one or more steps, "
"causing position errors."
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:357
msgid ""
"(((TASK))) The module within LinuxCNC that coordinates the overall execution "
"and interprets the part program."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:358
#, no-wrap
msgid "Tcl/Tk"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:362
msgid ""
"(((Tk))) A scripting language and graphical widget toolkit with which "
"several of LinuxCNCs GUIs and selection wizards were written."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:363
#, no-wrap
msgid "Traverse Move"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:366
msgid ""
"(((Traverse Move))) A move in a straight line from the start point to the "
"end point."
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: src/common/glossary.adoc:367 src/gui/image-to-gcode.adoc:55
#: html/gcode.html:108
#, no-wrap
msgid "Units"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:369
msgid ""
"(((units))) See \"Machine Units\", \"Display Units\", or \"Program Units\"."
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:370
#, no-wrap
msgid "Unsigned Integer"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:374
msgid ""
"(((Unsigned Integer))) A whole number that has no sign. In HAL it is known "
"as u32. (An unsigned 32-bit integer has a usable range of zero to "
"4,294,967,296.)"
msgstr ""

#. type: Labeled list
#: src/common/glossary.adoc:375
#, no-wrap
msgid "World Coordinates"
msgstr ""

#. type: Plain text
#: src/common/glossary.adoc:380
msgid ""
"(((world coordinates))) This is the absolute frame of reference. It gives "
"coordinates in terms of a fixed reference frame that is attached to some "
"point (generally the base) of the machine tool."
msgstr ""

#. type: Title =
#: src/common/gpld-copyright.adoc:4
#, no-wrap
msgid "Legal Section"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:7
msgid ""
"Translations of this file provided in the source tree are not legally "
"binding."
msgstr ""

#. type: Title ==
#: src/common/gpld-copyright.adoc:8
#, no-wrap
msgid "Copyright Terms"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:11
#, no-wrap
msgid "*`Copyright (c) 2000-2022 LinuxCNC.org`*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:18 src/common/overleaf.adoc:16
msgid ""
"Permission is granted to copy, distribute and/or modify this document under "
"the terms of the GNU Free Documentation License, Version 1.1 or any later "
"version published by the Free Software Foundation; with no Invariant "
"Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the "
"license is included in the section entitled \"GNU Free Documentation License"
"\"."
msgstr ""

#. type: Title ==
#: src/common/gpld-copyright.adoc:19
#, no-wrap
msgid "GNU Free Documentation License"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:22
#, no-wrap
msgid "*GNU Free Documentation License Version 1.1, March 2000*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:27
msgid ""
"Copyright (C) 2000 Free Software Foundation, Inc. 51 Franklin Street, Fifth "
"Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and "
"distribute verbatim copies of this license document, but changing it is not "
"allowed."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:29
#, no-wrap
msgid "*0. PREAMBLE*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:37
msgid ""
"The purpose of this License is to make a manual, textbook, or other written "
"document \"free\" in the sense of freedom: to assure everyone the effective "
"freedom to copy and redistribute it, with or without modifying it, either "
"commercially or noncommercially. Secondarily, this License preserves for the "
"author and publisher a way to get credit for their work, while not being "
"considered responsible for modifications made by others."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:42
msgid ""
"This License is a kind of \"copyleft\", which means that derivative works of "
"the document must themselves be free in the same sense. It complements the "
"GNU General Public License, which is a copyleft license designed for free "
"software."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:50
msgid ""
"We have designed this License in order to use it for manuals for free "
"software, because free software needs free documentation: a free program "
"should come with manuals providing the same freedoms that the software does. "
"But this License is not limited to software manuals; it can be used for any "
"textual work, regardless of subject matter or whether it is published as a "
"printed book. We recommend this License principally for works whose purpose "
"is instruction or reference."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:52
#, no-wrap
msgid "*1. APPLICABILITY AND DEFINITIONS*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:58
msgid ""
"This License applies to any manual or other work that contains a notice "
"placed by the copyright holder saying it can be distributed under the terms "
"of this License. The \"Document\", below, refers to any such manual or work. "
"Any member of the public is a licensee, and is addressed as \"you\"."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:62
msgid ""
"A \"Modified Version\" of the Document means any work containing the "
"Document or a portion of it, either copied verbatim, or with modifications "
"and/or translated into another language."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:73
msgid ""
"A \"Secondary Section\" is a named appendix or a front-matter section of the "
"Document that deals exclusively with the relationship of the publishers or "
"authors of the Document to the Document's overall subject (or to related "
"matters) and contains nothing that could fall directly within that overall "
"subject. (For example, if the Document is in part a textbook of mathematics, "
"a Secondary Section may not explain any mathematics.) The relationship could "
"be a matter of historical connection with the subject or with related "
"matters, or of legal, commercial, philosophical, ethical or political "
"position regarding them."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:77
msgid ""
"The \"Invariant Sections\" are certain Secondary Sections whose titles are "
"designated, as being those of Invariant Sections, in the notice that says "
"that the Document is released under this License."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:81
msgid ""
"The \"Cover Texts\" are certain short passages of text that are listed, as "
"Front-Cover Texts or Back-Cover Texts, in the notice that says that the "
"Document is released under this License."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:93
msgid ""
"A \"Transparent\" copy of the Document means a machine-readable copy, "
"represented in a format whose specification is available to the general "
"public, whose contents can be viewed and edited directly and "
"straightforwardly with generic text editors or (for images composed of "
"pixels) generic paint programs or (for drawings) some widely available "
"drawing editor, and that is suitable for input to text formatters or for "
"automatic translation to a variety of formats suitable for input to text "
"formatters. A copy made in an otherwise Transparent file format whose markup "
"has been designed to thwart or discourage subsequent modification by readers "
"is not Transparent. A copy that is not \"Transparent\" is called \"Opaque\"."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:102
msgid ""
"Examples of suitable formats for Transparent copies include plain ASCII "
"without markup, Texinfo input format, LaTeX input format, SGML or XML using "
"a publicly available DTD, and standard-conforming simple HTML designed for "
"human modification. Opaque formats include PostScript, PDF, proprietary "
"formats that can be read and edited only by proprietary word processors, "
"SGML or XML for which the DTD and/or processing tools are not generally "
"available, and the machine-generated HTML produced by some word processors "
"for output purposes only."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:109
msgid ""
"The \"Title Page\" means, for a printed book, the title page itself, plus "
"such following pages as are needed to hold, legibly, the material this "
"License requires to appear in the title page. For works in formats which do "
"not have any title page as such, \"Title Page\" means the text near the most "
"prominent appearance of the work's title, preceding the beginning of the "
"body of the text."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:111
#, no-wrap
msgid "*2. VERBATIM COPYING*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:121
msgid ""
"You may copy and distribute the Document in any medium, either commercially "
"or noncommercially, provided that this License, the copyright notices, and "
"the license notice saying this License applies to the Document are "
"reproduced in all copies, and that you add no other conditions whatsoever to "
"those of this License. You may not use technical measures to obstruct or "
"control the reading or further copying of the copies you make or distribute. "
"However, you may accept compensation in exchange for copies. If you "
"distribute a large enough number of copies you must also follow the "
"conditions in section 3."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:124
msgid ""
"You may also lend copies, under the same conditions stated above, and you "
"may publicly display copies."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:126
#, no-wrap
msgid "*3. COPYING IN QUANTITY*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:138
msgid ""
"If you publish printed copies of the Document numbering more than 100, and "
"the Document's license notice requires Cover Texts, you must enclose the "
"copies in covers that carry, clearly and legibly, all these Cover Texts: "
"Front-Cover Texts on the front cover, and Back-Cover Texts on the back "
"cover. Both covers must also clearly and legibly identify you as the "
"publisher of these copies. The front cover must present the full title with "
"all words of the title equally prominent and visible.  You may add other "
"material on the covers in addition. Copying with changes limited to the "
"covers, as long as they preserve the title of the Document and satisfy these "
"conditions, can be treated as verbatim copying in other respects."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:143
msgid ""
"If the required texts for either cover are too voluminous to fit legibly, "
"you should put the first ones listed (as many as fit reasonably) on the "
"actual cover, and continue the rest onto adjacent pages."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:157
msgid ""
"If you publish or distribute Opaque copies of the Document numbering more "
"than 100, you must either include a machine-readable Transparent copy along "
"with each Opaque copy, or state in or with each Opaque copy a publicly-"
"accessible computer-network location containing a complete Transparent copy "
"of the Document, free of added material, which the general network-using "
"public has access to download anonymously at no charge using public-standard "
"network protocols. If you use the latter option, you must take reasonably "
"prudent steps, when you begin distribution of Opaque copies in quantity, to "
"ensure that this Transparent copy will remain thus accessible at the stated "
"location until at least one year after the last time you distribute an "
"Opaque copy (directly or through your agents or retailers) of that edition "
"to the public."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:161
msgid ""
"It is requested, but not required, that you contact the authors of the "
"Document well before redistributing any large number of copies, to give them "
"a chance to provide you with an updated version of the Document."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:163
#, no-wrap
msgid "*4. MODIFICATIONS*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:170
msgid ""
"You may copy and distribute a Modified Version of the Document under the "
"conditions of sections 2 and 3 above, provided that you release the Modified "
"Version under precisely this License, with the Modified Version filling the "
"role of the Document, thus licensing distribution and modification of the "
"Modified Version to whoever possesses a copy of it. In addition, you must do "
"these things in the Modified Version:"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:211
msgid ""
"A. Use in the Title Page (and on the covers, if any) a title distinct from "
"that of the Document, and from those of previous versions (which should, if "
"there were any, be listed in the History section of the Document). You may "
"use the same title as a previous version if the original publisher of that "
"version gives permission. B. List on the Title Page, as authors, one or more "
"persons or entities responsible for authorship of the modifications in the "
"Modified Version, together with at least five of the principal authors of "
"the Document (all of its principal authors, if it has less than five). C. "
"State on the Title page the name of the publisher of the Modified Version, "
"as the publisher. D. Preserve all the copyright notices of the Document. E.  "
"Add an appropriate copyright notice for your modifications adjacent to the "
"other copyright notices. F. Include, immediately after the copyright "
"notices, a license notice giving the public permission to use the Modified "
"Version under the terms of this License, in the form shown in the Addendum "
"below. G. Preserve in that license notice the full lists of Invariant "
"Sections and required Cover Texts given in the Document's license notice. H. "
"Include an unaltered copy of this License. I. Preserve the section entitled "
"\"History\", and its title, and add to it an item stating at least the "
"title, year, new authors, and publisher of the Modified Version as given on "
"the Title Page. If there is no section entitled \"History\" in the Document, "
"create one stating the title, year, authors, and publisher of the Document "
"as given on its Title Page, then add an item describing the Modified Version "
"as stated in the previous sentence. J. Preserve the network location, if "
"any, given in the Document for public access to a Transparent copy of the "
"Document, and likewise the network locations given in the Document for "
"previous versions it was based on. These may be placed in the \"History\" "
"section. You may omit a network location for a work that was published at "
"least four years before the Document itself, or if the original publisher of "
"the version it refers to gives permission. K. In any section entitled "
"\"Acknowledgements\" or \"Dedications\", preserve the section's title, and "
"preserve in the section all the substance and tone of each of the "
"contributor acknowledgements and/or dedications given therein. L. Preserve "
"all the Invariant Sections of the Document, unaltered in their text and in "
"their titles. Section numbers or the equivalent are not considered part of "
"the section titles. M. Delete any section entitled \"Endorsements\". Such a "
"section may not be included in the Modified Version. N. Do not retitle any "
"existing section as \"Endorsements\" or to conflict in title with any "
"Invariant Section."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:218
msgid ""
"If the Modified Version includes new front-matter sections or appendices "
"that qualify as Secondary Sections and contain no material copied from the "
"Document, you may at your option designate some or all of these sections as "
"invariant. To do this, add their titles to the list of Invariant Sections in "
"the Modified Version's license notice.  These titles must be distinct from "
"any other section titles."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:224
msgid ""
"You may add a section entitled \"Endorsements\", provided it contains "
"nothing but endorsements of your Modified Version by various parties--for "
"example, statements of peer review or that the text has been approved by an "
"organization as the authoritative definition of a standard."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:234
msgid ""
"You may add a passage of up to five words as a Front-Cover Text, and a "
"passage of up to 25 words as a Back-Cover Text, to the end of the list of "
"Cover Texts in the Modified Version. Only one passage of Front-Cover Text "
"and one of Back-Cover Text may be added by (or through arrangements made by) "
"any one entity. If the Document already includes a cover text for the same "
"cover, previously added by you or by arrangement made by the same entity you "
"are acting on behalf of, you may not add another; but you may replace the "
"old one, on explicit permission from the previous publisher that added the "
"old one."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:238
msgid ""
"The author(s) and publisher(s) of the Document do not by this License give "
"permission to use their names for publicity for or to assert or imply "
"endorsement of any Modified Version."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:240
#, no-wrap
msgid "*5. COMBINING DOCUMENTS*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:247
msgid ""
"You may combine the Document with other documents released under this "
"License, under the terms defined in section 4 above for modified versions, "
"provided that you include in the combination all of the Invariant Sections "
"of all of the original documents, unmodified, and list them all as Invariant "
"Sections of your combined work in its license notice."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:256
msgid ""
"The combined work need only contain one copy of this License, and multiple "
"identical Invariant Sections may be replaced with a single copy. If there "
"are multiple Invariant Sections with the same name but different contents, "
"make the title of each such section unique by adding at the end of it, in "
"parentheses, the name of the original author or publisher of that section if "
"known, or else a unique number.  Make the same adjustment to the section "
"titles in the list of Invariant Sections in the license notice of the "
"combined work."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:262
msgid ""
"In the combination, you must combine any sections entitled \"History\" in "
"the various original documents, forming one section entitled \"History\"; "
"likewise combine any sections entitled \"Acknowledgements\", and any "
"sections entitled \"Dedications\". You must delete all sections entitled "
"\"Endorsements.\""
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:264
#, no-wrap
msgid "*6. COLLECTIONS OF DOCUMENTS*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:271
msgid ""
"You may make a collection consisting of the Document and other documents "
"released under this License, and replace the individual copies of this "
"License in the various documents with a single copy that is included in the "
"collection, provided that you follow the rules of this License for verbatim "
"copying of each of the documents in all other respects."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:277
msgid ""
"You may extract a single document from such a collection, and distribute it "
"individually under this License, provided you insert a copy of this License "
"into the extracted document, and follow this License in all other respects "
"regarding verbatim copying of that document."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:279
#, no-wrap
msgid "*7. AGGREGATION WITH INDEPENDENT WORKS*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:288
msgid ""
"A compilation of the Document or its derivatives with other separate and "
"independent documents or works, in or on a volume of a storage or "
"distribution medium, does not as a whole count as a Modified Version of the "
"Document, provided no compilation copyright is claimed for the compilation. "
"Such a compilation is called an \"aggregate\", and this License does not "
"apply to the other self-contained works thus compiled with the Document, on "
"account of their being thus compiled, if they are not themselves derivative "
"works of the Document."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:294
msgid ""
"If the Cover Text requirement of section 3 is applicable to these copies of "
"the Document, then if the Document is less than one quarter of the entire "
"aggregate, the Document's Cover Texts may be placed on covers that surround "
"only the Document within the aggregate. Otherwise they must appear on covers "
"around the whole aggregate."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:296
#, no-wrap
msgid "*8. TRANSLATION*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:307
msgid ""
"Translation is considered a kind of modification, so you may distribute "
"translations of the Document under the terms of section 4.  Replacing "
"Invariant Sections with translations requires special permission from their "
"copyright holders, but you may include translations of some or all Invariant "
"Sections in addition to the original versions of these Invariant Sections. "
"You may include a translation of this License provided that you also include "
"the original English version of this License. In case of a disagreement "
"between the translation and the original English version of this License, "
"the original English version will prevail."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:309
#, no-wrap
msgid "*9. TERMINATION*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:317
msgid ""
"You may not copy, modify, sublicense, or distribute the Document except as "
"expressly provided for under this License. Any other attempt to copy, "
"modify, sublicense or distribute the Document is void, and will "
"automatically terminate your rights under this License. However, parties who "
"have received copies, or rights, from you under this License will not have "
"their licenses terminated so long as such parties remain in full compliance."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:319
#, no-wrap
msgid "*10. FUTURE REVISIONS OF THIS LICENSE*\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:325
msgid ""
"The Free Software Foundation may publish new, revised versions of the GNU "
"Free Documentation License from time to time. Such new versions will be "
"similar in spirit to the present version, but may differ in detail to "
"address new problems or concerns. See http://www.gnu.org/copyleft/."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:334
msgid ""
"Each version of the License is given a distinguishing version number.  If "
"the Document specifies that a particular numbered version of this License "
"\"or any later version\" applies to it, you have the option of following the "
"terms and conditions either of that specified version or of any later "
"version that has been published (not as a draft) by the Free Software "
"Foundation. If the Document does not specify a version number of this "
"License, you may choose any version ever published (not as a draft) by the "
"Free Software Foundation."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:336
#, no-wrap
msgid "*ADDENDUM*: How to use this License for your documents\n"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:340
msgid ""
"To use this License in a document you have written, include a copy of the "
"License in the document and put the following copyright and license notices "
"just after the title page:"
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:348
msgid ""
"Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/"
"or modify this document under the terms of the GNU Free Documentation "
"License, Version 1.1 or any later version published by the Free Software "
"Foundation; with the Invariant Sections being LIST THEIR TITLES, with the "
"Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A "
"copy of the license is included in the section entitled \"GNU Free "
"Documentation License\"."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:353
msgid ""
"If you have no Invariant Sections, write \"with no Invariant Sections\" "
"instead of saying which ones are invariant. If you have no Front-Cover "
"Texts, write \"no Front-Cover Texts\" instead of \"Front-Cover Texts being "
"LIST\"; likewise for Back-Cover Texts."
msgstr ""

#. type: Plain text
#: src/common/gpld-copyright.adoc:358
msgid ""
"If your document contains nontrivial examples of program code, we recommend "
"releasing these examples in parallel under your choice of free software "
"license, such as the GNU General Public License, to permit their use in free "
"software."
msgstr ""

#. type: Title =
#: src/common/linux-faq.adoc:5
#, no-wrap
msgid "Linux FAQ(((Linux FAQ)))"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:10
msgid ""
"These are some basic Linux commands and techniques for new to Linux users. "
"More complete information can be found on the web or by using the man pages."
msgstr ""

#. type: Title ==
#: src/common/linux-faq.adoc:11
#, no-wrap
msgid "Automatic Login(((Automatic Login)))"
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:13
#, no-wrap
msgid "Debian"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:17
msgid ""
"Debian Stretch uses the Xfce desktop environment by default, with the "
"lightDM display manager lightDM. To get automatic login with Stretch:"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:19
msgid "In a terminal, use the command:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:22
#, no-wrap
msgid "$ /usr/sbin/lightdm --show-config\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:25
msgid ""
"Make a note of the absolute path to the configuration file lightdm.conf."
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:26
msgid "Edit that file with a pure text editor (gedit, nano, etc), as root."
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:27
msgid "Find and uncomment the lines:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:31
#, no-wrap
msgid ""
"#autologin-user=\n"
"#autologin-user-timeout=0\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:34
msgid "Set autologin-user=your_user_name"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:35
msgid "Save and reboot."
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:36
#, no-wrap
msgid "Ubuntu"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:45
msgid ""
"When you install LinuxCNC with the Ubuntu LiveCD the default is to have to "
"log in each time you turn the computer on. To enable automatic login go to "
"'System > Administration > Login Window'. If it is a fresh install the Login "
"Window might take a second or three to pop up. You will have to have your "
"password that you used for the install to gain access to the Login Window "
"Preferences window. In the Security tab check off Enable Automatic Login and "
"pick a user name from the list (that would be you)."
msgstr ""

#. type: Title ==
#: src/common/linux-faq.adoc:46
#, no-wrap
msgid "Automatic Startup"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:52
msgid ""
"To have LinuxCNC start automatically with your config after turning on the "
"computer go to 'System > Preferences > Sessions > Startup Applications', "
"click Add. Browse to your config and select the .ini file. When the file "
"picker dialog closes, add linuxcnc and a space in front of the path to your ."
"ini file."
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:54 src/drivers/mb2hal.adoc:252
#: src/gcode/overview.adoc:627 man/man1/mb2hal.1:105
msgid "Example:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:57
#, no-wrap
msgid "linuxcnc /home/mill/linuxcnc/config/mill/mill.ini\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:60
msgid "The documentation refers to your respective .ini file as INI-file."
msgstr ""

#. type: Title ==
#: src/common/linux-faq.adoc:62
#, no-wrap
msgid "Terminal"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:71
msgid ""
"Many things need to be done from the terminal like checking the kernel "
"message buffer with 'dmesg'. Ubuntu and Linux Mint have a keyboard shortcut "
"Ctrl + Alt + t.  Debian Stretch does not have any keyboard shortcuts "
"defined.  It can be easily created with the 'Configuration Manager'.  Most "
"modern file managers support the right key to open a terminal just make sure "
"your right clicking on a blank area or a directory not a file name.  Most "
"OS's have the terminal as a menu item, usually in Accessories."
msgstr ""

#. type: Title ==
#: src/common/linux-faq.adoc:73
#, no-wrap
msgid "Man Pages(((Man Pages)))"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:77
msgid ""
"A man page (short for manual page) is a form of software documentation "
"usually found on a Unix or Unix-like operating system like Linux."
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:80
msgid ""
"To view a man page open up a terminal to find out something about the find "
"command in the terminal window type:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:83
#, no-wrap
msgid "man find\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:87
msgid ""
"Use the Page Up and Page Down keys to view the man page and the Q key to "
"quit viewing."
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:92
msgid ""
"Viewing the man page from the terminal may not get the expected man page.  "
"For example if you type in man abs you will get the C abs not the LinuxCNC "
"abs. It is best to view the LinuxCNC man pages in the HTML documents."
msgstr ""

#. type: Title ==
#: src/common/linux-faq.adoc:93
#, no-wrap
msgid "List Modules"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:97
msgid ""
"Sometimes when troubleshooting you need to get a list of modules that are "
"loaded. In a terminal window type:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:100
#, no-wrap
msgid "lsmod\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:104
msgid ""
"If you want to send the output from lsmod to a text file in a terminal "
"window type:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:107
#, no-wrap
msgid "lsmod > mymod.txt\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:112
msgid ""
"The resulting text file will be located in the home directory if you did not "
"change directories when you opened up the terminal window and it will be "
"named mymod.txt or what ever you named it."
msgstr ""

#. type: Title ==
#: src/common/linux-faq.adoc:113
#, no-wrap
msgid "Editing a Root File"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:120
msgid ""
"When you open the file browser and you see the owner of the file is root you "
"must do extra steps to edit that file. Editing some root files can have bad "
"results. Be careful when editing root files. Generally, you can open and "
"view most root files, but they will open in 'read only' mode."
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:121
#, no-wrap
msgid "The Command Line Way"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:124 src/getting-started/getting-linuxcnc.adoc:153
msgid "Open a terminal and type"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:127
#, no-wrap
msgid "sudo gedit\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:130
msgid "Open the file with File > Open > Edit"
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:131
#, no-wrap
msgid "The GUI Way"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:134
msgid "Right click on the desktop and select Create Launcher"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:135
msgid "Type a name in like sudo edit"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:137
msgid ""
"Type 'gksudo \"gnome-open %u\"' as the command and save the launcher to your "
"desktop"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:138
msgid "Drag a file onto your launcher to open and edit"
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:139
#, no-wrap
msgid "Root Access"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:144
msgid ""
"In Ubuntu you can become root by typing in \"sudo -i\" in a terminal window "
"then typing in your password. Be careful, because you can really foul things "
"up as root if you don't know what you're doing."
msgstr ""

#. type: Title ==
#: src/common/linux-faq.adoc:145
#, no-wrap
msgid "Terminal Commands"
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:147
#, no-wrap
msgid "Working Directory"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:151
msgid ""
"To find out the path to the present working directory in the terminal window "
"type:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:154 src/common/linux-faq.adoc:214
#, no-wrap
msgid "pwd\n"
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:157
#, no-wrap
msgid "Changing Directories(((Changing Directories)))(((cd)))"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:160
msgid ""
"To change the working directory to the one one level up, i.e., the parent "
"directory, in the terminal window type:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:163
#, no-wrap
msgid "cd ..\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:166
msgid "To move up two levels in the terminal window type:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:169
#, no-wrap
msgid "cd ../..\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:172
msgid ""
"To move directly to your home directory, in the terrminal window use the cd "
"command with no arguments:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:175
#, no-wrap
msgid "cd\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:179
msgid ""
"To move down to the linuxcnc/configs subdirectory in the terminal window "
"type:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:182
#, no-wrap
msgid "cd linuxcnc/configs\n"
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:184
#, no-wrap
msgid "Listing files in a directory"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:187
msgid ""
"To view a list of all the files and subdirectories in the terminal window "
"type:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:190
#, no-wrap
msgid "dir\n"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:196
#, no-wrap
msgid "ls\n"
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:198
#, no-wrap
msgid "Finding a File"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:202
msgid ""
"The find command can be a bit confusing to a new Linux user. The basic "
"syntax is:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:205
#, no-wrap
msgid "find starting-directory parameters actions\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:209
msgid ""
"For example to find all the .ini files in your linuxcnc directory you first "
"need to use the pwd command to find out the directory."
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:211
msgid "Open a new terminal window and type:"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:217
msgid "And pwd might return the following result:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:220
#, no-wrap
msgid "/home/joe\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:223
msgid "With this information put the command together like this:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:226
#, no-wrap
msgid "find /home/joe/linuxcnc -name \\*.ini -print\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:233
msgid ""
"The -name is the name of the file your looking for and the -print tells it "
"to print out the result to the terminal window.  The \\*.ini tells find to "
"return all files that have the .ini extension.  The backslash is needed to "
"escape the shell meta-characters. See the find man page for more information "
"on find."
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:234
#, no-wrap
msgid "Searching for Text"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:238
#, no-wrap
msgid "grep -irl 'text to search for' *\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:248
msgid ""
"This will find all the files that contain the 'text to search for' in the "
"current directory and all the subdirectories below it, while ignoring the "
"case. The -i is for ignore case and the -r is for recursive (include all "
"subdirectories in the search). The -l option will return a list of the file "
"names, if you leave the -l off you will also get the text where each "
"occurrence of the \"text to search for\" is found.  The * is a wild card for "
"search all files. See the grep man page for more information."
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:249
#, no-wrap
msgid "Diagnostic Messages"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:254
msgid ""
"To view the diagnostic messages use \"dmesg\" from the command window. To "
"save the diagnostic messages to a file use the redirection operator '>', "
"like this:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:257
#, no-wrap
msgid "dmesg > bootmsg.txt\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:261
msgid ""
"The contents of this file can be copied and pasted on line to share with "
"people trying to help you diagnose your problem."
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:263
msgid "To clear the message buffer type this:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:266 src/drivers/hostmot2.adoc:173
#, no-wrap
msgid "sudo dmesg -c\n"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:270
msgid ""
"This can be helpful to do just before launching LinuxCNC, so that there will "
"only be a record of information related to the current launch of LinuxCNC."
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:273
msgid ""
"To find the built in parallel port address use grep to filter the "
"information out of dmesg."
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:275
msgid "After boot up open a terminal and type:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:278
#, no-wrap
msgid "dmesg|grep parport\n"
msgstr ""

#. type: Title ==
#: src/common/linux-faq.adoc:280
#, no-wrap
msgid "Convenience Items"
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:282
#, no-wrap
msgid "Terminal Launcher"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:288
msgid ""
"If you want to add a terminal launcher to the panel bar on top of the screen "
"you typically can right click on the panel at the top of the screen and "
"select \"Add to Panel\". Select Custom Application Launcher and Add. Give it "
"a name and put gnome-terminal in the command box."
msgstr ""

#. type: Title ==
#: src/common/linux-faq.adoc:289
#, no-wrap
msgid "Hardware Problems"
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:291
#, no-wrap
msgid "Hardware Info"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:295
msgid ""
"To find out what hardware is connected to your motherboard in a terminal "
"window type:"
msgstr ""

#. type: delimited block -
#: src/common/linux-faq.adoc:298 src/examples/pci-parallel-port.adoc:21
#: src/hal/parallel-port.adoc:188
#, no-wrap
msgid "lspci -v\n"
msgstr ""

#. type: Title ===
#: src/common/linux-faq.adoc:300
#, no-wrap
msgid "Monitor Resolution"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:305
msgid ""
"During installation Ubuntu attempts to detect the monitor settings. If this "
"fails you are left with a generic monitor with a maximum resolution of "
"800x600."
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:307
msgid "Instructions for fixing this are located here:"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:309
msgid ""
"https://help.ubuntu.com/community/FixVideoResolutionHowto[https://help."
"ubuntu.com/community/FixVideoResolutionHowto]"
msgstr ""

#. type: Title ==
#: src/common/linux-faq.adoc:310
#, no-wrap
msgid "Paths"
msgstr ""

#. type: Block title
#: src/common/linux-faq.adoc:312 src/gui/ngcgui.adoc:518
#, no-wrap
msgid "Relative Paths"
msgstr ""

#. type: Plain text
#: src/common/linux-faq.adoc:316
msgid ""
"Relative paths are based on the startup directory which is the directory "
"containing the INI-file.  Using relative paths can facilitate relocation of "
"configurations but requires a good understanding of linux path specifiers."
msgstr ""

#. type: delimited block .
#: src/common/linux-faq.adoc:322
#, no-wrap
msgid ""
"./f0        is the same as f0, e.g., a file named f0 in the startup directory\n"
"../f1       refers to a file f1 in the parent directory\n"
"../../f2    refers to a file f2 in the parent of the parent directory\n"
"../../../f3 etc.\n"
msgstr ""

#. type: Plain text
#: src/common/overleaf.adoc:7
msgid ""
"This handbook is a work in progress. If you are able to help with writing, "
"editing, or graphic preparation please contact any member of the writing "
"team or join and send an email to emc-users@lists.sourceforge.net."
msgstr ""

#. type: Plain text
#: src/common/overleaf.adoc:9
msgid "Copyright © 2000-2020 LinuxCNC.org"
msgstr ""

#. type: Plain text
#: src/common/overleaf.adoc:18
msgid "If you do not find the license you may order a copy from:"
msgstr ""

#. type: Plain text
#: src/common/overleaf.adoc:23
#, no-wrap
msgid ""
"  Free Software Foundation, Inc.\n"
"  51 Franklin Street\n"
"  Fifth Floor\n"
"  Boston, MA 02110-1301 USA.\n"
msgstr ""

#. type: Plain text
#: src/common/overleaf.adoc:25
msgid "(The English language version is authoritative)"
msgstr ""

#. type: Plain text
#: src/common/overleaf.adoc:30
msgid ""
"LINUX® is the registered trademark of Linus Torvalds in the U.S. and other "
"countries.  The registered trademark Linux® is used pursuant to a sublicense "
"from LMI, the exclusive licensee of Linus Torvalds, owner of the mark on a "
"world-wide basis."
msgstr ""

#. type: Plain text
#: src/common/overleaf.adoc:34
msgid ""
"The LinuxCNC project is not affiliated with Debian®.  _Debian_ is a "
"registered trademark owned by Software in the Public Interest, Inc."
msgstr ""

#. type: Plain text
#: src/common/overleaf.adoc:37
msgid ""
"The LinuxCNC project is not affiliated with UBUNTU®.  _UBUNTU_ is a "
"registered trademark owned by Canonical Limited."
msgstr ""

#. type: Title =
#: src/config/core-components.adoc:5
#, no-wrap
msgid "Core Components(((Core components)))"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:14
msgid "See also the man pages 'motion(9)'."
msgstr ""

#. type: Title ==
#: src/config/core-components.adoc:16
#, no-wrap
msgid "Motion (((Motion)))"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:19
msgid "These pins and parameters are created by the realtime 'motmod' module."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:21
msgid "This module provides a HAL interface for LinuxCNC's motion planner."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:25
msgid ""
"Basically motmod takes in a list of waypoints and generates a nice blended "
"and constraint-limited stream of joint positions to be fed to the motor "
"drives."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:29
msgid ""
"Optionally the number of Digital I/O is set with 'num_dio'.  The number of "
"Analog I/O is set with 'num_aio', default is 4 each.  The number of Spindles "
"is set with 'num_spindles', default is 1."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:32
msgid ""
"Pin and parameter names starting with 'axis.__L__' and 'joint.__N__' are "
"read and updated by the motion-controller function."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:35
msgid ""
"Motion is loaded with the motmod command. A kins should be loaded before "
"motion."
msgstr ""

#. type: delimited block -
#: src/config/core-components.adoc:42
#, no-wrap
msgid ""
"loadrt motmod base_period_nsec=['period'] servo_period_nsec=['period']\n"
"              traj_period_nsec=['period'] num_joints=['0-9']\n"
"              num_dio=['1-64'] num_aio=['1-16'] unlock_joints_mask=['0xNN']\n"
"              num_spindles=['1-8']\n"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:46
msgid ""
"'base_period_nsec = 50000' - the 'Base' task period in nanoseconds.  This is "
"the fastest thread in the machine."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:60
msgid ""
"On servo-based systems, there is generally no reason for 'base_period_nsec' "
"to be smaller than 'servo_period_nsec'.  On machines with software step "
"generation, the 'base_period_nsec' determines the maximum number of steps "
"per second. In the absence of long step length and step space requirements, "
"the absolute maximum step rate is one step per 'base_period_nsec'. Thus, the "
"'base_period_nsec' shown above gives an absolute maximum step rate of 20,000 "
"steps per second. 50,000 ns (50 us) is a fairly conservative value.  The "
"smallest usable value is related to the Latency Test result, the necessary "
"step length, and the processor speed.  Choosing a 'base_period_nsec' that is "
"too low can lead to the \"Unexpected real time delay\" message, lockups, or "
"spontaneous reboots."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:65
msgid ""
"'servo_period_nsec = 1000000' - This is the 'Servo' task period in "
"nanoseconds. This value will be rounded to an integer multiple of "
"'base_period_nsec'. This period is used even on systems based on stepper "
"motors."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:70
msgid ""
"This is the rate at which new motor positions are computed, following error "
"is checked, PID output values are updated, and so on.  Most systems will not "
"need to change this value. It is the update rate of the low level motion "
"planner."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:76
msgid ""
"'traj_period_nsec = 100000' - This is the 'Trajectory Planner' task period "
"in nanoseconds. This value will be rounded to an integer multiple of "
"'servo_period_nsec'. Except for machines with unusual kinematics (e.g., "
"hexapods) there is no reason to make this value larger than "
"'servo_period_nsec'."
msgstr ""

#. type: SH
#: src/config/core-components.adoc:77 src/config/stepconf.adoc:384
#: src/drivers/mb2hal.adoc:53 src/gui/qtvcp.adoc:111
#: src/gui/qtvcp-widgets.adoc:2920 src/hal/comp.adoc:258 man/man1/xhc-hb04.1:53
#, no-wrap
msgid "Options"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:81
msgid ""
"If the number of digital I/O needed is more than the default of 4 you can "
"add up to 64 digital I/O by using the num_dio option when loading 'motmod'."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:84
msgid ""
"If the number of analog I/O needed is more than the default of 4 you can add "
"up to 16 analog I/O by using the num_aio option when loading 'motmod'."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:89
msgid ""
"The unlock_joints_mask parameter is used to create pins for a joint used as "
"a locking indexer (typically a rotary).  The mask bits select the joint(s).  "
"The LSB of the mask selects joint 0.  Example:"
msgstr ""

#. type: delimited block -
#: src/config/core-components.adoc:93
#, no-wrap
msgid "unlock_joints_mask=0x38 selects joints 3,4,5\n"
msgstr ""

#. type: Title ===
#: src/config/core-components.adoc:96
#, no-wrap
msgid "Pins(((motion (HAL pins))))"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:100
msgid ""
"These pins, parameters, and functions are created by the realtime 'motmod' "
"module."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:106
msgid ""
"'motion.adaptive-feed' - (float, in) When adaptive feed is enabled with 'M52 "
"P1' , the commanded velocity is multiplied by this value. This effect is "
"multiplicative with the NML-level feed override value and 'motion.feed-"
"hold'. As of version 2.9 of LinuxCNC it is possible to use a negative "
"adaptive feed value to run the G-code path in reverse."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:108
msgid ""
"'motion.analog-in-00' - (float, in) These pins (00, 01, 02, 03 or more if "
"configured) are controlled by M66."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:110
msgid ""
"'motion.analog-out-00' - (float, out) These pins (00, 01, 02, 03 or more if "
"configured) are controlled by M67 or M68."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:112
msgid ""
"'motion.coord-error' - (bit, out) TRUE when motion has encountered an error, "
"such as exceeding a soft limit"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:114
msgid ""
"'motion.coord-mode' - (bit, out) TRUE when motion is in 'coordinated mode', "
"as opposed to 'teleop mode'"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:115
msgid ""
"'motion.current-vel' - (float, out) The current tool velocity in user units "
"per second."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:117
msgid ""
"'motion.digital-in-00' - (bit, in) These pins (00, 01, 02, 03 or more if "
"configured) are controlled by M62-65."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:119
msgid ""
"'motion.digital-out-00' - (bit, out) These pins (00, 01, 02, 03 or more if "
"configured) are controlled by the 'M62-65'."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:120
msgid ""
"'motion.distance-to-go' - (float,out) The distance remaining in the current "
"move."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:123
msgid ""
"'motion.enable' - (bit, in) If this bit is driven FALSE, motion stops, the "
"machine is placed in the 'machine off' state, and a message is displayed for "
"the operator. For normal motion, drive this bit TRUE."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:125
msgid ""
"'motion.feed-hold' - (bit, in) When Feed Stop Control is enabled with 'M53 "
"P1', and this bit is TRUE, the feed rate is set to 0."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:127
msgid ""
"'motion.feed-inhibit' - (bit, in) When this bit is TRUE, the feed rate is "
"set to 0.  This will be delayed during spindle synch moves till the end of "
"the move."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:128
msgid "'motion.in-position' - (bit, out) TRUE if the machine is in position."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:129
msgid "'motion.motion-enabled' - (bit, out) TRUE when in 'machine on' state."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:130
msgid ""
"'motion.motion-type' - (s32, out) These values are from src/emc/nml_intf/"
"motion_types.h"
msgstr ""

#. type: TP
#: src/config/core-components.adoc:131 man/man9/motion.9:249
#, no-wrap
msgid "0: Idle (no motion)"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:132 man/man9/motion.9:253
msgid "1: Traverse"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:133 man/man9/motion.9:255
msgid "2: Linear feed"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:134 man/man9/motion.9:257
msgid "3: Arc feed"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:135 man/man9/motion.9:259
msgid "4: Tool change"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:136 man/man9/motion.9:261
msgid "5: Probing"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:137
msgid "6: Rotary axis indexing"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:138 src/config/core-components.adoc:153
msgid ""
"'motion.on-soft-limit' - (bit, out) TRUE when the machine is on a soft limit."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:141
msgid ""
"'motion.probe-input' - (bit, in)  'G38.n' uses the value on this pin to "
"determine when the probe has made contact.  TRUE for probe contact closed "
"(touching), FALSE for probe contact open."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:143
msgid ""
"'motion.program-line' - (s32, out) The current program line while "
"executing.  Zero if not running or between lines while single stepping."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:147
msgid ""
"'motion.requested-vel' - (float, out)  The current requested velocity in "
"user units per second.  This value is the F-word setting from the G-code "
"file, possibly reduced to accommodate machine velocity and acceleration "
"limits.  The value on this pin does not reflect the feed override or any "
"other adjustments."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:148 src/config/core-components.adoc:171
msgid ""
"'motion.teleop-mode' - (bit, out) TRUE when motion is in 'teleop mode', as "
"opposed to 'coordinated mode'"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:150 src/config/core-components.adoc:176
msgid ""
"'motion.tooloffset.x ... motion.tooloffset.w' - (float, out, one per axis) "
"shows the tool offset in effect; it could come from the tool table ('G43' "
"active), or it could come from the G-code ('G43.1' active)"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:158
msgid ""
"'motion.probe-input' - (bit, in) 'G38.n' uses the value on this pin to "
"determine when the probe has made contact.  TRUE for probe contact closed "
"(touching), FALSE for probe contact open."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:161
msgid ""
"'motion.program-line' - (s32, out) The current program line while executing. "
"Zero if not running or between lines while single stepping."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:167
msgid ""
"'motion.requested-vel' - (float, out) The current requested velocity in user "
"units per second.  This value is the F-word setting from the G-code file, "
"possibly reduced to accommodate machine velocity and acceleration limits. "
"The value on this pin does not reflect the feed override or any other "
"adjustments."
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: src/config/core-components.adoc:177 src/config/iov2.adoc:153
#: src/drivers/ax5214h.adoc:59 src/drivers/gm.adoc:109 src/drivers/gm.adoc:212
#: src/drivers/gm.adoc:306 src/drivers/gm.adoc:420 src/drivers/gm.adoc:483
#: src/drivers/gm.adoc:488 src/drivers/gm.adoc:511 src/drivers/gm.adoc:516
#: src/drivers/gm.adoc:579 src/drivers/gm.adoc:584 src/drivers/gm.adoc:712
#: src/drivers/gm.adoc:795 src/drivers/gm.adoc:852 src/drivers/gs2.adoc:95
#: src/drivers/hostmot2.adoc:119 src/drivers/hostmot2.adoc:434
#: src/drivers/hostmot2.adoc:511 src/drivers/hostmot2.adoc:592
#: src/drivers/hostmot2.adoc:690 src/drivers/motenc.adoc:74
#: src/drivers/opto22.adoc:79 src/drivers/pico-ppmc.adoc:177
#: src/drivers/servo-to-go.adoc:97 src/drivers/vfs11.adoc:140
#: src/hal/parallel-port.adoc:241 src/hal/rtcomps.adoc:302
#: src/hal/rtcomps.adoc:466 src/hal/rtcomps.adoc:638 src/hal/rtcomps.adoc:707
#: src/hal/rtcomps.adoc:781 html/gcode.html:54
#, no-wrap
msgid "Parameters"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:181
msgid ""
"Many of these parameters serve as debugging aids, and are subject to change "
"or removal at any time."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:183
msgid "'motion-command-handler.time' - (s32, RO)"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:184
msgid "'motion-command-handler.tmax' - (s32, RW)"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:185
msgid "'motion-controller.time' - (s32, RO)"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:186
msgid "'motion-controller.tmax' - (s32, RW)"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:187
msgid "'motion.debug-bit-0' - (bit, RO) This is used for debugging purposes."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:188
msgid "'motion.debug-bit-1' - (bit, RO) This is used for debugging purposes."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:189
msgid ""
"'motion.debug-float-0' - (float, RO) This is used for debugging purposes."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:190
msgid ""
"'motion.debug-float-1' - (float, RO) This is used for debugging purposes."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:191
msgid ""
"'motion.debug-float-2' - (float, RO) This is used for debugging purposes."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:192
msgid ""
"'motion.debug-float-3' - (float, RO) This is used for debugging purposes."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:193
msgid "'motion.debug-s32-0' - (s32, RO) This is used for debugging purposes."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:194
msgid "'motion.debug-s32-1' - (s32, RO) This is used for debugging purposes."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:198
msgid ""
"'motion.servo.last-period' - (u32, RO) The number of CPU cycles between "
"invocations of the servo thread. Typically, this number divided by the CPU "
"speed gives the time in seconds, and can be used to determine whether the "
"realtime motion controller is meeting its timing constraints"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:199
msgid "'motion.servo.last-period-ns' - (float, RO)"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:204 man/man9/motion.9:708
msgid ""
"Generally, these functions are both added to the servo-thread in the order "
"shown."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:206
msgid ""
"'motion-command-handler' - Processes motion commands coming from user space"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:207
msgid "'motion-controller' - Runs the LinuxCNC motion controller"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:213
msgid ""
"LinuxCNC can control upto eight spindles.  Motion will produce the following "
"pins: The __N__ (integer between 0 and 7) substitutes the spindle number."
msgstr ""

#. type: Title ===
#: src/config/core-components.adoc:215
#, no-wrap
msgid "Pins(((spindle (HAL pins))))"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:219
msgid ""
"'spindle.__N__.at-speed' - (bit, in)  Motion will pause until this pin is "
"TRUE, under the following conditions:"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:220
msgid "before the first feed move after each spindle start or speed change;"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:221
msgid "before the start of every chain of spindle-synchronized moves;"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:229
msgid ""
"and if in CSS mode, at every rapid to feed transition.  This input can be "
"used to ensure that the spindle is up to speed before starting a cut, or "
"that a lathe spindle in CSS mode has slowed down after a large to small "
"facing pass before starting the next pass at the large diameter.  Many VFDs "
"have an 'at speed' output.  Otherwise, it is easy to generate this signal "
"with the 'HAL near' component, by comparing requested and actual spindle "
"speeds."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:230
msgid ""
"'spindle.__N__.brake' - (bit, out) TRUE when the spindle brake should be "
"applied."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:231
msgid ""
"'spindle.__N__.forward' - (bit, out) TRUE when the spindle should rotate "
"forward."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:233
msgid ""
"'spindle.__N__.index-enable' - (bit, I/O) For correct operation of spindle "
"synchronized moves, this pin must be hooked to the index-enable pin of the "
"spindle encoder."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:234
msgid ""
"'spindle.__N__.inhibit' - (bit, in) When this bit is TRUE, the spindle speed "
"is set to 0."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:235
msgid "'spindle.__N__.on' - (bit, out) TRUE when spindle should rotate."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:236
msgid ""
"'spindle.__N__.reverse' - (bit, out) TRUE when the spindle should rotate "
"backward"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:240
msgid ""
"'spindle.__N__.revs' - (float, in) For correct operation of spindle "
"synchronized moves, this signal must be hooked to the position pin of the "
"spindle encoder. The spindle encoder position should be scaled such that "
"spindle-revs increases by 1.0 for each rotation of the spindle in the "
"clockwise ('M3') direction."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:245
msgid ""
"'spindle.__N__.speed-in' - (float, in) Feedback of actual spindle speed in "
"rotations per second.  This is used by feed-per-revolution motion ('G95').  "
"If your spindle encoder driver does not have a velocity output, you can "
"generate a suitable one by sending the spindle position through a 'ddt' "
"component.  If you do not have a spindle encoder, you can loop back 'spindle."
"__N__.speed-out-rps'."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:247
msgid ""
"'spindle.__N__.speed-out' - (float, out) Commanded spindle speed in "
"rotations per minute. Positive for spindle forward ('M3'), negative for "
"spindle reverse ('M4')."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:249
msgid ""
"'spindle.__N__.speed-out-abs' - (float, out) Commanded spindle speed in "
"rotations per minute. This will always be a positive number."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:251
msgid ""
"'spindle.__N__.speed-out-rps' - (float, out) Commanded spindle speed in "
"rotations per second. Positive for spindle forward ('M3'), negative for "
"spindle reverse ('M4')."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:253
msgid ""
"'spindle.__N__.speed-out-rps-abs' - (float, out) Commanded spindle speed in "
"rotations per second. This will always be a positive number."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:255
msgid ""
"'spindle.__N__.orient-angle' - (float,out) Desired spindle orientation for "
"M19. Value of the M19 R word parameter plus the value of the "
"[RS274NGC]ORIENT_OFFSET INI parameter."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:256
msgid ""
"'spindle.__N__.orient-mode' - (s32,out) Desired spindle rotation mode M19. "
"Default 0."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:260
msgid ""
"'spindle.__N__.orient' - (out,bit)  Indicates start of spindle orient cycle. "
"Set by M19. Cleared by any of M3, M4, or M5.  If spindle-orient-fault is not "
"zero during spindle-orient true, the M19 command fails with an error message."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:263
msgid ""
"'spindle.__N__.is-oriented' - (in, bit) Acknowledge pin for spindle-orient. "
"Completes orient cycle.  If spindle-orient was true when spindle-is-oriented "
"was asserted, the spindle-orient pin is cleared and the spindle-locked pin "
"is asserted. Also, the spindle-brake pin is asserted."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:265
msgid ""
"'spindle.__N__.orient-fault' - (s32, in) Fault code input for orient cycle. "
"Any value other than zero will cause the orient cycle to abort."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:266
msgid ""
"'spindle.__N__.lock' - (bit, out) Spindle orient complete pin. Cleared by "
"any of M3, M4, or M5."
msgstr ""

#. type: Block title
#: src/config/core-components.adoc:267
#, no-wrap
msgid "HAL pin usage for M19 orient spindle"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:269
msgid "Conceptually the spindle is in one of the following modes:"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:271
msgid "rotation mode (the default)"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:272
msgid "searching for desired orientation mode"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:273
msgid "orientation complete mode."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:278
msgid ""
"When an M19 is executed, the spindle changes to 'searching for desired "
"orientation', and the `spindle.__N__.orient` HAL pin is asserted.  The "
"desired target position is specified by the `spindle.__N__.orient-angle` and "
"`spindle.__N__.orient-fwd` pins and driven by the M19 R and P parameters."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:282
msgid ""
"The HAL support logic is expected to react to `spindle.__N__.orient` by "
"moving the spindle to the desired position. When this is complete, the HAL "
"logic is expected to acknowledge this by asserting the `spindle.__N__.is-"
"oriented` pin."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:286
msgid ""
"Motion then acknowledges this by deasserting the `spindle.__N__.orient` pin "
"and asserts the `spindle.__N__.locked` pin to indicate 'orientation "
"complete' mode.  It also raises the `spindle.__N__.brake` pin. The spindle "
"now is in 'orientation complete' mode."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:292
msgid ""
"If, during `spindle.__N__.orient` being true, and `spindle.__N__.is-"
"oriented` not yet asserted the `spindle.__N__.orient-fault` pin has a value "
"other than zero, the M19 command is aborted, a message including the fault "
"code is displayed, and the motion queue is flushed.  The spindle reverts to "
"rotation mode."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:296
msgid ""
"Also, any of the M3, M4 or M5 commands cancel either 'searching for desired "
"orientation' or 'orientation complete' mode.  This is indicated by "
"deasserting both the `spindle-orient` and `spindle-locked` pins."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:299
msgid ""
"The `spindle-orient-mode` pin reflects the M19 P word and shall be "
"interpreted as follows:"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:301
msgid "0: rotate clockwise or counterclockwise for smallest angular movement"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:302
msgid "1: always rotate clockwise"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:303
msgid "2: always rotate counterclockwise"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:307
msgid ""
"It can be used with the `orient` HAL component which provides a PID command "
"value based on spindle encoder position, `spindle-orient-angle` and `spindle-"
"orient-mode`."
msgstr ""

#. type: Title ==
#: src/config/core-components.adoc:308
#, no-wrap
msgid "Axis and Joint Pins and Parameters"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:314
msgid ""
"These pins and parameters are created by the realtime 'motmod' module.  [In "
"'trivial kinematics' machines, there is a one-to-one correspondence between "
"joints and axes.] They are read and updated by the 'motion-controller' "
"function."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:316
msgid ""
"See the motion man page 'motion(9)' for details on the pins and parameters."
msgstr ""

#. type: Title ==
#: src/config/core-components.adoc:317
#, no-wrap
msgid "iocontrol"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:320
msgid "iocontrol - accepts NML I/O commands, interacts with HAL in userspace."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:324
msgid ""
"The signals are turned on and off in userspace - if you have strict timing "
"requirements or simply need more i/o, consider using the realtime "
"synchronized i/o provided by <<sec:motion,motion>> instead."
msgstr ""

#. type: Title ===
#: src/config/core-components.adoc:325
#, no-wrap
msgid "Pins (((iocontrol (HAL pins))))"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:328
msgid ""
"'iocontrol.0.coolant-flood' - (bit, out) TRUE when flood coolant is "
"requested."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:329
msgid ""
"'iocontrol.0.coolant-mist' - (bit, out) TRUE when mist coolant is requested."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:330
msgid ""
"'iocontrol.0.emc-enable-in' - (bit, in) Should be driven FALSE when an "
"external E-Stop condition exists."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:331
msgid "'iocontrol.0.lube' - (bit, out) TRUE when lube is commanded."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:332
msgid ""
"'iocontrol.0.lube_level' - (bit, in) Should be driven TRUE when lube level "
"is high enough."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:333
msgid ""
"'iocontrol.0.tool-change' - (bit, out) TRUE when a tool change is requested."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:334
msgid ""
"'iocontrol.0.tool-changed' - (bit, in) Should be driven TRUE when a tool "
"change is completed."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:335
msgid "'iocontrol.0.tool-number' - (s32, out) The current tool number."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:336
msgid ""
"'iocontrol.0.tool-prep-number' - (s32, out) The number of the next tool, "
"from the RS274NGC T-word."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:337
msgid ""
"'iocontrol.0.tool-prepare' - (bit, out) TRUE when a tool prepare is "
"requested."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:338
msgid ""
"'iocontrol.0.tool-prepared' - (bit, in) Should be driven TRUE when a tool "
"prepare is completed."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:339
msgid ""
"'iocontrol.0.user-enable-out' - (bit, out) FALSE when an internal E-Stop "
"condition exists."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:340
msgid ""
"'iocontrol.0.user-request-enable' - (bit, out) TRUE when the user has "
"requested that E-Stop be cleared."
msgstr ""

#. type: Title ===
#: src/config/core-components.adoc:341 src/gui/axis.adoc:34
#, no-wrap
msgid "INI settings"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:344
msgid "A number of INI settings are made available as HAL input pins."
msgstr ""

#. type: Title ===
#: src/config/core-components.adoc:345
#, no-wrap
msgid "Pins (((INI settings (HAL pins))))"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:348
msgid "_N_ refers to a joint number, _L_ refers to an axis letter."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:350
msgid "'ini.__N__.ferror' - (float, in) [JOINT_N]FERROR"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:351
msgid "'ini.__N__.min_ferror' - (float, in) [JOINT_N]MIN_FERROR"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:352
msgid "'ini.__N__.backlash' - (float, in) [JOINT_N]BACKLASH"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:353
msgid "'ini.__N__.min_limit' - (float, in) [JOINT_N]MIN_LIMIT"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:354
msgid "'ini.__N__.max_limit' - (float, in) [JOINT_N]MAX_LIMIT"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:355
msgid "'ini.__N__.max_velocity' - (float, in) [JOINT_N]MAX_VELOCITY"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:356
msgid "'ini.__N__.max_acceleration' - (float, in) [JOINT_N]MAX_ACCELERATION"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:357
msgid "'ini.__N__.home' - (float, in) [JOINT_N]HOME"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:358
msgid "'ini.__N__.home_offset' - (float, in) [JOINT_N]HOME_OFFSET"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:359
msgid "'ini.__N__.home_offset' - (s32, in) [JOINT_N]HOME_SEQUENCE"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:360
msgid "'ini.__L__.min_limit' - (float, in) [AXIS_L]MIN_LIMIT"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:361
msgid "'ini.__L__.max_limit' - (float, in) [AXIS_L]MAX_LIMIT"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:362
msgid "'ini.__L__.max_velocity' - (float, in) [AXIS_L]MAX_VELOCITY"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:363
msgid "'ini.__L__.max_acceleration' - (float, in) [AXIS_L]MAX_ACCELERATION"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:373
msgid ""
"The per-axis min_limit and max_limit pins are honored continuously after "
"homing.  The per-axis ferror and min_ferror pins are honored when the "
"machine is on and not in position.  The per-axis max_velocity and "
"max_acceleration pins are sampled when the machine is on and the "
"motion_state is free (homing or jogging) but are not sampled when in a "
"program is running (auto mode) or in MDI mode.  Consequently, changing the "
"pin values when a program is running will not have effect until the program "
"is stopped and the motion_state is again free."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:375
msgid "'ini.traj_arc_blend_enable' - (bit, in) [TRAJ]ARC_BLEND_ENABLE"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:376
msgid ""
"'ini.traj_arc_blend_fallback_enable' - (bit, in) "
"[TRAJ]ARC_BLEND_FALLBACK_ENABLE"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:377
msgid ""
"'ini.traj_arc_blend_gap_cycles' - (float, in) [TRAJ]ARC_BLEND_GAP_CYCLES"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:378
msgid ""
"'ini.traj_arc_blend_optimization_depth' - (float, in) "
"[TRAJ]ARC_BLEND_OPTIMIZATION_DEPTH"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:379
msgid "'ini.traj_arc_blend_ramp_freq' - (float, in) [TRAJ]ARC_BLEND_RAMP_FREQ"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:384
msgid ""
"The traj_arc_blend pins are sampled continuously but changing pin values "
"while a program is running may not have immediate effect due to queueing of "
"commands."
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:386
msgid ""
"'ini.traj_default_acceleration' - (float, in) [TRAJ]DEFAULT_ACCELERATION"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:387
msgid "'ini.traj_default_velocity' - (float, in) [TRAJ]DEFAULT_VELOCITY"
msgstr ""

#. type: Plain text
#: src/config/core-components.adoc:388
msgid "'ini.traj_max_acceleration' - (float, in) [TRAJ]MAX_ACCELERATION"
msgstr ""

#. type: Title =
#: src/config/ini-config.adoc:5
#, no-wrap
msgid "INI Configuration(((INI Configuration)))"
msgstr ""

#. type: Title ==
#: src/config/ini-config.adoc:13
#, no-wrap
msgid "The INI File Components(((INI File,Components)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:16
msgid "A typical INI file follows a rather simple layout that includes;"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:18
msgid "comments"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:19
msgid "sections"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:20
msgid "variables"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:23
msgid ""
"Each of these elements is separated on single lines. Each end of line or "
"newline character creates a new element."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:24
#, no-wrap
msgid "Comments(((INI File,Components,Comments)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:30
msgid ""
"A comment line is started with a ; or a # mark. When the INI reader sees "
"either of these marks at the start a line, the rest of the line is ignored "
"by the software. Comments can be used to describe what an INI element will "
"do."
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:35
#, no-wrap
msgid ""
"; This is my mill configuration file.\n"
"# I set it up on January 12, 2012\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:39
msgid ""
"Comments can also be used to 'turn off' a variable. This makes it easier to "
"pick between different variables."
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:44
#, no-wrap
msgid ""
"DISPLAY = axis\n"
"# DISPLAY = touchy\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:50
msgid ""
"In this list, the DISPLAY variable will be set to axis because the other one "
"is commented out. If someone carelessly edits a list like this and leaves "
"two of the lines uncommented, the first one encountered will be used."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:53
msgid ""
"Note that inside a variable, the \"#\" and \";\" characters do not denote "
"comments:"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:57
#, no-wrap
msgid "INCORRECT = value     # and a comment\n"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:60
#, no-wrap
msgid ""
"# Correct Comment\n"
"CORRECT = value\n"
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:63
#, no-wrap
msgid "Sections(((INI File,Components,Sections)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:69
msgid ""
"Related parts of an INI file are separated into sections.  A section name is "
"enclosed in brackets like this '[THIS_SECTION]' The order of sections is "
"unimportant. Sections begin at the section name and end at the next section "
"name."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:71
msgid "The following sections are used by LinuxCNC:"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:73
msgid "<<sub:ini:sec:emc,[EMC]>> general information"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:74
msgid ""
"<<sub:ini:sec:display,[DISPLAY]>> settings related to the graphical user "
"interface"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:75
msgid "<<sub:ini:sec:filter,[FILTER]>> settings input filter programs"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:76
msgid ""
"<<sub:ini:sec:rs274ngc,[RS274NGC]>> settings used by the G-code interpreter"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:77
msgid ""
"<<sub:ini:sec:emcmot,[EMCMOT]>> settings used by the real time motion "
"controller"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:78
msgid "<<sub:ini:sec:task,[TASK]>> settings used by the task controller"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:79
msgid "<<sub:ini:sec:hal,[HAL]>> specifies .hal files"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:80
msgid "<<sub:ini:sec:halui,[HALUI]>> MDI commands used by HALUI"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:81
msgid ""
"<<sub:ini:sec:applications,[APPLICATIONS]>> Other applications to be started "
"by LinuxCNC"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:82
msgid ""
"<<sub:ini:sec:traj,[TRAJ]>> additional settings used by the real time motion "
"controller"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:83
msgid "<<sub:ini:sec:joint-num,[JOINT_n]>> individual joint variables"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:84
msgid "<<sub:ini:sec:axis-letter,[AXIS_l]>> individual axis variables"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:85
msgid "<<sub:ini:sec:kins,[KINS]>> kinematics variables"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:86
msgid "<<sub:ini:sec:emcio,[EMCIO]>> settings used by the I/O Controller"
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:88
#, no-wrap
msgid "Variables(((INI File,Components,Variables)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:95
msgid ""
"A variable line is made up of a variable name, an equals sign (=), and a "
"value. Everything from the first non-white space character after the = up to "
"the end of the line is passed as the value, so you can embed spaces in "
"string symbols if you want to or need to. A variable name is often called a "
"keyword."
msgstr ""

#. type: Block title
#: src/config/ini-config.adoc:96
#, no-wrap
msgid "Variable Example"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:100
#, no-wrap
msgid "MACHINE = My Machine\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:105
msgid ""
"A variable line may be extended to multiple lines with a terminal backslash "
"(\\)  character.  A maximum of MAX_EXTEND_LINES (==20) are allowed.  There "
"must be no whitespace following the trailing backslash character."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:107
msgid "Section identifiers may not be extended to multiple lines."
msgstr ""

#. type: Block title
#: src/config/ini-config.adoc:108
#, no-wrap
msgid "Variable with Line extends Example"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:118
#, no-wrap
msgid ""
"APP = sim_pin \\\n"
"ini.0.max_acceleration \\\n"
"ini.1.max_acceleration \\\n"
"ini.2.max_acceleration \\\n"
"ini.0.max_velocity \\\n"
"ini.1.max_velocity \\\n"
"ini.2.max_velocity\n"
msgstr ""

#. type: Block title
#: src/config/ini-config.adoc:120
#, no-wrap
msgid "Boolean Variables"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:123
msgid ""
"Boolean values can be on one of `TRUE`, `YES` or `1` for true/enabled and "
"one of `FALSE`, `NO` or `0` for false/disabled. The case is ignored."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:126
msgid ""
"The following sections detail each section of the configuration file, using "
"sample values for the configuration lines."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:130
msgid ""
"Variables that are used by LinuxCNC must always use the section names and "
"variable names as shown. In the following example the variable 'MACHINE' is "
"assigned the value 'My Machine'."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:132
#, no-wrap
msgid "Custom Sections and Variables(((INI File,Components,Custom sections and variables)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:136
msgid ""
"Most sample configurations use custom sections and variables to put all of "
"the settings into one location for convenience."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:139
msgid ""
"To add a custom variable to an existing LinuxCNC section, simply include the "
"variable in that section."
msgstr ""

#. type: Block title
#: src/config/ini-config.adoc:140
#, no-wrap
msgid "Custom Variable Example"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:147
#, no-wrap
msgid ""
"[JOINT_0]\n"
"TYPE = LINEAR\n"
"...\n"
"SCALE = 16000\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:151
msgid ""
"To introduce a custom section with its own variables, add the section and "
"variables to the INI file."
msgstr ""

#. type: Block title
#: src/config/ini-config.adoc:152
#, no-wrap
msgid "Custom Section Example"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:159
#, no-wrap
msgid ""
"[PROBE]\n"
"Z_FEEDRATE = 50\n"
"Z_OFFSET = 12\n"
"Z_SAFE_DISTANCE = -10\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:163
msgid ""
"To use the custom variables in your HAL file, put the section and variable "
"name in place of the value."
msgstr ""

#. type: Block title
#: src/config/ini-config.adoc:164
#, no-wrap
msgid "HAL Example"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:169
#, no-wrap
msgid ""
"setp offset.1.offset [PROBE]Z_OFFSET\n"
"setp stepgen.0.position-scale [JOINT_0]SCALE\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:174
msgid ""
"The value stored in the variable must match the type specified by the "
"component pin."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:178
msgid ""
"To use the custom variables in G-code, use the global variable syntax "
"`#<_ini[section]variable>`. The following example shows a simple Z-axis "
"touch-off routine for a router or mill using a probe plate."
msgstr ""

#. type: Block title
#: src/config/ini-config.adoc:179
#, no-wrap
msgid "G-code Example"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:187
#, no-wrap
msgid ""
"G91\n"
"G38.2 Z#<_ini[probe]z_safe_distance> F#<_ini[probe]z_feedrate>\n"
"G90\n"
"G1 Z#5063\n"
"G10 L20 P0 Z#<_ini[probe]z_offset>\n"
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:190
#, no-wrap
msgid "Include Files(((INI File,Components,Include)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:193
msgid ""
"An INI file may include the contents of another file by using a #INCLUDE "
"directive."
msgstr ""

#. type: Block title
#: src/config/ini-config.adoc:194
#, no-wrap
msgid "#INCLUDE Format"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:198
#, no-wrap
msgid "#INCLUDE filename\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:201
msgid "The filename can be specified as:"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:203
msgid "a file in the same directory as the INI file"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:204
msgid "a file located relative to the working directory"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:205
msgid "an absolute file name (starts with a /)"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:206
msgid "a user-home-relative file name (starts with a ~)"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:208
msgid "Multiple #INCLUDE directives are supported."
msgstr ""

#. type: Block title
#: src/config/ini-config.adoc:209
#, no-wrap
msgid "#INCLUDE Examples"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:217
#, no-wrap
msgid ""
"#INCLUDE joint_0.inc\n"
"#INCLUDE ../parallel/joint_1.inc\n"
"#INCLUDE below/joint_2.inc\n"
"#INCLUDE /home/myusername/myincludes/display.inc\n"
"#INCLUDE ~/linuxcnc/myincludes/rs274ngc.inc\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:222
msgid ""
"The #INCLUDE directives are supported for one level of expansion only -- an "
"included file may not include additional files.  The recommended file "
"extension is .inc.  Do not use a file extension of .ini for included files."
msgstr ""

#. type: Title ==
#: src/config/ini-config.adoc:224
#, no-wrap
msgid "INI File Sections(((INI File,Sections)))"
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:227
#, no-wrap
msgid "[EMC] Section(((INI File,Sections,[EMC] Section)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:232
msgid ""
"'VERSION = 1.1' - The version number for the configuration. Any value other "
"than 1.1 will cause the configuration checker to run and try to update the "
"configuration to the new style joint axes type of configuration."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:235
msgid ""
"'MACHINE = My Controller' - This is the name of the controller, which is "
"printed out at the top of most graphical interfaces. You can put whatever "
"you want here as long as you make it a single line long."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:238
msgid ""
"'DEBUG = 0' - Debug level 0 means no messages will be printed when LinuxCNC "
"is run from a <<faq:terminal,terminal>>. Debug flags are usually only useful "
"to developers. See src/emc/nml_intf/debugflags.h for other settings."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:240
#, no-wrap
msgid "[DISPLAY] Section(((INI File,Sections,[DISPLAY] Section)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:250
msgid ""
"Different user interface programs use different options, and not every "
"option is supported by every user interface. There are several interfaces, "
"like AXIS, GMOCCAPY, Touchy, QtVCP's QtDragon and Gscreen.  Axis is an "
"interface for use with normal computer and monitor, Touchy is for use with "
"touch screens. GMOCCAPY can be used both ways and offers also many "
"connections for hardware controls.  Descriptions of the interfaces are in "
"the Interfaces section of the User Manual."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:255
msgid ""
"'DISPLAY = axis' - The file name of the executable providing the user "
"interface to use. Prominent valid options are (all in lower case): 'axis', "
"'touchy', 'gmoccapy', 'gscreen', 'tklinuxcnc', 'qtvcp', 'qtvcp-qtdragon' or "
"'qtvcp-qtplasmac'."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:258
msgid ""
"'POSITION_OFFSET = RELATIVE' - The coordinate system (RELATIVE or MACHINE)  "
"to show on the DRO when the user interface starts. The RELATIVE coordinate "
"system reflects the G92 and G5x coordinate offsets currently in effect."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:263
msgid ""
"'POSITION_FEEDBACK = COMMANDED' - The coordinate value (COMMANDED or "
"ACTUAL)  to show on the DRO when the user interface starts. In Axis this can "
"be changed from the View menu. The COMMANDED position is the position "
"requested by LinuxCNC. The ACTUAL position is the feedback position of the "
"motors if they have feedback like most servo systems. Typically the "
"COMMANDED value is used."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:269
msgid ""
"'DRO_FORMAT_MM = %+08.6f' - Override the default DRO formatting in metric "
"mode (normally 3 decimal places, padded with spaces to 6 digits to the "
"left).  The example above will pad with zeros, display 6 decimal digits and "
"force display of a + sign for positive numbers. Formatting follows Python "
"practice.  https://docs.python.org/2/library/string.html#format-"
"specification-mini-language an error will be raised if the format can not "
"accept a floating-point value."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:275
msgid ""
"'DRO_FORMAT_IN = % 4.1f' - Override the default DRO formatting in imperial "
"mode (normally 4 decimal places, padded with spaces to 6 digits to the "
"left).  The example above will display only one decimal digit. Formatting "
"follows Python practice.  https://docs.python.org/2/library/string."
"html#format-specification-mini-language An error will be raised if the "
"format can not accept a floating-point value."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:277
msgid ""
"'CONE_BASESIZE = .25' - Override the default cone/tool base size of .5 in "
"the graphics display"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:279
msgid ""
"'MAX_FEED_OVERRIDE = 1.2' - The maximum feed override the user may select.  "
"1.2 means 120% of the programmed feed rate."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:282
msgid ""
"'MIN_SPINDLE_OVERRIDE = 0.5' - The minimum spindle override the user may "
"select.  0.5 means 50% of the programmed spindle speed. (This is used to set "
"the minimum spindle speed)."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:286
msgid ""
"'MIN_SPINDLE_0_OVERRIDE = 0.5' - The minimum spindle override the user may "
"select.  0.5 means 50% of the programmed spindle speed.  (This is used to "
"set the minimum spindle speed).  On multi spindle machine there will be "
"entries for each spindle number. Only used by the QtVCP based user "
"interfaces."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:288
msgid ""
"'MAX_SPINDLE_OVERRIDE = 1.0' - The maximum spindle override the user may "
"select. 1.0 means 100% of the programmed spindle speed."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:291
msgid ""
"'MAX_SPINDLE_0_OVERRIDE = 1.0' - The maximum feed override the user may "
"select.  1.2 means 120% of the programmed feed rate.  On multi spindle "
"machine there will be entries for each spindle number. Only used by the "
"QtVCP based user interfaces."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:294
msgid ""
"'DEFAULT_SPINDLE_SPEED = 100' - The default spindle RPM when the spindle is "
"started in manual mode. if this setting is not present, this defaults to 1 "
"RPM for AXIS and 300 RPM for gmoccapy."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:295
msgid "_deprecated_ - use the [SPINDLE_n] section instead"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:297
msgid ""
"'DEFAULT_SPINDLE_0_SPEED = 100' - The default spindle RPM when the spindle "
"is started in manual mode. On multi spindle machine there will be entries "
"for each spindle number. Only used by the QtVCP based user interfaces."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:298 src/config/ini-config.adoc:300
#: src/config/ini-config.adoc:303 src/config/ini-config.adoc:306
msgid "_deprecated_ - use the [SPINDLE_n] section instead."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:299
msgid ""
"'SPINDLE_INCREMENT = 200' - The increment used when clicking increase/"
"decrease buttons Only used by the QtVCP based user interfaces."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:302
msgid ""
"'MIN_SPINDLE_0_SPEED = 1000' - The minimum RPM that can be manually "
"selected.  On multi spindle machine there will be entries for each spindle "
"number. Only used by the QtVCP based user interfaces."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:305
msgid ""
"'MAX_SPINDLE_0_SPEED = 20000' - The maximum RPM that can be manually "
"selected.  On multi spindle machine there will be entries for each spindle "
"number. Only used by the QtVCP based user interfaces."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:310
msgid ""
"'PROGRAM_PREFIX = ~/linuxcnc/nc_files' - The default location for G-code "
"files and the location for user-defined M-codes. This location is searched "
"for the file name before the subroutine path and user M path if specified in "
"the [RS274NGC] section."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:311
msgid "'INTRO_GRAPHIC = emc2.gif' - The image shown on the splash screen."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:312
msgid ""
"'INTRO_TIME = 5' - The maximum time to show the splash screen, in seconds."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:318
msgid ""
"'CYCLE_TIME = 100' - Cycle time of the Display GUI.  Depending on the "
"screen, this can be in seconds or ms (ms preferred).  This is often the "
"update rate rather then sleep time between updates.  If the update time is "
"not set right the screen can become unresponsive or very jerky.  A value of "
"100ms (0.1 seconds) is a common setting though a range of 50 - 200ms (.05 "
"- .2 seconds) may be useable.  An under powered CPU may see improvement with "
"a longer setting. Usually the default is fine."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:319
msgid ""
"'PREVIEW_TIMEOUT = 5' - Timeout (in seconds) for loading graphical preview "
"of G-code. Currently AXIS only."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:324
msgid ""
"The following [DISPLAY] items are used by GladeVCP and PyVCP, see the "
"<<gladevcp:embedding-tab,embedding a tab>> section of the GladeVCP Chapter "
"or the <<cha:pyvcp,PyVCP Chapter>> for more information."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:326
msgid "'EMBED_TAB_NAME = GladeVCP demo'"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:327
msgid ""
"'EMBED_TAB_COMMAND = halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x "
"\\{XID\\} -u ./gladevcp/hitcounter.py ./gladevcp/manual-example.ui'"
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:334
msgid ""
"Different user interface programs use different options, and not every "
"option is supported by every user interface.  See <<cha:axis-gui,AXIS GUI>> "
"document for AXIS details.  See <<cha:gmoccapy,gmoccapy>> document for "
"Gmoccapy details."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:337
msgid ""
"'DEFAULT_LINEAR_VELOCITY = .25' - The default velocity for linear jogs, in "
"<<sub:ini:sec:traj,machine units>> per second."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:338
msgid "'MIN_VELOCITY = .01' - The approximate lowest value the jog slider."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:339
msgid ""
"'MAX_LINEAR_VELOCITY = 1.0' - The maximum velocity for linear jogs, in "
"machine units per second."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:340
msgid ""
"'MIN_LINEAR_VELOCITY = .01' - The approximate lowest value the jog slider."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:341
msgid ""
"'DEFAULT_ANGULAR_VELOCITY = .25' - The default velocity for angular jogs, in "
"machine units per second."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:342
msgid ""
"'MIN_ANGULAR_VELOCITY = .01' - The approximate lowest value the angular jog "
"slider."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:343
msgid ""
"'MAX_ANGULAR_VELOCITY = 1.0' - The maximum velocity for angular jogs, in "
"machine units per second."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:350
msgid ""
"'INCREMENTS = 1 mm, .5 in, ...' - Defines the increments available for "
"incremental jogs.  The INCREMENTS can be used to override the default.  The "
"values can be decimal numbers (e.g., 0.1000) or fractional numbers (e.g., "
"1/16), optionally followed by a unit (cm, mm, um, inch, in or mil).  If a "
"unit is not specified the machine unit is assumed.  Metric and imperial "
"distances may be mixed: INCREMENTS = 1 inch, 1 mil, 1 cm, 1 mm, 1 um is a "
"valid entry."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:352
msgid ""
"'GRIDS = 10 mm, 1 in, ...' - Defines the preset values for grid lines.  The "
"value is interpreted the same way as 'INCREMENTS'."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:355
msgid ""
"'OPEN_FILE = /full/path/to/file.ngc' - The file to show in the preview plot "
"when AXIS starts.  Use a blank string \"\" and no file will be loaded at "
"start up.  gmoccapy will not use this setting, as it offers a corresponding "
"entry on its settings page."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:359
msgid ""
"'EDITOR = gedit' - The editor to use when selecting File > Edit to edit the "
"G-code from the AXIS menu.  This must be configured for this menu item to "
"work.  Another valid entry is gnome-terminal -e vim.  This entry does not "
"apply to gmoccapy, as gmoccapy has an integrated editor."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:363
msgid ""
"'TOOL_EDITOR = tooledit' - The editor to use when editing the tool table "
"(for example by selecting \"File > Edit tool table...\" in Axis).  Other "
"valid entries are \"gedit\", \"gnome-terminal -e vim\", and \"gvim\".  This "
"entry does not apply to gmoccapy, as gmoccapy has an integrated editor."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:365
msgid ""
"'PYVCP = /filename.xml' - The PyVCP panel description file.  See the <<cha:"
"pyvcp,PyVCP Chapter>>for more information."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:368
msgid ""
"'PYVCP_POSITION = BOTTOM' - The placement of the PyVCP panel in the AXIS "
"user interface.  If this variable is omitted the panel will default to the "
"right side. The only valid alternative is BOTTOM. See the <<cha:pyvcp,PyVCP "
"Chapter>> for more information."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:369
msgid ""
"'LATHE = 1' - Any non-empty value (including \"0\") causes axis to use "
"\"lathe mode\" with a top view and with Radius and Diameter on the DRO."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:370
msgid ""
"'BACK_TOOL_LATHE = 1' - Any non-empty value (including \"0\") causes axis to "
"use \"back tool lathe mode\" with inverted X axis."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:371
msgid ""
"'FOAM = 1' - Any non-empty value (including \"0\") causes axis to change the "
"display for foam-cutter mode."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:373
msgid ""
"'GEOMETRY = XYZABCUVW' - Controls the *preview* and *backplot* of motion.  "
"This item consists of a sequence of axis letters and control characters, "
"optionally preceeded with a \"-\" sign:"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:375
msgid "The letters X, Y, Z specify translation along the named coordinate."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:376
msgid ""
"The letters A, B, C specify rotation about the corresponding axes X, Y, Z."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:377
msgid "The letters U, V, W specify translation along the related axes X, Y, Z."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:378
msgid ""
"Each letter specified must occur in [TRAJ]COORDINATES to have an effect."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:379
msgid ""
"A \"*-*\" character preceding any letter inverts the direction of the "
"operation."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:383
msgid ""
"The translation and rotation operations are evaluated *right-to-left*.  So "
"using GEOMETRY=XYZBC specifies a C rotation followed by a B rotation "
"followed by Z, Y, X translations.  (The ordering of consecutive translation "
"letters is immaterial.)"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:385
msgid ""
"If the \"*!*\" special character appears anywhere in the sequence, rotations "
"for the A, B, C axis letters respect the offsets (G5x, G92) applied to X, Y, "
"Z."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:389
msgid ""
"The proper GEOMETRY string depends on the machine configuration and the "
"kinematics used to control it. The order of the letters is important.  For "
"example, rotating around C then B is different than rotating around B then C."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:392
msgid ""
"Rotations are by default applied with respect to the machine origin.  "
"Example: GEOMETRY=CXYZ first translates the control point to X, Y, Z and "
"then performs a C rotation about the Z axis centered at the machine origin."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:397
msgid ""
"Rotations applied after translations may use the \"*!*\" provision to act "
"with respect to the current machine offset. Example: GEOMETRY=!CXYZ "
"translates the control point to the X, Y, Z position and then performs a C "
"rotation about the machine origin displaced by the current G5x,G92 X, Y, Z "
"offsets.  (Changing offsets may require a program reload)."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:400
msgid ""
"UVW translation example: GEOMETRY=XYZUVW causes UVW to move in the "
"coordinate system of the tool and XYZ to move in the coordinate system of "
"the material."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:405
msgid ""
"Foam-cutting machines (FOAM = 1) should specify \"XY;UV\" or leave the value "
"blank even though this value is presently ignored in foam-cutter mode.  A "
"future version may define what \";\" means, but if it does \"XY;UV\" will "
"mean the same as the current foam default."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:410
msgid ""
"If no [DISPLAY]GEOMETRY is included in the INI file, a default is provided "
"by the [DISPLAY]DISPLAY GUI program (typically \"XYZABCUVW\")"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:416
msgid ""
"'ARCDIVISION = 64' - Set the quality of preview of arcs.  Arcs are previewed "
"by dividing them into a number of straight lines; a semicircle is divided "
"into *ARCDIVISION* parts.  Larger values give a more accurate preview, but "
"take longer to load and result in a more sluggish display.  Smaller values "
"give a less accurate preview, but take less time to load and may result in a "
"faster display.  The default value of 64 means a circle of up to 3 inches "
"will be displayed to within 1 mil (.03%)."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:419
msgid ""
"'MDI_HISTORY_FILE =' - The name of a local MDI history file.  If this is not "
"specified Axis will save the MDI history in *.axis_mdi_history* in the "
"user's home directory.  This is useful if you have multiple configurations "
"on one computer."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:423
msgid ""
"'JOG_AXES =' - The order in which jog keys are assigned to axis letters.  "
"The left and right arrows are assigned to the first axis letter, up and down "
"to the second, page up/page down to the third, and left and right bracket to "
"the fourth.  If unspecified, the default is determined from the "
"[TRAJ]COORDINATES, [DISPLAY]LATHE and [DISPLAY]FOAM values."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:425
msgid ""
"'JOG_INVERT =' - For each axis letter, the jog direction is inverted.  The "
"default is \"X\" for lathes and blank otherwise."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:432
msgid ""
"The settings for 'JOG_AXES' and 'JOG_INVERT' apply to world mode jogging by "
"axis coordinate letter and are in effect while in world mode after "
"successful homing.  When operating in joint mode prior to homing, keyboard "
"jog keys are assigned in a fixed sequence: left/right: joint0, up/down: "
"joint1, page up/page down: joint2, left/right bracket: joint3"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:435
msgid ""
"'USER_COMMAND_FILE = mycommands.py' - The name of an optional, configuration-"
"specific python file sourced by the axis GUI instead of the user-specific "
"file `~/.axisrc`."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:438
msgid "The following [DISPLAY] item is used by the TKLinuxCNC interface only."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:440
msgid "'HELP_FILE = tklinucnc.txt' - Path to help file."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:442
#, no-wrap
msgid "[FILTER] Section(((INI File,Sections,[FILTER] Section)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:455
msgid ""
"AXIS and gmoccapy have the ability to send loaded files through a filter "
"program.  This filter can do any desired task: Something as simple as making "
"sure the file ends with M2, or something as complicated as detecting whether "
"the input is a depth image, and generating G-code to mill the shape it "
"defines. The [FILTER] section of the INI file controls how filters work. "
"First, for each type of file, write a PROGRAM_EXTENSION line.  Then, specify "
"the program to execute for each type of file. This program is given the name "
"of the input file as its first argument, and must write RS274NGC code to "
"standard output. This output is what will be displayed in the text area, "
"previewed in the display area, and executed by LinuxCNC when Run."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:457
msgid "`PROGRAM_EXTENSION = .extension Description`"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:460
msgid ""
"If your post processor outputs files in all caps you might want to add the "
"following line:"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:464
#, no-wrap
msgid "PROGRAM_EXTENSION = .NGC XYZ Post Processor\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:468
msgid ""
"The following lines add support for the image-to-G-code converter included "
"with LinuxCNC."
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:475
#, no-wrap
msgid ""
"PROGRAM_EXTENSION = .png,.gif,.jpg # Greyscale Depth Image\n"
"  png = image-to-gcode\n"
"  gif = image-to-gcode\n"
"  jpg = image-to-gcode\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:478
msgid ""
"An example of a custom G-code converter located in the linuxcnc directory."
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:483
#, no-wrap
msgid ""
"PROGRAM_EXTENSION = .gcode 3D Printer\n"
"  gcode = /home/mill/linuxcnc/convert.py\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:487
msgid ""
"The program file associated with an extension must have either the full path "
"to the program or be located in a directory that is on the system path."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:489 src/gui/axis.adoc:829
#: src/gui/filter-programs.adoc:40
msgid "It is also possible to specify an interpreter:"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:494
#, no-wrap
msgid ""
"PROGRAM_EXTENSION = .py Python Script\n"
"  py = python\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:502
msgid ""
"In this way, any Python script can be opened, and its output is treated as G-"
"code. One such example script is available at nc_files/holecircle.py. This "
"script creates G-code for drilling a series of holes along the circumference "
"of a circle. Many more G-code generators are on the LinuxCNC Wiki site "
"http://wiki.linuxcnc.org/[http://wiki.linuxcnc.org/]."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:504
msgid ""
"Python filters should use the print function to output the result to Axis."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:507
msgid ""
"This example program filters a file and adds a W axis to match the Z axis.  "
"It depends on there being a space between each axis word to work."
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:511 src/gui/filter-programs.adoc:103
#: src/gui/gstat.adoc:55 src/gui/gstat.adoc:103 src/gui/gstat.adoc:147
#: src/gui/qtvcp-custom-widgets.adoc:113 src/gui/qtvcp-custom-widgets.adoc:187
#: src/gui/qtvcp-custom-widgets.adoc:268 src/gui/qtvcp-custom-widgets.adoc:696
#: src/gui/qtvcp-custom-widgets.adoc:741 src/gui/qtvcp-custom-widgets.adoc:793
#: src/gui/qtvcp-vismach.adoc:122 src/gui/vismach.adoc:41
#, no-wrap
msgid "#!/usr/bin/env python3\n"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:513
#, no-wrap
msgid "import sys\n"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:515
#, no-wrap
msgid "def main(argv):\n"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:519
#, no-wrap
msgid ""
"  openfile = open(argv[0], 'r')\n"
"  file_in = openfile.readlines()\n"
"  openfile.close()\n"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:538
#, no-wrap
msgid ""
"  file_out = []\n"
"  for line in file_in:\n"
"    # print(line)\n"
"    if line.find('Z') != -1:\n"
"      words = line.rstrip('\\n')\n"
"      words = words.split(' ')\n"
"      newword = ''\n"
"      for i in words:\n"
"        if i[0] == 'Z':\n"
"          newword = 'W'+ i[1:]\n"
"      if len(newword) > 0:\n"
"        words.append(newword)\n"
"        newline = ' '.join(words)\n"
"        file_out.append(newline)\n"
"    else:\n"
"      file_out.append(line)\n"
"  for item in file_out:\n"
"    print(\"%s\" % item)\n"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:541
#, no-wrap
msgid ""
"if __name__ == \"__main__\":\n"
"  main(sys.argv[1:])\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:547
#, no-wrap
msgid ""
"`FILTER_PROGRESS=%d`\n"
"If the environment variable AXIS_PROGRESS_BAR is set, then lines written to stderr of the form above sets the AXIS progress bar to the given percentage. This feature should be used by any filter that runs for a long time."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:549
#, no-wrap
msgid "[RS274NGC] Section(((INI File,Sections,[RS274NGC] Section)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:554
msgid ""
"'PARAMETER_FILE = myfile.var' - (((PARAMETER FILE)))  The file located in "
"the same directory as the INI file which contains the parameters used by the "
"interpreter (saved between runs)."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:557
msgid ""
"'ORIENT_OFFSET = 0' - (((ORIENT OFFSET)))  A float value added to the R word "
"parameter of an <<mcode:m19,M19 Orient Spindle>> operation.  Used to define "
"an arbitrary zero position regardless of encoder mount orientation."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:563
msgid ""
"'RS274NGC_STARTUP_CODE = G17 G20 G40 G49 G64 P0.001 G80 G90 G92 G94 G97 G98' "
"- (((RS274NGC STARTUP CODE)))  A string of NC codes that the interpreter is "
"initialized with. This is not a substitute for specifying modal G-codes at "
"the top of each ngc file, because the modal codes of machines differ, and "
"may be changed by G-code interpreted earlier in the session."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:573
msgid ""
"'SUBROUTINE_PATH = ncsubroutines:/tmp/testsubs:lathesubs:millsubs' - "
"(((SUBROUTINE PATH)))  Specifies a colon (:) separated list of up to 10 "
"directories to be searched when single-file subroutines are specified in G-"
"code. These directories are searched after searching [DISPLAY]PROGRAM_PREFIX "
"(if it is specified) and before searching [WIZARD]WIZARD_ROOT (if "
"specified). The paths are searched in the order that they are listed. The "
"first matching subroutine file found in the search is used. Directories are "
"specified relative to the current directory for the INI file or as absolute "
"paths. The list must contain no intervening whitespace."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:574
msgid "'CENTER_ARC_RADIUS_TOLERANCE_INCH = n' Default 0.00005"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:575
msgid "'CENTER_ARC_RADIUS_TOLERANCE_MM = n' Default 0.00127"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:579
msgid ""
"'USER_M_PATH = myfuncs:/tmp/mcodes:experimentalmcodes' - (((USER M PATH)))  "
"Specifies a list of colon (:) separated directories for user defined "
"functions.  Directories are specified relative to the current directory for "
"the INI file or as absolute paths.  The list must contain no intervening "
"whitespace."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:582
msgid ""
"A search is made for each possible user defined function, typically (M100-"
"M199). The search order is:"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:584
msgid "[DISPLAY]PROGRAM_PREFIX (if specified)"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:585
msgid ""
"If [DISPLAY]PROGRAM_PREFIX is not specified, search the default location: "
"nc_files"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:586
msgid "Then search each directory in the list [RS274NGC]USER_M_PATH"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:588
msgid "The first executable M1xx found in the search is used for each M1xx."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:592
msgid ""
"The maximum number of USER_M_PATH directories is defined at compile time "
"(typ: 'USER_DEFINED_FUNCTION_MAX_DIRS == 5')."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:596
#, no-wrap
msgid ""
"'INI_VARS = 1' Default 1\n"
"Allows G-code programs to read values from the INI file using the format #<_ini[section]name>. See <<sec:overview-parameters,G-code Parameters>>."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:600
#, no-wrap
msgid ""
"'HAL_PIN_VARS = 1' Default 1\n"
"Allows G-code programs to read the values of HAL pins using the format #<_hal[HAL item]>. Variable access is read-only. See <<sec:overview-parameters,G-code Parameters>> for more details and an important caveat."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:603
#, no-wrap
msgid ""
"'RETAIN_G43 = 0' Default 0\n"
"When set, you can  turn on G43 after loading the first tool, and then not worry about it through the program. When you finally unload the last tool, G43 mode is canceled."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:606
#, no-wrap
msgid ""
"'OWORD_NARGS = 0' Default 0\n"
"If this feature is enabled then a called subroutine can determine the number of actual positional parameters passed by inspecting the +#<n_args>+ parameter."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:609
#, no-wrap
msgid ""
"'NO_DOWNCASE_OWORD = 0' Default 0\n"
"Preserve case in O-word names within comments if set, enables reading of mixed-case HAL items in structured comments like '(debug, #<_hal[MixedCaseItem])'."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:611
#, no-wrap
msgid ""
"'OWORD_WARNONLY = 0' Default 0\n"
"Warn rather than error in case of errors in O-word subroutines."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:614
msgid ""
"'DISABLE_G92_PERSISTENCE = 0' Default 0 Allow to clear the G92 offset "
"automatically when config start-up."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:617
msgid ""
"'DISABLE_FANUC_STYLE_SUB = 0' Default 0 If there is reason to disable Fanuc "
"subroutines set it to 1."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:623
#, no-wrap
msgid ""
"The above six options were controlled by the 'FEATURES' bitmask in versions of LinuxCNC prior to 2.8. This INI tag will no longer work.\n"
"For reference:"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:630
#, no-wrap
msgid ""
"FEATURES & 0x1  -> RETAIN_G43\n"
"FEATURES & 0x2  -> OWORD_NARGS\n"
"FEATURES & 0x4  -> INI_VARS\n"
"FEATURES & 0x8  -> HAL_PIN_VARS\n"
"FEATURES & 0x10 -> NO_DOWNCASE_OWORD\n"
"FEATURES & 0x20 -> OWORD_WARNONLY\n"
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:636
msgid ""
"[WIZARD]WIZARD_ROOT is a valid search path but the Wizard has not been fully "
"implemented and the results of using it are unpredictable."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:639
msgid "'LOG_LEVEL = 0' Default 0 Specify the log_level (default: -1)"
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:642
msgid "'LOG_FILE = file-name.log' For specify the file used for log the data."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:645
msgid ""
"'REMAP=M400 modalgroup=10 argspec=Pq ngc=myprocedure' See <<cha:remap,Remap "
"Extending G-code>> chapter for details."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:647
msgid ""
"'ON_ABORT_COMMAND=O <on_abort> call' See <<cha:remap,Remap Extending G-"
"code>> chapter for details."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:649
#, no-wrap
msgid "[EMCMOT] Section(((INI File,Sections,[EMCMOT] Section)))"
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:655
msgid ""
"This section is a custom section and is not used by LinuxCNC directly. Most "
"configurations use values from this section to load the motion controller. "
"For more information on the motion controller see the <<sec:motion,Motion>> "
"section."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:657
msgid "'EMCMOT = motmod' - the motion controller name is typically used here."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:658
msgid "'BASE_PERIOD = 50000' - the 'Base' task period in nanoseconds."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:659
msgid ""
"'SERVO_PERIOD = 1000000' - This is the \"Servo\" task period in nanoseconds."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:661
msgid ""
"'TRAJ_PERIOD = 100000' - This is the 'Trajectory Planner' task period in "
"nanoseconds."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:664
msgid ""
"'COMM_TIMEOUT = 1.0' - Number of seconds to wait for Motion (the realtime "
"part of the motion controller) to acknowledge receipt of messages from Task "
"(the non-realtime part of the motion controller)."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:669
msgid ""
"HOMEMOD = alternate_homing_module [home_parms=value] The HOMEMOD variable is "
"optional.  If specified, use a specified (user-built)  module instead of the "
"default (homemod).  Module parameters (home_parms) may be included if "
"supported by the named module.  The setting may be overridden from the "
"command line using the -m option ($ linuxcnc -h)"
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:671
#, no-wrap
msgid "[TASK] Section(((INI File,Sections,[TASK] Section)))"
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:679
msgid ""
"'TASK = milltask' - Specifies the name of the 'task' executable. The 'task' "
"executable does various things, such as communicate with the UIs over NML, "
"communicate with the realtime motion planner over non-HAL shared memory, and "
"interpret G-code.  Currently there is only one task executable that makes "
"sense for 99.9% of users, milltask."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:684
msgid ""
"'CYCLE_TIME = 0.010' - The period, in seconds, at which TASK will run. This "
"parameter affects the polling interval when waiting for motion to complete, "
"when executing a pause instruction, and when accepting a command from a user "
"interface. There is usually no need to change this number."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:686
#, no-wrap
msgid "[HAL] section(((INI File,Sections,[HAL] Section)))"
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:689
msgid "'HALFILE = example.hal' - Execute the file 'example.hal' at start up."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:696
msgid ""
"If 'HALFILE' is specified multiple times, the files are executed in the "
"order they appear in the INI file.  Almost all configurations will have at "
"least one 'HALFILE', and stepper systems typically have two such files, one "
"which specifies the generic stepper configuration ('core_stepper.hal') and "
"one which specifies the machine pin out ('xxx_pinout.hal')."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:700
msgid ""
"HALFILES are found using a search.  If the named file is found in the "
"directory containing the INI file, it is used.  If the named file is not "
"found in this INI file directory, a search is made using a system library of "
"HAL files."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:705
msgid ""
"If LinuxCNC is started with the `linuxcnc` script using the \"`-H dirname`\" "
"option, the specified dirname is prepended to the search described above so "
"that \"dirname\" is searched first.  The \"`-H dirname`\" option may be "
"specified more than once, directories are prepended in order."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:709
msgid ""
"A HALFILE may also be specified as an absolute path (when the name starts "
"with a '/' character).  Absolute paths are not recommended as their use may "
"limit relocation of configurations."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:714
msgid ""
"'HALFILE = texample.tcl [arg1 [arg2] ...]' - Execute the tcl file 'texample."
"tcl' at start up with arg1, arg2, etc as argv list.  Files with a .tcl "
"suffix are processed as above but use haltcl for processing See the <<cha:"
"haltcl,HALTCL Chapter>> for more information."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:716
msgid ""
"'HALFILE = LIB:sys_example.hal' - Execute the system library file "
"'sys_example.hal' at start up.  Explicit use of the LIB: prefix causes use "
"of the system library HALFILE without searching the INI file directory."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:718
msgid ""
"'HALFILE = LIB:sys_texample.tcl [arg1 [arg2 ...]]' - Execute the system "
"library file 'sys_texample.tcl' at start up.  Explicit use of the LIB: "
"prefix causes use of the system library HALFILE without searching the INI "
"file directory."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:727
msgid ""
"HALFILE items specify files that loadrt HAL components and make signal "
"connections between component pins.  Common mistakes are 1) omission of the "
"addf statement needed to add a component's function(s) to a thread, 2)  "
"incomplete signal (net) specifiers.  Omission of required addf statements is "
"almost always an error.  Signals usually include one or more input "
"connections and a single output (but both are not strictly required).  A "
"system library file is provided to make checks for these conditions and "
"report to stdout and in a popup GUI:"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:731
#, no-wrap
msgid "HALFILE = LIB:halcheck.tcl [nopopup]\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:737
msgid ""
"The LIB:halcheck.tcl line should be the last [HAL]HALFILE.  Specify the "
"'nopopup' option to suppress the popup message and allow immediate "
"starting.  Connections made using a POSTGUI_HALFILE are not checked."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:744
msgid ""
"'TWOPASS = ON' - Use twopass processing for loading HAL components.  With "
"TWOPASS processing, [HAL]HALFILE= lines are processed in two passes.  In the "
"first pass (pass0), all HALFILES are read and multiple appearances of loadrt "
"and loadusr commands are accumulated.  These accumulated load commands are "
"executed at the end of pass0.  This accumulation allows load lines to be "
"specified more than once for a given component (provided the names= names "
"used are unique on each use).  In the second pass (pass1), the HALFILES are "
"reread and all commands except the previously executed load commands are "
"executed."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:747
msgid ""
"'TWOPASS = nodelete verbose' - The TWOPASS feature can be activated with any "
"non-null string including the keywords verbose and nodelete.  The verbose "
"keyword causes printing of details to stdout.  The nodelete keyword "
"preserves temporary files in /tmp."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:749
msgid "For more information see the <<cha:hal-twopass,HAL TWOPASS>> chapter."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:754
msgid ""
"'HALCMD = command' - Execute 'command' as a single HAL command.  If 'HALCMD' "
"is specified multiple times, the commands are executed in the order they "
"appear in the INI file.  'HALCMD' lines are executed after all 'HALFILE' "
"lines."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:760
msgid ""
"'SHUTDOWN = shutdown.hal' - Execute the file 'shutdown.hal' when LinuxCNC is "
"exiting.  Depending on the hardware drivers used, this may make it possible "
"to set outputs to defined values when LinuxCNC is exited normally. However, "
"because there is no guarantee this file will be executed (for instance, in "
"the case of a computer crash) it is not a replacement for a proper physical "
"e-stop chain or other protections against software failure."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:764
#, no-wrap
msgid ""
"'POSTGUI_HALFILE = example2.hal' - Execute 'example2.hal' after the GUI has created its HAL pins. Some GUIs create HAL pins and support the use of a postgui halfile to use them. GUIs that support postgui HAL files include Touchy, Axis, Gscreen, and gmoccapy.\n"
"See section <<sec:pyvcp-with-axis,pyVCP with Axis>> for more information."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:766
#, no-wrap
msgid ""
"'HALUI = halui' - adds the HAL user interface pins.\n"
"For more information see the <<cha:hal-user-interface,HAL User Interface>> chapter."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:768
#, no-wrap
msgid "[HALUI] section(((INI File,Sections,[HALUI] Section)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:773
msgid ""
"'MDI_COMMAND = G53 G0 X0 Y0 Z0' - An MDI command can be executed by using "
"halui.mdi-command-00. Increment the number for each command listed in the "
"[HALUI] section."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:775
#, no-wrap
msgid "[APPLICATIONS] Section(((INI File,Sections,[APPLICATIONS] Section)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:780
msgid ""
"LinuxCNC can start other applications before the specified GUI is started.  "
"The applications can be started after a specified delay to allow for GUI-"
"dependent actions (like creating GUI-specific HAL pins)."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:784
msgid ""
"'DELAY = value' - seconds to wait beore starting other applications.  A "
"delay may be needed if an application has dependencies on "
"[HAL]POSTGUI_HALFILE actions or GUI-created HAL pins (default DELAY=0)."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:790
#, no-wrap
msgid ""
"'APP = appname [arg1 [arg2 ...]]' - Application to be started. This specification can be included multiple times. The appname can be explicitly named as an absolute or tilde specified filename (first character is / or ~), a relative filename (first characters of filename are ./), or as a file in the inifile directory. If no executable file is found using these names, then the user search PATH is used to find the application.\n"
"Examples:"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:792
msgid ""
"Simulate inputs to HAL pins for testing (using sim_pin -- a simple GUI to "
"set inputs to parameters, unconnected pins, or signals with no writers):"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:796
#, no-wrap
msgid "APP = sim_pin motion.probe-input halui.abort motion.analog-in-00\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:800
msgid ""
"Invoke halshow with a previuosly saved watchlist.  Since LinuxCNC sets the "
"working directory to the directory for the INI file, you can refer to files "
"in that directory (example: my.halshow):"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:804
#, no-wrap
msgid "APP = halshow my.halshow\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:806
msgid ""
"Alternatively, a watchlist file identified with a full pathname could be "
"specified:"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:810
#, no-wrap
msgid "APP = halshow ~/saved_shows/spindle.halshow\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:812
msgid "Open halscope using a previously saved configuration:"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:816
#, no-wrap
msgid "APP = halscope -i my.halscope\n"
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:819
#, no-wrap
msgid "[TRAJ] Section(((INI File,Sections,[TRAJ] Section)))"
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:830
#, no-wrap
msgid ""
"The new Trajectory Planner (TP) is on by default. If you have no TP settings in your [TRAJ] section - LinuxCNC defaults to:\n"
"ARC_BLEND_ENABLE = 1\n"
"ARC_BLEND_FALLBACK_ENABLE = 0\n"
"ARC_BLEND_OPTIMIZATION_DEPTH = 50\n"
"ARC_BLEND_GAP_CYCLES = 4\n"
"ARC_BLEND_RAMP_FREQ = 100"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:834
msgid ""
"The [TRAJ] section contains general parameters for the trajectory planning "
"module in 'motion'."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:838
msgid ""
"'ARC_BLEND_ENABLE = 1' - Turn on new TP.  If set to 0 TP uses parabolic "
"blending (1 segment look ahead).  Default value 1."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:841
msgid ""
"'ARC_BLEND_FALLBACK_ENABLE = 0' - Optionally fall back to parabolic blends "
"if the estimated speed is faster.  However, this estimate is rough, and it "
"seems that just disabling it gives better performance.  Default value 0."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:842
msgid ""
"'ARC_BLEND_OPTIMIZATION_DEPTH = 50' - Look ahead depth in number of segments."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:846
msgid ""
"To expand on this a bit, you can choose this value somewhat arbitrarily.  "
"Here's a formula to estimate how much 'depth' you need for a particular "
"config:"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:854
#, no-wrap
msgid ""
"# n = v_max / (2.0 * a_max * t_c)\n"
"# where:\n"
"# n = optimization depth\n"
"# v_max = max axis velocity (UU / sec)\n"
"# a_max = max axis acceleration (UU / sec)\n"
"# t_c = servo period (seconds)\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:858
msgid ""
"So, a machine with a maximum axis velocity of 10&thinsp;IPS, a max "
"acceleration of 100&thinsp;IPS^2^, and a servo period of 0.001&thinsp;s "
"would need:"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:861
msgid ""
"10 / (2.0 * 100 * 0.001) = 50 segments to always reach maximum velocity "
"along the fastest axis."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:867
msgid ""
"In practice, this number isn't that important to tune, since the look ahead "
"rarely needs the full depth unless you have lots of very short segments. If "
"during testing, you notice strange slowdowns and can't figure out where they "
"come from, first try increasing this depth using the formula above."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:871
msgid ""
"If you still see strange slowdowns, it may be because you have short "
"segments in the program. If this is the case, try adding a small tolerance "
"for Naive CAM detection. A good rule of thumb is this:"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:877
#, no-wrap
msgid ""
"# min_length ~= v_req * t_c\n"
"# where:\n"
"# v_req = desired velocity in UU / sec\n"
"# t_c = servo period (seconds)\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:886
msgid ""
"If you want to travel along a path at 1 IPS = 60 IPM, and your servo period "
"is 0.001 sec, then any segments shorter than min_length will slow the path "
"down. If you set Naive CAM tolerance to around this min length, overly short "
"segments will be combined together to eliminate this bottleneck. Of course, "
"setting the tolerance too high means big path deviations, so you have to "
"play with it a bit to find a good value. I'd start at 1/2 of the min_length, "
"then work up as needed."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:887
msgid ""
"'ARC_BLEND_GAP_CYCLES = 4' How short the previous segment must be before the "
"trajectory planner 'consumes' it."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:896
msgid ""
"Often, a circular arc blend will leave short line segments in between the "
"blends. Since the geometry has to be circular, we can't blend over all of a "
"line if the next one is a little shorter. Since the trajectory planner has "
"to touch each segment at least once, it means that very tiny segments will "
"slow things down significantly. My fix to this way to \"consume\" the short "
"segment by making it a part of the blend arc. Since the line+blend is one "
"segment, we don't have to slow down to hit the very short segment. Likely, "
"you won't need to touch this setting."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:897
msgid ""
"'ARC_BLEND_RAMP_FREQ = 20' - This is a 'cutoff' frequency for using ramped "
"velocity."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:906
msgid ""
"'Ramped velocity' in this case just means constant acceleration over the "
"whole segment.  This is less optimal than a trapezoidal velocity profile, "
"since the acceleration is not maximized.  However, if the segment is short "
"enough, there isn't enough time to accelerate much before we hit the next "
"segment.  Recall the short line segments from the previous example.  Since "
"they're lines, there's no cornering acceleration, so we're free to "
"accelerate up to the requested speed.  However, if this line is between two "
"arcs, then it will have to quickly decelerate again to be within the maximum "
"speed of the next segment.  This means that we have a spike of acceleration, "
"then a spike of deceleration, causing a large jerk, for very little "
"performance gain.  This setting is a way to eliminate this jerk for short "
"segments."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:912
msgid ""
"Basically, if a segment will complete in less time than 1 / "
"ARC_BLEND_RAMP_FREQ, we don't bother with a trapezoidal velocity profile on "
"that segment, and use constant acceleration. (Setting ARC_BLEND_RAMP_FREQ = "
"1000 is equivalent to always using trapezoidal acceleration, if the servo "
"loop is 1 kHz)."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:915
msgid ""
"You can characterize the worst-case loss of performance by comparing the "
"velocity that a trapezoidal profile reaches vs. the ramp:"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:922
#, no-wrap
msgid ""
"# v_ripple = a_max / (4.0 * f)\n"
"# where:\n"
"# v_ripple = average velocity \"loss\" due to ramping\n"
"# a_max = max axis acceleration\n"
"# f = cutoff frequency from INI\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:933
msgid ""
"For the aforementioned machine, the ripple for a 20&thinsp;Hz cutoff "
"frequency is 100 / (4 * 20) = 1.25&thinsp;IPS. This seems high, but keep in "
"mind that it is only a worst-case estimate. In reality , the trapezoidal "
"motion profile is limited by other factors, such as normal acceleration or "
"requested velocity, and so the actual performance loss should be much "
"smaller. Increasing the cutoff frequency can squeeze out more performance, "
"but make the motion rougher due to acceleration discontinuities. A value in "
"the range 20&thinsp;Hz to 200&thinsp;Hz should be reasonable to start."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:936
msgid ""
"Finally, no amount of tweaking will speed up a tool path with lots of small, "
"tight corners, since you're limited by cornering acceleration."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:939
msgid ""
"'SPINDLES = 3' - The number of spindles to support. It is imperative that "
"this number matches the \"num_spindles\" parameter passed to the motion "
"module."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:948
msgid ""
"'COORDINATES = X Y Z' - The names of the axes being controlled.  Only X, Y, "
"Z, A, B, C, U, V, W are valid. Only axes named in 'COORDINATES' are accepted "
"in G-code.  It is permitted to write an axis name more than once (e.g., X Y "
"Y Z for a gantry machine).  For the common 'trivkins kinematics', joint "
"numbers are assigned in sequence according to the trivkins parameter "
"'coordinates='.  So, for trivkins 'coordinates=xz', joint0 corresponds to X "
"and joint1 corresponds to Z.  See the kinematics man page ('$ man kins') for "
"information on trivkins and other kinematics modules."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:951
msgid ""
"'LINEAR_UNITS = <units>' - (((LINEAR UNITS))) Specifies the 'machine units' "
"for linear axes.  Possible choices are mm or inch.  This does not affect the "
"linear units in NC code (the G20 and G21 words do this)."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:955
msgid ""
"'ANGULAR_UNITS = <units>' - (((ANGULAR UNITS))) Specifies the 'machine "
"units' for rotational axes.  Possible choices are 'deg', 'degree' (360 per "
"circle), 'rad', 'radian' (2*&pi; per circle), 'grad', or 'gon' (400 per "
"circle).  This does not affect the angular units of NC code. In RS274NGC, "
"A-, B- and C- words are always expressed in degrees."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:957
msgid ""
"'DEFAULT_LINEAR_VELOCITY = 0.0167' - The initial rate for jogs of linear "
"axes, in machine units per second. The value shown in 'Axis' equals machine "
"units per minute."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:959
msgid ""
"'DEFAULT_LINEAR_ACCELERATION = 2.0' - In machines with nontrivial "
"kinematics, the acceleration used for \"teleop\" (Cartesian space) jogs, in "
"'machine units' per second per second."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:962
msgid ""
"'MAX_LINEAR_VELOCITY = 5.0' - (((MAX VELOCITY))) The maximum velocity for "
"any axis or coordinated move, in 'machine units' per second.  The value "
"shown equals 300 units per minute."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:964
msgid ""
"'MAX_LINEAR_ACCELERATION = 20.0' - (((MAX ACCELERATION))) The maximum "
"acceleration for any axis or coordinated axis move, in 'machine units' per "
"second per second."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:973
msgid ""
"'POSITION_FILE = position.txt' - If set to a non-empty value, the joint "
"positions are stored between runs in this file.  This allows the machine to "
"start with the same coordinates it had on shutdown.  This assumes there was "
"no movement of the machine while powered off.  If unset, joint positions are "
"not stored and will begin at 0 each time LinuxCNC is started.  This can help "
"on smaller machines without home switches.  If using the Mesa resolver "
"interface this file can be used to emulate absolute encoders and eliminate "
"the need for homing (with no loss of accuracy).  See the hostmot2 manpage "
"for more details."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:980
msgid ""
"'NO_FORCE_HOMING = 1' - The default behavior is for LinuxCNC to force the "
"user to home the machine before any MDI command or a program is run.  "
"Normally, only jogging is allowed before homing.  For configurations using "
"identity kinematics, setting NO_FORCE_HOMING = 1 allows the user to make MDI "
"moves and run programs without homing the machine first. Interfaces using "
"identity kinematics without homing ability will need to have this option set "
"to 1."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:984
msgid ""
"LinuxCNC will not know your joint travel limits when using 'NO_FORCE_HOMING "
"= 1'."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:993
msgid ""
"'HOME = 0 0 0 0 0 0 0 0 0' - World home position needed for kinematics "
"modules that compute world coordinates using kinematicsForward() when "
"switching from joint to teleop mode.  Up to nine coordinate values (X Y Z A "
"B C U V W)  may be specified, unused trailing items may be omitted. This "
"value is only used for machines with nontrivial kinematics. On machines with "
"trivial kinematics (mill, lathe, gantry types) this value is ignored.  Note: "
"the sim hexapod config requires a non-zero value for the Z coordinate."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:998
#, no-wrap
msgid ""
"'TPMOD = alternate_trajectory_planning module' [tp_parms=value]\n"
"The TPMOD variable is optional.  If specified, use a specified (user-built) module instead of the default (tpmod).  Module parameters (tp_parms) may be included if supported by the named module.  The setting may be overridden from the command line using the -t option ($ linuxcnc -h)."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:999
msgid ""
"'NO_PROBE_JOG_ERROR = 0' - Allow to bypass probe tripped check when you jog "
"manually."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1000
msgid ""
"'NO_PROBE_HOME_ERROR = 0' - Allow to bypass probe tripped check when homing "
"is in progress."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:1003
#, no-wrap
msgid "[KINS] Section(((INI File,Sections,KINS Section)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1009
msgid ""
"'JOINTS = 3' - Specifies the number of joints (motors) in the system.  For "
"example, a trivkins XYZ machine with a single motor for each axis has 3 "
"joints.  A gantry machine with one motor on each of two of the axes, and two "
"motors on the third axis, has 4 joints.  (This config variable may be used "
"by a GUI to set the number of joints (num_joints) specified to the motion "
"module (motmod))."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1012
msgid ""
"'KINEMATICS = trivkins' - Specify a kinematics module for the motion "
"module.  Guis may use this variable to specify the loadrt line in HAL files "
"for the motmod module.  For more information on kinematics modules see the "
"manpage: '$ man kins'"
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:1014
#, no-wrap
msgid "[AXIS_<letter>] Section(((INI File,Sections,[AXIS_<letter>] Sections)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1017
msgid "The <letter> specifies one of: X Y Z A B C U V W"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1019
msgid ""
"'MAX_VELOCITY = 1.2' - Maximum velocity for this axis in <<sub:ini:sec:traj,"
"machine units>> per second."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1020
msgid ""
"'MAX_ACCELERATION = 20.0' - Maximum acceleration for this axis in machine "
"units per second squared."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1025
msgid ""
"'MIN_LIMIT = -1000' - (((MIN LIMIT))) The minimum limit (soft limit) for "
"axis motion, in machine units.  When this limit is exceeded, the controller "
"aborts axis motion.  The axis must be homed before MIN_LIMIT is in force.  "
"For a rotary axis (A,B,C typ)  with unlimited rotation having no MIN_LIMIT "
"for that axis in the [AXIS_<letter>] section a value of -1e99 is used."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1030
msgid ""
"'MAX_LIMIT = 1000' - (((MAX LIMIT))) The maximum limit (soft limit) for axis "
"motion, in machine units.  When this limit is exceeded, the controller "
"aborts axis motion.  The axis must be homed before MAX_LIMIT is in force.  "
"For a rotary axis (A,B,C typ) with unlimited rotation having no MAX_LIMIT "
"for that axis in the [AXIS_<letter>] section a value of 1e99 is used."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1032
msgid ""
"'WRAPPED_ROTARY = 1' - When this is set to 1 for an ANGULAR axis the axis "
"will move 0-359.999 degrees.  Positive Numbers will move the axis in a "
"positive direction and negative numbers will move the axis in the negative "
"direction."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1039
msgid ""
"'LOCKING_INDEXER_JOINT = 4' - This value selects a joint to use for a "
"locking indexer for the specified axis <letter>.  In this example, the joint "
"is 4 which would correspond to the B axis for a XYZAB system with trivkins "
"(identity) kinematics.  When set, a G0 move for this axis will initiate an "
"unlock with the joint.4.unlock pin then wait for the joint.4.is-unlocked pin "
"then move the joint at the rapid rate for that joint.  After the move the "
"joint.4.unlock will be false and motion will wait for joint.4.is-unlocked to "
"go false.  Moving with other joints is not allowed when moving a locked "
"rotary joint.  To create the unlock pins, use the motmod parameter:"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:1043
#, no-wrap
msgid "unlock_joints_mask=jointmask\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1046
msgid "The jointmask bits are: (LSB)0:joint0, 1:joint1, 2:joint2, ..."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1049
msgid ""
"Example: `loadrt motmod ... unlock_joints_mask=0x38` creates unlock pins for "
"joints 3,4,5"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1050
msgid ""
"'OFFSET_AV_RATIO = 0.1' - If nonzero, this item enables the use of HAL input "
"pins for external axis offsets:"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:1056
#, no-wrap
msgid ""
"axis.<letter>.eoffset-enable\n"
"axis.<letter>.eoffset-count\n"
"axis.<letter>.eoffset-scale\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1060
msgid ""
"See the chapter: <<cha:external-offsets,'External Axis Offsets'>> for usage "
"information."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:1062
#, no-wrap
msgid "[JOINT_<num>] Sections(((INI File,Sections,[JOINT_<num>] Sections)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1066
msgid ""
"The <num> specifies the joint number 0 ... (num_joints-1)  The value of "
"'num_joints' is set by [KINS]JOINTS="
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1071
msgid ""
"The [JOINT_0], [JOINT_1], etc. sections contains general parameters for the "
"individual components in the joint control module. The joint section names "
"begin numbering at 0, and run through the number of joints specified in the "
"[KINS]JOINTS entry minus 1."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1074
msgid ""
"Typically (for systems using 'trivkins kinematics', there is a 1:1 "
"correspondence between a joint and an axis coordinate letter):"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1076 src/config/ini-config.adoc:1090
msgid "JOINT_0 = X"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1077
msgid "JOINT_1 = Y"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1078
msgid "JOINT_2 = Z"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1079
msgid "JOINT_3 = A"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1080
msgid "JOINT_4 = B"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1081
msgid "JOINT_5 = C"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1082
msgid "JOINT_6 = U"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1083
msgid "JOINT_7 = V"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1084
msgid "JOINT_8 = W"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1088
msgid ""
"Other kinematics modules with identity kinematics are available to support "
"configurations with partial sets of axes.  For example, using trivkins with "
"coordinates=XZ, the joint-axes relationships are:"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1091
msgid "JOINT_1 = Z"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1093
msgid ""
"For more information on kinematics modules see the manpage: '$ man kins'"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1095
msgid "'TYPE = LINEAR' - The type of joint, either LINEAR or ANGULAR."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1099
msgid ""
"'UNITS = INCH' - (((UNITS)))  If specified, this setting overrides the "
"related [TRAJ] UNITS setting.  (e.g., [TRAJ]LINEAR_UNITS if the TYPE of this "
"joint is LINEAR, [TRAJ]ANGULAR_UNITS if the TYPE of this joint is ANGULAR)"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1100
msgid ""
"'MAX_VELOCITY = 1.2' - Maximum velocity for this joint in <<sub:ini:sec:traj,"
"machine units>> per second."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1102
msgid ""
"'MAX_ACCELERATION = 20.0' - Maximum acceleration for this joint in machine "
"units per second squared."
msgstr ""

#.  add a link to machine units
#. type: Plain text
#: src/config/ini-config.adoc:1107
msgid ""
"'BACKLASH = 0.0000' - (((Backlash))) Backlash in machine units.  Backlash "
"compensation value can be used to make up for small deficiencies in the "
"hardware used to drive an joint.  If backlash is added to an joint and you "
"are using steppers the STEPGEN_MAXACCEL must be increased to 1.5 to 2 times "
"the MAX_ACCELERATION for the joint.  Excessive backlash compensation can "
"cause an joint to jerk as it changes direction.  If a COMP_FILE is specified "
"for a joint BACKLASH is not used."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1118
msgid ""
"'COMP_FILE = file.extension' - (((Compensation)))  The compensation file "
"consists of map of position information for the joint.  Compensation file "
"values are in machine units.  Each set of values are are on one line "
"separated by a space.  The first value is the nominal value (the commanded "
"position).  The second and third values depend on the setting of "
"COMP_FILE_TYPE.  Points in between nominal values are interpolated between "
"the two nominals.  Compensation files must start with the smallest nominal "
"and be in ascending order to the largest value of nominals.  File names are "
"case sensitive and can contain letters and/or numbers.  Currently the limit "
"inside LinuxCNC is for 256 triplets per joint."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1120
msgid "If COMP_FILE is specified for a joint, BACKLASH is not used."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1124
#, no-wrap
msgid ""
"'COMP_FILE_TYPE = 0 or 1' - Specifies the type of compensation file. The first value is the nominal (commanded) position for both types.\n"
"A 'COMP_FILE_TYPE' must be specified for each 'COMP_FILE'."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1128
msgid ""
"'Type 0:' The second value specifies the actual position as the joint is "
"moving in the positive direction (increasing value) and the third value "
"specifies the actual position as the joint is moving in the negative "
"direction (decreasing value)."
msgstr ""

#. type: Block title
#: src/config/ini-config.adoc:1129
#, no-wrap
msgid "Type 0 Example"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:1134
#, no-wrap
msgid ""
"-1.000 -1.005 -0.995\n"
"0.000 0.002 -0.003\n"
"1.000 1.003 0.998\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1139
msgid ""
"'Type 1:' The second value specifies positive offset from nominal while "
"traveling in the positive direction. The third value specifies the negative "
"offset from nominal while traveling in a negative direction."
msgstr ""

#. type: Block title
#: src/config/ini-config.adoc:1140
#, no-wrap
msgid "Type 1 Example"
msgstr ""

#. type: delimited block -
#: src/config/ini-config.adoc:1145
#, no-wrap
msgid ""
"-1.000 0.005 -0.005\n"
"0.000 0.002 -0.003\n"
"1.000 0.003 -0.004\n"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1151
msgid ""
"'MIN_LIMIT = -1000' - (((MIN LIMIT)))  The minimum limit for joint motion, "
"in machine units.  When this limit is reached, the controller aborts joint "
"motion.  For a rotary joint with unlimited rotation having no MIN_LIMIT for "
"that joint in the [JOINT_N] section a the value -1e99 is used."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1155
msgid ""
"'MAX_LIMIT = 1000' - (((MAX LIMIT)))  The maximum limit for joint motion, in "
"machine units.  When this limit is reached, the controller aborts joint "
"motion.  For a rotary joint with unlimited rotation having no MAX_LIMIT for "
"that joint in the [JOINT_N] section a the value 1e99 is used."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:1162
msgid ""
"For *identity* kinematics, the [JOINT_N]MIN_LIMIT,MAX_LIMIT settings must "
"equal or exceed the corresponding (one-to-one identity) [AXIS_L] limits.  "
"These settings are verified at startup when the trivkins kinematics modules "
"is specified."
msgstr ""

#. type: delimited block =
#: src/config/ini-config.adoc:1177
msgid ""
"The [JOINT_N]MIN_LIMIT, MAX_LIMIT settings are enforced while jogging in "
"joint mode prior to homing.  After homing, [AXIS_L]MIN_LIMIT,MAX_LIMIT "
"coordinate limits are used as constraints for axis (coordinate letter) "
"jogging and by the trajectory planning used for G-code moves (programs and "
"MDI commands).  The trajectory planner works in Cartesian space (XYZABCUVW) "
"and has no information about the motion of joints implemented by *any* "
"kinematics module.  It is possible for joint limit violations to occur for G-"
"code that obeys trajectory planning position limits when non identity "
"kinematics are used.  The motion module always detects joint position limit "
"violations and faults if they occur during the execution of G-code "
"commands.  See also related github issue #97."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1184
msgid ""
"'MIN_FERROR = 0.010' - (((MIN FERROR)))  This is the value in machine units "
"by which the joint is permitted to deviate from commanded position at very "
"low speeds.  If MIN_FERROR is smaller than FERROR, the two produce a ramp of "
"error trip points.  You could think of this as a graph where one dimension "
"is speed and the other is permitted following error.  As speed increases the "
"amount of following error also increases toward the FERROR value."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1195
msgid ""
"'FERROR = 1.0' - (((FERROR))) FERROR is the maximum allowable following "
"error, in machine units. If the difference between commanded and sensed "
"position exceeds this amount, the controller disables servo calculations, "
"sets all the outputs to 0.0, and disables the amplifiers. If MIN_FERROR is "
"present in the .ini file, velocity-proportional following errors are used. "
"Here, the maximum allowable following error is proportional to the speed, "
"with FERROR applying to the rapid rate set by [TRAJ]MAX_VELOCITY, and "
"proportionally smaller following errors for slower speeds. The maximum "
"allowable following error will always be greater than MIN_FERROR. This "
"prevents small following errors for stationary axes from inadvertently "
"aborting motion. Small following errors will always be present due to "
"vibration, etc."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1196
msgid ""
"'LOCKING_INDEXER = 1' - Indicates the joint is used as a locking indexer."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1201
msgid ""
"These parameters are Homing related, for a better explanation read the <<cha:"
"homing-configuration,Homing Configuration>> Chapter."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1204
msgid ""
"'HOME = 0.0' - The position that the joint will go to upon completion of the "
"homing sequence."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1210
msgid ""
"'HOME_OFFSET = 0.0' - The joint position of the home switch or index pulse, "
"in <<sub:ini:sec:traj,machine units>>.  When the home point is found during "
"the homing process, this is the position that is assigned to that point.  "
"When sharing home and limit switches and using a home sequence that will "
"leave the home/limit switch in the toggled state the home offset can be used "
"define the home switch position to be other than 0 if your HOME position is "
"desired to be 0."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1214
msgid ""
"'HOME_SEARCH_VEL = 0.0' - (((HOME SEARCH VEL))) Initial homing velocity in "
"machine units per second.  Sign denotes direction of travel.  A value of "
"zero means assume that the current location is the home position for the "
"machine.  If your machine has no home switches you will want to leave this "
"value at zero."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1217
msgid ""
"'HOME_LATCH_VEL = 0.0' - Homing velocity in machine units per second to the "
"home switch latch position.  Sign denotes direction of travel."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1221
msgid ""
"'HOME_FINAL_VEL = 0.0' - Velocity in machine units per second from home "
"latch position to home position.  If left at 0 or not included in the joint "
"rapid velocity is used.  Must be a positive number."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1226
msgid ""
"'HOME_USE_INDEX = NO' - If the encoder used for this joint has an index "
"pulse, and the motion card has provision for this signal you may set it to "
"yes.  When it is yes, it will affect the kind of home pattern used.  "
"Currently, you can't home to index with steppers unless you're using StepGen "
"in velocity mode and PID."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1230
msgid ""
"'HOME_INDEX_NO_ENCODER_RESET = NO' - Use YES if the encoder used for this "
"joint does not reset its counter when an index pulse is detected after "
"assertion of the joint index_enable HAL pin.  Applicable only for "
"HOME_USE_INDEX = YES."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1235
msgid ""
"'HOME_IGNORE_LIMITS = NO' - When you use the limit switch as a home switch "
"and the limit switch this should be set to YES.  When set to YES the limit "
"switch for this joint is ignored when homing.  You must configure your "
"homing so that at the end of your home move the home/limit switch is not in "
"the toggled state you will get a limit switch error after the home move."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1239
msgid ""
"'HOME_IS_SHARED = <n>' - If the home input is shared by more than one joint "
"set <n> to 1 to prevent homing from starting if the one of the shared "
"switches is already closed.  Set <n> to 0 to permit homing if a switch is "
"closed."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1243
msgid ""
"'HOME_ABSOLUTE_ENCODER = 0 | 1 | 2' - Used to indicate the joint uses an "
"absolute encoder.  At a request for homing, the current joint value is set "
"to the 'HOME_OFFSET' value.  If the 'HOME_ABSOLUTE_ENCODER' setting is 1, "
"the machine makes the usual final move to the 'HOME' value.  If the "
"'HOME_ABSOLUTE_ENCODER' setting is 2, no final move is made."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1251
msgid ""
"'HOME_SEQUENCE = <n>' - Used to define the \"Home All\" sequence.  <n> must "
"start at 0 or 1 or -1.  Additional sequences may be specified with numbers "
"increasing by 1 (in absolute value).  Skipping of sequence numbers is not "
"allowed.  If a HOME_SEQUENCE is omitted, the joint will not be homed by the "
"\"Home All\" function.  More than one joint can be homed at the same time by "
"specifying the same sequence number for more than one joint.  A negative "
"sequence number is used to defer the final move for all joints having that "
"(negative or positive) sequence number.  For additional info, see: <<sec:"
"homing-section,HOME SEQUENCE>>."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1254
msgid ""
"'VOLATILE_HOME = 0' - When enabled (set to 1) this joint will be unhomed if "
"the Machine Power is off or if E-Stop is on.  This is useful if your machine "
"has home switches and does not have position feedback such as a step and "
"direction driven machine."
msgstr ""

#. type: Title ====
#: src/config/ini-config.adoc:1255
#, no-wrap
msgid "Servos"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1258
msgid "These parameters are relevant to joints controlled by servos."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1264
msgid ""
"The following are custom INI file entries that you may find in a sample INI "
"file or a wizard generated file.  These are not used by the LinuxCNC "
"software.  They are only there to put all the settings in one place.  For "
"more information on custom INI file entries see the <<sub:ini:custom,Custom "
"Sections and Variables>> subsection."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1267
msgid ""
"The following items might be used by a PID component and the assumption is "
"that the output is volts."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1269
msgid ""
"'DEADBAND = 0.000015' - How close is close enough to consider the motor in "
"position, in <<sub:ini:sec:traj,machine units>>."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1276
msgid ""
"This is often set to a distance equivalent to 1, 1.5, 2, or 3 encoder "
"counts, but there are no strict rules.  Looser (larger) settings allow less "
"servo 'hunting' at the expense of lower accuracy.  Tighter (smaller) "
"settings attempt higher accuracy at the expense of more servo 'hunting'.  Is "
"it really more accurate if it's also more uncertain? As a general rule, it's "
"good to avoid, or at least limit, servo 'hunting' if you can."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1282
msgid ""
"Be careful about going below 1 encoder count, since you may create a "
"condition where there is no place that your servo is happy. This can go "
"beyond 'hunting' (slow) to 'nervous' (rapid), and even to 'squealing' which "
"is easy to confuse with oscillation caused by improper tuning. Better to be "
"a count or two loose here at first, until you've been through 'gross tuning' "
"at least."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1284
msgid ""
"Example of calculating machine units per encoder pulse to use in deciding "
"DEADBAND value:"
msgstr ""

#. latexmath:[ \frac{X\, inches}{1\, encoder\, count} =
#. \frac{1\, revolution}{1000\, encoder\, lines} \times
#. \frac{1\, encoder\, line}{4\, quadrature\, counts} \times
#. \frac{0.200\, inches}{1\, revolution} =
#. \frac{0.200\, inches}{4000\, encoder\, counts} =
#. \frac{0.000050\, inches}{1\, encoder\, count} ]
#. type: Target for macro image
#: src/config/ini-config.adoc:1294
#, no-wrap
msgid "images/encoder-counts-math.png"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1303
msgid ""
"'BIAS = 0.000' - This is used by hm2-servo and some others.  Bias is a "
"constant amount that is added to the output.  In most cases it should be "
"left at zero.  However, it can sometimes be useful to compensate for offsets "
"in servo amplifiers, or to balance the weight of an object that moves "
"vertically.  Bias is turned off when the PID loop is disabled, just like all "
"other components of the output."
msgstr ""

#. latexmath:[$\frac{volt}{mu}$].
#. type: Plain text
#: src/config/ini-config.adoc:1307
msgid ""
"'P = 50' - The proportional gain for the joint servo.  This value multiplies "
"the error between commanded and actual position in machine units, resulting "
"in a contribution to the computed voltage for the motor amplifier.  The "
"units on the P gain are volts per machine unit, e.g., image:images/p-term."
"png[height=25]"
msgstr ""

#. latexmath:[$\frac{volt}{mu\, s}$].
#. type: Plain text
#: src/config/ini-config.adoc:1312
msgid ""
"'I = 0' - The integral gain for the joint servo.  The value multiplies the "
"cumulative error between commanded and actual position in machine units, "
"resulting in a contribution to the computed voltage for the motor "
"amplifier.  The units on the I gain are volts per machine unit second, e.g., "
"image:images/i-term.png[height=25]"
msgstr ""

#.  latexmath:[$\frac{volt}{mu/s}$].
#. type: Plain text
#: src/config/ini-config.adoc:1317
msgid ""
"'D = 0' - The derivative gain for the joint servo.  The value multiplies the "
"difference between the current and previous errors, resulting in a "
"contribution to the computed voltage for the motor amplifier.  The units on "
"the D gain are volts per machine unit per second, e.g., image:images/i-term."
"png[height=25]"
msgstr ""

#.  latexmath:[$\frac{volt}{mu}$].
#. type: Plain text
#: src/config/ini-config.adoc:1321
msgid ""
"'FF0 = 0' - The 0th order feed forward gain.  This number is multiplied by "
"the commanded position, resulting in a contribution to the computed voltage "
"for the motor amplifier.  The units on the FF0 gain are volts per machine "
"unit, e.g., image:images/p-term.png[height=25]"
msgstr ""

#.  latexmath:[$\frac{volt}{mu\, s}$].
#. type: Plain text
#: src/config/ini-config.adoc:1326
msgid ""
"'FF1 = 0' - The 1st order feed forward gain.  This number is multiplied by "
"the change in commanded position per second, resulting in a contribution to "
"the computed voltage for the motor amplifier.  The units on the FF1 gain are "
"volts per machine unit per second, e.g., image:images/i-term.png[height=25]"
msgstr ""

#.  latexmath:[$\frac{volt}{mu\, s^{2}}$].
#. type: Plain text
#: src/config/ini-config.adoc:1331
msgid ""
"'FF2 = 0' - The 2nd order feed forward gain.  This number is multiplied by "
"the change in commanded position per second per second, resulting in a "
"contribution to the computed voltage for the motor amplifier.  The units on "
"the FF2 gain are volts per machine unit per second per second, e.g., image:"
"images/ff2.png[height=25]"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1333
msgid "'OUTPUT_SCALE = 1.000'"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1334
msgid "'OUTPUT_OFFSET = 0.000'"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1337
msgid ""
"These two values are the scale and offset factors for the joint output to "
"the motor amplifiers."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1345
msgid ""
"The second value (offset) is subtracted from the computed output (in volts), "
"and divided by the first value (scale factor), before being written to the D/"
"A converters.  The units on the scale value are in true volts per DAC output "
"volts.  The units on the offset value are in volts.  These can be used to "
"linearize a DAC.  Specifically, when writing outputs, the LinuxCNC first "
"converts the desired output in quasi-SI units to raw actuator values, e.g., "
"volts for an amplifier DAC.  This scaling looks like: image:images/output-"
"offset.png[]"
msgstr ""

#.  latexmath:[raw=\frac{output-offset}{scale}]
#. type: Plain text
#: src/config/ini-config.adoc:1352
msgid ""
"The value for scale can be obtained analytically by doing a unit analysis, i."
"e., units are [output SI units]/[actuator units]. For example, on a machine "
"with a velocity mode amplifier such that 1&thinsp;V results in 250&thinsp;mm/"
"s velocity."
msgstr ""

#. type: Target for macro image
#: src/config/ini-config.adoc:1353
#, no-wrap
msgid "images/scale-math.png"
msgstr ""

#.  latexmath:[$ amplifier [volts] = (output [\frac{mm}{sec}]
#.  - offset [\frac{mm}{sec}]) / 250 \frac{mm}{sec\, volt} ] $]
#. type: Plain text
#: src/config/ini-config.adoc:1363
msgid ""
"Note that the units of the offset are in machine units, e.g., mm/sec, and "
"they are pre-subtracted from the sensor readings. The value for this offset "
"is obtained by finding the value of your output which yields 0.0 for the "
"actuator output. If the DAC is linearized, this offset is normally 0.0."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1367
msgid ""
"The scale and offset can be used to linearize the DAC as well, resulting in "
"values that reflect the combined effects of amplifier gain, DAC non-"
"linearity, DAC units, etc."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1369
msgid "To do this, follow this procedure."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1372
msgid ""
"Build a calibration table for the output, driving the DAC with a desired "
"voltage and measuring the result."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1373
msgid ""
"Do a least-squares linear fit to get coefficients a, b such that image:"
"images/calibration-1.png[]"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1374 src/config/pncconf.adoc:511
msgid ""
"Note that we want raw output such that our measured result is identical to "
"the commanded output. This means"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1375
msgid "image:images/calibration-2.png[]"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1376
msgid "image:images/calibration-3.png[]"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1377 src/config/pncconf.adoc:515
msgid ""
"As a result, the a and b coefficients from the linear fit can be used as the "
"scale and offset for the controller directly."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1379
msgid "See the following table for an example of voltage measurements."
msgstr ""

#. type: Block title
#: src/config/ini-config.adoc:1384 src/config/pncconf.adoc:496
#, no-wrap
msgid "Output Voltage Measurements"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1387 src/config/pncconf.adoc:499
#, no-wrap
msgid "Raw"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1388 src/config/pncconf.adoc:500
#, no-wrap
msgid "Measured"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1388 src/config/pncconf.adoc:500
#, no-wrap
msgid "-10"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1389 src/config/pncconf.adoc:501
#, no-wrap
msgid "-9.93"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1389 src/config/pncconf.adoc:501
#, no-wrap
msgid "-9"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1390 src/config/pncconf.adoc:502
#, no-wrap
msgid "-8.83"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1390 src/config/ini-homing.adoc:124
#: src/config/ini-homing.adoc:125 src/config/pncconf.adoc:502
#: src/config/stepconf.adoc:359 src/config/stepconf.adoc:360
#: src/drivers/hostmot2.adoc:293 src/drivers/hostmot2.adoc:294
#: src/drivers/hostmot2.adoc:295 src/drivers/hostmot2.adoc:304
#: src/drivers/hostmot2.adoc:305 src/drivers/hostmot2.adoc:307
#: src/drivers/hostmot2.adoc:308 src/drivers/hostmot2.adoc:315
#: src/drivers/hostmot2.adoc:316 src/drivers/hostmot2.adoc:318
#: src/drivers/hostmot2.adoc:319 src/drivers/hostmot2.adoc:321
#: src/drivers/hostmot2.adoc:322 src/drivers/hostmot2.adoc:324
#: src/drivers/hostmot2.adoc:325 src/drivers/hostmot2.adoc:332
#: src/drivers/hostmot2.adoc:333 src/drivers/hostmot2.adoc:335
#: src/drivers/hostmot2.adoc:336 src/drivers/hostmot2.adoc:338
#: src/drivers/hostmot2.adoc:346 src/drivers/hostmot2.adoc:347
#: src/drivers/hostmot2.adoc:349 src/drivers/hostmot2.adoc:350
#: src/drivers/hostmot2.adoc:352 src/drivers/hostmot2.adoc:360
#: src/drivers/hostmot2.adoc:361 src/drivers/hostmot2.adoc:362
#: src/drivers/hostmot2.adoc:370 src/drivers/hostmot2.adoc:371
#: src/drivers/hostmot2.adoc:372 src/drivers/hostmot2.adoc:373
#: src/drivers/hostmot2.adoc:374 src/drivers/hostmot2.adoc:382
#: src/drivers/hostmot2.adoc:383 src/drivers/hostmot2.adoc:384
#: src/drivers/hostmot2.adoc:385 src/drivers/motenc.adoc:95
#: src/gcode/g-code.adoc:774 src/gui/qtvcp-widgets.adoc:1053
#: src/hal/rtcomps.adoc:817 src/hal/rtcomps.adoc:818 src/hal/rtcomps.adoc:819
#: src/hal/rtcomps.adoc:820 src/hal/rtcomps.adoc:821 src/hal/rtcomps.adoc:822
#: src/hal/rtcomps.adoc:823 src/hal/rtcomps.adoc:824 src/hal/rtcomps.adoc:825
#: src/hal/rtcomps.adoc:826 src/hal/rtcomps.adoc:827 src/hal/rtcomps.adoc:828
#: src/hal/rtcomps.adoc:829 src/hal/rtcomps.adoc:830 src/hal/rtcomps.adoc:831
#: src/hal/rtcomps.adoc:832 src/hal/rtcomps.adoc:833 src/hal/rtcomps.adoc:834
#: src/hal/rtcomps.adoc:835 src/hal/rtcomps.adoc:836 src/hal/rtcomps.adoc:837
#: src/hal/rtcomps.adoc:838 src/hal/rtcomps.adoc:839 src/hal/rtcomps.adoc:840
#: src/hal/rtcomps.adoc:841 src/hal/rtcomps.adoc:842 src/hal/rtcomps.adoc:843
#: src/hal/rtcomps.adoc:844 src/hal/rtcomps.adoc:845 src/hal/rtcomps.adoc:846
#: src/hal/rtcomps.adoc:847 src/hal/rtcomps.adoc:859 src/hal/rtcomps.adoc:860
#: src/hal/rtcomps.adoc:861 src/hal/rtcomps.adoc:862
#: src/integrator/stepper-timing.adoc:48 src/plasma/qtplasmac.adoc:91
#: src/plasma/qtplasmac.adoc:1033 src/plasma/qtplasmac.adoc:1034
#: src/plasma/qtplasmac.adoc:1524 src/plasma/qtplasmac.adoc:1790
#: src/plasma/qtplasmac.adoc:3745
#, no-wrap
msgid "0"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1391 src/config/pncconf.adoc:504
#, no-wrap
msgid "-0.03"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1391 src/config/pncconf.adoc:503
#: src/config/stepconf.adoc:361 src/config/stepper-quickstart.adoc:61
#: src/drivers/gm.adoc:67 src/drivers/gm.adoc:127 src/drivers/motenc.adoc:95
#: src/drivers/motenc.adoc:96 src/gcode/g-code.adoc:775
#: src/gcode/g-code.adoc:1569 src/gui/qtvcp-widgets.adoc:1054
#: src/hal/parallel-port.adoc:128 src/hal/rtcomps.adoc:818
#: src/hal/rtcomps.adoc:819 src/hal/rtcomps.adoc:820 src/hal/rtcomps.adoc:821
#: src/hal/rtcomps.adoc:822 src/hal/rtcomps.adoc:823 src/hal/rtcomps.adoc:824
#: src/hal/rtcomps.adoc:825 src/hal/rtcomps.adoc:826 src/hal/rtcomps.adoc:827
#: src/hal/rtcomps.adoc:828 src/hal/rtcomps.adoc:829 src/hal/rtcomps.adoc:830
#: src/hal/rtcomps.adoc:831 src/hal/rtcomps.adoc:832 src/hal/rtcomps.adoc:833
#: src/hal/rtcomps.adoc:834 src/hal/rtcomps.adoc:835 src/hal/rtcomps.adoc:836
#: src/hal/rtcomps.adoc:837 src/hal/rtcomps.adoc:838 src/hal/rtcomps.adoc:839
#: src/hal/rtcomps.adoc:840 src/hal/rtcomps.adoc:841 src/hal/rtcomps.adoc:842
#: src/hal/rtcomps.adoc:843 src/hal/rtcomps.adoc:844 src/hal/rtcomps.adoc:845
#: src/hal/rtcomps.adoc:846 src/hal/rtcomps.adoc:847 src/hal/rtcomps.adoc:848
#: src/hal/rtcomps.adoc:860 src/hal/rtcomps.adoc:861 src/hal/rtcomps.adoc:862
#: src/hal/rtcomps.adoc:863 src/plasma/qtplasmac.adoc:92
#: src/plasma/qtplasmac.adoc:1527 src/plasma/qtplasmac.adoc:1791
#: src/plasma/qtplasmac.adoc:3746
#, no-wrap
msgid "1"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1392
#, no-wrap
msgid "0.96"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1392 src/config/pncconf.adoc:504
#: src/config/stepper-quickstart.adoc:69 src/drivers/gm.adoc:66
#: src/drivers/gm.adoc:135 src/gcode/g-code.adoc:783 src/gcode/g-code.adoc:1577
#: src/gui/qtvcp-widgets.adoc:1070 src/hal/parallel-port.adoc:136
#: src/plasma/qtplasmac.adoc:3754
#, no-wrap
msgid "9"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1393 src/config/pncconf.adoc:505
#, no-wrap
msgid "9.87"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1393 src/config/pncconf.adoc:505
#: src/config/stepper-quickstart.adoc:61 src/drivers/gm.adoc:72
#: src/drivers/gm.adoc:136 src/gcode/overview.adoc:449
#: src/gui/qtvcp-widgets.adoc:1071 src/hal/parallel-port.adoc:137
#: src/ladder/classic-ladder.adoc:106 src/ladder/classic-ladder.adoc:107
#: src/ladder/classic-ladder.adoc:108 src/ladder/classic-ladder.adoc:109
#: src/ladder/classic-ladder.adoc:113 src/ladder/classic-ladder.adoc:115
#: src/ladder/classic-ladder.adoc:116 src/ladder/classic-ladder.adoc:117
#: src/ladder/classic-ladder.adoc:118 src/plasma/qtplasmac.adoc:3755
#: src/remap/remap.adoc:2158
#, no-wrap
msgid "10"
msgstr ""

#. type: Table
#: src/config/ini-config.adoc:1394
#, no-wrap
msgid "10.87"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1401
msgid ""
"'MAX_OUTPUT = 10' - The maximum value for the output of the PID compensation "
"that is written to the motor amplifier, in volts.  The computed output value "
"is clamped to this limit.  The limit is applied before scaling to raw output "
"units.  The value is applied symmetrically to both the plus and the minus "
"side."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1402
msgid "'INPUT_SCALE = 20000' - in Sample configs"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1403
msgid "'ENCODER_SCALE = 20000' - in PnCconf built configs"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1409
msgid ""
"Specifies the number of pulses that corresponds to a move of one machine "
"unit as set in the [TRAJ] section.  For a linear joint one machine unit will "
"be equal to the setting of LINEAR_UNITS.  For an angular joint one unit is "
"equal to the setting in ANGULAR_UNITS.  A second number, if specified, is "
"ignored.  For example, on a 2000 counts per rev encoder, and 10 revs/inch "
"gearing, and desired units of inch, we have:"
msgstr ""

#. type: Target for macro image
#: src/config/ini-config.adoc:1410 src/config/ini-config.adoc:1460
#, no-wrap
msgid "images/encoder-scale.png"
msgstr ""

#. latexmath:[ INPUT\_SCALE =
#. \frac{2000\, counts}{rev} \times \frac{10\, rev}{inch} =
#. \frac{20000\, counts}{inch} ]
#. type: Title ====
#: src/config/ini-config.adoc:1416
#, no-wrap
msgid "Stepper"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1419
msgid "These parameters are relevant to joints controlled by steppers."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1425
msgid ""
"The following are custom INI file entries that you may find in a sample INI "
"file or a wizard generated file. These are not used by the LinuxCNC "
"software. They are only there to put all the settings in one place. For more "
"information on custom INI file entries see the <<sub:ini:custom,Custom "
"Sections and Variables>> subsection."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1427
msgid "The following items might be used by a StepGen component."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1429
msgid "'SCALE = 4000' - in Sample configs"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1430
msgid "'STEP_SCALE = 4000' - in PnCconf built configs"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1437
msgid ""
"Specifies the number of pulses that corresponds to a move of one machine "
"unit as set in the [TRAJ] section.  For stepper systems, this is the number "
"of step pulses issued per machine unit.  For a linear joint one machine unit "
"will be equal to the setting of LINEAR_UNITS.  For an angular joint one unit "
"is equal to the setting in ANGULAR_UNITS.  For servo systems, this is the "
"number of feedback pulses per machine unit.  A second number, if specified, "
"is ignored."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1441
msgid ""
"For example, on a 1.8 degree stepper motor with half-stepping, and 10 revs/"
"inch gearing, and desired <<sub:ini:sec:traj,machine units>> of inch, we "
"have:"
msgstr ""

#. type: Target for macro image
#: src/config/ini-config.adoc:1442
#, no-wrap
msgid "images/stepper-scale.png"
msgstr ""

#. latexmath:[ scale =
#. \frac{2\, steps}{1.8\, degree} \times \frac{360\, degree}{rev} \times \frac{10\, rev}{inch} =
#. \frac{4000\, steps}{inch} ]
#. type: Plain text
#: src/config/ini-config.adoc:1450
msgid "Old INI and HAL files used `INPUT_SCALE` for this value."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1459
msgid ""
"'ENCODER_SCALE = 20000' (Optionally used in PnCconf built configs) - "
"Specifies the number of pulses that corresponds to a move of one machine "
"unit as set in the [TRAJ] section.  For a linear joint one machine unit will "
"be equal to the setting of LINEAR_UNITS.  For an angular joint one unit is "
"equal to the setting in ANGULAR_UNITS.  A second number, if specified, is "
"ignored.  For example, on a 2000 counts per rev encoder, and 10 revs/inch "
"gearing, and desired units of inch, we have:"
msgstr ""

#. latexmath:[ ENCODER\_SCALE =
#. \frac{2000\, counts}{rev} \times \frac{10\, rev}{inch} =
#. \frac{20000\, counts}{inch} ]
#. type: Plain text
#: src/config/ini-config.adoc:1472
msgid ""
"'STEPGEN_MAXACCEL = 21.0' - Acceleration limit for the step generator.  This "
"should be 1% to 10% larger than the joint MAX_ACCELERATION. This value "
"improves the tuning of StepGen's \"position loop\". If you have added "
"backlash compensation to an joint then this should be 1.5 to 2 times greater "
"than MAX_ACCELERATION."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1477
msgid ""
"'STEPGEN_MAXVEL = 1.4' - Older configuration files have a velocity limit for "
"the step generator as well. If specified, it should also be 1% to 10% larger "
"than the joint MAX_VELOCITY. Subsequent testing has shown that use of "
"STEPGEN_MAXVEL does not improve the tuning of StepGen's position loop."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:1479
#, no-wrap
msgid "[SPINDLE_<num>] Section(s)(((INI File,Sections,[SPINDLE_<num>] Section(s))))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1483
msgid ""
"The <num> specifies the spindle number 0 ... (num_spindles-1)  The value of "
"'num_spindles' is set by [TRAJ]SPINDLES="
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1486
msgid ""
"'MAX_VELOCITY = 20000' The maximum spindle speed (in rpm) for the specified "
"spindle. Optional."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1491
msgid ""
"'MIN_VELOCITY = 3000' The minimum spindle speed (in rpm) for the specified "
"spindle. Optional.  Many spindles have a minimum speed below which they "
"should not be run.  Any spindle speed command below this limit will be /"
"increased/ to this limit."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1497
msgid ""
"'MAX_REVERSE_VELOCITY = 20000' This setting will default to MAX_VELOCITY if "
"omitted. It can be used in cases where the spindle speed is limited in "
"reverse. Set to zero for spindles which must not be run in reverse.  In this "
"context \"max\" refers to the absolute magnitude of the spindle speed."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1500
msgid ""
"'MIN_REVERSE_VELOCITY = 3000' This setting is equivalent to MIN_VELOCITY but "
"for reverse spindle rotation. It will default to the MIN_VELOCITY if omitted."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1505
msgid ""
"'INCREMENT = 200' Sets the step size for spindle speed increment / decrement "
"commands.  This can have a different value for each spindle.  This setting "
"is effective with Axis and Touchy but note that some GUIs may handle things "
"differently."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1511
msgid ""
"'HOME_SEARCH_VELOCITY = 100' - FIXME: Spindle homing not yet working Sets "
"the homing speed (rpm) for the spindle. The spindle will rotate at this "
"velocity during the homing sequence until the spindle index is located, at "
"which point the spindle position will be set to zero.  Note that it makes no "
"sense for the spindle home position to be any value other than zero, and so "
"there is no provision to do so."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1515
msgid ""
"'HOME_SEQUENCE = 0' - FIXME: Spindle homing not yet working Controls where "
"in the general homing sequence the spindle homing rotations occur. Set the "
"HOME_SEARCH_VELOCITY to zero to avoid spindle rotation during the homing "
"sequence."
msgstr ""

#. type: Title ===
#: src/config/ini-config.adoc:1517
#, no-wrap
msgid "[EMCIO] Section(((INI File,Sections,[EMCIO] Section)))"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1520
msgid "'EMCIO = io' - Name of IO controller program."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1523
msgid ""
"'CYCLE_TIME = 0.100' - The period, in seconds, at which EMCIO will run.  "
"Making it 0.0 or a negative number will tell EMCIO not to sleep at all.  "
"There is usually no need to change this number."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1524
msgid ""
"'TOOL_TABLE = tool.tbl' - The file which contains tool information, "
"described in the User Manual."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1526
msgid ""
"'DB_PROGRAM = db_program' - Path to an executable program that manages tool "
"data.  (When a DB_PROGRAM is specified, a TOOL_TABLE entry is ignored)"
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1532
msgid ""
"'TOOL_CHANGE_POSITION = 0 0 2' - Specifies the XYZ location to move to when "
"performing a tool change if three digits are used.  Specifies the XYZABC "
"location when 6 digits are used.  Specifies the XYZABCUVW location when 9 "
"digits are used.  Tool Changes can be combined.  For example if you combine "
"the quill up with change position you can move the Z first then the X and Y."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1535
msgid ""
"'TOOL_CHANGE_WITH_SPINDLE_ON = 1' - The spindle will be left on during the "
"tool change when the value is 1.  Useful for lathes or machines where the "
"material is in the spindle, not the tool."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1538
msgid ""
"'TOOL_CHANGE_QUILL_UP = 1' - The Z axis will be moved to machine zero prior "
"to the tool change when the value is 1. This is the same as issuing a G0 G53 "
"Z0."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1541
msgid ""
"'TOOL_CHANGE_AT_G30 = 1' - The machine is moved to reference point defined "
"by parameters 5181-5186 for G30 if the value is 1.  For more information see "
"<<sec:overview-parameters,G-code Parameters>> and <<gcode:g30-g30.1,G-code "
"G30-G30.1>>."
msgstr ""

#. type: Plain text
#: src/config/ini-config.adoc:1544
msgid ""
"'RANDOM_TOOLCHANGER = 1' - This is for machines that cannot place the tool "
"back into the pocket it came from.  For example, machines that exchange the "
"tool in the active pocket with the tool in the spindle."
msgstr ""

#. type: Title =
#: src/config/ini-homing.adoc:5
#, no-wrap
msgid "Homing Configuration"
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:13 src/config/stepper.adoc:169
#: src/gcode/overview.adoc:15 src/gcode/tool-compensation.adoc:361
#: src/gui/gscreen.adoc:67 src/gui/gstat.adoc:15 src/gui/ngcgui.adoc:16
#: src/gui/qtvcp.adoc:403 src/gui/qtvcp.adoc:656 src/gui/qtvcp.adoc:1025
#: src/gui/qtvcp-custom-widgets.adoc:7 src/gui/qtvcp-development.adoc:7
#: src/gui/tooledit.adoc:13 src/remap/remap.adoc:703
#, no-wrap
msgid "Overview"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:25
msgid ""
"Homing sets the zero origin of the G53 machine coordinates.  Soft limits are "
"defined relative to the machine origin.  The soft limits automatically "
"decelerate and stop the axes before they hit the limits switches A properly "
"configured and functioning machine will not move beyond soft(ware) limits "
"and will have the machine origin set as repeatable as the home switch/index "
"mechanism is.  Linuxcnc can be homed by eye (alignment marks), with "
"switches, with switches and an encoder index, or by using absolute "
"encoders.  Homing seems simple enough - just move each joint to a known "
"location, and set LinuxCNC's internal variables accordingly.  However, "
"different machines have different requirements, and homing is actually quite "
"complicated."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:29
msgid ""
"While it is possible to use LinuxCNC without homing switches/home procedures "
"or limit switches, It defeats the extra security of the soft limits."
msgstr ""

#. type: Title ==
#: src/config/ini-homing.adoc:30
#, no-wrap
msgid "Prerequisite"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:33
msgid "Homing relies on some fundamental machine assumptions."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:36
msgid ""
"The negative and positive directions are based on <<sec:machine-"
"configurations,Tool Movement>> which can be different then the actual "
"machine movement. ie on a mill typically the table moves rather then the "
"tool."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:37
msgid ""
"Everything is referenced from the G53 machine zero origin, the origin can be "
"anywhere (even outside where you can move)"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:38
msgid ""
"The G53 machine zero origin is typically inside the soft limits area but not "
"necessarily."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:39
msgid ""
"The homing switch offset sets where the origin is, but even it is referenced "
"from the origin."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:40
msgid ""
"When using encoder index homing, the home switch offset is calculated from "
"the encoder reference position, after the home switch has been tripped."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:42
msgid ""
"The negative soft(ware) limits are the most you can move in the negative "
"direction after homing.  (but they might not be negative in the absolute "
"sense)"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:44
msgid ""
"The positive soft(ware) limits are the most you can move in the positive "
"direction after homing.  (but they might not be positive in the absolute "
"sense, though it is usual to set it as a positive number)"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:45
msgid "Soft(ware) limits are inside the limit switch area."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:46
msgid "(Final) Homed Position is inside the soft limit area"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:48
msgid ""
"(If using switch based homing) the homing switch(es) either utilize the "
"limit switches (shared home / limit switch), or when using a separate home "
"switch, are inside the limit switch area."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:54
msgid ""
"If using a separate homing switch, it's possible to start homing on the "
"wrong side of the home switch, which combined with HOME_IGNORE_LIMITS option "
"will lead to a hard crash.  You can avoid this by making the home switch "
"toggle it's state when the trip dog is on a particular side until it returns "
"passed the trip point again.  Said another way, the home switch state must "
"represent the position of the dog relative to the switch (ie _before_ or "
"_after_ the switch), and must stay that way even if the dog coasts past the "
"switch in the same direction."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:58
msgid ""
"While it is possible to use LinuxCNC with the G53 machine origin outside the "
"soft machine limits, if you use G28 or G30 without setting the parameters it "
"goes to the origin by default. This would trip the limit switches before "
"getting to position."
msgstr ""

#. type: Title ==
#: src/config/ini-homing.adoc:59
#, no-wrap
msgid "Separate Home Switch Example Layout"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:62
msgid ""
"This example shows minimum and maximum limit switches with a separate home "
"switch."
msgstr ""

#. type: Block title
#: src/config/ini-homing.adoc:63
#, no-wrap
msgid "Demonstrative Separate Switch Layout"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/ini-homing.adoc:64
#, no-wrap
msgid "Example Homing Switch layout"
msgstr ""

#. type: Target for macro image
#: src/config/ini-homing.adoc:64
#, no-wrap
msgid "images/HomeAxisTravel_V2.png"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:67
msgid "A is the negative soft limit"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:68
msgid "B is the G53 machine coordinate Origin"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:69
msgid "C is the home switch trip point"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:70
msgid "D is the positive soft limit"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:71
msgid "H is the final home position (HOME) = 0 units"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:72
msgid "The -L and +L are the limit switches trip points"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:73
msgid "A<->B is the negative soft limits (MIN_LIMITS) = -3 units"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:74
msgid "B<->C is the home_offset (HOME_OFFSET) = -2.3 units"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:75
msgid "B<->D is the positive soft limits (MAX_LIMITS) = 7 units"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:76
msgid "A<->D is the total travel = 10 units"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:77
msgid ""
"The distance between the limit switches and soft limits (-L<->A and D<-+L) "
"is magnified in this example"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:78 src/config/ini-homing.adoc:103
msgid ""
"Note that there is distance between the limit switches and actual physical "
"hard contact for coasting after the amplifier is disabled."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:83
msgid ""
"Homing sets the G53 coordinate system, while the machine origin (zero point) "
"can be anywhere, setting the zero point at the negative soft limit makes all "
"G53 coordinates positive, which is probably easiest to remember. Do this by "
"setting MIN_LIMIT = 0 and make sure MAX_LIMIT is positive."
msgstr ""

#. type: Title ==
#: src/config/ini-homing.adoc:84
#, no-wrap
msgid "Shared Limit/Home Switch Example Layout"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:87
msgid ""
"This example shows a maximum limit switch and a combined minimum limit/home "
"switch."
msgstr ""

#. type: Block title
#: src/config/ini-homing.adoc:88
#, no-wrap
msgid "Demonstrative Shared Switch Layout"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/ini-homing.adoc:89
#, no-wrap
msgid "Example shared Home Limit Switch layout"
msgstr ""

#. type: Target for macro image
#: src/config/ini-homing.adoc:89
#, no-wrap
msgid "images/HomeAxisTravel_V3.png"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:92
msgid "A is the negative soft limit."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:93
msgid "B is the G53 machine coordinate Origin."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:94
msgid "C is the home switch trip point shared with (-L) minimum limit trip."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:95
msgid "D is the positive soft limit."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:96
msgid "H is the final home position (HOME) = 3 units."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:97
msgid "The -L and +L are the limit switch trip points."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:98
msgid "A<->B is the negative soft limits (MIN_LIMITS) = 0 units."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:99
msgid "B<->C is the home_offset (HOME_OFFSET) = -0.7 units."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:100
msgid "B<->D is the positive soft limits (MAX_LIMITS) 10 units."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:101
msgid "A<->D is the total travel = 10 units."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:102
msgid ""
"The distance between the limits switches and soft limits (-L<->A and D<->+L) "
"is magnified in this example."
msgstr ""

#. type: Title ==
#: src/config/ini-homing.adoc:104
#, no-wrap
msgid "Homing Sequence"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:112
msgid ""
"There are four possible homing sequences defined by the sign of "
"HOME_SEARCH_VEL and HOME_LATCH_VEL, along with the associated configuration "
"parameters as shown in the following table. Two basic conditions exist, "
"HOME_SEARCH_VEL and HOME_LATCH_VEL are the same sign or they are opposite "
"signs. For a more detailed description of what each configuration parameter "
"does, see the following section."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/ini-homing.adoc:113 src/config/ini-homing.adoc:114
#, no-wrap
msgid "Homing Sequences"
msgstr ""

#. type: Target for macro image
#: src/config/ini-homing.adoc:114
#, no-wrap
msgid "images/emc2-motion-homing-diag.png"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:120
msgid ""
"The following determines exactly how the home sequence behaves.  They are "
"defined in an [JOINT_n] section of the INI file."
msgstr ""

#. type: Table
#: src/config/ini-homing.adoc:123
#, no-wrap
msgid "Homing Type"
msgstr ""

#. type: Table
#: src/config/ini-homing.adoc:123
#, no-wrap
msgid "HOME_SEARCH_VEL"
msgstr ""

#. type: Table
#: src/config/ini-homing.adoc:123
#, no-wrap
msgid "HOME_LATCH_VEL"
msgstr ""

#. type: Table
#: src/config/ini-homing.adoc:124
#, no-wrap
msgid "HOME_USE_INDEX"
msgstr ""

#. type: Table
#: src/config/ini-homing.adoc:124
#, no-wrap
msgid "Immediate"
msgstr ""

#. type: Table
#: src/config/ini-homing.adoc:125 src/config/ini-homing.adoc:127
#, no-wrap
msgid "NO"
msgstr ""

#. type: Table
#: src/config/ini-homing.adoc:125
#, no-wrap
msgid "Index-only"
msgstr ""

#. type: Table
#: src/config/ini-homing.adoc:125 src/config/ini-homing.adoc:126
#: src/config/ini-homing.adoc:127
#, no-wrap
msgid "nonzero"
msgstr ""

#. type: Table
#: src/config/ini-homing.adoc:126 src/config/ini-homing.adoc:128
#, no-wrap
msgid "YES"
msgstr ""

#. type: Table
#: src/config/ini-homing.adoc:126
#, no-wrap
msgid "Switch-only"
msgstr ""

#. type: Table
#: src/config/ini-homing.adoc:127
#, no-wrap
msgid "Switch and Index"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:132
msgid "Any other combinations may result in an error."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:133
#, no-wrap
msgid "HOME_SEARCH_VEL(((HOME SEARCH VEL)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:136 src/config/ini-homing.adoc:156
#: src/config/ini-homing.adoc:176
msgid "This variable has units of machine-units per second."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:139
msgid ""
"The default value is zero. A value of zero causes LinuxCNC to assume that "
"there is no home switch; the search stage of homing is skipped."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:152
msgid ""
"If HOME_SEARCH_VEL is non-zero, then LinuxCNC assumes that there is a home "
"switch. It begins by checking whether the home switch is already tripped. If "
"tripped it backs off the switch at HOME_SEARCH_VEL. The direction of the "
"back-off is opposite the sign of HOME_SEARCH_VEL. Then it searches for the "
"home switch by moving in the direction specified by the sign of "
"HOME_SEARCH_VEL, at a speed determined by its absolute value. When the home "
"switch is detected, the joint will stop as fast as possible, but there will "
"always be some overshoot. The amount of overshoot depends on the speed. If "
"it is too high, the joint might overshoot enough to hit a limit switch or "
"crash into the end of travel.  On the other hand, if HOME_SEARCH_VEL is too "
"low, homing can take a long time."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:153
#, no-wrap
msgid "HOME_LATCH_VEL(((HOME LATCH VEL)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:172
msgid ""
"Specifies the speed and direction that LinuxCNC uses when it makes its final "
"accurate determination of the home switch (if present) and index pulse "
"location (if present). It will usually be slower than the search velocity to "
"maximize accuracy. If HOME_SEARCH_VEL and HOME_LATCH_VEL have the same sign, "
"then the latch phase is done while moving in the same direction as the "
"search phase. (In that case, LinuxCNC first backs off the switch, before "
"moving towards it again at the latch velocity.) If HOME_SEARCH_VEL and "
"HOME_LATCH_VEL have opposite signs, the latch phase is done while moving in "
"the opposite direction from the search phase.  That means LinuxCNC will "
"latch the first pulse after it moves off the switch. If HOME_SEARCH_VEL is "
"zero (meaning there is no home switch), and this parameter is nonzero, "
"LinuxCNC goes ahead to the index pulse search. If HOME_SEARCH_VEL is non-"
"zero and this parameter is zero, it is an error and the homing operation "
"will fail. The default value is zero."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:173
#, no-wrap
msgid "HOME_FINAL_VEL"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:181
msgid ""
"It specifies the speed that LinuxCNC uses when it makes its move from "
"HOME_OFFSET to the HOME position. If the HOME_FINAL_VEL is missing from the "
"INI file, then the maximum joint speed is used to make this move.  The value "
"must be a positive number."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:182
#, no-wrap
msgid "HOME_IGNORE_LIMITS(((HOME IGNORE LIMITS)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:192
msgid ""
"Can hold the values YES / NO. The default value for this parameter is NO.  "
"This flag determines whether LinuxCNC will ignore the limit switch input for "
"this joint while homing. This setting will not ignore limit inputs for other "
"joints. If you do not have a separate home switch set this to YES and "
"connect the limit switch signal to the joint home switch input in HAL. "
"LinuxCNC will ignore the limit switch input for this joint while homing. To "
"use only one input for all homing and limits you will have to block the "
"limit signals of the joints not homing in HAL and home one joint at a time."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:193
#, no-wrap
msgid "HOME_USE_INDEX(((HOME USE INDEX)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:200
msgid ""
"Specifies whether or not there is an index pulse. If the flag is true "
"(HOME_USE_INDEX = YES), LinuxCNC will latch on the rising edge of the index "
"pulse. If false, LinuxCNC will latch on either the rising or falling edge of "
"the home switch (depending on the signs of HOME_SEARCH_VEL and "
"HOME_LATCH_VEL). The default value is NO."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:204
msgid ""
"HOME_USE_INDEX requires connections in your HAL file to joint.n.index-enable "
"from the encoder.n.index-enable."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:205
#, no-wrap
msgid "HOME_INDEX_NO_ENCODER_RESET(((HOME INDEX NO ENCODER RESET)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:211
msgid ""
"Default is NO. Use YES if the encoder used for this joint does not reset its "
"counter when an index pulse is detected after assertion of the joint "
"index_enable HAL pin.  Applicable only for HOME_USE_INDEX = YES."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:212
#, no-wrap
msgid "HOME_OFFSET(((HOME OFFSET)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:220
msgid ""
"This defines the location of the origin zero point of the G53 machine "
"coordinate system.  It is the distance (offset), in joint units, from the "
"machine origin to the home switch trip point or index pulse.  After "
"detecting the switch trip point/index pulse, LinuxCNC sets the joint "
"coordinate position to HOME_OFFSET, thus defining the origin, which the soft "
"limits references from.  The default value is zero."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:224
msgid ""
"The home switch location, as indicated by the HOME_OFFSET variable, can be "
"inside or outside the soft limits. They will be shared with or inside the "
"hard limit switches."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:225
#, no-wrap
msgid "HOME(((HOME)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:237
msgid ""
"The position that the joint will go to upon completion of the homing "
"sequence. After detecting the home switch or home switch then index pulse "
"(depending on configuration), and setting the coordinate of that point to "
"HOME_OFFSET, LinuxCNC makes a move to HOME as the final step of the homing "
"process. The default value is zero. Note that even if this parameter is the "
"same as HOME_OFFSET, the joint will slightly overshoot the latched position "
"as it stops. Therefore there will always be a small move at this time "
"(unless HOME_SEARCH_VEL is zero, and the entire search/latch stage was "
"skipped). This final move will be made at the joint's maximum velocity "
"unless HOME_FINAL_VEL has been set."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:243
msgid ""
"The distinction between 'HOME_OFFSET' and 'HOME' is that 'HOME_OFFSET' first "
"establishes the origin location and scale on the machine by applying the "
"'HOME_OFFSET' value to the location where home was found, and then 'HOME' "
"says where the joint should move to on that scale."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:244
#, no-wrap
msgid "HOME_IS_SHARED(((HOME IS SHARED)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:251
msgid ""
"If there is not a separate home switch input for this joint, but a number of "
"momentary switches wired to the same pin, set this value to 1 to prevent "
"homing from starting if one of the shared switches is already closed. Set "
"this value to 0 to permit homing even if the switch is already closed."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:252
#, no-wrap
msgid "HOME_ABSOLUTE_ENCODER(((HOME ABSOLUTE ENCODER)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:256
msgid ""
"Use for absolute encoders.  When a request is made to home the joint, the "
"current joint position is set to the '[JOINT_n]HOME_OFFSET' value."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:259
msgid ""
"The final move to the '[JOINT_n]HOME' position is optional according to the "
"'HOME_ABSOLUTE_ENCODER' setting:"
msgstr ""

#. type: delimited block -
#: src/config/ini-homing.adoc:264
#, no-wrap
msgid ""
"HOME_ABSOLUTE_ENCODER = 0 (Default) joint does not use an absolute encoder\n"
"HOME_ABSOLUTE_ENCODER = 1 Absolute encoder, final move to [JOINT_n]HOME\n"
"HOME_ABSOLUTE_ENCODER = 2 Absolute encoder, NO final move to [JOINT_n]HOME\n"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:268
msgid "A HOME_IS_SHARED setting is silently ignored."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:271
msgid "A request to rehome the joint is silently ignored."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:273
#, no-wrap
msgid "HOME_SEQUENCE(((HOME SEQUENCE)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:281
msgid ""
"Used to define a multi-joint homing sequence *HOME ALL* and enforce homing "
"order (e.g., Z may not be homed if X is not yet homed). A joint may be homed "
"after all joints with a lower (absolute value)  HOME_SEQUENCE have already "
"been homed and are at the HOME_OFFSET. If two joints have the same "
"HOME_SEQUENCE, they may be homed at the same time."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:286
msgid ""
"If HOME_SEQUENCE is not specified then the joint will not be homed by the "
"*HOME ALL* sequence (but may be homed by individual joint-specific homing "
"commands)."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:292
msgid ""
"The initial HOME_SEQUENCE number may be 0, 1 (or -1).  The absolute value of "
"sequence numbers must increment by one -- skipping sequence numbers is not "
"supported.  If a sequence number is omitted, *HOME ALL* homing will stop "
"upon completion of the last valid sequence number."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:299
#, no-wrap
msgid ""
"*Negative* HOME_SEQUENCE values indicate that joints in the sequence\n"
"should *synchronize the final move* to [JOINT_n]HOME by waiting until all \n"
"joints in the sequence are ready.  If any joint has a *negative*\n"
"HOME_SEQUENCE value, then all joints with the same absolute value\n"
"(positive or negative) of the HOME_SEQUENCE item value will synchronize\n"
"the final move.\n"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:306
msgid ""
"A *negative* HOME_SEQUENCE also applies to commands to home a single joint.  "
"If the HOME_SEQUENCE value is *negative*, all joints having the same "
"absolute value of that HOME_SEQUENCE will be *homed together with a "
"synchronized final move*.  If the HOME_SEQUENCE value is zero or positive, a "
"command to home the joint will home only the specified joint."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:311
msgid ""
"Joint mode jogging of joints having a negative HOME_SEQUENCE is disallowed.  "
"In common gantry applications, such jogging can lead to misalignment "
"(racking).  Note that conventional jogging in world coordinates is always "
"available once a machine is homed."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:313
msgid "Examples for a 3 joint system"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:315
msgid "Two sequences (0,1), no synchronization"
msgstr ""

#. type: delimited block -
#: src/config/ini-homing.adoc:321
#, no-wrap
msgid ""
"[JOINT_0]HOME_SEQUENCE = 0\n"
"[JOINT_1]HOME_SEQUENCE = 1\n"
"[JOINT_2]HOME_SEQUENCE = 1\n"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:324
msgid "Two sequences, joints 1 and 2 synchronized"
msgstr ""

#. type: delimited block -
#: src/config/ini-homing.adoc:330
#, no-wrap
msgid ""
"[JOINT_0]HOME_SEQUENCE =  0\n"
"[JOINT_1]HOME_SEQUENCE = -1\n"
"[JOINT_2]HOME_SEQUENCE = -1\n"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:333
msgid "With mixed positive and negative values, joints 1 and 2 synchronized"
msgstr ""

#. type: delimited block -
#: src/config/ini-homing.adoc:339
#, no-wrap
msgid ""
"[JOINT_0]HOME_SEQUENCE =  0\n"
"[JOINT_1]HOME_SEQUENCE = -1\n"
"[JOINT_2]HOME_SEQUENCE =  1\n"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:342
msgid "One sequence, no synchronization"
msgstr ""

#. type: delimited block -
#: src/config/ini-homing.adoc:348
#, no-wrap
msgid ""
"[JOINT_0]HOME_SEQUENCE =  0\n"
"[JOINT_1]HOME_SEQUENCE =  0\n"
"[JOINT_2]HOME_SEQUENCE =  0\n"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:351
msgid "One sequence, all joints synchronized"
msgstr ""

#. type: delimited block -
#: src/config/ini-homing.adoc:357
#, no-wrap
msgid ""
"[JOINT_0]HOME_SEQUENCE = -1\n"
"[JOINT_1]HOME_SEQUENCE = -1\n"
"[JOINT_2]HOME_SEQUENCE = -1\n"
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:359
#, no-wrap
msgid "VOLATILE_HOME(((VOLATILE HOME)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:366
msgid ""
"If this setting is true, this joint becomes unhomed whenever the machine "
"transitions into the OFF state. This is appropriate for any joint that does "
"not maintain position when the joint drive is off.  Some stepper drives, "
"especially microstep drives, may need this."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:367
#, no-wrap
msgid "LOCKING_INDEXER(((LOCKING INDEXER)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:371
msgid ""
"If this joint is a locking rotary indexer, it will unlock before homing, and "
"lock afterward."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:372
#, no-wrap
msgid "Immediate Homing(((Immediate Homing)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:378
msgid ""
"If a joint does not have home switches or does not have a logical home "
"position like a rotary joint and you want that joint to home at the current "
"position when the \"Home All\" button is pressed in the Axis gui, then the "
"following INI entries for that joint are needed."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:380
msgid "HOME_SEARCH_VEL = 0"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:381
msgid "HOME_LATCH_VEL = 0"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:382
msgid "HOME_USE_INDEX = NO"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:383
msgid "HOME equals to HOME_OFFSET"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:384
msgid "HOME_SEQUENCE = 0 (or other valid sequence number)"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:391
msgid ""
"The default values for unspecified HOME_SEARCH_VEL, HOME_LATCH_VEL, "
"HOME_USE_INDEX, HOME, and HOME_OFFSET are *zero*, so they may be omitted "
"when requesting immediate homing.  A valid HOME_SEQUENCE number should "
"usually be included since omitting a HOME_SEQUENCE eliminates the joint from "
"*HOME ALL* behavior as noted above."
msgstr ""

#. type: Title ===
#: src/config/ini-homing.adoc:392
#, no-wrap
msgid "Inhibiting Homing(((Inhibiting Homing)))"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:397
msgid ""
"A HAL pin (motion.homing-inhibit) is provided to disallow homing initiation "
"for both \"Home All\" and individual joint homing."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:404
msgid ""
"Some systems take advantage of the provisions for synchronizing final joint "
"homing moves as controlled by negative [JOINT_N]HOME_SEQUENCE= INI file "
"items.  By default, the synchronization provisions disallow *joint* jogging "
"prior to homing in order to prevent *joint* jogs that could misalign the "
"machine (gantry racking for example)."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:410
msgid ""
"System integrator can allow *joint* jogging prior to homing with HAL logic "
"that switches the [JOINT_N]HOME_SEQUENCE items.  This logic should also "
"assert the *motion.homing-inhibit* pin to ensure that homing is not "
"inadvertently initiated when *joint* jogging is enabled."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:415
msgid ""
"Example: Synced joints 0,1 using negative sequence (-1) for synchronized "
"homing with a switch (allow_jjog) that selects a positive sequence (1) for "
"individual *joint* jogging prior to homing (partial HAL code):"
msgstr ""

#. type: delimited block -
#: src/config/ini-homing.adoc:435
#, no-wrap
msgid ""
"loadrt mux2           names=home_sequence_mux\n"
"loadrt conv_float_s32 names=home_sequence_s32\n"
"setp home_sequence_mux.in0 -1\n"
"setp home_sequence_mux.in1  1\n"
"addf home_sequence_mux servo-thread\n"
"addf home_sequence_s32 servo-thread\n"
"...\n"
"net home_seq_float <= home_sequence_mux.out\n"
"net home_seq_float => home_sequence_s32.in\n"
"net home_seq_s32   <= home_sequence_s32.out\n"
"net home_seq_s32   => ini.0.home_sequence\n"
"net home_seq_s32   => ini.1.home_sequence\n"
"...\n"
"# allow_jjog: pin created by a virtual panel or hardware switch\n"
"net hsequence_select <= allow_jjog\n"
"net hsequence_select => home_sequence_mux.sel\n"
"net hsequence_select => motion.homing-inhibit\n"
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:442
msgid ""
"INI HAL pins (like ini.N.home_sequence) are not available until milltask "
"starts so execution of the above HAL commands should be deferred using a "
"postgui HAL file or a delayed [APPLICATION]APP= script."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:447
msgid ""
"Realtime synchronization of joint jogging for multiple joints requires "
"additional HAL connections for the Manual-Pulse-Generator (MPG) type jog "
"pins (joint.N.enable, joint.N.scale, joint.N.counts)."
msgstr ""

#. type: Plain text
#: src/config/ini-homing.adoc:451
msgid ""
"An example simulation config (gantry_jjog.ini) that demonstrates joint "
"jogging when using negative home sequences is located in the: configs/sim/"
"axis/gantry/ directory."
msgstr ""

#. type: Title =
#: src/config/integrator-concepts.adoc:5
#, no-wrap
msgid "Integrator Concepts"
msgstr ""

#. type: Title ==
#: src/config/integrator-concepts.adoc:7
#, no-wrap
msgid "File Locations"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:11
msgid ""
"LinuxCNC looks for the configuration and G-code files in a specific place. "
"The location depends on how you run LinuxCNC."
msgstr ""

#. type: Title ===
#: src/config/integrator-concepts.adoc:12
#, no-wrap
msgid "Installed"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:17
msgid ""
"If your running LinuxCNC from the LiveCD or you installed via a .deb and use "
"the configuration picker 'LinuxCNC' from the menu LinuxCNC looks in the "
"following directories:"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:19
msgid "The LinuxCNC directory is located at '/home/user-name/linuxcnc'."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:20
msgid ""
"The Configuration directories are located at '/home/user-name/linuxcnc/"
"configs'."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:21
msgid ""
"Configuration files are located at '/home/user-name/linuxcnc/configs/name-of-"
"config'."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:22
msgid "G-code files are located at /home/user-name/linuxcnc/nc_files'."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:25
msgid ""
"For example for a configuration called Mill and a user name Fred the "
"directory and file structure would look like this."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:27
msgid "'/home/fred/linuxcnc'"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:28
msgid "'/home/fred/linuxcnc/nc_files'"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:29
msgid "'/home/fred/linuxcnc/configs/mill'"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:30
msgid "'/home/fred/linuxcnc/configs/mill/mill.ini'"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:31
msgid "'/home/fred/linuxcnc/configs/mill/mill.hal'"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:32
msgid "'/home/fred/linuxcnc/configs/mill/mill.var'"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:33
msgid "'/home/fred/linuxcnc/configs/mill/tool.tbl'"
msgstr ""

#. type: Title ===
#: src/config/integrator-concepts.adoc:34
#, no-wrap
msgid "Command Line"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:39
msgid ""
"If you run LinuxCNC from the command line and specify the name and location "
"of the INI file the file locations can be in a different place. To view the "
"options for running LinuxCNC from the command line run 'linuxcnc -h'."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:44
msgid ""
"Optional locations for some files can be configured in the INI file. See the "
"`<<sub:ini:sec:display,[DISPLAY]>>` section and the `<<sub:ini:sec:rs274ngc,"
"[RS274NGC]>>` section."
msgstr ""

#. type: Title ===
#: src/config/integrator-concepts.adoc:45 src/ladder/classic-ladder.adoc:54
#, no-wrap
msgid "Files"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:48
msgid "Each configuration directory requires at least the following files:"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:50
msgid "An INI file .ini"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:52
msgid ""
"A HAL file .hal or HALTCL file .tcl specified in the <<sub:ini:sec:hal,HAL>> "
"section of the INI file."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:55
msgid "Other files may be required for some GUIs."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:57
msgid "Optionally you can also have:"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:59
msgid "A Variables file .var"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:62
msgid ""
"If you omit a .var file in a directory but include `<<sub:ini:sec:rs274ngc,"
"[RS274NGC]>>` PARAMETER_FILE=somefilename.var, the file will be created for "
"you when LinuxCNC starts."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:65
msgid ""
"If you omit a .var file and omit the item [RS274NGC] PARAMETER_FILE, a var "
"file named rs274ngc.var will be created when LinuxCNC starts. There may be "
"some confusing messages if [RS274NGC]PARAMETER_FILE is omitted."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:67
msgid ""
"A Tool Table file .tbl if `<<sub:ini:sec:emcmot,[EMCMOT]>>` TOOL_TABLE has "
"been specified in the INI file. Some configurations do not need a tool table."
msgstr ""

#. type: Title ==
#: src/config/integrator-concepts.adoc:68
#, no-wrap
msgid "Stepper Systems"
msgstr ""

#. type: Title ===
#: src/config/integrator-concepts.adoc:70
#, no-wrap
msgid "Base Period"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:83
msgid ""
"BASE_PERIOD is the 'heartbeat' of your LinuxCNC computer.footnote:[This "
"section refers to using *stepgen*, LinuxCNC's built-in step generator. Some "
"hardware devices have their own step generator and do not use LinuxCNC's "
"built-in one. In that case, refer to your hardware manual.] Every period, "
"the software step generator decides if it is time for another step pulse.  A "
"shorter period will allow you to generate more pulses per second, within "
"limits. But if you go too short, your computer will spend so much time "
"generating step pulses that everything else will slow to a crawl, or maybe "
"even lock up. Latency and stepper drive requirements affect the shortest "
"period you can use."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:88
msgid ""
"Worst case latencies might only happen a few times a minute, and the odds of "
"bad latency happening just as the motor is changing direction are low. So "
"you can get very rare errors that ruin a part every once in a while and are "
"impossible to troubleshoot."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:97
msgid ""
"The simplest way to avoid this problem is to choose a BASE_PERIOD that is "
"the sum of the longest timing requirement of your drive, and the worst case "
"latency of your computer. This is not always the best choice.  For example, "
"if you are running a drive with a 20&thinsp;µs direction signal hold time "
"requirement, and your latency test said you have a maximum latency of "
"11&thinsp;µs , then if you set the BASE_PERIOD to 20+11 = 31&thinsp;µs you "
"get a not-so-nice 32,258 steps per second in one mode and 16,129 steps per "
"second in another mode."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:110
msgid ""
"The problem is with the 20&thinsp;µs hold time requirement. That plus the "
"11&thinsp;µs latency is what forces us to use a slow 31&thinsp;µs period. "
"But the LinuxCNC software step generator has some parameters that let you "
"increase the various times from one period to several. For example, if "
"'steplen' footnote:[steplen refers to a parameter that adjusts the "
"performance of LinuxCNC's built-in step generator, 'stepgen', which is a HAL "
"component. This parameter adjusts the length of the step pulse itself. Keep "
"reading, all will be explained eventually.] is changed from 1 to 2, then "
"there will be two periods between the beginning and end of the step pulse. "
"Likewise, if 'dirhold' footnote:[dirhold refers to a parameter that adjusts "
"the length of the direction hold time.] is changed from 1 to 3, there will "
"be at least three periods between the step pulse and a change of the "
"direction pin."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:122
msgid ""
"If we can use 'dirhold' to meet the 20&thinsp;µs hold time requirement, then "
"the next longest time is the 4.5&thinsp;µs high time. Add the 11&thinsp;µs "
"latency to the 4.5&thinsp;µs high time, and you get a minimum period of "
"15.5&thinsp;µs . When you try 15.5&thinsp;µs , you find that the computer is "
"sluggish, so you settle on 16&thinsp;µs .  If we leave 'dirhold' at 1 (the "
"default), then the minimum time between step and direction is the 16&thinsp;"
"µs period minus the 11&thinsp;µs latency = 5&thinsp;µs , which is not "
"enough. We need another 15&thinsp;µs . Since the period is 16&thinsp;µs , we "
"need one more period. So we change 'dirhold' from 1 to 2. Now the minimum "
"time from the end of the step pulse to the changing direction pin is "
"5+16=21&thinsp;µs , and we don't have to worry about the drive stepping the "
"wrong direction because of latency."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:124
msgid ""
"For more information on stepgen see the <<sec:stepgen,stepgen section>>."
msgstr ""

#. type: Title ===
#: src/config/integrator-concepts.adoc:125
#: src/config/stepper-diagnostics.adoc:98
#, no-wrap
msgid "Step Timing"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:130
msgid ""
"Step Timing and Step Space on some drives are different. In this case the "
"Step point becomes important. If the drive steps on the falling edge then "
"the output pin should be inverted."
msgstr ""

#. type: Title ==
#: src/config/integrator-concepts.adoc:131
#, no-wrap
msgid "Servo Systems"
msgstr ""

#. type: Title ===
#: src/config/integrator-concepts.adoc:133
#, no-wrap
msgid "Basic Operation"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:144
msgid ""
"Servo systems are capable of greater speed and accuracy than equivalent "
"stepper systems, but are more costly and complex.  Unlike stepper systems, "
"servo systems require some type of position feedback device, and must be "
"adjusted or 'tuned', as they don't quite work right out of the box as a "
"stepper system might. These differences exist because servos are a 'closed "
"loop' system, unlike stepper motors which are generally run 'open loop'. "
"What does 'closed loop' mean? Let's look at a simplified diagram of how a "
"servomotor system is connected."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/integrator-concepts.adoc:146
#, no-wrap
msgid "simplified diagram of how a servomotor system is connected"
msgstr ""

#. type: Target for macro image
#: src/config/integrator-concepts.adoc:146
#, no-wrap
msgid "images/servo-feedback.png"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:154
msgid ""
"This diagram shows that the input signal (and the feedback signal) drive the "
"summing amplifier, the summing amplifier drives the power amplifier, the "
"power amplifier drives the motor, the motor drives the load (and the "
"feedback device), and the feedback device (and the input signal)  drive the "
"motor.  This looks very much like a circle (a closed loop) where A controls "
"B, B controls C, C controls D, and D controls A."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:167
msgid ""
"If you have not worked with servo systems before, this will no doubt seem a "
"very strange idea at first, especially as compared to more normal electronic "
"circuits, where the inputs proceed smoothly to the outputs, and never go "
"back.footnote:[If it helps, the closest equivalent to this in the digital "
"world are 'state machines', 'sequential machines' and so forth, where what "
"the outputs are doing 'now' depends on what the inputs (and the outputs)  "
"were doing 'before'. If it doesn't help, then nevermind.] If 'everything' "
"controls 'everything else', how can that ever work, who's in charge? The "
"answer is that LinuxCNC 'can' control this system, but it has to do it by "
"choosing one of several control methods.  The control method that LinuxCNC "
"uses, one of the simplest and best, is called PID."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:176
msgid ""
"PID stands for Proportional, Integral, and Derivative. The Proportional "
"value determines the reaction to the current error, the Integral value "
"determines the reaction based on the sum of recent errors, and the "
"Derivative value determines the reaction based on the rate at which the "
"error has been changing. They are three common mathematical techniques that "
"are applied to the task of getting a working process to follow a set point. "
"In the case of LinuxCNC the process we want to control is actual axis "
"position and the set point is the commanded axis position."
msgstr ""

#. type: Block title
#: src/config/integrator-concepts.adoc:177
#, no-wrap
msgid "PID Loop"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/integrator-concepts.adoc:178
#, no-wrap
msgid "PID Loop, PID stands for Proportional, Integral, and Derivative"
msgstr ""

#. type: Target for macro image
#: src/config/integrator-concepts.adoc:178
#, no-wrap
msgid "images/pid-feedback.png"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:186
msgid ""
"By 'tuning' the three constants in the PID controller algorithm, the "
"controller can provide control action designed for specific process "
"requirements. The response of the controller can be described in terms of "
"the responsiveness of the controller to an error, the degree to which the "
"controller overshoots the set point and the degree of system oscillation."
msgstr ""

#. type: Title ===
#: src/config/integrator-concepts.adoc:187
#, no-wrap
msgid "Proportional term"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:197
msgid ""
"The proportional term (sometimes called gain) makes a change to the output "
"that is proportional to the current error value. A high proportional gain "
"results in a large change in the output for a given change in the error. If "
"the proportional gain is too high, the system can become unstable. In "
"contrast, a small gain results in a small output response to a large input "
"error. If the proportional gain is too low, the control action may be too "
"small when responding to system disturbances."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:204
msgid ""
"In the absence of disturbances, pure proportional control will not settle at "
"its target value, but will retain a steady state error that is a function of "
"the proportional gain and the process gain. Despite the steady-state offset, "
"both tuning theory and industrial practice indicate that it is the "
"proportional term that should contribute the bulk of the output change."
msgstr ""

#. type: Title ===
#: src/config/integrator-concepts.adoc:205
#, no-wrap
msgid "Integral term"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:213
msgid ""
"The contribution from the integral term (sometimes called reset) is "
"proportional to both the magnitude of the error and the duration of the "
"error. Summing the instantaneous error over time (integrating the error) "
"gives the accumulated offset that should have been corrected previously. The "
"accumulated error is then multiplied by the integral gain and added to the "
"controller output."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:221
msgid ""
"The integral term (when added to the proportional term) accelerates the "
"movement of the process towards set point and eliminates the residual steady-"
"state error that occurs with a proportional only controller. However, since "
"the integral term is responding to accumulated errors from the past, it can "
"cause the present value to overshoot the set point value (cross over the set "
"point and then create a deviation in the other direction)."
msgstr ""

#. type: Title ===
#: src/config/integrator-concepts.adoc:222
#, no-wrap
msgid "Derivative term"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:228
msgid ""
"The rate of change of the process error is calculated by determining the "
"slope of the error over time (i.e., its first derivative with respect to "
"time) and multiplying this rate of change by the derivative gain."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:234
msgid ""
"The derivative term slows the rate of change of the controller output and "
"this effect is most noticeable close to the controller set point.  Hence, "
"derivative control is used to reduce the magnitude of the overshoot produced "
"by the integral component and improve the combined controller-process "
"stability."
msgstr ""

#. type: Title ===
#: src/config/integrator-concepts.adoc:235
#, no-wrap
msgid "Loop tuning"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:244
msgid ""
"If the PID controller parameters (the gains of the proportional, integral "
"and derivative terms) are chosen incorrectly, the controlled process input "
"can be unstable, i.e., its output diverges, with or without oscillation, and "
"is limited only by saturation or mechanical breakage. Tuning a control loop "
"is the adjustment of its control parameters (gain/proportional band, "
"integral gain/reset, derivative gain/rate) to the optimum values for the "
"desired control response."
msgstr ""

#. type: Title ===
#: src/config/integrator-concepts.adoc:245
#, no-wrap
msgid "Manual tuning"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:260
msgid ""
"A simple tuning method is to first set the I and D values to zero.  Increase "
"the P until the output of the loop oscillates, then the P should be set to "
"be approximately half of that value for a 'quarter amplitude decay' type "
"response. Then increase I until any offset is correct in sufficient time for "
"the process. However, too much I will cause instability. Finally, increase "
"D, if required, until the loop is acceptably quick to reach its reference "
"after a load disturbance.  However, too much D will cause excessive response "
"and overshoot. A fast PID loop tuning usually overshoots slightly to reach "
"the set point more quickly; however, some systems cannot accept overshoot, "
"in which case an 'over-damped' closed-loop system is required, which will "
"require a P setting significantly less than half that of the P setting "
"causing oscillation."
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:268
msgid ""
"The Real Time Application Interface (RTAI) is used to provide the best Real "
"Time (RT) performance. The RTAI patched kernel lets you write applications "
"with strict timing constraints. RTAI gives you the ability to have things "
"like software step generation which require precise timing."
msgstr ""

#. type: Title ===
#: src/config/integrator-concepts.adoc:269
#, no-wrap
msgid "ACPI"
msgstr ""

#. type: Plain text
#: src/config/integrator-concepts.adoc:280
msgid ""
"The Advanced Configuration and Power Interface (ACPI) has a lot of different "
"functions, most of which interfere with RT performance (for example: power "
"management, CPU power down, CPU frequency scaling, etc).  The LinuxCNC "
"kernel (and probably all RTAI-patched kernels) has ACPI disabled. ACPI also "
"takes care of powering down the system after a shutdown has been started, "
"and that's why you might need to push the power button to completely turn "
"off your computer. The RTAI group has been improving this in recent "
"releases, so your LinuxCNC system may shut off by itself after all."
msgstr ""

#. type: Title =
#: src/config/iov2.adoc:5
#, no-wrap
msgid "I/O Control V2"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:18
msgid ""
"I/O control handles I/O tasks like coolant, toolchange, e-stop and lube. The "
"signals are turned on and off in userspace with G-code or in the case of e-"
"stop in HAL."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:21
msgid ""
"I/O Control V2 adds more toolchanger support for communication with the "
"toolchanger."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:28
msgid ""
"LinuxCNC originated abort and toolchanger fault: iocontrol reliably abort a "
"change operation in progress (tool-change asserted). A toolchanger may at "
"any time signal a fault which will abort the next M6. For instance, a "
"toolchanger finding an empty pocket during a prepare operation should be "
"able to signal a fault to iocontrol, and iocontrol act appropriately when "
"the M6 change operation is executed."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:32
msgid ""
"Communicate abort/fault cause : let iocontrol know why toolchanger caused an "
"fault, and why iocontrol aborted. This is for UI purposes. It would be a "
"candidate for a #5xxx parameter, and selective display in the UI."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:36
msgid ""
"No race conditions between iocontrol and toolchanger: the protocol between "
"iocontrol and toolchanger must be unambiguous with respect to which "
"operation is signalled, and if a change operation is aborted or complete."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:40
msgid ""
"Consistent view of state: Both parties must have a consistent view of the "
"state at any point in time with respect to aborted versus completed, and "
"tool number and pocket."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:45
msgid ""
"Handshaked signaling an abort/fault: an abort signaled by LinuxCNC to the "
"toolchanger, and a fault indicated from the toolchanger is handshaked to "
"assure reliable signaling, and optionally force lock-step behaviour.  "
"Handshaking is optional and can be jumpered in HAL if not needed."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:48
msgid ""
"Backwards compatibility: A toolchanger ignoring the iocontrol emc-abort line "
"and sticking to old handling will \"continue to work\" (subject to race "
"condition)"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:51
msgid ""
"If you have strict timing requirements or simply need more I/O, consider "
"using the realtime I/O provided by link:../man/man9/motion.9.html[motion] "
"instead."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:55
msgid "INI file options:"
msgstr ""

#. type: Block title
#: src/config/iov2.adoc:56
#, no-wrap
msgid "[EMCIO] section"
msgstr ""

#. type: Labeled list
#: src/config/iov2.adoc:57
#, no-wrap
msgid "PROTOCOL_VERSION = 2 "
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:58
msgid "Defaults to 2. Setting to 1 will emulate old iocontrol behaviour."
msgstr ""

#. type: Labeled list
#: src/config/iov2.adoc:59
#, no-wrap
msgid "EMCIO = iov2 -support-start-change "
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:63
#, no-wrap
msgid ""
"You need to explicitly enable the start-change protocol by adding the \n"
"-support-start-change option; otherwise the start-change pin remains\n"
"low and   start-change-ack is ignored. The reason for this is better\n"
"backwards compatibility.\n"
msgstr ""

#. type: Block title
#: src/config/iov2.adoc:64
#, no-wrap
msgid "[TASK] section"
msgstr ""

#. type: Labeled list
#: src/config/iov2.adoc:65
#, no-wrap
msgid "IO_ERROR "
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:68
msgid ""
"Printf-style template for operator error display (negative toolchanger fault "
"codes) . No quoting needed. Example: `IO_ERROR = Toolchanger fault %d`. "
"Default: toolchanger error %d."
msgstr ""

#. type: Block title
#: src/config/iov2.adoc:69
#, no-wrap
msgid "[EMC] section +"
msgstr ""

#. type: Labeled list
#: src/config/iov2.adoc:70
#, no-wrap
msgid "DEBUG "
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:73
msgid ""
"To get a (quite detailed) trace, set either the RCS debugging flag "
"(0x00000200) to turn on RCS debugging messages all over LinuxCNC or use the "
"new iocontrol debugging bit (0x00001000) only for iov2 messages."
msgstr ""

#. type: SH
#: src/config/iov2.adoc:74 src/drivers/ax5214h.adoc:40 src/drivers/gm.adoc:98
#: src/drivers/gm.adoc:103 src/drivers/gm.adoc:114 src/drivers/gm.adoc:191
#: src/drivers/gm.adoc:295 src/drivers/gm.adoc:372 src/drivers/gm.adoc:411
#: src/drivers/gm.adoc:472 src/drivers/gm.adoc:477 src/drivers/gm.adoc:500
#: src/drivers/gm.adoc:505 src/drivers/gm.adoc:565 src/drivers/gm.adoc:570
#: src/drivers/gm.adoc:705 src/drivers/gm.adoc:748 src/drivers/gm.adoc:785
#: src/drivers/gm.adoc:839 src/drivers/gs2.adoc:64
#: src/drivers/hostmot2.adoc:113 src/drivers/hostmot2.adoc:420
#: src/drivers/hostmot2.adoc:486 src/drivers/hostmot2.adoc:582
#: src/drivers/hostmot2.adoc:677 src/drivers/mb2hal.adoc:195
#: src/drivers/mitsub-vfd.adoc:50 src/drivers/motenc.adoc:35
#: src/drivers/opto22.adoc:56 src/drivers/pico-ppmc.adoc:99
#: src/drivers/pmx485.adoc:33 src/drivers/servo-to-go.adoc:74
#: src/drivers/shuttle.adoc:65 src/drivers/vfs11.adoc:54
#: src/gui/gladevcp.adoc:731 src/gui/gladevcp.adoc:843
#: src/gui/gladevcp.adoc:900 src/gui/gladevcp.adoc:1140
#: src/gui/gladevcp.adoc:1179 src/gui/gladevcp.adoc:1221
#: src/gui/gladevcp.adoc:1287 src/gui/gladevcp.adoc:1342 src/gui/mdro.adoc:64
#: src/hal/basic-hal.adoc:399 src/hal/basic-hal.adoc:432
#: src/hal/basic-hal.adoc:461 src/hal/basic-hal.adoc:493
#: src/hal/parallel-port.adoc:222 src/hal/rtcomps.adoc:282
#: src/hal/rtcomps.adoc:388 src/hal/rtcomps.adoc:521 src/hal/rtcomps.adoc:628
#: src/hal/rtcomps.adoc:700 src/hal/rtcomps.adoc:755 man/man1/iov2.1:42
#: man/man1/shuttle.1:63
#, no-wrap
msgid "Pins"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:77
msgid ""
"iocontrol.0.coolant-flood (Bit, Out) TRUE when flood coolant is requested"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:79
msgid "iocontrol.0.coolant-mist (Bit, Out) TRUE when mist coolant is requested"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:82
msgid ""
"iocontrol.0.emc-enable-in (Bit, In) Should be driven FALSE when an external "
"estop condition exists."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:87
msgid ""
"iocontrol.0.lube (Bit, Out) TRUE when lube is requested. This pin gets "
"driven TRUE when the controller comes out of E-stop, and when the \"Lube On"
"\" command gets sent to the controller. It gets driven FALSE when the "
"controller goes into E-stop, and when the \"Lube Off\" command gets sent to "
"the controller."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:90
msgid ""
"iocontrol.0.lube_level (Bit, In) Should be driven FALSE when lubrication "
"tank is empty."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:92
msgid "iocontrol.0.tool-change (Bit, Out) TRUE when a tool change is requested"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:95
msgid ""
"iocontrol.0.tool-changed (Bit, In) Should be driven TRUE when a tool change "
"is completed."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:97
msgid "iocontrol.0.tool-number (s32, Out) Current tool number"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:100
msgid ""
"iocontrol.0.tool-prep-number (s32, Out) The number of the next tool, from "
"the RS274NGC T-word"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:103
msgid ""
"iocontrol.0.tool-prep-pocket (s32, Out) This is the pocket number (location "
"in the tool storage mechanism) of the tool requested by the most recent T-"
"word."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:105
msgid ""
"iocontrol.0.tool-prepare (Bit, Out) TRUE when a Tn tool prepare is requested"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:108
msgid ""
"iocontrol.0.tool-prepared (Bit, In) Should be driven TRUE when a tool "
"prepare is completed."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:111
msgid ""
"iocontrol.0.user-enable-out (Bit, Out) FALSE when an internal estop "
"condition exists"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:114
msgid ""
"iocontrol.0.user-request-enable (Bit, Out) TRUE when the user has requested "
"that estop be cleared"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:116
msgid "Additional pins added by I/O Control V2"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:118
msgid "emc-abort: (Bit, Out) signals emc-originated abort to toolchanger."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:122
msgid ""
"emc-abort-ack: (Bit, In) Acknowledge line from toolchanger for previous "
"signal, or jumpered to abort-tool-change if not used in toolchanger. NB: "
"after signaling an emc-abort, iov2 will block until emc-abort-ack is raised."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:125
msgid ""
"emc-reason: (S32, Out) convey cause for EMC-originated abort to "
"toolchanger.  Usage: UI informational. Valid during emc-abort TRUE."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:129
msgid ""
"start-change: (Bit, Out) asserted at the very beginning of an M6 operation, "
"before any spindle-off, quill-up, or move-to-toolchange-position oeprations "
"are executed."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:131
msgid "start-change-ack: (Bit, In) acknowledgment line for start-change."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:135
msgid ""
"toolchanger-fault: (Bit, In) toolchanger signals fault. This line is "
"contionuously monitored. A fault toggles a flag in iocontrol which is "
"reflected in the toolchanger-faulted pin."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:140
msgid ""
"toolchanger-fault-ack: (Bit, Out) handshake line for above signal. will be "
"set by iov2 after above fault line TRUE is recognized and deasserted when "
"toolchanger-fault drops. Toolchanger is free to interpret the ack; reading "
"the -ack lines assures fault has been received and acted upon."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:145
msgid ""
"toolchanger-reason: (S32, In) convey reason code for toolchanger-originated "
"fault to iov2. Usage: signal whether to continue or abort the program, plus "
"UI informational if negative. Read during toolchanger-fault TRUE. Non-zero "
"values will cause an Axis operator operator message or error message, see "
"below."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:148
msgid ""
"toolchanger-faulted: (Bit, Out) signals toolchanger-notify line has toggled "
"and toolchanger-reason-code was in the fault range. Next M6 will abort."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:152
msgid ""
"toolchanger-clear-fault: (Bit, In) resets TC fault condition. Deasserts "
"toolchanger-faulted if toolchanger-notify is line FALSE. Usage: UI - e.g.  "
"clear fault condition button."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:161
msgid ""
"iocontrol.0.tool-prep-index (s32, RO) IO's internal array index of the "
"prepped tool requested by the most recent T-word. 0 if no tool is prepped. "
"On random toolchanger machines this is tool's pocket number (ie, the same as "
"the tool-prep-pocket pin), on non-random toolchanger machines this is a "
"small integer corresponding to the tool's location in the internal "
"representation of the tool table. This parameter returns to 0 after a "
"successful tool change M6."
msgstr ""

#. type: Title ==
#: src/config/iov2.adoc:162
#, no-wrap
msgid "Communications"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:168
msgid ""
"If LinuxCNC signals an abort for whatever reason, this is reflected in the "
"emc-abort and emc-reason pins. The toolchanger is expected to acknowledge "
"the emc-abort pin by raising the emc-abort-ack pin - iov2 will block until "
"this is done. If you do not need the abort handshake feature, jumper them as "
"follows:"
msgstr ""

#. type: delimited block -
#: src/config/iov2.adoc:172
#, no-wrap
msgid " net emc-abort-ack iocontrol.0.emc-abort iocontrol.0.emc-abort-ack \n"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:175
msgid "The emc-reason pin is considered valid during emc-abort being TRUE."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:178
msgid ""
"The reason codes are as follows for LinuxCNC internally generated aborts "
"(see emc.hh ca line 321):"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:180
msgid "EMC_ABORT_TASK_EXEC_ERROR = 1,"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:181
msgid "EMC_ABORT_AUX_ESTOP = 2,"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:182
msgid "EMC_ABORT_MOTION_OR_IO_RCS_ERROR = 3,"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:183
msgid "EMC_ABORT_TASK_STATE_OFF = 4,"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:184
msgid "EMC_ABORT_TASK_STATE_ESTOP_RESET = 5,"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:185
msgid "EMC_ABORT_TASK_STATE_ESTOP = 6,"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:186
msgid "EMC_ABORT_TASK_STATE_NOT_ON = 7,"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:187
msgid "EMC_ABORT_TASK_ABORT = 8,"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:188
msgid "EMC_ABORT_USER = 100"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:191
msgid ""
"iov2 adds one more code, namely EMC_ABORT_BY_TOOLCHANGER_FAULT = 101 which "
"is signaled when an M6 aborts due to the toolchanger-faulted pin being TRUE."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:194
msgid ""
"To signal toolchanger faults to LinuxCNC, wire the toolchanger-fault pin, "
"and optionally the toolchanger-reason and toolchanger-ack pins."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:198
msgid ""
"The toolchanger-fault triggers the fault condition, which is reflected in "
"the toolchanger-faulted pin. This condition can be cleared by asserting the "
"toolchanger-clear-fault pin, provided the toolchanger-fault pin is FALSE."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:200
msgid "The value of the toolchanger-reason pin is used as follows:"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:204
msgid ""
"toolchanger-reason > 0 : The toolchange process is not completed and the "
"program continues, however parameter #5060 is set to 1.0 to indicate the "
"fault.  Parameter #5601 contains the value of the toolchanger-reason pin."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:205
msgid "toolchanger-reason = 0 : the program is aborted"
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:207
msgid ""
"toolchanger-reason < 0 : the program is aborted and an operator error "
"message is displayed by using the IO_ERROR template."
msgstr ""

#. type: Plain text
#: src/config/iov2.adoc:210
msgid ""
"The usage of the toolchanger-fault-ack pin is optional. It will become TRUE "
"when toolchanger-fault is raised and the toolchanger-reason pin has been "
"read by iov2."
msgstr ""

#. type: Title =
#: src/config/lathe-config.adoc:5
#, no-wrap
msgid "Lathe Configuration"
msgstr ""

#. type: Title ==
#: src/config/lathe-config.adoc:13
#, no-wrap
msgid "Default Plane"
msgstr ""

#. type: Plain text
#: src/config/lathe-config.adoc:19
msgid ""
"When LinuxCNC's interpreter was first written, it was designed for mills.  "
"That is why the default plane is XY (G17). A normal lathe only uses the XZ "
"plane (G18). To change the default plane place the following line in the INI "
"file in the RS274NGC section."
msgstr ""

#. type: delimited block -
#: src/config/lathe-config.adoc:23
#, no-wrap
msgid "RS274NGC_STARTUP_CODE = G18\n"
msgstr ""

#. type: Plain text
#: src/config/lathe-config.adoc:27
msgid ""
"The above can be overwritten in a G-code program so always set important "
"things in the preamble of the G-code file."
msgstr ""

#. type: Title ===
#: src/config/lathe-config.adoc:28 src/gui/gscreen.adoc:480
#: src/gui/qtvcp.adoc:97
#, no-wrap
msgid "INI Settings"
msgstr ""

#. type: Plain text
#: src/config/lathe-config.adoc:38
msgid ""
"The following INI settings are needed for lathe mode in Axis in addition to "
"or replacing normal settings in the INI file. These historical settings use "
"identity kinematics (trivkins) and 'three' joints (0,1,2) corresponding to "
"coordinates x, y, z.  The joint 1 for the unused y axis is required but not "
"used in these historical configurations.  Simulated lathe configs may use "
"these historical settings.  GMOCCAPY also uses the mentioned settings, but "
"does offer additional settings, check the <<cha:gmoccapy,GMOCCAPY>> section "
"for details."
msgstr ""

#. type: delimited block -
#: src/config/lathe-config.adoc:45 src/config/lathe-config.adoc:74
#, no-wrap
msgid ""
"[DISPLAY]\n"
"DISPLAY = axis\n"
"LATHE = 1\n"
"...\n"
msgstr ""

#. type: delimited block -
#: src/config/lathe-config.adoc:49
#, no-wrap
msgid ""
"[KINS]\n"
"KINEMATICS = trivkins\n"
"JOINTS = 3\n"
msgstr ""

#. type: delimited block -
#: src/config/lathe-config.adoc:53 src/config/lathe-config.adoc:82
#, no-wrap
msgid ""
"[TRAJ]\n"
"COORDINATES = X Z\n"
"...\n"
msgstr ""

#. type: delimited block -
#: src/config/lathe-config.adoc:62
#, no-wrap
msgid ""
"[JOINT_0]\n"
"...\n"
"[JOINT_2]\n"
"...\n"
"[AXIS_X]\n"
"...\n"
"[AXIS_Z]\n"
"...\n"
msgstr ""

#. type: Plain text
#: src/config/lathe-config.adoc:67
msgid ""
"With joints_axes incorporation, a simpler configuration can be made with "
"just the two required joints by specifying trivkins with the 'coordinates=' "
"parameter:"
msgstr ""

#. type: delimited block -
#: src/config/lathe-config.adoc:78
#: src/getting-started/updating-linuxcnc.adoc:351
#, no-wrap
msgid ""
"[KINS]\n"
"KINEMATICS = trivkins coordinates=xz\n"
"JOINTS = 2\n"
msgstr ""

#. type: delimited block -
#: src/config/lathe-config.adoc:91
#, no-wrap
msgid ""
"[JOINT_0]\n"
"...\n"
"[JOINT_1]\n"
"...\n"
"[AXIS_X]\n"
"...\n"
"[AXIS_Z]\n"
"...\n"
msgstr ""

#. type: Title =
#: src/config/moveoff.adoc:5
#, no-wrap
msgid "Moveoff Component(((Moveoff)))"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:16
msgid ""
"The moveoff HAL component is a HAL-only method for implementing offsets.  "
"See the manpage ('$ man moveoff')  for the IMPORTANT limitations and "
"warnings."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:21
msgid ""
"The moveoff component is used to offset joint positions using custom HAL "
"connections.  Implementing an offset-while-program-is-paused functionality "
"is supported with appropriate connections for the input pins.  Nine joints "
"are supported."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:29
msgid ""
"The axis offset pin values (offset-in-M) are continuously applied "
"(respecting limits on value, velocity, and acceleration) to the output pins "
"(offset-current-M, pos-plusoffset-M, fb-minusoffset-M) when both enabling "
"input pins (apply-offsets and move-enable) are TRUE.  The two enabling "
"inputs are anded internally. A 'warning pin' is set and a message issued if "
"the apply-offsets pin is deasserted while offsets are applied.  The warning "
"pin remains TRUE until the offsets are removed or the apply-offsets pin is "
"set."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:33 man/man9/moveoff.9:35
msgid ""
"Typically, the move-enable pin is connected to external controls and the "
"apply-offsets pin is connected to halui.program.is-paused (for offsets only "
"while paused) or set to TRUE (for continuously applied offsets)."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:37
msgid ""
"Applied offsets are 'automatically returned' to zero (respecting limits)  "
"when either of the enabling inputs is deactivated.  The zero value tolerance "
"is specified by the epsilon input pin value."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:45 man/man9/moveoff.9:47
msgid ""
"Waypoints are recorded when the moveoff componenent is enabled.  Waypoints "
"are managed with the waypoint-sample-secs and waypoint-threshold pins.  When "
"the backtrack-enable pin is TRUE, the auto-return path follows the recorded "
"waypoints.  When the memory available for waypoints is exhausted, offsets "
"are frozen and the waypoint-limit pin is asserted.  This restriction applies "
"regardless of the state of the backtrack-enable pin.  An enabling pin must "
"be deasserted to allow a return to the original (non-offset position)."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:50
msgid ""
"Backtracking through waypoints results in 'slower' movement rates as the "
"moves are point-to-point respecting velocity and acceleration settings.  The "
"velocity and acceleration limit pins can be managed dynamically to control "
"offsets at all times."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:55
msgid ""
"When backtrack-enable is FALSE, the auto-return move is *NOT* coordinated, "
"each axis returns to zero at its own rate.  If a controlled path is wanted "
"in this condition, each axis should be manually returned to zero before "
"deasserting an enabling pin."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:58 man/man9/moveoff.9:60
msgid ""
"The waypoint-sample-secs, waypoint-threshold, and epsilon pins are evaluated "
"only when the component is idle."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:64
msgid ""
"The offsets-applied output pin is provided to indicate the current state to "
"a GUI so that program resumption can be managed.  If the offset(s) are non-"
"zero when the apply-offsets pin is deasserted (for example when resuming a "
"program when offsetting during a pause), offsets are returned to zero "
"(respecting limits) and an 'Error' message is issued."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:70
msgid ""
"If offsets are enabled and applied and the machine is turned off for any "
"reason, any 'external' HAL logic that manages the enabling pins and the "
"offset-in-M inputs is responsible for their state when the machine is "
"subsequently turned on again."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:78
msgid ""
"This HAL-only means of offsetting is typically not known to LinuxCNC nor "
"available in GUI preview displays. *No protection is provided* for offset "
"moves that exceed soft limits managed by LinuxCNC. Since soft limits are not "
"honored, an offset move may encounter hard limits (or *CRASH* if there are "
"no limit switches). Use of the offset-min-M and offset-max-M inputs to limit "
"travel is recommended. Triggering a hard limit will turn off the machine -- "
"see *Caution* above."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:86
msgid ""
"The offset-in-M values may be set with INI file settings, controlled by a "
"GUI, or managed by other HAL components and connections.  Fixed values may "
"be appropriate in simple cases where the direction and amount of offset is "
"well-defined but a control method is required to deactivate an enabling pin "
"in order to return offsets to zero.  GUIs may provide means for users to "
"set, increment, decrement, and accumulate offset values for each axis and "
"may set offset-in-M values to zero before deasserting an enabling pin."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:92
msgid ""
"The default values for accel, vel, min, max, epsilon, waypoint-sample-secs, "
"and waypoint-threshold may not be suitable for any particular application.  "
"This HAL component is unaware of limits enforced elsewhere by LinuxCNC.  "
"Users should test usage in a simulator application and understand all "
"hazards before use on hardware."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:95
msgid ""
"Sim configurations that demonstrate the component and a GUI (moveoff_gui) "
"are located in:"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:97
msgid "configs/sim/axis/moveoff (axis-ui)"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:98
msgid "configs/sim/touchy/ngcgui (touchy-ui)"
msgstr ""

#. type: Title ==
#: src/config/moveoff.adoc:99
#, no-wrap
msgid "Modifying an existing configuration"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:104
msgid ""
"A system-provided HAL file (LIB:hookup_moveoff.tcl) can be used to adapt an "
"existing configuration to use the moveoff component.  Additional INI file "
"settings support the use of a simple GUI (moveoff_gui) for controlling "
"offsets."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:107
msgid ""
"When the system HAL file (LIB:hookup_moveoff.tcl) is properly specified in a "
"configuration INI file, it will:"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:110
msgid ""
"Disconnect the original joint.N.motor-pos-cmd and joint.N.motor-pos-fb pin "
"connections"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:112
msgid ""
"Load (loadrt) the moveoff component (using the name mv) with a personality "
"set to accommodate all axes identified in the INI file"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:113
msgid "Add (addf) the moveoff component functions in the required sequence"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:115
msgid ""
"Reconnect the joint.N.motor-pos-cmd and joint.N.motor-pos-fb pins to use the "
"moveoff component"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:117
msgid ""
"Set the moveoff component operating parameters and limits for each axis in "
"accordance with additional INI file settings"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:123
msgid ""
"Note: The moveoff_gui application supports configurations that use known "
"kinematics modules with KINEMATICS_TYPE=KINEMATICS_IDENTITY.  Supported "
"modules include: trivkins.  With identity kins, moveoff_gui assigns each "
"axis name specified with the command line parameter '-axes axisnames' to the "
"corresponding joint."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:125
msgid "Modify an existing configuration as follows:"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:132
msgid ""
"Make sure there is an INI file entry for [HAL]HALUI and create a new "
"[HAL]HALFILE entry for LIB:hookup_moveoff.tcl.  The entry for LIB:"
"hookup_moveoff.tcl should follow all HALFILE= entries for HAL files that "
"connect the pins for joint.N.motor-pos-cmd, joint.N.motor-pos-fb, and any "
"components connected to these pins (pid and encoder components in a servo "
"system for instance)."
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:141
#, no-wrap
msgid ""
"[HAL]\n"
"HALUI   = halui\n"
"HALFILE = existing_configuration_halfile_1\n"
"...\n"
"HALFILE = existing_configuration_halfile_n\n"
"HALFILE = LIB:hookup_moveoff.tcl\n"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:146
msgid ""
"Add INI file entries for the per-axis settings for each axis in use (if an "
"entry is not defined, the corresponding entry from the [AXIS_n] section will "
"be used, if no entry is found, then the moveoff component default will be "
"used)."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:150
msgid ""
"Using component defaults or [AXIS_n] section values for per-axis offset "
"settings is NOT recommended."
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:158
#, no-wrap
msgid ""
"[MOVEOFF_n]\n"
"MAX_LIMIT =\n"
"MIN_LIMIT =\n"
"MAX_VELOCITY =\n"
"MAX_ACCELERATION =\n"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:161
msgid ""
"Add INI file entries for moveoff component settings (omit to use moveoff "
"defaults):"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:168
#, no-wrap
msgid ""
"[MOVEOFF]\n"
"EPSILON =\n"
"WAYPOINT_SAMPLE_SECS =\n"
"WAYPOINT_THRESHOLD =\n"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:172
msgid ""
"The moveoff_gui is used to make additional required connections and provide "
"a popup GUI to:"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:174
msgid "Provide a control togglebutton to Enable/Disable offsets"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:175
msgid "Provide a control togglebutton to Enable/Disable backtracking"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:176
msgid ""
"Provide control pushbuttons to Increment/Decrement/Zero each axis offset"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:177
msgid "Display each axis offset current value"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:178
msgid "Display current offset status (disabled, active, removing, etc)"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:186
msgid ""
"The provided control buttons are optional depending upon the state of the "
"moveoff component move-enable pin.  Both a display and controls for enabling "
"offsetting are provided if the pin mv.move-enable is NOT connected when the "
"moveoff_gui is started.  For this case, the moveoff_gui manages the moveoff "
"component move-enable pin (named mv.move-enable) as well as the offsets (mv."
"move-offset-in-M)  and the backtracking enable (mv.backtrack-enable)"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:192
msgid ""
"If the mv.move-enable pin IS connected when the moveoff_gui is started, the "
"moveoff_gui will provide a display but NO controls.  This mode supports "
"configurations that use a jog wheel or other methods of controlling the "
"offset inputs and the enable pins (mv.offset-in-M, mv.move-enable, mv."
"backtrack-enable)."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:199
msgid ""
"The moveoff_gui makes the required connections for the moveoff component "
"pins: mv.power_on and mv.apply-offsets.  The mv.power_on pin is connected to "
"the motion.motion-enabled pin (a new signal is automatically created if "
"necessary).  The mv.apply-offsets is connected to halui.program.is-paused or "
"set to 1 depending upon the command line option -mode [ onpause | always ].  "
"A new signal is automatically created if necessary."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:202
msgid ""
"To use the moveoff_gui, add an entry in the INI file [APPLICATIONS] section "
"as follows:"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:210
#, no-wrap
msgid ""
"[APPLICATIONS]\n"
"# Note: a delay (specified in seconds) may be required if connections\n"
"# are made using postgui HAL files ([HAL]POSTGUI_HALFILE=)\n"
"DELAY = 0\n"
"APP = moveoff_gui option1 option2 ...\n"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:217
msgid ""
"When the HAL file LIB:hookup_moveoff.tcl is used to load and connect the "
"moveoff component, the mv.move-enable pin will not be connected and local "
"controls provided by the moveoff_gui will be used.  This is the simplest "
"method to test or demonstrate the moveoff component when modifying an "
"existing INI configuration."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:224
msgid ""
"To enable external controls while using the moveoff_gui display for offset "
"values and status, HAL files that follow LIB:hookup_moveoff.tcl must make "
"additional connections.  For example, the supplied demonstration configs "
"(configs/sim/axis/moveoff/*.ini) use a simple system HAL file (named LIB:"
"moveoff_external.hal) to connect the mv.move-enable, mv.offset-in-M, and mv."
"bactrack-enable pins to signals:"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:232
#, no-wrap
msgid ""
"[HAL]\n"
"HALUI = halui\n"
"...\n"
"HALFILE = LIB:hookup_moveoff.tcl\n"
"HALFILE = LIB:moveoff_external.hal\n"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:236
msgid ""
"The connections made by LIB:moveoff_external.hal (for a three axis "
"configuration) are:"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:240
#, no-wrap
msgid "net external_enable mv.move-enable\n"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:244
#, no-wrap
msgid ""
"net external_offset_0 mv.offset-in-0\n"
"net external_offset_1 mv.offset-in-1\n"
"net external_offset_2 mv.offset-in-2\n"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:246
#, no-wrap
msgid "net external_backtrack_en mv.backtrack-enable\n"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:252
msgid ""
"These signals (external_enable, external_offset_M, external_backtrack_en) "
"may be managed by subsequent HALFILES (including POSTGUI_HALFILEs) to "
"provide customized control of the component while using the moveoff_gui "
"display for current offset values and offset status."
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:255
msgid ""
"The moveoff_gui is configured with command line options.  For details on the "
"operation of moveoff_gui, see the man page:"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:258
#, no-wrap
msgid "$ man moveoff_gui\n"
msgstr ""

#. type: Plain text
#: src/config/moveoff.adoc:261
msgid ""
"For a brief listing of command line options for moveoff_gui, use the command "
"line help option:"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:264
#, no-wrap
msgid "$ moveoff_gui --help\n"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:267
#, no-wrap
msgid ""
"Usage:\n"
"moveoff_gui [Options]\n"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:270
#, no-wrap
msgid ""
"Options:\n"
"    [--help | -? | -- -h ]  (This text)\n"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:274
#, no-wrap
msgid ""
"    [-mode [onpause | always]]  (default: onpause)\n"
"                                  (onpause: show gui when program paused)\n"
"                                  (always:  show gui always)\n"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:290
#, no-wrap
msgid ""
"    [-axes axisnames]       (default: xyz (no spaces))\n"
"                              (letters from set of: x y z a b c u v w)\n"
"                              (example: -axes z)\n"
"                              (example: -axes xz)\n"
"                              (example: -axes xyz)\n"
"    [-inc incrementvalue]   (default: 0.001 0.01 0.10 1.0 )\n"
"                              (specify one per -inc (up to 4) )\n"
"                              (example: -inc 0.001 -inc 0.01 -inc 0.1 )\n"
"    [-size integer]         (default: 14)\n"
"                              (Overall gui popup size is based on font size)\n"
"    [-loc center|+x+y]      (default: center)\n"
"                              (example: -loc +10+200)\n"
"    [-autoresume]           (default: notused)\n"
"                              (resume program when move-enable deasserted)\n"
"    [-delay delay_secs]     (default: 5 (resume delay))\n"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:304
#, no-wrap
msgid ""
"Options for special cases:\n"
"    [-noentry]              (default: notused)\n"
"                             (don't create entry widgets)\n"
"    [-no_resume_inhibit]    (default: notused)\n"
"                             (do not use a resume-inhibit-pin)\n"
"    [-no_pause_requirement] (default: notused)\n"
"                             (no check for halui.program.is-paused)\n"
"    [-no_cancel_autoresume] (default: notused)\n"
"                             (useful for retraact offsets with simple)\n"
"                             (external control)\n"
"    [-no_display]           (default: notused)\n"
"                             (Use when both external controls and displays)\n"
"                             (are in use (see Note))\n"
msgstr ""

#. type: delimited block -
#: src/config/moveoff.adoc:308
#, no-wrap
msgid ""
"Note: If the moveoff move-enable pin (mv.move-enable) is connected when\n"
"      moveoff_gui is started, external controls are required and only\n"
"      displays are provided.\n"
msgstr ""

#. type: Title =
#: src/config/pncconf.adoc:5
#, no-wrap
msgid "Mesa Configuration Wizard"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:9
msgid ""
"PnCconf is made to help build configurations that utilize specific Mesa "
"'Anything I/O' products."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:13
msgid ""
"It can configure closed loop servo systems or hardware stepper systems.  It "
"uses a similar 'wizard' approach as Stepconf (used for software stepping, "
"parallel port driven systems)."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:17
msgid ""
"PnCconf is still in a development stage (Beta) so there are some bugs and "
"lacking features.  Please report bugs and suggestions to the LinuxCNC forum "
"page or mailing list."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:19
msgid "There are two trains of thought when using PnCconf:"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:24
msgid ""
"One is to use PnCconf to always configure your system - if you decide to "
"change options, reload PnCconf and allow it to configure the new options. "
"This will work well if your machine is fairly standard and you can use "
"custom files to add non standard features. PnCconf tries to work with you in "
"this regard."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:29
msgid ""
"The other is to use PnCconf to build a config that is close to what you want "
"and then hand edit everything to tailor it to your needs. This would be the "
"choice if you need extensive modifications beyond PnCconf's scope or just "
"want to tinker with / learn about LinuxCNC."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:33
msgid ""
"You navigate the wizard pages with the forward, back, and cancel buttons "
"there is also a help button that gives some help information about the "
"pages, diagrams and an output page."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:36
msgid ""
"PnCconf's help page should have the most up to date info and has additional "
"details."
msgstr ""

#. type: Title ==
#: src/config/pncconf.adoc:37
#, no-wrap
msgid "Step by Step Instructions"
msgstr ""

#. type: Block title
#: src/config/pncconf.adoc:39
#, no-wrap
msgid "PnCconf Splash"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:40
#, no-wrap
msgid "PnCconf Configuration Wizard"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:40
#, no-wrap
msgid "images/pncconf-splash.png"
msgstr ""

#. type: Title ==
#: src/config/pncconf.adoc:42
#, no-wrap
msgid "Create or Edit"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:53
msgid ""
"This allows you to select a previously saved configuration or create a new "
"one.  If you pick 'Modify a configuration' and then press 'Next' a file "
"selection box will show. PnCconf preselects your last saved file. Choose the "
"config you wish to edit. If you made any changes to the main HAL or INI "
"files *PnCconf will over write* those files and those changes will be lost. "
"Some files will not be over written and PnCconf places a note in those "
"files. It also allows you to select desktop shortcut / launcher options. A "
"desktop shortcut will place a folder icon on the desktop that points to your "
"new configuration files.  Otherwise you would have to look in your home "
"folder under linuxcnc/configs."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:57
msgid ""
"A Desktop launcher will add an icon to the desktop for starting your config "
"directly. You can also launch it from the main menu by using the "
"Configuration Selector 'LinuxCNC' found in CNC menu and selecting your "
"config name."
msgstr ""

#. type: Title ==
#: src/config/pncconf.adoc:58
#, no-wrap
msgid "Basic Machine Information"
msgstr ""

#. type: Block title
#: src/config/pncconf.adoc:60
#, no-wrap
msgid "PnCconf Basic"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:61
#, no-wrap
msgid "PnCconf Basic machine information"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:61
#, no-wrap
msgid "images/pncconf-basic.png"
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:63
#, no-wrap
msgid "Machine Basics"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:69
msgid ""
"If you use a name with spaces PnCconf will replace the spaces with "
"underscore (as a loose rule Linux doesn't like spaces in names)  Pick an "
"axis configuration - this selects what type of machine you are building and "
"what axes are available. The Machine units selector allows data entry of "
"metric or imperial units in the following pages."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:72
msgid ""
"Defaults are not converted when using metric so make sure they are sane "
"values!"
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:73
#, no-wrap
msgid "Computer Response Time"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:82
msgid ""
"The servo period sets the heart beat of the system. Latency refers to the "
"amount of time the computer can be longer then that period. Just like a "
"railroad, LinuxCNC requires everything on a very tight and consistent time "
"line or bad things happen. LinuxCNC requires and uses a 'real time' "
"operating system, which just means it has a low latency ( lateness ) "
"response time when LinuxCNC requires its calculations and when doing "
"LinuxCNCs calculations it cannot be interrupted by lower priority requests "
"(such as user input to screen buttons or drawing etc)."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:103
msgid ""
"Testing the latency is very important and a key thing to check early. "
"Luckily by using the Mesa card to do the work that requires the fastest "
"response time (encoder counting and PWM generation) we can endure a lot more "
"latency then if we used the parallel port for these things. The standard "
"test in LinuxCNC is checking the BASE period latency (even though we are not "
"using a base period). If you press the 'test base period jitter' button, "
"this launches the latency test window ( you can also load this directly from "
"the applications/cnc panel ). The test mentions to run it for a few minutes "
"but the longer the better. consider 15 minutes a bare minimum and overnight "
"even better. At this time use the computer to load things, use the net, use "
"USB etc we want to know the worst case latency and to find out if any "
"particular activity hurts our latency. We need to look at base period "
"jitter.  Anything under 20000 is excellent - you could even do fast software "
"stepping with the machine 20000 - 50000 is still good for software stepping "
"and fine for us.  50000 - 100000 is really not that great but could still be "
"used with hardware cards doing the fast response stuff.  So anything under "
"100000 is usable to us.  If the latency is disappointing or you get a bad "
"hiccup periodically you may still be able to improve it."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:109
msgid ""
"There is a user compiled list of equipment and the latency obtained on the "
"LinuxCNC wiki : http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Latency-Test Please "
"consider adding your info to the list. Also on that page are links to info "
"about fixing some latency problems."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:120
msgid ""
"Now we are happy with the latency and must pick a servo period. In most "
"cases a servo period of 1000000 ns is fine ( that gives a 1 kHz servo "
"calculation rate - 1000 calculations a second)  if you are building a closed "
"loop servo system that controls torque (current)  rather then velocity "
"(voltage) a faster rate would be better - something like 200000 (5 kHz "
"calculation rate). The problem with lowering the servo rate is that it "
"leaves less time available for the computer to do other things besides "
"LinuxCNC's calculations. Typically the display (GUI) becomes less "
"responsive. You must decide on a balance. Keep in mind that if you tune your "
"closed loop servo system then change the servo period you probably will need "
"to tune them again."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:121
#, no-wrap
msgid "I/O Control Ports/Boards"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:125
msgid ""
"PnCconf is capable of configuring machines that have up to two Mesa boards "
"and three parallel ports. Parallel ports can only be used for simple low "
"speed (servo rate) I/O."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:126
#, no-wrap
msgid "Mesa"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:137
msgid ""
"You must choose at least one Mesa board as PnCconf will not configure the "
"parallel ports to count encoders or output step or PWM signals.  The mesa "
"cards available in the selection box are based on what PnCconf finds for "
"firmware on the systems. There are options to add custom firmware and/or "
"'blacklist' (ignore) some firmware or boards using a preference file.  If no "
"firmware is found PnCconf will show a warning and use internal sample "
"firmware - no testing will be possible. One point to note is that if you "
"choose two PCI Mesa cards there currently is no way to predict which card is "
"0 and which is 1 - you must test - moving the cards could change their "
"order. If you configure with two cards both cards must be installed for "
"tests to function."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:138
#, no-wrap
msgid "Parallel Port"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:153
msgid ""
"Up to 3 parallel ports (referred to as parports) can be used as simple I/O. "
"You must set the address of the parport. You can either enter the Linux "
"parallel port numbering system (0,1,or 2) or enter the actual address. The "
"address for an on board parport is often 0x0278 or 0x0378 (written in "
"hexadecimal) but can be found in the BIOS page. The BIOS page is found when "
"you first start your computer you must press a key to enter it (such as F2). "
"On the BIOS page you can find the parallel port address and set the mode "
"such as SPP, EPP, etc on some computers this info is displayed for a few "
"seconds during start up. For PCI parallel port cards the address can be "
"found by pressing the 'parport address search' button. This pops up the help "
"output page with a list of all the PCI devices that can be found. In there "
"should be a reference to a parallel port device with a list of addresses. "
"One of those addresses should work. Not all PCI parallel ports work "
"properly. Either type can be selected as 'in' (maximum amount of input pins) "
"or 'out' (maximum amount of output pins)."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:154
#, no-wrap
msgid "GUI Front-end list"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:157
msgid ""
"This specifies the graphical display screens LinuxCNC will use.  Each one "
"has different option."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:160
msgid "fully supports lathes."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:161
msgid "is the most developed and used front-end"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:162
msgid "is designed to be used with mouse and keyboard"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:163
msgid ""
"is tkinter based so integrates PyVCP (Python based virtual control panels) "
"naturally."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:164
msgid "has a 3D graphical window."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:165
msgid "allows VCP integrated on the side or in center tab"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:168
msgid "hi contrast bright blue screen"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:169
msgid "separate graphics window"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:170 src/config/pncconf.adoc:184
msgid "no VCP integration"
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:171 src/getting-started/updating-linuxcnc.adoc:969
#: src/gui/gladevcp.adoc:28 src/user/user-intro.adoc:110
#, no-wrap
msgid "Touchy"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:173
msgid ""
"Touchy was designed to be used with a touchscreen, some minimal physical "
"switches and a MPG wheel."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:174
msgid "requires cycle-start, abort, and single-step signals and buttons"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:175
msgid "It also requires shared axis MPG jogging to be selected."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:176
msgid "is GTK based so integrates GladeVCP (virtual control panels) naturally."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:177
msgid "allows VCP panels integrated in the center Tab"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:178
msgid "has no graphical window"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:179
msgid "look can be changed with custom themes"
msgstr ""

#. type: Title =
#: src/config/pncconf.adoc:180 src/plasma/qtplasmac.adoc:5
#, no-wrap
msgid "QtPlasmaC"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:182
msgid "fully featured plasmac configuration based on the QtVCP infrastructure."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:183
msgid "mouse/keyboard operation or touchscreen operation"
msgstr ""

#. type: Title ==
#: src/config/pncconf.adoc:185
#, no-wrap
msgid "External Configuration"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:189
msgid ""
"This page allows you to select external controls such as for jogging or "
"overrides."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:190 src/config/pncconf.adoc:191
#, no-wrap
msgid "External Controls"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:191
#, no-wrap
msgid "images/pncconf-external.png"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:199
msgid ""
"If you select a Joystick for jogging, You will need it always connected for "
"LinuxCNC to load. To use the analog sticks for useful jogging you probably "
"need to add some custom HAL code. MPG jogging requires a pulse generator "
"connected to a MESA encoder counter. Override controls can either use a "
"pulse generator (MPG) or switches (such as a rotary dial). External buttons "
"might be used with a switch based OEM joystick."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:200
#, no-wrap
msgid "Joystick jogging"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:204
msgid ""
"Requires a custom 'device rule' to be installed in the system. This is a "
"file that LinuxCNC uses to connect to Linux's device list. PnCconf will help "
"to prepare this file."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:207
msgid ""
"'Search for device rule' will search the system for rules, you can use this "
"to find the name of devices you have already built with PnCconf."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:209
msgid ""
"'Add a device rule' will allow you to configure a new device by following "
"the prompts. You will need your device available."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:211
msgid ""
"'test device' allows you to load a device, see its pin names and check its "
"functions with halmeter."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:213
msgid "joystick jogging uses HALUI and hal_input components."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:214
#, no-wrap
msgid "External buttons"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:217
msgid ""
"allows jogging the axis with simple buttons at a specified jog rate. "
"Probably best for rapid jogging."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:218
#, no-wrap
msgid "MPG Jogging"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:220
msgid "Allows you to use a Manual Pulse Generator to jog the machine's axis."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:225
msgid ""
"MPG's are often found on commercial grade machines. They output quadrature "
"pulses that can be counted with a MESA encoder counter. PnCconf allows for "
"an MPG per axis or one MPG shared with all axis. It allows for selection of "
"jog speeds using switches or a single speed."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:228
msgid ""
"The selectable increments option uses the mux16 component. This component "
"has options such as debounce and gray code to help filter the raw switch "
"input."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:229
#, no-wrap
msgid "Overrides"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:232
msgid ""
"PnCconf allows overrides of feed rates and/or spindle speed using a pulse "
"generator (MPG) or switches (eg. rotary)."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:233 src/config/pncconf.adoc:238
#: src/config/pncconf.adoc:239
#, no-wrap
msgid "GUI Configuration"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:237
msgid ""
"Here you can set defaults for the display screens, add virtual control "
"panels (VCP), and set some LinuxCNC options.."
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:239
#, no-wrap
msgid "images/pncconf-gui.png"
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:241
#, no-wrap
msgid "Front-end GUI Options"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:244
msgid ""
"The default options allows general defaults to be chosen for any display "
"screen."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:250
msgid ""
"AXIS defaults are options specific to AXIS. If you choose size , position or "
"force maximize options then PnCconf will ask if it's alright to overwrite a "
"preference file (.axisrc). Unless you have manually added commands to this "
"file it is fine to allow it. Position and force max can be used to move AXIS "
"to a second monitor if the system is capable."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:259
msgid ""
"Touchy defaults are options specific to Touchy. Most of Touchy's options can "
"be changed while Touchy is running using the preference page. Touchy uses "
"GTK to draw its screen, and GTK supports themes. Themes controls the basic "
"look and feel of a program. You can download themes from the net or edit "
"them yourself.  There are a list of the current themes on the computer that "
"you can pick from.  To help some of the text to stand out PnCconf allows you "
"to override the Themes's defaults. The position and force max options can be "
"used to move Touchy to a second monitor if the system is capable."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:264
msgid ""
"QtPlasmaC options are specific to QtPlasmac, any common options that are not "
"required will be disabled.  If QtPlasmac is selected then the following "
"screen will be a user button setup screen that is specific to QtPlasmaC and "
"VCP options will not be available."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:265
#, no-wrap
msgid "VCP options"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:271
msgid ""
"Virtual Control Panels allow one to add custom controls and displays to the "
"screen. AXIS and Touchy can integrate these controls inside the screen in "
"designated positions. There are two kinds of VCPs - PyVCP which uses "
"'Tkinter' to draw the screen and GladeVCP that uses 'GTK' to draw the screen."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:272 src/gui/pyvcp.adoc:5
#: src/user/user-intro.adoc:158
#, no-wrap
msgid "PyVCP"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:275
msgid ""
"PyVCPs screen XML file can only be hand built. PyVCPs fit naturally in with "
"AXIS as they both use TKinter."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:281
msgid ""
"HAL pins are created for the user to connect to inside their custom HAL "
"file.  There is a sample spindle display panel for the user to use as-is or "
"build on.  You may select a blank file that you can later add your controls "
"'widgets' to or select a spindle display sample that will display spindle "
"speed and indicate if the spindle is at requested speed."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:286
msgid ""
"PnCconf will connect the proper spindle display HAL pins for you.  If you "
"are using AXIS then the panel will be integrated on the right side.  If not "
"using AXIS then the panel will be separate 'stand-alone' from the front-end "
"screen."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:290
msgid ""
"You can use the geometry options to size and move the panel, for instance to "
"move it to a second screen if the system is capable. If you press the "
"'Display sample panel' button the size and placement options will be honored."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:291 src/gui/gscreen.adoc:59
#: src/user/user-intro.adoc:166
#, no-wrap
msgid "GladeVCP"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:295
msgid ""
"GladeVCPs fit naturally inside of Touchy screen as they both use GTK to draw "
"them, but by changing GladeVCP's theme it can be made to blend pretty well "
"in AXIS (try Redmond)."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:299
msgid ""
"It uses a graphical editor to build its XML files.  HAL pins are created for "
"the user to connect to, inside of their custom HAL file."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:303
msgid ""
"GladeVCP also allows much more sophisticated (and complicated) programming "
"interaction, which PnCconf currently doesn't leverage (see GladeVCP in the "
"manual)."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:307
msgid ""
"PnCconf has sample panels for the user to use as-is or build on.  With "
"GladeVCP PnCconf will allow you to select different options on your sample "
"display."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:311
msgid ""
"Under 'sample options' select which ones you would like.  The zero buttons "
"use HALUI commands which you could edit later in the HALUI section."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:315
msgid ""
"Auto Z touch-off also requires the classic ladder touch-off program and a "
"probe input selected. It requires a conductive touch-off plate and a "
"grounded conductive tool. For an idea on how it works see:"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:317
msgid ""
"http://wiki.linuxcnc.org/cgi-bin/wiki.pl?"
"ClassicLadderExamples#Single_button_probe_touchoff"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:321
msgid ""
"Under 'Display Options', size, position, and force max can be used on a "
"'stand-alone' panel for such things as placing the screen on a second "
"monitor if the system is capable."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:326
msgid ""
"You can select a GTK theme which sets the basic look and feel of the panel.  "
"You Usually want this to match the front-end screen.  These options will be "
"used if you press the 'Display sample button'.  With GladeVCP depending on "
"the front-end screen, you can select where the panel will display."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:329
msgid ""
"You can force it to be stand-alone or with AXIS it can be in the center or "
"on the right side, with Touchy it can be in the center."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:330
#, no-wrap
msgid "Defaults and Options"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:332
msgid "Require homing before MDI / Running"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:334
msgid ""
"If you want to be able to move the machine before homing uncheck this "
"checkbox."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:335
msgid "Popup Tool Prompt"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:337
msgid ""
"Choose between an on screen prompt for tool changes or export standard "
"signal names for a User supplied custom tool changer HAL file"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:338
msgid "Leave spindle on during tool change:"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:339
msgid "Used for lathes"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:340
msgid "Force individual manual homing"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:341
msgid "Move spindle up before tool change"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:342
msgid "Restore joint position after shutdown"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:343
msgid "Used for non-trivial kinematics machines"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:344
msgid "Random position tool changers"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:346
msgid ""
"Used for tool changers that do not return the tool to the same pocket. You "
"will need to add custom HAL code to support tool changers."
msgstr ""

#. type: Title ==
#: src/config/pncconf.adoc:347
#, no-wrap
msgid "Mesa Configuration"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:352
msgid ""
"The Mesa configuration pages allow one to utilize different firmwares.  On "
"the basic page you selected a Mesa card here you pick the available firmware "
"and select what and how many components are available."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:353 src/config/pncconf.adoc:354
#, no-wrap
msgid "Mesa Board Configuration"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:354
#, no-wrap
msgid "images/pncconf-mesa-config.png"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:361
msgid ""
"Parport address is used only with Mesa parport card, the 7i43. An on board "
"parallel port usually uses 0x278 or 0x378 though you should be able to find "
"the address from the BIOS page. The 7i43 requires the parallel port to use "
"the EPP mode, again set in the BIOS page. If using a PCI parallel port the "
"address can be searched for by using the search button on the basic page."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:364
msgid "Many PCI cards do not support the EPP protocol properly."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:367
msgid ""
"PDM PWM and 3PWM base frequency sets the balance between ripple and "
"linearity.  If using Mesa daughter boards the docs for the board should give "
"recommendations"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:370
msgid ""
"It's important to follow these to avoid damage and get the best performance."
msgstr ""

#. type: delimited block .
#: src/config/pncconf.adoc:377
#, no-wrap
msgid ""
"The 7i33 requires PDM and a PDM base frequency of 6 MHz\n"
"The 7i29 requires PWM and a PWM base frequency of 20 kHz\n"
"The 7i30 requires PWM and a PWM base frequency of 20 kHz\n"
"The 7i40 requires PWM and a PWM base frequency of 50 kHz\n"
"The 7i48 requires UDM and a PWM base frequency of 24 kHz\n"
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:379
#, no-wrap
msgid "Watchdog time out"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:384
msgid ""
"is used to set how long the MESA board will wait before killing outputs if "
"communication is interrupted from the computer. Please remember Mesa uses "
"'active low' outputs meaning that when the output pin is on, it is low "
"(approx 0 volts) and if it's off the output in high (approx 5 volts)  make "
"sure your equipment is safe when in the off (watchdog bitten) state."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:385
#, no-wrap
msgid "Number of coders/PWM generators/STEP generators"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:387
msgid ""
"You may choose the number of available components by deselecting unused "
"ones.  Not all component types are available with all firmware."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:399
msgid ""
"Choosing less then the maximum number of components allows one to gain more "
"GPIO pins. If using daughter boards keep in mind you must not deselect pins "
"that the card uses. For instance some firmware supports two 7i33 cards, If "
"you only have one you may deselect enough components to utilize the "
"connector that supported the second 7i33. Components are deselected "
"numerically by the highest number first then down with out skipping a "
"number. If by doing this the components are not where you want them then you "
"must use a different firmware. The firmware dictates where, what and the max "
"amounts of the components. Custom firmware is possible, ask nicely when "
"contacting the LinuxCNC developers and Mesa. Using custom firmware in "
"PnCconf requires special procedures and is not always possible - Though I "
"try to make PnCconf as flexible as possible."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:403
msgid ""
"After choosing all these options press the 'Accept Component Changes' button "
"and PnCconf will update the I/O setup pages. Only I/O tabs will be shown for "
"available connectors, depending on the Mesa board."
msgstr ""

#. type: Title ==
#: src/config/pncconf.adoc:404
#, no-wrap
msgid "Mesa I/O Setup"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:408
msgid ""
"The tabs are used to configure the input and output pins of the Mesa "
"boards.  PnCconf allows one to create custom signal names for use in custom "
"HAL files."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:409 src/config/pncconf.adoc:410
#, no-wrap
msgid "Mesa I/O C2 Setup"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:410
#, no-wrap
msgid "images/pncconf-mesa-io2.png"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:416
msgid ""
"On this tab with this firmware the components are setup for a 7i33 daughter "
"board, usually used with closed loop servos. Note the component numbers of "
"the encoder counters and PWM drivers are not in numerical order. This "
"follows the daughter board requirements."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:417 src/config/pncconf.adoc:418
#, no-wrap
msgid "Mesa I/O C3 Setup"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:418
#, no-wrap
msgid "images/pncconf-mesa-io3.png"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:423
msgid ""
"On this tab all the pins are GPIO. Note the 3 digit numbers - they will "
"match the HAL pin number. GPIO pins can be selected as input or output and "
"can be inverted."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:424 src/config/pncconf.adoc:425
#, no-wrap
msgid "Mesa I/O C4 Setup"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:425
#, no-wrap
msgid "images/pncconf-mesa-io4.png"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:431
msgid ""
"On this tab there are a mix of step generators and GPIO.  Step generators "
"output and direction pins can be inverted. Note that inverting a Step Gen-A "
"pin (the step output pin) changes the step timing. It should match what your "
"controller expects."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:432 src/config/pncconf.adoc:434
#, no-wrap
msgid "Parallel port configuration"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:434
#, no-wrap
msgid "images/pncconf-parport.png"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:437
msgid ""
"The parallel port can be used for simple I/O similar to Mesa's GPIO pins."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:438 src/config/pncconf.adoc:554
#: src/config/pncconf.adoc:555
#, no-wrap
msgid "Axis Configuration"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:440 src/config/pncconf.adoc:441
#, no-wrap
msgid "Axis Drive Configuration"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:441
#, no-wrap
msgid "images/pncconf-axis-drive.png"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:446
msgid ""
"This page allows configuring and testing of the motor and/or encoder "
"combination.  If using a servo motor an open loop test is available, if "
"using a stepper a tuning test is available."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:447
#, no-wrap
msgid "Open Loop Test"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:460
msgid ""
"An open loop test is important as it confirms the direction of the motor and "
"encoder. The motor should move the axis in the positive direction when the "
"positive button is pushed and also the encoder should count in the positive "
"direction. The axis movement should follow the Machinery's Handbook footnote:"
"[\"axis nomenclature\" in the chapter \"Numerical Control\" in the "
"\"Machinery's Handbook\" published by Industrial Press.] standards or AXIS "
"graphical display will not make much sense. Hopefully the help page and "
"diagrams can help figure this out. Note that axis directions are based on "
"TOOL movement not table movement. There is no acceleration ramping with the "
"open loop test so start with lower DAC numbers. By moving the axis a known "
"distance one can confirm the encoder scaling. The encoder should count even "
"without the amp enabled depending on how power is supplied to the encoder."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:464
msgid ""
"If the motor and encoder do not agree on counting direction then the servo "
"will run away when using PID control."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:467
msgid ""
"Since at the moment PID settings can not be tested in PnCconf the settings "
"are really for when you re-edit a config - enter your tested PID settings."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:468
#, no-wrap
msgid "DAC scale"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:469
msgid "DAC scaling, max output and offset are used to tailor the DAC output."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:470
#, no-wrap
msgid "Compute DAC"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:477
msgid ""
"These two values are the scale and offset factors for the axis output to the "
"motor amplifiers. The second value (offset) is subtracted from the computed "
"output (in volts), and divided by the first value (scale factor), before "
"being written to the D/A converters. The units on the scale value are in "
"true volts per DAC output volts. The units on the offset value are in volts. "
"These can be used to linearize a DAC."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:488
msgid ""
"Specifically, when writing outputs, the LinuxCNC first converts the desired "
"output in quasi-SI units to raw actuator values, e.g., volts for an "
"amplifier DAC. This scaling looks like: The value for scale can be obtained "
"analytically by doing a unit analysis, i.e., units are [output SI units]/"
"[actuator units].  For example, on a machine with a velocity mode amplifier "
"such that 1 volt results in 250 mm/sec velocity, Note that the units of the "
"offset are in machine units, e.g., mm/sec, and they are pre-subtracted from "
"the sensor readings. The value for this offset is obtained by finding the "
"value of your output which yields 0.0 for the actuator output. If the DAC is "
"linearized, this offset is normally 0.0."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:492
msgid ""
"The scale and offset can be used to linearize the DAC as well, resulting in "
"values that reflect the combined effects of amplifier gain, DAC non-"
"linearity, DAC units, etc. To do this, follow this procedure:"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:495
msgid ""
"Build a calibration table for the output, driving the DAC with a desired "
"voltage and measuring the result:"
msgstr ""

#. type: Table
#: src/config/pncconf.adoc:503
#, no-wrap
msgid "-0.96"
msgstr ""

#. type: Table
#: src/config/pncconf.adoc:506
#, no-wrap
msgid "10.07"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:509
msgid ""
"Do a least-squares linear fit to get coefficients a, b such that meas=a*raw+b"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:512
msgid "cmd=a*raw+b"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:513
msgid "raw=(cmd-b)/a"
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:516
#, no-wrap
msgid "MAX OUTPUT"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:521
msgid ""
"The maximum value for the output of the PID compensation that is written to "
"the motor amplifier, in volts. The computed output value is clamped to this "
"limit.  The limit is applied before scaling to raw output units. The value "
"is applied symmetrically to both the plus and the minus side."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:522
#, no-wrap
msgid "Tuning Test"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:530
msgid ""
"The tuning test unfortunately only works with stepper based systems. Again "
"confirm the directions on the axis is correct. Then test the system by "
"running the axis back and forth, If the acceleration or max speed is too "
"high you will lose steps. While jogging, Keep in mind it can take a while "
"for an axis with low acceleration to stop. Limit switches are not functional "
"during this test. You can set a pause time so each end of the test movement. "
"This would allow you to set up and read a dial indicator to see if you are "
"losing steps."
msgstr ""

#. type: Title =
#: src/config/pncconf.adoc:531 src/integrator/stepper-timing.adoc:4
#, no-wrap
msgid "Stepper Timing"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:537
msgid ""
"Stepper timing needs to be tailored to the step controller's requirements.  "
"PnCconf supplies some default controller timing or allows custom timing "
"settings.  See http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Stepper_Drive_Timing "
"for some more known timing numbers (feel free to add ones you have figured "
"out). If in doubt use large numbers such as 5000 this will only limit max "
"speed."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:538
#, no-wrap
msgid "Brushless Motor Control"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:544
msgid ""
"These options are used to allow low level control of brushless motors using "
"special firmware and daughter boards. It also allows conversion of HALL "
"sensors from one manufacturer to another. It is only partially supported and "
"will require one to finish the HAL connections. Contact the mail-list or "
"forum for more help."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:545 src/config/pncconf.adoc:546
#, no-wrap
msgid "Axis Scale Calculation"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:546
#, no-wrap
msgid "images/pncconf-scale-calc.png"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:553
msgid ""
"The scale settings can be directly entered or one can use the 'calculate "
"scale' button to assist. Use the check boxes to select appropriate "
"calculations. Note that 'pulley teeth' requires the number of teeth not the "
"gear ratio. Worm turn ratio is just the opposite it requires the gear ratio. "
"If your happy with the scale press apply otherwise push cancel and enter the "
"scale directly."
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:555
#, no-wrap
msgid "images/pncconf-axis-config.png"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:560
msgid ""
"Also refer to the diagram tab for two examples of home and limit switches. "
"These are two examples of many different ways to set homing and limits."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:564
msgid ""
"It is very important to start with the axis moving in the right direction or "
"else getting homing right is very difficult!"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:567
msgid ""
"Remember positive and negative directions refer to the TOOL not the table as "
"per the Machinists handbook."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:568
#, no-wrap
msgid "On a typical knee or bed mill"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:570
msgid "when the TABLE moves out that is the positive Y direction"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:571
msgid "when the TABLE moves left that is the positive X direction"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:572
msgid "when the TABLE moves down that is the positive Z direction"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:573
msgid "when the HEAD moves up that is the positive Z direction"
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:574
#, no-wrap
msgid "On a typical lathe"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:576
msgid "when the TOOL moves right, away from the chuck"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:577
msgid "that is the positive Z direction"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:578
msgid "when the TOOL moves toward the operator"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:581
msgid ""
"that is the positive X direction. Some lathes have X opposite (e.g., tool on "
"back side), that will work fine but AXIS graphical display can not be made "
"to reflect this."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:591
msgid ""
"When using homing and / or limit switches LinuxCNC expects the HAL signals "
"to be true when the switch is being pressed / tripped.  If the signal is "
"wrong for a limit switch then LinuxCNC will think the machine is on end of "
"limit all the time. If the home switch search logic is wrong LinuxCNC will "
"seem to home in the wrong direction.  What it actually is doing is trying to "
"BACK off the home switch."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:592
#, no-wrap
msgid "Decide on limit switch location"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:608
msgid ""
"Limit switches are the back up for software limits in case something "
"electrical goes wrong, e.g., in case of a servo runaway.  Limit switches "
"should be placed so that the machine does not hit the physical end of the "
"axis movement. Remember the axis will coast past the contact point if moving "
"fast. Limit switches should be 'active low' on the machine, i.e., power runs "
"through the switches all the time - a loss of power (open switch) trips.  "
"While one could wire them the other way, this is fail safe.  This may need "
"to be inverted so that the HAL signal in LinuxCNC in 'active high' - a TRUE "
"means the switch was tripped. When starting LinuxCNC if you get an on-limit "
"warning, and axis is NOT tripping the switch, inverting the signal is "
"probably the solution. (use HALMETER to check the corresponding HAL signal "
"eg. joint.0.pos-lim-sw-in X axis positive limit switch)"
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:609
#, no-wrap
msgid "Decide on the home switch location"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:621
msgid ""
"If you are using limit switches You may as well use one as a home switch. A "
"separate home switch is useful if you have a long axis that in use is "
"usually a long way from the limit switches or moving the axis to the ends "
"presents problems of interference with material.  Note, a long shaft in a "
"lathe makes it hard to home to limits with out the tool hitting the shaft, "
"so a separate home switch closer to the middle may be better.  If you have "
"an encoder with index then the home switch acts as a course home and the "
"index will be the actual home location."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:622
#, no-wrap
msgid "Decide on the MACHINE ORIGIN position"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:632
msgid ""
"MACHINE ORIGIN is what LinuxCNC uses to reference all user coordinate "
"systems from.  I can think of little reason it would need to be in any "
"particular spot. There are only a few G-codes that can access the MACHINE "
"COORDINATE system.( G53, G30 and G28 )  If using tool-change-at-G30 option "
"having the origin at the tool change position may be convenient. By "
"convention, it may be easiest to have the ORIGIN at the home switch."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:633
#, no-wrap
msgid "Decide on the (final) HOME POSITION"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:637
msgid ""
"this just places the carriage at a consistent and convenient position after "
"LinuxCNC figures out where the ORIGIN is."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:638
#, no-wrap
msgid "Measure / calculate the positive / negative axis travel distances"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:646
msgid ""
"Move the axis to the origin. Mark a reference on the movable slide and the "
"non-movable support (so they are in line) move the machine to the end of "
"limits. Measure between the marks that is one of the travel distances. Move "
"the table to the other end of travel.  Measure the marks again. That is the "
"other travel distance. If the ORIGIN is at one of the limits then that "
"travel distance will be zero."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:647
#, no-wrap
msgid "(machine) ORIGIN"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:655
msgid ""
"The Origin is the MACHINE zero point. (not the zero point you set your "
"cutter / material at).  LinuxCNC uses this point to reference everything "
"else from. It should be inside the software limits.  LinuxCNC uses the home "
"switch location to calculate the origin position (when using home switches "
"or must be manually set if not using home switches."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:656
#, no-wrap
msgid "Travel distance"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:663
msgid ""
"This is the maximum distance the axis can travel in each direction. This may "
"or may not be able to be measured directly from origin to limit switch. The "
"positive and negative travel distances should add up to the total travel "
"distance."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:664
#, no-wrap
msgid "POSITIVE TRAVEL DISTANCE"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:671
msgid ""
"This is the distance the Axis travels from the Origin to the positive travel "
"distance or the total travel minus the negative travel distance. You would "
"set this to zero if the origin is positioned at the positive limit.  The "
"will always be zero or a positive number."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:672
#, no-wrap
msgid "NEGATIVE TRAVEL DISTANCE"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:681
msgid ""
"This is the distance the Axis travels from the Origin to the negative travel "
"distance.  or the total travel minus the positive travel distance. You would "
"set this to zero if the origin is positioned at the negative limit.  This "
"will always be zero or a negative number.  If you forget to make this "
"negative PnCconf will do it internally."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:682
#, no-wrap
msgid "(Final) HOME POSITION"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:691
msgid ""
"This is the position the home sequence will finish at. It is referenced from "
"the Origin so can be negative or positive depending on what side of the "
"Origin it is located.  When at the (final) home position if you must move in "
"the Positive direction to get to the Origin, then the number will be "
"negative."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:692
#, no-wrap
msgid "HOME SWITCH LOCATION"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:702
msgid ""
"This is the distance from the home switch to the Origin. It could be "
"negative or positive depending on what side of the Origin it is located. "
"When at the home switch location if you must move in the Positive direction "
"to get to the Origin, then the number will be negative. If you set this to "
"zero then the Origin will be at the location of the limit switch (plus "
"distance to find index if used)."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:703
#, no-wrap
msgid "Home Search Velocity"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:705
msgid "Course home search velocity in units per minute."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:706
#, no-wrap
msgid "Home Search Direction"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:710
msgid ""
"Sets the home switch search direction either negative (i.e., towards "
"negative limit switch)  or positive (i.e., towards positive limit switch)."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:711
#, no-wrap
msgid "Home Latch Velocity"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:713
msgid "Fine Home search velocity in units per minute."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:714
#, no-wrap
msgid "Home Final Velocity"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:717
msgid ""
"Velocity used from latch position to (final) home position in units per "
"minute. Set to 0 for max rapid speed."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:718
#, no-wrap
msgid "Home latch Direction"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:721
msgid ""
"Allows setting of the latch direction to the same or opposite of the search "
"direction."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:722
#, no-wrap
msgid "Use Encoder Index For Home"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:725
msgid ""
"LinuxCNC will search for an encoder index pulse while in the latch stage of "
"homing."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:726
#, no-wrap
msgid "Use Compensation File"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:730
msgid ""
"Allows specifying a Comp filename and type.  Allows sophisticated "
"compensation. See <<sub:ini:sec:axis-letter,AXIS Section>> of the INI "
"chapter."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:731
#, no-wrap
msgid "Use Backlash Compensation"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:735
msgid ""
"Allows setting of simple backlash compensation. Can not be used with "
"Compensation File. See <<sub:ini:sec:axis-letter,AXIS Section>> of the INI "
"chapter."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:736 src/config/pncconf.adoc:737
#, no-wrap
msgid "AXIS Help Diagram"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:737
#, no-wrap
msgid "images/pncconf-diagram-lathe.png"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:750
msgid ""
"The diagram should help to demonstrate an example of limit switches and "
"standard axis movement directions.  In this example the Z axis was two limit "
"switches, the positive switch is shared as a home switch.  The MACHINE "
"ORIGIN (zero point) is located at the negative limit.  The left edge of the "
"carriage is the negative trip pin and the right the positive trip pin.  We "
"wish the FINAL HOME POSITION to be 4 inches away from the ORIGIN on the "
"positive side.  If the carriage was moved to the positive limit we would "
"measure 10 inches between the negative limit and the negative trip pin."
msgstr ""

#. type: Title ==
#: src/config/pncconf.adoc:751 src/config/pncconf.adoc:760
#: src/config/stepconf.adoc:306
#, no-wrap
msgid "Spindle Configuration"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:755
msgid ""
"If you select spindle signals then this page is available to configure "
"spindle control."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:758
msgid ""
"Many of the option on this page will not show unless the proper option was "
"selected on previous pages!"
msgstr ""

#. type: Block title
#: src/config/pncconf.adoc:759
#, no-wrap
msgid "Spindle Motor/Encoder Configuration"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:760
#, no-wrap
msgid "images/pncconf-spindle-config.png"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:763
msgid "This page is similar to the axis motor configuration page."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:765
msgid "There are some differences:"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:768
msgid ""
"Unless one has chosen a stepper driven spindle there is no acceleration or "
"velocity limiting."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:769
msgid "There is no support for gear changes or ranges."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:771
msgid ""
"If you picked a VCP spindle display option then spindle-at-speed scale and "
"filter settings may be shown."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:776
msgid ""
"Spindle-at-speed allows LinuxCNC to wait till the spindle is at the "
"requested speed before moving the axis. This is particularly handy on lathes "
"with constant surface feed and large speed diameter changes. It requires "
"either encoder feedback or a digital spindle-at-speed signal typically "
"connected to a VFD drive."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:779
msgid ""
"If using encoder feedback, you may select a spindle-at-speed scale setting "
"that specifies how close the actual speed must be to the requested speed to "
"be considered at-speed."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:782
msgid ""
"If using encoder feedback, the VCP speed display can be erratic - the filter "
"setting can be used to smooth out the display. The encoder scale must be set "
"for the encoder count / gearing used."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:787
msgid ""
"If you are using a single input for a spindle encoder you must add the line: "
"setp hm2_7i43.0.encoder.00.counter-mode 1 (changing the board name and "
"encoder number to your requirements) into a custom HAL file. See the <<sec:"
"hm2-encoder,Encoders Section>> in Hostmot2 for more info about counter mode."
msgstr ""

#. type: Title ==
#: src/config/pncconf.adoc:788
#, no-wrap
msgid "Advanced Options"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:805
msgid ""
"This allows setting of HALUI commands and loading of ClassicLadder and "
"sample ladder programs.  If you selected GladeVCP options such as for "
"zeroing axis, there will be commands showing.  See the <<cha:hal-user-"
"interface,HALUI Chapter>> for more info on using custom halcmds.  There are "
"several ladder program options.  The Estop program allows an external ESTOP "
"switch or the GUI frontend to throw an Estop. It also has a timed lube pump "
"signal.  The Z auto touch-off is with a touch-off plate, the GladeVCP touch-"
"off button and special HALUI commands to set the current user origin to zero "
"and rapid clear.  The serial modbus program is basically a blank template "
"program that sets up ClassicLadder for serial modbus. See the <<cha:"
"classicladder,ClassicLadder Chapter>> in the manual."
msgstr ""

#. type: Block title
#: src/config/pncconf.adoc:806
#, no-wrap
msgid "PnCconf, advanced options"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:807
#, no-wrap
msgid "PnCconf Advanced Options"
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:807
#, no-wrap
msgid "images/pncconf-advanced.png"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/pncconf.adoc:809 src/config/pncconf.adoc:816
#: src/config/pncconf.adoc:817
#, no-wrap
msgid "HAL Components"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:815
msgid ""
"On this page you can add additional HAL components you might need for custom "
"HAL files.  In this way one should not have to hand edit the main HAL file, "
"while still allowing user needed components."
msgstr ""

#. type: Target for macro image
#: src/config/pncconf.adoc:817
#, no-wrap
msgid "images/pncconf-hal.png"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:822
msgid ""
"The first selection is components that pncconf uses internally.  You may "
"configure pncconf to load extra instances of the components for your custom "
"HAL file."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:825
msgid ""
"Select the number of instances your custom file will need, PnCconf will add "
"what it needs after them."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:828
msgid ""
"Meaning if you need 2 and PnCconf needs 1 PnCconf will load 3 instances and "
"use the last one."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:829
#, no-wrap
msgid "Custom Component Commands"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:836
msgid ""
"This selection will allow you to load HAL components that PnCconf does not "
"use.  Add the loadrt or loadusr command, under the heading 'loading command' "
"Add the addf command under the heading 'Thread command'.  The components "
"will be added to the thread between reading of inputs and writing of "
"outputs, in the order you write them in the 'thread command'."
msgstr ""

#. type: Title ==
#: src/config/pncconf.adoc:837
#, no-wrap
msgid "Advanced Usage Of PnCconf"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:842
msgid ""
"PnCconf does its best to allow flexible customization by the user.  PnCconf "
"has support for custom signal names, custom loading of components, custom "
"HAL files and custom firmware."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:847
msgid ""
"There are also signal names that PnCconf always provides regardless of "
"options selected, for user's custom HAL files With some thought most "
"customizations should work regardless if you later select different options "
"in PnCconf."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:851
msgid ""
"Eventually if the customizations are beyond the scope of PnCconf's frame "
"work you can use PnCconf to build a base config or use one of LinuxCNC's "
"sample configurations and just hand edit it to what ever you want."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:852 src/config/pncconf.adoc:884
#, no-wrap
msgid "Custom Signal Names"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:857
msgid ""
"If you wish to connect a component to something in a custom HAL file write a "
"unique signal name in the combo entry box. Certain components will add "
"endings to your custom signal name:"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:859
msgid "Encoders will add < customname > +:"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:861
msgid "position"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:862
msgid "count"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:863
msgid "velocity"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:864
msgid "index-enable"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:865
msgid "reset"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:867
msgid "Steppers add:"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:869 src/config/pncconf.adoc:877
msgid "enable"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:870
msgid "counts"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:871
msgid "position-cmd"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:872
msgid "position-fb"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:873
msgid "velocity-fb"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:875
msgid "PWM add:"
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:878 src/gui/gladevcp.adoc:933
#: src/gui/gladevcp.adoc:1249
#, no-wrap
msgid "value"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:880
msgid "GPIO pins will just have the entered signal name connected to it"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:883
msgid ""
"In this way one can connect to these signals in the custom HAL files and "
"still have the option to move them around later."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:888
msgid ""
"The HAL Components page can be used to load components needed by a user for "
"customization."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:889
#, no-wrap
msgid "Loading Custom Firmware"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:897
msgid ""
"PnCconf searches for firmware on the system and then looks for the XML file "
"that it can convert to what it understands. These XML files are only "
"supplied for officially released firmware from the LinuxCNC team. To utilize "
"custom firmware one must convert it to an array that PnCconf understands and "
"add its file path to PnCconf's preference file. By default this path "
"searches the desktop for a folder named custom_firmware and a file named "
"firmware.py."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:903
msgid ""
"The hidden preference file is in the user's home file, is named .pncconf-"
"preferences and require one to select 'show hidden files' in your file "
"manager to see and edit it or on the command line you use 'ls' with the '-a' "
"option.  The contents of this file can be seen when you first load PnCconf - "
"press the help button and look at the output page."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:906
msgid ""
"Ask on the LinuxCNC mail-list or forum for info about converting custom "
"firmware.  Not all firmware can be utilized with PnCconf."
msgstr ""

#. type: Labeled list
#: src/config/pncconf.adoc:907
#, no-wrap
msgid "Custom HAL Files"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:910
msgid "There are four custom files that you can use to add HAL commands to:"
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:913
msgid ""
"custom.hal is for HAL commands that don't have to be run after the GUI "
"frontend loads. It is run after the configuration-named HAL file."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:915
msgid ""
"custom_postgui.hal is for commands that must be run after AXIS loads or a "
"standalone PyVCP display loads."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:916
msgid ""
"custom_gvcp.hal is for commands that must be run after GladeVCP is loaded."
msgstr ""

#. type: Plain text
#: src/config/pncconf.adoc:917
msgid ""
"shutdown.hal is for commands to run when LinuxCNC shuts down in a controlled "
"manner."
msgstr ""

#. type: Title =
#: src/config/python-interface.adoc:5
#, no-wrap
msgid "Python Interface"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:13
msgid ""
"This documentation describes the `linuxcnc` python module, which provides a "
"Python API for talking to LinuxCNC."
msgstr ""

#. constants are located in src/emc/usr_intf/axis/extensions/emcmodule.cc
#. type: Title ==
#: src/config/python-interface.adoc:18
#, no-wrap
msgid "The `linuxcnc` Python module"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:23
msgid ""
"User interfaces control LinuxCNC activity by sending NML messages to the "
"LinuxCNC task controller, and monitor results by observing the LinuxCNC "
"status structure, as well as the error reporting channel."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:27
msgid ""
"Programmatic access to NML is through a C++ API; however, the most important "
"parts of the NML interface to LinuxCNC are also available to Python programs "
"through the `linuxcnc` module."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:30
msgid ""
"Beyond the NML interface to the command, status and error channels, the "
"`linuxcnc` module also contains:"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:32
msgid "support for reading values from INI files"
msgstr ""

#. - support for position logging  (???)
#. type: Title ==
#: src/config/python-interface.adoc:37
#, no-wrap
msgid "Usage Patterns for the LinuxCNC NML interface"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:40
msgid "The general pattern for `linuxcnc` usage is roughly like this:"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:42
msgid "import the `linuxcnc` module"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:43
msgid ""
"establish connections to the command, status and error NML channels as needed"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:44 src/config/python-interface.adoc:53
msgid "poll the status channel, either periodically or as needed"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:47
msgid ""
"before sending a command, determine from status whether it is in fact OK to "
"do so (for instance, there is no point in sending a 'Run' command if task is "
"in the ESTOP state, or the interpreter is not idle)"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:48
msgid "send the command by using one of the `linuxcnc` command channel methods"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:51
msgid ""
"To retrieve messages from the error channel, poll the error channel "
"periodically, and process any messages retrieved."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:54
msgid "print any error message and explore the exception code"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:56
msgid ""
"`linuxcnc` also defines the `error` Python exception type to support error "
"reporting."
msgstr ""

#. type: Title ==
#: src/config/python-interface.adoc:57
#, no-wrap
msgid "Reading LinuxCNC status"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:62
msgid ""
"Here is a Python fragment to explore the contents of the `linuxcnc.stat` "
"object which contains some 80+ values (run while linuxcnc is running for "
"typical values):"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:78
#, no-wrap
msgid ""
"#!/usr/bin/env python3\n"
"# -*- coding: utf-8 -*-\n"
"import sys\n"
"import linuxcnc\n"
"try:\n"
"    s = linuxcnc.stat() # create a connection to the status channel\n"
"    s.poll() # get current values\n"
"except linuxcnc.error, detail:\n"
"    print(\"error\", detail)\n"
"    sys.exit(1)\n"
"for x in dir(s):\n"
"    if not x.startswith(\"_\"):\n"
"        print(x, getattr(s,x))\n"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:83
msgid ""
"Linuxcnc uses the default compiled-in path to the NML configuration file "
"unless overridden, see <<python:reading-ini-values,Reading INI file values>> "
"for an example."
msgstr ""

#. type: Title ===
#: src/config/python-interface.adoc:84
#, no-wrap
msgid "linuxcnc.stat attributes"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:86
#, no-wrap
msgid "*acceleration*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:88
msgid ""
"'(returns float)' - default acceleration, reflects the INI entry "
"[TRAJ]DEFAULT_ACCELERATION."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:89
#, no-wrap
msgid "*active_queue*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:91
msgid "'(returns integer)' - number of motions blending."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:92
#, no-wrap
msgid "*actual_position*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:94
msgid ""
"'(returns tuple of floats)' - current trajectory position, (x y z a b c u v "
"w) in machine units."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:95
#, no-wrap
msgid "*adaptive_feed_enabled*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:97
msgid "'(returns boolean)' - status of adaptive feedrate override (0/1)."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:98
#, no-wrap
msgid "*ain*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:100
msgid "'(returns tuple of floats)' - current value of the analog input pins."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:101
#, no-wrap
msgid "*angular_units*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:103
msgid ""
"'(returns float)' - machine angular units per deg, reflects "
"[TRAJ]ANGULAR_UNITS INI value."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:104
#, no-wrap
msgid "*aout*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:106
msgid "'(returns tuple of floats)' - current value of the analog output pins."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:107
#, no-wrap
msgid "*axes*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:109
msgid ""
"'(returns integer)' - number of axes. Derived from [TRAJ]COORDINATES INI "
"value."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:110
#, no-wrap
msgid "*axis*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:113
msgid ""
"'(returns tuple of dicts)' - reflecting current axis values. See <<sec:the-"
"axis-dictionary,The axis dictionary>>."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:114
#, no-wrap
msgid "*axis_mask*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:118
msgid ""
"'(returns integer)' - mask of axis available as defined by [TRAJ]COORDINATES "
"in the INI file. Returns the sum of the axes X=1, Y=2, Z=4, A=8, B=16, C=32, "
"U=64, V=128, W=256."
msgstr ""

#. type: Block title
#: src/config/python-interface.adoc:119 src/gui/panelui.adoc:322
#, no-wrap
msgid "*block_delete*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:121
msgid "'(returns boolean)' - block delete current status."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:122
#, no-wrap
msgid "*call_level*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:124
msgid ""
"'(returns integer)'` - current subroutine depth. - 0 If not in a subroutine, "
"Depth if not otherwise specified"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:125
#, no-wrap
msgid "*command*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:127
msgid "'(returns string)' - currently executing command."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:128
#, no-wrap
msgid "*current_line*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:130
msgid "'(returns integer)' - currently executing line."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:131
#, no-wrap
msgid "*current_vel*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:133
msgid "'(returns float)' - current velocity in user units per second."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:134
#, no-wrap
msgid "*cycle_time*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:136
msgid "'(returns float)' - thread period"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:137
#, no-wrap
msgid "*debug*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:139
msgid "'(returns integer)' - debug flag from the INI file."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:140
#, no-wrap
msgid "*delay_left*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:142
msgid "'(returns float)' - remaining time on dwell (G4) command, seconds."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:143
#, no-wrap
msgid "*din*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:145
msgid ""
"'(returns tuple of integers)' - current value of the digital input pins."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:146
#, no-wrap
msgid "*distance_to_go*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:148
msgid ""
"'(returns float)' - remaining distance of current move, as reported by "
"trajectory planner."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:149
#, no-wrap
msgid "*dout*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:151
msgid ""
"'(returns tuple of integers)' - current value of the digital output pins."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:152
#, no-wrap
msgid "*dtg*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:154
msgid ""
"'(returns tuple of floats)' - remaining distance of current move for each "
"axis, as reported by trajectory planner."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:155
#, no-wrap
msgid "*echo_serial_number*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:160
msgid ""
"'(returns integer)' - The serial number of the last completed command sent "
"by a UI to task. All commands carry a serial number. Once the command has "
"been executed, its serial number is reflected in `echo_serial_number`."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:161 src/config/python-interface.adoc:442
#: src/config/python-interface.adoc:521
#, no-wrap
msgid "*enabled*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:163
msgid "'(returns boolean)' - trajectory planner enabled flag."
msgstr ""

#. type: Block title
#: src/config/python-interface.adoc:164 src/gui/panelui.adoc:238
#, no-wrap
msgid "*estop*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:166
msgid "'(returns integer)' - Returns either STATE_ESTOP or not."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:167
#, no-wrap
msgid "*exec_state*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:173
msgid ""
"'(returns integer)' - task execution state. One of EXEC_ERROR, EXEC_DONE, "
"EXEC_WAITING_FOR_MOTION, EXEC_WAITING_FOR_MOTION_QUEUE, EXEC_WAITING_FOR_IO, "
"EXEC_WAITING_FOR_MOTION_AND_IO, EXEC_WAITING_FOR_DELAY, "
"EXEC_WAITING_FOR_SYSTEM_CMD, EXEC_WAITING_FOR_SPINDLE_ORIENTED."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:174
#, no-wrap
msgid "*feed_hold_enabled*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:176
msgid "'(returns boolean)' - enable flag for feed hold."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:177
#, no-wrap
msgid "*feed_override_enabled*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:179
msgid "'(returns boolean)' - enable flag for feed override."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:180
#, no-wrap
msgid "*feedrate*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:182
msgid "'(returns float)' - current feedrate override, 1.0 = 100%."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:183
#, no-wrap
msgid "*file*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:185
msgid "'(returns string)' - currently loaded G-code filename with path."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:186
#, no-wrap
msgid "*flood*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:188
msgid "'(returns integer)' - Flood status, either FLOOD_OFF or FLOOD_ON."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:189
#, no-wrap
msgid "*g5x_index*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:191
msgid ""
"'(returns integer)' - currently active coordinate system, G54=1, G55=2 etc."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:192
#, no-wrap
msgid "*g5x_offset*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:194
msgid ""
"'(returns tuple of floats)' - offset of the currently active coordinate "
"system."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:195
#, no-wrap
msgid "*g92_offset*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:197
msgid "'(returns tuple of floats)' - pose of the current g92 offset."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:198
#, no-wrap
msgid "*gcodes*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:208
msgid ""
"'(returns tuple of integers)' - Active G-codes for each modal group.  G-code "
"constants G_0, G_1, G_2, G_3, G_4, G_5, G_5_1, G_5_2, G_5_3, G_7, G_8, "
"G_100, G_17, G_17_1, G_18, G_18_1, G_19, G_19_1, G_20, G_21, G_28, G_28_1, "
"G_30, G_30_1, G_33, G_33_1, G_38_2, G_38_3, G_38_4, G_38_5, G_40, G_41, "
"G_41_1, G_42, G_42_1, G_43, G_43_1, G_43_2, G_49, G_50, G_51, G_53, G_54, "
"G_55, G_56, G_57, G_58, G_59, G_59_1, G_59_2, G_59_3, G_61, G_61_1, G_64, "
"G_73, G_76, G_80, G_81, G_82, G_83, G_84, G_85, G_86, G_87, G_88, G_89, "
"G_90, G_90_1, G_91, G_91_1, G_92, G_92_1, G_92_2, G_92_3, G_93, G_94, G_95, "
"G_96, G_97, G_98, G_99"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:209 src/config/python-interface.adoc:454
#: src/config/python-interface.adoc:524
#, no-wrap
msgid "*homed*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:211
msgid ""
"'(returns tuple of integers)' - currently homed joints, 0 = not homed, 1 = "
"homed."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:212
#, no-wrap
msgid "*id*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:214
msgid "'(returns integer)' - currently executing motion id."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:215
#, no-wrap
msgid "*ini_filename*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:217
msgid "'(returns string)' - path to the INI file passed to linuxcnc."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:218 src/config/python-interface.adoc:460
#, no-wrap
msgid "*inpos*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:220
msgid "'(returns boolean)' - machine-in-position flag."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:221
#, no-wrap
msgid "*input_timeout*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:223
msgid "'(returns boolean)' - flag for M66 timer in progress."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:224
#, no-wrap
msgid "*interp_state*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:227
msgid ""
"'(returns integer)' - current state of RS274NGC interpreter. One of "
"INTERP_IDLE, INTERP_READING, INTERP_PAUSED, INTERP_WAITING."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:228
#, no-wrap
msgid "*interpreter_errcode*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:233
msgid ""
"'(returns integer)' - current RS274NGC interpreter return code. One of "
"INTERP_OK, INTERP_EXIT, INTERP_EXECUTE_FINISH, INTERP_ENDFILE, "
"INTERP_FILE_NOT_OPEN, INTERP_ERROR.  see src/emc/nml_intf/interp_return.hh"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:234
#, no-wrap
msgid "*joint*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:237
msgid ""
"'(returns tuple of dicts)' - reflecting current joint values. See <<sec:the-"
"joint-dictionary,The joint dictionary>>."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:238
#, no-wrap
msgid "*joint_actual_position*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:240
msgid "'(returns tuple of floats)' - actual joint positions."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:241
#, no-wrap
msgid "*joint_position*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:243
msgid "'(returns tuple of floats)' - Desired joint positions."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:244
#, no-wrap
msgid "*joints*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:246
msgid ""
"'(returns integer)' - number of joints. Reflects [KINS]JOINTS INI value."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:247
#, no-wrap
msgid "*kinematics_type*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:249
msgid "'(returns integer)' - The type of kinematics. One of:"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:250
msgid "KINEMATICS_IDENTITY"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:251
msgid "KINEMATICS_FORWARD_ONLY"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:252
msgid "KINEMATICS_INVERSE_ONLY"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:253
msgid "KINEMATICS_BOTH"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:254
#, no-wrap
msgid "*limit*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:257
msgid ""
"'(returns tuple of integers)' - axis limit masks. minHardLimit=1, "
"maxHardLimit=2, minSoftLimit=4, maxSoftLimit=8."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:258
#, no-wrap
msgid "*linear_units*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:260
msgid ""
"'(returns float)' - machine linear units per mm, reflects [TRAJ]LINEAR_UNITS "
"INI value."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:261
#, no-wrap
msgid "*lube*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:263
msgid "'(returns integer)' - 'lube on' flag."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:264
#, no-wrap
msgid "*lube_level*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:266
msgid "'(returns integer)' - reflects 'iocontrol.0.lube_level'."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:267
#, no-wrap
msgid "*max_acceleration*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:269
msgid ""
"'(returns float)' - maximum acceleration. Reflects [TRAJ]MAX_ACCELERATION."
msgstr ""

#. type: Block title
#: src/config/python-interface.adoc:270 src/gui/panelui.adoc:314
#, no-wrap
msgid "*max_velocity*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:272
msgid ""
"'(returns float)' - maximum velocity. Reflects the current maximum velocity. "
"If not modified by halui.max-velocity or similar it should reflect "
"[TRAJ]MAX_VELOCITY."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:273
#, no-wrap
msgid "*mcodes*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:275
msgid "'(returns tuple of 10 integers)' - currently active M-codes."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:276
#, no-wrap
msgid "*mist*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:278
msgid "'(returns integer)' - Mist status, either MIST_OFF or MIST_ON"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:279
#, no-wrap
msgid "*motion_line*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:282
msgid ""
"'(returns integer)' - source line number motion is currently executing. "
"Relation to `id` unclear."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:283
#, no-wrap
msgid "*motion_mode*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:286
msgid ""
"'(returns integer)' - This is the mode of the Motion controller.  One of "
"TRAJ_MODE_COORD, TRAJ_MODE_FREE, TRAJ_MODE_TELEOP."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:287
#, no-wrap
msgid "*motion_type*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:289
msgid ""
"'(returns integer)' - The type of the currently executing motion.  One of:"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:290
msgid "MOTION_TYPE_TRAVERSE"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:291
msgid "MOTION_TYPE_FEED"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:292
msgid "MOTION_TYPE_ARC"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:293
msgid "MOTION_TYPE_TOOLCHANGE"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:294
msgid "MOTION_TYPE_PROBING"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:295
msgid "MOTION_TYPE_INDEXROTARY"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:296
msgid "Or 0 if no motion is currently taking place."
msgstr ""

#. type: Block title
#: src/config/python-interface.adoc:297 src/gui/panelui.adoc:319
#, no-wrap
msgid "*optional_stop*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:299
msgid "'(returns integer)' - option stop flag."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:300
#, no-wrap
msgid "*paused*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:302
msgid "'(returns boolean)' - `motion paused` flag."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:303
#, no-wrap
msgid "*pocket_prepped*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:306
msgid ""
"'(returns integer)' - A Tx command completed, and this pocket is prepared. "
"-1 if no prepared pocket."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:307
#, no-wrap
msgid "*poll()*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:309
msgid "-'(built-in function)' method to update current status attributes."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:310
#, no-wrap
msgid "*position*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:312
msgid "'(returns tuple of floats)' - trajectory position."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:313
#, no-wrap
msgid "*probe_tripped*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:315
msgid "'(returns boolean)' - flag, True if probe has tripped (latch)"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:316
#, no-wrap
msgid "*probe_val*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:318
msgid "'(returns integer)' - reflects value of the `motion.probe-input` pin."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:319
#, no-wrap
msgid "*probed_position*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:321
msgid "'(returns tuple of floats)' - position where probe tripped."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:322
#, no-wrap
msgid "*probing*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:324
msgid "'(returns boolean)' - flag, True if a probe operation is in progress."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:325
#, no-wrap
msgid "*program_units*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:327
msgid ""
"'(returns integer)' - one of CANON_UNITS_INCHES=1, CANON_UNITS_MM=2, "
"CANON_UNITS_CM=3"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:328
#, no-wrap
msgid "*queue*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:330
msgid "'(returns integer)' - current size of the trajectory planner queue."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:331
#, no-wrap
msgid "*queue_full*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:333
msgid "'(returns boolean)' - the trajectory planner queue is full."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:334
#, no-wrap
msgid "*rapidrate*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:336
msgid "'(returns float)' - rapid override scale."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:337
#, no-wrap
msgid "*read_line*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:339
msgid ""
"'(returns integer)' - line the RS274NGC interpreter is currently reading."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:340
#, no-wrap
msgid "*rotation_xy*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:342
msgid "'(returns float)' - current XY rotation angle around Z axis."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:343
#, no-wrap
msgid "*settings*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:348
msgid ""
"'(returns tuple of floats)' - current interpreter settings. settings[0] = "
"sequence number, settings[1] = feed rate, settings[2] = speed, settings[3] = "
"`G64 P` blend tolerance, settings[4] = `G64 Q` naive CAM tolerance."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:349
#, no-wrap
msgid "*spindle*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:352
msgid ""
"' (returns tuple of dicts) ' - returns the current spindle status, see <<sec:"
"the-spindle-dictionary, The spindle dictionary>>"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:353
#, no-wrap
msgid "*spindles*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:355
msgid ""
"'(returns integer)' - number of spindles. Reflects [TRAJ]SPINDLES INI value."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:356
#, no-wrap
msgid "*state*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:359
msgid ""
"'(returns integer)' - current command execution status. One of RCS_DONE, "
"RCS_EXEC, RCS_ERROR."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:360
#, no-wrap
msgid "*task_mode*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:363
msgid ""
"'(returns integer)' - current task mode. one of MODE_MDI, MODE_AUTO, "
"MODE_MANUAL."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:364
#, no-wrap
msgid "*task_paused*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:366
msgid "'(returns integer)' - task paused flag."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:367
#, no-wrap
msgid "*task_state*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:370
msgid ""
"'(returns integer)' - current task state. one of STATE_ESTOP, "
"STATE_ESTOP_RESET, STATE_ON, STATE_OFF."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:371
#, no-wrap
msgid "*tool_in_spindle*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:373
msgid "'(returns integer)' - current tool number."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:374
#, no-wrap
msgid "*tool_from_pocket*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:376
msgid ""
"'(returns integer)' - pocket number for the currently loaded tool (0 if no "
"tool loaded)."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:377
#, no-wrap
msgid "*tool_offset*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:379
msgid "'(returns tuple of floats)' - offset values of the current tool."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:380
#, no-wrap
msgid "*tool_table*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:385
msgid ""
"'(returns tuple of tool_results)' - list of tool entries. Each entry is a "
"sequence of the following fields: id, xoffset, yoffset, zoffset, aoffset, "
"boffset, coffset, uoffset, voffset, woffset, diameter, frontangle, "
"backangle, orientation. The id and orientation are integers and the rest are "
"floats."
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:398
#, no-wrap
msgid ""
"#!/usr/bin/env python3\n"
"# -*- coding: utf-8 -*-\n"
"import linuxcnc\n"
"s = linuxcnc.stat()\n"
"s.poll()\n"
"# to find the loaded tool information it is in tool table index 0\n"
"if s.tool_table[0].id != 0: # a tool is loaded\n"
"    print(s.tool_table[0].zoffset)\n"
"else:\n"
"    print(\"No tool loaded.\")\n"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:400 src/config/python-interface.adoc:421
#: src/config/python-interface.adoc:509
#, no-wrap
msgid "*velocity*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:402
msgid ""
"'(returns float)' - This property is defined, but it does not have a useful "
"interpretation."
msgstr ""

#. type: Title ===
#: src/config/python-interface.adoc:404
#, no-wrap
msgid "The `axis` dictionary"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:412
msgid ""
"The axis configuration and status values are available through a list of per-"
"axis dictionaries. Here's an example how to access an attribute of a "
"particular axis: Note that many properties that were formerly in the `axis` "
"dictionary are now in the `joint` dictionary, because on nontrivial "
"kinematics machines these items (such as backlash) are not the properties of "
"an axis."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:413 src/config/python-interface.adoc:478
#, no-wrap
msgid "*max_position_limit*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:416
msgid ""
"'(returns float)' - maximum limit (soft limit) for axis motion, in machine "
"units.configuration parameter, reflects [JOINT_n]MAX_LIMIT."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:417 src/config/python-interface.adoc:491
#, no-wrap
msgid "*min_position_limit*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:420
msgid ""
"'(returns float)' - minimum limit (soft limit) for axis motion, in machine "
"units.configuration parameter, reflects [JOINT_n]MIN_LIMIT."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:423 src/config/python-interface.adoc:511
msgid "'(returns float)' - current velocity."
msgstr ""

#. type: Title ===
#: src/config/python-interface.adoc:425
#, no-wrap
msgid "The `joint` dictionary"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:435
#, no-wrap
msgid ""
"#!/usr/bin/env python3\n"
"# -*- coding: utf-8 -*-\n"
"import linuxcnc\n"
"s = linuxcnc.stat()\n"
"s.poll()\n"
"print(\"Joint 1 homed: \", s.joint[1][\"homed\"])\n"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:438
msgid "For each joint, the following dictionary keys are available:"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:439
#, no-wrap
msgid "*backlash*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:441
msgid ""
"'(returns float)' - Backlash in machine units. configuration parameter, "
"reflects [JOINT_n]BACKLASH."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:444
msgid "'(returns integer)' - non-zero means enabled."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:445
#, no-wrap
msgid "*fault*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:447
msgid "'(returns integer)' - non-zero means axis amp fault."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:448
#, no-wrap
msgid "*ferror_current*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:450
msgid "'(returns float)' - current following error."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:451
#, no-wrap
msgid "*ferror_highmark*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:453
msgid "'(returns float)' - magnitude of max following error."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:456
msgid "'(returns integer)' - non-zero means has been homed."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:457
#, no-wrap
msgid "*homing*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:459
msgid "'(returns integer)' - non-zero means homing in progress."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:462
msgid "'(returns integer)' - non-zero means in position."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:463
#, no-wrap
msgid "*input*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:465
msgid "'(returns float)' - current input position."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:466
#, no-wrap
msgid "*jointType*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:470
msgid ""
"'(returns integer)' - type of axis configuration parameter, reflects "
"[JOINT_n]TYPE. LINEAR=1, ANGULAR=2. See <<sub:ini:sec:axis-letter, Joint INI "
"configuration>> for details."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:471
#, no-wrap
msgid "*max_ferror*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:474
msgid ""
"'(returns float)' - maximum following error. configuration parameter, "
"reflects [JOINT_n]FERROR."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:475
#, no-wrap
msgid "*max_hard_limit*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:477
msgid "'(returns integer)' - non-zero means max hard limit exceeded."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:481
msgid ""
"'(returns float)' - maximum limit (soft limit) for joint motion, in machine "
"units. configuration parameter, reflects [JOINT_n]MAX_LIMIT."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:482
#, no-wrap
msgid "*max_soft_limit*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:484
msgid "non-zero means `max_position_limit` was exceeded, int"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:485
#, no-wrap
msgid "*min_ferror*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:487
msgid ""
"'(returns float)' - configuration parameter, reflects [JOINT_n]MIN_FERROR."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:488
#, no-wrap
msgid "*min_hard_limit*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:490
msgid "'(returns integer)' - non-zero means min hard limit exceeded."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:494
msgid ""
"'(returns float)' - minimum limit (soft limit) for joint motion, in machine "
"units. configuration parameter, reflects [JOINT_n]MIN_LIMIT."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:495
#, no-wrap
msgid "*min_soft_limit*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:497
msgid "'(returns integer)' - non-zero means `min_position_limit` was exceeded."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:498
#, no-wrap
msgid "*output*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:500
msgid "'(returns float)' - commanded output position."
msgstr ""

#. type: Block title
#: src/config/python-interface.adoc:501 src/gui/panelui.adoc:256
#, no-wrap
msgid "*override_limits*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:503
msgid "'(returns integer)' - non-zero means limits are overridden."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:504
#, no-wrap
msgid "*units*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:508
#, no-wrap
msgid ""
"'(returns float)' - joint units per mm, or per degree for angular joints.\n"
"(joint units are the same as machine units, unless set otherwise by the configuration parameter [JOINT_n]UNITS)"
msgstr ""

#. type: Title ==
#: src/config/python-interface.adoc:513
#, no-wrap
msgid "The `spindle` dictionary"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:515
#, no-wrap
msgid "*brake*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:517
msgid "'(returns integer)' - value of the spindle brake flag."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:518
#, no-wrap
msgid "*direction*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:520
msgid ""
"'(returns integer)' - rotational direction of the spindle. forward=1, "
"reverse=-1."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:523
msgid "'(returns integer)' - value of the spindle enabled flag."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:525
msgid "(not currently implemented)"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:526
#, no-wrap
msgid "*increasing*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:528
msgid "'(returns integer)' - unclear."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:529
#, no-wrap
msgid "*orient_fault*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:530 src/config/python-interface.adoc:532
msgid "'(returns integer)'"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:531
#, no-wrap
msgid "*orient_state*"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:533
#, no-wrap
msgid "*override*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:535
msgid "'(returns float)' - spindle speed override scale."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:536
#, no-wrap
msgid "*override_enabled*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:538
msgid "'(returns boolean)' - value of the spindle override enabled flag."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:539
#, no-wrap
msgid "*speed*"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:542
msgid ""
"'(returns float)' - spindle speed value, rpm, > 0: clockwise, < 0: "
"counterclockwise."
msgstr ""

#. type: Title ==
#: src/config/python-interface.adoc:543
#, no-wrap
msgid "Preparing to send commands"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:547
msgid ""
"Some commands can always be sent, regardless of mode and state; for "
"instance, the `linuxcnc.command.abort()` method can always be called."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:550
msgid ""
"Other commands may be sent only in appropriate state, and those tests can be "
"a bit tricky. For instance, an MDI command can be sent only if:"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:552
msgid "ESTOP has not been triggered, and"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:553
msgid "the machine is turned on and"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:554
msgid "the axes are homed and"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:555
msgid "the interpreter is not running and"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:556
msgid "the mode is set to `MDI mode`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:559
msgid ""
"so an appropriate test before sending an MDI command through `linuxcnc."
"command.mdi()` could be:"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:567
#, no-wrap
msgid ""
"#!/usr/bin/env python3\n"
"# -*- coding: utf-8 -*-\n"
"import linuxcnc\n"
"s = linuxcnc.stat()\n"
"c = linuxcnc.command()\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:571
#, no-wrap
msgid ""
"def ok_for_mdi():\n"
"    s.poll()\n"
"    return not s.estop and s.enabled and (s.homed.count(1) == s.joints) and (s.interp_state == linuxcnc.INTERP_IDLE)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:576
#, no-wrap
msgid ""
"if ok_for_mdi():\n"
"    c.mode(linuxcnc.MODE_MDI)\n"
"    c.wait_complete() # wait until mode switch executed\n"
"    c.mdi(\"G0 X10 Y20 Z30\")\n"
msgstr ""

#. type: Title ==
#: src/config/python-interface.adoc:578
#, no-wrap
msgid "Sending commands through `linuxcnc.command`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:581
msgid "Before sending a command, initialize a command channel like so:"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:588
#, no-wrap
msgid ""
"#!/usr/bin/env python3\n"
"# -*- coding: utf-8 -*-\n"
"import linuxcnc\n"
"c = linuxcnc.command()\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:591
#, no-wrap
msgid ""
"# Usage examples for some of the commands listed below:\n"
"c.abort()\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:596
#, no-wrap
msgid ""
"c.auto(linuxcnc.AUTO_RUN, program_start_line)\n"
"c.auto(linuxcnc.AUTO_STEP)\n"
"c.auto(linuxcnc.AUTO_PAUSE)\n"
"c.auto(linuxcnc.AUTO_RESUME)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:599
#, no-wrap
msgid ""
"c.brake(linuxcnc.BRAKE_ENGAGE)\n"
"c.brake(linuxcnc.BRAKE_RELEASE)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:602
#, no-wrap
msgid ""
"c.flood(linuxcnc.FLOOD_ON)\n"
"c.flood(linuxcnc.FLOOD_OFF)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:604
#, no-wrap
msgid "c.home(2)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:608
#, no-wrap
msgid ""
"c.jog(linuxcnc.JOG_STOP,        jjogmode, joint_num_or_axis_index)\n"
"c.jog(linuxcnc.JOG_CONTINUOUS,  jjogmode, joint_num_or_axis_index, velocity)\n"
"c.jog(linuxcnc.JOG_INCREMENT,   jjogmode, joint_num_or_axis_index, velocity, increment)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:610
#, no-wrap
msgid "c.load_tool_table()\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:612
#, no-wrap
msgid "c.maxvel(200.0)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:614
#, no-wrap
msgid "c.mdi(\"G0 X10 Y20 Z30\")\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:617
#, no-wrap
msgid ""
"c.mist(linuxcnc.MIST_ON)\n"
"c.mist(linuxcnc.MIST_OFF)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:621
#, no-wrap
msgid ""
"c.mode(linuxcnc.MODE_MDI)\n"
"c.mode(linuxcnc.MODE_AUTO)\n"
"c.mode(linuxcnc.MODE_MANUAL)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:623
#, no-wrap
msgid "c.override_limits()\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:626
#, no-wrap
msgid ""
"c.program_open(\"foo.ngc\")\n"
"c.reset_interpreter()\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:628
#, no-wrap
msgid "c.tool_offset(toolno, z_offset,  x_offset, diameter, frontangle, backangle, orientation)\n"
msgstr ""

#. type: Title ===
#: src/config/python-interface.adoc:630
#, no-wrap
msgid "`linuxcnc.command` attributes"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:632
#, no-wrap
msgid "`serial`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:634
msgid "the current command serial number"
msgstr ""

#. type: Title ===
#: src/config/python-interface.adoc:635
#, no-wrap
msgid "`linuxcnc.command` methods:"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:637
#, no-wrap
msgid "`abort()`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:639
msgid "send EMC_TASK_ABORT message."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:640
#, no-wrap
msgid "`auto(int[, int])`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:642
msgid "run, step, pause or resume a program."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:643
#, no-wrap
msgid "`brake(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:645
msgid "engage or release spindle brake."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:646
#, no-wrap
msgid "`debug(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:648
msgid "set debug level via EMC_SET_DEBUG message."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:649
#, no-wrap
msgid "`display_msg(string)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:651
msgid "sends a operator display message to the screen. (max 254 characters)"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:652
#, no-wrap
msgid "`error_msg(string)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:654
msgid "sends a operator error message to the screen. (max 254 characters)"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:655
#, no-wrap
msgid "`feedrate(float)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:657
msgid "set the feedrate."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:658
#, no-wrap
msgid "`flood(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:660
msgid "turn on/off flooding."
msgstr ""

#. type: Title ==
#: src/config/python-interface.adoc:660 src/config/python-interface.adoc:672
#: src/config/python-interface.adoc:701 src/gcode/overview.adoc:195
#: src/gui/pyvcp.adoc:273 src/hal/basic-hal.adoc:389 src/hal/basic-hal.adoc:421
#: src/hal/basic-hal.adoc:451 src/hal/basic-hal.adoc:483 src/hal/comp.adoc:113
#, no-wrap
msgid "Syntax"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:664
#, no-wrap
msgid ""
"flood(command) +\n"
"flood(linuxcnc.FLOOD_ON) +\n"
"flood(linuxcnc.FLOOD_OFF)\n"
msgstr ""

#. type: Title ==
#: src/config/python-interface.adoc:664 src/config/python-interface.adoc:705
#: src/hal/halmodule.adoc:360
#, no-wrap
msgid "Constants"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:667
#, no-wrap
msgid ""
"FLOOD_ON +\n"
"FLOOD_OFF\n"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:668
#, no-wrap
msgid "`home(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:670
msgid "home a given joint."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:671
#, no-wrap
msgid "`jog(command-constant, bool, int[, float[, float]])`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:677
#, no-wrap
msgid ""
"jog(command,                 jjogmode, joint_num_or_axis_index, velocity[, distance]) +\n"
"jog(linuxcnc.JOG_STOP,       jjogmode, joint_num_or_axis_index) +\n"
"jog(linuxcnc.JOG_CONTINUOUS, jjogmode, joint_num_or_axis_index, velocity) +\n"
"jog(linuxcnc.JOG_INCREMENT,  jjogmode, joint_num_or_axis_index, velocity, distance)\n"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:677
#, no-wrap
msgid "Command Constants"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:681
#, no-wrap
msgid ""
"linuxcnc.JOG_STOP +\n"
"linuxcnc.JOG_CONTINUOUS +\n"
"linuxcnc.JOG_INCREMENT\n"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:681
#, no-wrap
msgid "jjogmode"
msgstr ""

#. type: Table
#: src/config/python-interface.adoc:682 src/hal/basic-hal.adoc:411
#: src/hal/basic-hal.adoc:412 src/hal/basic-hal.adoc:413
#: src/hal/basic-hal.adoc:414 src/hal/basic-hal.adoc:442
#: src/hal/basic-hal.adoc:444 src/hal/basic-hal.adoc:472
#: src/hal/basic-hal.adoc:473 src/hal/basic-hal.adoc:474
#: src/hal/basic-hal.adoc:475 src/hal/basic-hal.adoc:504
#: src/hal/basic-hal.adoc:505 src/hal/basic-hal.adoc:506
#: src/hal/basic-hal.adoc:507
#, no-wrap
msgid "True"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:683
msgid "request individual joint jog (requires teleop_enable(0))"
msgstr ""

#. type: Table
#: src/config/python-interface.adoc:683 src/hal/basic-hal.adoc:410
#: src/hal/basic-hal.adoc:411 src/hal/basic-hal.adoc:412
#: src/hal/basic-hal.adoc:413 src/hal/basic-hal.adoc:443
#: src/hal/basic-hal.adoc:472 src/hal/basic-hal.adoc:474
#: src/hal/basic-hal.adoc:475 src/hal/basic-hal.adoc:476
#: src/hal/basic-hal.adoc:504 src/hal/basic-hal.adoc:506
#: src/hal/basic-hal.adoc:507 src/hal/basic-hal.adoc:508
#, no-wrap
msgid "False"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:684
msgid "request axis Cartesian coordinate jog (requires teleop_enable(1))"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:684
#, no-wrap
msgid "joint_num_or_axis_index"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:685
#, no-wrap
msgid "For joint jog (jjogmode=1)"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:686 src/gui/gladevcp.adoc:1560
#, no-wrap
msgid "joint_number"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:686
#, no-wrap
msgid "For axis Cartesian coordinate jog (jjogmode=0)"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:690
#, no-wrap
msgid ""
"zero-based index of the axis coordinate with respect to\n"
"the known coordinate letters XYZABCUVW\n"
"(x=>0,y=>1,z=>2,a=>3,b=>4,c=>5,u=>6,v=>7,w=>8)\n"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:691
#, no-wrap
msgid "`load_tool_table()`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:693
msgid "reload the tool table."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:694
#, no-wrap
msgid "`maxvel(float)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:696
msgid "set maximum velocity"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:697
#, no-wrap
msgid "`mdi(string)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:699
msgid "send an MDI command. Maximum 254 chars."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:700
#, no-wrap
msgid "`mist(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:701
msgid "turn on/off mist. +"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:705
#, no-wrap
msgid ""
"mist(command) +\n"
"mist(linuxcnc.MIST_ON) +\n"
"mist(linuxcnc.MIST_OFF) +\n"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:708
#, no-wrap
msgid ""
"MIST_ON +\n"
"MIST_OFF\n"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:709
#, no-wrap
msgid "`mode(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:711
msgid "set mode (MODE_MDI, MODE_MANUAL, MODE_AUTO)."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:712
#, no-wrap
msgid "`override_limits()`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:714
msgid "set the override axis limits flag."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:715
#, no-wrap
msgid "`program_open(string)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:717
msgid "open an NGC file."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:718
#, no-wrap
msgid "`rapidrate()`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:720
msgid "set rapid override factor"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:721
#, no-wrap
msgid "`reset_interpreter()`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:723
msgid "reset the RS274NGC interpreter"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:724
#, no-wrap
msgid "`set_adaptive_feed(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:726
msgid "set adaptive feed flag"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:727
#, no-wrap
msgid "`set_analog_output(int, float)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:729
msgid "set analog output pin to value"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:730
#, no-wrap
msgid "`set_block_delete(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:732
msgid "set block delete flag"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:733
#, no-wrap
msgid "`set_digital_output(int, int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:735
msgid "set digital output pin to value"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:736
#, no-wrap
msgid "`set_feed_hold(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:738
msgid "set feed hold on/off"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:739
#, no-wrap
msgid "`set_feed_override(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:741
msgid "set feed override on/off"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:742
#, no-wrap
msgid "`set_max_limit(int, float)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:744
msgid "set max position limit for a given axis"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:745
#, no-wrap
msgid "`set_min_limit()`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:747
msgid "set min position limit for a given axis"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:748
#, no-wrap
msgid "`set_optional_stop(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:750
msgid "set optional stop on/off"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:751
#, no-wrap
msgid "`set_spindle_override(int [, int])`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:753
msgid "set spindle override enabled. Defaults to spindle 0."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:754
#, no-wrap
msgid "`spindle(direction: int, speed: float=0, spindle: int=0, wait_for_speed: int=0)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:757
msgid ""
"Direction: [SPINDLE_FORWARD, SPINDLE_REVERSE, SPINDLE_OFF, SPINDLE_INCREASE, "
"SPINDLE_DECREASE, or SPINDLE_CONSTANT]"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:758
msgid "Speed: Speed in RPM, defaults to 0."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:759
msgid "Spindle: Spindle number to command defaults to 0."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:760
msgid ""
"Wait_for_speed: if 1 motion will wait for speed before continuing, defaults "
"to not."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:763
msgid ""
"MDI commands will ignore this. \"S1000\" after this will turn the spindle "
"off."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:764
#, no-wrap
msgid "`text_msg(string)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:766
msgid "sends a operator text message to the screen. (max 254 characters)"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:772
#, no-wrap
msgid ""
"#!/usr/bin/env python3\n"
"import linuxcnc\n"
"c = linuxcnc.command()\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:775
#, no-wrap
msgid ""
"# Increase speed of spindle 0 by 100rpm. Spindle must be on first.\n"
"c.spindle(linuxcnc.INCREASE)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:778
#, no-wrap
msgid ""
"# Increase speed of spindle 2 by 100rpm. Spindle must be on first.\n"
"c.spindle(linuxcnc.SPINDLE_INCREASE, 2)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:781
#, no-wrap
msgid ""
"# Set speed of spindle 0 to 1024 rpm.\n"
"c.spindle.(linuxcnc.SPINDLE_FORWARD, 1024)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:784
#, no-wrap
msgid ""
"# Set speed of spindle 1 to -666 rpm.\n"
"c.spindle.(linuxcnc.SPINDLE_REVERSE, 666, 1)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:787
#, no-wrap
msgid ""
"# Stop spindle 0.\n"
"c.spindle.(linuxcnc.SPINDLE_OFF)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:790
#, no-wrap
msgid ""
"# Stop spindle 0 explicitly.\n"
"c.spindle.(linuxcnc.SPINDLE_OFF, 0)\n"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:792
#, no-wrap
msgid "`spindleoverride(float [, int])`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:794
msgid "Set spindle override factor. Defaults to spindle 0."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:795
#, no-wrap
msgid "`state(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:797
msgid ""
"Set the machine state. Machine state should be STATE_ESTOP, "
"STATE_ESTOP_RESET, STATE_ON, or STATE_OFF."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:798
#, no-wrap
msgid "`task_plan_sync()`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:801
msgid ""
"On completion of this call, the VAR file on disk is updated with live values "
"from the interpreter."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:802
#, no-wrap
msgid "`teleop_enable(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:804
msgid "Enable/disable teleop mode (disable for joint jogging)."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:805
#, no-wrap
msgid "`tool_offset(int, float, float, float, float, float, int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:807
msgid "Set the tool offset. See usage example above."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:808
#, no-wrap
msgid "`traj_mode(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:811
msgid ""
"Set trajectory mode. Mode is one of MODE_FREE, MODE_COORD, or MODE_TELEOP."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:812
#, no-wrap
msgid "`unhome(int)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:814
msgid "Unhome a given joint."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:815
#, no-wrap
msgid "`wait_complete([float])`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:820
msgid ""
"Wait for completion of the last command sent. If timeout in seconds not "
"specified, default is 5 seconds. Return -1 if timed out, return RCS_DONE or "
"RCS_ERROR according to command execution status."
msgstr ""

#. type: Title ==
#: src/config/python-interface.adoc:821
#, no-wrap
msgid "Reading the error channel"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:825
msgid ""
"To handle error messages, connect to the error channel and periodically "
"poll() it."
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:832
msgid ""
"Note that the NML channel for error messages has a queue (other than the "
"command and status channels), which means that the first consumer of an "
"error message deletes that message from the queue; whether your another "
"error message consumer (e.g. Axis)  will 'see' the message is dependent on "
"timing. It is recommended to have just one error channel reader task in a "
"setup."
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:839
#, no-wrap
msgid ""
"#!/usr/bin/env python3\n"
"# -*- coding: utf-8 -*-\n"
"import linuxcnc\n"
"e = linuxcnc.error_channel()\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:841
#, no-wrap
msgid "error = e.poll()\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:849
#, no-wrap
msgid ""
"if error:\n"
"    kind, text = error\n"
"    if kind in (linuxcnc.NML_ERROR, linuxcnc.OPERATOR_ERROR):\n"
"        typus = \"error\"\n"
"    else:\n"
"        typus = \"info\"\n"
"    print(typus, text)\n"
msgstr ""

#. type: Title ==
#: src/config/python-interface.adoc:852
#, no-wrap
msgid "Reading INI file values"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:856
msgid ""
"Here's an example for reading values from an INI file through the `linuxcnc."
"ini` object:"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:863
#, no-wrap
msgid ""
"#!/usr/bin/env python3\n"
"# -*- coding: utf-8 -*-\n"
"# run as:\n"
"# python3 ini-example.py ~/emc2-dev/configs/sim/axis/axis_mm.ini\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:866
#, no-wrap
msgid ""
"import sys\n"
"import linuxcnc\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:868
#, no-wrap
msgid "inifile = linuxcnc.ini(sys.argv[1])\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:871
#, no-wrap
msgid ""
"# inifile.find() returns None if the key wasn't found - the\n"
"# following idiom is useful for setting a default value:\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:874
#, no-wrap
msgid ""
"machine_name = inifile.find(\"EMC\", \"MACHINE\") or \"unknown\"\n"
"print(\"machine name: \", machine_name)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:877
#, no-wrap
msgid ""
"# inifile.findall() returns a list of matches, or an empty list\n"
"# if the key wasn't found:\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:880
#, no-wrap
msgid ""
"extensions = inifile.findall(\"FILTER\", \"PROGRAM_EXTENSION\")\n"
"print(\"extensions: \", extensions)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:885
#, no-wrap
msgid ""
"# override default NML file by INI parameter if given\n"
"nmlfile = inifile.find(\"EMC\", \"NML_FILE\")\n"
"if nmlfile:\n"
"    linuxcnc.nmlfile = os.path.join(os.path.dirname(sys.argv[1]), nmlfile)\n"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:888
msgid "Or for the same INI file as LinuxCNC:"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:895
#, no-wrap
msgid ""
"#!/usr/bin/env python3\n"
"# -*- coding: utf-8 -*-\n"
"# run as:\n"
"# python3 ini-example2.py\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:897
#, no-wrap
msgid "import linuxcnc\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:900
#, no-wrap
msgid ""
"stat = linuxcnc.stat()\n"
"stat.poll()\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:902
#, no-wrap
msgid "inifile = linuxcnc.ini(stat.ini_filename)\n"
msgstr ""

#. type: delimited block -
#: src/config/python-interface.adoc:904
#, no-wrap
msgid "# See example above for usage of 'inifile' object\n"
msgstr ""

#. type: Title ==
#: src/config/python-interface.adoc:906
#, no-wrap
msgid "The `linuxcnc.positionlogger` type"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:910
msgid ""
"Some usage hints can be gleaned from `src/emc/usr_intf/gremlin/gremlin.py`."
msgstr ""

#. type: Title ===
#: src/config/python-interface.adoc:911
#, no-wrap
msgid "members"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:913
#, no-wrap
msgid "`npts`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:915
msgid "number of points."
msgstr ""

#. type: Title ===
#: src/config/python-interface.adoc:916
#, no-wrap
msgid "methods"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:918
#, no-wrap
msgid "`start(float)`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:920
msgid "start the position logger and run every ARG seconds"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:921
#, no-wrap
msgid "`clear()`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:923
msgid "clear the position logger"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:924
#, no-wrap
msgid "`stop()`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:926
msgid "stop the position logger"
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:927
#, no-wrap
msgid "`call()`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:929
msgid "Plot the backplot now."
msgstr ""

#. type: Labeled list
#: src/config/python-interface.adoc:930
#, no-wrap
msgid "`last([int])`"
msgstr ""

#. type: Plain text
#: src/config/python-interface.adoc:932
msgid "Return the most recent point on the plot or None"
msgstr ""

#. type: Title =
#: src/config/stepconf.adoc:5
#, no-wrap
msgid "Stepper Configuration Wizard(((Stepper Configuration Wizard)))"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:11
msgid ""
"LinuxCNC is capable of controlling a wide range of machinery using many "
"different hardware interfaces."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:16
msgid ""
"StepConf is a program that generates configuration files for LinuxCNC for a "
"specific class of CNC machine: those that are controlled via a 'standard "
"parallel port', and controlled by signals of type 'step & direction'."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:18
msgid "StepConf is installed when you install LinuxCNC and is in the CNC menu."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:24
msgid ""
"StepConf places a file in the linuxcnc/config directory to store the choices "
"for each configuration you create.  When you change something, you need to "
"pick the file that matches your configuration name.  The file extension is ."
"stepconf."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:26
msgid ""
"The StepConf Wizard works best with at least 800 x 600 screen resolution."
msgstr ""

#. type: Title ==
#: src/config/stepconf.adoc:27
#, no-wrap
msgid "Start Page"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/stepconf.adoc:29 src/config/stepconf.adoc:30
#, no-wrap
msgid "StepConf Entry Page"
msgstr ""

#. type: Target for macro image
#: src/config/stepconf.adoc:30
#, no-wrap
msgid "images/stepconf-start_en.png"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:33
msgid "The three first radio buttons are self-explanatory:"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:35
msgid "'Create New' - Creates a fresh configuration."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:40
msgid ""
"'Modify' - Modify an existing configuration.  After selecting this a file "
"picker pops up so you can select the .stepconf file for modification.  If "
"you made any modifications to the main HAL or the INI file these will be "
"lost.  Modifications to custom.hal and custom_postgui.hal will not be "
"changed by the StepConf Wizard.  StepConf will highlight the lastconf that "
"was built."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:43
msgid ""
"'Import' - Import a Mach configuration file and attempt to convert it to a "
"LinuxCNC config file.  After the import, you will go though the pages of "
"StepConf to confirm/modify the entries.  The original mach XML file will not "
"be changed."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:45
msgid ""
"These next options will be recorded in a preference file for the next run of "
"StepConf."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:47
msgid ""
"'Create Desktop Shortcut' - This will place a link on your desktop to the "
"files."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:48
msgid ""
"'Create Desktop Launcher' - This will place a launcher on your desktop to "
"start your application."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:49 src/config/stepconf.adoc:59
msgid ""
"'Create Simulated Hardware' - This allows you to build a config for testing, "
"even if you don't have the actual hardware."
msgstr ""

#. type: Title ==
#: src/config/stepconf.adoc:51
#, no-wrap
msgid "Basic Information"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/stepconf.adoc:54 src/config/stepconf.adoc:55
#, no-wrap
msgid "Basic Information Page"
msgstr ""

#. type: Target for macro image
#: src/config/stepconf.adoc:55
#, no-wrap
msgid "images/stepconf-base_en.png"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:62
msgid ""
"'Machine Name' - (((Machine Name)))  Choose a name for your machine.  Use "
"only uppercase letters, lowercase letters, digits, - and _."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:64
msgid ""
"'Axis Configuration' - (((Axis Configuration)))  Choose XYZ (Mill), XYZA (4-"
"axis mill) or XZ (Lathe)."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:69
msgid ""
"'Machine Units' - (((Machine Units)))  Choose Inch or mm. All subsequent "
"entries will be in the chosen units. Changing this also changes the default "
"values in the Axes section.  If you change this after selecting values in "
"any of the axes sections, they will be over-written by the default values of "
"the selected units."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:75
msgid ""
"'Driver Type' - (((Driver Type)))  If you have one of the stepper drivers "
"listed in the pull down box, choose it.  Otherwise, select 'Other' and find "
"the timing values in your driver's data sheet and enter them as 'nano "
"seconds' in the 'Driver Timing Settings'.  If the data sheet gives a value "
"in microseconds, multiply by 1000.  For example, enter 4.5 µs as 4500 ns."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:79
msgid ""
"A list of some popular drives, along with their timing values, is on the "
"LinuxCNC.org Wiki under http://wiki.linuxcnc.org/cgi-bin/wiki.pl?"
"Stepper_Drive_Timing[Stepper Drive Timing]."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:84
msgid ""
"Additional signal conditioning or isolation such as optocouplers and RC "
"filters on break out boards can impose timing constraints of their own, in "
"addition to those of the driver. You may find it necessary to add some time "
"to the drive requirements to allow for this."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:86
msgid ""
"The LinuxCNC Configuration Selector has configs for Sherline already "
"configured."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:88
msgid ""
"'Step Time' - How long the step pulse is 'on' in nano seconds. If your not "
"sure about this setting a value of 20,000 will work with most drives."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:90
msgid ""
"'Step Space' - Minimum time between step pulses in nano seconds. If your not "
"sure about this setting a value of 20,000 will work with most drives."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:93
msgid ""
"'Direction Hold' - How long the direction pin is held after a change of "
"direction in nanoseconds. If your not sure about this setting a value of "
"20,000 will work with most drives."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:96
msgid ""
"'Direction Setup' - How long before a direction change after the last step "
"pulse in nanoseconds. If your not sure about this setting a value of 20,000 "
"will work with most drives."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:97
msgid ""
"'One / Two Parport' - Select how many parallel port are to be configured."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:101
msgid ""
"'Base Period Maximum Jitter' - (((Base Period Maximum Jitter)))  Enter the "
"result of the Latency Test here.  To run a latency test press the 'Test Base "
"Period Jitter' button. See the <<sec:latency-test,Latency Test>> section for "
"more details."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:104
msgid ""
"'Max Step Rate' -(((Max Step Rate)))  StepConf automatically calculates the "
"Max Step Rate based on the driver characteristics entered and the latency "
"test result."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:107
msgid ""
"'Min Base Period' - (((Min Base Period)))  StepConf automatically determines "
"the Min Base Period based on the driver characteristics entered and latency "
"test result."
msgstr ""

#. type: Title ==
#: src/config/stepconf.adoc:109 src/install/latency-test.adoc:8
#, no-wrap
msgid "Latency Test(((Latency Test)))"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:120
msgid ""
"While the test is running, you should 'abuse' the computer. Move windows "
"around on the screen. Surf the web. Copy some large files around on the "
"disk. Play some music. Run an OpenGL program such as glxgears. The idea is "
"to put the PC through its paces while the latency test checks to see what "
"the worst case numbers are.  Run the test at least a few minutes. The longer "
"you run the test the better it will be at catching events that might occur "
"at less frequent intervals. This is a test for your computer only, so no "
"hardware needs to be connected to run the test."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:123
msgid "Do not attempt run LinuxCNC while the latency test is running."
msgstr ""

#. type: Title ==
#: src/config/stepconf.adoc:124 src/config/stepconf.adoc:125
#: src/config/stepper-quickstart.adoc:12
#, no-wrap
msgid "Latency Test"
msgstr ""

#. type: Target for macro image
#: src/config/stepconf.adoc:125
#, no-wrap
msgid "images/latency-test_en.png"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:132
msgid ""
"Latency is how long it takes the PC to stop what it is doing and respond to "
"an external request. In our case, the request is the periodic 'heartbeat' "
"that serves as a timing reference for the step pulses. The lower the "
"latency, the faster you can run the heartbeat, and the faster and smoother "
"the step pulses will be."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:136
msgid ""
"Latency is far more important than CPU speed. The CPU isn't the only factor "
"in determining latency. Motherboards, video cards, USB ports, SMI issues, "
"and a number of other things can hurt the latency."
msgstr ""

#. type: Block title
#: src/config/stepconf.adoc:137
#, no-wrap
msgid "Troubleshooting SMI Issues (LinuxCNC.org Wiki)"
msgstr ""

#. type: delimited block *
#: src/config/stepconf.adoc:140
msgid "Fixing Realtime problems caused by SMI on Ubuntu"
msgstr ""

#. type: delimited block *
#: src/config/stepconf.adoc:142
msgid "http://wiki.linuxcnc.org/cgi-bin/wiki.pl?FixingSMIIssues"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:147
msgid ""
"The important numbers are the 'max jitter'. In the example above 9075 "
"nanoseconds (ns), or 9.075 microseconds (µs), is the highest jitter.  Record "
"this number, and enter it in the Base Period Maximum Jitter box."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:158
msgid ""
"If your Max Jitter number is less than about 15-20&thinsp;µs "
"(15000-20000&thinsp;ns), the computer should give very nice results with "
"software stepping. If the max latency is more like 30-50&thinsp;µs, you can "
"still get good results, but your maximum step rate might be a little "
"disappointing, especially if you use microstepping or have very fine pitch "
"leadscrews. If the numbers are 100&thinsp;µs or more (100,000&thinsp;ns), "
"then the PC is not a good candidate for software stepping. Numbers over 1 "
"millisecond (1,000,000&thinsp;ns)  mean the PC is not a good candidate for "
"LinuxCNC, regardless of whether you use software stepping or not."
msgstr ""

#. type: Title ==
#: src/config/stepconf.adoc:159
#, no-wrap
msgid "Parallel Port Setup"
msgstr ""

#. type: Block title
#: src/config/stepconf.adoc:161
#, no-wrap
msgid "Parallel Port Setup Page"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/stepconf.adoc:162
#, no-wrap
msgid "Parallel Port 1 Setup Page"
msgstr ""

#. type: Target for macro image
#: src/config/stepconf.adoc:162
#, no-wrap
msgid "images/stepconf-parallel-1_en.png"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:165
msgid ""
"You may specify the address as a hexadecimal (often 0x378) or as linux's "
"default port number (probably 0)"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:168
msgid ""
"For each pin, choose the signal which matches your parallel port pinout.  "
"Turn on the 'invert' check box if the signal is inverted (0V for true/"
"active, 5V for false/inactive)."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:172
msgid ""
"'Output pinout presets' - Automatically set pins 2 through 9 according to "
"the Sherline standard (Direction on pins 2, 4, 6, 8) or the Xylotex standard "
"(Direction on pins 3, 5, 7, 9)."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:173
msgid ""
"'Inputs and Outputs' - If the input or output is not used set the option to "
"'Unused'."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:175
msgid ""
"'External E-Stop' - This can be selected from an input pin drop down box.  A "
"typical E-Stop chain uses all normally closed contacts."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:177
msgid ""
"'Homing & Limit Switches' - These can be selected from an input pin drop "
"down box for most configurations."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:181
msgid ""
"'Charge Pump' - If your driver board requires a charge pump signal select "
"Charge Pump from the drop down list for the output pin you wish to connect "
"to your charge pump input.  The charge pump output is connected to the base "
"thread by StepConf.  The charge pump output will be about 1/2 of the maximum "
"step rate shown on the Basic Machine Configuration page."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:183
msgid ""
"'Plasma Arc Voltage' - If you require a Mesa THCAD to input a plasma arc "
"voltage then select Plasma Arc Voltage from the list of output pins.  This "
"will enable a THCAD page during the setup procedure for the entry of the "
"card parameters."
msgstr ""

#. type: Title ==
#: src/config/stepconf.adoc:184
#, no-wrap
msgid "Parallel Port 2 Setup"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/stepconf.adoc:186 src/config/stepconf.adoc:187
#, no-wrap
msgid "Parallel Port 2 Setup Page"
msgstr ""

#. type: Target for macro image
#: src/config/stepconf.adoc:187
#, no-wrap
msgid "images/stepconf-parallel-2_en.png"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:193
msgid ""
"The second Parallel port (if selected) can be configured and It's pins "
"assigned on this page.  No step and direction signals can be selected.  You "
"may select in or out to maximizes the number of input/output pins that are "
"available.  You may specify the address as a hexadecimal (often 0x378) or as "
"linux's default port number (probably 1)."
msgstr ""

#. type: Title ==
#: src/config/stepconf.adoc:195
#, no-wrap
msgid "Axis Configuration(((Axis Configuration)))"
msgstr ""

#. type: Block title
#: src/config/stepconf.adoc:197
#, no-wrap
msgid "Axis Configuration Screen"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/stepconf.adoc:198
#, no-wrap
msgid "Axis X Configuration Page"
msgstr ""

#. type: Target for macro image
#: src/config/stepconf.adoc:198
#, no-wrap
msgid "images/stepconf-axis-x_en.png"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:203
msgid ""
"'Motor Steps Per Revolution' - (((Motor Steps Per Revolution)))  The number "
"of full steps per motor revolution.  If you know how many degrees per step "
"the motor is (e.g., 1.8 degree), then divide 360 by the degrees per step to "
"find the number of steps per motor revolution."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:204
msgid ""
"'Driver Microstepping' - (((Driver Microstepping))) The amount of "
"microstepping performed by the driver. Enter '2' for half-stepping."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:206
msgid ""
"'Pulley Ratio' - (((Pulley Ratio)))  If your machine has pulleys between the "
"motor and leadscrew, enter the ratio here.  If not, enter '1:1'."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:210
msgid ""
"'Leadscrew Pitch' - (((Leadscrew Pitch))) Enter the pitch of the leadscrew "
"here.  If you chose 'Inch' units, enter the number of threads per inch.  If "
"you chose 'mm' units, enter the number of millimeters per revolution (e.g., "
"enter 2 for 2mm/rev).  If the machine travels in the wrong direction, enter "
"a negative number here instead of a positive number, or invert the direction "
"pin for the axis."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:212
msgid ""
"'Maximum Velocity' - (((Maximum Velocity)))  Enter the maximum velocity for "
"the axis in units per second."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:214
msgid ""
"'Maximum Acceleration' - (((Maximum Acceleration)))  The correct values for "
"these items can only be determined through experimentation.  See <<sub:"
"finding-maximum-velocity,Finding Maximum Velocity>> to set the speed and "
"<<sub:finding-maximum-acceleration,Finding Maximum Acceleration>> to set the "
"acceleration."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:216
msgid ""
"'Home Location' - (((Home Location)))  The position the machine moves to "
"after completing the homing procedure for this axis.  For machines without "
"home switches, this is the location the operator manually moves the machine "
"to before pressing the Home button.  If you combine the home and limit "
"switches you must move off of the switch to the home position or you will "
"get a joint limit error."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:219
msgid ""
"'Table Travel' - (((Table Travel)))  The range of travel for that axis based "
"on the machine origin.  The home location must be inside the 'Table Travel' "
"and not equal to one of the Table Travel values."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:221
msgid ""
"'Home Switch Location' - (((Home Switch Location)))  The location at which "
"the home switch trips or releases relative to the machine origin.  This item "
"and the two below only appear when Home Switches were chosen in the Parallel "
"Port Pinout.  If you combine home and limit switches the home switch "
"location can not be the same as the home position or you will get a joint "
"limit error."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:222
msgid ""
"'Home Search Velocity' - (((Home Search Velocity))) The velocity to use when "
"searching for the home switch.  If the switch is near the end of travel, "
"this velocity must be chosen so that the axis can decelerate to a stop "
"before hitting the end of travel.  If the switch is only closed for a short "
"range of travel (instead of being closed from its trip point to one end of "
"travel), this velocity must be chosen so that the axis can decelerate to a "
"stop before the switch opens again, and homing must always be started from "
"the same side of the switch.  If the machine moves the wrong direction at "
"the beginning of the homing procedure, negate the value of 'Home Search "
"Velocity'."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:225
msgid ""
"'Home Latch Direction' - (((Home Latch Direction))) Choose 'Same' to have "
"the axis back off the switch, then approach it again at a very low speed.  "
"The second time the switch closes, the home position is set.  Choose "
"'Opposite' to have the axis back off the switch and when the switch opens, "
"the home position is set."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:227
msgid ""
"'Time to accelerate to max speed' - (((Time to accelerate to max speed)))  "
"Time to reach maximum speed calculated from 'Max Acceleration' and 'Max "
"Velocity'."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:229
msgid ""
"'Distance to accelerate to max speed' - (((Distance to accelerate to max "
"speed)))  Distance to reach maximum speed from a standstill."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:233
msgid ""
"'Pulse rate at max speed' - (((Pulse rate at max speed)))  Information "
"computed based on the values entered above.  The greatest 'Pulse rate at max "
"speed' determines the 'BASE_PERIOD'.  Values above 20000Hz may lead to slow "
"response time or even lockups (the fastest usable pulse rate varies from "
"computer to computer)"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:235
msgid ""
"'Axis SCALE' - The number that will be used in the INI file [SCALE] "
"setting.  This is how many steps per user unit."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:237
msgid ""
"'Test this axis' - (((Test this axis)))  This will open a window to allow "
"testing for each axis. This can be used after filling out all the "
"information for this axis."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/stepconf.adoc:238 src/config/stepconf.adoc:239
#, no-wrap
msgid "Axis Test"
msgstr ""

#. type: Target for macro image
#: src/config/stepconf.adoc:239
#, no-wrap
msgid "images/stepconf-x-test_en.png"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:243
msgid ""
"Test this axis is a basic tester that only outputs step and direction "
"signals to try different values for acceleration and velocity."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:248
msgid ""
"In order to use test this axis you have to manually enable the axis if this "
"is required. If your driver has a charge pump you will have to bypass it.  "
"Test this axis does not react to limit switch inputs. Use with caution."
msgstr ""

#. type: Title ===
#: src/config/stepconf.adoc:250
#, no-wrap
msgid "Finding Maximum Velocity(((Finding Maximum Velocity)))"
msgstr ""

#.  comment out latexmath until a fix is found for the html docs
#. type: Plain text
#: src/config/stepconf.adoc:253
msgid "Begin with a low Acceleration"
msgstr ""

#.  (e.g., latexmath:[ 2 in/s^2 ] or latexmath:[ 50 mm/s^2 ])
#. type: Plain text
#: src/config/stepconf.adoc:260
msgid ""
"(for example, *+2 inches/s^2^+* or *+50 mm/s^2^+*)  and the velocity you "
"hope to attain.  Using the buttons provided, jog the axis to near the center "
"of travel.  Take care because with a low acceleration value, it can take a "
"surprising distance for the axis to decelerate to a stop."
msgstr ""

#.  latexmath:[ d = 0.5 * v * v/a ]
#. type: Plain text
#: src/config/stepconf.adoc:270
msgid ""
"After gauging the amount of travel available, enter a safe distance in Test "
"Area, keeping in mind that after a stall the motor may next start to move in "
"an unexpected direction.  Then click Run.  The machine will begin to move "
"back and forth along this axis.  In this test, it is important that the "
"combination of Acceleration and Test Area allow the machine to reach the "
"selected Velocity and 'cruise' for at least a short distance -- the more "
"distance, the better this test is.  The formula *+d = 0.5 * v * v/a+*"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:276
msgid ""
"gives the minimum distance required to reach the specified velocity with the "
"given acceleration.  If it is convenient and safe to do so, push the table "
"against the direction of motion to simulate cutting forces.  If the machine "
"stalls, reduce the speed and start the test again."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:281
msgid ""
"If the machine did not obviously stall, click the 'Run' button off. The axis "
"now returns to the position where it started. If the position is incorrect, "
"then the axis stalled or lost steps during the test. Reduce Velocity and "
"start the test again."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:284
msgid ""
"If the machine doesn't move, stalls, or loses steps, no matter how low you "
"turn Velocity, verify the following:"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:286
msgid "Correct step waveform timings"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:287
msgid "Correct pinout, including 'Invert' on step pins"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:288
msgid "Correct, well-shielded cabling"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:289
msgid "Physical problems with the motor, motor coupling, leadscrew, etc."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:292
msgid ""
"Once you have found a speed at which the axis does not stall or lose steps "
"during this testing procedure, reduce it by 10% and use that as the axis "
"'Maximum Velocity'."
msgstr ""

#. type: Title ===
#: src/config/stepconf.adoc:294
#, no-wrap
msgid "Finding Maximum Acceleration(((Finding Maximum Acceleration)))"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:305
msgid ""
"With the Maximum Velocity you found in the previous step, enter the "
"acceleration value to test.  Using the same procedure as above, adjust the "
"Acceleration value up or down as necessary.  In this test, it is important "
"that the combination of Acceleration and Test Area allow the machine to "
"reach the selected Velocity.  Once you have found a value at which the axis "
"does not stall or lose steps during this testing procedure, reduce it by 10% "
"and use that as the axis Maximum Acceleration."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/stepconf.adoc:308 src/config/stepconf.adoc:309
#, no-wrap
msgid "Spindle Configuration Page"
msgstr ""

#. type: Target for macro image
#: src/config/stepconf.adoc:309
#, no-wrap
msgid "images/stepconf-spindle_en.png"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:312
msgid ""
"This page only appears when 'Spindle PWM' is chosen in the 'Parallel Port "
"Pinout' page for one of the outputs."
msgstr ""

#. type: Title ===
#: src/config/stepconf.adoc:313
#, no-wrap
msgid "Spindle Speed Control(((Spindle Speed Control)))"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:316
msgid ""
"If 'Spindle PWM' appears on the pinout, the following information should be "
"entered:"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:320
msgid ""
"'PWM Rate' - The 'carrier frequency' of the PWM signal to the spindle. Enter "
"'0' for PDM mode, which is useful for generating an analog control voltage.  "
"Refer to the documentation for your spindle controller for the appropriate "
"value."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:324
msgid ""
"'Speed 1 and 2, PWM 1 and 2' - The generated configuration file uses a "
"simple linear relationship to determine the PWM value for a given RPM value. "
"If the values are not known, they can be determined. For more information "
"see <<sub:determining-spindle-calibration,Determining Spindle Calibration>>."
msgstr ""

#. type: Title ===
#: src/config/stepconf.adoc:325
#, no-wrap
msgid "Spindle-synchronized motion(((Spindle-synchronized motion)))"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:330
msgid ""
"When the appropriate signals from a spindle encoder are connected to "
"LinuxCNC via HAL, LinuxCNC supports lathe threading.  These signals are:"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:332
msgid ""
"'Spindle Index' - Is a pulse that occurs once per revolution of the spindle."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:334
msgid ""
"'Spindle Phase A' - This is a pulse that occurs in multiple equally-spaced "
"locations as the spindle turns."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:337
msgid ""
"'Spindle Phase B (optional)' - This is a second pulse that occurs, but with "
"an offset from Spindle Phase A. The advantages to using both A and B are "
"direction sensing, increased noise immunity, and increased resolution."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:340
msgid ""
"If 'Spindle Phase A' and 'Spindle Index' appear on the pinout, the following "
"information should be entered:"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:344
msgid ""
"'Use Spindle-At-Speed' - With encoder feedback one can choose to have "
"LinuxCNC wait for the spindle to reach the commanded speed before feed "
"moves. Select this option and set the 'close enough' scale."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:345
msgid ""
"'Speed Display Filter Gain' - Setting for adjusting the stability of the "
"visual spindle speed display."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:348
msgid ""
"'Cycles per revolution' - The number of cycles of the 'Spindle A' signal "
"during one revolution of the spindle. This option is only enabled when an "
"input has been set to 'Spindle Phase A'"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:351
msgid ""
"'Maximum speed in thread' - The maximum spindle speed used in threading.  "
"For a high spindle RPM or a spindle encoder with high resolution, a low "
"value of 'BASE_PERIOD' is required."
msgstr ""

#. type: Title ===
#: src/config/stepconf.adoc:353
#, no-wrap
msgid "Determining Spindle Calibration(((Determining Spindle Calibration)))"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:356
msgid "Enter the following values in the Spindle Configuration page:"
msgstr ""

#. type: Table
#: src/config/stepconf.adoc:359
#, no-wrap
msgid "Speed 1:"
msgstr ""

#. type: Table
#: src/config/stepconf.adoc:359
#, no-wrap
msgid "PWM 1:"
msgstr ""

#. type: Table
#: src/config/stepconf.adoc:360
#, no-wrap
msgid "Speed 2:"
msgstr ""

#. type: Table
#: src/config/stepconf.adoc:360 src/integrator/stepper-timing.adoc:33
#: src/integrator/stepper-timing.adoc:34 src/integrator/stepper-timing.adoc:35
#: src/integrator/stepper-timing.adoc:36 src/integrator/stepper-timing.adoc:37
#: src/integrator/stepper-timing.adoc:38 src/integrator/stepper-timing.adoc:40
#: src/integrator/stepper-timing.adoc:46 src/integrator/stepper-timing.adoc:49
#: src/integrator/stepper-timing.adoc:50 src/integrator/stepper-timing.adoc:51
#: src/integrator/stepper-timing.adoc:54 src/integrator/stepper-timing.adoc:55
#: src/integrator/stepper-timing.adoc:58 src/integrator/stepper-timing.adoc:61
#: src/integrator/stepper-timing.adoc:62 src/integrator/stepper-timing.adoc:80
#: src/integrator/stepper-timing.adoc:84
#, no-wrap
msgid "1000"
msgstr ""

#. type: Table
#: src/config/stepconf.adoc:360
#, no-wrap
msgid "PWM 2:"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:369
msgid ""
"Finish the remaining steps of the configuration process, then launch "
"LinuxCNC with your configuration.  Turn the machine on and select the MDI "
"tab.  Start the spindle turning by entering: 'M3 S100'.  Change the spindle "
"speed by entering a different S-number: 'S800'.  Valid numbers (at this "
"point) range from 1 to 1000."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:373
msgid ""
"For two different S-numbers, measure the actual spindle speed in RPM.  "
"Record the S-numbers and actual spindle speeds. Run StepConf again.  For "
"'Speed' enter the measured speed, and for 'PWM' enter the S-number divided "
"by 1000."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:376
msgid ""
"Because most spindle drivers are somewhat nonlinear in their response "
"curves, it is best to:"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:378
msgid "Make sure the two calibration speeds are not too close together in RPM."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:379
msgid ""
"Make sure the two calibration speeds are in the range of speeds you will "
"typically use while milling."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:383
msgid ""
"For instance, if your spindle will go from 0 RPM to 8000 RPM, but you "
"generally use speeds from 400 RPM (10%) to 4000 RPM (100%), then find the "
"PWM values that give 1600 RPM (40%) and 2800 RPM (70%)."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/stepconf.adoc:386 src/config/stepconf.adoc:387
#, no-wrap
msgid "Advanced Options Configuration"
msgstr ""

#. type: Target for macro image
#: src/config/stepconf.adoc:387
#, no-wrap
msgid "images/stepconf-options_en.png"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:391
msgid ""
"'Include Halui' - This will add the Halui user interface component. See the "
"<<cha:hal-user-interface,HALUI Chapter>> for more information on."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:393
msgid ""
"'Include PyVCP' - This option adds the PyVCP panel base file or a sample "
"file to work on. See the <<cha:pyvcp,PyVCP Chapter>> for more information."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:396
msgid ""
"'Include ClassicLadder PLC' - This option will add the ClassicLadder PLC "
"(Programmable Logic Controller). See the <<cha:classicladder,ClassicLadder "
"Chapter>> for more information."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:399
msgid ""
"'Onscreen Prompt For Tool Change' - If this box is checked, LinuxCNC will "
"pause and prompt you to change the tool when 'M6' is encountered. This "
"feature is usually only useful if you have presettable tools."
msgstr ""

#. type: Title ==
#: src/config/stepconf.adoc:400
#, no-wrap
msgid "Complete Machine Configuration(((Complete Machine Configuration)))"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:404
msgid ""
"Click 'Apply' to write the configuration files.  Later, you can re-run this "
"program and tweak the settings you entered before."
msgstr ""

#. type: Title ==
#: src/config/stepconf.adoc:405
#, no-wrap
msgid "Axis Travels and Homes"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/stepconf.adoc:407 src/config/stepconf.adoc:408
#, no-wrap
msgid "Axis Travel and Home"
msgstr ""

#. type: Target for macro image
#: src/config/stepconf.adoc:408
#, no-wrap
msgid "images/HomeAxisTravel.png"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:412
msgid ""
"For each axis, there is a limited range of travel.  The physical end of "
"travel is called the 'hard stop'."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:416
msgid ""
"[red]#If a mechanical hard stop were to be exceeded, the screw or the "
"machine frame would be damaged!#"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:422
msgid ""
"Before the 'hard stop' there is a 'limit switch'.  If the limit switch is "
"encountered during normal operation, LinuxCNC shuts down the motor "
"amplifier.  The distance between the 'hard stop' and 'limit switch' must be "
"long enough to allow an unpowered motor to coast to a stop."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:427
msgid ""
"Before the 'limit switch' there is a 'soft limit'.  This is a limit enforced "
"in software after homing.  If a MDI command or G-code program would pass the "
"soft limit, it is not executed.  If a jog would pass the soft limit, it is "
"terminated at the soft limit."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:432
msgid ""
"The 'home switch' can be placed anywhere within the travel (between hard "
"stops).  As long as external hardware does not deactivate the motor "
"amplifiers when the limit switch is reached, one of the limit switches can "
"be used as a home switch."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:438
msgid ""
"The 'zero position' is the location on the axis that is 0 in the machine "
"coordinate system.  Usually the 'zero position' will be within the 'soft "
"limits'.  On lathes, constant surface speed mode requires that machine 'X=0' "
"correspond to the center of spindle rotation when no tool offset is in "
"effect."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:444
msgid ""
"The 'home position' is the location within travel that the axis will be "
"moved to at the end of the homing sequence.  This value must be within the "
"'soft limits'.  In particular, the 'home position' should never be exactly "
"equal to a 'soft limit'."
msgstr ""

#. type: Title ===
#: src/config/stepconf.adoc:445
#, no-wrap
msgid "Operating without Limit Switches"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:450
msgid ""
"A machine can be operated without limit switches. In this case, only the "
"soft limits stop the machine from reaching the hard stop.  Soft limits only "
"operate after the machine has been homed."
msgstr ""

#. type: Title ===
#: src/config/stepconf.adoc:451
#, no-wrap
msgid "Operating without Home Switches(((Operating without Home Switches)))"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:462
msgid ""
"A machine can be operated without home switches.  If the machine has limit "
"switches, but no home switches, it is best to use a limit switch as the home "
"switch (e.g., choose 'Minimum Limit + Home X' in the pinout).  If the "
"machine has no switches at all, or the limit switches cannot be used as home "
"switches for another reason, then the machine must be homed 'by eye' or by "
"using match marks. Homing by eye is not as repeatable as homing to switches, "
"but it still allows the soft limits to be useful."
msgstr ""

#. type: Title ===
#: src/config/stepconf.adoc:463
#, no-wrap
msgid "Home and Limit Switch wiring options"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:470
msgid ""
"The ideal wiring for external switches would be one input per switch.  "
"However, the PC parallel port only offers a total of 5 inputs, while there "
"are as many as 9 switches on a 3-axis machine.  Instead, multiple switches "
"are wired together in various ways so that a smaller number of inputs are "
"required."
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:479
msgid ""
"The figures below show the general idea of wiring multiple switches to a "
"single input pin.  In each case, when one switch is actuated, the value seen "
"on INPUT goes from logic HIGH to LOW.  However, LinuxCNC expects a TRUE "
"value when a switch is closed, so the corresponding 'Invert' box must be "
"checked on the pinout configuration page.  The pull up resistor show in the "
"diagrams pulls the input high until the connection to ground is made and "
"then the input goes low.  Otherwise the input might float between on and off "
"when the circuit is open.  Typically for a parallel port you might use "
"47&thinsp;kΩ;."
msgstr ""

#. type: Block title
#: src/config/stepconf.adoc:480
#, no-wrap
msgid "Normally Closed Switches (N/C) wiring in series (simplified diagram)"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/stepconf.adoc:481
#, no-wrap
msgid "Normally Closed Switches"
msgstr ""

#. type: Target for macro image
#: src/config/stepconf.adoc:481
#, no-wrap
msgid "images/switch-nc-series_en.svg"
msgstr ""

#. type: Block title
#: src/config/stepconf.adoc:483
#, no-wrap
msgid "Normally Open Switches (N/O) wiring in parallel (simplified diagram)"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/config/stepconf.adoc:484
#, no-wrap
msgid "Normally Open Switches"
msgstr ""

#. type: Target for macro image
#: src/config/stepconf.adoc:484
#, no-wrap
msgid "images/switch-no-parallel_en.svg"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:487
msgid "The following combinations of switches are permitted in StepConf:"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:489
msgid "Combine home switches for all axes"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:490
msgid "Combine limit switches for all axes"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:491
msgid "Combine both limit switches for one axis"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:492
msgid "Combine both limit switches and the home switch for one axis"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:493
msgid "Combine one limit switch and the home switch for one axis"
msgstr ""

#. type: Plain text
#: src/config/stepconf.adoc:496
msgid ""
"The last two combinations are also appropriate when the type contact + home "
"is used."
msgstr ""

#. type: Title =
#: src/config/stepper.adoc:5
#, no-wrap
msgid "Stepper Configuration(((Stepper Configuration)))"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:18
msgid ""
"The preferred way to set up a standard stepper machine is with the Step "
"Configuration Wizard. See the <<cha:stepconf-wizard,Stepper Configuration "
"Wizard>> Chapter."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:22
msgid ""
"This chapter describes some of the more common settings for manually setting "
"up a stepper based system. These systems are using stepper motors with "
"drives that accept step & direction signals."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:26
msgid ""
"It is one of the simpler setups, because the motors run open-loop (no "
"feedback comes back from the motors), yet the system needs to be configured "
"properly so the motors don't stall or lose steps."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:30
msgid ""
"Most of this chapter is based on a sample config released along with "
"LinuxCNC. The config is called stepper_inch, and can be found by running the "
"<<cha:running-emc,Configuration Picker>>."
msgstr ""

#. type: Title ==
#: src/config/stepper.adoc:31
#, no-wrap
msgid "Maximum step rate"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:38
msgid ""
"With software step generation, the maximum step rate is one step per two "
"BASE_PERIODs for step-and-direction output. The maximum requested step rate "
"is the product of an axis' MAX_VELOCITY and its INPUT_SCALE.  If the "
"requested step rate is not attainable, following errors will occur, "
"particularly during fast jogs and G0 moves."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:42
msgid ""
"If your stepper driver can accept quadrature input, use this mode.  With a "
"quadrature signal, one step is possible for each BASE_PERIOD, doubling the "
"maximum step rate."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:48
msgid ""
"The other remedies are to decrease one or more of: the BASE_PERIOD (setting "
"this too low will cause the machine to become unresponsive or even lock up), "
"the INPUT_SCALE (if you can select different step sizes on your stepper "
"driver, change pulley ratios, or leadscrew pitch), or the MAX_VELOCITY and "
"STEPGEN_MAXVEL."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:53
msgid ""
"If no valid combination of BASE_PERIOD, INPUT_SCALE, and MAX_VELOCITY is "
"acceptable, then consider using hardware step generation (such as with the "
"LinuxCNC-supported Universal Stepper Controller, Mesa cards, and others)."
msgstr ""

#. type: Title ===
#: src/config/stepper.adoc:54 src/drivers/pluto-p.adoc:136
#: src/drivers/pluto-p.adoc:235
#, no-wrap
msgid "Pinout"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:61
msgid ""
"One of the major flaws in LinuxCNC was that you couldn't specify the pinout "
"without recompiling the source code. LinuxCNC is far more flexible, and now "
"(thanks to the Hardware Abstraction Layer) you can easily specify which "
"signal goes where. See the <<cha:basic-hal-reference,HAL Basics>> for more "
"information on HAL."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:64
msgid ""
"As it is described in the HAL Introduction and tutorial, we have signals, "
"pins and parameters inside the HAL."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:67
msgid "We are presenting one axis to keep it short, all others are similar."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:69
msgid "The ones relevant for our pinout are:"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:73
#, no-wrap
msgid ""
"signals: Xstep, Xdir & Xen\n"
"pins: parport.0.pin-XX-out & parport.0.pin-XX-in\n"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:79
msgid ""
"Depending on what you have chosen in your INI file you are using either "
"standard_pinout.hal or xylotex_pinout.hal. These are two files that instruct "
"the HAL how to link the various signals & pins. Further on we'll investigate "
"the standard_pinout.hal."
msgstr ""

#. type: Title ===
#: src/config/stepper.adoc:80
#, no-wrap
msgid "Standard Pinout HAL"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:83
msgid "This file contains several HAL commands, and usually looks like this:"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:105
#, no-wrap
msgid ""
"# standard pinout config file for 3-axis steppers\n"
"# using a parport for I/O\n"
"#\n"
"# first load the parport driver\n"
"loadrt hal_parport cfg=\"0x0378\"\n"
"#\n"
"# next connect the parport functions to threads\n"
"# read inputs first\n"
"addf parport.0.read base-thread 1\n"
"# write outputs last\n"
"addf parport.0.write base-thread -1\n"
"#\n"
"# finally connect physical pins to the signals\n"
"net Xstep => parport.0.pin-03-out\n"
"net Xdir  => parport.0.pin-02-out\n"
"net Ystep => parport.0.pin-05-out\n"
"net Ydir  => parport.0.pin-04-out\n"
"net Zstep => parport.0.pin-07-out\n"
"net Zdir  => parport.0.pin-06-out\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:108
#, no-wrap
msgid ""
"# create a signal for the estop loopback\n"
"net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:112
#, no-wrap
msgid ""
"# create signals for tool loading loopback\n"
"net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared\n"
"net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:115
#, no-wrap
msgid ""
"# connect \"spindle on\" motion controller pin to a physical pin\n"
"net spindle-on spindle.0.on => parport.0.pin-09-out\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:120
#, no-wrap
msgid ""
"###\n"
"### You might use something like this to enable chopper drives when machine ON\n"
"### the Xen signal is defined in core_stepper.hal\n"
"###\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:122
#, no-wrap
msgid "# net Xen => parport.0.pin-01-out\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:126
#, no-wrap
msgid ""
"###\n"
"### If you want active low for this pin, invert it like this:\n"
"###\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:128
#, no-wrap
msgid "# setp parport.0.pin-01-out-invert 1\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:134
#, no-wrap
msgid ""
"###\n"
"### A sample home switch on the X axis (axis 0).  make a signal,\n"
"### link the incoming parport pin to the signal, then link the signal\n"
"### to LinuxCNC's axis 0 home switch input pin.\n"
"###\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:136
#, no-wrap
msgid "# net Xhome parport.0.pin-10-in => joint.0.home-sw-in\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:142
#, no-wrap
msgid ""
"###\n"
"### Shared home switches all on one parallel port pin?\n"
"### that's ok, hook the same signal to all the axes, but be sure to\n"
"### set HOME_IS_SHARED and HOME_SEQUENCE in the INI file.\n"
"###\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:147
#, no-wrap
msgid ""
"# net homeswitches <= parport.0.pin-10-in\n"
"# net homeswitches => joint.0.home-sw-in\n"
"# net homeswitches => joint.1.home-sw-in\n"
"# net homeswitches => joint.2.home-sw-in\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:151
#, no-wrap
msgid ""
"###\n"
"### Sample separate limit switches on the X axis (axis 0)\n"
"###\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:154
#, no-wrap
msgid ""
"# net X-neg-limit parport.0.pin-11-in => joint.0.neg-lim-sw-in\n"
"# net X-pos-limit parport.0.pin-12-in => joint.0.pos-lim-sw-in\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:161
#, no-wrap
msgid ""
"###\n"
"### Just like the shared home switches example, you can wire together\n"
"### limit switches.  Beware if you hit one, LinuxCNC will stop but can't tell\n"
"### you which switch/axis has faulted.  Use caution when recovering from this\n"
"### extreme position to avoid a hard stop.\n"
"###\n"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:163
#, no-wrap
msgid "# net Xlimits parport.0.pin-13-in => joint.0.neg-lim-sw-in joint.0.pos-lim-sw-in\n"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:168
msgid ""
"The lines starting with '#' are comments, and their only purpose is to guide "
"the reader through the file."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:173
msgid ""
"There are a couple of operations that get executed when the standard_pinout."
"hal gets executed/interpreted:"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:175
msgid ""
"The Parport driver gets loaded (see the <<cha:parport,Parport Chapter>> for "
"details)."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:178
msgid ""
"The read & write functions of the parport driver get assigned to the base "
"thread footnote:[the fastest thread in the LinuxCNC setup, usually ther code "
"gets executed every few tens of microseconds]."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:180
msgid ""
"The step & direction signals for axes X, Y, Z get linked to pins on the "
"parport."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:181
msgid ""
"Further I/O signals get connected (estop loopback, toolchanger loopback)."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:182
msgid "A spindle-on signal gets defined and linked to a parport pin."
msgstr ""

#. type: Title ===
#: src/config/stepper.adoc:183
#, no-wrap
msgid "Changing the standard_pinout.hal"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:187
msgid ""
"If you want to change the standard_pinout.hal file, all you need is a text "
"editor. Open the file and locate the parts you want to change."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:191
msgid ""
"If you want for example to change the pin for the X-axis Step & Directions "
"signals, all you need to do is to change the number in the 'parport.0.pin-XX-"
"out' name:"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:196
#, no-wrap
msgid ""
"net Xstep parport.0.pin-03-out\n"
"net Xdir  parport.0.pin-02-out\n"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:199
msgid "can be changed to:"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:204
#, no-wrap
msgid ""
"net Xstep parport.0.pin-02-out\n"
"net Xdir  parport.0.pin-03-out\n"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:207
msgid "or basically any other 'out' pin you like."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:210
msgid ""
"Hint: make sure you don't have more than one signal connected to the same "
"pin."
msgstr ""

#. type: Title ===
#: src/config/stepper.adoc:211
#, no-wrap
msgid "Changing polarity of a signal"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:216
msgid ""
"If external hardware expects an \"active low\" signal, set the corresponding "
"'-invert' parameter. For instance, to invert the spindle control signal:"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:220
#, no-wrap
msgid "setp parport.0.pin-09-invert TRUE\n"
msgstr ""

#. type: Title ===
#: src/config/stepper.adoc:222
#, no-wrap
msgid "Adding PWM Spindle Speed Control"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:226 src/examples/spindle.adoc:47
msgid ""
"If your spindle can be controlled by a PWM signal, use the 'pwmgen' "
"component to create the signal:"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:236
#, no-wrap
msgid ""
"loadrt pwmgen output_type=0\n"
"addf pwmgen.update servo-thread\n"
"addf pwmgen.make-pulses base-thread\n"
"net spindle-speed-cmd spindle.0.speed-out => pwmgen.0.value\n"
"net spindle-on spindle.0.on => pwmgen.0.enable\n"
"net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out\n"
"setp pwmgen.0.scale 1800 # Change to your spindle's top speed in RPM\n"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:242
msgid ""
"This assumes that the spindle controller's response to PWM is simple: 0% PWM "
"gives 0 RPM, 10% PWM gives 180 RPM, etc. If there is a minimum PWM required "
"to get the spindle to turn, follow the example in the 'nist-lathe' sample "
"configuration to use a 'scale' component."
msgstr ""

#. type: Title ===
#: src/config/stepper.adoc:243
#, no-wrap
msgid "Adding an enable signal"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:248
msgid ""
"Some amplifiers (drives) require an enable signal before they accept and "
"command movement of the motors. For this reason there are already defined "
"signals called 'Xen', 'Yen', 'Zen'."
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:250
msgid "To connect them use the following example:"
msgstr ""

#. type: delimited block -
#: src/config/stepper.adoc:254
#, no-wrap
msgid "net Xen parport.0.pin-08-out\n"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:261
msgid ""
"You can either have one single pin that enables all drives; or several, "
"depending on the setup you have. Note, however, that usually when one axis "
"faults, all the other drives will be disabled as well, so having only one "
"enable signal / pin for all drives is a common practice."
msgstr ""

#. type: Title ===
#: src/config/stepper.adoc:262
#, no-wrap
msgid "External ESTOP button"
msgstr ""

#. type: Plain text
#: src/config/stepper.adoc:266
msgid ""
"The standard_pinout.hal file assumes no external ESTOP button. For more "
"information on an external E-Stop see the estop_latch man page."
msgstr ""

#. type: Title =
#: src/config/stepper-diagnostics.adoc:5
#, no-wrap
msgid "Stepper Diagnostics(((Stepper Diagnostics)))"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:19
msgid ""
"If what you get is not what you expect many times you just got some "
"experience. Learning from the experience increases your understanding of the "
"whole. Diagnosing problems is best done by divide and conquer.  By this I "
"mean if you can remove 1/2 of the variables from the equation each time you "
"will find the problem the fastest. In the real world this is not always the "
"case, but it's usually a good place to start."
msgstr ""

#. type: Title ==
#: src/config/stepper-diagnostics.adoc:20
#, no-wrap
msgid "Common Problems"
msgstr ""

#. type: Title ===
#: src/config/stepper-diagnostics.adoc:22
#, no-wrap
msgid "Stepper Moves One Step"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:28
msgid ""
"The most common reason in a new installation for a stepper motor not to move "
"is that the step and direction signals are exchanged. If you press the jog "
"forward and jog backward keys, alternately , and the stepper moves one step "
"each time, and in the same direction, there is your clue."
msgstr ""

#. type: Title ===
#: src/config/stepper-diagnostics.adoc:29
#, no-wrap
msgid "No Steppers Move"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:33
msgid ""
"Many drives have an enable pin or need a charge pump to enable the output."
msgstr ""

#. type: Title ===
#: src/config/stepper-diagnostics.adoc:34
#, no-wrap
msgid "Distance Not Correct"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:38
msgid ""
"If you command the axis to move a specific distance and it does not move "
"that distance, then your scale setting is wrong."
msgstr ""

#. type: Title ==
#: src/config/stepper-diagnostics.adoc:39 src/plasma/qtplasmac.adoc:2769
#, no-wrap
msgid "Error Messages"
msgstr ""

#. type: Title ===
#: src/config/stepper-diagnostics.adoc:41
#, no-wrap
msgid "Following Error"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:49
msgid ""
"The concept of a following error is strange when talking about stepper "
"motors. Since they are an open loop system, there is no position feedback to "
"let you know if you actually are out of range. LinuxCNC calculates if it can "
"keep up with the motion called for, and if not, then it gives a following "
"error. Following errors usually are the result of one of the following on "
"stepper systems."
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:51
msgid "FERROR too small"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:52
msgid "MIN_FERROR too small"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:53
msgid "MAX_VELOCITY too fast"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:54
msgid "MAX_ACCELERATION too fast"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:55
msgid "BASE_PERIOD set too long"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:56
msgid "Backlash added to an axis"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:61
msgid ""
"Any of the above can cause the real-time pulsing to not be able to keep up "
"the requested step rate. This can happen if you didn't run the latency test "
"long enough to get a good number to plug into the Stepconf Wizard, or if you "
"set the Maximum Velocity or Maximum Acceleration too high."
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:68
msgid ""
"If you added backlash you need to increase the STEPGEN_MAXACCEL up to double "
"the MAX_ACCELERATION in the AXIS section of the INI file for each axis you "
"added backlash to. LinuxCNC uses \"extra acceleration\" at a reversal to "
"take up the backlash. Without backlash correction, step generator "
"acceleration can be just a few percent above the motion planner acceleration."
msgstr ""

#. type: Title ===
#: src/config/stepper-diagnostics.adoc:69
#, no-wrap
msgid "RTAPI Error"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:72
msgid "When you get this error:"
msgstr ""

#. type: delimited block -
#: src/config/stepper-diagnostics.adoc:75
#, no-wrap
msgid "RTAPI: ERROR: Unexpected realtime delay on task n\n"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:86
msgid ""
"This error is generated by rtapi based on an indication from RTAI that a "
"deadline was missed. It is usually an indication that the BASE_PERIOD in the "
"[EMCMOT] section of the ini file is set too low. You should run the Latency "
"Test for an extended period of time to see if you have any delays that would "
"cause this problem. If you used the Stepconf Wizard, run it again, and test "
"the Base Period Jitter again, and adjust the Base Period Maximum Jitter on "
"the Basic Machine Information page. You might have to leave the test running "
"for an extended period of time to find out if some hardware causes "
"intermittent problems."
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:90
msgid ""
"LinuxCNC tracks the number of CPU cycles between invocations of the real-"
"time thread. If some element of your hardware is causing delays or your "
"realtime threads are set too fast you will get this error."
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:95
msgid ""
"This error is only displayed once per session. If you had your BASE_PERIOD "
"too low you could get hundreds of thousands of error messages per second if "
"more than one was displayed."
msgstr ""

#. type: Title ==
#: src/config/stepper-diagnostics.adoc:96 src/motion/external-offsets.adoc:204
#, no-wrap
msgid "Testing"
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:106
msgid ""
"If you are seeing an axis ending up in the wrong location over multiple "
"moves, it is likely that you do not have the correct direction hold times or "
"step timing for your stepper drivers. Each direction change may be losing a "
"step or more. If the motors are stalling, it is also possible you have "
"either the MAX_ACCELERATION or MAX_VELOCITY set too high for that axis."
msgstr ""

#. type: Plain text
#: src/config/stepper-diagnostics.adoc:115
msgid ""
"The following program will test the Z axis configuration for proper setup. "
"Copy the program to your \\~/emc2/nc_files directory and name it TestZ.ngc "
"or similar. Zero your machine with Z = 0.000 at the table top. Load and run "
"the program. It will make 200 moves back and forth from 0.5 to 1\". If you "
"have a configuration issue, you will find that the final position will not "
"end up 0.500\" that the axis window is showing. To test another axis just "
"replace the Z with your axis in the G0 lines."
msgstr ""

#. type: delimited block -
#: src/config/stepper-diagnostics.adoc:142
#, no-wrap
msgid ""
"( test program to see if Z axis loses position )\n"
"( msg, test 1 of Z axis configuration )\n"
"G20 #1000=100 ( loop 100 times )\n"
"( this loop has delays after moves )\n"
"( tests acc and velocity settings )\n"
"o100 while [#1000]\n"
"   G0 Z1.000\n"
"   G4 P0.250\n"
"   G0 Z0.500\n"
"   G4 P0.250\n"
"   #1000 = [#1000 - 1]\n"
"o100 endwhile\n"
"( msg, test 2 of Z axis configuration S to continue)\n"
"M1 (stop here)\n"
"#1000=100 ( loop 100 times )\n"
"( the next loop has no delays after moves )\n"
"( tests direction hold times on driver config and also max accel setting )\n"
"o101 while [#1000]\n"
"   G0 Z1.000\n"
"   G0 Z0.500\n"
"   #1000 = [#1000 - 1]\n"
"o101 endwhile\n"
"( msg, Done...Z should be exactly .5\" above table )\n"
"M2\n"
msgstr ""

#. type: Title =
#: src/config/stepper-quickstart.adoc:5
#, no-wrap
msgid "Stepper Quickstart"
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:11
msgid ""
"This section assumes you have done a standard install from the Live CD. "
"After installation it is recommended that you connect the computer to the "
"Internet and wait for the update manager to pop up and get the latest "
"updates for LinuxCNC and Ubuntu before continuing."
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:19
msgid ""
"The Latency Test determines how late your computer processor is in "
"responding to a request. Some hardware can interrupt the processing which "
"could cause missed steps when running a CNC machine.  This is the first "
"thing you need to do.  Follow the instructions <<sec:latency-test,here>> to "
"run the latency test."
msgstr ""

#. type: Title ==
#: src/config/stepper-quickstart.adoc:21
#, no-wrap
msgid "Sherline(((Sherline)))"
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:26
msgid ""
"If you have a Sherline several predefined configurations are provided.  This "
"is on the main menu CNC/EMC then pick the Sherline configuration that "
"matches yours and save a copy."
msgstr ""

#. type: Title ==
#: src/config/stepper-quickstart.adoc:28
#, no-wrap
msgid "Xylotex(((Xylotex)))"
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:33
msgid ""
"If you have a Xylotex you can skip the following sections and go straight to "
"the <<cha:stepconf-wizard,Stepper Config Wizard>>.  LinuxCNC has provided "
"quick setup for the Xylotex machines."
msgstr ""

#. type: Title ==
#: src/config/stepper-quickstart.adoc:34
#, no-wrap
msgid "Machine Information"
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:37
msgid "Gather the information about each axis of your machine."
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:43
msgid ""
"Drive timing is in nano seconds. If you're unsure about the timing many "
"popular drives are included in the stepper configuration wizard.  Note some "
"newer Gecko drives have different timing than the original one. A http://"
"wiki.linuxcnc.org/[list] is also on the user maintained LinuxCNC wiki site "
"of more drives."
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:46
#, no-wrap
msgid "Drive Type"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:46
#, no-wrap
msgid "Step Time (ns)"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:46
#, no-wrap
msgid "Step Space (ns)"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:46
#, no-wrap
msgid "Dir. Hold (ns)"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:47
#, no-wrap
msgid "Dir. Setup (ns)"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:47 src/config/stepper-quickstart.adoc:86
#: src/gcode/coordinates.adoc:103 src/gcode/g-code.adoc:1568
#: src/gcode/overview.adoc:138 src/gcode/tool-compensation.adoc:75
#, no-wrap
msgid "X"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:48 src/config/stepper-quickstart.adoc:87
#: src/gcode/coordinates.adoc:104 src/gcode/g-code.adoc:1568
#: src/gcode/overview.adoc:139 src/gcode/tool-compensation.adoc:75
#, no-wrap
msgid "Y"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:49 src/config/stepper-quickstart.adoc:88
#: src/gcode/coordinates.adoc:105 src/gcode/g-code.adoc:1568
#: src/gcode/overview.adoc:140 src/gcode/tool-compensation.adoc:75
#: src/plasma/qtplasmac.adoc:763
#, no-wrap
msgid "Z"
msgstr ""

#. type: Title ==
#: src/config/stepper-quickstart.adoc:53
#, no-wrap
msgid "Pinout Information"
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:57
msgid ""
"Gather the information about the connections from your machine to the PC "
"parallel port."
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:60
#, no-wrap
msgid "Output Pin"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:60
#, no-wrap
msgid "Typ. Function"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:60 src/config/stepper-quickstart.adoc:61
#, no-wrap
msgid "If Different"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:60
#, no-wrap
msgid "Input Pin"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:61
#, no-wrap
msgid "E-Stop Out"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:61
#, no-wrap
msgid "X Limit/Home"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:62 src/drivers/gm.adoc:73
#: src/drivers/gm.adoc:128 src/drivers/hostmot2.adoc:305
#: src/drivers/hostmot2.adoc:316 src/drivers/hostmot2.adoc:317
#: src/drivers/hostmot2.adoc:333 src/drivers/hostmot2.adoc:334
#: src/drivers/hostmot2.adoc:347 src/drivers/hostmot2.adoc:374
#: src/drivers/hostmot2.adoc:385 src/drivers/motenc.adoc:96
#: src/drivers/motenc.adoc:97 src/gcode/g-code.adoc:776
#: src/gcode/g-code.adoc:1570 src/gui/qtvcp-widgets.adoc:1055
#: src/hal/parallel-port.adoc:129 src/plasma/qtplasmac.adoc:94
#: src/plasma/qtplasmac.adoc:148 src/plasma/qtplasmac.adoc:152
#: src/plasma/qtplasmac.adoc:1528 src/plasma/qtplasmac.adoc:1792
#: src/plasma/qtplasmac.adoc:3747
#, no-wrap
msgid "2"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:62
#, no-wrap
msgid "X Step"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:62 src/gui/qtvcp-widgets.adoc:1072
#: src/hal/parallel-port.adoc:138 src/plasma/qtplasmac.adoc:3756
#: src/remap/remap.adoc:2159
#, no-wrap
msgid "11"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:62
#, no-wrap
msgid "Y Limit/Home"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:63 src/drivers/gm.adoc:66
#: src/drivers/gm.adoc:129 src/drivers/motenc.adoc:98 src/gcode/g-code.adoc:777
#: src/gcode/g-code.adoc:1571 src/gui/qtvcp-widgets.adoc:1056
#: src/hal/parallel-port.adoc:130 src/plasma/qtplasmac.adoc:3748
#, no-wrap
msgid "3"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:63
#, no-wrap
msgid "X Direction"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:63 src/drivers/hostmot2.adoc:315
#: src/drivers/hostmot2.adoc:317 src/drivers/hostmot2.adoc:318
#: src/drivers/hostmot2.adoc:319 src/drivers/hostmot2.adoc:320
#: src/drivers/hostmot2.adoc:332 src/drivers/hostmot2.adoc:334
#: src/drivers/hostmot2.adoc:335 src/drivers/hostmot2.adoc:336
#: src/drivers/hostmot2.adoc:337 src/drivers/hostmot2.adoc:346
#: src/drivers/hostmot2.adoc:360 src/drivers/hostmot2.adoc:373
#: src/hal/parallel-port.adoc:139 src/plasma/qtplasmac.adoc:3757
#: src/remap/remap.adoc:2160
#, no-wrap
msgid "12"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:63
#, no-wrap
msgid "Z Limit/Home"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:64 src/drivers/gm.adoc:72
#: src/drivers/gm.adoc:130 src/drivers/hostmot2.adoc:305
#: src/drivers/hostmot2.adoc:317 src/drivers/hostmot2.adoc:320
#: src/drivers/hostmot2.adoc:322 src/drivers/hostmot2.adoc:334
#: src/drivers/hostmot2.adoc:338 src/drivers/hostmot2.adoc:347
#: src/drivers/hostmot2.adoc:348 src/drivers/hostmot2.adoc:349
#: src/drivers/hostmot2.adoc:350 src/drivers/hostmot2.adoc:361
#: src/drivers/hostmot2.adoc:362 src/drivers/hostmot2.adoc:371
#: src/drivers/hostmot2.adoc:372 src/drivers/hostmot2.adoc:373
#: src/drivers/hostmot2.adoc:374 src/drivers/hostmot2.adoc:383
#: src/drivers/hostmot2.adoc:384 src/drivers/hostmot2.adoc:385
#: src/drivers/motenc.adoc:97 src/drivers/motenc.adoc:99
#: src/gcode/g-code.adoc:778 src/gcode/g-code.adoc:1572
#: src/gui/qtvcp-widgets.adoc:1057 src/hal/parallel-port.adoc:131
#: src/plasma/qtplasmac.adoc:3749
#, no-wrap
msgid "4"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:64
#, no-wrap
msgid "Y Step"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:64 src/hal/parallel-port.adoc:140
#: src/plasma/qtplasmac.adoc:3758 src/remap/remap.adoc:2161
#, no-wrap
msgid "13"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:64
#, no-wrap
msgid "A Limit/Home"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:65 src/drivers/gm.adoc:66
#: src/drivers/gm.adoc:131 src/gcode/g-code.adoc:779 src/gcode/g-code.adoc:1573
#: src/gui/qtvcp-widgets.adoc:1058 src/hal/parallel-port.adoc:132
#: src/plasma/qtplasmac.adoc:3750
#, no-wrap
msgid "5"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:65
#, no-wrap
msgid "Y Direction"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:65 src/hal/parallel-port.adoc:142
#: src/ladder/classic-ladder.adoc:110 src/ladder/classic-ladder.adoc:111
#: src/plasma/qtplasmac.adoc:3760 src/remap/remap.adoc:2163
#, no-wrap
msgid "15"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:65
#, no-wrap
msgid "Probe In"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:66 src/drivers/gm.adoc:72
#: src/drivers/gm.adoc:132 src/drivers/hostmot2.adoc:324
#: src/gcode/g-code.adoc:780 src/gcode/g-code.adoc:1574
#: src/gui/qtvcp-widgets.adoc:1067 src/hal/parallel-port.adoc:133
#: src/plasma/qtplasmac.adoc:3751
#, no-wrap
msgid "6"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:66
#, no-wrap
msgid "Z Step"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:67 src/drivers/gm.adoc:66
#: src/drivers/gm.adoc:133 src/gcode/g-code.adoc:781 src/gcode/g-code.adoc:1575
#: src/gui/qtvcp-widgets.adoc:1068 src/hal/parallel-port.adoc:134
#: src/plasma/qtplasmac.adoc:3752
#, no-wrap
msgid "7"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:67
#, no-wrap
msgid "Z Direction"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:68 src/drivers/gm.adoc:72
#: src/drivers/gm.adoc:134 src/drivers/hostmot2.adoc:306
#: src/drivers/hostmot2.adoc:307 src/drivers/hostmot2.adoc:321
#: src/drivers/hostmot2.adoc:322 src/drivers/hostmot2.adoc:323
#: src/drivers/hostmot2.adoc:337 src/drivers/hostmot2.adoc:338
#: src/drivers/hostmot2.adoc:339 src/drivers/hostmot2.adoc:348
#: src/drivers/hostmot2.adoc:349 src/drivers/hostmot2.adoc:350
#: src/drivers/hostmot2.adoc:351 src/drivers/hostmot2.adoc:361
#: src/drivers/hostmot2.adoc:362 src/drivers/hostmot2.adoc:363
#: src/drivers/hostmot2.adoc:370 src/drivers/hostmot2.adoc:382
#: src/drivers/motenc.adoc:98 src/gcode/g-code.adoc:782
#: src/gcode/g-code.adoc:1576 src/gui/qtvcp-widgets.adoc:1069
#: src/hal/parallel-port.adoc:135 src/plasma/qtplasmac.adoc:3753
#, no-wrap
msgid "8"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:68
#, no-wrap
msgid "A Step"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:69
#, no-wrap
msgid "A Direction"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:70 src/hal/parallel-port.adoc:141
#: src/plasma/qtplasmac.adoc:3759 src/remap/remap.adoc:2162
#, no-wrap
msgid "14"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:70
#, no-wrap
msgid "Spindle CW"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:71 src/drivers/hostmot2.adoc:294
#: src/drivers/hostmot2.adoc:304 src/drivers/motenc.adoc:99
#: src/hal/parallel-port.adoc:143 src/plasma/qtplasmac.adoc:3761
#: src/remap/remap.adoc:2164
#, no-wrap
msgid "16"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:71
#, no-wrap
msgid "Spindle PWM"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:72 src/hal/parallel-port.adoc:144
#: src/plasma/qtplasmac.adoc:3762 src/remap/remap.adoc:2165
#, no-wrap
msgid "17"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:72
#, no-wrap
msgid "Amplifier Enable"
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:77
msgid ""
"Note any pins not used should be set to Unused in the drop down box.  These "
"can always be changed later by running Stepconf again."
msgstr ""

#. type: Title ==
#: src/config/stepper-quickstart.adoc:78
#, no-wrap
msgid "Mechanical Information"
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:82
msgid ""
"Gather information on steps and gearing. The result of this is steps per "
"user unit which is used for SCALE in the INI file."
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:85
#, no-wrap
msgid "Steps/Rev."
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:85
#, no-wrap
msgid "Micro Steps"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:85
#, no-wrap
msgid "Motor Teeth"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:85
#, no-wrap
msgid "Leadscrew Teeth"
msgstr ""

#. type: Table
#: src/config/stepper-quickstart.adoc:86
#, no-wrap
msgid "Leadscrew Pitch"
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:95
msgid ""
"'Steps per revolution' - is how many stepper-motor-steps it takes to turn "
"the stepper motor one revolution.  Typical is 200."
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:101
msgid ""
"'Micro Steps' - is how many steps the drive needs to move the stepper motor "
"one full step.  If microstepping is not used, this number will be 1.  If "
"microstepping is used the value will depend on the stepper drive hardware."
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:105
msgid ""
"'Motor Teeth and Leadscrew Teeth' - is if you have some reduction (gears, "
"chain, timing belt, etc.) between the motor and the leadscrew.  If not, then "
"set these both to 1."
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:110
msgid ""
"'Leadscrew Pitch' - is how much movement occurs (in user units) in one "
"leadscrew turn.  If you're setting up in inches then it is inches per turn.  "
"If you're setting up in millimeters then it is millimeters per turn."
msgstr ""

#. type: Plain text
#: src/config/stepper-quickstart.adoc:113
msgid ""
"The net result you're looking for is how many CNC-output-steps it takes to "
"move one user unit (inches or mm)."
msgstr ""

#. type: Block title
#: src/config/stepper-quickstart.adoc:114
#, no-wrap
msgid "Units inches"
msgstr ""

#. type: delimited block .
#: src/config/stepper-quickstart.adoc:122
#, no-wrap
msgid ""
"Stepper         = 200 steps per revolution\n"
"Drive           =  10 micro steps per step\n"
"Motor Teeth     =  20\n"
"Leadscrew Teeth =  40\n"
"Leadscrew Pitch =   0.2000 inches per turn\n"
msgstr ""

#. type: delimited block =
#: src/config/stepper-quickstart.adoc:126
msgid "From the above information, the leadscrew moves 0.200 inches per turn."
msgstr ""

#. type: delimited block =
#: src/config/stepper-quickstart.adoc:127
msgid "The motor turns 2.000 times per 1 leadscrew turn."
msgstr ""

#. type: delimited block =
#: src/config/stepper-quickstart.adoc:128
msgid "The drive takes 10 microstep inputs to make the stepper step once."
msgstr ""

#. type: delimited block =
#: src/config/stepper-quickstart.adoc:129
msgid "The drive needs 2000 steps to turn the stepper one revolution."
msgstr ""

#. type: delimited block =
#: src/config/stepper-quickstart.adoc:131
#: src/config/stepper-quickstart.adoc:161
msgid "So the scale needed is:"
msgstr ""

#. type: Target for macro image
#: src/config/stepper-quickstart.adoc:132
#, no-wrap
msgid "images/step-calc-inch-math.png"
msgstr ""

#. latexmath:[
#. \frac{200 motor steps}{1 motor rev} \times
#. \frac{10 microsteps}{1 motor step} \times
#. \frac{2 motor revs}{1 leadscrew rev} \times
#. \frac{1 leadscrew revs}{0.2000 inch}
#. = \frac{20,000 microsteps}{inch} ]
#. type: Block title
#: src/config/stepper-quickstart.adoc:143
#, no-wrap
msgid "Units mm"
msgstr ""

#. type: delimited block .
#: src/config/stepper-quickstart.adoc:151
#, no-wrap
msgid ""
"    Stepper         = 200 steps per revolution\n"
"    Drive           =   8 micro steps per step\n"
"    Motor Teeth     =  30\n"
"    Leadscrew Teeth =  90\n"
"    Leadscrew Pitch =   5.00 mm per turn\n"
msgstr ""

#. type: delimited block =
#: src/config/stepper-quickstart.adoc:155
msgid "From the above information:"
msgstr ""

#. type: delimited block =
#: src/config/stepper-quickstart.adoc:156
msgid "The leadscrew moves 5.00 mm per turn."
msgstr ""

#. type: delimited block =
#: src/config/stepper-quickstart.adoc:157
msgid "The motor turns 3.000 times per 1 leadscrew turn."
msgstr ""

#. type: delimited block =
#: src/config/stepper-quickstart.adoc:158
msgid "The drive takes 8 microstep inputs to make the stepper step once."
msgstr ""

#. type: delimited block =
#: src/config/stepper-quickstart.adoc:159
msgid "The drive needs 1600 steps to turn the stepper one revolution."
msgstr ""

#. type: Target for macro image
#: src/config/stepper-quickstart.adoc:162
#, no-wrap
msgid "images/step-calc-mm-math.png"
msgstr ""

#. type: Title =
#: src/drivers/ax5214h.adoc:5
#, no-wrap
msgid "AX5214H Driver"
msgstr ""

#. type: Plain text
#: src/drivers/ax5214h.adoc:18
msgid ""
"The Axiom Measurement & Control AX5214H is a 48 channel digital I/O board. "
"It plugs into an ISA bus, and resembles a pair of 8255 chips. In fact it may "
"be a pair of 8255 chips, but I'm not sure. If/when someone starts a driver "
"for an 8255 they should look at the ax5214 code, much of the work is already "
"done."
msgstr ""

#. type: Title ==
#: src/drivers/ax5214h.adoc:19 src/drivers/servo-to-go.adoc:27
#: src/hal/comp.adoc:41
#, no-wrap
msgid "Installing"
msgstr ""

#. type: delimited block -
#: src/drivers/ax5214h.adoc:24
#, no-wrap
msgid "loadrt hal_ax5214h cfg=\"<config-string>\"\n"
msgstr ""

#. type: Plain text
#: src/drivers/ax5214h.adoc:39
msgid ""
"The config string consists of a hex port address, followed by an 8 character "
"string of \"I\" and \"O\" which sets groups of pins as inputs and outputs. "
"The first two character set the direction of the first two 8 bit blocks of "
"pins (0-7 and 8-15). The next two set blocks of 4 pins (16-19 and 20-23). "
"The pattern then repeats, two more blocks of 8 bits (24-31 and 32-39) and "
"two blocks of 4 bits (40-43 and 44-47). If more than one board is installed, "
"the data for the second board follows the first. As an example, the string "
"'\"0x220 IIIOIIOO 0x300 OIOOIOIO\"' installs drivers for two boards. The "
"first board is at address 0x220, and has 36 inputs (0-19 and 24-39) and 12 "
"outputs (20-23 and 40-47).  The second board is at address 0x300, and has 20 "
"inputs (8-15, 24-31, and 40-43) and 28 outputs (0-7. 16-23, 32-39, and "
"44-47). Up to 8 boards may be used in one system."
msgstr ""

#. type: Plain text
#: src/drivers/ax5214h.adoc:43
msgid "'(bit) ax5214.<boardnum>.out-<pinnum>' -- Drives a physical output pin."
msgstr ""

#. type: Plain text
#: src/drivers/ax5214h.adoc:44
msgid "'(bit) ax5214.<boardnum>.in-<pinnum>' -- Tracks a physical input pin."
msgstr ""

#. type: Plain text
#: src/drivers/ax5214h.adoc:45
msgid ""
"'(bit) ax5214.<boardnum>.in-<pinnum>-not' -- Tracks a physical input pin, "
"inverted."
msgstr ""

#. type: Plain text
#: src/drivers/ax5214h.adoc:48
msgid ""
"For each pin, <boardnum> is the board number (starts at zero), and <pinnum> "
"is the I/O channel number (0 to 47)."
msgstr ""

#. type: Plain text
#: src/drivers/ax5214h.adoc:58
msgid ""
"Note that the driver assumes active LOW signals. This is so that modules "
"such as OPTO-22 will work correctly (TRUE means output ON, or input "
"energized). If the signals are being used directly without buffering or "
"isolation the inversion needs to be accounted for. The in- HAL pin is TRUE "
"if the physical pin is low (OPTO-22 module energized), and FALSE if the "
"physical pin is high (OPTO-22 module off). The in-<pinnum>-not HAL pin is "
"inverted -- it is FALSE if the physical pin is low (OPTO-22 module "
"energized). By connecting a signal to one or the other, the user can "
"determine the state of the input."
msgstr ""

#. type: Plain text
#: src/drivers/ax5214h.adoc:62
msgid "'(bit) ax5214.<boardnum>.out-<pinnum>-invert' -- Inverts an output pin."
msgstr ""

#. type: Plain text
#: src/drivers/ax5214h.adoc:69
msgid ""
"The -invert parameter determines whether an output pin is active high or "
"active low. If -invert is FALSE, setting the HAL out- pin TRUE drives the "
"physical pin low, turning ON an attached OPTO-22 module, and FALSE drives it "
"high, turning OFF the OPTO-22 module. If -invert is TRUE, then setting the "
"HAL out- pin TRUE will drive the physical pin high and turn the module OFF."
msgstr ""

#. type: Plain text
#: src/drivers/ax5214h.adoc:73
msgid ""
"'(funct) ax5214.<boardnum>.read' -- Reads all digital inputs on one board."
msgstr ""

#. type: Plain text
#: src/drivers/ax5214h.adoc:74
msgid ""
"'(funct) ax5214.<boardnum>.write' -- Writes all digital outputs on one board."
msgstr ""

#. type: Title =
#: src/drivers/gm.adoc:5
#, no-wrap
msgid "General Mechatronics Driver"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:14
msgid "General Mechatronics GM6-PCI card based motion control system"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:16
msgid ""
"For detailed description, please refer to the http://www.generalmechatronics."
"com/data/products/robot_controller/PCI_UserManual_eng.pdf[System integration "
"manual]."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:22
msgid ""
"The GM6-PCI motion control card is based on an FPGA and a PCI bridge "
"interface ASIC. A small automated manufacturing cell can be controlled, with "
"a short time system integration procedure. The following figure "
"demonstrating the typical connection of devices related to the control "
"system:"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:25
msgid ""
"It can control up to six axis, each can be stepper or CAN bus interface or "
"analogue servo."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:27
msgid ""
"GPIO: Four time eight I/O pins are placed on standard flat cable headers."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:33
msgid ""
"RS485 I/O expander modules: RS485 bus was designed for interfacing with "
"compact DIN-rail mounted expander modules. An 8-channel digital input, an 8-"
"channel relay output and an analogue I/O (4x +/-10 Volts output and 8x +/-5 "
"Volts input) modules are available now. Up to 16 modules can be connected to "
"the bus altogether."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:37
msgid ""
"20 optically isolated input pins: Six times three for the direct connection "
"of two end switch and one homing sensor for each joint. And additionally, "
"two optically isolated E-stop inputs."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/drivers/gm.adoc:38
#, no-wrap
msgid "GM servo control system"
msgstr ""

#. type: Target for macro image
#: src/drivers/gm.adoc:38
#, no-wrap
msgid "images/GMsystem.png"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:41 src/drivers/motenc.adoc:24
#: src/drivers/pico-ppmc.adoc:26
msgid "Installing:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:45
#, no-wrap
msgid "loadrt hal_gm\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:49 src/drivers/motenc.adoc:32
msgid ""
"During loading (or attempted loading) the driver prints some useful "
"debugging messages to the kernel log, which can be viewed with dmesg."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:51
msgid "Up to 3 boards may be used in one system."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:53
msgid "The following connectors can be found on the GM6-PCI card:"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:54
#, no-wrap
msgid "GM6-PCI card connectors and LEDs(((pci-card connectors)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/drivers/gm.adoc:55
#, no-wrap
msgid "GM6-PCI card connectors and LEDs"
msgstr ""

#. type: Target for macro image
#: src/drivers/gm.adoc:55
#, no-wrap
msgid "images/GM_PCIpinout.png"
msgstr ""

#. type: Title ==
#: src/drivers/gm.adoc:58
#, no-wrap
msgid "I/O connectors"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:60
#, no-wrap
msgid "Pin numbering of GPIO connectors(((pin-numbering-gpio)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/drivers/gm.adoc:61
#, no-wrap
msgid "Pin numbering of GPIO connectors"
msgstr ""

#. type: Target for macro image
#: src/drivers/gm.adoc:61
#, no-wrap
msgid "images/GM_IOpinout.png"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:63
#, no-wrap
msgid "Pinout of GPIO connectors"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:67
#, no-wrap
msgid "IOx/7"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:67
#, no-wrap
msgid "IOx/5"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:67
#, no-wrap
msgid "IOx/3"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:67
#, no-wrap
msgid "IOx/1"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:68
#, no-wrap
msgid "VCC"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:73 src/drivers/gm.adoc:536 src/drivers/gm.adoc:542
#, no-wrap
msgid "GND"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:73
#, no-wrap
msgid "IOx/6"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:73
#, no-wrap
msgid "IOx/4"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:73
#, no-wrap
msgid "IOx/2"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:74
#, no-wrap
msgid "IOx/0"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:80
msgid ""
"Each pin can be configured as digital input or output.  GM6-PCI motion "
"control card has 4 general purpose I/O (GPIO) connectors, with eight "
"configurable I/O on each.  Every GPIO pin and parameter name begins as "
"follows:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:83
#, no-wrap
msgid "gm.<nr of card>.gpio.<nr of gpio con>\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:86
msgid "where _<nr of gpio con>_ is from 0 to 3. For example:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:89
#, no-wrap
msgid "gm.0.gpio.0.in-0\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:93
msgid ""
"indicates the state of the first pin of the first GPIO connector on the GM6-"
"PCI card. HAL pins are updated by function"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:96 src/drivers/gm.adoc:186 src/drivers/gm.adoc:366
#: src/drivers/gm.adoc:498 src/drivers/gm.adoc:563
#, no-wrap
msgid "gm.<nr of card>.read\n"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:100
#, no-wrap
msgid "GPIO pins"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:103 src/drivers/gm.adoc:114 src/drivers/gm.adoc:191
#: src/drivers/gm.adoc:295 src/drivers/gm.adoc:372 src/drivers/gm.adoc:411
#: src/drivers/gm.adoc:420 src/drivers/gm.adoc:477 src/drivers/gm.adoc:488
#: src/drivers/gm.adoc:505 src/drivers/gm.adoc:516 src/drivers/gm.adoc:570
#: src/drivers/gm.adoc:584 src/drivers/gm.adoc:705 src/drivers/gm.adoc:712
#: src/drivers/gm.adoc:748 src/drivers/gm.adoc:785 src/drivers/gm.adoc:795
#: src/drivers/gm.adoc:839 src/drivers/gm.adoc:852
#, no-wrap
msgid "Type and direction"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:104 src/drivers/gm.adoc:192 src/drivers/gm.adoc:296
#: src/drivers/gm.adoc:373 src/drivers/gm.adoc:412 src/drivers/gm.adoc:478
#: src/drivers/gm.adoc:506 src/drivers/gm.adoc:571 src/drivers/gm.adoc:706
#: src/drivers/gm.adoc:749 src/drivers/gm.adoc:786 src/drivers/gm.adoc:840
#, no-wrap
msgid "Pin description"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:104
#, no-wrap
msgid ".in-_<0-7>_"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:104 src/drivers/gm.adoc:105 src/drivers/gm.adoc:380
#: src/drivers/gm.adoc:506 src/drivers/gm.adoc:571 src/drivers/gm.adoc:572
#: src/drivers/gm.adoc:573 src/drivers/gm.adoc:574 src/drivers/gm.adoc:575
#: src/drivers/gm.adoc:576 src/drivers/gm.adoc:585 src/drivers/gm.adoc:586
#: src/drivers/gm.adoc:587 src/drivers/gm.adoc:588 src/drivers/gm.adoc:706
#: src/drivers/gm.adoc:749 src/drivers/gm.adoc:750 src/drivers/gm.adoc:845
#: src/drivers/gm.adoc:846
#, no-wrap
msgid "(bit, Out)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:105 src/drivers/gm.adoc:750 src/drivers/gm.adoc:846
#, no-wrap
msgid "Input pin"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:105
#, no-wrap
msgid ".in-not-_<0-7>_"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:106 src/drivers/gm.adoc:751 src/drivers/gm.adoc:847
#, no-wrap
msgid "Negated input pin"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:106
#, no-wrap
msgid ".out-_<0-7>_"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:106 src/drivers/gm.adoc:192 src/drivers/gm.adoc:296
#: src/drivers/gm.adoc:373 src/drivers/gm.adoc:412 src/drivers/gm.adoc:478
#: src/drivers/gm.adoc:787 src/drivers/gm.adoc:841
#, no-wrap
msgid "(bit, In)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:107
#, no-wrap
msgid "Output pin. Used only when GPIO is set to output."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:111
#, no-wrap
msgid "GPIO parameters"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:115 src/drivers/gm.adoc:213 src/drivers/gm.adoc:307
#: src/drivers/gm.adoc:421 src/drivers/gm.adoc:489 src/drivers/gm.adoc:517
#: src/drivers/gm.adoc:585 src/drivers/gm.adoc:713 src/drivers/gm.adoc:796
#: src/drivers/gm.adoc:853
#, no-wrap
msgid "Parameter description"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:115
#, no-wrap
msgid ".is-out-_<0-7>_"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:115 src/drivers/gm.adoc:116 src/drivers/gm.adoc:213
#: src/drivers/gm.adoc:218 src/drivers/gm.adoc:233 src/drivers/gm.adoc:310
#: src/drivers/gm.adoc:313 src/drivers/gm.adoc:314 src/drivers/gm.adoc:517
#: src/drivers/gm.adoc:713
#, no-wrap
msgid "(bit, R/W)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:116
#, no-wrap
msgid "When True, the corresponding GPIO is set to totem-pole output, other wise set to high impedance input."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:116
#, no-wrap
msgid ".invert-out-_<0-7>_"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:117
#, no-wrap
msgid "When True, pin value will be inverted. Used when pin is configured as output."
msgstr ""

#. type: Title ==
#: src/drivers/gm.adoc:119
#, no-wrap
msgid "Axis connectors"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:121
#, no-wrap
msgid "Pin numbering of axis connectors(((pin-numbering-axis)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/drivers/gm.adoc:122
#, no-wrap
msgid "Pin numbering of axis connectors"
msgstr ""

#. type: Target for macro image
#: src/drivers/gm.adoc:122
#, no-wrap
msgid "images/GM_AXISpinout.png"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:124
#, no-wrap
msgid "Pinout of axis connectors"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:128
#, no-wrap
msgid "Encoder A"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:129
#, no-wrap
msgid "+5 Volt (PC)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:130
#, no-wrap
msgid "Encoder B"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:131
#, no-wrap
msgid "Encoder Index"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:132
#, no-wrap
msgid "Fault"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:133
#, no-wrap
msgid "Power Enabled"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:134
#, no-wrap
msgid "Step/CCW/B"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:135
#, no-wrap
msgid "Direction/CW/A"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:136
#, no-wrap
msgid "Ground (PC)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:137
#, no-wrap
msgid "DAC serial line"
msgstr ""

#. type: Title ===
#: src/drivers/gm.adoc:138
#, no-wrap
msgid "Axis interface modules"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:146
msgid ""
"Small sized DIN rail mounted interface modules gives easy way of connecting "
"different types of servo modules to the axis connectors.  Seven different "
"system configurations are presented in the http://www.generalmechatronics."
"com/data/products/robot_controller/PCI_UserManual_eng.pdf[System integration "
"manual] for evaluating typical applications. Also the detailed description "
"of the Axis modules can be found in the System integration manual."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:149
msgid ""
"For evaluating the appropriate servo-drive structure the modules have to be "
"connected as the following block diagram shows:"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:150
#, no-wrap
msgid "Servo axis interfaces(((axis-interface)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/drivers/gm.adoc:151
#, no-wrap
msgid "Servo axis interfaces"
msgstr ""

#. type: Target for macro image
#: src/drivers/gm.adoc:151
#, no-wrap
msgid "images/GM_AxisInterface.png"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:158
msgid ""
"The GM6-PCI motion control card has six encoder modules.  Each encoder "
"module has three channels:"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:160
msgid "Channel-A"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:161
msgid "Channel-B"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:162
msgid "Channel-I (index)"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:166
msgid ""
"It is able to count quadrature encoder signals or step/dir signals.  Each "
"encoder module is connected to the inputs of the corresponding RJ50 axis "
"connector."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:168
msgid "Every encoder pin and parameter name begins as follows:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:171
#, no-wrap
msgid "gm.<nr of card>.encoder.<nr of axis>\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:174 src/drivers/gm.adoc:278 src/drivers/gm.adoc:395
#: src/drivers/gm.adoc:459 src/drivers/gm.adoc:552
msgid "where _<nr of axis>_ is from 0 to 5. For example:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:177
#, no-wrap
msgid "gm.0.encoder.0.position\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:180
msgid "refers to the position of encoder module of axis 0."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:183
msgid ""
"The GM6-PCI card counts the encoder signal independently from LinuxCNC.  HAL "
"pins are updated by function:"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:188
#, no-wrap
msgid "Encoder pins"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:192
#, no-wrap
msgid ".reset"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:193 src/drivers/gm.adoc:842
#, no-wrap
msgid "When True, resets counts and position to zero."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:193
#, no-wrap
msgid ".rawcounts"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:193 src/drivers/gm.adoc:194 src/drivers/gm.adoc:297
#: src/drivers/gm.adoc:842 src/drivers/gm.adoc:843
#, no-wrap
msgid "(s32, Out)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:194
#, no-wrap
msgid "The raw count is the counts, but unaffected by reset or the index pulse."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:194
#, no-wrap
msgid ".counts"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:195 src/drivers/gm.adoc:843 man/man9/encoder.9:70
#, no-wrap
msgid "Position in encoder counts."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:195
#, no-wrap
msgid ".position"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:195 src/drivers/gm.adoc:201 src/drivers/gm.adoc:298
#: src/drivers/gm.adoc:786 src/drivers/gm.adoc:840 src/drivers/gm.adoc:844
#, no-wrap
msgid "(float, Out)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:196
#, no-wrap
msgid "Position in scaled units (=.counts/.position-scale)."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:196
#, no-wrap
msgid ".index-enabled"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:196
#, no-wrap
msgid "(bit, IO)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:201
#, no-wrap
msgid ""
"When True, counts and position are rounded or reset\n"
"  (depends on index-mode) on next rising edge of channel-I.\n"
"  Every time position is reset because of Index, index-enabled\n"
"  pin is set to 0 and remain 0 until connected HAL pin does\n"
"  not set it."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:201
#, no-wrap
msgid ".velocity"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:207
#, no-wrap
msgid ""
"Velocity in scaled units per second. GM encoder uses high\n"
" frequency hardware timer to measure time between encoder\n"
" pulses in order to calculate velocity. It greatly reduces\n"
" quantization noise as compared to simply differentiating\n"
" the position output. When the measured velocity is below\n"
" min-speed-estimate, the velocity output is 0."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:209
#, no-wrap
msgid "Encoder parameters"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:212 src/drivers/gm.adoc:306
#, no-wrap
msgid "Type and Read/Write"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:213
#, no-wrap
msgid ".counter-mode"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:218
#, no-wrap
msgid ""
"When True, the counter counts each rising edge of the\n"
"  channel-A input to the direction determined by channel-B.\n"
"  This is useful for counting the output of a single channel\n"
"  (non-quadrature) or step/dir signal sensor. When false, it\n"
"  counts in quadrature mode."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:218
#, no-wrap
msgid ".index-mode"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:225
#, no-wrap
msgid ""
"When True and .index-enabled is also true, .counts and\n"
"  .position are rounded (based on .counts-per-rev) at rising\n"
"  edge of channel-I. This is useful to correct few pulses\n"
"  error caused by noise. In round mode, it is essential to\n"
"  set .counts-per-rev parameter correctly. When .index-mode\n"
"  is False and .index-enabled is true, .counts and .position\n"
"  are reset at channel-I pulse."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:225
#, no-wrap
msgid ".counts-per-rev"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:225
#, no-wrap
msgid "(s32, R/V)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:233
#, no-wrap
msgid ""
"Determine how many counts are between two index pulses. It\n"
"  is used only in round mode, so when both .index-enabled and\n"
"  .index-mode parameters are True. GM encoder process encoder signal\n"
"  in 4x mode, so for example in case of a 500 CPR encoder it should\n"
"  be set to 2000. This parameter can be easily measured by setting\n"
"  .index-enabled True and .index-mode False (so that .counts resets\n"
"  at channel-I pulse), than move axis by hand and see the maximum\n"
"  magnitude of .counts pin in halmeter."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:233
#, no-wrap
msgid ".index-invert"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:235
#, no-wrap
msgid ""
"When True, channel-I event (reset or round) occur on falling\n"
"  edge of channel-I signal, otherwise on rising edge."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:235
#, no-wrap
msgid ".min-speed-estimate"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:235 src/drivers/gm.adoc:239 src/drivers/gm.adoc:315
#: src/drivers/gm.adoc:317 src/drivers/gm.adoc:319 src/drivers/gm.adoc:421
#: src/drivers/gm.adoc:422 src/drivers/gm.adoc:423 src/drivers/gm.adoc:424
#: src/drivers/gm.adoc:489 src/drivers/gm.adoc:521 src/drivers/gm.adoc:796
#: src/drivers/gm.adoc:798 src/drivers/gm.adoc:800 src/drivers/gm.adoc:801
#: src/drivers/gm.adoc:802 src/drivers/gm.adoc:853 src/drivers/gm.adoc:854
#: src/drivers/gm.adoc:855
#, no-wrap
msgid "(float, R/W)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:239
#, no-wrap
msgid ""
"Determine the minimum measured velocity magnitude at which\n"
"  .velocity will be set as nonzero. Setting this parameter too\n"
"  low will cause it to take a long time for velocity to go to zero\n"
"  after encoder pulses have stopped arriving."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:239 src/drivers/gm.adoc:319 src/drivers/gm.adoc:489
#, no-wrap
msgid ".position-scale"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:242
#, no-wrap
msgid ""
"Scale in counts per length unit. .position=.counts/.position-scale.\n"
"  For example, if position-scale is 2000, then 1000 counts of the\n"
"  encoder will produce a position of 0.5 units."
msgstr ""

#. type: Title ==
#: src/drivers/gm.adoc:244 src/drivers/gm.adoc:330 src/drivers/gm.adoc:716
#: src/drivers/gm.adoc:753 src/drivers/gm.adoc:805 src/drivers/gm.adoc:858
#: src/drivers/mitsub-vfd.adoc:106 src/drivers/vfs11.adoc:231
#, no-wrap
msgid "HAL example"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:247
msgid ""
"Setting encoder module of axis 0 to receive 500 CPR quadrature encoder "
"signal and use reset to round position."
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:256
#, no-wrap
msgid ""
"setp gm.0.encoder.0.counter-mode 0         # 0: quad, 1: stepDir\n"
"setp gm.0.encoder.0.index-mode 1           # 0: reset pos at index, 1:round pos at index\n"
"setp gm.0.encoder.0.counts-per-rev 2000      # GM process encoder in 4x mode, 4x500=2000\n"
"setp gm.0.encoder.0.index-invert 0\n"
"setp gm.0.encoder.0.min-speed-estimate 0.1 # in position unit/s\n"
"setp gm.0.encoder.0.position-scale 20000   # 10 encoder rev cause the machine to\n"
"                                             move one position unit (10x2000)\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:259
msgid "Connect encoder position to LinuxCNC position feedback:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:262
#, no-wrap
msgid "net Xpos-fb gm.0.encoder.0.position => joint.0.motor-pos-fb\n"
msgstr ""

#. type: Title ===
#: src/drivers/gm.adoc:264
#, no-wrap
msgid "StepGen module"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:270
msgid ""
"The GM6-PCI motion control card has six StepGen modules, one for each "
"joint.  Each module has two output signals. It can produce Step/Direction, "
"Up/Down or Quadrature (A/B) pulses. Each StepGen module is connected to the "
"pins of the corresponding RJ50 axis connector."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:272
msgid "Every StepGen pin and parameter name begins as follows:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:275
#, no-wrap
msgid "gm.<nr of card>.stepgen.<nr of axis>\n"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:281
#, no-wrap
msgid "gm.0.stepgen.0.position-cmd\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:284
msgid "refers to the position command of StepGen module of axis 0 on card 0."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:287
msgid ""
"The GM6-PCI card generates step pulses independently from LinuxCNC.  HAL "
"pins are updated by function"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:290 src/drivers/gm.adoc:405 src/drivers/gm.adoc:470
#, no-wrap
msgid "gm.<nr of card>.write\n"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:292
#, no-wrap
msgid "StepGen module pins"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:296 src/drivers/gm.adoc:412 src/drivers/gm.adoc:478
#, no-wrap
msgid ".enable"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:297
#, no-wrap
msgid "StepGen produces pulses only when this pin is true."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:297
#, no-wrap
msgid ".count-fb"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:298
#, no-wrap
msgid "Position feedback in counts unit."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:298 src/drivers/gm.adoc:480
#, no-wrap
msgid ".position-fb"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:299
#, no-wrap
msgid "Position feedback in position unit."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:299 src/drivers/gm.adoc:479
#, no-wrap
msgid ".position-cmd"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:299 src/drivers/gm.adoc:300 src/drivers/gm.adoc:413
#: src/drivers/gm.adoc:479 src/drivers/gm.adoc:480 src/drivers/gm.adoc:789
#, no-wrap
msgid "(float, In)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:300
#, no-wrap
msgid "Commanded position in position units. Used in position mode only."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:300
#, no-wrap
msgid ".velocity-cmd"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:301
#, no-wrap
msgid "Commanded velocity in position units per second. Used in velocity mode only."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:303
#, no-wrap
msgid "StepGen module parameters"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:307
#, no-wrap
msgid ".step-type"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:307 src/drivers/gm.adoc:320 src/drivers/gm.adoc:321
#: src/drivers/gm.adoc:322
#, no-wrap
msgid "(u32, R/W)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:310
#, no-wrap
msgid ""
"When 0, module produces Step/Dir signal. When 1, it\n"
"  produces Up/Down step signals. And when it is 2, it\n"
"  produces quadrature output signals."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:310
#, no-wrap
msgid ".control-type"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:313
#, no-wrap
msgid ""
"When True, .velocity-cmd is used as reference and velocity\n"
"  control calculate pulse rate output. When False, .position-cmd\n"
"  is used as reference and position control calculate pulse rate output."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:313
#, no-wrap
msgid ".invert-step1"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:314
#, no-wrap
msgid "Invert the output of channel 1 (Step signal in StepDir mode)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:314
#, no-wrap
msgid ".invert-step2"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:315
#, no-wrap
msgid "Invert the output of channel 2 (Dir signal in StepDir mode)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:315
#, no-wrap
msgid ".maxvel"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:317
#, no-wrap
msgid ""
"Maximum velocity in position units per second. If it is set to 0.0,\n"
"  .maxvel parameter is ignored."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:317
#, no-wrap
msgid ".maxaccel"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:319
#, no-wrap
msgid ""
"Maximum acceleration in position units per second squared. If\n"
"  it is set to 0.0, .maxaccel parameter is ignored."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:320
#, no-wrap
msgid "Scale in steps per length unit."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:320
#, no-wrap
msgid ".steplen"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:321
#, no-wrap
msgid "Length of step pulse in nano-seconds."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:321
#, no-wrap
msgid ".stepspace"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:322
#, no-wrap
msgid "Minimum time between two step pulses in nano-seconds."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:322
#, no-wrap
msgid ".dirdelay"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:323
#, no-wrap
msgid "Minimum time between step pulse and direction change in nano-seconds."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:326
msgid "For evaluating the appropriate values see the timing diagrams below:"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:327
#, no-wrap
msgid "Reference signal timing diagrams(((refsig-timing-diagram)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/drivers/gm.adoc:328
#, no-wrap
msgid "Reference signal timing diagrams"
msgstr ""

#. type: Target for macro image
#: src/drivers/gm.adoc:328
#, no-wrap
msgid "images/GM_RefSignals.png"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:333
msgid ""
"Setting StepGen module of axis 0 to generate 1000 step pulse per position "
"unit:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:347
#, no-wrap
msgid ""
"setp gm.0.stepgen.0.step-type 0         # 0:stepDir, 1:UpDown, 2:Quad\n"
"setp gm.0.stepgen.0.control-type 0      # 0:Pos. control, 1:Vel. Control\n"
"setp gm.0.stepgen.0.invert-step1 0\n"
"setp gm.0.stepgen.0.invert-step2 0\n"
"setp gm.0.stepgen.0.maxvel 0            # do not set maxvel for step\n"
"                                        # generator, let interpolator control it.\n"
"setp gm.0.stepgen.0.maxaccel 0          # do not set max acceleration for\n"
"                                        # step generator, let interpolator control it.\n"
"setp gm.0.stepgen.0.position-scale 1000 # 1000 step/position unit\n"
"setp gm.0.stepgen.0.steplen 1000        # 1000 ns = 1 µs\n"
"setp gm.0.stepgen.0.stepspace1000       # 1000 ns = 1 µs\n"
"setp gm.0.stepgen.0.dirdelay 2000       # 2000 ns = 2 µs\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:350
msgid "Connect StepGen to axis 0 position reference and enable pins:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:354
#, no-wrap
msgid ""
"net Xpos-cmd joint.0.motor-pos-cmd => gm.0.stepgen.0.position-cmd\n"
"net Xen joint.0.amp-enable-out => gm.0.stepgen.0.enable\n"
msgstr ""

#. type: Title ===
#: src/drivers/gm.adoc:356
#, no-wrap
msgid "Enable and Fault signals"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:361
msgid ""
"The GM6-PCI motion control card has one enable output and one fault input "
"HAL pins, both are connected to each RJ50 axis connector and to the CAN "
"connector."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:363 src/drivers/gm.adoc:467 src/drivers/gm.adoc:560
msgid "HAL pins are updated by function:"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:368
#, no-wrap
msgid "Enable and Fault signal pins"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:373
#, no-wrap
msgid "gm.<nr of card>.power-enable"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:380
#, no-wrap
msgid ""
"If this pin is True,\n"
"\n"
"  * and Watch Dog Timer is not expired\n"
"  * and there is no power fault\n"
"\n"
"  then power enable pins of axis- and CAN connectors\n"
"  are set to high, otherwise set to low."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:380
#, no-wrap
msgid "gm.<nr of card>.power-fault"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:381
#, no-wrap
msgid "Power fault input."
msgstr ""

#. type: Title ===
#: src/drivers/gm.adoc:383
#, no-wrap
msgid "Axis DAC"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:389
msgid ""
"The GM6-PCI motion control card has six serial axis DAC driver modules, one "
"for each joint. Each module is connected to the pin of the corresponding "
"RJ50 axis connector.  Every axis DAC pin and parameter name begins as "
"follows:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:392
#, no-wrap
msgid "gm.<nr of card>.dac.<nr of axis>\n"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:398
#, no-wrap
msgid "gm.0.dac.0.value\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:402
msgid ""
"refers to the output voltage of DAC module of axis 0.  HAL pins are updated "
"by function:"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:407
#, no-wrap
msgid "Axis DAC pins"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:413
#, no-wrap
msgid "Enable DAC output. When enable is false, DAC output is 0.0 V."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:413
#, no-wrap
msgid ".value"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:414 src/drivers/gm.adoc:790
#, no-wrap
msgid "Value of DAC output in Volts."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:416
#, no-wrap
msgid "Axis DAC parameters"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:421
#, no-wrap
msgid ".offset"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:422 src/drivers/gm.adoc:801
#, no-wrap
msgid "Offset is added to the value before the hardware is updated."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:422
#, no-wrap
msgid ".high-limit"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:423 src/drivers/gm.adoc:802
#, no-wrap
msgid "Maximum output voltage of the hardware in volts."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:423
#, no-wrap
msgid ".low-limit"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:424 src/drivers/gm.adoc:803
#, no-wrap
msgid "Minimum output voltage of the hardware in volts."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:424
#, no-wrap
msgid ".invert-serial"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:433
#, no-wrap
msgid ""
"GM6-PCI card is communicating with DAC\n"
"  hardware via fast serial communication\n"
"  to highly reduce time delay compared to\n"
"  PWM. DAC module is recommended to be\n"
"  isolated which is negating serial\n"
"  communication line. In case of isolation,\n"
"  leave this parameter to default (0),\n"
"  while in case of none-isolation, set\n"
"  this parameter to 1."
msgstr ""

#. type: Title ==
#: src/drivers/gm.adoc:435
#, no-wrap
msgid "CAN-bus servo amplifiers"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:443
msgid ""
"The GM6-PCI motion control card has CAN module to drive CAN servo "
"amplifiers. Implementation of higher level protocols like CANopen is further "
"development. Currently GM produced power amplifiers has upper level driver "
"which export pins and parameters to HAL. They receive position reference and "
"provide encoder feedback via CAN bus."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:448
msgid ""
"The frames are standard (11 bit) ID frames, with 4 byte data length.  The "
"baud rate is 1 Mbit.  The position command IDs for axis 0..5 are "
"0x10..0x15.  The position feedback IDs for axis 0..5 are 0x20..0x25."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:451
msgid ""
"These configuration can be changed with the modification of hal_gm.c and "
"recompiling LinuxCNC."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:453
msgid "Every CAN pin and parameter name begins as follows:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:456
#, no-wrap
msgid "gm.<nr of card>.can-gm.<nr of axis>\n"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:462
#, no-wrap
msgid "gm.0.can-gm.0.position\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:465
msgid "refers to the output position of axis 0 in position units."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:474
#, no-wrap
msgid "CAN module pins"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:479
#, no-wrap
msgid "Enable sending position references."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:480
#, no-wrap
msgid "Commanded position in position units."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:481
#, no-wrap
msgid "Feed back position in position units."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:485
#, no-wrap
msgid "CAN module parameters"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:490 src/drivers/gm.adoc:856
#, no-wrap
msgid "Scale in per length unit."
msgstr ""

#. type: Title ==
#: src/drivers/gm.adoc:492
#, no-wrap
msgid "Watchdog timer"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:495
msgid "Watchdog timer resets at function:"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:502
#, no-wrap
msgid "Watchdog pins"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:506
#, no-wrap
msgid "gm._<nr of card>_.watchdog-expired"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:507
#, no-wrap
msgid "Indicates that watchdog timer is expired."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:510
msgid ""
"Watchdog timer overrun causes the set of power-enable to low in hardware."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:513
#, no-wrap
msgid "Watchdog parameters"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:517
#, no-wrap
msgid "gm._<nr of card>_.watchdog-enable"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:521
#, no-wrap
msgid ""
"Enable watchdog timer.\n"
"  It is strongly recommended to enable watchdog timer, because\n"
"  it can disables all the servo amplifiers by pulling down all\n"
"  enable signal in case of PC error."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:521
#, no-wrap
msgid "gm._<nr of card>_.watchdog-timeout-ns"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:525
#, no-wrap
msgid ""
"Time interval in within the\n"
"  gm._<nr of card>_.read function must be executed. The gm._<nr of card>_.read\n"
"  is typically added to servo-thread, so watch timeout is typically set to 3 times\n"
"  of the servo period."
msgstr ""

#. type: Title ==
#: src/drivers/gm.adoc:527
#, no-wrap
msgid "End-, homing- and E-stop switches"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:529
#, no-wrap
msgid "Pin numbering of homing & end switch connector(((pin-numbering-endsw)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/drivers/gm.adoc:530
#, no-wrap
msgid "Pin numbering of homing and end switch connector"
msgstr ""

#. type: Target for macro image
#: src/drivers/gm.adoc:530
#, no-wrap
msgid "images/GM_ENDSWpinout.png"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:532
#, no-wrap
msgid "End- and homing switch connector pinout"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:535
#, no-wrap
msgid "*25*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:535
#, no-wrap
msgid "*23*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:535
#, no-wrap
msgid "*21*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:535
#, no-wrap
msgid "*19*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:535
#, no-wrap
msgid "*17*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:535
#, no-wrap
msgid "*15*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:535
#, no-wrap
msgid "*13*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:535
#, no-wrap
msgid "*11*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:535
#, no-wrap
msgid "*9*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:535
#, no-wrap
msgid "*7*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:535
#, no-wrap
msgid "*5*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:535
#, no-wrap
msgid "*3*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:536
#, no-wrap
msgid "*1*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:536
#, no-wrap
msgid "1/End-"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:536
#, no-wrap
msgid "2/End+"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:536
#, no-wrap
msgid "2/Hom-ing"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:536
#, no-wrap
msgid "3/End-"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:536
#, no-wrap
msgid "4/End+"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:536
#, no-wrap
msgid "4/Hom-ing"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:536
#, no-wrap
msgid "5/End-"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:536
#, no-wrap
msgid "6/End+"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:536
#, no-wrap
msgid "6/Hom-ing"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:536
#, no-wrap
msgid "E-Stop 2"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:537 src/drivers/gm.adoc:543
#, no-wrap
msgid "V+ (Ext.)"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:541
#, no-wrap
msgid "*26*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:541
#, no-wrap
msgid "*24*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:541
#, no-wrap
msgid "*22*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:541
#, no-wrap
msgid "*20*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:541
#, no-wrap
msgid "*18*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:541
#, no-wrap
msgid "*16*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:541
#, no-wrap
msgid "*14*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:541
#, no-wrap
msgid "*12*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:541
#, no-wrap
msgid "*10*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:541
#, no-wrap
msgid "*8*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:541
#, no-wrap
msgid "*6*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:541
#, no-wrap
msgid "*4*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:542
#, no-wrap
msgid "*2*"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:542
#, no-wrap
msgid "1/End+"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:542
#, no-wrap
msgid "1/Hom-ing"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:542
#, no-wrap
msgid "2/End-"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:542
#, no-wrap
msgid "3/End+"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:542
#, no-wrap
msgid "3/Hom-ing"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:542
#, no-wrap
msgid "4/End-"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:542
#, no-wrap
msgid "5/End+"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:542
#, no-wrap
msgid "5/Hom-ing"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:542
#, no-wrap
msgid "6/End-"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:542
#, no-wrap
msgid "E-Stop 1"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:546
msgid ""
"The GM6-PCI motion control card has two limit- and one homing switch input "
"for each joint. All the names of these pins begin as follows:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:549
#, no-wrap
msgid "gm.<nr of card>.joint.<nr of axis>\n"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:555
#, no-wrap
msgid "gm.0.joint.0.home-sw-in\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:558
msgid "indicates the state of the axis 0 home switch."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:567
#, no-wrap
msgid "End- and homing switch pins"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:571
#, no-wrap
msgid ".home-sw-in"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:572
#, no-wrap
msgid "Home switch input"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:572
#, no-wrap
msgid ".home-sw-in-not"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:573
#, no-wrap
msgid "Negated home switch input"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:573
#, no-wrap
msgid ".neg-lim-sw-in"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:574
#, no-wrap
msgid "Negative limit switch input"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:574
#, no-wrap
msgid ".neg-lim-sw-in-not"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:575
#, no-wrap
msgid "Negated negative limit switch input"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:575
#, no-wrap
msgid ".pos-lim-sw-in"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:576
#, no-wrap
msgid "Positive limit switch input"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:576
#, no-wrap
msgid ".pos-lim-sw-in-not"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:577
#, no-wrap
msgid "Negated positive limit switch input"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:581
#, no-wrap
msgid "E-stop switch parameters"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:585
#, no-wrap
msgid "gm.0.estop.0.in"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:586
#, no-wrap
msgid "Estop 0 input"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:586
#, no-wrap
msgid "gm.0.estop.0.in-not"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:587
#, no-wrap
msgid "Negated Estop 0 input"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:587
#, no-wrap
msgid "gm.0.estop.1.in"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:588
#, no-wrap
msgid "Estop 1 input"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:588
#, no-wrap
msgid "gm.0.estop.1.in-not"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:589
#, no-wrap
msgid "Negated Estop 1 input"
msgstr ""

#. type: Title ==
#: src/drivers/gm.adoc:591
#, no-wrap
msgid "Status LEDs"
msgstr ""

#. type: Title ===
#: src/drivers/gm.adoc:593
#, no-wrap
msgid "CAN"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:596 src/drivers/gm.adoc:604
msgid "Color: Orange"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:598
msgid "Blink, during data communication."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:599
msgid "On, when any of the buffers are full - communication error."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:600
msgid "Off, when no data communication."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:601 src/plasma/qtplasmac.adoc:874
#, no-wrap
msgid "RS485"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:606
msgid "Blink, during initialization of modules on the bus"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:607
msgid "On, when the data communication is up between all initialized modules."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:608
msgid ""
"Off, when any of the initialized modules dropped off because of an error."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:612
msgid "Color: White"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:614
msgid "Blink, when LinuxCNC is running."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:615 src/drivers/gm.adoc:622
msgid "Otherwise off."
msgstr ""

#. type: Title ===
#: src/drivers/gm.adoc:616
#, no-wrap
msgid "Boot"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:619
msgid "Color: Green"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:621
msgid "On, when system booted successfully."
msgstr ""

#. type: Title ===
#: src/drivers/gm.adoc:623
#, no-wrap
msgid "Error"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:626
msgid "Color: Red"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:628
msgid "Off, when there is no fault in the system."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:629
msgid "Blink, when PCI communication error."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:630
msgid "On, when watchdog timer overflowed."
msgstr ""

#. type: Title ==
#: src/drivers/gm.adoc:631
#, no-wrap
msgid "RS485 I/O expander modules"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:635
msgid ""
"These modules were developed for expanding the I/O and function capability "
"along an RS485 line of the GM6-PCI motion control card."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:637
msgid "Available module types:"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:640
msgid ""
"8-channel relay output module - gives eight NO-NC relay output on a three "
"pole terminal connector for each channel."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:642
msgid ""
"8-channel digital input module - gives eight optical isolated digital input "
"pins."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:645
msgid ""
"8 channel ADC and 4-channel DAC module - gives four digital-to-analogue "
"converter outputs and eight analogue-to-digital inputs.  This module is also "
"optically isolated from the GM6-PCI card."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:647
#, no-wrap
msgid "*Automatic node recognizing:*\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:651
msgid ""
"Each node connected to the bus was recognized by the GM6-PCI card "
"automatically.  During starting LinuxCNC, the driver export pins and "
"parameters of all available modules automatically."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:653
#, no-wrap
msgid "*Fault handling:*\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:658
msgid ""
"If a module does not answer regularly the GM6-PCI card drops down the "
"module.  If a module with output do not gets data with correct CRC "
"regularly, the module switch to error state (green LED blinking), and turns "
"all outputs to error state."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:660
#, no-wrap
msgid "*Connecting the nodes:*\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:664
msgid ""
"The modules on the bus have to be connected in serial topology, with "
"termination resistors on the end. The start of the topology is the PCI card, "
"and the end is the last module."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:665
#, no-wrap
msgid "Connecting the RS485 nodes to the GM6-PCI card(((connecting-rs485)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/drivers/gm.adoc:666
#, no-wrap
msgid "Connecting the RS485 nodes to the GM6-PCI card"
msgstr ""

#. type: Target for macro image
#: src/drivers/gm.adoc:666
#, no-wrap
msgid "images/GM_RS485topology.png"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:669
#, no-wrap
msgid "*Addressing:*\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:671
msgid ""
"Each node on the bus has a 4 bit unique address that can be set with a red "
"DIP switch."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:673
#, no-wrap
msgid "*Status LED:*\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:675
msgid "A green LED indicates the status of the module:"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:677
msgid ""
"Blink, when the module is only powered, but not jet identified, or when "
"module is dropped down."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:678
msgid "Off, during identification (computer is on, but LinuxCNC not started)"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:679
msgid "On, when it communicates continuously."
msgstr ""

#. type: Title ===
#: src/drivers/gm.adoc:681
#, no-wrap
msgid "Relay output module"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:685 src/drivers/gm.adoc:729 src/drivers/gm.adoc:766
#: src/drivers/gm.adoc:818
msgid ""
"For pinout, connection and electrical charasteristics of the module, please "
"refer to the http://www.generalmechatronics.com/data/products/"
"robot_controller/PCI_UserManual_eng.pdf[System integration manual]."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:687 src/drivers/gm.adoc:731 src/drivers/gm.adoc:768
#: src/drivers/gm.adoc:820
msgid "All the pins and parameters are updated by the following function:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:690 src/drivers/gm.adoc:734 src/drivers/gm.adoc:771
#: src/drivers/gm.adoc:823
#, no-wrap
msgid "gm.<nr of card>.rs485\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:695 src/drivers/gm.adoc:738 src/drivers/gm.adoc:775
#: src/drivers/gm.adoc:827
msgid ""
"It should be added to servo thread or other thread with larger period to "
"avoid CPU overload.  Every RS485 module pin and parameter name begins as "
"follows:"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:698 src/drivers/gm.adoc:741 src/drivers/gm.adoc:778
#: src/drivers/gm.adoc:830
#, no-wrap
msgid "gm.<nr of card>.rs485.<module ID>\n"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:701 src/drivers/gm.adoc:744 src/drivers/gm.adoc:781
msgid "where <module ID> is from 00 to 15."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:702
#, no-wrap
msgid "Relay output module pins"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:706
#, no-wrap
msgid ".relay-<0-7>"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:707
#, no-wrap
msgid "Output pin for relay"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:709
#, no-wrap
msgid "Relay output module parameters"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:713
#, no-wrap
msgid ".invert-relay-<0-7>"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:714
#, no-wrap
msgid "Negate relay output pin"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:723
#, no-wrap
msgid ""
"gm.0.rs485.0.relay-0 # First relay of the node.\n"
"gm.0                 # Means the first GM6-PCI motion control card (PCI card address = 0)\n"
".rs485.0             # Select node with address 0 on the RS485 bus\n"
".relay-0             # Select the first relay\n"
msgstr ""

#. type: Title ===
#: src/drivers/gm.adoc:725
#, no-wrap
msgid "Digital input module"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:745
#, no-wrap
msgid "Digital input output module pins"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:749 src/drivers/gm.adoc:845
#, no-wrap
msgid ".in-<0-7>"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:750 src/drivers/gm.adoc:846
#, no-wrap
msgid ".in-not-<0-7>"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:760
#, no-wrap
msgid ""
"gm.0.rs485.0.in-0 # First input of the node.\n"
"# gm.0     - Means the first GM6-PCI motion control card (PCI card address = 0)\n"
"# .rs485.0 - Select node with address 0 on the RS485 bus\n"
"# .in-0    - Select the first digital input module\n"
msgstr ""

#. type: Title ===
#: src/drivers/gm.adoc:762
#, no-wrap
msgid "DAC & ADC module"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:782
#, no-wrap
msgid "DAC & ADC module pins"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:786
#, no-wrap
msgid ".adc-<0-7>"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:787 src/drivers/gm.adoc:841
#, no-wrap
msgid "Value of ADC input in Volts."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:787
#, no-wrap
msgid ".dac-enable-<0-3>"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:789
#, no-wrap
msgid ""
"Enable DAC output. When enable is\n"
"                                             false DAC output is set to 0.0 V."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:789
#, no-wrap
msgid ".dac-<0-3>"
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:792
#, no-wrap
msgid "DAC & ADC module parameters"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:796
#, no-wrap
msgid ".adc-scale-<0-7>"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:798
#, no-wrap
msgid ""
"The input voltage will be multiplied by\n"
"                                               scale before being output to .adc- pin."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:798
#, no-wrap
msgid ".adc-offset-<0-7>"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:800
#, no-wrap
msgid ""
"Offset is subtracted from the hardware input\n"
"                                               voltage after the scale multiplier has been applied."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:800
#, no-wrap
msgid ".dac-offset-<0-3>"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:801
#, no-wrap
msgid ".dac-high-limit-<0-3>"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:802
#, no-wrap
msgid ".dac-low-limit-<0-3>"
msgstr ""

#. type: delimited block -
#: src/drivers/gm.adoc:812 src/drivers/gm.adoc:865
#, no-wrap
msgid ""
"gm.0.rs485.0.adc-0 # First analogue channel of the node.\n"
"# gm.0     - Means the first GM6-PCI motion control card (PCI card address = 0)\n"
"# .rs485.0 - Select node with address 0 on the RS485 bus\n"
"# .adc-0   - Select the first analogue input of the module\n"
msgstr ""

#. type: Title ===
#: src/drivers/gm.adoc:814
#, no-wrap
msgid "Teach Pendant module"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:835
msgid ""
"where _<module ID>_ is from 00 to 15.  Note that on the Teach Pendant module "
"it cannot be changed, and pre-programmed as zero.  Upon request it can be "
"delivered with firmware pre-programmed different ID."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:836
#, no-wrap
msgid "Teach Pendant module pins"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:840
#, no-wrap
msgid ".adc-<0-5>"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:841
#, no-wrap
msgid ".enc-reset"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:842
#, no-wrap
msgid ".enc-counts"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:843
#, no-wrap
msgid ".enc-rawcounts"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:844
#, no-wrap
msgid "The raw count is the counts, but unaffected by reset."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:844
#, no-wrap
msgid ".enc-position"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:845
#, no-wrap
msgid "Position in scaled units (=.enc-counts/.enc-position-scale)."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:849
#, no-wrap
msgid "Teach Pendant module parameters"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:853
#, no-wrap
msgid ".adc-scale-<0-5>"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:854
#, no-wrap
msgid "The input voltage will be multiplied by scale before being output to .adc- pin."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:854
#, no-wrap
msgid ".adc-offset-<0-5>"
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:855
#, no-wrap
msgid "Offset is subtracted from the hardware input voltage after the scale multiplier has been applied."
msgstr ""

#. type: Table
#: src/drivers/gm.adoc:855
#, no-wrap
msgid ".enc-position-scale"
msgstr ""

#. type: Title ==
#: src/drivers/gm.adoc:867
#, no-wrap
msgid "Errata"
msgstr ""

#. type: Title ===
#: src/drivers/gm.adoc:869
#, no-wrap
msgid "GM6-PCI card Errata"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:872
msgid ""
"The revision number in this section refers to the revision of the GM6-PCI "
"card device."
msgstr ""

#. type: Block title
#: src/drivers/gm.adoc:873
#, no-wrap
msgid "Rev. 1.2"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:877
msgid ""
"Error: The PCI card do not boot, when Axis 1. END B switch is active (low).  "
"Found on November 16, 2013."
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:879
msgid "Reason: This switch is connected to a boot setting pin of FPGA"
msgstr ""

#. type: Plain text
#: src/drivers/gm.adoc:881
msgid ""
"Problem fix/workaround: Use other switch pin, or connect only normally open "
"switch to this switch input pin."
msgstr ""

#. type: Title =
#: src/drivers/gs2.adoc:5
#, no-wrap
msgid "GS2 VFD Driver(((GS2 VFD Driver)))"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:15
msgid ""
"This is a userspace HAL program for the GS2 series of VFD's at Automation "
"Direct. footnote:[In Europe the equivalent can be found under the brand name "
"Omron.]"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:17 src/drivers/mitsub-vfd.adoc:27
#: src/drivers/pmx485.adoc:22 src/drivers/vfs11.adoc:23
msgid "This component is loaded using the halcmd \"loadusr\" command:"
msgstr ""

#. type: delimited block -
#: src/drivers/gs2.adoc:21
#, no-wrap
msgid "loadusr -Wn spindle-vfd gs2_vfd -n spindle-vfd\n"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:26
msgid ""
"The above command says: loadusr, wait for named to load, component gs2_vfd, "
"named spindle-vfd.  The HAL `loadusr` command is described in the <<sub:hal-"
"loadusr,loadusr>> chapter."
msgstr ""

#. type: Title ===
#: src/drivers/gs2.adoc:27 src/drivers/mitsub-vfd.adoc:37
#: src/drivers/pico-ppmc.adoc:44 src/drivers/vfs11.adoc:32 src/gui/mdro.adoc:54
#, no-wrap
msgid "Command Line Options"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:31
msgid ""
"'-b' or '--bits _<n>_' (default: 8) Set number of data bits to _n_, where "
"_n_ must be from 5 to 8 inclusive."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:33
msgid ""
"'-d' or '--device <path>' (default: /dev/ttyS0) Set the file path to the "
"serial device node to use."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:36
msgid ""
"'-g' or '--debug' Turn on debugging messages. This will also set the verbose "
"flag. Debug mode will cause all modbus messages to be printed in hex on the "
"terminal."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:39
msgid ""
"'-n' or '--name <string>' (default: gs2_vfd) Set the name of the HAL module. "
"The HAL comp name will be set to <string>, and all pin and parameter names "
"will begin with <string>."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:41
msgid ""
"'-p' or '--parity {even,odd,none}' (default: odd) Set serial parity to even, "
"odd, or none."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:44
msgid ""
"'-r' or '--rate _<n>_' (default: 38400) Set baud rate to _n_. It is an error "
"if the rate is not one of the following: 110, 300, 600, 1200, 2400, 4800, "
"9600, 19200, 38400, 57600, 115200."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:45
msgid "'-s' or '--stopbits {1,2}' (default: 1) Set serial stop bits to 1 or 2"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:47
msgid ""
"'-t' or '--target _<n>_' (default: 1) Set MODBUS target (slave) number. This "
"must match the device number you set on the GS2."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:48
msgid "'-v' or '--verbose' Turn on debug messages."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:50
msgid ""
"'-A' or '--accel-seconds' _<n>_ (default: 10.0) Seconds to accelerate the "
"spindle from 0 to max. RPM."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:53
msgid ""
"'-D' or '--decel-seconds' _<n>_ (default: 0.0) Seconds to decelerate the "
"spindle from max. RPM to 0. If set to 0.0 the spindle will be allowed to "
"coast to a stop without controlled deceleration."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:59
msgid ""
"'-R' or '--braking-resistor' This argument should be used when a braking "
"resistor is installed on the GS2 VFD (see Appendix A of the GS2 manual).  It "
"disables deceleration over-voltage stall prevention (see GS2 modbus "
"Parameter 6.05), allowing the VFD to keep braking even in situations where "
"the motor is regenerating high voltage. The regenerated voltage gets safely "
"dumped into the braking resistor."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:63 src/drivers/vfs11.adoc:53
msgid ""
"That if there are serial configuration errors, turning on verbose may result "
"in a flood of timeout errors."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:67
msgid ""
"With _<name>_ being \"gs2_vfd\" or the name given during loading with the `-"
"n` option:"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:69
msgid "'_<name>_.DC-bus-volts' (float, out) DC bus voltage of the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:70
msgid "'_<name>_.at-speed' (bit, out) when drive is at commanded speed"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:71
msgid "'_<name>_.err-reset' (bit, in) reset errors sent to VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:72
msgid "'_<name>_.firmware-revision' (s32, out) from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:73
msgid "'_<name>_.frequency-command' (float, out) from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:74
msgid "'_<name>_.frequency-out' (float, out) from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:75
msgid "'_<name>_.is-stopped' (bit, out) when the VFD reports 0 Hz output"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:76
msgid "'_<name>_.load-percentage' (float, out) from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:77
msgid "'_<name>_.motor-RPM' (float, out) from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:78
msgid "'_<name>_.output-current' (float, out) from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:79
msgid "'_<name>_.output-voltage' (float, out) from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:80
msgid "'_<name>_.power-factor' (float, out) from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:81
msgid "'_<name>_.scale-frequency' (float, out) from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:84
msgid ""
"'_<name>_.speed-command' (float, in) speed sent to VFD in RPM It is an error "
"to send a speed faster than the Motor Max RPM as set in the VFD."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:85
msgid "'_<name>_.spindle-fwd' (bit, in) 1 for FWD and 0 for REV sent to VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:86
msgid "'_<name>_.spindle-rev' (bit, in) 1 for REV and 0 if off"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:87
msgid "'_<name>_.spindle-on' (bit, in) 1 for ON and 0 for OFF sent to VFD"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:88
msgid ""
"'_<name>_.status-1' (s32, out) Drive Status of the VFD (see the GS2 manual)"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:89
msgid ""
"'_<name>_.status-2' (s32, out) Drive Status of the VFD (see the GS2 manual)"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:94
msgid ""
"The status value is a sum of all the bits that are on. So a 163 which means "
"the drive is in the run mode is the sum of 3 (run) + 32 (freq set by serial) "
"+ 128 (operation set by serial)."
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:98
msgid ""
"With _<name>_ being gs2_vfd or the name given during loading with the `-n` "
"option:"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:100
msgid "'_<name>_.error-count' (s32, RW)"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:101
msgid ""
"'_<name>_.loop-time' (float, RW) how often the modbus is polled (default: "
"0.1)"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:102
msgid "'_<name>_.nameplate-HZ' (float, RW) Nameplate Hz of motor (default: 60)"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:103
msgid ""
"'_<name>_.nameplate-RPM' (float, RW) Nameplate RPM of motor (default: 1730)"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:104
msgid "'_<name>_.retval' (s32, RW) the return value of an error in HAL"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:105
msgid "'_<name>_.tolerance' (s32, RW) speed tolerance (default: 0.01)"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:107
msgid ""
"'_<name>_.ack-delay' (s32, RW) number of read/write cycles before checking "
"at-speed (default 2)"
msgstr ""

#. type: Plain text
#: src/drivers/gs2.adoc:110
msgid ""
"For an example of using this component to drive a spindle see the <<cha:gs2-"
"spindle,GS2 Spindle>> example."
msgstr ""

#. type: Title =
#: src/drivers/hostmot2.adoc:5
#, no-wrap
msgid "Mesa HostMot2 Driver"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:24
msgid ""
"HostMot2 is an FPGA configuration developed by Mesa Electronics for their "
"line of 'Anything I/O' motion control cards. The firmware is open source, "
"portable and flexible. It can be configured (at compile-time)  with zero or "
"more instances (an object created at runtime) of each of several Modules: "
"encoders (quadrature counters), PWM generators, and step/dir generators. The "
"firmware can be configured (at run-time) to connect each of these instances "
"to pins on the I/O headers. I/O pins not driven by a Module instance revert "
"to general-purpose bi-directional digital I/O."
msgstr ""

#. type: Title ==
#: src/drivers/hostmot2.adoc:25
#, no-wrap
msgid "Firmware Binaries"
msgstr ""

#. type: Block title
#: src/drivers/hostmot2.adoc:27
#, no-wrap
msgid "50 Pin Header FPGA cards"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:32
msgid ""
"Several pre-compiled HostMot2 firmware binaries are available for the "
"different Anything I/O boards. (This list is incomplete, check the hostmot2-"
"firmware distribution for up-to-date firmware lists.)"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:34
msgid "3x20 (144 I/O pins): using hm2_pci module"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:35
msgid "24-channel servo"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:36
msgid "16-channel servo plus 24 step/dir generators"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:38
msgid "5i22 (96 I/O pins): using hm2_pci module"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:39
msgid "16-channel servo"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:40
msgid "8-channel servo plus 24 step/dir generators"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:42
msgid "5i20, 5i23, 4i65, 4i68 (72 I/O pins): using hm2_pci module"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:43
msgid "12-channel servo"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:44
msgid "8-channel servo plus 4 step/dir generators"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:45
msgid "4-channel servo plus 8 step/dir generators"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:47
msgid "7i43 (48 I/O pins): using hm2_7i43 module"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:48
msgid "8-channel servo (8 PWM generators & 8 encoders)"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:49
msgid "4-channel servo plus 4 step/dir generators"
msgstr ""

#. type: Block title
#: src/drivers/hostmot2.adoc:50
#, no-wrap
msgid "DB25 FPGA cards"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:54
msgid ""
"The 5i25 Superport FPGA card is preprogrammed when purchased and does not "
"need a firmware binary."
msgstr ""

#. type: Title ==
#: src/drivers/hostmot2.adoc:55
#, no-wrap
msgid "Installing Firmware"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:62
msgid ""
"Depending on how you installed LinuxCNC you may have to open the Synaptic "
"Package Manager from the System menu and install the package for your Mesa "
"card. The quickest way to find them is to do a search for 'hostmot2' in the "
"Synaptic Package Manager. Mark the firmware for installation, then apply."
msgstr ""

#. type: Title ==
#: src/drivers/hostmot2.adoc:63
#, no-wrap
msgid "Loading HostMot2"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:70
msgid ""
"The LinuxCNC support for the HostMot2 firmware is split into a generic "
"driver called 'hostmot2' and two low-level I/O drivers for the Anything I/O "
"boards. The low-level I/O drivers are 'hm2_7i43' and 'hm2_pci' (for all the "
"PCI- and PC-104/Plus-based Anything I/O boards). The hostmot2 driver must be "
"loaded first, using a HAL command like this:"
msgstr ""

#. type: delimited block -
#: src/drivers/hostmot2.adoc:74
#, no-wrap
msgid "loadrt hostmot2\n"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:77
msgid "See the hostmot2(9) man page for details."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:82
msgid ""
"The hostmot2 driver by itself does nothing, it needs access to actual boards "
"running the HostMot2 firmware. The low-level I/O drivers provide this "
"access. The low-level I/O drivers are loaded with commands like this:"
msgstr ""

#. type: delimited block -
#: src/drivers/hostmot2.adoc:87
#, no-wrap
msgid ""
"loadrt hm2_pci config=\"firmware=hm2/5i20/SVST8_4.BIT\n"
"       num_encoders=3 num_pwmgens=3 num_stepgens=1\"\n"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:90
msgid "The config parameters are described in the hostmot2 man page."
msgstr ""

#. type: SS
#: src/drivers/hostmot2.adoc:91 man/man9/hostmot2.9:1645
#, no-wrap
msgid "Watchdog"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:95
msgid ""
"The HostMot2 firmware may include a watchdog Module; if it does, the "
"hostmot2 driver will use it."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:98
msgid ""
"The watchdog must be petted by LinuxCNC periodically or it will bite.  The "
"hm2 write function (see below) pets the watchdog."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:106
msgid ""
"When the watchdog bites, all the board's I/O pins are disconnected from "
"their Module instances and become high-impedance inputs (pulled high).  The "
"state of the HostMot2 firmware modules is not disturbed (except for the "
"configuration of the I/O Pins). Encoder instances keep counting quadrature "
"pulses, and pwm- and step-generators keep generating signals (which are not "
"relayed to the motors, because the I/O Pins have become inputs)."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:109
msgid ""
"Resetting the watchdog resets the I/O pins to the configuration chosen at "
"load-time."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:112 man/man9/hostmot2.9:1670
msgid ""
"If the firmware includes a watchdog, the following HAL objects will be "
"exported:"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:118
msgid ""
"'has_bit' - (bit i/o) True if the watchdog has bit, False if the watchdog "
"has not bit. If the watchdog has bit and the has_bit bit is True, the user "
"can reset it to False to resume operation."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:125
msgid ""
"'timeout_ns' - (u32 read/write) Watchdog timeout, in nanoseconds.  This is "
"initialized to 5,000,000 (5 milliseconds) at module load time.  If more than "
"this amount of time passes between calls to the hm2 write function, the "
"watchdog will bite."
msgstr ""

#. type: Title ==
#: src/drivers/hostmot2.adoc:126
#, no-wrap
msgid "HostMot2 Functions"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:129
msgid ""
"'hm2_<BoardType>.<BoardNum>.read' - Read all inputs, update input HAL pins."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:131
msgid "'hm2_<BoardType>.<BoardNum>.write' - Write all outputs."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:134
msgid ""
"'hm2_<BoardType>.<BoardNum>.read_gpio' - Read the GPIO input pins only.  "
"(This function is not available on the 7i43 due to limitations of the EPP "
"bus.)"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:137
msgid ""
"'hm2_<BoardType>.<BoardNum>.write_gpio' - Write the GPIO control registers "
"and output pins only.  (This function is not available on the 7i43 due to "
"limitations of the EPP bus.)"
msgstr ""

#. type: delimited block =
#: src/drivers/hostmot2.adoc:144
msgid ""
"The above 'read_gpio' and 'write_gpio' functions should not normally be "
"needed, since the GPIO bits are read and written along with everything else "
"in the standard 'read' and 'write' functions above, which are normally run "
"in the servo thread."
msgstr ""

#. type: delimited block =
#: src/drivers/hostmot2.adoc:150
msgid ""
"The 'read_gpio' and 'write_gpio' functions were provided in case some very "
"fast (frequently updated) I/O is needed. These functions should be run in "
"the base thread. If you have need for this, please send an email and tell us "
"about it, and what your application is."
msgstr ""

#. type: Title ==
#: src/drivers/hostmot2.adoc:152
#, no-wrap
msgid "Pinouts"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:160
msgid ""
"The hostmot2 driver does not have a particular pinout. The pinout comes from "
"the firmware that the hostmot2 driver sends to the Anything I/O board. Each "
"firmware has different pinout, and the pinout depends on how many of the "
"available encoders, pwmgens, and stepgens are used. To get a pinout list for "
"your configuration after loading LinuxCNC in the terminal window type:"
msgstr ""

#. type: delimited block -
#: src/drivers/hostmot2.adoc:163
#, no-wrap
msgid "dmesg > hm2.txt\n"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:167
msgid ""
"The resulting text file will contain lots of information as well as the "
"pinout for the HostMot2 and any error and warning messages."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:170
msgid ""
"To reduce the clutter by clearing the message buffer before loading LinuxCNC "
"type the following in the terminal window:"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:182
msgid ""
"Now when you run LinuxCNC and then do a 'dmesg > hm2.txt' in the terminal "
"only the info from the time you loaded LinuxCNC will be in your file along "
"with your pinout. The file will be in the current directory of the terminal "
"window. Each line will contain the card name, the card number, the I/O Pin "
"number, the connector and pin, and the usage. From this printout you will "
"know the physical connections to your card based on your configuration."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:184
msgid "An example of a 5i20 configuration:"
msgstr ""

#. type: delimited block -
#: src/drivers/hostmot2.adoc:191
#, no-wrap
msgid ""
"[HOSTMOT2]\n"
"DRIVER=hm2_pci\n"
"BOARD=5i20\n"
"CONFIG=\"firmware=hm2/5i20/SVST8_4.BIT num_encoders=1 num_pwmgens=1 num_stepgens=3\"\n"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:194
msgid "The above configuration produced this printout."
msgstr ""

#. type: delimited block -
#: src/drivers/hostmot2.adoc:224
#, no-wrap
msgid ""
"[ 1141.053386] hm2/hm2_5i20.0: 72 I/O Pins used:\n"
"[ 1141.053394] hm2/hm2_5i20.0: IO Pin 000 (P2-01): IOPort\n"
"[ 1141.053397] hm2/hm2_5i20.0: IO Pin 001 (P2-03): IOPort\n"
"[ 1141.053401] hm2/hm2_5i20.0: IO Pin 002 (P2-05): Encoder #0, pin B (Input)\n"
"[ 1141.053405] hm2/hm2_5i20.0: IO Pin 003 (P2-07): Encoder #0, pin A (Input)\n"
"[ 1141.053408] hm2/hm2_5i20.0: IO Pin 004 (P2-09): IOPort\n"
"[ 1141.053411] hm2/hm2_5i20.0: IO Pin 005 (P2-11): Encoder #0, pin Index (Input)\n"
"[ 1141.053415] hm2/hm2_5i20.0: IO Pin 006 (P2-13): IOPort\n"
"[ 1141.053418] hm2/hm2_5i20.0: IO Pin 007 (P2-15): PWMGen #0, pin Out0 (PWM or Up) (Output)\n"
"[ 1141.053422] hm2/hm2_5i20.0: IO Pin 008 (P2-17): IOPort\n"
"[ 1141.053425] hm2/hm2_5i20.0: IO Pin 009 (P2-19): PWMGen #0, pin Out1 (Dir or Down) (Output)\n"
"[ 1141.053429] hm2/hm2_5i20.0: IO Pin 010 (P2-21): IOPort\n"
"[ 1141.053432] hm2/hm2_5i20.0: IO Pin 011 (P2-23): PWMGen #0, pin Not-Enable (Output)\n"
"<snip>...\n"
"[ 1141.053589] hm2/hm2_5i20.0: IO Pin 060 (P4-25): StepGen #2, pin Step (Output)\n"
"[ 1141.053593] hm2/hm2_5i20.0: IO Pin 061 (P4-27): StepGen #2, pin Direction (Output)\n"
"[ 1141.053597] hm2/hm2_5i20.0: IO Pin 062 (P4-29): StepGen #2, pin (unused) (Output)\n"
"[ 1141.053601] hm2/hm2_5i20.0: IO Pin 063 (P4-31): StepGen #2, pin (unused) (Output)\n"
"[ 1141.053605] hm2/hm2_5i20.0: IO Pin 064 (P4-33): StepGen #2, pin (unused) (Output)\n"
"[ 1141.053609] hm2/hm2_5i20.0: IO Pin 065 (P4-35): StepGen #2, pin (unused) (Output)\n"
"[ 1141.053613] hm2/hm2_5i20.0: IO Pin 066 (P4-37): IOPort\n"
"[ 1141.053616] hm2/hm2_5i20.0: IO Pin 067 (P4-39): IOPort\n"
"[ 1141.053619] hm2/hm2_5i20.0: IO Pin 068 (P4-41): IOPort\n"
"[ 1141.053621] hm2/hm2_5i20.0: IO Pin 069 (P4-43): IOPort\n"
"[ 1141.053624] hm2/hm2_5i20.0: IO Pin 070 (P4-45): IOPort\n"
"[ 1141.053627] hm2/hm2_5i20.0: IO Pin 071 (P4-47): IOPort\n"
"[ 1141.053811] hm2/hm2_5i20.0: registered\n"
"[ 1141.053815] hm2_5i20.0: initialized AnyIO board at 0000:02:02.0\n"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:230
msgid ""
"That the I/O Pin nnn will correspond to the pin number shown on the HAL "
"Configuration screen for GPIOs. Some of the StepGen, Encoder and PWMGen will "
"also show up as GPIOs in the HAL Configuration screen."
msgstr ""

#. type: Title ==
#: src/drivers/hostmot2.adoc:231
#, no-wrap
msgid "PIN Files"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:235
msgid ""
"The default pinout is described in a .PIN file (human-readable text).  When "
"you install a firmware package the .PIN files are installed in"
msgstr ""

#. type: delimited block -
#: src/drivers/hostmot2.adoc:238
#, no-wrap
msgid "/usr/share/doc/hostmot2-firmware-<board>/\n"
msgstr ""

#. type: Title ===
#: src/drivers/hostmot2.adoc:240 src/drivers/hostmot2.adoc:292
#: src/drivers/hostmot2.adoc:303 src/drivers/hostmot2.adoc:314
#: src/drivers/hostmot2.adoc:331 src/drivers/hostmot2.adoc:345
#: src/drivers/hostmot2.adoc:359 src/drivers/hostmot2.adoc:369
#: src/drivers/hostmot2.adoc:381 src/drivers/hostmot2.adoc:732
#, no-wrap
msgid "Firmware"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:247
msgid ""
"The selected firmware (.BIT file) and configuration is uploaded from the PC "
"motherboard to the Mesa mothercard on LinuxCNC startup.  If you are using "
"Run In Place, you must still install a hostmot2-firmware-<board> package. "
"There is more information about firmware and configuration in the "
"'Configurations' section."
msgstr ""

#. type: Title ==
#: src/drivers/hostmot2.adoc:248 src/gcode/m-code.adoc:235
#: src/gui/gmoccapy.adoc:458 src/gui/pyvcp.adoc:344 src/gui/qtdragon.adoc:333
#: src/motion/external-offsets.adoc:47 src/motion/switchkins.adoc:109
#, no-wrap
msgid "HAL Pins"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:254
msgid ""
"The HAL pins for each configuration can be seen by opening up 'Show HAL "
"Configuration' from the Machine menu. All the HAL pins and parameters can be "
"found there. The following figure is of the 5i20 configuration used above."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/drivers/hostmot2.adoc:256 src/drivers/hostmot2.adoc:257
#, no-wrap
msgid "5i20 HAL Pins"
msgstr ""

#. type: Target for macro image
#: src/drivers/hostmot2.adoc:257
#, no-wrap
msgid "images/5i20-halpins.png"
msgstr ""

#. type: Title ==
#: src/drivers/hostmot2.adoc:259
#, no-wrap
msgid "Configurations"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:265
msgid ""
"The Hostmot2 firmware is available in several versions, depending on what "
"you are trying to accomplish. You can get a reminder of what a particular "
"firmware is for by looking at the name. Let's look at a couple of examples."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:271
msgid ""
"In the 7i43 (two ports), SV8 ('Servo 8') would be for having 8 servos or "
"fewer, using the 'classic' 7i33 4-axis (per port) servo board.  So 8 servos "
"would use up all 48 signals in the two ports. But if you only needed 3 "
"servos, you could say 'num_encoders=3' and 'num_pwmgens=3' and recover 5 "
"servos at 6 signals each, thus gaining 30 bits of GPIO."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:280
msgid ""
"Or, in the 5i22 (four ports), SVST8_24 ('Servo 8, Stepper 24') would be for "
"having 8 servos or fewer (7i33 x2 again), and 24 steppers or fewer (7i47 "
"x2). This would use up all four ports.  If you only needed 4 servos you "
"could say 'num_encoders=4' and 'num_pwmgens=4' and recover 1 port (and save "
"a 7i33).  And if you only needed 12 steppers you could say 'num_stepgens=12' "
"and free up one port (and save a 7i47).  So in this way we can save two "
"ports (48 bits) for GPIO."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:285
msgid ""
"Here are tables of the firmwares available in the official packages.  There "
"may be additional firmwares available at the Mesanet.com website that have "
"not yet made it into the LinuxCNC official firmware packages, so check there "
"too."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:289
msgid ""
"3x20 (6-port various) Default Configurations (The 3x20 comes in 1M, 1.5M, "
"and 2M gate versions.  So far, all firmware is available in all gate sizes.)"
msgstr ""

#. type: Title ==
#: src/drivers/hostmot2.adoc:292 src/drivers/hostmot2.adoc:564
#, no-wrap
msgid "PWMGen"
msgstr ""

#. type: Title ==
#: src/drivers/hostmot2.adoc:292 src/drivers/hostmot2.adoc:303
#: src/drivers/hostmot2.adoc:314 src/drivers/hostmot2.adoc:331
#: src/drivers/hostmot2.adoc:345 src/drivers/hostmot2.adoc:359
#: src/drivers/hostmot2.adoc:369 src/drivers/hostmot2.adoc:381
#: src/drivers/hostmot2.adoc:466
#, no-wrap
msgid "StepGen"
msgstr ""

#. type: Title ==
#: src/drivers/hostmot2.adoc:293 src/drivers/hostmot2.adoc:304
#: src/drivers/hostmot2.adoc:315 src/drivers/hostmot2.adoc:332
#: src/drivers/hostmot2.adoc:346 src/drivers/hostmot2.adoc:360
#: src/drivers/hostmot2.adoc:370 src/drivers/hostmot2.adoc:382
#: src/drivers/hostmot2.adoc:400
#, no-wrap
msgid "GPIO"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:293
#, no-wrap
msgid "SV24"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:293 src/drivers/hostmot2.adoc:294
#: src/drivers/hostmot2.adoc:307 src/drivers/hostmot2.adoc:319
#: src/drivers/hostmot2.adoc:336 src/drivers/hostmot2.adoc:375
#: src/drivers/hostmot2.adoc:386 src/plasma/qtplasmac.adoc:3769
#: src/remap/remap.adoc:2178
#, no-wrap
msgid "24"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:294
#, no-wrap
msgid "SVST16_24"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:300
msgid ""
"5i22 (4-port PCI) Default Configurations (The 5i22 comes in 1M and 1.5M gate "
"versions.  So far, all firmware is available in all gate sizes.)"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:303 src/drivers/hostmot2.adoc:314
#: src/drivers/hostmot2.adoc:331 src/drivers/hostmot2.adoc:345
#: src/drivers/hostmot2.adoc:359 src/drivers/hostmot2.adoc:369
#: src/drivers/hostmot2.adoc:381
#, no-wrap
msgid "PWM"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:304
#, no-wrap
msgid "SV16"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:305 src/drivers/hostmot2.adoc:317
#: src/drivers/hostmot2.adoc:334 src/drivers/hostmot2.adoc:347
#: src/drivers/hostmot2.adoc:374 src/drivers/hostmot2.adoc:385
#, no-wrap
msgid "SVST2_4_7I47"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:306 src/remap/remap.adoc:2256
#, no-wrap
msgid "72"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:306
#, no-wrap
msgid "SVST8_8"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:307
#, no-wrap
msgid "SVST8_24"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:311
msgid "5i23 (3-port PCI) Default Configurations (The 5i23 has 400k gates.)"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:315 src/drivers/hostmot2.adoc:332
#: src/drivers/hostmot2.adoc:346 src/drivers/hostmot2.adoc:360
#, no-wrap
msgid "SV12"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:316 src/drivers/hostmot2.adoc:333
#, no-wrap
msgid "SVST2_8"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:316 src/drivers/hostmot2.adoc:320
#: src/drivers/hostmot2.adoc:333
#, no-wrap
msgid "8 (tbl5)"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:318 src/drivers/hostmot2.adoc:335
#: src/drivers/hostmot2.adoc:348 src/remap/remap.adoc:2214
#, no-wrap
msgid "48"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:318 src/drivers/hostmot2.adoc:335
#, no-wrap
msgid "SV12_2X7I48_72"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:319 src/drivers/hostmot2.adoc:336
#, no-wrap
msgid "SV12IM_2X7I48_72"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:319 src/drivers/hostmot2.adoc:336
#, no-wrap
msgid "12 (+IM)"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:320 src/drivers/hostmot2.adoc:348
#, no-wrap
msgid "SVST4_8"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:321 src/drivers/hostmot2.adoc:337
#: src/drivers/hostmot2.adoc:349 src/drivers/hostmot2.adoc:361
#, no-wrap
msgid "SVST8_4"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:321 src/drivers/hostmot2.adoc:337
#: src/drivers/hostmot2.adoc:371 src/drivers/hostmot2.adoc:383
#, no-wrap
msgid "4 (tbl5)"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:322 src/drivers/hostmot2.adoc:338
#: src/drivers/hostmot2.adoc:350 src/drivers/hostmot2.adoc:362
#, no-wrap
msgid "SVST8_4IM2"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:322 src/drivers/hostmot2.adoc:323
#: src/drivers/hostmot2.adoc:338 src/drivers/hostmot2.adoc:350
#: src/drivers/hostmot2.adoc:351 src/drivers/hostmot2.adoc:362
#, no-wrap
msgid "8 (+IM)"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:323 src/drivers/hostmot2.adoc:351
#, no-wrap
msgid "SVST8_8IM2"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:324
#, no-wrap
msgid "SVTP6_7I39"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:324
#, no-wrap
msgid "0 (6 BLDC)"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:328
msgid "5i20 (3-port PCI) Default Configurations (The 5i20 has 200k gates.)"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:342
msgid "4i68 (3-port PC/104) Default Configurations (The 4i68 has 400k gates.)"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:356
msgid "4i65 (3-port PC/104) Default Configurations (The 4i65 has 200k gates.)"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:366
msgid "7i43 (2-port parallel) 400k gate versions, Default Configurations"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:370 src/drivers/hostmot2.adoc:382
#, no-wrap
msgid "SV8"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:371 src/drivers/hostmot2.adoc:383
#, no-wrap
msgid "SVST4_4"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:372 src/drivers/hostmot2.adoc:384
#, no-wrap
msgid "SVST4_6"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:372 src/drivers/hostmot2.adoc:384
#, no-wrap
msgid "6 (tbl3)"
msgstr ""

#. type: Table
#: src/drivers/hostmot2.adoc:373
#, no-wrap
msgid "SVST4_12"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:378
msgid "7i43 (2-port parallel) 200k gate versions, Default Configurations"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:394
msgid ""
"Even though several cards may have the same named .BIT file you cannot use "
"a .BIT file that is not for that card. Different cards have different clock "
"frequencies so make sure you load the proper .BIT file for your card. Custom "
"hm2 firmwares can be created for special applications and you may see some "
"custom hm2 firmwares in the directories with the default ones."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:399
msgid ""
"When you load the board-driver (hm2_pci or hm2_7i43), you can tell it to "
"disable instances of the three primary modules (pwmgen, stepgen, and "
"encoder) by setting the count lower. Any I/O pins belonging to disabled "
"module instances become GPIOs."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:408
msgid ""
"General Purpose I/O pins on the board which are not used by a module "
"instance are exported to HAL as 'full' GPIO pins. Full GPIO pins can be "
"configured at run-time to be inputs, outputs, or open drains, and have a HAL "
"interface that exposes this flexibility. I/O pins that are owned by an "
"active module instance are constrained by the requirements of the owning "
"module, and have a restricted HAL interface."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:413
msgid ""
"GPIOs have names like 'hm2_<BoardType>.<BoardNum>.gpio.<IONum>.' IONum is a "
"three-digit number. The mapping from IONum to connector and pin-on-that-"
"connector is written to the syslog when the driver loads, and it's "
"documented in Mesa's manual for the Anything I/O boards."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:417
msgid ""
"The hm2 GPIO representation is modeled after the Digital Inputs and Digital "
"Outputs described in the Canonical Device Interface (part of the HAL General "
"Reference document)."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:419
msgid "GPIO pins default to input."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:425
msgid ""
"'in' - (Bit, Out) Normal state of the hardware input pin.  Both full GPIO "
"pins and I/O pins used as inputs by active module instances have this pin."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:429
msgid ""
"'in_not' - (Bit, Out) Inverted state of the hardware input pin.  Both full "
"GPIO pins and I/O pins used as inputs by active module instances have this "
"pin."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:433
msgid ""
"'out' - (Bit, In) Value to be written (possibly inverted) to the hardware "
"output pin.  Only full GPIO pins have this pin."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:443
msgid ""
"'invert_output' - (Bit, RW) This parameter only has an effect if the "
"'is_output' parameter is true.  If this parameter is true, the output value "
"of the GPIO will be the inverse of the value on the 'out' HAL pin. Only full "
"GPIO pins and I/O pins used as outputs by active module instances have this "
"parameter. To invert an active module pin you have to invert the GPIO pin "
"not the module pin."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:457
msgid ""
"'is_opendrain' - (Bit, RW) This parameter only has an effect if the "
"'is_output' parameter is true.  If this parameter is false, the GPIO behaves "
"as a normal output pin: the I/O pin on the connector is driven to the value "
"specified by the 'out' HAL pin (possibly inverted), and the value of the "
"'in' and 'in_not' HAL pins is undefined. If this parameter is true, the GPIO "
"behaves as an open-drain pin. Writing 0 to the 'out' HAL pin drives the I/O "
"pin low, writing 1 to the 'out' HAL pin puts the I/O pin in a high-impedance "
"state. In this high-impedance state the I/O pin floats (weakly pulled high), "
"and other devices can drive the value; the resulting value on the I/O pin is "
"available on the 'in' and 'in_not' pins. Only full GPIO pins and I/O pins "
"used as outputs by active module instances have this parameter."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:465
msgid ""
"'is_output' - (Bit, RW) If set to 0, the GPIO is an input.  The I/O pin is "
"put in a high-impedance state (weakly pulled high), to be driven by other "
"devices. The logic value on the I/O pin is available in the 'in' and "
"'in_not' HAL pins. Writes to the 'out' HAL pin have no effect. If this "
"parameter is set to 1, the GPIO is an output; its behavior then depends on "
"the 'is_opendrain' parameter. Only full GPIO pins have this parameter."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:472
msgid ""
"StepGens have names like 'hm2_<BoardType>.<BoardNum>.stepgen.<Instance>'.  "
"'Instance' is a two-digit number that corresponds to the HostMot2 stepgen "
"instance number.  There are 'num_stepgens' instances, starting with 00."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:477
msgid ""
"Each stepgen allocates 2-6 I/O pins (selected at firmware compile time), but "
"currently only uses two: Step and Direction outputs.  footnote:[At present, "
"the firmware supports multi-phase stepper outputs, but the driver doesn't. "
"Interested volunteers are solicited.]"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:483
msgid ""
"The StepGen representation is modeled on the stepgen software component. "
"StepGen default is active high step output (high during step time low during "
"step space). To invert a StepGen output pin you invert the corresponding "
"GPIO pin that is being used by StepGen. To find the GPIO pin being used for "
"the StepGen output run 'dmesg' as shown above."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:485
msgid "Each StepGen instance has the following pins and parameters:"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:491
msgid ""
"'control-type' - (Bit, In) Switches between position control mode (0)  and "
"velocity control mode (1).  Defaults to position control (0)."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:493
msgid "'counts' - (s32, Out) Feedback position in counts (number of steps)."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:496
msgid ""
"'enable' - (Bit, In) Enables output steps. When false, no steps are "
"generated."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:499
msgid ""
"'position-cmd' - (Float, In) Target position of stepper motion, in user-"
"defined position units."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:502
msgid ""
"'position-fb' - (Float, Out) Feedback position in user-defined position "
"units (counts / position_scale)."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:507
msgid ""
"'velocity-cmd' - (Float, In) Target velocity of stepper motion, in user-"
"defined position units per second.  This pin is only used when the stepgen "
"is in velocity control mode (control-type=1)."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:510
msgid ""
"'velocity-fb' - (Float, Out) Feedback velocity in user-defined position "
"units per second."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:515
msgid ""
"'dirhold' - (u32, RW) Minimum duration of stable Direction signal after a "
"step ends, in nanoseconds."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:518
msgid ""
"'dirsetup' - (u32, RW) Minimum duration of stable Direction signal before a "
"step begins, in nanoseconds."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:522
msgid ""
"'maxaccel' - (Float, RW) Maximum acceleration, in position units per second "
"per second.  If set to 0, the driver will not limit its acceleration."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:526
msgid ""
"'maxvel' - (Float, RW) Maximum speed, in position units per second.  If set "
"to 0, the driver will choose the maximum velocity based on the values of "
"steplen and stepspace (at the time that maxvel was set to 0)."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:529
msgid ""
"'position-scale' - (Float, RW) Converts from counts to position units.  "
"position = counts / position_scale"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:535
msgid ""
"'step_type' - (u32, RW) Output format, like the step_type modparam to the "
"software stegen(9) component.  0 = Step/Dir, 1 = Up/Down, 2 = Quadrature. In "
"Quadrature mode (step_type=2), the stepgen outputs one complete Gray cycle "
"(00 \\-> 01 \\-> 11 \\-> 10 \\-> 00) for each 'step' it takes."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:537
msgid "'steplen' - (u32, RW) Duration of the step signal, in nanoseconds."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:540
msgid ""
"'stepspace' - (u32, RW) Minimum interval between step signals, in "
"nanoseconds."
msgstr ""

#. type: Title ===
#: src/drivers/hostmot2.adoc:541 src/drivers/hostmot2.adoc:639
#, no-wrap
msgid "Output Parameters"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:546
msgid ""
"The Step and Direction pins of each StepGen have two additional parameters. "
"To find which I/O pin belongs to which step and direction output run 'dmesg' "
"as described above."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:551
msgid ""
"'invert_output' - (Bit, RW) This parameter only has an effect if the "
"'is_output' parameter is true.  If this parameter is true, the output value "
"of the GPIO will be the inverse of the value on the 'out' HAL pin."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:563
msgid ""
"'is_opendrain' - (Bit, RW) If this parameter is false, the GPIO behaves as a "
"normal output pin: the I/O pin on the connector is driven to the value "
"specified by the 'out' HAL pin (possibly inverted).  If this parameter is "
"true, the GPIO behaves as an open-drain pin. Writing 0 to the 'out' HAL pin "
"drives the I/O pin low, writing 1 to the 'out' HAL pin puts the I/O pin in a "
"high-impedance state. In this high-impedance state the I/O pin floats "
"(weakly pulled high), and other devices can drive the value; the resulting "
"value on the I/O pin is available on the 'in' and 'in_not' pins. Only full "
"GPIO pins and I/O pins used as outputs by active module instances have this "
"parameter."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:570
msgid ""
"PWMgens have names like 'hm2_<BoardType>.<BoardNum>.pwmgen.<Instance>'. "
"'Instance' is a two-digit number that corresponds to the HostMot2 pwmgen "
"instance number. There are 'num_pwmgens' instances, starting with 00."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:575
msgid ""
"In HM2, each pwmgen uses three output I/O pins: Not-Enable, Out0, and Out1. "
"To invert a PWMGen output pin you invert the corresponding GPIO pin that is "
"being used by PWMGen. To find the GPIO pin being used for the PWMGen output "
"run 'dmesg' as shown above."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:578
msgid ""
"The function of the Out0 and Out1 I/O pins varies with output-type parameter "
"(see below)."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:581
msgid ""
"The hm2 pwmgen representation is similar to the software pwmgen component. "
"Each pwmgen instance has the following pins and parameters:"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:588
msgid ""
"'enable' - (Bit, In) If true, the pwmgen will set its Not-Enable pin false "
"and output its pulses.  If 'enable' is false, pwmgen will set its Not-Enable "
"pin true and not output any signals."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:591
msgid ""
"'value' - (Float, In) The current pwmgen command value, in arbitrary units."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:602
msgid ""
"'output-type' - (s32, RW) This emulates the output_type load-time argument "
"to the software pwmgen component.  This parameter may be changed at runtime, "
"but most of the time you probably want to set it at startup and then leave "
"it alone. Accepted values are 1 (PWM on Out0 and Direction on Out1), 2 (Up "
"on Out0 and Down on Out1), 3 (PDM mode, PDM on Out0 and Dir on Out1), and 4 "
"(Direction on Out0 and PWM on Out1, 'for locked antiphase')."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:607
msgid ""
"'scale' - (Float, RW) Scaling factor to convert 'value' from arbitrary units "
"to duty cycle: dc = value / scale.  Duty cycle has an effective range of "
"-1.0 to +1.0 inclusive, anything outside that range gets clipped."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:625
msgid ""
"'pdm_frequency' - (u32, RW) This specifies the PDM frequency, in Hz, of all "
"the pwmgen instances running in PDM mode (mode 3).  This is the 'pulse slot "
"frequency'; the frequency at which the pdm generator in the Anything I/O "
"board chooses whether to emit a pulse or a space.  Each pulse (and space) in "
"the PDM pulse train has a duration of 1/pdm_frequency seconds.  For example, "
"setting the pdm_frequency to 2*10^6^&thinsp;Hz (2&thinsp;MHz) and the duty "
"cycle to 50% results in a 1&thinsp;MHz square wave, identical to a 1&thinsp;"
"MHz PWM signal with 50% duty cycle. The effective range of this parameter is "
"from about 1525&thinsp;Hz up to just under 100&thinsp;MHz. Note that the max "
"frequency is determined by the ClockHigh frequency of the Anything I/O "
"board; the 5I20 and 7I43 both have a 100&thinsp;MHz clock, resulting in a "
"100&thinsp;MHz max PDM frequency. Other boards may have different clocks, "
"resulting in different max PDM frequencies. If the user attempts to set the "
"frequency too high, it will be clipped to the max supported frequency of the "
"board."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:638
msgid ""
"'pwm_frequency' - (u32, RW) This specifies the PWM frequency, in Hz, of all "
"the pwmgen instances running in the PWM modes (modes 1 and 2).  This is the "
"frequency of the variable-duty-cycle wave. Its effective range is from "
"1&thinsp;Hz up to 193&thinsp;kHz. Note that the max frequency is determined "
"by the ClockHigh frequency of the Anything I/O board; the 5i20 and 7i43 both "
"have a 100&thinsp;MHz clock, resulting in a 193&thinsp;kHz max PWM "
"frequency. Other boards may have different clocks, resulting in different "
"max PWM frequencies. If the user attempts to set the frequency too high, it "
"will be clipped to the max supported frequency of the board.  Frequencies "
"below about 5&thinsp;Hz are not terribly accurate, but above 5&thinsp;Hz "
"they are pretty close."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:643
msgid ""
"The output pins of each PWMGen have two additional parameters. To find which "
"I/O pin belongs to which output run `dmesg` as described above."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:647
msgid ""
"`invert_output` - (Bit, RW) This parameter only has an effect if the "
"`is_output` parameter is true. If this parameter is true, the output value "
"of the GPIO will be the inverse of the value on the `out` HAL pin."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:659
msgid ""
"`is_opendrain` - (Bit, RW) If this parameter is false, the GPIO behaves as a "
"normal output pin: the I/O pin on the connector is driven to the value "
"specified by the `out` HAL pin (possibly inverted).  If this parameter is "
"true, the GPIO behaves as an open-drain pin.  Writing 0 to the `out` HAL pin "
"drives the I/O pin low, writing 1 to the `out` HAL pin puts the I/O pin in a "
"high-impedance state. In this high-impedance state the I/O pin floats "
"(weakly pulled high), and other devices can drive the value; the resulting "
"value on the I/O pin is available on the `in` and `in_not` pins.  Only full "
"GPIO pins and I/O pins used as outputs by active module instances have this "
"parameter."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:667
msgid ""
"Encoders have names like `hm2_<BoardType>.<BoardNum>.encoder.<Instance>.`.  "
"`Instance` is a two-digit number that corresponds to the HostMot2 encoder "
"instance number.  There are _num_encoders_ instances, starting with 00."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:671
msgid ""
"Each encoder uses three or four input I/O pins, depending on how the "
"firmware was compiled.  Three-pin encoders use A, B, and Index (sometimes "
"also known as Z).  Four-pin encoders use A, B, Index, and Index-mask."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:676 man/man9/hostmot2.9:339
msgid ""
"The hm2 encoder representation is similar to the one described by the "
"Canonical Device Interface (in the HAL General Reference document), and to "
"the software encoder component.  Each encoder instance has the following "
"pins and parameters:"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:680
msgid "`count` - (s32, Out) Number of encoder counts since the previous reset."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:683
msgid ""
"`index-enable` - (Bit, I/O) When this pin is set to True, the count (and "
"therefore also position) are reset to zero on the next Index (Phase-Z) "
"pulse.  At the same time, index-enable is reset to zero to indicate that the "
"pulse has occurred."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:684
msgid ""
"`position` - (Float, Out) Encoder position in position units (count / scale)."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:685
msgid ""
"`rawcounts` - (s32, Out) Total number of encoder counts since the start, not "
"adjusted for index or reset."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:688
msgid ""
"`reset` - (Bit, In) When this pin is TRUE, the count and position pins are "
"set to 0.  The value of the velocity pin is not affected by this.  The "
"driver does not reset this pin to FALSE after resetting the count to 0, that "
"is the user's job."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:689
msgid ""
"`velocity` - (Float, Out) Estimated encoder velocity in position units per "
"second."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:695
msgid ""
"`counter-mode` - (Bit, RW) Set to False (the default) for Quadrature.  Set "
"to True for Up/Down or for single input on Phase A.  Can be used for a "
"frequency to velocity converter with a single input on Phase A when set to "
"true."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:701
msgid ""
"`filter` - (Bit, RW) If set to True (the default), the quadrature counter "
"needs 15 clocks to register a change on any of the three input lines (any "
"pulse shorter than this is rejected as noise).  If set to False, the "
"quadrature counter needs only 3 clocks to register a change.  The encoder "
"sample clock runs at 33&thinsp;MHz on the PCI Anything I/O cards and "
"50&thinsp;MHz on the 7I43."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:705
msgid ""
"`index-invert` - (Bit, RW) If set to True, the rising edge of the Index "
"input pin triggers the Index event (if index-enable is True).  If set to "
"False, the falling edge triggers."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:709
msgid ""
"`index-mask` - (Bit, RW) If set to True, the Index input pin only has an "
"effect if the Index-Mask input pin is True (or False, depending on the "
"`index-mask-invert` pin below)."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:713
msgid ""
"`index-mask-invert` - (Bit, RW) If set to True, Index-Mask must be False for "
"Index to have an effect.  If set to False, the `Index-Mask` pin must be True."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:719
msgid ""
"`scale` - (Float, RW) Converts from 'count' units to 'position' units.  A "
"quadrature encoder will normally have 4 counts per pulse so a 100 PPR "
"encoder would be 400 counts per revolution. In `.counter-mode` a 100 PPR "
"encoder would have 100 counts per revolution as it only uses the rising edge "
"of A and direction is B."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:729
msgid ""
"`vel-timeout` - (Float, RW) When the encoder is moving slower than one pulse "
"for each time that the driver reads the count from the FPGA (in the "
"hm2_read() function), the velocity is harder to estimate.  The driver can "
"wait several iterations for the next pulse to arrive, all the while "
"reporting the upper bound of the encoder velocity, which can be accurately "
"guessed.  This parameter specifies how long to wait for the next pulse, "
"before reporting the encoder stopped.  This parameter is in seconds."
msgstr ""

#. type: Title ==
#: src/drivers/hostmot2.adoc:730
#, no-wrap
msgid "5I25 Configuration"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:737
msgid ""
"The 5I25 firmware comes preloaded for the daughter card it is purchased "
"with.  So the `firmware=xxx.BIT` is not part of the hm2_pci configuration "
"string when using a 5I25."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:742
msgid ""
"Example configurations of the 5I25/7I76 and 5I25/7I77 cards are included in "
"the <<sub:configuration-selector,Configuration Selector>>."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:745
msgid ""
"If you like to roll your own configuration the following examples show how "
"to load the drivers in the HAL file."
msgstr ""

#. type: Block title
#: src/drivers/hostmot2.adoc:746
#, no-wrap
msgid "5I25 + 7I76 Card"
msgstr ""

#. type: delimited block -
#: src/drivers/hostmot2.adoc:751 src/drivers/hostmot2.adoc:761
#, no-wrap
msgid ""
"# load the generic driver\n"
"loadrt hostmot2\n"
msgstr ""

#. type: delimited block -
#: src/drivers/hostmot2.adoc:754
#, no-wrap
msgid ""
"# load the PCI driver and configure\n"
"loadrt hm2_pci config=\"num_encoders=1 num_stepgens=5 sserial_port_0=0XXX\"\n"
msgstr ""

#. type: Block title
#: src/drivers/hostmot2.adoc:756
#, no-wrap
msgid "5I25 + 7I77 Card"
msgstr ""

#. type: delimited block -
#: src/drivers/hostmot2.adoc:764
#, no-wrap
msgid ""
"# load the PCI driver and configure\n"
"loadrt hm2_pci config=\"num_encoders=6 num_pwmgens=6 sserial_port_0=0XXX\"\n"
msgstr ""

#. type: Title ===
#: src/drivers/hostmot2.adoc:766
#, no-wrap
msgid "SSERIAL Configuration"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:773
msgid ""
"The `sserial_port_0=0XXX` configuration string sets some options for the "
"smart serial daughter card. These options are specific for each daughter "
"card. See the Mesa manual for more information on the exact usage (typically "
"in the section called SOFTWARE PROCESS DATA MODES) or see the manual page of "
"link:../man/man9/sserial.9.html[SSERIAL(9)]."
msgstr ""

#. type: Title ===
#: src/drivers/hostmot2.adoc:774
#, no-wrap
msgid "7I77 Limits"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:778
msgid ""
"The minlimit and maxlimit are bounds on the pin value (in this case the "
"analog out value) fullscalemax is the scale factor."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:780
msgid ""
"These are by default set to the analog in or analog range (most likely in "
"Volts)."
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:782
msgid ""
"So for example on the 7I77 +-10&thinsp;V analog outputs, the default values "
"are:"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:786
#, no-wrap
msgid ""
"minlimit: -10\n"
"maxlimit: +10\n"
"maxfullscale: 10 +"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:789
msgid ""
"If you wanted to say scale the analog out of a channel to IPS for a velocity "
"mode servo (say 24 IPS max) you could set the limits like this:"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:793
#, no-wrap
msgid ""
"minlimit: -24\n"
"maxlimit: +24\n"
"maxfullscale: 24 +"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:796
msgid ""
"If you wanted to scale the analog out of a channel to RPM for a 0 to 6000 "
"RPM spindle with 0-10&thinsp;V control you could set the limits like this:"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:801
#, no-wrap
msgid ""
"minlimit: 0\n"
"maxlimit: 6000\n"
"maxfullscale: 6000\n"
"(this would prevent unwanted negative output voltages from being set)"
msgstr ""

#. type: Title ===
#: src/drivers/hostmot2.adoc:802 src/plasma/qtplasmac.adoc:3933
#, no-wrap
msgid "Example Configurations"
msgstr ""

#. type: Plain text
#: src/drivers/hostmot2.adoc:814
msgid ""
"Several example configurations for Mesa hardware are included with "
"LinuxCNC.  The configurations are located in the hm2-servo and hm2-stepper "
"sections of the <<sub:configuration-selector,Configuration Selector>>. "
"Typically you will need the board installed for the configuration you pick "
"to load. The examples are a good place to start and will save you time.  "
"Just pick the proper example from the LinuxCNC Configuration Selector and "
"save a copy to your computer so you can edit it. To see the exact pins and "
"parameters that your configuration gave you, open the Show HAL Configuration "
"window from the Machine menu, or do `dmesg` as outlined above."
msgstr ""

#. type: Title =
#: src/drivers/mb2hal.adoc:5
#, no-wrap
msgid "MB2HAL"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:18
msgid ""
"MB2HAL is a generic userspace HAL component to communicate with one or more "
"Modbus devices. So far, there are two options to communicate with a Modbus "
"device:"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:21
msgid ""
"One option is to create a HAL component as a driver see http://wiki.linuxcnc."
"org/cgi-bin/wiki.pl?VFD_Modbus[VFD Modbus]."
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:23
msgid ""
"Another option is to use Classic Ladder which has Modbus built in see << cha:"
"classicladder,ClassicLadder >>."
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:25
msgid ""
"Now there is a third option that consists of a \"generic\" driver configured "
"by text file, this is called MB2HAL."
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:28
msgid "Why MB2HAL? Consider using Mb2hal if:"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:31
msgid ""
"You have to write a new driver and you don't know anything about programming."
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:32
msgid ""
"You need to use Classic Ladder \"only\" to manage the Modbus connections."
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:34
msgid ""
"You have to discover and configure first time the Modbus transactions.  "
"Mb2hal have debug levels to facilitate the low level protocol debug."
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:38
msgid ""
"You have more than one device to connect. Mb2hal is very efficient managing "
"multiple devices, transactions and links.  Currently I am monitoring two "
"axis drivers using a Rs232 port, a VFD driver using another Rs232 port, and "
"a remote I/O using TCP/IP."
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:40
msgid ""
"You want a protocol to connect your Arduino to HAL. Look the included sample "
"configuration file, sketch and library for Arduino Modbus."
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:44
msgid "Create a config file from the example below"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:45
msgid "Set component name (optional)"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:47
msgid "Set `HAL_MODULE_NAME=mymodule` (default `HAL_MODULE_NAME=mb2hal`)"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:49
msgid "Load the modbus HAL userspace component"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:50
msgid "Default component name: `loadusr -W mb2hal config=config_file.ini`"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:51
msgid ""
"Custom component name: `loadusr -Wn mymodule mb2hal config=config_file.ini`"
msgstr ""

#. type: Title ===
#: src/drivers/mb2hal.adoc:55
#, no-wrap
msgid "Init Section"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:58
msgid "`[MB2HAL_INIT]`"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:61 src/drivers/mb2hal.adoc:89
#: src/drivers/motenc.adoc:94 src/gcode/coordinates.adoc:103
#: src/hal/tools.adoc:247
#, no-wrap
msgid "Value"
msgstr ""

#. type: Block title
#: src/drivers/mb2hal.adoc:61 src/drivers/mb2hal.adoc:89 src/hal/intro.adoc:225
#: src/hal/parallel-port.adoc:119
#, no-wrap
msgid "Type"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:61 src/drivers/mb2hal.adoc:89
#, no-wrap
msgid "Required"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:62
#, no-wrap
msgid "INIT_DEBUG"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:62 src/drivers/mb2hal.adoc:74
#: src/drivers/mb2hal.adoc:96 src/drivers/mb2hal.adoc:100
#: src/drivers/mb2hal.adoc:102 src/drivers/mb2hal.adoc:106
#: src/drivers/mb2hal.adoc:108 src/drivers/mb2hal.adoc:111
#: src/drivers/mb2hal.adoc:112 src/drivers/mb2hal.adoc:113
#: src/drivers/mb2hal.adoc:136 src/drivers/mb2hal.adoc:139
#, no-wrap
msgid "Integer"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:62 src/drivers/mb2hal.adoc:68
#: src/drivers/mb2hal.adoc:70 src/drivers/mb2hal.adoc:96
#: src/drivers/mb2hal.adoc:136 src/drivers/mb2hal.adoc:139
#: src/drivers/mb2hal.adoc:142 src/drivers/mb2hal.adoc:147
#: src/drivers/mb2hal.adoc:153 src/gcode/g-code.adoc:1236
#: src/gcode/g-code.adoc:1238
#, no-wrap
msgid "No"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:68
#, no-wrap
msgid ""
"Debug level of init and INI file parsing. +\n"
"0 = silent +\n"
"1 = error messages (default) +\n"
"2 = OK confirmation messages +\n"
"3 = debugging messages +\n"
"4 = maximum debugging messages (only in transactions) +"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:68
#, no-wrap
msgid "HAL_MODULE_NAME"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:68 src/drivers/mb2hal.adoc:90
#: src/drivers/mb2hal.adoc:98 src/drivers/mb2hal.adoc:104
#: src/drivers/mb2hal.adoc:123 src/drivers/mb2hal.adoc:142
#: src/drivers/mb2hal.adoc:153
#, no-wrap
msgid "String"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:70
#, no-wrap
msgid ""
"HAL module (component) name. Defaults\n"
"to \"mb2hal\"."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:70
#, no-wrap
msgid "SLOWDOWN"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:70 src/drivers/mb2hal.adoc:147
#, no-wrap
msgid "Float"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:74
#, no-wrap
msgid ""
"Insert a delay of \"FLOAT seconds\" between\n"
"transactions in order to not to have a lot of logging and facilitate the debugging.\n"
"Useful when using `DEBUG=3` (NOT `INIT_DEBUG=3`).\n"
"It affects ALL transactions. Use \"0.0\" for normal activity."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:74
#, no-wrap
msgid "TOTAL_TRANSACTIONS"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:74 src/drivers/mb2hal.adoc:90
#: src/drivers/mb2hal.adoc:111 src/drivers/mb2hal.adoc:112
#: src/drivers/mb2hal.adoc:123 src/gcode/g-code.adoc:1235
#: src/gcode/g-code.adoc:1237
#, no-wrap
msgid "Yes"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:75
#, no-wrap
msgid "The number of total Modbus transactions. There is no maximum."
msgstr ""

#. type: Title ===
#: src/drivers/mb2hal.adoc:78
#, no-wrap
msgid "Transaction Sections"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:86
msgid ""
"One transaction section is required per transaction, starting at "
"`[TRANSACTION_00]` and counting up sequentially.  If there is a new link "
"(not transaction), you must provide the REQUIRED parameters 1st time.  "
"Warning: Any OPTIONAL parameter not specified are copied from the previous "
"transaction."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:90
#, no-wrap
msgid "LINK_TYPE"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:94
#, no-wrap
msgid ""
"You must specify either a \"serial\" or\n"
"\"tcp\" link for the first transaction.\n"
"Later transactions will use the previous transaction link if not\n"
"specified."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:94
#, no-wrap
msgid "TCP_IP"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:94
#, no-wrap
msgid "IP address"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:94
#, no-wrap
msgid "If `LINK_TYPE=tcp`"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:96
#, no-wrap
msgid ""
"The Modbus slave\n"
"device IP address. Ignored if `LINK_TYPE=serial`."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:96
#, no-wrap
msgid "TCP_PORT"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:98
#, no-wrap
msgid ""
"The Modbus slave device TCP port.\n"
"Defaults to 502.  Ignored if `LINK_TYPE=serial`."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:98
#, no-wrap
msgid "SERIAL_PORT"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:98 src/drivers/mb2hal.adoc:100
#: src/drivers/mb2hal.adoc:102 src/drivers/mb2hal.adoc:104
#: src/drivers/mb2hal.adoc:106 src/drivers/mb2hal.adoc:108
#, no-wrap
msgid "If `LINK_TYPE=serial`"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:100
#, no-wrap
msgid ""
"The serial port.\n"
"For example \"/dev/ttyS0\". Ignored if `LINK_TYPE=tcp`."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:100
#, no-wrap
msgid "SERIAL_BAUD"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:102
#, no-wrap
msgid ""
"The baud rate.\n"
"Ignored if `LINK_TYPE=tcp`."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:102
#, no-wrap
msgid "SERIAL_BITS"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:104
#, no-wrap
msgid ""
"Data bits.\n"
"One of 5, 6, 7, 8. Ignored if `LINK_TYPE=tcp`."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:104
#, no-wrap
msgid "SERIAL_PARITY"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:106
#, no-wrap
msgid ""
"Data parity.\n"
"One of: even, odd, none. Ignored if `LINK_TYPE=tcp`."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:106
#, no-wrap
msgid "SERIAL_STOP"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:108
#, no-wrap
msgid ""
"Stop bits.\n"
"One of 1, 2. Ignored if `LINK_TYPE=tcp`."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:108
#, no-wrap
msgid "SERIAL_DELAY_MS"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:111
#, no-wrap
msgid ""
"Serial port delay\n"
"between transactions of this section only.\n"
"In ms. Defaults to 0. Ignored if `LINK_TYPE=tcp`."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:111
#, no-wrap
msgid "MB_SLAVE_ID"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:112
#, no-wrap
msgid "Modbus slave number."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:112
#, no-wrap
msgid "FIRST_ELEMENT"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:113
#, no-wrap
msgid "The first element address."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:113
#, no-wrap
msgid "NELEMENTS"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:113
#, no-wrap
msgid "Unless `PIN_NAMES` is specified"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:117
#, no-wrap
msgid ""
"The\n"
"number of elements. It is an error to specify both `NELEMENTS` and\n"
"`PIN_NAMES`. The pin names will be sequential numbers\n"
"e.g. `mb2hal.plcin.01`"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:117
#, no-wrap
msgid "PIN_NAMES"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:117
#, no-wrap
msgid "List"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:117
#, no-wrap
msgid "Unless `NELEMENTS` is specified"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:123
#, no-wrap
msgid ""
"A list of\n"
"element names.\n"
"These names will be used for the pin names, e.g.\n"
"mb2hal.plcin.cycle_start. +\n"
"*NOTE:* There must be no white space characters in the list. Example:\n"
"`PIN_NAMES=cycle_start,stop,feed_hold`"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:123
#, no-wrap
msgid "MB_TX_CODE"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:136
#, no-wrap
msgid ""
"Modbus transaction function code (see link:https://modbus.org/specs.php[specifications]):\n"
"\n"
"• fnct_01_read_coils +\n"
"• fnct_02_read_discrete_inputs +\n"
"• fnct_03_read_holding_registers +\n"
"• fnct_04_read_input_registers      +\n"
"• fnct_05_write_single_coil +\n"
"• fnct_06_write_single_register +\n"
"• fnct_15_write_multiple_coils +\n"
"• fnct_16_write_multiple_registers +"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:136
#, no-wrap
msgid "MB_RESPONSE_TIMEOUT_MS"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:139
#, no-wrap
msgid ""
"Response timeout for this transaction. In ms. Defaults to 500 ms. This\n"
"is how much to wait for 1st byte before raise an error."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:139
#, no-wrap
msgid "MB_BYTE_TIMEOUT_MS"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:142
#, no-wrap
msgid ""
"Byte timeout for this\n"
"transaction. In ms. Defaults to 500 ms. This is how much to wait from\n"
"byte to byte before raise an error."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:142
#, no-wrap
msgid "HAL_TX_NAME"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:147
#, no-wrap
msgid ""
"Instead of giving the transaction\n"
"number, use a name. Example: `mb2hal.00.01`\n"
"could become `mb2hal.plcin.01`. The name must not exceed 28 characters.\n"
"*NOTE:* when using names be careful that\n"
"you don't end up with two transactions using the same name."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:147
#, no-wrap
msgid "MAX_UPDATE_RATE"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:153
#, no-wrap
msgid ""
"Maximum update rate in Hz. Defaults to\n"
"0.0 (0.0 = as soon as available = infinite).\n"
"*NOTE:* This is a maximum rate and the actual rate may be lower. If you\n"
"want to calculate it in ms use (1000 / required_ms).\n"
"Example: 100 ms = `MAX_UPDATE_RATE=10.0`,\n"
"because 1000.0 ms / 100.0 ms = 10.0 Hz."
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:153 src/plasma/qtplasmac.adoc:3773
#, no-wrap
msgid "DEBUG"
msgstr ""

#. type: Table
#: src/drivers/mb2hal.adoc:155
#, no-wrap
msgid ""
"Debug level for this transaction only.\n"
"See `INIT_DEBUG` parameter above."
msgstr ""

#. type: Title ===
#: src/drivers/mb2hal.adoc:157
#, no-wrap
msgid "Error codes"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:161
msgid ""
"While debugging transactions, note the returned \"`ret[]`\" value correspond "
"to:"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:163
msgid "Modbus protocol exceptions:"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:165
#, no-wrap
msgid "0x01 - ILLEGAL_FUNCTION        - the FUNCTION code received in the query is not allowed or invalid.\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:166
#, no-wrap
msgid "0x02 - ILLEGAL_DATA_ADDRESS    - the DATA ADDRESS received in the query is not an allowable address for the slave or is invalid.\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:167
#, no-wrap
msgid "0x03 - ILLEGAL_DATA_VALUE      - a VALUE contained in the data query field is not an allowable value or is invalid.\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:168
#, no-wrap
msgid "0x04 - SLAVE_DEVICE_FAILURE    - SLAVE (or MASTER) device unrecoverable FAILURE while attempting to perform the requested action.\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:169
#, no-wrap
msgid "0x04 - SERVER_FAILURE          - (see above).\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:170
#, no-wrap
msgid "0x05 - ACKNOWLEDGE             - This response is returned to PREVENT A TIMEOUT in the master. A long duration of time is required to process the request in the slave.\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:171
#, no-wrap
msgid "0x06 - SLAVE_DEVICE_BUSY       - The slave (or server) is BUSY.  Retransmit the request later.\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:172
#, no-wrap
msgid "0x06 - SERVER_BUSY             - (see above).\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:173
#, no-wrap
msgid "0x07 - NEGATIVE_ACKNOWLEDGE    - Unsuccessful programming request using function code 13 or 14.\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:174
#, no-wrap
msgid "0x08 - MEMORY_PARITY_ERROR     - SLAVE parity error in MEMORY.\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:175
#, no-wrap
msgid "0x0A (-10) - GATEWAY_PROBLEM_PATH   - Gateway path(s) not available.\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:176
#, no-wrap
msgid "0x0B (-11) - GATEWAY_PROBLEM_TARGET - The target device failed to respond (generated by master, not slave).\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:178
msgid "Program or connection:"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:180
msgid "0x0C (-12) - COMM_TIME_OUT"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:181
msgid "0x0D (-13) - PORT_SOCKET_FAILURE"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:182
msgid "0x0E (-14) - SELECT_FAILURE"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:183
msgid "0x0F (-15) - TOO_MANY_DATAS"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:184
msgid "0x10 (-16) - INVALID_CRC"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:185
msgid "0x11 (-17) - INVALID_EXCEPTION_CODE"
msgstr ""

#. type: Title ==
#: src/drivers/mb2hal.adoc:186
#, no-wrap
msgid "Example config file"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:189
msgid "Click link:mb2hal_HOWTO.ini[here] to download."
msgstr ""

#. type: delimited block -
#: src/drivers/mb2hal.adoc:193
#, no-wrap
msgid "include::mb2hal_HOWTO.ini[]\n"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:199
msgid "[yellow yellow-background]#Yellow# = New in LinuxCNC 2.9"
msgstr ""

#. type: Title ===
#: src/drivers/mb2hal.adoc:200
#, no-wrap
msgid "[yellow-background]#fnct_01_read_coils#"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:203
msgid "[yellow-background]#mb2hal.m.n.bit# _bit out_"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:204 src/drivers/mb2hal.adoc:209
msgid "[yellow-background]#mb2hal.m.n.bit-inv# _bit out_"
msgstr ""

#. type: Title ===
#: src/drivers/mb2hal.adoc:205
#, no-wrap
msgid "fnct_02_read_discrete_inputs"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:208
msgid "mb2hal.m.n.[yellow-background]#bit# _bit out_"
msgstr ""

#. type: Title ===
#: src/drivers/mb2hal.adoc:210
#, no-wrap
msgid "fnct_03_read_holding_registers"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:213 src/drivers/mb2hal.adoc:218
msgid "mb2hal.m.n.float _float out_"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:214 src/drivers/mb2hal.adoc:219
msgid "mb2hal.m.n.int _s32 out_"
msgstr ""

#. type: Title ===
#: src/drivers/mb2hal.adoc:215
#, no-wrap
msgid "fnct_04_read_input_registers"
msgstr ""

#. type: Title ===
#: src/drivers/mb2hal.adoc:220
#, no-wrap
msgid "[yellow-background]#fnct_05_write_single_coil#"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:223
msgid "[yellow-background]#mb2hal.m.n.bit# _bit in_"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:225
msgid "`NELEMENTS` needs to be 1 or `PIN_NAMES` must contain just one name."
msgstr ""

#. type: Title ===
#: src/drivers/mb2hal.adoc:226
#, no-wrap
msgid "fnct_06_write_single_register"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:229 src/drivers/mb2hal.adoc:242
msgid "mb2hal.m.n.[yellow-background]#float# _float in_"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:230 src/drivers/mb2hal.adoc:243
msgid "[yellow-background]#mb2hal.m.n.int# _s32 in_"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:234
msgid ""
"`NELEMENTS` needs to be 1 or `PIN_NAMES` must contain just one name.  Both "
"pin values are added and limited to 65535 (UINT16_MAX). Use one and let the "
"other open (read as 0)."
msgstr ""

#. type: Title ===
#: src/drivers/mb2hal.adoc:235
#, no-wrap
msgid "fnct_15_write_multiple_coils"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:238
msgid "mb2hal.m.n.[yellow-background]#bit# _bit in_"
msgstr ""

#. type: Title ===
#: src/drivers/mb2hal.adoc:239
#, no-wrap
msgid "fnct_16_write_multiple_registers"
msgstr ""

#. type: Plain text
#: src/drivers/mb2hal.adoc:246 man/man1/mb2hal.1:93
msgid ""
"Both pin values are added and limited to 65535 (UINT16_MAX). Use one and let "
"the other open (read as 0)."
msgstr ""

#. type: delimited block =
#: src/drivers/mb2hal.adoc:250
msgid ""
"m = `HAL_TX_NAME` or transaction number if not set, n = element number "
"(`NELEMENTS`) or name from `PIN_NAMES`"
msgstr ""

#. type: delimited block =
#: src/drivers/mb2hal.adoc:254
msgid ""
"`mb2hal.00.01.<type>` (transaction=00, second register=01 (00 is the first "
"one))"
msgstr ""

#. type: delimited block =
#: src/drivers/mb2hal.adoc:255
msgid ""
"`mb2hal.TxName.01.<type>` (HAL_TX_NAME=TxName, second register=01 (00 is the "
"first one))"
msgstr ""

#. type: Title =
#: src/drivers/mitsub-vfd.adoc:5
#, no-wrap
msgid "Mitsub VFD Driver"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:20
#, no-wrap
msgid ""
"This is a userspace HAL program, written in Python, to control VFD's from Mitsubishi.\n"
"Specifically the A500 F500 E500 A500 D700 E700 F700 series - others may work.\n"
"mitsub_vfd supports serial control using the RS485 protocol.\n"
"Conversion from USB or serial port to RS485 requires special hardware. +"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:25
msgid ""
"Since this is a userspace program it can be affected by computer loading and "
"latency. It is possible to lose control of the VFDs. It is optional to set "
"the VFD to stop if it loses communication if that is desirable. One should "
"always have an Estop circuit that kills the power to the unit in case of "
"emergency."
msgstr ""

#. type: delimited block -
#: src/drivers/mitsub-vfd.adoc:31
#, no-wrap
msgid "loadusr -Wn coolant mitsub_vfd spindle=02 coolant=01\n"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:36
#, no-wrap
msgid ""
"The above command says:\n"
"loadusr, wait for coolant pins to be ready, component mitsub_vfd, with 2 slaves named spindle (slave #2) and coolant (slave #1)"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:40
msgid "The command line options are:"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:42
msgid ""
"'-b or --baud <rate>' : set the baud rate - all networked VFDs must be the "
"same"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:43
msgid ""
"'-p or --port <device path>' : sets the port to use such as /dev/ttyUSB0"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:44
msgid "'<name>=<slave#>' : sets the HAL component/pin name and slave number."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:46
msgid "Debugging can be toggled by setting the debug pin true."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:49
msgid "Turning on debugging will result in a flood of text in the terminal."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:53
msgid "Where <n> is +mitsub_vfd+ or the name given during loading."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:56
msgid "'<n>.fwd' (bit, in)  True sets motion forward, False sets reverse."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:59
msgid "'<n>.run' (bit, in)  True sets the VFD in motion based on the .fwd pin."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:62
msgid "'<n>.debug' (bit, in)  Prints debug info to the terminal."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:65
msgid "'<n>.alarm' (bit, out)  signals an alarm state of VFD."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:68
msgid ""
"'<n>.up-to-speed' (bit, out)  when drive is at commanded speed (speed-"
"tolerance is set on vfd)"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:73
msgid ""
"'<n>.monitor' (bit, in)  some models (eg E500) cannot monitor status -set "
"the monitor pin to false in this case pins such as up-to-speed, amps, alarm "
"and status bits are not updated."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:76
msgid ""
"'<n>.motor-cmd' (float, in)  commanded speed to the VFD (scaled to hertz by "
"default)."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:79
msgid ""
"'<n>.motor-fb' (float, out)  feedback speed from the VFD (scaled to hertz by "
"default)."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:82
msgid "'<n>.motor-amps' (float, out)  Current amperage output of motor."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:85
msgid "'<n>.motor-power' (float, out)  Current power output of motor."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:88
msgid ""
"'<n>.scale-cmd' (float, in)  Scales the motor-cmd pin to arbitrary units. "
"default 1 = Hertz."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:91
msgid ""
"'<n>.scale-fb' (float, in)  Scales the motor-fb pin to arbitrary units. "
"default 1 = Hertz."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:94
msgid ""
"'<n>.scale-amps' (float, in)  Scales the motor-amps pin to arbitrary units. "
"default 1 = amps."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:97
msgid ""
"'<n>.scale-power' (float, in)  Scales the motor-power pin to arbitrary "
"units. default 1 = ."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:100
msgid "'<n>.estop' (bit, in)  puts the VFD into emergency-stopped status."
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:105
msgid ""
"'<n>.status-bit-N' (bit, out)  N = 0 to 7, Status bits are user configurable "
"on the VFD. bit 3 should be set to at speed and bit 7 should be set to "
"alarm. others are free to be set as required."
msgstr ""

#. type: delimited block -
#: src/drivers/mitsub-vfd.adoc:114
#, no-wrap
msgid ""
"#\n"
"# example usage of the Mitsubishi VFD driver\n"
"#\n"
"loadusr -Wn coolant mitsub_vfd spindle=02 coolant=01\n"
msgstr ""

#. type: delimited block -
#: src/drivers/mitsub-vfd.adoc:127
#, no-wrap
msgid ""
"# **************** Spindle VFD setup slave 2 *********************\n"
"net spindle-vel-cmd               spindle.motor-cmd\n"
"net spindle-cw                    spindle.fwd\n"
"net spindle-on                    spindle.run\n"
"net spindle-at-speed              spindle.up-to-speed\n"
"net estop-out                     spindle.estop\n"
"#       cmd scaled to RPM\n"
"setp spindle.scale-cmd .135\n"
"#       feedback is in rpm\n"
"setp spindle.scale-fb 7.411\n"
"#       allows us to see status\n"
"setp spindle.monitor 1\n"
msgstr ""

#. type: delimited block -
#: src/drivers/mitsub-vfd.adoc:129
#, no-wrap
msgid "net spindle-speed-indicator spindle.motor-fb        gladevcp.spindle-speed\n"
msgstr ""

#. type: delimited block -
#: src/drivers/mitsub-vfd.adoc:141
#, no-wrap
msgid ""
"# *************** Coolant vfd setup slave 3 ***********************\n"
"net coolant-flood               coolant.run\n"
"net coolant-is-on               coolant.up-to-speed   gladevcp.coolant-on-led\n"
"net estop-out                   coolant.estop\n"
"#       cmd and feedback scaled to hertz\n"
"setp coolant.scale-cmd 1\n"
"setp coolant.scale-fb 1\n"
"#       command full speed\n"
"setp coolant.motor-cmd 60\n"
"#       allows us to see status\n"
"setp coolant.monitor 1\n"
msgstr ""

#. type: Title ==
#: src/drivers/mitsub-vfd.adoc:143
#, no-wrap
msgid "Configuring the Mitsubishi VFD for serial usage"
msgstr ""

#. type: Title ===
#: src/drivers/mitsub-vfd.adoc:145 src/drivers/vfs11.adoc:297
#, no-wrap
msgid "Connecting the Serial Port"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:152
#, no-wrap
msgid ""
"The Mitsubishi VFDs have an RJ-45 jack for serial communication.\n"
"Since they use RS485 protocol,  they can be networked together point to point.\n"
"This driver was tested using the Opto22 AC7A to convert from RS232 to RS485."
msgstr ""

#. type: Title ===
#: src/drivers/mitsub-vfd.adoc:153 src/drivers/vfs11.adoc:313
#, no-wrap
msgid "Modbus setup"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:156
msgid "Referenced manuals:"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:160
#, no-wrap
msgid ""
"'communication option reference manual' and 'A500 technical manual' for 500 series.\n"
"'Fr-A700 F700 E700 D700 technical manual' for the 700 series"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:163
#, no-wrap
msgid ""
"The VFD must have PR settings adjusted manually for serial communication.\n"
"One must power cycle the VFD for some of these to register eg PR 79"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:166
msgid "'PR 77' set to 1 '-to unlock other PR modification.'"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:169
msgid "'PR 79' set to 1 or 0 '-for communication thru serial.'"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:172
msgid ""
"'PR 117' set to 0-31 '-slave number, driver must reference same number.'"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:175
msgid ""
"'PR 118' tested with 96 '-baud rate (can be set to 48,96,192) if driver is "
"also set.'"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:178
msgid "'PR 119' set to 0 '-stop bit/data length (8 bits, two stop)'"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:181
msgid "'PR 120' set to 0 '-no parity'"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:184
msgid "'PR 121' set to 1-10 '-if 10 (maximuim) COM errors then VFD faults.'"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:187
msgid ""
"'PR 122' tested with 9999 '-if communication is lost VFD will not error.'"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:190
msgid "'PR 123' set to 9999 '-no wait time is added to the serial data frame.'"
msgstr ""

#. type: Plain text
#: src/drivers/mitsub-vfd.adoc:193
msgid "'PR 124' set to 0 '-no carriage return at end of line.'"
msgstr ""

#. type: Title =
#: src/drivers/motenc.adoc:5
#, no-wrap
msgid "Motenc Driver"
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:14
msgid "Vital Systems Motenc-100 and Motenc-LITE"
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:22
msgid ""
"The Vital Systems Motenc-100 and Motenc-LITE are 8- and 4-channel servo "
"control boards. The Motenc-100 provides 8 quadrature encoder counters, 8 "
"analog inputs, 8 analog outputs, 64 (68?) digital inputs, and 32 digital "
"outputs. The Motenc-LITE has only 4 encoder counters, 32 digital inputs and "
"16 digital outputs, but it still has 8 analog inputs and 8 analog outputs. "
"The driver automatically identifies the installed board and exports the "
"appropriate HAL objects."
msgstr ""

#. type: delimited block -
#: src/drivers/motenc.adoc:28
#, no-wrap
msgid "loadrt hal_motenc\n"
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:34
msgid "Up to 4 boards may be used in one system."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:42
msgid ""
"In the following pins, parameters, and functions, <board> is the board ID. "
"According to the naming conventions the first board should always have an ID "
"of zero. However this driver sets the ID based on a pair of jumpers on the "
"board, so it may be non-zero even if there is only one board."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:45
msgid ""
"'(s32) motenc.<board>.enc-<channel>-count' - Encoder position, in counts."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:47
msgid ""
"'(float) motenc.<board>.enc-<channel>-position' - Encoder position, in user "
"units."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:49
msgid ""
"'(bit) motenc.<board>.enc-<channel>-index' - Current status of index pulse "
"input."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:52
msgid ""
"'(bit) motenc.<board>.enc-<channel>-idx-latch' - Driver sets this pin true "
"when it latches an index pulse (enabled by latch-index). Cleared by clearing "
"latch-index."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:54
msgid ""
"'(bit) motenc.<board>.enc-<channel>-latch-index' - If this pin is true, the "
"driver will reset the counter on the next index pulse."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:57
msgid ""
"'(bit) motenc.<board>.enc-<channel>-reset-count' - If this pin is true, the "
"counter will immediately be reset to zero, and the pin will be cleared."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:59
msgid ""
"'(float) motenc.<board>.dac-<channel>-value' - Analog output value for DAC "
"(in user units, see -gain and -offset)"
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:61
msgid ""
"'(float) motenc.<board>.adc-<channel>-value' - Analog input value read by "
"ADC (in user units, see -gain and -offset)"
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:63
msgid ""
"'(bit) motenc.<board>.in-<channel>' - State of digital input pin, see "
"canonical digital input."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:65
msgid ""
"'(bit) motenc.<board>.in-<channel>-not' - Inverted state of digital input "
"pin, see canonical digital input."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:67
msgid ""
"'(bit) motenc.<board>.out-<channel>' - Value to be written to digital "
"output, seen canonical digital output."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:69
msgid ""
"'(bit) motenc.<board>.estop-in' - Dedicated estop input, more details needed."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:71
msgid ""
"'(bit) motenc.<board>.estop-in-not' - Inverted state of dedicated estop "
"input."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:73
msgid ""
"'(bit) motenc.<board>.watchdog-reset' - Bidirectional, - Set TRUE to reset "
"watchdog once, is automatically cleared."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:78
msgid ""
"'(float) motenc.<board>.enc-<channel>-scale' - The number of counts / user "
"unit (to convert from counts to units)."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:80
msgid "'(float) motenc.<board>.dac-<channel>-offset' - Sets the DAC offset."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:82
msgid ""
"'(float) motenc.<board>.dac-<channel>-gain' - Sets the DAC gain (scaling)."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:84
msgid "'(float) motenc.<board>.adc-<channel>-offset' - Sets the ADC offset."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:86
msgid ""
"'(float) motenc.<board>.adc-<channel>-gain' - Sets the ADC gain (scaling)."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:88
msgid ""
"'(bit) motenc.<board>.out-<channel>-invert' - Inverts a digital output, see "
"canonical digital output."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:91
#, no-wrap
msgid ""
"'(u32) motenc.<board>.watchdog-control' - Configures the watchdog.\n"
"The value may be a bitwise OR of the following values:"
msgstr ""

#. type: Table
#: src/drivers/motenc.adoc:94
#, no-wrap
msgid "Bit #"
msgstr ""

#. type: Table
#: src/drivers/motenc.adoc:95 src/gcode/overview.adoc:115
#, no-wrap
msgid "Meaning"
msgstr ""

#. type: Table
#: src/drivers/motenc.adoc:96
#, no-wrap
msgid "Timeout is 16ms if set, 8ms if unset"
msgstr ""

#. type: Table
#: src/drivers/motenc.adoc:98
#, no-wrap
msgid "Watchdog is enabled"
msgstr ""

#. type: Table
#: src/drivers/motenc.adoc:100
#, no-wrap
msgid "Watchdog is automatically reset by DAC writes (the HAL dac-write function)"
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:104
msgid ""
"Typically, the useful values are 0 (watchdog disabled) or 20 (8ms watchdog "
"enabled, cleared by dac-write)."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:107
msgid "'(u32) motenc.<board>.led-view' - Maps some of the I/O to onboard LEDs."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:112
msgid "'(funct) motenc.<board>.encoder-read' - Reads all encoder counters."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:114
msgid ""
"'(funct) motenc.<board>.adc-read' - Reads the analog-to-digital converters."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:116
msgid "'(funct) motenc.<board>.digital-in-read' - Reads digital inputs."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:118
msgid "'(funct) motenc.<board>.dac-write' - Writes the voltages to the DACs."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:120
msgid "'(funct) motenc.<board>.digital-out-write' - Writes digital outputs."
msgstr ""

#. type: Plain text
#: src/drivers/motenc.adoc:122
msgid "'(funct) motenc.<board>.misc-update' - Updates misc stuff."
msgstr ""

#. type: Title =
#: src/drivers/opto22.adoc:5
#, no-wrap
msgid "Opto22 Driver"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:14
#, no-wrap
msgid "*PCI AC5 ADAPTER CARD / HAL DRIVER*\n"
msgstr ""

#. type: Title ==
#: src/drivers/opto22.adoc:15
#, no-wrap
msgid "The Adapter Card"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:25
msgid ""
"This is a card made by Opto22 for adapting the PCI port to solid state relay "
"racks such as their standard or G4 series. It has 2 ports that can control "
"up to 24 points each and has 4 on board LEDs. The ports use 50 pin "
"connectors the same as Mesa boards. Any relay racks/breakout boards that "
"work with Mesa Cards should work with this card with the understanding any "
"encoder counters, PWM, etc., would have to be done in software. The AC5 does "
"not have any 'smart' logic on board, it is just an adapter."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:27
msgid "See the manufacturer's website for more info:"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:29
msgid "http://www.opto22.com/site/pr_details.aspx?cid=4&item=PCI-AC5"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:32
msgid ""
"I would like to thank Opto22 for releasing info in their manual, easing the "
"writing of this driver!"
msgstr ""

#. type: Title ==
#: src/drivers/opto22.adoc:33
#, no-wrap
msgid "The Driver"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:39
msgid ""
"This driver is for the PCI AC5 card and will not work with the ISA AC5 card. "
"The HAL driver is a realtime module. It will support 4 cards as is (more "
"cards are possible with a change in the source code). Load the basic driver "
"like so:"
msgstr ""

#. type: delimited block -
#: src/drivers/opto22.adoc:43
#, no-wrap
msgid "loadrt opto_ac5\n"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:50
msgid ""
"This will load the driver which will search for max 4 boards. It will set I/"
"O of each board's 2 ports to a default setting. The default configuration is "
"for 12 inputs then 12 outputs. The pin name numbers correspond to the "
"position on the relay rack. For example the pin names for the default I/O "
"setting of port 0 would be:"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:53
msgid "'opto_ac5.0.port0.in-00' - They would be numbered from 00 to 11"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:55
msgid ""
"'opto_ac5.0.port0.out-12' - They would be numbered 12 to 23 port 1 would be "
"the same."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:59
msgid "'opto_ac5.[BOARDNUMBER].port[PORTNUMBER].in-[PINNUMBER] OUT bit' -"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:66
msgid ""
"'opto_ac5.[BOARDNUMBER].port[PORTNUMBER].in-[PINNUMBER]-not OUT bit' - "
"Connect a HAL bit signal to this pin to read an I/O point from the card. The "
"PINNUMBER represents the position in the relay rack. Eg.  PINNUMBER 0 is "
"position 0 in a Opto22 relay rack and would be pin 47 on the 50 pin header "
"connector. The -not pin is inverted so that LOW gives TRUE and HIGH gives "
"FALSE."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:72
msgid ""
"'opto_ac5.[BOARDNUMBER].port[PORTNUMBER].out-[PINNUMBER] IN bit' - Connect a "
"HAL bit signal to this pin to write to an I/O point of the card. The "
"PINNUMBER represents the position in the relay rack.Eg.  PINNUMBER 23 is "
"position 23 in a Opto22 relay rack and would be pin 1 on the 50 pin header "
"connector."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:75
msgid ""
"'opto_ac5.[BOARDNUMBER].led[NUMBER] OUT bit' - Turns one of the 4 onboard "
"LEDs on/off. LEDs are numbered 0 to 3."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:78
msgid ""
"BOARDNUMBER can be 0-3 PORTNUMBER can be 0 or 1. Port 0 is closest to the "
"card bracket."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:84
msgid ""
"'opto_ac5.[BOARDNUMBER].port[PORTNUMBER].out-[PINNUMBER]-invert W bit' - "
"When TRUE, invert the meaning of the corresponding -out pin so that TRUE "
"gives LOW and FALSE gives HIGH."
msgstr ""

#. type: SH
#: src/drivers/opto22.adoc:85 src/man/man9/streamer.9.adoc:40
#: man/man1/hal_parport.1:89 man/man9/abs.9:16 man/man9/abs_s32.9:16
#: man/man9/and2.9:16 man/man9/axistest.9:16 man/man9/bin2gray.9:19
#: man/man9/biquad.9:20 man/man9/bitslice.9:22 man/man9/bitwise.9:16
#: man/man9/bldc.9:111 man/man9/blend.9:16 man/man9/carousel.9:111
#: man/man9/charge_pump.9:25 man/man9/clarke2.9:30 man/man9/clarke3.9:27
#: man/man9/clarkeinv.9:21 man/man9/classicladder.9:76 man/man9/comp.9:16
#: man/man9/constant.9:16 man/man9/conv_bit_float.9:16
#: man/man9/conv_bit_s32.9:16 man/man9/conv_bit_u32.9:16
#: man/man9/conv_float_s32.9:16 man/man9/conv_float_u32.9:16
#: man/man9/conv_s32_bit.9:16 man/man9/conv_s32_float.9:16
#: man/man9/conv_s32_u32.9:16 man/man9/conv_u32_bit.9:16
#: man/man9/conv_u32_float.9:16 man/man9/conv_u32_s32.9:16
#: man/man9/corexy_by_hal.9:50 man/man9/counter.9:28 man/man9/dbounce.9:22
#: man/man9/ddt.9:23 man/man9/deadzone.9:16 man/man9/debounce.9:32
#: man/man9/demux.9:27 man/man9/differential.9:16 man/man9/edge.9:16
#: man/man9/encoder.9:37 man/man9/encoder_ratio.9:22
#: man/man9/eoffset_per_angle.9:45 man/man9/estop_latch.9:82
#: man/man9/feedcomp.9:16 man/man9/filter_kalman.9:41 man/man9/flipflop.9:16
#: man/man9/gantry.9:38 man/man9/gearchange.9:20 man/man9/gray2bin.9:19
#: man/man9/hal_bb_gpio.9:61 man/man9/histobins.9:50 man/man9/hostmot2.9:1733
#: man/man9/hypot.9:16 man/man9/ilowpass.9:31 man/man9/integ.9:16
#: man/man9/invert.9:17 man/man9/joyhandle.9:37 man/man9/knob2float.9:16
#: man/man9/latencybins.9:42 man/man9/lcd.9:8 man/man9/limit1.9:16
#: man/man9/limit2.9:16 man/man9/limit3.9:18 man/man9/lincurve.9:41
#: man/man9/logic.9:53 man/man9/lowpass.9:16 man/man9/lut5.9:145
#: man/man9/maj3.9:16 man/man9/match8.9:16 man/man9/matrix_kb.9:53
#: man/man9/max31855.9:43 man/man9/mesa_pktgyro_test.9:52 man/man9/message.9:41
#: man/man9/minmax.9:16 man/man9/motion.9:705 man/man9/moveoff.9:102
#: man/man9/mult2.9:16 man/man9/multiclick.9:37 man/man9/multiswitch.9:23
#: man/man9/mux16.9:16 man/man9/mux2.9:16 man/man9/mux4.9:16 man/man9/mux8.9:16
#: man/man9/mux_generic.9:11 man/man9/near.9:16 man/man9/not.9:16
#: man/man9/offset.9:16 man/man9/ohmic.9:43 man/man9/oneshot.9:24
#: man/man9/opto_ac5.9:55 man/man9/or2.9:16 man/man9/orient.9:62
#: man/man9/pid.9:206 man/man9/plasmac.9:40 man/man9/pwmgen.9:39
#: man/man9/sample_hold.9:16 man/man9/sampler.9:79 man/man9/scale.9:16
#: man/man9/select8.9:16 man/man9/serport.9:30 man/man9/setsserial.9:15
#: man/man9/siggen.9:35 man/man9/sim_axis_hardware.9:24
#: man/man9/sim_encoder.9:28 man/man9/sim_home_switch.9:25
#: man/man9/sim_matrix_kb.9:16 man/man9/sim_parport.9:45
#: man/man9/simple_tp.9:15 man/man9/sim_spindle.9:16 man/man9/sphereprobe.9:16
#: man/man9/spindle.9:34 man/man9/spindle_monitor.9:16 man/man9/stepgen.9:69
#: man/man9/steptest.9:16 man/man9/streamer.9:113 man/man9/sum2.9:16
#: man/man9/supply.9:29 man/man9/thc.9:66 man/man9/thcud.9:75
#: man/man9/threads.9:32 man/man9/threadtest.9:16 man/man9/time.9:101
#: man/man9/timedelay.9:16 man/man9/timedelta.9:16 man/man9/toggle2nist.9:44
#: man/man9/toggle.9:27 man/man9/tristate_bit.9:16 man/man9/tristate_float.9:16
#: man/man9/updown.9:16 man/man9/watchdog.9:11 man/man9/wcomp.9:16
#: man/man9/weighted_sum.9:20 man/man9/xhc_hb04_util.9:26 man/man9/xor2.9:16
#, no-wrap
msgid "FUNCTIONS"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:89
msgid ""
"'opto_ac5.0.digital-read' - Add this to a thread to read all the input "
"points."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:92
msgid ""
"'opto_ac5.0.digital-write' - Add this to a thread to write all the output "
"points and LEDs."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:95
msgid ""
"For example the pin names for the default I/O setting of port 0 would be:"
msgstr ""

#. type: delimited block -
#: src/drivers/opto22.adoc:98
#, no-wrap
msgid "opto_ac5.0.port0.in-00\n"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:101
msgid "They would be numbered from 00 to 11"
msgstr ""

#. type: delimited block -
#: src/drivers/opto22.adoc:104
#, no-wrap
msgid "opto_ac5.0.port0.out-12\n"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:107
msgid "They would be numbered 12 to 23 port 1 would be the same."
msgstr ""

#. type: Title ==
#: src/drivers/opto22.adoc:108
#, no-wrap
msgid "Configuring I/O Ports"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:111
msgid "To change the default setting load the driver something like so:"
msgstr ""

#. type: delimited block -
#: src/drivers/opto22.adoc:115
#, no-wrap
msgid "loadrt opto_ac5 portconfig0=0xffff portconfig1=0xff0000\n"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:119
msgid ""
"Of course changing the numbers to match the I/O you would like. Each port "
"can be set up different."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:127
msgid ""
"Here's how to figure out the number: The configuration number represents a "
"32 bit long code to tell the card which I/O points are output vrs input. The "
"lower 24 bits are the I/O points of one port. The 2 highest bits are for 2 "
"of the on board LEDs. A one in any bit position makes the I/O point an "
"output. The two highest bits must be output for the LEDs to work. The driver "
"will automatically set the two highest bits for you, we won't talk about "
"them."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:140
msgid ""
"The easiest way to do this is to fire up the calculator under APPLICATIONS/"
"ACCESSORIES. Set it to scientific (click view). Set it BINARY (radio button "
"Bin). Press 1 for every output you want and/or zero for every input. "
"Remember that HAL pin 00 corresponds to the rightmost bit. 24 numbers "
"represent the 24 I/O points of one port. So for the default setting (12 "
"inputs then 12 outputs) you would push 1 twelve times (that's the outputs) "
"then 0 twelve times (that's the inputs). Notice the first I/O point is the "
"lowest (rightmost) bit.  (that bit corresponds to HAL pin 00 .looks "
"backwards) You should have 24 digits on the screen. Now push the Hex radio "
"button. The displayed number (fff000) is the configport number ( put a '0x' "
"in front of it designating it as a HEX number)."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:144
msgid ""
"Another example: To set the port for 8 outputs and 16 inputs (the same as a "
"Mesa card). Here is the 24 bits represented in a BINARY number. Bit 1 is the "
"rightmost number:"
msgstr ""

#. type: Block title
#: src/drivers/opto22.adoc:145
#, no-wrap
msgid "16 zeros for the 16 inputs and 8 ones for the 8 outputs"
msgstr ""

#. type: delimited block -
#: src/drivers/opto22.adoc:148
#, no-wrap
msgid "000000000000000011111111\n"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:152
msgid ""
"This converts to FF on the calculator, so 0xff is the number to use for "
"portconfig0 and/or portconfig1 when loading the driver."
msgstr ""

#. type: Title ==
#: src/drivers/opto22.adoc:153
#, no-wrap
msgid "Pin Numbering"
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:160
msgid ""
"HAL pin 00 corresponds to bit 1 (the rightmost) which represents position 0 "
"on an Opto22 relay rack. HAL pin 01 corresponds to bit 2 (one spot to the "
"left of the rightmost) which represents position 1 on an Opto22 relay rack. "
"HAL pin 23 corresponds to bit 24 (the leftmost) which represents position 23 "
"on an Opto22 relay rack."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:164
msgid ""
"HAL pin 00 connects to pin 47 on the 50 pin connector of each port.  HAL pin "
"01 connects to pin 45 on the 50 pin connector of each port.  HAL pin 23 "
"connects to pin 1 on the 50 pin connector of each port."
msgstr ""

#. type: Plain text
#: src/drivers/opto22.adoc:169
msgid ""
"Note that Opto22 and Mesa use opposite numbering systems: Opto22 position 23 "
"= connector pin 1, and the position goes down as the connector pin number "
"goes up. Mesa Hostmot2 position 1 = connector pin 1, and the position number "
"goes up as the connector pin number goes up."
msgstr ""

#. type: Title =
#: src/drivers/pico-ppmc.adoc:5
#, no-wrap
msgid "Pico Drivers"
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:24
msgid ""
"Pico Systems has a family of boards for doing analog servo, stepper, and PWM "
"(digital) servo control. The boards connect to the PC through a parallel "
"port working in EPP mode. Although most users connect one board to a "
"parallel port, in theory any mix of up to 8 or 16 boards can be used on a "
"single parport. One driver serves all types of boards. The final mix of I/O "
"depends on the connected board(s). The driver doesn't distinguish between "
"boards, it simply numbers I/O channels (encoders, etc) starting from 0 on "
"the first board.  The driver is named hal_ppmc.ko The analog servo interface "
"is also called the PPMC for Parallel Port Motion Control.  There is also the "
"Universal Stepper Controller, abbreviated the USC. And the Universal PWM "
"Controller, or UPC."
msgstr ""

#. type: delimited block -
#: src/drivers/pico-ppmc.adoc:30
#, no-wrap
msgid "loadrt hal_ppmc port_addr=<addr1>[,<addr2>[,<addr3>...]]\n"
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:40
msgid ""
"The 'port_addr' parameter tells the driver what parallel port(s) to check. "
"By default, '<addr1>' is 0x0378, and '<addr2>' and following are not used. "
"The driver searches the entire address space of the enhanced parallel "
"port(s) at 'port_addr', looking for any board(s) in the PPMC family. It then "
"exports HAL pins for whatever it finds. During loading (or attempted "
"loading) the driver prints some useful debugging messages to the kernel log, "
"which can be viewed with 'dmesg'."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:43
msgid ""
"Up to 3 parport buses may be used, and each bus may have up to 8 (or "
"possibly 16 PPMC) devices on it."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:57
msgid ""
"There are several options that can be specified on the loadrt command line.  "
"First, the USC and UPC can have an 8-bit DAC added for spindle speed control "
"and similar functions.  This can be specified with the "
"extradac='0xnn[,0xmm]' parameter.  The part enclosed in [ ] allows you to "
"specify this option on more than one board of the system.  The first hex "
"digit tells which EPP bus is being referred to, it corresponds to the order "
"of the port addresses in the port_addr parameter, where <addr1> would be "
"zero here.  So, for the first EPP bus, the first USC or UPC board would be "
"described as '0x00', the second USC or UPC on the same bus would be '0x02'.  "
"(Note that each USC or UPC takes up two addresses, so if one is at 00, the "
"next would have to be 02.)"
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:62
msgid ""
"Alternatively, the 8 digital output pins can be used as additional digital "
"outputs, it works the same way as above with the syntax : extradout=0xnn'.  "
"The extradac and extradout options are mutually exclusive on each board, you "
"can only specify one."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:75
msgid ""
"The UPC and PPMC encoder boards can timestamp the arrival of encoder counts "
"to refine the derivation of axis velocity.  This derived velocity can be fed "
"to the PID hal component to produce smoother D term response.  The syntax "
"is : timestamp='0xnn[,0xmm]', this works the same way as above to select "
"which board is being configured.  Default is to not enable the timestamp "
"option.  If you put this option on the command line, it enables the option.  "
"The first 'n' selects the EPP bus, the second one matches the address of the "
"board having the option enabled.  The driver checks the revision level of "
"the board to make sure it has firmware supporting the feature, and produces "
"an error message if the board does not support it."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:89
msgid ""
"The PPMC encoder board has an option to select the encoder digital filter "
"frequeency.  (The UPC has the same ability via DIP switches on the board.)  "
"Since the PPMC encoder board doesn't have these extra DIP switches, it needs "
"to be selected via a command-line option.  By default, the filter runs at 1 "
"MHz, allowing encoders to be counted up to about 900 kHz (depending on noise "
"and quadrature accuracy of the encoder.)  The options are 1, 2.5, 5 and 10 "
"MHz.  These are set with a parameter of 1,2,5 and 10 (decimal) which is "
"specified as the hex digit \"A\".  These are specified in a manner similar "
"to the above options, but with the frequency setting to the left of the bus/"
"address digits.  So, to set 5 MHz on the encoder board at address 3 on the "
"first EPP bus, you would write: `enc_clock='0x503'`."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:98
msgid ""
"It was recently discovered that some parallel port chips would not work with "
"the ppmc driver.  Especially, the Oxford OXPCIe952 chip on the SIIG PCIe "
"parallel port cards had this trouble.  The ppmc driver in all LinuxCNC "
"versions starting from 2.7.8 have been corrected for this problem by "
"default.  However, this possibly could cause problems with really old EPP "
"parallel port hardware, so there is a command line option to go back to the "
"previous behavior.  The new behavior is set by default, or by adding the "
"parameter epp_dir=0 on the command line.  To get the old behavior, add "
"epp_dir=1 to the command line.  All parallel ports I have here work with the "
"new default behavior.  As on the other parameters, it is possible to give a "
"list, like epp_dir=1,0,1 to set different settings for each of up to 3 "
"parallel ports."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:118
msgid ""
"In the following pins, parameters, and functions, <port> is the parallel "
"port ID. According to the naming conventions the first port should always "
"have an ID of zero. All the boards have some method of setting the address "
"on the EPP bus. USC and UPC have simple provisions for only two addresses, "
"but jumper foil cuts allow up to 4 boards to be addressed.  The PPMC boards "
"have 16 possible addresses. In all cases, the driver enumerates the boards "
"by type and exports the appropriate HAL pins.  For instance, the encoders "
"will be enumerated from zero up, in the same order as the address switches "
"on the board specify.  So, the first board will have encoders 0 -- 3, the "
"second board would have encoders 4 -- 7.  The first column after the bullet "
"tells which boards will have this HAL pin or parameter associated with it. "
"All means that this pin is available on all three board types.  Option means "
"that this pin will only be exported when that option is enabled by an "
"optional parameter in the loadrt HAL command. These options require the "
"board to have a sufficient revision level to support the feature."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:120
msgid ""
"'(All s32 output) ppmc.<port>.encoder.<channel>.count' - Encoder position, "
"in counts."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:121
msgid ""
"'(All s32 output) ppmc.<port>.encoder.<channel>.delta' - Change in counts "
"since last read, in raw encoder count units."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:130
msgid ""
"'(All float output) 'ppmc.<port>.encoder.<channel>.velocity' - Velocity "
"scaled in user units per second. On PPMC and USC this is derived from raw "
"encoder counts per servo period, and hence is affected by encoder "
"granularity. On UPC boards with the 8/21/09 and later firmware, velocity "
"estimation by timestamping encoder counts can be used to improve the "
"smoothness of this velocity output. This can be fed to the PID HAL component "
"to produce a more stable servo response. This function has to be enabled in "
"the HAL command line that starts the PPMC driver, with the timestamp=0x00 "
"option."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:131
msgid ""
"'(All float output) ppmc.<port>.encoder.<channel>.position' - Encoder "
"position, in user units."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:136
msgid ""
"'(All bit bidir) ppmc.<port>.encoder.<channel>.index-enable' - Connect to "
"joint.#.index-enable for home-to-index. This is a bidirectional HAL signal. "
"Setting it to true causes the encoder hardware to reset the count to zero on "
"the next encoder index pulse.  The driver will detect this and set the "
"signal back to false."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:139
msgid ""
"'(PPMC float output) ppmc.<port>.DAC.<channel>.value' - sends a signed value "
"to the 16-bit Digital to Analog Converter on the PPMC DAC16 board commanding "
"the analog output voltage of that DAC channel."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:140
msgid ""
"'(UPC bit input) ppmc.<port>.pwm.<channel>.enable' - Enables a PWM generator."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:146
msgid ""
"'(UPC float input) ppmc.<port>.pwm.<channel>.value' - Value which determines "
"the duty cycle of the PWM waveforms. The value is divided by 'pwm.<channel>."
"scale', and if the result is 0.6 the duty cycle will be 60%, and so on.  "
"Negative values result in the duty cycle being based on the absolute value, "
"and the direction pin is set to indicate negative."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:148
msgid ""
"'(USC bit input) ppmc.<port>.stepgen.<channel>.enable' - Enables a step "
"pulse generator."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:154
msgid ""
"'(USC float input) ppmc.<port>.stepgen.<channel>.velocity' - Value which "
"determines the step frequency. The value is multiplied by 'stepgen.<channel>."
"scale' , and the result is the frequency in steps per second. Negative "
"values result in the frequency being based on the absolute value, and the "
"direction pin is set to indicate negative."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:156
msgid ""
"'(All bit output) ppmc.<port>.din.<channel>.in' - State of digital input "
"pin, see canonical digital input."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:158
msgid ""
"'(All bit output) ppmc.<port>.din.<channel>.in-not' - Inverted state of "
"digital input pin, see canonical digital input."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:160
msgid ""
"'(All bit input) ppmc.<port>.dout.<channel>.out' - Value to be written to "
"digital output, see canonical digital output."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:169
msgid ""
"'(Option float input) ppmc.<port>.DAC8-<channel>.value' - Value to be "
"written to analog output, range from 0 to 255. This sends 8 output bits to "
"J8, which should have a Spindle DAC board connected to it. 0 corresponds to "
"zero Volts, 255 corresponds to 10 Volts. The polarity of the output can be "
"set for always minus, always plus, or can be controlled by the state of SSR1 "
"(plus when on) and SSR2 (minus when on). You must specify extradac = 0x00 on "
"the HAL command line that loads the PPMC driver to enable this function on "
"the first USC ur UPC board."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:176
msgid ""
"'(Option bit input) ppmc.<port>.dout.<channel>.out' - Value to be written to "
"one of the 8 extra digital output pins on J8. You must specify extradout = "
"0x00 on the HAL command line that loads the ppmc driver to enable this "
"function on the first USC or UPC board. extradac and extradout are mutually "
"exclusive features as they use the same signal lines for different "
"purposes.  These output pins will be enumerated after the standard digital "
"outputs of the board."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:181
msgid ""
"'(All float) ppmc.<port>.encoder.<channel>.scale' - The number of counts / "
"user unit (to convert from counts to units)."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:185
msgid ""
"'(UPC float) ppmc.<port>.pwm.<channel-range>.freq' - The PWM carrier "
"frequency, in Hz. Applies to a group of four consecutive PWM generators, as "
"indicated by '<channel-range>'. Minimum is 610 Hz, maximum is 500 kHz."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:189
msgid ""
"'(PPMC float) ppmc.<port>.DAC.<channel>.scale' - Sets scale of DAC16 output "
"channel such that an output value equal to the 1/scale value will produce an "
"output of + or - value Volts.  So, if the scale parameter is 0.1 and you "
"send a value of 0.5, the output will be 5.0 Volts."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:192
msgid ""
"'(UPC float) ppmc.<port>.pwm.<channel>.scale' - Scaling for PWM generator. "
"If 'scale' is X, then the duty cycle will be 100% when the 'value' pin is X "
"(or -X)."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:194
msgid ""
"'(UPC float) ppmc.<port>.pwm.<channel>.max-dc' - Maximum duty cycle, from "
"0.0 to 1.0."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:196
msgid ""
"'(UPC float) ppmc.<port>.pwm.<channel>.min-dc' - Minimum duty cycle, from "
"0.0 to 1.0."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:198
msgid ""
"'(UPC float) ppmc.<port>.pwm.<channel>.duty-cycle' - Actual duty cycle (used "
"mostly for troubleshooting.)"
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:202
msgid ""
"'(UPC bit) ppmc.<port>.pwm.<channel>.bootstrap' - If true, the PWM generator "
"will generate a short sequence of pulses of both polarities when E-stop goes "
"false, to reset the shutdown latches on some PWM servo drives."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:206
msgid ""
"'(USC u32) ppmc.<port>.stepgen.<channel-range>.setup-time' - Sets minimum "
"time between direction change and step pulse, in units of 100 ns. Applies to "
"a group of four consecutive step generators, as indicated by '<channel-"
"range>'. Values between 200 ns and 25.5 µs can be specified."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:210
msgid ""
"'(USC u32) ppmc.<port>.stepgen.<channel-range>.pulse-width' - Sets width of "
"step pulses, in units of 100 ns. Applies to a group of four consecutive step "
"generators, as indicated by '<channel-range>'.  Values between 200 ns and "
"25.5 µs may be specified."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:216
msgid ""
"'(USC u32) ppmc.<port>.stepgen.<channel-range>.pulse-space-min' - Sets "
"minimum time between pulses, in units of 100 ns.  Applies to a group of four "
"consecutive step generators, as indicated by '<channel-range>'. Values "
"between 200 ns and 25.5 µs can be specified.  The maximum step rate is: "
"image:images/pico-ppmc-math.png[]"
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:219
msgid ""
"'(USC float) ppmc.<port>.stepgen.<channel>.scale' - Scaling for step pulse "
"generator. The step frequency in Hz is the absolute value of 'velocity' * "
"'scale'."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:222
msgid ""
"'(USC float) ppmc.<port>.stepgen.<channel>.max-vel' - The maximum value for "
"'velocity'. Commands greater than 'max-vel' will be clamped.  Also applies "
"to negative values. (The absolute value is clamped.)"
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:224
msgid ""
"'(USC float) ppmc.<port>.stepgen.<channel>.frequency' - Actual step pulse "
"frequency in Hz (used mostly for troubleshooting.)"
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:228
msgid ""
"'(Option float) ppmc.<port>.DAC8.<channel>.scale' - Sets scale of extra DAC "
"output such that an output value equal to scale gives a magnitude of 10.0 V "
"output. (The sign of the output is set by jumpers and/or other digital "
"outputs.)"
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:230
msgid ""
"'(Option bit) ppmc.<port>.dout.<channel>.invert' - Inverts a digital output, "
"see canonical digital output."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:232
msgid ""
"'(Option bit) ppmc.<port>.dout.<channel>.invert' - Inverts a digital output "
"pin of J8, see canonical digital output."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:239
msgid ""
"'(All funct) ppmc.<port>.read' - Reads all inputs (digital inputs and "
"encoder counters) on one port. These reads are organized into blocks of "
"contiguous registers to be read in a block to minimize CPU overhead."
msgstr ""

#. type: Plain text
#: src/drivers/pico-ppmc.adoc:243
msgid ""
"'(All funct) ppmc.<port>.write' - Writes all outputs (digital outputs, "
"stepgens, PWMs) on one port.  These writes are organized into blocks of "
"contiguous registers to be written in a block to minimize CPU overhead."
msgstr ""

#. type: Title =
#: src/drivers/pluto-p.adoc:5
#, no-wrap
msgid "Pluto P Driver"
msgstr ""

#. type: Title ==
#: src/drivers/pluto-p.adoc:7
#, no-wrap
msgid "General Info"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:10
msgid "The Pluto-P is a FPGA board featuring the ACEX1K chip from Altera."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:14
msgid "A Pluto-P board"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:16
msgid ""
"An EPP-compatible parallel port, configured for EPP mode in the system BIOS "
"or a PCI EPP compatible parallel port card."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:22
msgid ""
"The Pluto P board requires EPP mode. Netmos98xx chips do not work in EPP "
"mode.  The Pluto P board will work on some computers and not on others.  "
"There is no known pattern to which computers work and which don't work."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:25
msgid ""
"For more information on PCI EPP compatible parallel port cards see the "
"http://wiki.linuxcnc.org/cgi-bin/wiki.pl?"
"LinuxCNC_Supported_Hardware[LinuxCNC Supported Hardware] page on the wiki."
msgstr ""

#. type: Title ===
#: src/drivers/pluto-p.adoc:26
#, no-wrap
msgid "Connectors"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:33
msgid ""
"The Pluto-P board is shipped with the left connector presoldered, with the "
"key in the indicated position. The other connectors are unpopulated. There "
"does not seem to be a standard 12-pin IDC connector, but some of the pins of "
"a 16P connector can hang off the board next to QA3/QZ3."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:37
msgid ""
"The bottom and right connectors are on the same .1\" grid, but the left "
"connector is not. If OUT2…OUT9 are not required, a single IDC connector can "
"span the bottom connector and the bottom two rows of the right connector."
msgstr ""

#. type: Title ===
#: src/drivers/pluto-p.adoc:38
#, no-wrap
msgid "Physical Pins"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:43
msgid ""
"Read the ACEX1K datasheet for information about input and output voltage "
"thresholds. The pins are all configured in 'LVTTL/LVCMOS' mode and are "
"generally compatible with 5V TTL logic."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:50
msgid ""
"Before configuration and after properly exiting LinuxCNC, all Pluto-P pins "
"are tristated with weak pull-ups (20 kΩ min, 50 kΩ max).  If the watchdog "
"timer is enabled (the default), these pins are also tristated after an "
"interruption of communication between LinuxCNC and the board. The watchdog "
"timer takes approximately 6.5 ms to activate. However, software bugs in the "
"pluto_servo firmware or LinuxCNC can leave the Pluto-P pins in an undefined "
"state."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:54
msgid ""
"In pwm+dir mode, by default dir is HIGH for negative values and LOW for "
"positive values. To select HIGH for positive values and LOW for negative "
"values, set the corresponding dout-NN-invert parameter TRUE to invert the "
"signal."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:60
msgid ""
"The index input is triggered on the rising edge. Initial testing has shown "
"that the QZx inputs are particularly noise sensitive, due to being polled "
"every 25 ns. Digital filtering has been added to filter pulses shorter than "
"175 ns (seven polling times). Additional external filtering on all input "
"pins, such as a Schmitt buffer or inverter, RC filter, or differential "
"receiver (if applicable) is recommended."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:66
msgid ""
"The IN1…IN7 pins have 22 Ω series resistors to their associated FPGA pins. "
"No other pins have any sort of protection for out-of-spec voltages or "
"currents. It is up to the integrator to add appropriate isolation and "
"protection. Traditional parallel port optoisolator boards do not work with "
"pluto_servo due to the bidirectional nature of the EPP protocol."
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:67 src/gui/gladevcp.adoc:1078
#: src/plasma/qtplasmac.adoc:1206
#, no-wrap
msgid "LED"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:73
msgid ""
"When the device is unprogrammed, the LED glows faintly. When the device is "
"programmed, the LED glows according to the duty cycle of PWM0 ('LED' = 'UP0' "
"'xor' 'DOWN0') or STEPGEN0 ('LED' = 'STEP0' 'xor' 'DIR0')."
msgstr ""

#. type: Title ===
#: src/drivers/pluto-p.adoc:74
#, no-wrap
msgid "Power"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:81
msgid ""
"A small amount of current may be drawn from VCC. The available current "
"depends on the unregulated DC input to the board. Alternately, regulated "
"+3.3VDC may be supplied to the FPGA through these VCC pins.  The required "
"current is not yet known, but is probably around 50mA plus I/O current."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:83
msgid ""
"The regulator on the Pluto-P board is a low-dropout type. Supplying 5V at "
"the power jack will allow the regulator to work properly."
msgstr ""

#. type: Title ===
#: src/drivers/pluto-p.adoc:84
#, no-wrap
msgid "PC interface"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:87
msgid "Only a single pluto_servo or pluto_step board is supported."
msgstr ""

#. type: Title ===
#: src/drivers/pluto-p.adoc:88
#, no-wrap
msgid "Rebuilding the FPGA firmware"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:97
msgid ""
"The 'src/hal/drivers/pluto_servo_firmware/' and 'src/hal/drivers/"
"pluto_step_firmware/' subdirectories contain the Verilog source code plus "
"additional files used by Quartus for the FPGA firmwares. Altera's Quartus II "
"software is required to rebuild the FPGA firmware. To rebuild the firmware "
"from the .hdl and other source files, open the '.qpf' file and press CTRL-"
"L.  Then, recompile LinuxCNC."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:100
msgid ""
"Like the HAL hardware driver, the FPGA firmware is licensed under the terms "
"of the GNU General Public License."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:103
msgid ""
"The gratis version of Quartus II runs only on Microsoft Windows, although "
"there is apparently a paid version that runs on Linux."
msgstr ""

#. type: Title ===
#: src/drivers/pluto-p.adoc:104
#, no-wrap
msgid "For more information"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:109
msgid ""
"Some additional information about it is available from http://www.knjn.com/"
"FPGA-Parallel.html[KNJC LLC] and from http://emergent.unpy."
"net/01165081407[the developer's blog]."
msgstr ""

#. type: Title ==
#: src/drivers/pluto-p.adoc:110
#, no-wrap
msgid "Pluto Servo"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:116
msgid ""
"The pluto_servo system is suitable for control of a 4-axis CNC mill with "
"servo motors, a 3-axis mill with PWM spindle control, a lathe with spindle "
"encoder, etc. The large number of inputs allows a full set of limit switches."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:118
msgid "This driver features:"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:123
msgid ""
"4 quadrature channels with 40 MHz sample rate. The counters operate in '4x' "
"mode. The maximum useful quadrature rate is 8191 counts per LinuxCNC servo "
"cycle, or about 8 MHz for LinuxCNC's default 1 ms servo rate."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:126
msgid ""
"4 PWM channels, 'up/down' or 'pwm+dir' style. 4095 duty cycles from -100% to "
"+100%, including 0%. The PWM period is approximately 19.5 kHz (40 MHz / "
"2047). A PDM-like mode is also available."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:129
msgid ""
"18 digital outputs: 10 dedicated, 8 shared with PWM functions.  (Example: A "
"lathe with unidirectional PWM spindle control may use 13 total digital "
"outputs)"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:132
msgid ""
"20 digital inputs: 8 dedicated, 12 shared with Quadrature functions.  "
"(Example: A lathe with index pulse only on the spindle may use 13 total "
"digital inputs.)"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:135
msgid ""
"EPP communication with the PC. The EPP communication typically takes around "
"100 µs on machines tested so far, enabling servo rates above 1 kHz."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:143
msgid ""
"'UPx' - The 'up' (up/down mode) or 'pwm' (pwm+direction mode) signal from "
"PWM generator X. May be used as a digital output if the corresponding PWM "
"channel is unused, or the output on the channel is always negative. The "
"corresponding digital output invert may be set to TRUE to make UPx active "
"low rather than active high."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:148
msgid ""
"'DNx' - The 'down' (up/down mode) or 'direction' (pwm+direction mode)  "
"signal from PWM generator X. May be used as a digital output if the "
"corresponding PWM channel is unused, or the output on the channel is never "
"negative. The corresponding digital output invert may be set to TRUE to make "
"DNx active low rather than active high."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:150
msgid ""
"'QAx, QBx' - The A and B signals for Quadrature counter X. May be used as a "
"digital input if the corresponding quadrature channel is unused."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:153
msgid ""
"'QZx' - The Z (index) signal for quadrature counter X. May be used as a "
"digital input if the index feature of the corresponding quadrature channel "
"is unused."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:154 src/drivers/pluto-p.adoc:240
msgid "'INx' - Dedicated digital input #x"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:155 src/drivers/pluto-p.adoc:241
msgid "'OUTx' - Dedicated digital output #x"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:156 src/drivers/pluto-p.adoc:242
msgid "'GND' - Ground"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:157 src/drivers/pluto-p.adoc:243
msgid "'VCC' - +3.3V regulated DC"
msgstr ""

#. type: Block title
#: src/drivers/pluto-p.adoc:158
#, no-wrap
msgid "Pluto-Servo Pinout(((pluto-servo pinout)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/drivers/pluto-p.adoc:159
#, no-wrap
msgid "Pluto-Servo Pinout"
msgstr ""

#. type: Target for macro image
#: src/drivers/pluto-p.adoc:159
#, no-wrap
msgid "images/pluto-pinout.png"
msgstr ""

#. type: Block title
#: src/drivers/pluto-p.adoc:161
#, no-wrap
msgid "Pluto-Servo Alternate Pin Functions"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:164
#, no-wrap
msgid "Primary function"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:164
#, no-wrap
msgid "Alternate Function"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:165
#, no-wrap
msgid "Behavior if both functions used"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:165
#, no-wrap
msgid "UP0"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:165
#, no-wrap
msgid "PWM0"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:166
#, no-wrap
msgid "When pwm-0-pwmdir is TRUE, this pin is the PWM output"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:166
#, no-wrap
msgid "OUT10"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:167
#, no-wrap
msgid "XOR'd with UP0 or PWM0"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:167
#, no-wrap
msgid "UP1"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:167
#, no-wrap
msgid "PWM1"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:168
#, no-wrap
msgid "When pwm-1-pwmdir is TRUE, this pin is the PWM output"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:168
#, no-wrap
msgid "OUT12"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:169
#, no-wrap
msgid "XOR'd with UP1 or PWM1"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:169
#, no-wrap
msgid "UP2"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:169
#, no-wrap
msgid "PWM2"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:170
#, no-wrap
msgid "When pwm-2-pwmdir is TRUE, this pin is the PWM output"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:170
#, no-wrap
msgid "OUT14"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:171
#, no-wrap
msgid "XOR'd with UP2 or PWM2"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:171
#, no-wrap
msgid "UP3"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:171
#, no-wrap
msgid "PWM3"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:172
#, no-wrap
msgid "When pwm-3-pwmdir is TRUE, this pin is the PWM output"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:172
#, no-wrap
msgid "OUT16"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:173
#, no-wrap
msgid "XOR'd with UP3 or PWM3"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:173
#, no-wrap
msgid "DN0"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:173
#, no-wrap
msgid "DIR0"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:174
#, no-wrap
msgid "When pwm-0-pwmdir is TRUE, this pin is the DIR output"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:174
#, no-wrap
msgid "OUT11"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:175
#, no-wrap
msgid "XOR'd with DN0 or DIR0"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:175
#, no-wrap
msgid "DN1"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:175
#, no-wrap
msgid "DIR1"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:176
#, no-wrap
msgid "When pwm-1-pwmdir is TRUE, this pin is the DIR output"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:176
#, no-wrap
msgid "OUT13"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:177
#, no-wrap
msgid "XOR'd with DN1 or DIR1"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:177
#, no-wrap
msgid "DN2"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:177
#, no-wrap
msgid "DIR2"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:178
#, no-wrap
msgid "When pwm-2-pwmdir is TRUE, this pin is the DIR output"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:178
#, no-wrap
msgid "OUT15"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:179
#, no-wrap
msgid "XOR'd with DN2 or DIR2"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:179
#, no-wrap
msgid "DN3"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:179
#, no-wrap
msgid "DIR3"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:180
#, no-wrap
msgid "When pwm-3-pwmdir is TRUE, this pin is the DIR output"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:180
#, no-wrap
msgid "OUT17"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:181
#, no-wrap
msgid "XOR'd with DN3 or DIR3"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:181
#, no-wrap
msgid "QZ0"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:181
#, no-wrap
msgid "IN8"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:182 src/drivers/pluto-p.adoc:183
#: src/drivers/pluto-p.adoc:184 src/drivers/pluto-p.adoc:185
#: src/drivers/pluto-p.adoc:186 src/drivers/pluto-p.adoc:187
#: src/drivers/pluto-p.adoc:188 src/drivers/pluto-p.adoc:189
#: src/drivers/pluto-p.adoc:190 src/drivers/pluto-p.adoc:191
#: src/drivers/pluto-p.adoc:192 src/drivers/pluto-p.adoc:193
#, no-wrap
msgid "Read same value"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:182
#, no-wrap
msgid "QZ1"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:182
#, no-wrap
msgid "IN9"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:183
#, no-wrap
msgid "QZ2"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:183
#, no-wrap
msgid "IN10"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:184
#, no-wrap
msgid "QZ3"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:184
#, no-wrap
msgid "IN11"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:185
#, no-wrap
msgid "QA0"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:185
#, no-wrap
msgid "IN12"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:186
#, no-wrap
msgid "QA1"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:186
#, no-wrap
msgid "IN13"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:187
#, no-wrap
msgid "QA2"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:187
#, no-wrap
msgid "IN14"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:188
#, no-wrap
msgid "QA3"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:188
#, no-wrap
msgid "IN15"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:189
#, no-wrap
msgid "QB0"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:189
#, no-wrap
msgid "IN16"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:190
#, no-wrap
msgid "QB1"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:190
#, no-wrap
msgid "IN17"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:191
#, no-wrap
msgid "QB2"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:191
#, no-wrap
msgid "IN18"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:192
#, no-wrap
msgid "QB3"
msgstr ""

#. type: Table
#: src/drivers/pluto-p.adoc:192
#, no-wrap
msgid "IN19"
msgstr ""

#. type: Title ===
#: src/drivers/pluto-p.adoc:195 src/drivers/pluto-p.adoc:253
#, no-wrap
msgid "Input latching and output updating"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:198
msgid "PWM duty cycles for each channel are updated at different times."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:201
msgid ""
"Digital outputs OUT0 through OUT9 are all updated at the same time.  Digital "
"outputs OUT10 through OUT17 are updated at the same time as the pwm function "
"they are shared with."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:202
msgid "Digital inputs IN0 through IN19 are all latched at the same time."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:203
msgid "Quadrature positions for each channel are latched at different times."
msgstr ""

#. type: Title ===
#: src/drivers/pluto-p.adoc:204 src/drivers/pluto-p.adoc:273
#, no-wrap
msgid "HAL Functions, Pins and Parameters"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:208
msgid ""
"A list of all 'loadrt' arguments, HAL function names, pin names and "
"parameter names is in the manual page, 'pluto_servo.9'."
msgstr ""

#. type: Title ===
#: src/drivers/pluto-p.adoc:209
#, no-wrap
msgid "Compatible driver hardware"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:219
msgid ""
"A schematic for a 2A, 2-axis PWM servo amplifier board is available from the "
"(http://emergent.unpy.net/projects/01148303608[the software developer]).  "
"The L298 H-Bridge can be used for motors up to 4A (one motor per L298) or up "
"to 2A (two motors per L298) with the supply voltage up to 46V. However, the "
"L298 does not have built-in current limiting, a problem for motors with high "
"stall currents. For higher currents and voltages, some users have reported "
"success with International Rectifier's integrated high-side/low-side drivers."
msgstr ""

#. type: Title ==
#: src/drivers/pluto-p.adoc:221
#, no-wrap
msgid "Pluto Step(((pluto-step)))"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:226
msgid ""
"Pluto-step is suitable for control of a 3- or 4-axis CNC mill with stepper "
"motors. The large number of inputs allows for a full set of limit switches."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:228
msgid "The board features:"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:231
msgid ""
"4 'step+direction' channels with 312.5 kHz maximum step rate, programmable "
"step length, space, and direction change times"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:232
msgid "14 dedicated digital outputs"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:233
msgid "16 dedicated digital inputs"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:234
msgid "EPP communication with the PC"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:238
msgid "'STEPx' - The 'step' (clock) output of stepgen channel 'x'"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:239
msgid "'DIRx' - The 'direction' output of stepgen channel 'x'"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:249
msgid ""
"While the 'extended main connector' has a superset of signals usually found "
"on a Step & Direction DB25 connector--4 step generators, 9 inputs, and 6 "
"general-purpose outputs--the layout on this header is different than the "
"layout of a standard 26-pin ribbon cable to DB25 connector."
msgstr ""

#. type: Block title
#: src/drivers/pluto-p.adoc:250
#, no-wrap
msgid "Pluto-Step Pinout (((pluto-step pinout)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/drivers/pluto-p.adoc:251
#, no-wrap
msgid "Pluto-Step Pinout"
msgstr ""

#. type: Target for macro image
#: src/drivers/pluto-p.adoc:251
#, no-wrap
msgid "images/pluto-step-pinout.png"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:256
msgid "Step frequencies for each channel are updated at different times."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:257
msgid "Digital outputs are all updated at the same time."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:258
msgid "Digital inputs are all latched at the same time."
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:259
msgid "Feedback positions for each channel are latched at different times."
msgstr ""

#. type: Title ===
#: src/drivers/pluto-p.adoc:260
#, no-wrap
msgid "Step Waveform Timings"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:269
msgid ""
"The firmware and driver enforce step length, space, and direction change "
"times. Timings are rounded up to the next multiple of 1.6μs, with a maximum "
"of 49.6μs. The timings are the same as for the software stepgen component, "
"except that 'dirhold' and 'dirsetup' have been merged into a single "
"parameter 'dirtime' which should be the maximum of the two, and that the "
"same step timings are always applied to all channels."
msgstr ""

#. type: Block title
#: src/drivers/pluto-p.adoc:270
#, no-wrap
msgid "Pluto-Step Timings (((pluto-step timings)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/drivers/pluto-p.adoc:271
#, no-wrap
msgid "Pluto-Step Timings"
msgstr ""

#. type: Target for macro image
#: src/drivers/pluto-p.adoc:271
#, no-wrap
msgid "images/pluto_step_waveform.png"
msgstr ""

#. type: Plain text
#: src/drivers/pluto-p.adoc:277
msgid ""
"A list of all 'loadrt' arguments, HAL function names, pin names and "
"parameter names is in the manual page, 'pluto_step.9'."
msgstr ""

#. type: Title =
#: src/drivers/pmx485.adoc:5
#, no-wrap
msgid "Powermax Modbus Driver"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:15
msgid ""
"This is a userspace HAL program, written in python, to control Hypetherm "
"Powermax plasma cutters using the Modbus ASCII protocol over RS485. +"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:20
msgid ""
"Since this is a userspace program it can be affected by computer loading and "
"latency. It is possible to lose communications which will be indicated by a "
"change in the status output. One should always have an Estop circuit that "
"kills the power to the unit in case of emergency."
msgstr ""

#. type: delimited block -
#: src/drivers/pmx485.adoc:26
#, no-wrap
msgid "loadusr -Wn pmx485 pmx485 /dev/ttyUSB0\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:30
msgid ""
"This will load the pmx485 component using the /dev/ttyUSB0 port and wait for "
"it to become ready."
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:32
msgid "It is necessary to name the port to use for communications."
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:36
#, no-wrap
msgid "*pmx485.mode-set* (bit, in) # set cutting mode\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:37
#, no-wrap
msgid "*pmx485.current-set* (bit, in) # set cutting current\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:38
#, no-wrap
msgid "*pmx485.pressure-set* (bit, in) # set gas pressure\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:39
#, no-wrap
msgid "*pmx485.enable* (bit, in) # enable the component\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:40
#, no-wrap
msgid "*pmx485.mode* (bit, out) # cut mode feedback\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:41
#, no-wrap
msgid "*pmx485.current* (bit, out) # cutting current feedback\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:42
#, no-wrap
msgid "*pmx485.pressure* (bit, out) # gas pressure feedback\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:43
#, no-wrap
msgid "*pmx485.fault* (bit, out) # powermax fault code\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:44
#, no-wrap
msgid "*pmx485.status* (bit, out) # connection status\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:45
#, no-wrap
msgid "*pmx485.current-min* (bit, out) # minimum allowed current\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:46
#, no-wrap
msgid "*pmx485.current-max* (bit, out) # maximum allowed current\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:47
#, no-wrap
msgid "*pmx485.pressure-min* (bit, out) # minimum allowed gas pressure\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:48
#, no-wrap
msgid "*pmx485.pressure-max* (bit, out) # maximum allowed gas pressure\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:54
msgid ""
"To communicate with a Powermax, the component must first be enabled via the "
"*enable* pin and it may then initiate a request to the Powermax by writing a "
"valid string to the following pins:"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:56
#, no-wrap
msgid "*mode-set*\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:57
#, no-wrap
msgid "*current-set*\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:58
#, no-wrap
msgid "*pressure-set*\n"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:61
msgid ""
"A *pressure-set* value of zero is valid, the Powermax will then calculate "
"the required pressure internally."
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:65
msgid ""
"Communications may be validated from the Powermax display or the *status* "
"pin. While in remote mode, the mode, current and pressure may be changed as "
"needed."
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:67
msgid "To terminate the communications, do one of the following:"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:70
msgid ""
"Set all set pins to zero: *mode-set*, *current-set*, and *pressure-set*."
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:73
msgid ""
"Disconnect the Powermax power supply from its power source for approximately "
"30 seconds. When you power the system back ON, it will no longer be in "
"remote mode."
msgstr ""

#. type: Title ==
#: src/drivers/pmx485.adoc:74
#, no-wrap
msgid "Reference:"
msgstr ""

#. type: Plain text
#: src/drivers/pmx485.adoc:78
#, no-wrap
msgid ""
"Hypertherm Application Note #807220\n"
"\"Powermax45 XP/65/85/105/125® Serial Communication Protocol\""
msgstr ""

#. type: Title =
#: src/drivers/servo-to-go.adoc:5
#, no-wrap
msgid "Servo To Go Driver"
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:19
msgid ""
"The Servo-To-Go (STG) is one of the first PC motion control cards supported "
"by LinuxCNC. It is an ISA card and it exists in different flavors (all "
"supported by this driver). The board includes up to 8 channels of quadrature "
"encoder input, 8 channels of analog input and output, 32 bits digital I/O, "
"an interval timer with interrupt and a watchdog. For more information see "
"the http://www.servotogo.com/[Servo To Go] web page."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:26
msgid ""
"We have had reports that the opamps on the Servo To Go card do not work with "
"newer ATX power supplies that use modern switch mode DC-DC converters.  The "
"failure mode is that STG card outputs a constant voltage regardless of what "
"the driver is commanding it to do.  Older ATX power supplies with linear "
"voltage regulators do not have this problem, and work fine with the STG "
"cards."
msgstr ""

#. type: delimited block -
#: src/drivers/servo-to-go.adoc:33
#, no-wrap
msgid ""
"loadrt hal_stg [base=<address>] [num_chan=<nr>] [dio=\"<dio-string>\"] \\\n"
"                 [model=<model>]\n"
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:47
msgid ""
"The base address field is optional; if it's not provided the driver attempts "
"to autodetect the board. The num_chan field is used to specify the number of "
"channels available on the card, if not used the 8 axis version is assumed. "
"The digital inputs/outputs configuration is determined by a config string "
"passed to insmod when loading the module.  The format consists of a four "
"character string that sets the direction of each group of pins. Each "
"character of the direction string is either \"I\" or \"O\". The first "
"character sets the direction of port A (Port A - DIO.0-7), the next sets "
"port B (Port B - DIO.8-15), the next sets port C (Port C - DIO.16-23), and "
"the fourth sets port D (Port D - DIO.24-31). The model field can be used in "
"case the driver doesn't autodetect the right card version."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:51
msgid ""
"HINT: after starting up the driver, 'dmesg' can be consulted for messages "
"relevant to the driver (e.g. autodetected version number and base address). "
"For example:"
msgstr ""

#. type: delimited block -
#: src/drivers/servo-to-go.adoc:55
#, no-wrap
msgid "loadrt hal_stg base=0x300 num_chan=4 dio=\"IOIO\"\n"
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:63
msgid ""
"This example installs the STG driver for a card found at the base address of "
"0x300, 4 channels of encoder feedback, DACs and ADCs, along with 32 bits of "
"I/O configured like this: the first 8 (Port A)  configured as Input, the "
"next 8 (Port B) configured as Output, the next 8 (Port C) configured as "
"Input, and the last 8 (Port D) configured as Output"
msgstr ""

#. type: delimited block -
#: src/drivers/servo-to-go.adoc:67
#, no-wrap
msgid "loadrt hal_stg\n"
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:73
msgid ""
"This example installs the driver and attempts to autodetect the board "
"address and board model, it installs 8 axes by default along with a standard "
"I/O setup: Port A & B configured as Input, Port C & D configured as Output."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:77
msgid "'stg.<channel>.counts' - (s32) Tracks the counted encoder ticks."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:78
msgid "'stg.<channel>.position' - (float) Outputs a converted position."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:80
msgid ""
"'stg.<channel>.dac-value' - (float) Drives the voltage for the corresponding "
"DAC."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:82
msgid ""
"'stg.<channel>.adc-value' - (float) Tracks the measured voltage from the "
"corresponding ADC."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:83
msgid "'stg.in-<pinnum>' - (bit) Tracks a physical input pin."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:85
msgid ""
"'stg.in-<pinnum>-not' - (bit) Tracks a physical input pin, but inverted."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:86
msgid "'stg.out-<pinnum>' - (bit) Drives a physical output pin"
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:91
msgid ""
"For each pin, <channel> is the axis number, and <pinnum> is the logic pin "
"number of the STG if `IIOO` is defined, there are 16 input pins (in-00 .. "
"in-15) and 16 output pins (out-00 .. out-15), and they correspond to PORTs "
"ABCD (in-00 is PORTA.0, out-15 is PORTD.7)."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:96
msgid ""
"The in-<pinnum> HAL pin is TRUE if the physical pin is high, and FALSE if "
"the physical pin is low. The in-<pinnum>-not HAL pin is inverted -- it is "
"FALSE if the physical pin is high. By connecting a signal to one or the "
"other, the user can determine the state of the input."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:101
msgid ""
"'stg.<channel>.position-scale' - (float) The number of counts / user unit "
"(to convert from counts to units)."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:103
msgid ""
"'stg.<channel>.dac-offset' - (float) Sets the offset for the corresponding "
"DAC."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:105
msgid ""
"'stg.<channel>.dac-gain' - (float) Sets the gain of the corresponding DAC."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:107
msgid ""
"'stg.<channel>.adc-offset' - (float) Sets the offset of the corresponding "
"ADC."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:109
msgid ""
"'stg.<channel>.adc-gain' - (float) Sets the gain of the corresponding ADC."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:110
msgid "'stg.out-<pinnum>-invert' - (bit) Inverts an output pin."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:116
msgid ""
"The -invert parameter determines whether an output pin is active high or "
"active low. If -invert is FALSE, setting the HAL out- pin TRUE drives the "
"physical pin high, and FALSE drives it low. If -invert is TRUE, then setting "
"the HAL out- pin TRUE will drive the physical pin low."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:121
msgid ""
"'stg.capture-position' - Reads the encoder counters from the axis <channel>."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:122
msgid "'stg.write-dacs' - Writes the voltages to the DACs."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:123
msgid "'stg.read-adcs' - Reads the voltages from the ADCs."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:125
msgid ""
"'stg.di-read' - Reads physical in- pins of all ports and updates all HAL in-"
"<pinnum> and in-<pinnum>-not pins."
msgstr ""

#. type: Plain text
#: src/drivers/servo-to-go.adoc:127
msgid ""
"'stg.do-write' - Reads all HAL out-<pinnum> pins and updates all physical "
"output pins."
msgstr ""

#. type: Title =
#: src/drivers/shuttle.adoc:5
#, no-wrap
msgid "Shuttle"
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:11
msgid ""
"Shuttle is a non-realtime HAL component that interfaces Contour Design's "
"ShuttleXpress, ShuttlePRO, and ShuttlePRO2 devices with LinuxCNC's HAL."
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:16
msgid ""
"If the driver is started without command-line arguments, it will probe all /"
"dev/hidraw* device files for Shuttle devices, and use all devices found. If "
"it is started with command-line arguments, it will only probe the devices "
"specified."
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:20 man/man1/shuttle.1:20
msgid ""
"The ShuttleXpress has five momentary buttons, a 10 counts/revolution jog "
"wheel with detents, and a 15-position spring-loaded outer wheel that returns "
"to center when released."
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:24 man/man1/shuttle.1:25
msgid ""
"The ShuttlePRO has 13 momentary buttons, a 10 counts/revolution jog wheel "
"with detents, and a 15-position spring-loaded outer wheel that returns to "
"center when released."
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:28 man/man1/shuttle.1:30
msgid ""
"The ShuttlePRO2 has 15 momentary buttons, a 10 counts/revolution jog wheel "
"with detents, and a 15-position spring-loaded outer wheel that returns to "
"center when released."
msgstr ""

#. type: delimited block =
#: src/drivers/shuttle.adoc:36
msgid ""
"The Shuttle devices have an internal 8-bit counter for the current jog-wheel "
"position. The shuttle driver can not know this value until the Shuttles "
"device sends its first event. When the first event comes into the driver, "
"the driver uses the device's reported jog-wheel position to initialize "
"counts to 0."
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:39 man/man1/shuttle.1:57
msgid ""
"This means that if the first event is generated by a jog-wheel move, that "
"first move will be lost."
msgstr ""

#. type: delimited block =
#: src/drivers/shuttle.adoc:44
msgid ""
"Any user interaction with the Shuttle device will generate an event, "
"informing the driver of the jog-wheel position. So if you (for example)  "
"push one of the buttons at startup, the jog-wheel will work fine and notice "
"the first click."
msgstr ""

#. type: Title ==
#: src/drivers/shuttle.adoc:47 src/gui/touchy.adoc:82
#, no-wrap
msgid "Setup"
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:52
msgid ""
"The shuttle driver needs read permission to the /dev/hidraw* device files. "
"This can be accomplished by adding a file /etc/udev/rules.d/99-shuttle."
"rules, with the following contents:"
msgstr ""

#. type: delimited block -
#: src/drivers/shuttle.adoc:57
#, no-wrap
msgid ""
"SUBSYSTEM==\"hidraw\", ATTRS{idVendor}==\"0b33\", ATTRS{idProduct}==\"0020\", MODE=\"0444\"\n"
"SUBSYSTEM==\"hidraw\", ATTRS{idVendor}==\"05f3\", ATTRS{idProduct}==\"0240\", MODE=\"0444\"\n"
"SUBSYSTEM==\"hidraw\", ATTRS{idVendor}==\"0b33\", ATTRS{idProduct}==\"0030\", MODE=\"0444\"\n"
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:64
msgid ""
"The LinuxCNC Debian package installs an appropriate udev file automatically, "
"but if you are building LinuxCNC from source and are not using the Debian "
"packaging you'll need to install this file by hand.  If you install the file "
"by hand you'll need to tell udev to reload its rules files by running "
"`udevadm control --reload-rules`."
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:70 man/man1/shuttle.1:68
msgid ""
"All HAL pin names are prefixed with `shuttle` followed by the index of the "
"device (the order in which the driver found them), for example \"shuttle.0\" "
"or \"shuttle.2\"."
msgstr ""

#. type: Labeled list
#: src/drivers/shuttle.adoc:71
#, no-wrap
msgid "'<Prefix>.button-<ButtonNumber>' (bit out)"
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:73
msgid "These pins are True (1) when the button is pressed."
msgstr ""

#. type: Labeled list
#: src/drivers/shuttle.adoc:73
#, no-wrap
msgid "'<Prefix>.button-<ButtonNumber>-not' (bit out)"
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:75
msgid ""
"These pins have the inverse of the button state, so they're True (1) when "
"the button is not pressed."
msgstr ""

#. type: Labeled list
#: src/drivers/shuttle.adoc:75
#, no-wrap
msgid "'<Prefix>.counts' (s32 out)"
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:77
msgid "Accumulated counts from the jog wheel (the inner wheel)."
msgstr ""

#. type: Labeled list
#: src/drivers/shuttle.adoc:77
#, no-wrap
msgid "'<Prefix>.spring-wheel-s32' (s32 out)"
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:81
msgid ""
"The current deflection of the spring-wheel (the outer wheel).  It's 0 at "
"rest, and ranges from -7 at the counter-clockwise extreme to +7 at the "
"clockwise extreme."
msgstr ""

#. type: Labeled list
#: src/drivers/shuttle.adoc:81
#, no-wrap
msgid "'<Prefix>.spring-wheel-f' (float out)"
msgstr ""

#. type: Plain text
#: src/drivers/shuttle.adoc:87
msgid ""
"The current deflection of the spring-wheel (the outer wheel).  It's 0.0 at "
"rest, -1.0 at the counter-clockwise extreme, and +1.0 at the clockwise "
"extreme. (The Shuttle devices report the spring-wheel position as an integer "
"from -7 to +7, so this pin reports only 15 discrete values in it's range.)"
msgstr ""

#. type: Title =
#: src/drivers/vfs11.adoc:5
#, no-wrap
msgid "VFS11 VFD Driver"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:13
msgid ""
"This is a userspace HAL program to control the S11 series of VFD's from "
"Toshiba."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:19
msgid ""
"vfs11_vfd supports serial and TCP connections. Serial connections may be "
"RS232 or RS485. RS485 is supported in full- and half-duplex mode. TCP "
"connections may be passive (wait for incoming connection), or active "
"outgoing connections, which may be useful to connect to TCP-based devices or "
"through a terminal server."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:21
msgid ""
"Regardless of the connection type, vfs11_vfd operates as a Modbus master."
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:27
#, no-wrap
msgid "loadusr -Wn spindle-vfd vfs11_vfd -n spindle-vfd\n"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:31
msgid ""
"The above command says: loadusr, wait for named to load, component "
"vfs11_vfd, named spindle-vfd"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:36
msgid ""
"'vfs11_vfd' is mostly configured through INI file options. The command line "
"options are:"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:38
msgid "'-n or --name <halname>' : set the HAL component name"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:40
msgid ""
"'-I or --ini <inifilename>' : take configuration from this INI file.  "
"Defaults to environment variable INI_FILE_NAME."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:42
msgid ""
"'-S or --section <section name>' : take configuration from this section in "
"the INI file. Defaults to 'VFS11'."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:43
msgid "'-d or --debug' enable debug messages on console output."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:44
msgid "'-m or --modbus-debug' enable modbus messages on console output"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:45
msgid "'-r or --report-device' report device properties on console at startup"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:49
msgid ""
"Debugging can be toggled by sending a USR1 signal to the vfs11_vfd process. "
"Modbus debugging can be toggled by sending a USR2 signal to vfs11_vfd "
"process (example: +kill -USR1 \\`pidof vfs11_vfd`+)."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:58 src/drivers/vfs11.adoc:144
msgid ""
"Where <n> is +vfs11_vfd+ or the name given during loading with the -n option."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:63
msgid ""
"'<n>.acceleration-pattern' (bit, in) when true, set acceleration and "
"deceleration times as defined in registers F500 and F501 respectively.  Used "
"in PID loops to choose shorter ramp times to avoid oscillation."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:67
msgid ""
"'<n>.alarm-code' (s32, out) non-zero if drive is in alarmed state. Bitmap "
"describing alarm information (see register FC91 description).  Use err-reset "
"(see below) to clear the alarm."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:69
msgid ""
"'<n>.at-speed' (bit, out)  when drive is at commanded speed (see speed-"
"tolerance below)"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:71
msgid "'<n>.current-load-percentage' (float, out)  reported from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:73
msgid ""
"'<n>.dc-brake' (bit, in)  engage the DC brake. Also turns off spindle-on."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:77
msgid ""
"'<n>.enable' (bit, in)  enable the VFD. If false, all operating parameters "
"are still read but control is released and panel control is enabled (subject "
"to VFD setup)."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:80
msgid ""
"'<n>.err-reset' (bit, in)  reset errors (alarms a.k.a Trip and e-stop "
"status). Resetting the VFD may cause a 2-second delay until it's rebooted "
"and Modbus is up again."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:83
msgid ""
"'<n>.estop' (bit, in)  put the VFD into emergency-stopped status. No "
"operation possible until cleared with err-reset or powercycling."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:86
msgid ""
"'<n>.frequency-command' (float, out)  current target frequency in Hz as set "
"through speed-command (which is in RPM), from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:88
msgid "'<n>.frequency-out' (float, out)  current output frequency of the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:90
msgid ""
"'<n>.inverter-load-percentage' (float, out)  current load report from VFD"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:93
msgid ""
"'<n>.is-e-stopped' (bit, out)  the VFD is in emergency stop status (blinking "
"\"E\" on panel). Use err-reset to reboot the VFD and clear the e- stop "
"status."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:95
msgid "'<n>.is-stopped' (bit, out)  true when the VFD reports 0 Hz output"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:103
msgid ""
"'<n>.max-rpm' (float, R)  actual RPM limit based on maximum frequency the "
"VFD may generate, and the motors nameplate values. For instance, if "
"nameplate-HZ is 50, and nameplate-RPM_ is 1410, but the VFD may generate up "
"to 80 Hz, then max- rpm would read as 2256 (80*1410/50). The frequency limit "
"is read from the VFD at startup. To increase the upper frequency limit, the "
"UL and FH parameters must be changed on the panel.  See the VF-S11 manual "
"for instructions how to set the maximum frequency."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:106
msgid ""
"'<n>.modbus-ok' (bit, out)  true when the Modbus session is successfully "
"established and the last 10 transactions returned without error."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:108
msgid "'<n>.motor-RPM' (float, out)  estimated current RPM value, from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:110
msgid "'<n>.output-current-percentage' (float, out)  from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:112
msgid "'<n>.output-voltage-percentage' (float, out)  from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:114
msgid "'<n>.output-voltage' (float, out)  from the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:117
msgid ""
"'<n>.speed-command' (float, in)  speed sent to VFD in RPM. It is an error to "
"send a speed faster than the Motor Max RPM as set in the VFD"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:119
msgid "'<n>.spindle-fwd' (bit, in)  1 for FWD and 0 for REV, sent to VFD"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:121
msgid ""
"'<n>.spindle-on' (bit, in)  1 for ON and 0 for OFF sent to VFD, only on when "
"running"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:123
msgid ""
"'<n>.spindle-rev' (bit, in)  1 for ON and 0 for OFF, only on when running"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:128
msgid ""
"'<n>.jog-mode' (bit, in)  1 for ON and 0 for OFF, enables the VF-S11 'jog "
"mode'. Speed control is disabled, and the output frequency is determined by "
"register F262 (preset to 5 Hz). This might be useful for spindle "
"orientation. In normal mode, the VFD shuts off if the frequency drops below "
"12 Hz."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:131
msgid ""
"'<n>.status' (s32, out)  Drive Status of the VFD (see the TOSVERT VF-S11 "
"Communications Function Instruction Manual, register FD01). A bitmap."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:133
msgid "'<n>.trip-code' (s32, out)  trip code if VF-S11 is in tripped state."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:135
msgid ""
"'<n>.error-count' (s32, out)  number of Modbus transactions which returned "
"an error"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:139
msgid ""
"'<n>.max-speed' (bit, in)  ignore the loop-time parameter and run Modbus at "
"maximum speed, at the expense of higher CPU usage. Suggested use during "
"spindle positioning."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:147
msgid "'<n>.frequency-limit' (float, RO)  upper limit read from VFD setup."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:149
msgid ""
"'<n>.loop-time' (float, RW)  how often the Modbus is polled (default "
"interval 0.1 seconds)"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:153
msgid ""
"'<n>.nameplate-HZ' (float, RW)  Nameplate Hz of motor (default 50). Used to "
"calculate target frequency (together with nameplate-RPM ) for a target RPM "
"value as given by speed-command."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:155
msgid "'<n>.nameplate-RPM' (float, RW)  Nameplate RPM of motor (default 1410)"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:157
msgid ""
"'<n>.rpm-limit' (float, RW)  do-not-exceed soft limit for motor RPM "
"(defaults to nameplate-RPM )."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:160
msgid ""
"'<n>.tolerance' (float, RW)  speed tolerance (default 0.01) for determining "
"whether spindle is at speed (0.01 meaning: output frequency is within 1% of "
"target frequency)"
msgstr ""

#. type: Title ==
#: src/drivers/vfs11.adoc:161
#, no-wrap
msgid "INI file configuration"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:166
msgid ""
"This lists all options understood by vfs11_vfd. Typical setups for RS-232, "
"RS-485 and TCP can be found in 'src/hal/user_comps/vfs11_vfd/*.ini'."
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:172
#, no-wrap
msgid ""
"[VFS11]\n"
"# serial connection\n"
"TYPE=rtu\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:175
#, no-wrap
msgid ""
"# serial port\n"
"DEVICE=/dev/ttyS0\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:178
#, no-wrap
msgid ""
"# TCP server - wait for incoming connection\n"
"TYPE=tcpserver\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:181
#, no-wrap
msgid ""
"# tcp portnumber for TYPE=tcpserver or tcpclient\n"
"PORT=1502\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:184
#, no-wrap
msgid ""
"# TCP client - active outgoing connection\n"
"TYPE=tcpclient\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:187
#, no-wrap
msgid ""
"# destination to connect to if TYPE=tcpclient\n"
"TCPDEST=192.168.1.1\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:192
#, no-wrap
msgid ""
"#---------- meaningful only if TYPE=rtu -------\n"
"# serial device detail\n"
"# 5 6 7 8\n"
"BITS= 5\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:195
#, no-wrap
msgid ""
"# even odd none\n"
"PARITY=none\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:198
#, no-wrap
msgid ""
"# 110, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200\n"
"BAUD=19200\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:201
#, no-wrap
msgid ""
"# 1 2\n"
"STOPBITS=1\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:204
#, no-wrap
msgid ""
"#rs232 rs485\n"
"SERIAL_MODE=rs485\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:211
#, no-wrap
msgid ""
"# up down none\n"
"# this feature might not work with a stock Ubuntu\n"
"# libmodbus5/libmodbus-dev package, and generate a warning\n"
"# execution will continue as if RTS_MODE=up were given.\n"
"RTS_MODE=up\n"
"#---------------------\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:217
#, no-wrap
msgid ""
"# modbus timers in seconds\n"
"# inter-character timer\n"
"BYTE_TIMEOUT=0.5\n"
"# packet timer\n"
"RESPONSE_TIMEOUT=0.5\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:220
#, no-wrap
msgid ""
"# target modbus ID\n"
"TARGET=1\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:224
#, no-wrap
msgid ""
"# on I/O failure, try to reconnect after sleeping\n"
"# for RECONNECT_DELAY seconds\n"
"RECONNECT_DELAY=1\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:229
#, no-wrap
msgid ""
"# misc. parameters\n"
"DEBUG=10\n"
"MODBUS_DEBUG=0\n"
"POLLCYCLES=10\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:240
#, no-wrap
msgid ""
"#\n"
"# example usage of the VF-S11 VFD driver\n"
"#\n"
"#\n"
"loadusr -Wn spindle-vfd vfs11_vfd -n spindle-vfd\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:244
#, no-wrap
msgid ""
"# connect the spindle direction pins to the VFD\n"
"net vfs11-fwd spindle-vfd.spindle-fwd <= spindle.0.forward\n"
"net vfs11-rev spindle-vfd.spindle-rev <= spindle.0.reverse\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:247
#, no-wrap
msgid ""
"# connect the spindle on pin to the VF-S11\n"
"net vfs11-run spindle-vfd.spindle-on <= spindle.0.on\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:250
#, no-wrap
msgid ""
"# connect the VF-S11 at speed to the motion at speed\n"
"net vfs11-at-speed spindle.0.at-speed <= spindle-vfd.at-speed\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:253
#, no-wrap
msgid ""
"# connect the spindle RPM to the VF-S11\n"
"net vfs11-RPM spindle-vfd.speed-command <= spindle.0.speed-out\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:258
#, no-wrap
msgid ""
"# connect the VF-S11 DC brake\n"
"# since this draws power during spindle off, the dc-brake pin would\n"
"# better be driven by a monoflop which triggers on spindle-on falling edge\n"
"#net vfs11-spindle-brake spindle.N.brake => spindle-vfd.dc-brake\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:262
#, no-wrap
msgid ""
"# to use the VFS11 jog mode for spindle orient\n"
"# see orient.9 and motion.9\n"
"net spindle-orient spindle.0.orient spindle-vfd.max-speed spindle-vfd.jog-mode\n"
msgstr ""

#. type: delimited block -
#: src/drivers/vfs11.adoc:265
#, no-wrap
msgid ""
"# take precedence over control panel\n"
"setp spindle-vfd.enable 1\n"
msgstr ""

#. type: Title ==
#: src/drivers/vfs11.adoc:267
#, no-wrap
msgid "Panel operation"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:276
msgid ""
"The vfs11_vfd driver takes precedence over panel control while it is enabled "
"(see 'enable' pin), effectively disabling the panel. Clearing the 'enable' "
"pin re-enables the panel. Pins and parameters can still be set, but will not "
"be written to the VFD untile the 'enable' pin is set. Operating parameters "
"are still read while bus control is disabled. Exiting the vfs11_vfd driver "
"in a controlled way will release the VFD from the bus and restore panel "
"control."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:282
msgid ""
"See the LinuxCNC Integrators Manual for more information. For a detailed "
"register description of the Toshiba VFD's, see the \"TOSVERT VF-S11 "
"Communications Function Instruction Manual\" (Toshiba document number "
"E6581222) and the \"TOSVERT VF-S11 Instruction manual\" (Toshiba document "
"number E6581158)."
msgstr ""

#. type: Title ==
#: src/drivers/vfs11.adoc:283
#, no-wrap
msgid "Error Recovery"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:288
msgid ""
"+vfs11_vfd+ recovers from I/O errors as follows: First, all HAL pins are set "
"to default values, and the driver will sleep for +RECONNECT_DELAY+ seconds "
"(default 1 second)."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:290
msgid "Serial (+TYPE=rtu+) mode: on error, close and reopen the serial port."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:292
msgid ""
"TCP server (+TYPE=tcpserver+) mode: on losing the TCP connection, the driver "
"will go back to listen for incoming connections."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:294
msgid ""
"TCP client (+TYPE=tcpclient+) mode: on losing the TCP connection, the driver "
"will reconnect to 'TCPDEST:PORTNO'."
msgstr ""

#. type: Title ==
#: src/drivers/vfs11.adoc:295
#, no-wrap
msgid "Configuring the VFS11 VFD for Modbus usage"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:307
msgid ""
"The VF-S11 has an RJ-45 jack for serial communication. Unfortunately, it "
"does not have a standard RS-232 plug and logic levels.  The Toshiba-"
"recommended way is: connect the USB001Z USB-to-serial conversion unit to the "
"drive, and plug the USB port into the PC. A cheaper alternative is a "
"homebrew interface ( http://git.mah.priv.at/gitweb/vfs11-vfd.git/blob_plain/"
"refs/heads/f12-prod:/VFS11-RJ45_e.pdf[hints from Toshiba support], http://"
"git.mah.priv.at/gitweb/vfs11-vfd.git/blob_plain/refs/heads/f12-prod:/vfs11-"
"rs232.pdf[circuit diagram])."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:309
msgid "Note: the 24V output from the VFD has no short-circuit protection."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:312
msgid ""
"Serial port factory defaults are 9600/8/1/even, the protocol defaults to the "
"proprietary \"Toshiba Inverter Protocol\"."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:323
msgid ""
"Several parameters need setting before the VF-S11 will talk to this module. "
"This can either be done manually with the control panel, or over the serial "
"link - Toshiba supplies a Windows application called 'PCM001Z' which can "
"read/set parameters in the VFD.  Note - PCM001Z only talks the Toshiba "
"inverter protocol. So the last parameter which you'd want to change is the "
"protocol - set from Toshiba Inverter Protocol to Modbus; thereafter, the "
"Windows app is useless."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:326
msgid ""
"To increase the upper frequency limit, the UL and FH parameters must be "
"changed on the panel. I increased them from 50 to 80."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:330
msgid ""
"See dump-params.mio for a description of non-standard VF-S11 parameters of "
"my setup. This file is for the http://git.mah.priv.at/gitweb/modio.git[modio "
"Modbus interactive utility]."
msgstr ""

#. type: Title ==
#: src/drivers/vfs11.adoc:331
#, no-wrap
msgid "Programming Note"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:336
msgid ""
"The vfs11_vfd driver uses the http://www.libmodbus.org[libmodbus version 3] "
"library which is more recent than the version 2 code used in +gs2_vfd+."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:342
msgid ""
"The Ubuntu +libmodbus5+ and +libmodbus-dev+ packages are only available "
"starting from Ubuntu 12 ('Precise Pengolin'). Moreover, these packages lack "
"support for the MODBUS_RTS_MODE_* flags. Therefore, building vfs11_vfd using "
"this library might generate a warning if RTS_MODE= is specified in the INI "
"file."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:344
msgid "To use the full functionality on lucid and precise:"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:347
msgid ""
"remove the libmodbus packages: `sudo apt-get remove libmodbus5 libmodbus-dev`"
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:349
msgid ""
"build and install libmodbus version 3 from source as outlined https://github."
"com/stephane/libmodbus/blob/master/README.rst[here]."
msgstr ""

#. type: Plain text
#: src/drivers/vfs11.adoc:352
msgid ""
"Libmodbus does not build on Ubuntu Hardy, hence vfs11_vfd is not available "
"on Hardy."
msgstr ""

#. type: Title =
#: src/examples/gcode.adoc:5
#, no-wrap
msgid "G-Code Examples"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:10
msgid ""
"After you install LinuxCNC several sample files are placed in the /nc_files "
"folder. Make sure the sample file is appropriate for your machine before "
"running."
msgstr ""

#. type: Title ==
#: src/examples/gcode.adoc:11
#, no-wrap
msgid "Mill Examples"
msgstr ""

#. type: Title ===
#: src/examples/gcode.adoc:13
#, no-wrap
msgid "Helical Hole Milling"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:16 src/examples/gcode.adoc:21
msgid "File Name: useful-subroutines.ngc"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:17
msgid "Description: Subroutine for milling a hole using parameters."
msgstr ""

#. type: Title ===
#: src/examples/gcode.adoc:18
#, no-wrap
msgid "Slotting"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:22
msgid "Description: Subroutine for milling a slot using parameters."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/examples/gcode.adoc:23
#, no-wrap
msgid "Useful subroutines"
msgstr ""

#. type: Target for macro image
#: src/examples/gcode.adoc:23
#, no-wrap
msgid "images/useful-subroutines-ngc.png"
msgstr ""

#. type: Title ===
#: src/examples/gcode.adoc:25
#, no-wrap
msgid "Grid Probe"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:28
msgid "File Name: gridprobe.ngc"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:29 src/examples/gcode.adoc:40
msgid "Description: Rectangular Probing"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:33
msgid ""
"This program repeatedly probes in a regular XY grid and writes the probed "
"location to the file 'probe-results.txt' in the same directory as the .ini "
"file."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/examples/gcode.adoc:34
#, no-wrap
msgid "Grill probe"
msgstr ""

#. type: Target for macro image
#: src/examples/gcode.adoc:34
#, no-wrap
msgid "images/gridprobe-ngc.png"
msgstr ""

#. type: Title ===
#: src/examples/gcode.adoc:36
#, no-wrap
msgid "Smart Probe"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:39
msgid "File Name: smartprobe.ngc"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:44
msgid ""
"This program repeatedly probes in a regular XY grid and writes the probed "
"location to the file 'probe-results.txt' in the same directory as the .ini "
"file. This is improved from the grid probe file."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/examples/gcode.adoc:45
#, no-wrap
msgid "The finer probing grid"
msgstr ""

#. type: Target for macro image
#: src/examples/gcode.adoc:45
#, no-wrap
msgid "images/smartprobe-ngc.png"
msgstr ""

#. type: Title ===
#: src/examples/gcode.adoc:47
#, no-wrap
msgid "Tool Length Probe"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:50
msgid "File Name: tool-length-probe.ngc"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:51
msgid "Description: Tool Length Probing"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:56
msgid ""
"This program shows an example of how to measure tool lengths automatically "
"using a switch hooked to the probe input. This is useful for machines "
"without tool holders, where the length of a tool is different every time it "
"is inserted."
msgstr ""

#. type: Title ===
#: src/examples/gcode.adoc:57
#, no-wrap
msgid "Hole Probe"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:60
msgid "File Name: probe-hole.ngc"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:61
msgid "Description: Finding the Center and Diameter of a hole."
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:64
msgid ""
"The program demonstrates how to find the center of a hole, measure the hole "
"diameter and record the results."
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/examples/gcode.adoc:65 src/gcode/g-code.adoc:85
#: src/plasma/qtplasmac.adoc:1886 html/gcode.html:116
#, no-wrap
msgid "Cutter Compensation"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:68
msgid "File Name: comp-g1.ngc"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:69
msgid "Description: Entry and exit movements with compensation of tool radius."
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:73
msgid ""
"This program demonstrates the peculiarity of the toolpath without and with "
"tool radius compensation. The tool radius is taken from the tool table."
msgstr ""

#. type: Title ==
#: src/examples/gcode.adoc:74
#, no-wrap
msgid "Lathe Examples"
msgstr ""

#. type: Block title
#: src/examples/gcode.adoc:76 src/lathe/lathe-user.adoc:192
#, no-wrap
msgid "Threading"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:79
msgid "File Name lathe-g76.ngc"
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:80
msgid "Description: Facing, threading and parting off."
msgstr ""

#. type: Plain text
#: src/examples/gcode.adoc:82
msgid "This file shows an example of threading on a lathe using parameters."
msgstr ""

#. type: Title =
#: src/examples/gs2-example.adoc:5
#, no-wrap
msgid "GS2 Spindle"
msgstr ""

#. type: Plain text
#: src/examples/gs2-example.adoc:18
msgid ""
"This example shows the connections needed to use an Automation Direct GS2 "
"VFD to drive a spindle.  The spindle speed and direction is controlled by "
"LinuxCNC."
msgstr ""

#. type: Plain text
#: src/examples/gs2-example.adoc:23
msgid ""
"Using the GS2 component involves very little to set up. We start with a "
"StepConf Wizard generated config. Make sure the pins with \"Spindle CW\" and "
"\"Spindle PWM\" are set to unused in the parallel port setup screen."
msgstr ""

#. type: Plain text
#: src/examples/gs2-example.adoc:26
msgid ""
"In the custom.hal file we place the following to connect LinuxCNC to the GS2 "
"and have LinuxCNC control the drive."
msgstr ""

#. type: Block title
#: src/examples/gs2-example.adoc:27
#, no-wrap
msgid "GS2 Example"
msgstr ""

#. type: delimited block -
#: src/examples/gs2-example.adoc:32
#, no-wrap
msgid ""
"# load the user space component for the Automation Direct GS2 VFD's \n"
"loadusr -Wn spindle-vfd gs2_vfd -r 9600 -p none -s 2 -n spindle-vfd\n"
msgstr ""

#. type: delimited block -
#: src/examples/gs2-example.adoc:35
#, no-wrap
msgid ""
"# connect the spindle direction pin to the GS2 \n"
"net gs2-fwd spindle-vfd.spindle-fwd <= spindle.N.forward\n"
msgstr ""

#. type: delimited block -
#: src/examples/gs2-example.adoc:38
#, no-wrap
msgid ""
"# connect the spindle on pin to the GS2 \n"
"net gs2-run spindle-vfd.spindle-on <= spindle.N.on\n"
msgstr ""

#. type: delimited block -
#: src/examples/gs2-example.adoc:41
#, no-wrap
msgid ""
"# connect the GS2 at speed to the motion at speed \n"
"net gs2-at-speed spindle.N.at-speed <= spindle-vfd.at-speed\n"
msgstr ""

#. type: delimited block -
#: src/examples/gs2-example.adoc:44
#, no-wrap
msgid ""
"# connect the spindle RPM to the GS2 \n"
"net gs2-RPM spindle-vfd.speed-command <= spindle.N.speed-out\n"
msgstr ""

#. type: Plain text
#: src/examples/gs2-example.adoc:51
msgid ""
"The transmission speed might be able to be faster depending on the exact "
"environment. Both the drive and the command line options must match. To "
"check for transmission errors add the '-v' command line option and run from "
"a terminal."
msgstr ""

#. type: Plain text
#: src/examples/gs2-example.adoc:57
msgid ""
"On the GS2 drive itself you need to set a couple of things before the modbus "
"communications will work. Other parameters might need to be set based on "
"your physical requirements but these are beyond the scope of this manual. "
"Refer to the GS2 manual that came with the drive for more information on the "
"drive parameters."
msgstr ""

#. type: Plain text
#: src/examples/gs2-example.adoc:59
msgid "The communications switches must be set to RS-232C."
msgstr ""

#. type: Plain text
#: src/examples/gs2-example.adoc:60
msgid "The motor parameters must be set to match the motor."
msgstr ""

#. type: Plain text
#: src/examples/gs2-example.adoc:62
msgid ""
"P3.00 (Source of Operation Command) must be set to Operation determined by "
"RS-485 interface, 03 or 04."
msgstr ""

#. type: Plain text
#: src/examples/gs2-example.adoc:64
msgid ""
"P4.00 (Source of Frequency Command) must be set to Frequency determined by "
"RS232C/RS485 communication interface, 05."
msgstr ""

#. type: Plain text
#: src/examples/gs2-example.adoc:65
msgid "P9.01 (Transmission Speed) must be set to 9600 baud, 01."
msgstr ""

#. type: Plain text
#: src/examples/gs2-example.adoc:67
msgid ""
"P9.02 (Communication Protocol) must be set to \"Modbus RTU mode, 8 data "
"bits, no parity, 2 stop bits\", 03."
msgstr ""

#. type: Plain text
#: src/examples/gs2-example.adoc:69
msgid "A PyVCP panel based on this example is <<gs2-rpm-meter,here>>."
msgstr ""

#. type: Title =
#: src/examples/mpg.adoc:5
#, no-wrap
msgid "MPG Pendant"
msgstr ""

#. type: Plain text
#: src/examples/mpg.adoc:18
msgid ""
"This example is to explain how to hook up the common MPG pendants found on "
"the market today. This example uses an MPG3 pendant and a C22 pendant "
"interface card from CNC4PC connected to a second parallel port plugged into "
"the PCI slot. This example gives you 3 axes with 3 step increments of 0.1, "
"0.01, 0.001"
msgstr ""

#. type: Plain text
#: src/examples/mpg.adoc:23
msgid ""
"In your custom.hal file or jog.hal file add the following, making sure you "
"don't have mux4 or an encoder already in use. If you do just increase the "
"counts and change the reference numbers. More information about mux4 and "
"encoder can be found in the HAL manual or the man page."
msgstr ""

#. type: Plain text
#: src/examples/mpg.adoc:30
msgid ""
"See the <<sub:ini:sec:hal,INI HAL Section>> of the documentation for more "
"information on adding a HAL file.  Jog management pins are provided for each "
"joint and all coordinate letters.  This example uses the axis jog pins for "
"jogging in world mode.  Machines with non-identity kinematics may need use "
"additional connections for jogging in joint mode."
msgstr ""

#. type: Block title
#: src/examples/mpg.adoc:31
#, no-wrap
msgid "jog.hal"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:40
#, no-wrap
msgid ""
"# Jog Pendant\n"
"loadrt encoder num_chan=1\n"
"loadrt mux4 count=1\n"
"addf encoder.capture-position servo-thread\n"
"addf encoder.update-counters base-thread\n"
"addf mux4.0 servo-thread\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:44 src/examples/mpg.adoc:108
#, no-wrap
msgid ""
"# If your MPG outputs a quadrature signal per click set x4 to 1\n"
"# If your MPG puts out 1 pulse per click set x4 to 0\n"
"setp encoder.0.x4-mode 0\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:54 src/examples/mpg.adoc:118
#, no-wrap
msgid ""
"# For velocity mode, set to 1\n"
"# In velocity mode the axis stops when the dial is stopped\n"
"# even if that means the commanded motion is not completed,\n"
"# For position mode (the default), set to 0\n"
"# In position mode the axis will move exactly jog-scale\n"
"# units for each count, regardless of how long that might take,\n"
"setp axis.x.jog-vel-mode 0\n"
"setp axis.y.jog-vel-mode 0\n"
"setp axis.z.jog-vel-mode 0\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:59
#, no-wrap
msgid ""
"# This sets the scale that will be used based on the input to the mux4\n"
"setp mux4.0.in0 0.1\n"
"setp mux4.0.in1 0.01\n"
"setp mux4.0.in2 0.001\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:63 src/examples/mpg.adoc:128
#, no-wrap
msgid ""
"# The inputs to the mux4 component\n"
"net scale1 mux4.0.sel0 <= parport.1.pin-09-in\n"
"net scale2 mux4.0.sel1 <= parport.1.pin-10-in\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:69 src/examples/mpg.adoc:137
#, no-wrap
msgid ""
"# The output from the mux4 is sent to each axis jog scale\n"
"net mpg-scale <= mux4.0.out\n"
"net mpg-scale => axis.x.jog-scale\n"
"net mpg-scale => axis.y.jog-scale\n"
"net mpg-scale => axis.z.jog-scale\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:73 src/examples/mpg.adoc:141
#, no-wrap
msgid ""
"# The MPG inputs\n"
"net mpg-a encoder.0.phase-A <= parport.1.pin-02-in\n"
"net mpg-b encoder.0.phase-B <= parport.1.pin-03-in\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:78 src/examples/mpg.adoc:146
#, no-wrap
msgid ""
"# The Axis select inputs\n"
"net mpg-x axis.x.jog-enable <= parport.1.pin-04-in\n"
"net mpg-y axis.y.jog-enable <= parport.1.pin-05-in\n"
"net mpg-z axis.z.jog-enable <= parport.1.pin-06-in\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:84
#, no-wrap
msgid ""
"# The encoder output counts to the axis. Only the selected axis will move.\n"
"net encoder-counts  <= encoder.0.counts\n"
"net encoder-counts => axis.x.jog-counts\n"
"net encoder-counts => axis.y.jog-counts\n"
"net encoder-counts => axis.z.jog-counts\n"
msgstr ""

#. type: Plain text
#: src/examples/mpg.adoc:89
msgid ""
"If the machine is capable of high acceleration to smooth out the moves for "
"each click of the MPG use the link:../man/man9/ilowpass.9.html[ilowpass] "
"component to limit the acceleration."
msgstr ""

#. type: Block title
#: src/examples/mpg.adoc:90
#, no-wrap
msgid "jog.hal with ilowpass"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:98
#, no-wrap
msgid ""
"loadrt encoder num_chan=1\n"
"loadrt mux4 count=1\n"
"addf encoder.capture-position servo-thread\n"
"addf encoder.update-counters base-thread\n"
"addf mux4.0 servo-thread\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:101
#, no-wrap
msgid ""
"loadrt ilowpass\n"
"addf ilowpass.0 servo-thread\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:104
#, no-wrap
msgid ""
"setp ilowpass.0.scale 1000\n"
"setp ilowpass.0.gain 0.01\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:124
#, no-wrap
msgid ""
"# This sets the scale that will be used based on the input to the mux4\n"
"# The scale used here has to be multiplied by the ilowpass scale\n"
"setp mux4.0.in0 0.0001\n"
"setp mux4.0.in1 0.00001\n"
"setp mux4.0.in2 0.000001\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:131
#, no-wrap
msgid ""
"# The output from encoder counts is sent to ilowpass\n"
"net mpg-out ilowpass.0.in <= encoder.0.counts\n"
msgstr ""

#. type: delimited block -
#: src/examples/mpg.adoc:153
#, no-wrap
msgid ""
"# The output from the ilowpass is sent to each axis jog count\n"
"# Only the selected axis will move.\n"
"net encoder-counts  <= ilowpass.0.out\n"
"net encoder-counts => axis.x.jog-counts\n"
"net encoder-counts => axis.y.jog-counts\n"
"net encoder-counts => axis.z.jog-counts\n"
msgstr ""

#. type: Title =
#: src/examples/pci-parallel-port.adoc:5
#, no-wrap
msgid "PCI Parallel Port"
msgstr ""

#. type: Plain text
#: src/examples/pci-parallel-port.adoc:15
msgid ""
"When you add a second parallel port to your PCI bus you have to find out the "
"address before you can use it with LinuxCNC."
msgstr ""

#. type: Plain text
#: src/examples/pci-parallel-port.adoc:18
msgid ""
"To find the address of your parallel port card open a terminal window and "
"type"
msgstr ""

#. type: Plain text
#: src/examples/pci-parallel-port.adoc:25
msgid ""
"You will see something similar to this as well as info on everything else on "
"the PCI bus:"
msgstr ""

#. type: delimited block -
#: src/examples/pci-parallel-port.adoc:37
#, no-wrap
msgid ""
"0000:00:10.0 Communication controller: \\\n"
"        NetMos Technology PCI 1 port parallel adapter (rev 01)\n"
"        Subsystem: LSI Logic / Symbios Logic: Unknown device 0010\n"
"        Flags: medium devsel, IRQ 11\n"
"        I/O ports at a800 [size=8]\n"
"        I/O ports at ac00 [size=8]\n"
"        I/O ports at b000 [size=8]\n"
"        I/O ports at b400 [size=8]\n"
"        I/O ports at b800 [size=8]\n"
"        I/O ports at bc00 [size=16]\n"
msgstr ""

#. type: Plain text
#: src/examples/pci-parallel-port.adoc:40
msgid "In my case the address was the first one so I changed my .hal file from"
msgstr ""

#. type: delimited block -
#: src/examples/pci-parallel-port.adoc:44
#, no-wrap
msgid "loadrt hal_parport cfg=0x378\n"
msgstr ""

#. type: Plain text
#: src/examples/pci-parallel-port.adoc:47
msgid "to"
msgstr ""

#. type: delimited block -
#: src/examples/pci-parallel-port.adoc:51
#, no-wrap
msgid "loadrt hal_parport cfg=\"0x378 0xa800 in\"\n"
msgstr ""

#. type: Plain text
#: src/examples/pci-parallel-port.adoc:54
msgid "(Note the double quotes surrounding the addresses.)"
msgstr ""

#. type: Plain text
#: src/examples/pci-parallel-port.adoc:56
msgid ""
"and then added the following lines so the parport will be read and written:"
msgstr ""

#. type: delimited block -
#: src/examples/pci-parallel-port.adoc:61
#, no-wrap
msgid ""
"addf parport.1.read base-thread\n"
"addf parport.1.write base-thread\n"
msgstr ""

#. type: Plain text
#: src/examples/pci-parallel-port.adoc:65
msgid ""
"After doing the above then run your config and verify that the parallel port "
"got loaded in Machine/Show HAL Configuration window."
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/examples/spindle.adoc:5 src/gcode/m-code.adoc:20 html/gcode.html:89
#: html/gcode.html:90
#, no-wrap
msgid "Spindle Control"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:18
msgid ""
"LinuxCNC can control up to 8 spindles. The number is set in the INI file.  "
"The examples below all refer to a single-spindle config with spindle control "
"pins with names like 'spindle.0..'.  In the case of a multiple spindle "
"machine all that changes is that additional pins exist with names such as "
"'spindle.6..'."
msgstr ""

#. type: Title ==
#: src/examples/spindle.adoc:19
#, no-wrap
msgid "0-10 Volt Spindle Speed(((0-10 Volt Spindle Speed Example)))"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:24
msgid ""
"If your spindle speed is controlled by an analog signal, (for example, by a "
"VFD with a 0 V to 10 V signal) and you're using a DAC card like the m5i20 to "
"output the control signal:"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:27
msgid ""
"First you need to figure the scale of spindle speed to control signal, i.e. "
"the voltage.  For this example the spindle top speed of 5000 RPM is equal to "
"10 Volts."
msgstr ""

#. type: Target for macro image
#: src/examples/spindle.adoc:28
#, no-wrap
msgid "images/spindle-math.png"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:33
msgid ""
"We have to add a scale component to the HAL file to scale the _spindle.N."
"speed-out_ to the 0 to 10 needed by the VFD if your DAC card does not do "
"scaling."
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:41
#, no-wrap
msgid ""
"loadrt scale count=1\n"
"addf scale.0 servo-thread\n"
"setp scale.0.gain 0.002\n"
"net spindle-speed-scale spindle.0.speed-out => scale.0.in\n"
"net spindle-speed-DAC scale.0.out => <your DAC pin name>\n"
msgstr ""

#. type: Title ==
#: src/examples/spindle.adoc:43
#, no-wrap
msgid "PWM Spindle Speed(((PWM Spindle Speed Example)))"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:58
#, no-wrap
msgid ""
"loadrt pwmgen output_type=0\n"
"addf pwmgen.update servo-thread\n"
"addf pwmgen.make-pulses base-thread\n"
"net spindle-speed-cmd spindle.0.speed-out => pwmgen.0.value\n"
"net spindle-on spindle.0.on => pwmgen.0.enable\n"
"net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out\n"
"# Set the spindle's top speed in RPM\n"
"setp pwmgen.0.scale 1800\n"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:64
msgid ""
"This assumes that the spindle controller's response to PWM is simple: 0% PWM "
"gives 0 RPM, 10% PWM gives 180 RPM, etc. If there is a minimum PWM required "
"to get the spindle to turn, follow the example in the nist-lathe sample "
"configuration to use a scale component."
msgstr ""

#. type: Title ==
#: src/examples/spindle.adoc:65
#, no-wrap
msgid "Spindle Enable(((Spindle Enable Example)))"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:72
msgid ""
"If you need a spindle enable signal, link your output pin to _spindle.0."
"on_.  To link these pins to a parallel port pin put something like the "
"following in your .hal file, making sure you pick the pin that is connected "
"to your control device."
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:76
#, no-wrap
msgid "net spindle-enable spindle.0.on => parport.0.pin-14-out\n"
msgstr ""

#. type: Title ==
#: src/examples/spindle.adoc:78
#, no-wrap
msgid "Spindle Direction(((Spindle Direction Example)))"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:84
msgid ""
"If you have direction control of your spindle, then the HAL pins 'spindle."
"_N_.forward' and 'spindle._N_.reverse' are controlled by the G-codes M3 and "
"M4. Spindle speed S__n__ must be set to a positive non-zero value for M3/M4 "
"to turn on spindle motion."
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:88
msgid ""
"To link these pins to a parallel port pin, put something like the following "
"in your .hal file making sure you pick the pin that is connected to your "
"control device."
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:93
#, no-wrap
msgid ""
"net spindle-fwd spindle.0.forward => parport.0.pin-16-out\n"
"net spindle-rev spindle.0.reverse => parport.0.pin-17-out\n"
msgstr ""

#. type: Title ==
#: src/examples/spindle.adoc:95
#, no-wrap
msgid "Spindle Soft Start(((Spindle Soft Start Example)))"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:104
msgid ""
"If you need to ramp your spindle speed command and your control does not "
"have that feature it can be done in HAL. Basically you need to hijack the "
"output of 'spindle._N_.speed-out' and run it through a 'limit2' component "
"with the scale set so it will ramp the rpm from 'spindle._N_.speed-out' to "
"your device that receives the rpm.  The second part is to let LinuxCNC know "
"when the spindle is at speed so motion can begin."
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:106
msgid "In the 0-10 Volt example the line"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:110
#, no-wrap
msgid "net spindle-speed-scale spindle.0.speed-out => scale.0.in\n"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:113
msgid "is changed as shown in the following example:"
msgstr ""

#. type: Block title
#: src/examples/spindle.adoc:114
#, no-wrap
msgid "Intro to HAL components limit2 and near"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:118
msgid ""
"In case you have not run across them before, here's a quick introduction to "
"the two HAL components used in the following example."
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:123
msgid ""
"A 'limit2' is a HAL component (floating point) that accepts an input value "
"and provides an output that has been limited to a max/min range, and also "
"limited to not exceed a specified rate of change."
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:125
msgid ""
"A 'near' is a HAL component (floating point) with a binary output that says "
"whether two inputs are approximately equal."
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:128
msgid ""
"More info is available in the documentation for HAL components, or from the "
"man pages, just say 'man limit2' or 'man near' in a terminal."
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:134
#, no-wrap
msgid ""
"# load the real time modules limit2 and near with names so it is easier to follow their connections\n"
"loadrt limit2 names=spindle-ramp\n"
"loadrt near names=spindle-at-speed\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:138
#, no-wrap
msgid ""
"# add the functions to a thread\n"
"addf spindle-ramp servo-thread\n"
"addf spindle-at-speed servo-thread\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:142
#, no-wrap
msgid ""
"# set the parameter for max rate-of-change\n"
"# (max spindle accel/decel in units per second)\n"
"setp spindle-ramp.maxv 60\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:145
#, no-wrap
msgid ""
"# hijack the spindle speed out and send it to spindle ramp in\n"
"net spindle-cmd <= spindle.0.speed-out => spindle-ramp.in\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:148
#, no-wrap
msgid ""
"# the output of spindle ramp is sent to the scale in\n"
"net spindle-ramped <= spindle-ramp.out => scale.0.in\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:155
#, no-wrap
msgid ""
"# to know when to start the motion we send the near component\n"
"# (named spindle-at-speed) to the spindle commanded speed from\n"
"# the signal spindle-cmd and the actual spindle speed\n"
"# provided your spindle can accelerate at the maxv setting.\n"
"net spindle-cmd => spindle-at-speed.in1\n"
"net spindle-ramped => spindle-at-speed.in2\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:159
#, no-wrap
msgid ""
"# the output from spindle-at-speed is sent to spindle.0.at-speed\n"
"# and when this is true motion will start\n"
"net spindle-ready <= spindle-at-speed.out => spindle.0.at-speed\n"
msgstr ""

#. type: Title ==
#: src/examples/spindle.adoc:161
#, no-wrap
msgid "Spindle Feedback"
msgstr ""

#. type: Title ===
#: src/examples/spindle.adoc:163
#, no-wrap
msgid "Spindle Synchronized Motion(((Spindle Synchronized Motion Example)))"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:170
msgid ""
"Spindle feedback is needed by LinuxCNC to perform any spindle coordinated "
"motions like threading and constant surface speed.  LinuxCNC can perform "
"synchronized motion and CSS with any of up to 8 spindles. Which spindles are "
"used is controlled from G-code. CSS is possible with several spindles "
"simultaneously."
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:174
msgid ""
"The StepConf Wizard can perform the connections for a single-spindle "
"configuration for you if you select Encoder Phase A and Encoder Index as "
"inputs."
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:176
msgid "Hardware assumptions for this example:"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:179
msgid ""
"An encoder is connected to the spindle and puts out 100 pulses per "
"revolution on phase A."
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:180
msgid "The encoder A phase is connected to the parallel port pin 10."
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:181
msgid "The encoder index pulse is connected to the parallel port pin 11."
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:193
msgid ""
"Basic Steps to add the components and configure them: footnote:[In this "
"example, we will assume that some encoders have already been issued to axes/"
"joints 0, 1, and 2. So the next encoder available for us to attach to the "
"spindle would be number 3. Your situation may differ.] footnote:[The HAL "
"encoder index-enable is an exception to the rule in that it behaves as both "
"an input and an output, see the <<sec:encoder,Encoder Section>> for details] "
"footnote:[It is because we selected 'non-quadrature simple counting...' "
"above that we can get away with 'quadrature' counting without having any B "
"quadrature input.]"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:200
#, no-wrap
msgid ""
"# Add the encoder to HAL and attach it to threads.\n"
"loadrt encoder num_chan=4\n"
"addf encoder.update-counters base-thread\n"
"addf encoder.capture-position servo-thread\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:203
#, no-wrap
msgid ""
"# Set the HAL encoder to 100 pulses per revolution.\n"
"setp encoder.3.position-scale 100\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:206
#, no-wrap
msgid ""
"# Set the HAL encoder to non-quadrature simple counting using A only.\n"
"setp encoder.3.counter-mode true\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:211
#, no-wrap
msgid ""
"# Connect the HAL encoder outputs to LinuxCNC.\n"
"net spindle-position encoder.3.position => spindle.0.revs\n"
"net spindle-velocity encoder.3.velocity => spindle.0.speed-in\n"
"net spindle-index-enable encoder.3.index-enable <=> spindle.0.index-enable\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:216
#, no-wrap
msgid ""
"# Connect the HAL encoder inputs to the real encoder.\n"
"net spindle-phase-a encoder.3.phase-A <= parport.0.pin-10-in\n"
"net spindle-phase-b encoder.3.phase-B\n"
"net spindle-index encoder.3.phase-Z <= parport.0.pin-11-in\n"
msgstr ""

#. type: Title ===
#: src/examples/spindle.adoc:219
#, no-wrap
msgid "Spindle At Speed(((Spindle At Speed Example)))"
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:227
msgid ""
"To enable LinuxCNC to wait for the spindle to be at speed before executing a "
"series of moves, the spindle._N_.at-speed needs to turn true at the moment "
"the spindle is at the commanded speed. To achieve this you need spindle "
"feedback from an encoder. Since the feedback and the commanded speed are not "
"usually 'exactly' the same you should to use the 'near' component to "
"determine that the two numbers are close enough."
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:235
msgid ""
"The connections needed are from the spindle velocity command signal to near."
"n.in1 and from the spindle velocity from the encoder to near.n.in2. Then the "
"near.n.out is connected to spindle._N_.at-speed. The near.n.scale needs to "
"be set to say how close the two numbers must be before turning on the "
"output. Depending on your setup you may need to adjust the scale to work "
"with your hardware."
msgstr ""

#. type: Plain text
#: src/examples/spindle.adoc:240
msgid ""
"The following is typical of the additions needed to your HAL file to enable "
"Spindle At Speed. If you already have near in your HAL file then increase "
"the count and adjust code to suit. Check to make sure the signal names are "
"the same in your HAL file."
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:246
#, no-wrap
msgid ""
"# load a near component and attach it to a thread\n"
"loadrt near\n"
"addf near.0 servo-thread\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:249
#, no-wrap
msgid ""
"# connect one input to the commanded spindle speed\n"
"net spindle-cmd => near.0.in1\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:252
#, no-wrap
msgid ""
"# connect one input to the encoder-measured spindle speed\n"
"net spindle-velocity => near.0.in2\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:255
#, no-wrap
msgid ""
"# connect the output to the spindle-at-speed input\n"
"net spindle-at-speed spindle.0.at-speed <= near.0.out\n"
msgstr ""

#. type: delimited block -
#: src/examples/spindle.adoc:258
#, no-wrap
msgid ""
"# set the spindle speed inputs to agree if within 1%\n"
"setp near.0.scale 1.01\n"
msgstr ""

#. type: Title =
#: src/gcode/coordinates.adoc:5
#, no-wrap
msgid "Coordinate Systems(((Coordinate Systems)))"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:18
msgid ""
"In this chapter, we will try to demystify coordinate systems.  It is a very "
"important concept to understand the operation of a CNC machine, its "
"configuration and its use."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:23
msgid ""
"We will also show that it is very interesting to use a reference point on "
"the blank or the part and to make the program work from this point, without "
"having to take into account where the part is placed on the table."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:26
msgid ""
"This chapter introduces you to offsets as they are used by the LinuxCNC.  "
"These include:"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:28
msgid "Machine Coordinates (G53)"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:29
msgid "Nine Coordinate System Offsets (G54-G59.3)"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:30
msgid "Global Offsets (G92) and Local Offsets (G52)"
msgstr ""

#. type: Title ==
#: src/gcode/coordinates.adoc:32
#, no-wrap
msgid "Machine Coordinate System"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:39
msgid ""
"When LinuxCNC is started the positions of each axis is the machine origin.  "
"Once an axis is homed, the machine origin for that axis is set to the homed "
"position. The machine origin is the machine coordinate system on which all "
"other coordinate systems are based. The <<gcode:g53,G53>> G-code can be used "
"to move in the machine coordinate system."
msgstr ""

#. type: Title ===
#: src/gcode/coordinates.adoc:40
#, no-wrap
msgid "Machine coordinates moves: G53"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:45
msgid ""
"Regardless of any offset that may be active, a G53 in a line of code tells "
"the interpreter to move to the actual axes positions (absolute positions) "
"specified. For example:"
msgstr ""

#. type: delimited block -
#: src/gcode/coordinates.adoc:49
#, no-wrap
msgid "G53 G0 X0 Y0 Z0\n"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:56
msgid ""
"will move from the current position to the position where the machine "
"coordinates of the three axes will be at zero. You can use this command if "
"you have a fixed position for the tool change or if your machine has an "
"automatic tool changer. You can also use this command to clear the work area "
"and access the workpiece in the vise."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:59
msgid ""
"G53 is a non modal command. It must be used in every block where a move in "
"machine coordinate system is desired."
msgstr ""

#. type: Title ==
#: src/gcode/coordinates.adoc:60 src/user/user-concepts.adoc:255
#, no-wrap
msgid "Coordinate Systems"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/coordinates.adoc:63 src/gcode/coordinates.adoc:64
#, no-wrap
msgid "Coordinate Systems Example"
msgstr ""

#. type: Target for macro image
#: src/gcode/coordinates.adoc:64
#, no-wrap
msgid "images/offsets.png"
msgstr ""

#. type: Block title
#: src/gcode/coordinates.adoc:66
#, no-wrap
msgid "Coordinate System Offsets"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:68
msgid "G54 - use coordinate system 1"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:69
msgid "G55 - use coordinate system 2"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:70
msgid "G56 - use coordinate system 3"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:71
msgid "G57 - use coordinate system 4"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:72
msgid "G58 - use coordinate system 5"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:73
msgid "G59 - use coordinate system 6"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:74
msgid "G59.1 - use coordinate system 7"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:75
msgid "G59.2 - use coordinate system 8"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:76
msgid "G59.3 - use coordinate system 9"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:82
msgid ""
"Coordinate system offsets are used to shift the coordinate system from the "
"machine coordinate system. This allows the G-code to be programmed for the "
"part without regard to the part location on the machine. Using coordinate "
"system offsets would allow you to machine parts in multiple locations with "
"the same G-code."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:87
msgid ""
"The values for offsets are stored in the VAR file that is requested by the "
"INI file during the startup of an LinuxCNC. In the example below, which uses "
"G55, the position of each axis for G55 origin is stored in a numbered "
"variable."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:91
msgid ""
"In the VAR file scheme, the first variable number stores the X offset, the "
"second the Y offset and so on for all nine axes. There are numbered sets "
"like this for each of the coordinate system offsets."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:98
msgid ""
"Each of the graphical interfaces has a way to set values for these offsets.  "
"You can also set these values by editing the VAR file itself and then "
"restart LinuxCNC so that the LinuxCNC reads the new values however this is "
"not the recommended way. Using G10, G52, G92, G28.1, etc are better ways to "
"set the variables. For our example, we will directly edit the file so that "
"G55 will take the following values:"
msgstr ""

#. type: Block title
#: src/gcode/coordinates.adoc:99
#, no-wrap
msgid "Example of G55 parameters"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:102
#, no-wrap
msgid "Variable"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:103 src/gcode/g-code.adoc:1570
#, no-wrap
msgid "5241"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:104
#, no-wrap
msgid "2.000000"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:104 src/gcode/g-code.adoc:1570
#, no-wrap
msgid "5242"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:105
#, no-wrap
msgid "1.000000"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:105 src/gcode/g-code.adoc:1570
#, no-wrap
msgid "5243"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:106
#, no-wrap
msgid "-2.000000"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:106 src/gcode/g-code.adoc:1568
#: src/gcode/overview.adoc:115 src/gcode/tool-compensation.adoc:75
#, no-wrap
msgid "A"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:106 src/gcode/g-code.adoc:1570
#, no-wrap
msgid "5244"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:107 src/gcode/coordinates.adoc:108
#: src/gcode/coordinates.adoc:109 src/gcode/coordinates.adoc:110
#: src/gcode/coordinates.adoc:111 src/gcode/coordinates.adoc:112
#, no-wrap
msgid "0.000000"
msgstr ""

#. type: IP
#: src/gcode/coordinates.adoc:107 src/gcode/g-code.adoc:1568
#: src/gcode/overview.adoc:116 src/gcode/tool-compensation.adoc:75
#: man/man3/hal_stream.3hal:170
#, no-wrap
msgid "B"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:107 src/gcode/g-code.adoc:1570
#, no-wrap
msgid "5245"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:108 src/gcode/g-code.adoc:1568
#: src/gcode/overview.adoc:117 src/gcode/tool-compensation.adoc:75
#: src/gui/axis.adoc:631 src/plasma/qtplasmac.adoc:770
#, no-wrap
msgid "C"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:108 src/gcode/g-code.adoc:1570
#, no-wrap
msgid "5246"
msgstr ""

#. type: IP
#: src/gcode/coordinates.adoc:109 src/gcode/g-code.adoc:1568
#: src/gcode/overview.adoc:135 src/gcode/tool-compensation.adoc:75
#: man/man3/hal_stream.3hal:174
#, no-wrap
msgid "U"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:109 src/gcode/g-code.adoc:1570
#, no-wrap
msgid "5247"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:110 src/gcode/g-code.adoc:1568
#: src/gcode/overview.adoc:136 src/gcode/tool-compensation.adoc:75
#: src/gui/axis.adoc:645
#, no-wrap
msgid "V"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:110 src/gcode/g-code.adoc:1570
#, no-wrap
msgid "5248"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:111 src/gcode/g-code.adoc:1568
#: src/gcode/overview.adoc:137 src/gcode/tool-compensation.adoc:75
#, no-wrap
msgid "W"
msgstr ""

#. type: Table
#: src/gcode/coordinates.adoc:111 src/gcode/g-code.adoc:1570
#, no-wrap
msgid "5249"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:116
msgid ""
"You should read this as moving the zero positions of G55 to X = 2 units, Y= "
"1 unit, and Z = -2 units away from the absolute zero position."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:126
msgid ""
"Once there are values assigned, a call to G55 in a program block would shift "
"the zero reference by the values stored. The following line would then move "
"each axis to the new zero position. Unlike G53, G54 through G59.3 are modal "
"commands. They will act on all blocks of code after one of them has been "
"set. The program that might be run using fixture offsets would require only "
"a single coordinate reference for each of the locations and all of the work "
"to be done there. The following code is offered as an example of making a "
"square using the G55 offsets that we set above."
msgstr ""

#. type: delimited block -
#: src/gcode/coordinates.adoc:140
#, no-wrap
msgid ""
"G55 ; use coordinate system 2\n"
"G0 X0 Y0 Z0\n"
"G1 F2 Z-0.2000\n"
"X1\n"
"Y1\n"
"X0\n"
"Y0\n"
"G0 Z0\n"
"G54 ; use coordinate system 1\n"
"G0 X0 Y0 Z0\n"
"M2\n"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:150
msgid ""
"In this example the G54 near the end leaves the G54 coordinate system with "
"all zero offsets so that there is a modal code for the absolute machine "
"based axis positions. This program assumes that we have done that and use "
"the ending command as a command to machine zero. It would have been possible "
"to use G53 and arrive at the same place but that command would not have been "
"modal and any commands issued after it would have returned to using the G55 "
"offsets because that coordinate system would still be in effect."
msgstr ""

#. type: delimited block -
#: src/gcode/coordinates.adoc:162
#, no-wrap
msgid ""
"G54\tuses parameters of coordinate system 1(((G54)))\n"
"G55\tuses parameters of coordinate system 2(((G55)))\n"
"G56\tuses parameters of coordinate system 3(((G56)))\n"
"G57\tuses parameters of coordinate system 4(((G57)))\n"
"G58\tuses parameters of coordinate system 5(((G58)))\n"
"G59\tuses parameters of coordinate system 6(((G59)))\n"
"G59.1\tuses parameters of coordinate system 7(((G59.1)))\n"
"G59.2\tuses parameters of coordinate system 8(((G59.2)))\n"
"G59.3\tuses parameters of coordinate system 9(((G59.3)))\n"
msgstr ""

#. type: Title ===
#: src/gcode/coordinates.adoc:164
#, no-wrap
msgid "Default Coordinate System"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:174
msgid ""
"One other variable in the VAR file becomes important when we think about "
"offset systems. This variable is named 5220. In the default files its value "
"is set to 1.00000. This means that when the LinuxCNC starts up it should use "
"the first coordinate system as its default. If you set this to 9.00000 it "
"would use the ninth offset system as its default for start up and reset. Any "
"value other than an integer (decimal really)  between 1 and 9, or a missing "
"5220 variable will cause the LinuxCNC to revert to the default value of "
"1.00000 on start up."
msgstr ""

#. type: Title ===
#: src/gcode/coordinates.adoc:175
#, no-wrap
msgid "Setting Coordinate System Offsets"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:178
msgid "The G10 L2x command can be used to set coordinate system offsets:"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:181
msgid ""
"'G10 L2 P(1-9)' - Set offset(s) to a value.  Current position irrelevant "
"(see <<gcode:g10-l2,G10 L2>> for details)."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:183
msgid ""
"'G10 L20 P(1-9)' - Set offset(s) so current position becomes a value (see "
"<<gcode:g10-l20,G10 L20>> for details)."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:187
msgid ""
"We only give a brief overview here, refer to the G-code sections for a full "
"description."
msgstr ""

#. type: Title ==
#: src/gcode/coordinates.adoc:189
#, no-wrap
msgid "Local and Global Offsets"
msgstr ""

#. type: Title ===
#: src/gcode/coordinates.adoc:192
#, no-wrap
msgid "The G52 command"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:200
msgid ""
"'G52' is used in a part program as a temporary \"local coordinate system "
"offset\" within the workpiece coordinate system.  An example use case is "
"when machining several identical features at different locations on a part.  "
"For each feature, 'G52' programs a local reference point within workpiece "
"coordinates, and a subprogram is called to machine the feature relative to "
"that point."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:206
msgid ""
"'G52' axis offsets are programmed relative to workpiece coordinate offsets "
"'G54' through 'G59.3'.  As a local offset, 'G52' is applied after the "
"workpiece offset, including rotation.  Thus, a part feature will be machined "
"identically on each part regardless of the part's orientation on the pallet."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:214
msgid ""
"As a temporary offset, set and unset within the localized scope of a part "
"program, in other G-code interpreters 'G52' does not persist after machine "
"reset, 'M02' or 'M30'.  In LinuxCNC, 'G52' shares parameters with 'G92', "
"which, for historical reasons, *does* persist these parameters.  See <<sec:"
"g92-persistence-cautions,G92 Persistence Cautions>> below."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:222
msgid ""
"'G52' and 'G92' share the same offset registers.  Therefore, setting 'G52' "
"will override any earlier 'G92' setting, and 'G52' will persist across "
"machine reset when 'G92' persistence is enabled.  These interactions may "
"result in unexpected offsets.  See <<sec:g92-g52-interaction-cautions,G92 "
"and G52 Interaction Cautions>> below."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:229
msgid ""
"Programming 'G52 X1 Y2' offsets the current workpiece coordinate system X "
"axis by 1 and Y axis by 2.  Accordingly, on the DRO, the current tool "
"position's X and Y coordinates will be reduced by 1 and 2, respectively.  "
"Axes unset in the command, such as Z in the previous example, will be "
"unaffected: any previous 'G52' Z offset will remain in effect, and otherwise "
"the Z offset will be zero."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:232
msgid ""
"The temporary local offset may be canceled with 'G52 X0 Y0'.  Any axes not "
"explicitly zeroed will retain the previous offset."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:235
msgid ""
"'G52' shares the same offset registers as 'G92', and thus 'G52' is visible "
"on the DRO and preview labeled with 'G92'."
msgstr ""

#. type: Title ==
#: src/gcode/coordinates.adoc:237
#, no-wrap
msgid "G92 Axes Offsets"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:245
msgid ""
"G92 is the most misunderstood and cleverest command programmable with "
"LinuxCNC. The way it works has changed a bit between the first versions and "
"the current one. These changes have doubt baffled many users. They should be "
"seen as a command producing a temporary offset, which applies to all the "
"other offsets."
msgstr ""

#. type: Title ===
#: src/gcode/coordinates.adoc:247
#, no-wrap
msgid "The G92 commands"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:252
msgid ""
"'G92' is typically used in two conceptually different ways: as a \"global "
"coordinate system offset\" or as a \"local coordinate system offset\"."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:254
msgid "The 'G92' set of commands includes:"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:257
msgid ""
"'G92' - This command, when used with axis names, sets values to offset "
"variables."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:258
msgid "'G92.1' - This command sets zero values to the G92 variables."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:260
msgid ""
"'G92.2' - This command suspends but does not zero out the G92 variables."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:261
msgid "'G92.3' - This command applies offset values that have been suspended."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:271
msgid ""
"As a global offset, 'G92' is used to shift all workpiece coordinate systems "
"'G54' through 'G59.3'.  An example use case is when machining several "
"identical parts in fixtures with known locations on a pallet, but the pallet "
"location may change between runs or between machines.  Each fixture location "
"offset, relative to a reference point on the pallet, is preset in one of the "
"workpiece coordinate systems, 'G54' through 'G59.3', and 'G92' is used to "
"\"touch off\" on the pallet reference point.  Then, for each part, the "
"corresponding workpiece coordinate system is selected and the part program "
"is executed."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:277
msgid ""
"'G10 R-' workpiece coordinate system rotation is specific to the 'rs274ngc' "
"interpreter, and the 'G92' offset is applied 'after' rotation.  When using "
"'G92' as a global offset, workpiece coordinate system rotations may have "
"unexpected results."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:284
msgid ""
"As a local coordinate system, 'G92' is used as a temporary offset within the "
"workpiece coordinate system.  An example use case is when machining a part "
"with several identical features at different locations.  For each feature, "
"'G92' is used to set a local reference point, and a subprogram is called to "
"machine the feature starting at that point."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:290
msgid ""
"The use of 'G92' is discouraged for programming with local coordinate "
"systems in a part program.  Instead, see <<sec:g52,'G52'>>, a local "
"coordinate system offset more intuitive when desired offset relative to the "
"workpiece is known but current tool location may not be known."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:294
msgid ""
"Programming 'G92 X0 Y0 Z0' sets the current tool location to the coordinates "
"X0, Y0, and Z0, without motion.  G92 *does not* work from absolute machine "
"coordinates.  It works from *current location*."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:302
msgid ""
"'G92' also works from current location as modified by any other offsets that "
"are in effect when the 'G92' command is invoked. While testing for "
"differences between work offsets and actual offsets it was found that a "
"'G54' offset could cancel out a 'G92' and thus give the appearance that no "
"offsets were in effect. However, the 'G92' was still in effect for all "
"coordinates and did produce expected work offsets for the other coordinate "
"systems."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:308
msgid ""
"By default, 'G92' offsets are restored after the machine is started.  "
"Programmers that wish for Fanuc behavior, where 'G92' offsets are cleared at "
"machine start and after a reset or program end, may disable 'G92' "
"persistence by setting 'DISABLE_G92_PERSISTENCE = 1' in the '[RS274NGC]' "
"section of the INI file."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:315
msgid ""
"It is good practice to clear the 'G92' offsets at the end of their use with "
"'G92.1' or 'G92.2'. When starting up LinuxCNC with 'G92' persistence enabled "
"(the default), any offsets in the 'G92' variables will be applied when an "
"axis is homed.  See <<sec:g92-persistence-cautions,G92 Persistence "
"Cautions>> below."
msgstr ""

#. type: Title ===
#: src/gcode/coordinates.adoc:316
#, no-wrap
msgid "Setting G92 Values"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:319
msgid "There are at least two ways to set G92 values:"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:322
msgid ""
"With a right click on the position displays in tklinuxcnc, a window opens "
"where it is possible to enter a value."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:323
msgid "With the G92 command"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:325
msgid "Both work from the current position of the axis that should be moved."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:330
msgid ""
"Programming 'G92 X Y Z A B C U V W' sets the values of the G92 variables so "
"that each axis takes the value associated with its name. Those values are "
"assigned to the current position of the axes. These results satisfy to "
"paragraphs one and two of the NIST document."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:334
msgid ""
"G92 commands work from current axis location and add and subtract correctly "
"to give the current axis position the value assigned by the G92 command. The "
"effects work even though previous offsets are in."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:340
msgid ""
"So if the X axis is currently showing 2.0000 as its position a 'G92 X0' will "
"set an offset of -2.0000 so that the current location of X becomes zero. A "
"'G92 X2' will set an offset of 0.0000 and the displayed position will not "
"change. A 'G92 X5.0000' will set an offset of 3.0000 so that the current "
"displayed position becomes 5.0000."
msgstr ""

#. type: Title ===
#: src/gcode/coordinates.adoc:342
#, no-wrap
msgid "G92 Persistence Cautions"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:346
msgid ""
"By default, the values of a 'G92' offset will be saved in the VAR file and "
"be restored after a machine reset or startup."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:348
msgid "The G92 parameters are:"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:350
msgid "5210 - Enable/disable flag (1.0/0.0)"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:351
msgid "5211 - X Axis Offset"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:352
msgid "5212 - Y Axis Offset"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:353
msgid "5213 - Z Axis Offset"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:354
msgid "5214 - A Axis Offset"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:355
msgid "5215 - B Axis Offset"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:356
msgid "5216 - C Axis Offset"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:357
msgid "5217 - U Axis Offset"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:358
msgid "5218 - V Axis Offset"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:359
msgid "5219 - W Axis Offset"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:365
msgid ""
"where 5210 is the 'G92' enable flag (1 for enabled, 0 for disabled)  and "
"5211 to 5219 are the axis offsets. If you are seeing unexpected positions as "
"the result of a commanded move, as a result of storing an offset in a "
"previous program and not clearing them at the end then issue a G92.1 in the "
"MDI window to clear the stored offsets."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:377
msgid ""
"If G92 values exist in the VAR file when LinuxCNC starts up, the G92 values "
"in the var file will be applied to the values of the current location of "
"each axis. If this is home position and home position is set as machine zero "
"everything will be correct. Once home has been established using real "
"machine switches, or by moving each axis to a known home position and "
"issuing an axis home command, any G92 offsets will be applied. If you have a "
"G92 X1 in effect when you home the X axis the DRO will read 'X: 1.000' "
"instead of the expected 'X: 0.000' because the G92 was applied to the "
"machine origin. If you issue a G92.1 and the DRO now reads all zeros then "
"you had a G92 offset in effect when you last ran LinuxCNC."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:381
msgid ""
"Unless your intention is to use the same G92 offsets in the next program, "
"the best practice is to issue a G92.1 at the end of any G code files where "
"you use G92 offsets."
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:388
msgid ""
"When a program is aborted during processing that has 'G92' offsets in effect "
"a startup will cause them to become active again.  As a safeguard, always "
"have your preamble to set the environment as you expect it.  Additionally, "
"'G92' persistence may be disabled by setting 'DISABLE_G92_PERSISTENCE = 1' "
"in the '[RS274NGC]' section of the INI file."
msgstr ""

#. type: Title ===
#: src/gcode/coordinates.adoc:390
#, no-wrap
msgid "G92 and G52 Interaction Cautions"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:399
msgid ""
"'G52' and 'G92' share the same offset registers. Unless 'G92' persistence is "
"disabled in the INI file (see <<sec:g92-commands,G92 Commands>>), 'G52' "
"offsets will also persist after machine reset, 'M02' or 'M30'.  Beware that "
"a 'G52' offset in effect during a program abort may result in unintended "
"offsets when the next program is run.  See <<sec:g92-persistence-cautions,"
"G92 Persistence Cautions>> above."
msgstr ""

#. type: Title ==
#: src/gcode/coordinates.adoc:400
#, no-wrap
msgid "Sample Programs Using Offsets"
msgstr ""

#. type: Title ===
#: src/gcode/coordinates.adoc:402
#, no-wrap
msgid "Sample Program Using Workpiece Coordinate Offsets"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:407
msgid ""
"This sample engraving project mills a set of four .1 radius circles in "
"roughly a star shape around a center circle. We can setup the individual "
"circle pattern like this."
msgstr ""

#. type: delimited block -
#: src/gcode/coordinates.adoc:416
#, no-wrap
msgid ""
"G10 L2 P1 X0 Y0 Z0 (ensure that G54 is set to machine zero)\n"
"G0 X-0.1 Y0 Z0\n"
"G1 F1 Z-0.25\n"
"G3 X-0.1 Y0 I0.1 J0\n"
"G0 Z0\n"
"M2\n"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:420
msgid ""
"We can issue a set of commands to create offsets for the four other circles "
"like this."
msgstr ""

#. type: delimited block -
#: src/gcode/coordinates.adoc:427
#, no-wrap
msgid ""
"G10 L2 P2 X0.5 (offsets G55 X value by 0.5 inch)\n"
"G10 L2 P3 X-0.5 (offsets G56 X value by -0.5 inch)\n"
"G10 L2 P4 Y0.5 (offsets G57 Y value by 0.5 inch)\n"
"G10 L2 P5 Y-0.5 (offsets G58 Y value by -0.5 inch)\n"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:430
msgid "We put these together in the following program:"
msgstr ""

#. type: delimited block -
#: src/gcode/coordinates.adoc:434
#, no-wrap
msgid "(a program for milling five small circles in a diamond shape)\n"
msgstr ""

#. type: delimited block -
#: src/gcode/coordinates.adoc:440
#, no-wrap
msgid ""
"G10 L2 P1 X0 Y0 Z0 (ensure that G54 is machine zero)\n"
"G10 L2 P2 X0.5 (offsets G55 X value by 0.5 inch)\n"
"G10 L2 P3 X-0.5 (offsets G56 X value by -0.5 inch)\n"
"G10 L2 P4 Y0.5 (offsets G57 Y value by 0.5 inch)\n"
"G10 L2 P5 Y-0.5 (offsets G58 Y value by -0.5 inch)\n"
msgstr ""

#. type: delimited block -
#: src/gcode/coordinates.adoc:445
#, no-wrap
msgid ""
"G54 G0 X-0.1 Y0 Z0 (center circle)\n"
"G1 F1 Z-0.25\n"
"G3 X-0.1 Y0 I0.1 J0\n"
"G0 Z0\n"
msgstr ""

#. type: delimited block -
#: src/gcode/coordinates.adoc:450
#, no-wrap
msgid ""
"G55 G0 X-0.1 Y0 Z0 (first offset circle)\n"
"G1 F1 Z-0.25\n"
"G3 X-0.1 Y0 I0.1 J0\n"
"G0 Z0\n"
msgstr ""

#. type: delimited block -
#: src/gcode/coordinates.adoc:455
#, no-wrap
msgid ""
"G56 G0 X-0.1 Y0 Z0 (second offset circle)\n"
"G1 F1 Z-0.25\n"
"G3 X-0.1 Y0 I0.1 J0\n"
"G0 Z0\n"
msgstr ""

#. type: delimited block -
#: src/gcode/coordinates.adoc:460
#, no-wrap
msgid ""
"G57 G0 X-0.1 Y0 Z0 (third offset circle)\n"
"G1 F1 Z-0.25\n"
"G3 X-0.1 Y0 I0.1 J0\n"
"G0 Z0\n"
msgstr ""

#. type: delimited block -
#: src/gcode/coordinates.adoc:465
#, no-wrap
msgid ""
"G58 G0 X-0.1 Y0 Z0 (fourth offset circle)\n"
"G1 F1 Z-0.25\n"
"G3 X-0.1 Y0 I0.1 J0\n"
"G54 G0 X0 Y0 Z0\n"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:479
msgid ""
"Now comes the time when we might apply a set of G92 offsets to this program. "
"You'll see that it is running in each case at Z0. If the mill were at the "
"zero position, a G92 Z1.0000 issued at the head of the program would shift "
"everything an inch. You might also shift the whole pattern around in the XY "
"plane by adding some X and Y offsets with G92. If you do this you should add "
"a G92.1 command just before the M2 that ends the program. If you do not, "
"other programs that you might run after this one will also use that G92 "
"offset. Furthermore it would save the G92 values when you shut down the "
"LinuxCNC and they will be recalled when you start up again."
msgstr ""

#. type: Title ===
#: src/gcode/coordinates.adoc:480
#, no-wrap
msgid "Sample Program Using G52 Offsets"
msgstr ""

#. type: Plain text
#: src/gcode/coordinates.adoc:483
msgid "(To be written)"
msgstr ""

#. type: Title =
#: src/gcode/g-code.adoc:5
#, no-wrap
msgid "G-Codes"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:11
#, no-wrap
msgid "Conventions"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:14
msgid "Conventions used in this section"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:17
msgid ""
"In the G-code prototypes the hyphen ('-') stands for a real value and ('<>') "
"denotes an optional item."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:20 src/gcode/g-code.adoc:54
msgid ""
"If 'L-' is written in a prototype the '-' will often be referred to as the "
"'L number', and so on for any other letter."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:23
msgid ""
"In the G-code prototypes the word 'axes' stands for any axis as defined in "
"your configuration."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:25
msgid "An optional value will be written like this '<L- >'."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:27
msgid "A real value may be:"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:29
msgid "An explicit number, '4'"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:30
msgid "An expression, '[2+2]'"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:31
msgid "A parameter value, '#88'"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:32
msgid "A unary function value, 'acos[0]'"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:36
msgid ""
"In most cases, if 'axis' words are given (any or all of 'X Y Z A B C U V "
"W'), they specify a destination point."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:40
msgid ""
"Axis numbers are in the currently active coordinate system, unless "
"explicitly described as being in the absolute coordinate system."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:43
msgid ""
"Where axis words are optional, any omitted axes will retain their original "
"value."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:46
msgid ""
"Any items in the G-code prototypes not explicitly described as optional are "
"required."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:51
msgid ""
"The values following letters are often given as explicit numbers.  Unless "
"stated otherwise, the explicit numbers can be real values. For example, 'G10 "
"L2' could equally well be written 'G[2*5] L[1+1]'. If the value of parameter "
"100 were 2, 'G10 L#100' would also mean the same."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:56
#, no-wrap
msgid "G-Code Quick Reference Table(((G-Code Table)))"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:61
#, no-wrap
msgid "<<gcode:g0,G0>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:62
#, no-wrap
msgid "Coordinated Motion at Rapid Rate"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:62
#, no-wrap
msgid "<<gcode:g1,G1>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:63
#, no-wrap
msgid "Coordinated Motion at Feed Rate"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:63
#, no-wrap
msgid "<<gcode:g2-g3,G2 G3>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:64
#, no-wrap
msgid "Coordinated Helical Motion at Feed Rate"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:64
#, no-wrap
msgid "<<gcode:g4,G4>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:65 html/gcode.html:60
#, no-wrap
msgid "Dwell"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:65
#, no-wrap
msgid "<<gcode:g5,G5>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:66 html/gcode.html:61
#, no-wrap
msgid "Cubic Spline"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:66
#, no-wrap
msgid "<<gcode:g5.1,G5.1>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:67
#, no-wrap
msgid "Quadratic B-Spline"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:67
#, no-wrap
msgid "<<gcode:g5.2-g5.3,G5.2,G5.3>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:68
#, no-wrap
msgid "NURBS, add control point"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:68
#, no-wrap
msgid "<<gcode:g7,G7>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:69
#, no-wrap
msgid "Diameter Mode (lathe)"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:69
#, no-wrap
msgid "<<gcode:g8,G8>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:70
#, no-wrap
msgid "Radius Mode (lathe)"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:70
#, no-wrap
msgid "<<gcode:g10-l0,G10 L0>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:71 html/gcode.html:159
#, no-wrap
msgid "Reload Tool Table Data"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:71
#, no-wrap
msgid "<<gcode:g10-l1,G10 L1>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:72
#, no-wrap
msgid "Set Tool Table Entry"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:72
#, no-wrap
msgid "<<gcode:g10-l10,G10 L10>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:73
#, no-wrap
msgid "Set Tool Table, Calculated, Workpiece"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:73
#, no-wrap
msgid "<<gcode:g10-l11,G10 L11>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:74
#, no-wrap
msgid "Set Tool Table, Calculated, Fixture"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:74
#, no-wrap
msgid "<<gcode:g10-l2,G10 L2>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:75
#, no-wrap
msgid "Coordinate System Origin Setting"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:75
#, no-wrap
msgid "<<gcode:g10-l20,G10 L20>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:76
#, no-wrap
msgid "Coordinate System Origin Setting Calculated"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:76
#, no-wrap
msgid "<<gcode:g17-g19.1,G17 - G19.1>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:77 html/gcode.html:112
#, no-wrap
msgid "Plane Select"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:77
#, no-wrap
msgid "<<gcode:g20-g21,G20 G21>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:78
#, no-wrap
msgid "Set Units of Measure"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:78
#, no-wrap
msgid "<<gcode:g28-g28.1,G28 - G28.1>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:79 src/gcode/g-code.adoc:80
#, no-wrap
msgid "Go to Predefined Position"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:79
#, no-wrap
msgid "<<gcode:g30-g30.1,G30 - G30.1>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:80
#, no-wrap
msgid "<<gcode:g33,G33>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:81 src/lathe/lathe-user.adoc:185 html/gcode.html:65
#, no-wrap
msgid "Spindle Synchronized Motion"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:81
#, no-wrap
msgid "<<gcode:g33.1,G33.1>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:82 html/gcode.html:66
#, no-wrap
msgid "Rigid Tapping"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:82
#, no-wrap
msgid "<<gcode:g38,G38.2 - G38.5>>"
msgstr ""

#. type: Title ===
#: src/gcode/g-code.adoc:83 src/gui/qtdragon.adoc:590
#: src/plasma/qtplasmac.adoc:1915
#, no-wrap
msgid "Probing"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:83
#, no-wrap
msgid "<<gcode:g40,G40>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:84
#, no-wrap
msgid "Cancel Cutter Compensation"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:84
#, no-wrap
msgid "<<gcode:g41-g42,G41 G42>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:85
#, no-wrap
msgid "<<gcode:g41.1-g42.1,G41.1 G42.1>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:86 html/gcode.html:117
#, no-wrap
msgid "Dynamic Cutter Compensation"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:86
#, no-wrap
msgid "<<gcode:g43,G43>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:87
#, no-wrap
msgid "Use Tool Length Offset from Tool Table"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:87
#, no-wrap
msgid "<<gcode:g43.1,G43.1>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:88 html/gcode.html:99
#, no-wrap
msgid "Dynamic Tool Length Offset"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:88
#, no-wrap
msgid "<<gcode:g43.2,G43.2>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:89 html/gcode.html:100
#, no-wrap
msgid "Apply additional Tool Length Offset"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:89
#, no-wrap
msgid "<<gcode:g49,G49>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:90
#, no-wrap
msgid "Cancel Tool Length Offset"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:90
#, no-wrap
msgid "<<gcode:g52,G52>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:91
#, no-wrap
msgid "Local Coordinate System Offset"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:91
#, no-wrap
msgid "<<gcode:g53,G53>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:92 html/gcode.html:167
#, no-wrap
msgid "Move in Machine Coordinates"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:92
#, no-wrap
msgid "<<gcode:g54-g59.3,G54-G59.3>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:93
#, no-wrap
msgid "Select Coordinate System (1 - 9)"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:93
#, no-wrap
msgid "<<gcode:g61,G61>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:94 html/gcode.html:120
#, no-wrap
msgid "Exact Path Mode"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:94
#, no-wrap
msgid "<<gcode:g61.1,G61.1>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:95 html/gcode.html:121
#, no-wrap
msgid "Exact Stop Mode"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:95
#, no-wrap
msgid "<<gcode:g64,G64>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:96
#, no-wrap
msgid "Path Control Mode with Optional Tolerance"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:96
#, no-wrap
msgid "<<gcode:g70,G70>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:97
#, no-wrap
msgid "Lathe finishing cycle"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:97
#, no-wrap
msgid "<<gcode:g71-g72,G71-G72>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:98
#, no-wrap
msgid "Lathe roughing cycle"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:98
#, no-wrap
msgid "<<gcode:g73,G73>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:99
#, no-wrap
msgid "Drilling Cycle with Chip Breaking"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:99
#, no-wrap
msgid "<<gcode:g74,G74>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:100
#, no-wrap
msgid "Left-hand Tapping Cycle with Dwell"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:100
#, no-wrap
msgid "<<gcode:g76,G76>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:101
#, no-wrap
msgid "Multi-pass Threading Cycle (Lathe)"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:101
#, no-wrap
msgid "<<gcode:g80,G80>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:102
#, no-wrap
msgid "Cancel Motion Modes"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:102
#, no-wrap
msgid "<<gcode:g81,G81>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:103 html/gcode.html:70
#, no-wrap
msgid "Drilling Cycle"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:103
#, no-wrap
msgid "<<gcode:g82,G82>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:104
#, no-wrap
msgid "Drilling Cycle with Dwell"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:104
#, no-wrap
msgid "<<gcode:g83,G83>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:105
#, no-wrap
msgid "Drilling Cycle with Peck"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:105
#, no-wrap
msgid "<<gcode:g84,G84>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:106
#, no-wrap
msgid "Right-hand Tapping Cycle with Dwell"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:106
#, no-wrap
msgid "<<gcode:g85,G85>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:107
#, no-wrap
msgid "Boring Cycle, No Dwell, Feed Out"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:107
#, no-wrap
msgid "<<gcode:g86,G86>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:108
#, no-wrap
msgid "Boring Cycle, Stop, Rapid Out"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:108
#, no-wrap
msgid "<<gcode:g87,G87>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:109
#, no-wrap
msgid "Back-boring Cycle _(not yet implemented)_"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:109
#, no-wrap
msgid "<<gcode:g88,G88>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:110
#, no-wrap
msgid "Boring Cycle, Stop, Manual Out _(not yet implemented)_"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:110
#, no-wrap
msgid "<<gcode:g89,G89>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:111 html/gcode.html:77
#, no-wrap
msgid "Boring Cycle, Dwell, Feed Out"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:111
#, no-wrap
msgid "<<gcode:g90-g91,G90 G91>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:112 html/gcode.html:80 html/gcode.html:81
#, no-wrap
msgid "Distance Mode"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:112
#, no-wrap
msgid "<<gcode:g90.1-g91.1,G90.1 G91.1>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:113 html/gcode.html:82
#, no-wrap
msgid "Arc Distance Mode"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:113
#, no-wrap
msgid "<<gcode:g92,G92>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:114 html/gcode.html:168
#, no-wrap
msgid "Coordinate System Offset"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:114
#, no-wrap
msgid "<<gcode:g92.1-g92.2,G92.1 G92.2>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:115
#, no-wrap
msgid "Cancel G92 Offsets"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:115
#, no-wrap
msgid "<<gcode:g92.3,G92.3>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/g-code.adoc:116 html/gcode.html:170
#, no-wrap
msgid "Restore G92 Offsets"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:116
#, no-wrap
msgid "<<gcode:g93-g94-g95,G93 G94 G95>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:117
#, no-wrap
msgid "Feed Modes"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:117
#, no-wrap
msgid "<<gcode:g96-g97,G96 G97>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:118
#, no-wrap
msgid "Spindle Control Mode, Constant Surface vs Rotation Speed (IPM or m/min vs RPM)"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:118
#, no-wrap
msgid "<<gcode:g98-g99,G98 G99>>"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:119
#, no-wrap
msgid "Canned Cycle Z Retract Mode"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:122
#, no-wrap
msgid "G0 Rapid Move(((G0 Rapid Move)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:127
#, no-wrap
msgid "G0 <axes>\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:133
msgid ""
"For rapid motion, program 'G0 axes', where all the axis words are optional. "
"The 'G0' is optional if the current motion mode is 'G0'. This will produce "
"coordinated motion to the destination point at the maximum rapid rate (or "
"slower). 'G0' is typically used as a positioning move."
msgstr ""

#. type: Title ===
#: src/gcode/g-code.adoc:134
#, no-wrap
msgid "Rapid Velocity Rate"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:142
msgid ""
"The MAX_VELOCITY setting in the INI file [TRAJ] section defines the "
"maximumrapid traverse rate. The maximum rapid traverse rate can be higher "
"than the individual axes MAX_VELOCITY setting during a coordinated move. The "
"maximum rapid traverse rate can be slower than the MAX_VELOCITY setting in "
"the [TRAJ] section if an axis MAX_VELOCITY or trajectory constraints limit "
"it."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:143 src/gcode/g-code.adoc:2154
#, no-wrap
msgid "G0 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:149
#, no-wrap
msgid ""
"G90 (set absolute distance mode)\n"
"G0 X1 Y-2.3 (Rapid linear move from current location to X1 Y-2.3)\n"
"M2 (end program)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:153
msgid ""
"See <<gcode:g90-g91,G90>> & <<mcode:m2-m30,M2>> sections for more "
"information."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:157 src/gcode/g-code.adoc:207
#: src/gcode/g-code.adoc:268
msgid ""
"If cutter compensation is active, the motion will differ from the above; see "
"the <<sec:cutter-radius-compensation,Cutter Compensation>> section."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:160 src/gcode/g-code.adoc:210
msgid ""
"If 'G53' is programmed on the same line, the motion will also differ; see "
"the <<gcode:g53,G53>> section for more information."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:164
msgid ""
"The path of a G0 rapid motion can be rounded at direction changes and "
"depends on the <<sec:trajectory-control,trajectory control>> settings and "
"maximum acceleration of the axes."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:173 src/gcode/g-code.adoc:212
#: src/gcode/g-code.adoc:276 src/gcode/g-code.adoc:358
#: src/gcode/g-code.adoc:495 src/gcode/g-code.adoc:533
#: src/gcode/g-code.adoc:579 src/gcode/g-code.adoc:613
#: src/gcode/g-code.adoc:742 src/gcode/g-code.adoc:812
#: src/gcode/g-code.adoc:873 src/gcode/g-code.adoc:909
#: src/gcode/g-code.adoc:936 src/gcode/g-code.adoc:1113
#: src/gcode/g-code.adoc:1179 src/gcode/g-code.adoc:1265
#: src/gcode/g-code.adoc:1291 src/gcode/g-code.adoc:1346
#: src/gcode/g-code.adoc:1368 src/gcode/g-code.adoc:1412
#: src/gcode/g-code.adoc:1452 src/gcode/g-code.adoc:1490
#: src/gcode/g-code.adoc:1545 src/gcode/g-code.adoc:1581
#: src/gcode/g-code.adoc:1684 src/gcode/g-code.adoc:1748
#: src/gcode/g-code.adoc:1781 src/gcode/g-code.adoc:1922
#: src/gcode/g-code.adoc:2029 src/gcode/g-code.adoc:2140
#: src/gcode/g-code.adoc:2395 src/gcode/g-code.adoc:2475
#: src/gcode/g-code.adoc:2661 src/gcode/g-code.adoc:2700
#: src/gcode/m-code.adoc:336 src/gcode/other-code.adoc:33
#: src/gcode/other-code.adoc:67 src/gcode/overview.adoc:896
#: src/hal/basic-hal.adoc:233 src/remap/remap.adoc:1858
msgid "It is an error if:"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:175 src/gcode/g-code.adoc:215
msgid "An axis letter is without a real value."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:176
msgid "An axis letter is used that is not configured."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:178
#, no-wrap
msgid "G1 Linear Move(((G1 Linear Move)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:183
#, no-wrap
msgid "G1 axes\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:190
msgid ""
"For linear (straight line) motion at programmed <<sec:set-feed-rate,feed "
"rate>> (for cutting or not), program 'G1 'axes'', where all the axis words "
"are optional. The 'G1' is optional if the current motion mode is 'G1'. This "
"will produce coordinated motion to the destination point at the current feed "
"rate (or slower)."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:191
#, no-wrap
msgid "G1 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:199
#, no-wrap
msgid ""
"G90 (set absolute distance mode)\n"
"G1 X1.2 Y-3 F10 (linear move at a feed rate of 10 from current position to X1.2 Y-3)\n"
"Z-2.3 (linear move at same feed rate from current position to Z-2.3)\n"
"Z1 F25 (linear move at a feed rate of 25 from current position to Z1)\n"
"M2 (end program)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:203
msgid ""
"See <<gcode:g90-g91,G90>> & <<sec:set-feed-rate,F>> & <<mcode:m2-m30,M2>> "
"sections for more information."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:214 src/gcode/g-code.adoc:278
msgid "No feed rate has been set."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:216
msgid "An axis letter is used that is not configured"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:218
#, no-wrap
msgid "G2, G3 Arc Move(((G2, G3 Arc Move)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:225
#, no-wrap
msgid ""
"G2 or G3 axes offsets (center format)\n"
"G2 or G3 axes R- (radius format)\n"
"G2 or G3 offsets|R- <P-> (full circles)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:231
msgid ""
"A circular or helical arc is specified using either 'G2' (clockwise arc) or "
"'G3' (counterclockwise arc) at the current <<sec:set-feed-rate,feed rate>>. "
"The direction (CW, CCW) is as viewed from the positive end of the axis about "
"which the circular motion occurs."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:240
msgid ""
"The axis of the circle or helix must be parallel to the X, Y, or Z axis of "
"the machine coordinate system.  The axis (or, equivalently, the plane "
"perpendicular to the axis) is selected with 'G17' (Z-axis, XY-plane), "
"'G18' (Y-axis, XZ-plane), or 'G19' (X-axis, YZ-plane).  Planes '17.1', "
"'18.1', and '19.1' are not currently supported.  If the arc is circular, it "
"lies in a plane parallel to the selected plane."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:245
msgid ""
"To program a helix, include the axis word perpendicular to the arc plane, "
"for example, if in the 'G17' plane, include a 'Z' word. This will cause the "
"'Z' axis to move to the programmed value during the circular 'XY' motion."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:254
msgid ""
"To program an arc that gives more than one full turn, use the 'P' word "
"specifying the number of full turns plus the programmed arc. The 'P' word "
"must be an integer. If 'P' is unspecified, the behavior is as if 'P1' was "
"given that is, only one full or partial turn will result. For example, if a "
"180 degree arc is programmed with a P2, the resulting motion will be 1 1/2 "
"rotations. For each P increment above 1 an extra full circle is added to the "
"programmed arc. Multi turn helical arcs are supported and give motion useful "
"for milling holes or threads."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:259
msgid ""
"If the pitch of the helix is very small (less than the <<sub:programming-the-"
"planner,naive CAM tolerance>>) then the helix might be converted into a "
"straight line.  https://github.com/LinuxCNC/linuxcnc/issues/222[Bug #222]"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:264
msgid ""
"If a line of code makes an arc and includes rotary axis motion, the rotary "
"axes turn at a constant rate so that the rotary motion starts and finishes "
"when the XYZ motion starts and finishes.  Lines of this sort are hardly ever "
"programmed."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:271
msgid ""
"The arc center is absolute or relative as set by <<gcode:g90.1-g91.1,G90.1 "
"or G91.1>> respectively."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:274
msgid ""
"Two formats are allowed for specifying an arc: Center Format and Radius "
"Format."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:279
msgid "The P word is not an integer."
msgstr ""

#. type: Title ===
#: src/gcode/g-code.adoc:280
#, no-wrap
msgid "Center Format Arcs"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:284
msgid ""
"Center format arcs are more accurate than radius format arcs and are the "
"preferred format to use."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:289
msgid ""
"The end point of the arc along with the offset to the center of the arc from "
"the current location are used to program arcs that are less than a full "
"circle. It is OK if the end point of the arc is the same as the current "
"location."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:292
msgid ""
"The offset to the center of the arc from the current location and optionally "
"the number of turns are used to program full circles."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:296
msgid ""
"When programming arcs an error due to rounding can result from using a "
"precision of less than 4 decimal places (0.0000) for inch and less than 3 "
"decimal places (0.000) for millimeters."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:297
#, no-wrap
msgid "Incremental Arc Distance Mode"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:301
msgid ""
"Arc center offsets are a relative distance from the start location of the "
"arc.  Incremental Arc Distance Mode is default."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:304
msgid ""
"One or more axis words and one or more offsets must be programmed for an arc "
"that is less than 360 degrees."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:307
msgid ""
"No axis words and one or more offsets must be programmed for full circles.  "
"The 'P' word defaults to 1 and is optional."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:310
msgid ""
"For more information on 'Incremental Arc Distance Mode see the <<gcode:g90.1-"
"g91.1,G91.1>> section."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:311
#, no-wrap
msgid "Absolute Arc Distance Mode"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:314
msgid ""
"Arc center offsets are the absolute distance from the current 0 position of "
"the axis."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:317
msgid ""
"One or more axis words and 'both' offsets must be programmed for arcs less "
"than 360 degrees."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:320
msgid ""
"No axis words and both offsets must be programmed for full circles.  The 'P' "
"word defaults to 1 and is optional."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:323
msgid ""
"For more information on 'Absolute Arc Distance Mode see the <<gcode:g90.1-"
"g91.1,G90.1>> section."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:324
#, no-wrap
msgid "XY-plane (G17)"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:328
#, no-wrap
msgid "G2 or G3 <X- Y- Z- I- J- P->\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:331
msgid "'Z' - helix"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:332 src/gcode/g-code.adoc:343
msgid "'I' - X offset"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:333 src/gcode/g-code.adoc:354
msgid "'J' - Y offset"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:334 src/gcode/g-code.adoc:345
#: src/gcode/g-code.adoc:356
msgid "'P' - number of turns"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:335
#, no-wrap
msgid "XZ-plane (G18)"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:339
#, no-wrap
msgid "G2 or G3 <X- Z- Y- I- K- P->\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:342
msgid "'Y' - helix"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:344 src/gcode/g-code.adoc:355
msgid "'K' - Z offset"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:346
#, no-wrap
msgid "YZ-plane (G19)"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:350
#, no-wrap
msgid "G2 or G3 <Y- Z- X- J- K- P->\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:353
msgid "'X' - helix"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:360
msgid "No feed rate is set with the <<sec:set-feed-rate,F>> word."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:361
msgid "No offsets are programmed."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:365
msgid ""
"When the arc is projected on the selected plane, the distance from the "
"current point to the center differs from the distance from the end point to "
"the center by more than (.05 inch/.5 mm)  OR ((.0005 inch/.005mm) AND .1% of "
"radius)."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:368
msgid ""
"Deciphering the Error message 'Radius to end of arc differs from radius to "
"start:'"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:370
msgid "'start' - the current position"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:371
msgid "'center' - the center position as calculated using the i, j, or k words"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:372
msgid "'end' - the programmed end point"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:373
msgid "'r1' - radius from the start position to the center"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:374
msgid "'r2' - radius from the end position to the center"
msgstr ""

#. type: Title ===
#: src/gcode/g-code.adoc:375
#, no-wrap
msgid "Center Format Examples"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:384
msgid ""
"Calculating arcs by hand can be difficult at times. One option is to draw "
"the arc with a CAD program to get the coordinates and offsets.  Keep in mind "
"the tolerance mentioned above, you may have to change the precision of your "
"CAD program to get the desired results. Another option is to calculate the "
"coordinates and offset using formulas. As you can see in the following "
"figures a triangle can be formed from the current position the end position "
"and the arc center."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:389
msgid ""
"In the following figure you can see the start position is X0 Y0, the end "
"position is X1 Y1. The arc center position is at X1 Y0. This gives us an "
"offset from the start position of 1 in the X axis and 0 in the Y axis. In "
"this case only an I offset is needed."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:390 src/gcode/g-code.adoc:499
#, no-wrap
msgid "G2 Example Line"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:395
#, no-wrap
msgid ""
"G0 X0 Y0\n"
"G2 X1 Y1 I1 F10 (clockwise arc in the XY plane)\n"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/g-code.adoc:397 src/gcode/g-code.adoc:398
#, no-wrap
msgid "G2 Example"
msgstr ""

#. type: Target for macro image
#: src/gcode/g-code.adoc:398
#, no-wrap
msgid "images/g2_en.svg"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:405
msgid ""
"In the next example we see the difference between the offsets for Y if we "
"are doing a G2 or a G3 move. For the G2 move the start position is X0 Y0, "
"for the G3 move it is X0 Y1. The arc center is at X1 Y0.5 for both moves. "
"The G2 move the J offset is 0.5 and the G3 move the J offset is -0.5."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:406
#, no-wrap
msgid "G2-G3 Example Line"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:412
#, no-wrap
msgid ""
"G0 X0 Y0\n"
"G2 X0 Y1 I1 J0.5 F25 (clockwise arc in the XY plane)\n"
"G3 X0 Y0 I1 J-0.5 F25 (counterclockwise arc in the XY plane)\n"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/g-code.adoc:414 src/gcode/g-code.adoc:415
#, no-wrap
msgid "G2-G3 Example"
msgstr ""

#. type: Target for macro image
#: src/gcode/g-code.adoc:415
#, no-wrap
msgid "images/g2-3_en.svg"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:419
msgid ""
"In the next example we show how the arc can make a helix in the Z axis by "
"adding the Z word."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:420
#, no-wrap
msgid "G2 Example Helix"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:425
#, no-wrap
msgid ""
"G0 X0 Y0 Z0\n"
"G17 G2 X10 Y16 I3 J4 Z-1 (helix arc with Z added)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:429
msgid ""
"In the next example we show how to make more than one turn using the P word."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:430
#, no-wrap
msgid "P word Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:435
#, no-wrap
msgid ""
"G0 X0 Y0 Z0\n"
"G2 X0 Y1 Z-1 I1 J0.5 P2 F25\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:440
msgid ""
"In the center format, the radius of the arc is not specified, but it may be "
"found easily as the distance from the center of the circle to either the "
"current point or the end point of the arc."
msgstr ""

#
#
#
#
#
#
#. FIXME Complete circles and helicoids doc
#. === Complete Circles and Helicoids
#. ----
#. [G2|G3] I- J- K-
#. ----
#. To make a full 360 degree circle from the current position, program a
#. single I, J or K offset from the current position for G2/G3.
#. FIXME Better explain I, J, K offsets for full circles
#. To program a 360 degree helicoid in the XY plane specify only the word Z.
#. It is an error if:
#. * K offset is used while working in XY plane
#. * J offset is used while working in XZ plane
#. * I offset is used while working in YZ plane
#. type: Title ===
#: src/gcode/g-code.adoc:463
#, no-wrap
msgid "Radius Format Arcs"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:468
#, no-wrap
msgid "G2 or G3 axes R- <P->\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:471
msgid "'R' - radius from current position"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:482
msgid ""
"It is not good practice to program radius format arcs that are nearly full "
"circles or nearly semicircles because a small change in the location of the "
"end point will produce a much larger change in the location of the center of "
"the circle (and, hence, the middle of the arc). The magnification effect is "
"large enough that rounding error in a number can produce out-of-tolerance "
"cuts. For instance, a 1% displacement of the endpoint of a 180 degree arc "
"produced a 7% displacement of the point 90 degrees along the arc. Nearly "
"full circles are even worse. Other size arcs (in the range tiny to 165 "
"degrees or 195 to 345 degrees) are OK."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:493
msgid ""
"In the radius format, the coordinates of the end point of the arc in the "
"selected plane are specified along with the radius of the arc.  Program 'G2' "
"'axes' 'R-' (or use 'G3' instead of 'G2' ). R is the radius. The axis words "
"are all optional except that at least one of the two words for the axes in "
"the selected plane must be used. The R number is the radius. A positive "
"radius indicates that the arc turns through less than 180 degrees, while a "
"negative radius indicates a turn of more than 180 degrees. If the arc is "
"helical, the value of the end point of the arc on the coordinate axis "
"parallel to the axis of the helix is also specified."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:497
msgid "both of the axis words for the axes of the selected plane are omitted"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:498
msgid "the end point of the arc is the same as the current point."
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:503
#, no-wrap
msgid "G17 G2 X10 Y15 R20 Z5 (radius format with arc)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:510
msgid ""
"The above example makes a clockwise (as viewed from the positive Z-axis)  "
"circular or helical arc whose axis is parallel to the Z-axis, ending where "
"X=10, Y=15, and Z=5, with a radius of 20. If the starting value of Z is 5, "
"this is an arc of a circle parallel to the XY-plane; otherwise it is a "
"helical arc."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:512
#, no-wrap
msgid "G4 Dwell(((G4 Dwell)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:517
#, no-wrap
msgid "G4 P-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:520
msgid "'P' - seconds to dwell (floating point)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:525
msgid ""
"The P number is the time in seconds that all axes will remain unmoving.  The "
"P number is a floating point number so fractions of a second may be used.  "
"G4 does not affect spindle, coolant and any I/O."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:526
#, no-wrap
msgid "G4 Example Line"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:530
#, no-wrap
msgid "G4 P0.5 (wait for 0.5 seconds before proceeding)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:535
msgid "the P number is negative or not specified."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:537
#, no-wrap
msgid "G5 Cubic Spline(((G5 Cubic spline)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:542
#, no-wrap
msgid "G5 X- Y- <I- J-> P- Q-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:545
msgid "'I' - X incremental offset from start point to first control point"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:546
msgid "'J' - Y incremental offset from start point to first control point"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:547
msgid "'P' - X incremental offset from end point to second control point"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:548
msgid "'Q' - Y incremental offset from end point to second control point"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:551
msgid ""
"G5 creates a cubic B-spline in the XY plane with the X and Y axes only.  P "
"and Q must both be specified for every G5 command."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:558
msgid ""
"For the first G5 command in a series of G5 commands, I and J must both be "
"specified.  For subsequent G5 commands, either both I and J must be "
"specified, or neither.  If I and J are unspecified, the starting direction "
"of this cubic will automatically match the ending direction of the previous "
"cubic (as if I and J are the negation of the previous P and Q)."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:560
msgid "For example, to program a curvy N shape:"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:561
#, no-wrap
msgid "G5 Sample initial cubic spline"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:567
#, no-wrap
msgid ""
"G90 G17\n"
"G0 X0 Y0\n"
"G5 I0 J3 P0 Q-3 X1 Y1\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:571
msgid ""
"A second curvy N that attaches smoothly to this one can now be made without "
"specifying I and J:"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:572
#, no-wrap
msgid "G5 Sample subsequent cubic spline"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:576
#, no-wrap
msgid "G5 P0 Q-3 X2 Y2\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:581
msgid "P and Q are not both specified."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:582
msgid "Just one of I or J are specified."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:583
msgid "I or J are unspecified in the first of a series of G5 commands."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:584
msgid "An axis other than X or Y is specified."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:585
msgid "The active plane is not G17."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:587
#, no-wrap
msgid "G5.1 Quadratic Spline(((G5.1 Quadratic spline)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:592
#, no-wrap
msgid "G5.1 X- Y- I- J-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:595
msgid "'I' - X incremental offset from start point to control point"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:596
msgid "'J' - Y incremental offset from start point to control point"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:600
msgid ""
"G5.1 creates a quadratic B-spline in the XY plane with the X and Y axis "
"only.  Not specifying I or J gives zero offset for the unspecified axis, so "
"one or both must be given."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:603
msgid ""
"For example, to program a parabola, through the origin, from X-2 Y4 to X2 Y4:"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:604
#, no-wrap
msgid "G5.1 Sample quadratic spline"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:610
#, no-wrap
msgid ""
"G90 G17\n"
"G0 X-2 Y4\n"
"G5.1 X2 I2 J-8\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:615
msgid "both I and J offset are unspecified or zero"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:616
msgid "An axis other than X or Y is specified"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:617
msgid "The active plane is not G17"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:619
#, no-wrap
msgid "G5.2 G5.3 NURBS Block(((G5.2 G5.3 NURBS Block)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:627
#, no-wrap
msgid ""
"G5.2 <P-> <X- Y-> <L->\n"
"X- Y- <P->\n"
"...\n"
"G5.3\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:630
msgid "G5.2, G5.3 is experimental and not fully tested."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:635
msgid ""
"G5.2 is for opening the data block defining a NURBS and G5.3 for closing the "
"data block. In the lines between these two codes the curve control points "
"are defined with both their related 'weights' (P) and the parameter (L) "
"which determines the order of the curve."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:639
msgid ""
"The current coordinate, before the first G5.2 command, is always taken as "
"the first NURBS control point.  To set the weight for this first control "
"point, first program G5.2 P- without giving any X Y."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:642
msgid ""
"The default weight if P is unspecified is 1.  The default order if L is "
"unspecified is 3."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:643
#, no-wrap
msgid "G5.2 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:660
#, no-wrap
msgid ""
"G0 X0 Y0 (rapid move)\n"
"F10 (set feed rate)\n"
"G5.2 P1 L3\n"
"     X0 Y1 P1\n"
"     X2 Y2 P1\n"
"     X2 Y0 P1\n"
"     X0 Y0 P2\n"
"G5.3\n"
"; The rapid moves show the same path without the NURBS Block\n"
"G0 X0 Y1\n"
"   X2 Y2\n"
"   X2 Y0\n"
"   X0 Y0\n"
"M2\n"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:662
#, no-wrap
msgid "Sample NURBS Output"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:664
msgid "image:images/nurbs01.png[\"Sample NURBS Output\",align=\"center\"]"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:666
msgid "More information on NURBS can be found here:"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:668
msgid ""
"http://wiki.linuxcnc.org/cgi-bin/wiki.pl?NURBS[http://wiki.linuxcnc.org/cgi-"
"bin/wiki.pl?NURBS]"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:670
#, no-wrap
msgid "G7 Lathe Diameter Mode(((G7 Lathe Diameter Mode)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:675
#, no-wrap
msgid "G7\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:681
msgid ""
"Program G7 to enter the diameter mode for axis X on a lathe. When in the "
"diameter mode the X axis moves on a lathe will be 1/2 the distance to the "
"center of the lathe. For example X1 would move the cutter to 0.500\" from "
"the center of the lathe thus giving a 1\" diameter part."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:683
#, no-wrap
msgid "G8 Lathe Radius Mode(((G8 Lathe Radius Mode)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:688
#, no-wrap
msgid "G8\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:694
msgid ""
"Program G8 to enter the radius mode for axis X on a lathe. When in Radius "
"mode the X axis moves on a lathe will be the distance from the center. Thus "
"a cut at X1 would result in a part that is 2\" in diameter.  G8 is default "
"at power up."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:696
#, no-wrap
msgid "G10 L0 Reload Tool Table Data(((G10 L0 Reload Tool Table Data)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:701
#, no-wrap
msgid "G10 L0\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:705
msgid ""
"G10 L0 reload all tool table data.  Requires that there is no current tool "
"loaded in spindle."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:713
msgid ""
"When using G10 L0, tool parameters (#5401-#5413) will be updated immediately "
"and any altered tool diameters will be used for subsequent G41,42 cutter "
"radius compensation commands. Existing G43 tool length compensation values "
"will remain in effect until updated by new G43 commands."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:715
#, no-wrap
msgid "G10 L1 Set Tool Table(((G10 L1 Tool Table)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:720
#, no-wrap
msgid "G10 L1 P- axes <R- I- J- Q->\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:723 src/gcode/g-code.adoc:848
#: src/gcode/g-code.adoc:888
msgid "'P' - tool number"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:724 src/gcode/g-code.adoc:849
#: src/gcode/g-code.adoc:889
msgid "'R' - radius of tool"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:725 src/gcode/g-code.adoc:850
#: src/gcode/g-code.adoc:890
msgid "'I' - front angle (lathe)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:726 src/gcode/g-code.adoc:851
#: src/gcode/g-code.adoc:891
msgid "'J' - back angle (lathe)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:727 src/gcode/g-code.adoc:852
#: src/gcode/g-code.adoc:892
msgid "'Q' - orientation (lathe)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:730
msgid ""
"G10 L1 sets the tool table for the 'P' tool number to the values of the "
"words."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:733
msgid ""
"A valid G10 L1 rewrites and reloads the tool table for the specified tool."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:734
#, no-wrap
msgid "G10 L1 Example Line"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:739
#, no-wrap
msgid ""
"G10 L1 P1 Z1.5 (set tool 1 Z offset from the machine origin to 1.5)\n"
"G10 L1 P2 R0.015 Q3 (lathe example setting tool 2 radius to 0.015 and orientation to 3)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:744 src/gcode/g-code.adoc:875
#: src/gcode/g-code.adoc:911
msgid "Cutter Compensation is on"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:745 src/gcode/g-code.adoc:876
#: src/gcode/g-code.adoc:912
msgid "The P number is unspecified"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:746 src/gcode/g-code.adoc:877
#: src/gcode/g-code.adoc:913
msgid "The P number is not a valid tool number from the tool table"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:747 src/gcode/g-code.adoc:878
#: src/gcode/g-code.adoc:914
msgid "The P number is 0"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:750
msgid ""
"For more information on cutter orientation used by the 'Q' word, see the "
"<<sec:lathe-tool-orientation,Lathe Tool Orientation>> diagram."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:752
#, no-wrap
msgid "G10 L2 Set Coordinate System(((G10 L2 Coordinate System)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:757
#, no-wrap
msgid "G10 L2 P- <axes R->\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:760 src/gcode/g-code.adoc:924
msgid "'P' - coordinate system (0-9)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:761
msgid "'R' - rotation about the Z axis"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:767
msgid ""
"G10 L2 offsets the origin of the axes in the coordinate system specified to "
"the value of the axis word. The offset is from the machine origin "
"established during homing. The offset value will replace any current offsets "
"in effect for the coordinate system specified. Axis words not used will not "
"be changed."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:769
msgid "Program P0 to P9 to specify which coordinate system to change."
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:770 src/gcode/g-code.adoc:773
#, no-wrap
msgid "Coordinate System"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:773
#, no-wrap
msgid "P Value"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:774
#, no-wrap
msgid "Active"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:775
#, no-wrap
msgid "n/a"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:790
msgid ""
"Optionally program R to indicate the rotation of the XY axis around the Z "
"axis.  The direction of rotation is CCW as viewed from the positive end of "
"the Z axis."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:792
msgid "All axis words are optional."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:795
msgid ""
"Being in incremental distance mode (<<gcode:g90-g91,'G91'>>) has no effect "
"on 'G10 L2'."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:797
msgid "Important Concepts:"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:801
msgid ""
"G10 L2 Pn does not change from the current coordinate system to the one "
"specified by P, you have to use G54-59.3 to select a coordinate system."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:803
msgid ""
"When a rotation is in effect jogging an axis will only move that axis in a "
"positive or negative direction and not along the rotated axis."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:805
msgid ""
"If a 'G52' local offset or 'G92' origin offset was in effect before 'G10 "
"L2', it will continue to be in effect afterwards."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:807
msgid ""
"When programming a coordinate system with R, any 'G52' or 'G92' will be "
"applied *after* the rotation."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:810
msgid ""
"The coordinate system whose origin is set by a 'G10' command may be active "
"or inactive at the time the 'G10' is executed.  If it is currently active, "
"the new coordinates take effect immediately."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:814 src/gcode/g-code.adoc:938
msgid "The P number does not evaluate to an integer in the range 0 to 9."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:815 src/gcode/g-code.adoc:939
msgid "An axis is programmed that is not defined in the configuration."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:816 src/gcode/g-code.adoc:827
#, no-wrap
msgid "G10 L2 Example Line"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:820
#, no-wrap
msgid "G10 L2 P1 X3.5 Y17.2\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:826
msgid ""
"In the above example the origin of the first coordinate system (the one "
"selected by 'G54') is set to be X=3.5 and Y=17.2.  Because only X and Y are "
"specified, the origin point is only moved in X and Y; the other coordinates "
"are not changed."
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:831
#, no-wrap
msgid "G10 L2 P1 X0 Y0 Z0 (clear offsets for X,Y & Z axes in coordinate system 1)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:835
msgid ""
"The above example sets the XYZ coordinates of the coordinate system 1 to the "
"machine origin."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:838
msgid ""
"The coordinate system is described in the <<cha:coordinate-system,Coordinate "
"System>> section."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:840
#, no-wrap
msgid "G10 L10 Set Tool Table(((G10 L10 Set Tool Table)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:845
#, no-wrap
msgid "G10 L10 P- axes <R- I- J- Q->\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:859
msgid ""
"G10 L10 changes the tool table entry for tool P so that if the tool offset "
"is reloaded, with the machine in its current position and with the current "
"G5x and G52/G92 offsets active, the current coordinates for the given axes "
"will become the given values. The axes that are not specified in the G10 L10 "
"command will not be changed. This could be useful with a probe move as "
"described in the <<gcode:g38,G38>> section."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:860
#, no-wrap
msgid "G10 L10 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:867
#, no-wrap
msgid ""
"T1 M6 G43 (load tool 1 and tool length offsets)\n"
"G10 L10 P1 Z1.5 (set the current position for Z to be 1.5)\n"
"G43 (reload the tool length offsets from the changed tool table)\n"
"M2 (end program)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:871
msgid ""
"See <<sec:select-tool,T>> & <<mcode:m6,M6>>, and <<gcode:g43,G43>>/<<gcode:"
"g43.1,G43.1>> sections for more information."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:880
#, no-wrap
msgid "G10 L11 Set Tool Table(((G10 L11 Set Tool Table)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:885
#, no-wrap
msgid "G10 L11 P- axes <R- I- J- Q->\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:898
msgid ""
"G10 L11 is just like G10 L10 except that instead of setting the entry "
"according to the current offsets, it is set so that the current coordinates "
"would become the given value if the new tool offset is reloaded and the "
"machine is placed in the G59.3 coordinate system without any G52/G92 offset "
"active."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:902
msgid ""
"This allows the user to set the G59.3 coordinate system according to a fixed "
"point on the machine, and then use that fixture to measure tools without "
"regard to other currently-active offsets."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:916
#, no-wrap
msgid "G10 L20 Set Coordinate System(((G10 L20 Set Coordinate System)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:921
#, no-wrap
msgid "G10 L20 P- axes\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:928
msgid ""
"G10 L20 is similar to G10 L2 except that instead of setting the offset/entry "
"to the given value, it is set to a calculated value that makes the current "
"coordinates become the given value."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:929
#, no-wrap
msgid "G10 L20 Example Line"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:933
#, no-wrap
msgid "G10 L20 P1 X1.5 (set the X axis current location in coordinate system 1 to 1.5)\n"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:941
#, no-wrap
msgid "G17 - G19.1 Plane Select(((G17 - G19.1 Plane Select)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:944
msgid "These codes set the current plane as follows:"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:946
msgid "'G17' - XY (default)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:947
msgid "'G18' - ZX"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:948
msgid "'G19' - YZ"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:949
msgid "'G17.1' - UV"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:950
msgid "'G18.1' - WU"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:951
msgid "'G19.1' - VW"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:953
msgid "The UV, WU and VW planes do not support arcs."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:956
msgid ""
"It is a good idea to include a plane selection in the preamble of each G-"
"code file."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:959
msgid ""
"The effects of having a plane selected are discussed in section <<gcode:g2-"
"g3,G2 G3 Arcs>> and section <<gcode:g80-g89,G81 G89>>."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:961
#, no-wrap
msgid "G20, G21 Units(((G20 Units)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:964
msgid "'G20' - to use inches for length units."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:965
msgid "'G21' - to use millimeters for length units."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:968
msgid "It is a good idea to include units in the preamble of each G-code file."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:970
#, no-wrap
msgid "G28, G28.1 Go/Set Predefined Position(((G28 Go/Set Predefined Position)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:975
msgid ""
"Only use G28 when your machine is homed to a repeatable position and the "
"desired G28 position has been stored with G28.1."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:982
msgid ""
"G28 uses the values stored in <<sub:numbered-parameters,parameters>> "
"5161-5169 as the X Y Z A B C U V W final point to move to. The parameter "
"values are 'absolute' machine coordinates in the native machine 'units' as "
"specified in the INI file. All axes defined in the INI file will be moved "
"when a G28 is issued. If no positions are stored with G28.1 then all axes "
"will go to the <<sec:machine-coordinate-system,machine origin>>."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:986
msgid ""
"'G28' - makes a <<gcode:g0,rapid move>> from the current position to the "
"'absolute' position of the values in parameters 5161-5166."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:990
msgid ""
"'G28 axes' - makes a rapid move to the position specified by 'axes' "
"including any offsets, then will make a rapid move to the 'absolute' "
"position of the values in parameters 5161-5166 for all 'axes' specified. Any "
"'axis' not specified will not move."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:992
msgid ""
"'G28.1' - stores the current 'absolute' position into parameters 5161-5166."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:993
#, no-wrap
msgid "G28 Example Line"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:997
#, no-wrap
msgid "G28 Z2.5 (rapid to Z2.5 then to Z location specified in #5163)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1000 src/gcode/g-code.adoc:1039
msgid "It is an error if :"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1002 src/gcode/g-code.adoc:1041
msgid "Cutter Compensation is turned on"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1004
#, no-wrap
msgid "G30, G30.1 Go/Set Predefined Position(((G30 Go/Set Predefined Position)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1009
msgid ""
"Only use G30 when your machine is homed to a repeatable position and the "
"desired G30 position has been stored with G30.1."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1017
msgid ""
"G30 functions the same as G28 but uses the values stored in <<sub:numbered-"
"parameters,parameters>> 5181-5189 as the X Y Z A B C U V W final point to "
"move to. The parameter values are 'absolute' machine coordinates in the "
"native machine 'units' as specified in the INI file.  All axes defined in "
"the INI file will be moved when a G30 is issued. If no positions are stored "
"with G30.1 then all axes will go to the <<sec:machine-coordinate-system,"
"machine origin>>."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1021
msgid ""
"G30 parameters will be used to move the tool when a M6 is programmed if "
"TOOL_CHANGE_AT_G30=1 is in the [EMCIO] section of the INI file."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1025
msgid ""
"'G30' - makes a <<gcode:g0,rapid move>> from the current position to the "
"'absolute' position of the values in parameters 5181-5189."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1029
msgid ""
"'G30 axes' - makes a rapid move to the position specified by 'axes' "
"including any offsets, then will make a rapid move to the 'absolute' "
"position of the values in parameters 5181-5189 for all 'axes' specified. Any "
"'axis' not specified will not move."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1031
msgid ""
"'G30.1' - stores the current absolute position into parameters 5181-5186."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:1032
#, no-wrap
msgid "G30 Example Line"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1036
#, no-wrap
msgid "G30 Z2.5 (rapid to Z2.5 then to the Z location specified in #5i83)\n"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1043
#, no-wrap
msgid "G33 Spindle Synchronized Motion(((G33 Spindle Synchronized Motion)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1048
#, no-wrap
msgid "G33 X- Y- Z- K- $-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1051 src/gcode/g-code.adoc:1128
msgid "'K' - distance per revolution"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1060
msgid ""
"For spindle-synchronized motion in one direction, code 'G33 X- Y- Z- K-' "
"where K gives the distance moved in XYZ for each revolution of the spindle.  "
"For instance, if starting at 'Z=0', 'G33 Z-1 K.0625' produces a 1 inch "
"motion in Z over 16 revolutions of the spindle.  This command might be part "
"of a program to produce a 16TPI thread.  Another example in metric, 'G33 "
"Z-15 K1.5' produces a movement of 15mm while the spindle rotates 10 times "
"for a thread of 1.5mm."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1064
msgid ""
"The (optional) $ argument sets which spindle the motion is synchronised to "
"(default is zero). For example G33 Z10 K1 $1 will move the spindle in "
"synchrony with the spindle.N.revs HAL pin value."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1069
msgid ""
"Spindle-synchronized motion waits for the spindle index and spindle at speed "
"pins, so multiple passes line up. 'G33' moves end at the programmed "
"endpoint.  G33 could be used to cut tapered threads or a fusee."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1071 src/gcode/g-code.adoc:1164
msgid "All the axis words are optional, except that at least one must be used."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1076
msgid ""
"K follows the drive line described by 'X- Y- Z-'. K is not parallel to the Z "
"axis if X or Y endpoints are used for example when cutting tapered threads."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:1078 src/gcode/g-code.adoc:1936
#, no-wrap
msgid "Technical Info"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1087
msgid ""
"At the beginning of each G33 pass, LinuxCNC uses the spindle speed and the "
"machine acceleration limits to calculate how long it will take Z to "
"accelerate after the index pulse, and determines how many degrees the "
"spindle will rotate during that time. It then adds that angle to the index "
"position and computes the Z position using the corrected spindle angle. That "
"means that Z will reach the correct position just as it finishes "
"accelerating to the proper speed, and can immediately begin cutting a good "
"thread."
msgstr ""

#. type: Title ===
#: src/gcode/g-code.adoc:1088 src/gcode/g-code.adoc:1930
#: src/motion/switchkins.adoc:137
#, no-wrap
msgid "HAL Connections"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1093
msgid ""
"The pin 'spindle.N.at-speed' must be set or driven true for the motion to "
"start. Additionally spindle.N.revs must increase by 1 for each revolution of "
"the spindle and the spindle.N.index-enable pin must be connected to an "
"encoder (or resolver) counter which resets index-enable once per rev."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1096
msgid ""
"See the Integrators Manual for more information on spindle synchronized "
"motion."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:1097
#, no-wrap
msgid "G33 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1107
#, no-wrap
msgid ""
"G90 (absolute distance mode)\n"
"G0 X1 Z0.1 (rapid to position)\n"
"S100 M3 (start spindle turning)\n"
"G33 Z-2 K0.125 (move Z axis to -2 at a rate to equal 0.125 per revolution)\n"
"G0 X1.25 (rapid move tool away from work)\n"
"Z0.1 (rapid move to starting Z position)\n"
"M2 (end program)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1111 src/gcode/g-code.adoc:1177
msgid ""
"See <<gcode:g90-g91,G90>> & <<gcode:g0,G0>> & <<mcode:m2-m30,M2>> sections "
"for more information."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1115 src/gcode/g-code.adoc:1181
msgid "All axis words are omitted."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1116
msgid "The spindle is not turning when this command is executed."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1118
msgid ""
"The requested linear motion exceeds machine velocity limits due to the "
"spindle speed."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1120
#, no-wrap
msgid "G33.1 Rigid Tapping(((G33.1 Rigid Tapping)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1125
#, no-wrap
msgid "G33.1 X- Y- Z- K- I- $-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1129
msgid "'I' - optional spindle speed multiplier for faster return move"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1130
msgid "'$' - optional spindle selector"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1137
msgid ""
"For Z only tapping preposition the XY location prior to calling G33.1 and "
"only use a Z word in the G33.1. If the coordinates specified are not the "
"current coordinates when calling G33.1 for tapping the move will not be "
"along the Z axis but will be a coordinated, spindle-synchronized move from "
"the current location to the location specified and back."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1141
msgid ""
"For rigid tapping (spindle synchronized motion with return), code 'G33.1 X- "
"Y- Z- K-' where 'K-' gives the distance moved for each revolution of the "
"spindle."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1143
msgid "A rigid tapping move consists of the following sequence:"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1147
msgid ""
"A move from the current coordinate to the specified coordinate, synchronized "
"with the selected spindle at the given ratio and starting from the current "
"coordinate with a spindle index pulse."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1150
msgid ""
"When reaching the endpoint, a command to reverse the spindle, and speed up "
"by a factor set by the multiplier (e.g., from clockwise to counterclockwise)."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1152
msgid ""
"Continued synchronized motion beyond the specified end coordinate until the "
"spindle actually stops and reverses."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1153
msgid "Continued synchronized motion back to the original coordinate."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1156
msgid ""
"When reaching the original coordinate, a command to reverse the spindle a "
"second time (e.g., from counterclockwise to clockwise)."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1158
msgid ""
"Continued synchronized motion beyond the original coordinate until the "
"spindle actually stops and reverses."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1159
msgid "An *unsynchronized* move back to the original coordinate."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1162
msgid ""
"Spindle-synchronized motions wait for spindle index, so multiple passes line "
"up.'G33.1' moves end at the original coordinate."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:1165
#, no-wrap
msgid "G33.1 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1173
#, no-wrap
msgid ""
"G90 (set absolute mode)\n"
"G0 X1.000 Y1.000 Z0.100 (rapid move to starting position)\n"
"S100 M3 (turn on the spindle, 100 RPM)\n"
"G33.1 Z-0.750 K0.05 (rigid tap a 20 TPI thread 0.750 deep)\n"
"M2 (end program)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1182
msgid "The spindle is not turning when this command is executed"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1184
msgid ""
"The requested linear motion exceeds machine velocity limits due to the "
"spindle speed"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1186
#, no-wrap
msgid "G38.n Straight Probe(((G38.n Probe)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1191
#, no-wrap
msgid "G38.n axes\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1195
msgid ""
"'G38.2' - probe toward workpiece, stop on contact, signal error if failure"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1196
msgid "'G38.3' - probe toward workpiece, stop on contact"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1198
msgid ""
"'G38.4' - probe away from workpiece, stop on loss of contact, signal error "
"if failure"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1199
msgid "'G38.5' - probe away from workpiece, stop on loss of contact"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1208
msgid ""
"You will not be able to use a probe move until your machine has been set up "
"to provide a probe input signal.  The probe input signal must be connected "
"to 'motion.probe-input' in a .hal file.  G38.n uses motion.probe-input to "
"determine when the probe has made (or lost) contact.  TRUE for probe contact "
"closed (touching), FALSE for probe contact open."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1216
msgid ""
"Program 'G38.n axes' to perform a straight probe operation.  The axis words "
"are optional, except that at least one of them must be used.  The axis words "
"together define the destination point that the probe will move towards, "
"starting from the current location.  If the probe is not tripped before the "
"destination is reached G38.2 and G38.4 will signal an error."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1218
msgid "The tool in the spindle must be a probe or contact a probe switch."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1228
msgid ""
"In response to this command, the machine moves the controlled point (which "
"should be at the center of the probe ball) in a straight line at the current "
"<<sec:set-feed-rate,feed rate>> toward the programmed point.  In inverse "
"time feed mode, the feed rate is such that the whole motion from the current "
"point to the programmed point would take the specified time.  The move stops "
"(within machine acceleration limits) when the programmed point is reached, "
"or when the requested change in the probe input takes place, whichever "
"occurs first."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:1230
#, no-wrap
msgid "Probing G-Codes"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1233
#, no-wrap
msgid "Target State"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1233
#, no-wrap
msgid "Move orientation"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1234
#, no-wrap
msgid "Error Signal"
msgstr ""

#. type: Labeled list
#: src/gcode/g-code.adoc:1234 src/gcode/overview.adoc:452
#: src/gcode/rs274ngc.adoc:69
#, no-wrap
msgid "G38.2"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1234 src/gcode/g-code.adoc:1235
#, no-wrap
msgid "Touched"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1234 src/gcode/g-code.adoc:1235
#, no-wrap
msgid "Toward piece"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1235 src/gcode/overview.adoc:453
#, no-wrap
msgid "G38.3"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1236 src/gcode/overview.adoc:454
#, no-wrap
msgid "G38.4"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1236 src/gcode/g-code.adoc:1237
#, no-wrap
msgid "Untouched"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1236 src/gcode/g-code.adoc:1237
#, no-wrap
msgid "From piece"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1237 src/gcode/overview.adoc:455
#, no-wrap
msgid "G38.5"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1251
msgid ""
"After successful probing, parameters #5061 to #5069 will be set to the X, Y, "
"Z, A, B, C, U, V, W coordinates of the location of the controlled point at "
"the time the probe changed state (in the current work coordinate system).  "
"After unsuccessful probing, they are set to the coordinates of the "
"programmed point.  Parameter 5070 is set to 1 if the probe succeeded and 0 "
"if the probe failed.  If the probing operation failed, G38.2 and G38.4 will "
"signal an error by posting an message on screen if the selected GUI supports "
"that.  And by halting program execution."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1257
msgid ""
"A comment of the form '(PROBEOPEN filename.txt)' will open 'filename.txt' "
"and store the 9-number coordinate consisting of XYZABCUVW of each successful "
"straight probe in it.  The file must be closed with '(PROBECLOSE)'. For more "
"information see the <<gcode:comments,Comments>> section."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1263
msgid ""
"An example file 'smartprobe.ngc' is included (in the examples directory)  to "
"demonstrate using probe moves to log to a file the coordinates of a part.  "
"The program 'smartprobe.ngc' could be used with 'ngcgui' with minimal "
"changes."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1267
msgid "the current point is the same as the programmed point."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1268
msgid "no axis word is used"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1269
msgid "cutter compensation is enabled"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1270
msgid "the feed rate is zero"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1271
msgid "the probe is already in the target state"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1273
#, no-wrap
msgid "G40 Compensation Off(((G40 Cutter Compensation Off)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1278
msgid ""
"'G40' - turn cutter compensation off. If tool compensation was on the next "
"move must be a linear move and longer than the tool diameter.  It is OK to "
"turn compensation off when it is already off."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:1279
#, no-wrap
msgid "G40 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1286
#, no-wrap
msgid ""
"; current location is X1 after finishing cutter compensated move\n"
"G40 (turn compensation off)\n"
"G0 X1.6 (linear move longer than current cutter diameter)\n"
"M2 (end program)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1289
msgid ""
"See <<gcode:g0,G0>> & <<mcode:m2-m30,M2>> sections for more information."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1293
msgid "A G2/G3 arc move is programmed next after a G40."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1295
msgid ""
"The linear move after turning compensation off is less than the tool "
"diameter."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1297
#, no-wrap
msgid "G41, G42 Cutter Compensation(((G41 G42 Cutter Compensation)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1303
#, no-wrap
msgid ""
"G41 <D-> (left of programmed path)\n"
"G42 <D-> (right of programmed path)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1306
msgid "'D' - tool number"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1310
msgid ""
"The D word is optional; if there is no D word the radius of the currently "
"loaded tool will be used (if no tool is loaded and no D word is given, a "
"radius of 0 will be used)."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1314
msgid ""
"If supplied, the D word is the tool number to use.  This would normally be "
"the number of the tool in the spindle (in which case the D word is redundant "
"and need not be supplied), but it may be any valid tool number."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1324
msgid ""
"'G41/G42 D0' is a little special.  Its behavior is different on random tool "
"changer machines and nonrandom tool changer machines (see the <<mcode:m6,"
"Tool Change>> section).  On nonrandom tool changer machines, 'G41/G42 D0' "
"applies the Tool Length Offset of the tool currently in the spindle, or a "
"TLO of 0 if no tool is in the spindle. On random tool changer machines, 'G41/"
"G42 D0' applies the TLO of the tool T0 defined in the tool table file (or "
"causes an error if T0 is not defined in the tool table)."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1328
msgid ""
"To start cutter compensation to the left of the part profile, use G41.  G41 "
"starts cutter compensation to the left of the programmed line as viewed from "
"the positive end of the axis perpendicular to the plane."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1332
msgid ""
"To start cutter compensation to the right of the part profile, use G42.  G42 "
"starts cutter compensation to the right of the programmed line as viewed "
"from the positive end of the axis perpendicular to the plane."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1335
msgid ""
"The lead in move must be at least as long as the tool radius.  The lead in "
"move can be a rapid move."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1338
msgid ""
"Cutter compensation may be performed if the XY-plane or XZ-plane is active."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1340
msgid "User M100-M199 commands are allowed when Cutter Compensation is on."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1344
msgid ""
"The behavior of the machining center when cutter compensation is on is "
"described in the <<sec:cutter-radius-compensation,Cutter Compensation>> "
"section along with code examples."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1348
msgid "The D number is not a valid tool number or 0."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1349 src/gcode/g-code.adoc:1370
msgid "The YZ plane is active."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1350 src/gcode/g-code.adoc:1373
msgid "Cutter compensation is commanded to turn on when it is already on."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1352
#, no-wrap
msgid "G41.1, G42.1 Dynamic Cutter Compensation(((G41.1 G42.1 Dynamic Compensation)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1358
#, no-wrap
msgid ""
"G41.1 D- <L-> (left of programmed path)\n"
"G42.1 D- <L-> (right of programmed path)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1361
msgid "'D' - cutter diameter"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1362
msgid ""
"'L' - tool orientation (see <<sec:lathe-tool-orientation,lathe tool "
"orientation>>)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1366
msgid ""
"G41.1 & G42.1 function the same as G41 & G42 with the added scope of being "
"able to program the tool diameter. The L word defaults to 0 if unspecified."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1371
msgid "The L number is not in the range from 0 to 9 inclusive."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1372
msgid "The L number is used when the XZ plane is not active."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1375
#, no-wrap
msgid "G43 Tool Length Offset(((G43 Tool Length Offset)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1380
#, no-wrap
msgid "G43 <H->\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1383
msgid "'H' - tool number (optional)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1389
msgid ""
"'G43' - enables tool length compensation.  G43 changes subsequent motions by "
"offsetting the axis coordinates by the length of the offset. G43 does not "
"cause any motion. The next time a compensated axis is moved, that axis's "
"endpoint is the compensated location."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1392
msgid ""
"'G43' without an H word uses the currently loaded tool from the last 'Tn M6'."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1394
msgid "'G43 Hn' uses the offset for tool n."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1404
msgid ""
"'G43 H0' is a little special.  Its behavior is different on random tool "
"changer machines and nonrandom tool changer machines (see the <<sub:tool-"
"changers,Tool Changers>> section).  On nonrandom tool changer machines, 'G43 "
"H0' applies the Tool Length Offset of the tool currently in the spindle, or "
"a TLO of 0 if no tool is in the spindle.  On random tool changer machines, "
"'G43 H0' applies the TLO of the tool T0 defined in the tool table file (or "
"causes an error if T0 is not defined in the tool table)."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:1405
#, no-wrap
msgid "G43 H- Example Line"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1409
#, no-wrap
msgid "G43 H1 (set tool offsets using the values from tool 1 in the tool table)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1414
msgid "the H number is not an integer, or"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1415
msgid "the H number is negative, or"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1418
msgid ""
"the H number is not a valid tool number (though note that 0 is a valid tool "
"number on nonrandom tool changer machines, it means \"the tool currently in "
"the spindle\")"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1420
#, no-wrap
msgid "G43.1 Dynamic Tool Length Offset(((G43.1 Dynamic Tool Length Offset)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1425
#, no-wrap
msgid "G43.1 axes\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1431
msgid ""
"'G43.1 axes' - change subsequent motions by replacing the current offset(s) "
"of axes.  G43.1 does not cause any motion. The next time a compensated axis "
"is moved, that axis's endpoint is the compensated location."
msgstr ""

#. FIXME Use of G43.1 with I and K words ?
#. To use dynamic tool length compensation in a program, use 'G43.1 I- K-',
#. where 'I-' gives the compensation of tool length in X (for lathes) and 'K-'
#. gives the compensation length in Z (for lathes and milling machines).
#. type: Block title
#: src/gcode/g-code.adoc:1439
#, no-wrap
msgid "G43.1 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1446
#, no-wrap
msgid ""
"G90 (set absolute mode)\n"
"T1 M6 G43 (load tool 1 and tool length offsets, Z is at machine 0 and DRO shows Z1.500)\n"
"G43.1 Z0.250 (offset current tool offset by 0.250, DRO now shows Z1.250)\n"
"M2 (end program)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1450
msgid ""
"See <<gcode:g90-g91,G90>> & <<sec:select-tool,T>> & <<mcode:m6,M6>> sections "
"for more information."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1454
msgid "motion is commanded on the same line as 'G43.1'"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1457
msgid "G43.1 does not write to the tool table."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1459
#, no-wrap
msgid "G43.2 Apply additional Tool Length Offset(((G43.2 Apply additional Tool Length Offset)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1464
#, no-wrap
msgid "G43.2 H- axes-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1467
msgid "'H' - tool number"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1469
msgid "'G43.2' - applies an additional simultaneous tool offset."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:1470
#, no-wrap
msgid "G43.2 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1478
#, no-wrap
msgid ""
"G90 (set absolute mode)\n"
"T1 M6 (load tool 1)\n"
"G43 (or G43 H1 - replace all tool offsets with T1's offset)\n"
"G43.2 H10 (also add in T10's tool offset)\n"
"M2 (end program)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1484
msgid ""
"You can sum together an arbitrary number of offsets by calling G43.2 more "
"times.  There are no built-in assumptions about which numbers are geometry "
"offsets and which are wear offsets, or that you should have only one of each."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1488
msgid ""
"Like the other G43 commands, G43.2 does not cause any motion. The next time "
"a compensated axis is moved, that axis's endpoint is the compensated "
"location."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1492
msgid "'H' is unspecified and no axis offsets are specified."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1494
msgid ""
"'H' is specified and the given tool number does not exist in the tool table."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1495
msgid "'H' is specified and axes are also specified."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1497
msgid "G43.2 does not write to the tool table."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1499
#, no-wrap
msgid "G49 Cancel Tool Length Compensation(((G49 Cancel Tool Length Offset)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1502
msgid "'G49' - cancels tool length compensation"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1506
msgid ""
"It is OK to program using the same offset already in use. It is also OK to "
"program using no tool length offset if none is currently being used."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1508
#, no-wrap
msgid "G52 Local Coordinate System Offset(((Local Offsets)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1513
#, no-wrap
msgid "G52 axes\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1518
msgid ""
"G52 is used in a part program as a temporary \"local coordinate system offset"
"\" within the workpiece coordinate system. More information on G52 is in the "
"<<gcode:g52,Local and Global Offsets>> section."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1520
#, no-wrap
msgid "G53 Move in Machine Coordinates(((G53 Machine Coordinates)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1525
#, no-wrap
msgid "G53 axes\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1531
msgid ""
"To move in the <<sec:machine-coordinate-system,machine coordinate system>>, "
"program 'G53' on the same line as a linear move. 'G53' is not modal and must "
"be programmed on each line. 'G0' or 'G1' does not have to be programmed on "
"the same line if one is currently active."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1534
msgid ""
"For example 'G53 G0 X0 Y0 Z0' will move the axes to the home position even "
"if the currently selected coordinate system has offsets in effect."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:1535
#, no-wrap
msgid "G53 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1540
#, no-wrap
msgid ""
"G53 G0 X0 Y0 Z0 (rapid linear move to the machine origin)\n"
"G53 X2 (rapid linear move to absolute coordinate X2)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1543 src/gcode/g-code.adoc:2533
msgid "See <<gcode:g0,G0>> section for more information."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1547
msgid "G53 is used without G0 or G1 being active,"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1548
msgid "or G53 is used while cutter compensation is on."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1550
#, no-wrap
msgid "G54-G59.3 Select Coordinate System(((G54-G59.3 Select Coordinate System)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1553
#, no-wrap
msgid "'G54'   - select coordinate system 1\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1554
#, no-wrap
msgid "'G55'   - select coordinate system 2\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1555
#, no-wrap
msgid "'G56'   - select coordinate system 3\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1556
#, no-wrap
msgid "'G57'   - select coordinate system 4\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1557
#, no-wrap
msgid "'G58'   - select coordinate system 5\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1558
#, no-wrap
msgid "'G59'   - select coordinate system 6\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1559
#, no-wrap
msgid "'G59.1' - select coordinate system 7\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1560
#, no-wrap
msgid "'G59.2' - select coordinate system 8\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1561
#, no-wrap
msgid "'G59.3' - select coordinate system 9\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1564
msgid ""
"The coordinate systems store the axis values and the XY rotation angle "
"around the Z axis in the parameters shown in the following table."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:1565
#, no-wrap
msgid "Coordinate System Parameters"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1568
#, no-wrap
msgid "Select"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1568
#, no-wrap
msgid "CS"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1569 src/gcode/overview.adoc:132 src/gui/axis.adoc:640
#, no-wrap
msgid "R"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1569
#, no-wrap
msgid "5221"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1569
#, no-wrap
msgid "5222"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1569
#, no-wrap
msgid "5223"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1569
#, no-wrap
msgid "5224"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1569
#, no-wrap
msgid "5225"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1569
#, no-wrap
msgid "5226"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1569
#, no-wrap
msgid "5227"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1569
#, no-wrap
msgid "5228"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1569
#, no-wrap
msgid "5229"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1570
#, no-wrap
msgid "5230"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1571
#, no-wrap
msgid "5250"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1571
#, no-wrap
msgid "5261"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1571
#, no-wrap
msgid "5262"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1571
#, no-wrap
msgid "5263"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1571
#, no-wrap
msgid "5264"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1571
#, no-wrap
msgid "5265"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1571
#, no-wrap
msgid "5266"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1571
#, no-wrap
msgid "5267"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1571
#, no-wrap
msgid "5268"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1571
#, no-wrap
msgid "5269"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1572
#, no-wrap
msgid "5270"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1572
#, no-wrap
msgid "5281"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1572
#, no-wrap
msgid "5282"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1572
#, no-wrap
msgid "5283"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1572
#, no-wrap
msgid "5284"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1572
#, no-wrap
msgid "5285"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1572
#, no-wrap
msgid "5286"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1572
#, no-wrap
msgid "5287"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1572
#, no-wrap
msgid "5288"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1572
#, no-wrap
msgid "5289"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1573
#, no-wrap
msgid "5290"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1573
#, no-wrap
msgid "5301"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1573
#, no-wrap
msgid "5302"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1573
#, no-wrap
msgid "5303"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1573
#, no-wrap
msgid "5304"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1573
#, no-wrap
msgid "5305"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1573
#, no-wrap
msgid "5306"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1573
#, no-wrap
msgid "5307"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1573
#, no-wrap
msgid "5308"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1573
#, no-wrap
msgid "5309"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1574
#, no-wrap
msgid "5310"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1574
#, no-wrap
msgid "5321"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1574
#, no-wrap
msgid "5322"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1574
#, no-wrap
msgid "5323"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1574
#, no-wrap
msgid "5324"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1574
#, no-wrap
msgid "5325"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1574
#, no-wrap
msgid "5326"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1574
#, no-wrap
msgid "5327"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1574
#, no-wrap
msgid "5328"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1574
#, no-wrap
msgid "5329"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1575
#, no-wrap
msgid "5330"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1575
#, no-wrap
msgid "5341"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1575
#, no-wrap
msgid "5342"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1575
#, no-wrap
msgid "5343"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1575
#, no-wrap
msgid "5344"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1575
#, no-wrap
msgid "5345"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1575
#, no-wrap
msgid "5346"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1575
#, no-wrap
msgid "5347"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1575
#, no-wrap
msgid "5348"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1575
#, no-wrap
msgid "5349"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1576
#, no-wrap
msgid "5350"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1576
#, no-wrap
msgid "5361"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1576
#, no-wrap
msgid "5362"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1576
#, no-wrap
msgid "5363"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1576
#, no-wrap
msgid "5364"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1576
#, no-wrap
msgid "5365"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1576
#, no-wrap
msgid "5366"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1576
#, no-wrap
msgid "5367"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1576
#, no-wrap
msgid "5368"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1576
#, no-wrap
msgid "5369"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1577
#, no-wrap
msgid "5370"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1577
#, no-wrap
msgid "5381"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1577
#, no-wrap
msgid "5382"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1577
#, no-wrap
msgid "5383"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1577
#, no-wrap
msgid "5384"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1577
#, no-wrap
msgid "5385"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1577
#, no-wrap
msgid "5386"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1577
#, no-wrap
msgid "5387"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1577
#, no-wrap
msgid "5388"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1577
#, no-wrap
msgid "5389"
msgstr ""

#. type: Table
#: src/gcode/g-code.adoc:1578
#, no-wrap
msgid "5390"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1583
msgid "selecting a coordinate system is used while cutter compensation is on."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1586 src/gcode/g-code.adoc:2600
msgid ""
"See the <<cha:coordinate-system,Coordinate System>> section for an overview "
"of coordinate systems."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1588
#, no-wrap
msgid "G61 Exact Path Mode(((G61 Exact Path Mode)))(((Trajectory Control)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1593
msgid ""
"'G61' - Exact path mode, movement exactly as programmed.  Moves will slow or "
"stop as needed to reach every programmed point. If two sequential moves are "
"exactly co-linear movement will not stop."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1595
#, no-wrap
msgid "G61.1 Exact Stop Mode(((G61.1 Exact Stop Mode)))(((Trajectory Control)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1599
msgid ""
"'G61.1' - Exact stop mode, movement will stop at the end of each programmed "
"segment."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1601
#, no-wrap
msgid "G64 Path Blending(((G64 Path Blending)))(((Trajectory Control)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1606
#, no-wrap
msgid "G64 <P- <Q->>\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1609
msgid "'P' - motion blending tolerance"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1610
msgid "'Q' - naive cam tolerance"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1612
msgid ""
"'G64' - best possible speed. Without P means to keep the best speed "
"possible, no matter how far away from the programmed point you end up."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1613
msgid "'G64 P-' - Blend between best speed and deviation tolerance"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1635
msgid ""
"'G64 P- <Q- >' blending with tolerance.  It is a way to fine tune your "
"system for best compromise between speed and accuracy.  The P- tolerance "
"means that the actual path will be no more than P- away from the programmed "
"endpoint. The velocity will be reduced if needed to maintain the path.  In "
"addition, when you activate G64 P- Q- it turns on the 'Naive CAM Detector'; "
"when there are a series of linear XYZ feed moves at the same <<sec:set-feed-"
"rate,feed rate>> that are less than Q- away from being collinear, they are "
"collapsed into a single linear move.  On G2/G3 moves in the G17 (XY) plane "
"when the maximum deviation of an arc from a straight line is less than the "
"G64 P- tolerance the arc is broken into two lines (from start of arc to "
"midpoint, and from midpoint to end). those lines are then subject to the "
"naive cam algorithm for lines. Thus, line-arc, arc-arc, and arc-line cases "
"as well as line-line benefit from the 'naive cam detector'. This improves "
"contouring performance by simplifying the path. It is OK to program for the "
"mode that is already active. See also the <<sec:trajectory-control,"
"Trajectory Control>> section for more information on these modes.  If Q is "
"not specified then it will have the same behavior as before and use the "
"value of P-."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:1636
#, no-wrap
msgid "G64 P- Example Line"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1640
#, no-wrap
msgid "G64 P0.015 (set path following to be within 0.015 of the actual path)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1644
msgid ""
"It is a good idea to include a path control specification in the preamble of "
"each G-code file."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1646
#, no-wrap
msgid "G70 Lathe finishing cycle(((G70 Lathe finishing cycle)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1651
#, no-wrap
msgid "G70 Q- <X-> <Z-> <D-> <E-> <P->\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1654 src/gcode/g-code.adoc:1703
msgid "'Q' - The subroutine number."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1655 src/gcode/g-code.adoc:1704
msgid "'X' - The starting X position, defaults to the initial position."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1656 src/gcode/g-code.adoc:1705
msgid "'Z' - The starting Z position, defaults to the initial position."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1657
msgid "'D' - The starting distance of the profile, defaults to 0."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1658
msgid "'E' - The ending distance of the profile, defaults to 0."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1659
msgid "'P' - The number of passes to use, defaults to 1."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1662
msgid ""
"The 'G70' cycle is intended to be used after the shape of the profile given "
"in the subroutine with number Q has been cut with G71 or G72."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1664 src/gcode/g-code.adoc:1740
#: src/gcode/g-code.adoc:1771
msgid "Preliminary motion."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1666
msgid ""
"If Z or X are used a <<gcode:g0,rapid move>> to that position is done. This "
"position is also used between each finishing pass."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1668
msgid "Then a <<gcode:g0,rapid move>> to the start of the profile is executed."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1670
msgid ""
"The path given in Q- is followed using the <<gcode:g1,G1>> and <<gcode:g2-"
"g3>> commands."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1672
msgid ""
"If a next pass is required there is another rapid to the intermediate "
"location, before a rapid is done to the start of the profile."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1674
msgid ""
"After the final pass, the tool is left at the end of the profile including "
"E-."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1677
msgid ""
"Multiple passes.  The distance between the pass and the final profile is "
"(pass-1)*(D-E)/P+E.  Where pass the pass number and D,E and P are the D/E/P "
"numbers."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1679
msgid ""
"The distance is computed using the starting position of the cycle, with a "
"positive distance towards this point."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1682
msgid ""
"Fillet and chamfers in the profile.  It is possible to add fillets or "
"chamfers in the profile, see <<gcode:g71-g72>> for more details."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1686 src/gcode/g-code.adoc:1750
msgid "There is no subroutine defined with the number given in Q."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1687 src/gcode/g-code.adoc:1751
msgid "The path given in the profile is not monotonic in Z or X."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1688 src/gcode/g-code.adoc:1752
msgid "<<gcode:g17-g19.1>> has not been used to select the ZX plane."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1690
#, no-wrap
msgid "G71 G72 Lathe roughing cycles(((G71 G72 Lathe roughing cycles)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1700
#, no-wrap
msgid ""
"G71   Q- <X-> <Z-> <D-> <I-> <R->\n"
"G71.1 Q- <X-> <Z-> <D-> <I-> <R->\n"
"G71.2 Q- <X-> <Z-> <D-> <I-> <R->\n"
"G72   Q- <X-> <Z-> <D-> <I-> <R->\n"
"G72.1 Q- <X-> <Z-> <D-> <I-> <R->\n"
"G72.2 Q- <X-> <Z-> <D-> <I-> <R->\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1706
msgid "'D' - The remaining distance to the profile, defaults to 0."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1707
msgid "'I' - The cutting increment, defaults to 1."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1708
msgid "'R' - The retracting distance, defaults to 0.5."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1715
msgid ""
"The G71/G72 cycle is intended to rough cut a profile on a lathe. The G71 "
"cycles remove layers of the material while traversing in the Z direction.  "
"The G72 cycles remove material while traversing the X axis, the so called "
"facing cycle. The direction of travel is the same as in the path given in "
"the subroutine. For the G71 cycle the Z coordinate must be monotonically "
"changing, for the G72 this is required for the X axis."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1727
msgid ""
"The profile is given in a subroutine with number Q-. This subroutine may "
"contain G0, G1, G2 and G3 motion commands. All other commands are ignored, "
"including feed and speed settings. The <<gcode:g0>> commands are interpreted "
"as <<gcode:g1,G1>> commands. Each motion command may also include an "
"optional A- or C- number.  If the number A- is added a fillet with the "
"radius given by A will be inserted at the endpoint of that motion, if this "
"radius is too large the algorithm will fail with a non-monotonic path error. "
"It is also possible to use the C- number, which allows a chamfer to be "
"inserted. This chamfer has the same endpoints as a fillet of the same "
"dimension would have but a straight line is inserted instead of an arc."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1730
msgid ""
"When in absolute mode the U (for X) and W (for Z) can be used as incremental "
"displacements."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1736
msgid ""
"The G7x.1 cycles do not cut pockets. The G7x.2 cycles only cut after the "
"first pocket and continue where G7x.1 stopped. It is advisible to leave some "
"additional material to cut before the G7x.2 cycle, so if G7x.1 used a D1.0 "
"the G7x.2 can use D0.5 and 0.5mm will be removed while moving from one "
"pocket to the next."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1738
msgid "The normal G7x cycles cut the entire profile in one cycle."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1742
msgid "If Z or X are used a <<gcode:g0,rapid move>> to that position is done."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1744
msgid ""
"After the profile has been cut, the tool stops at the end of the profile, "
"including the distance specified in D."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1746
msgid ""
"The D number is used to keep a distance from the final profile, to allow "
"material to remain for finishing."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1753
msgid "<<gcode:g41-g42>> is active."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1755
#, no-wrap
msgid "G73 Drilling Cycle with Chip Breaking(((G73 Drilling Cycle with Chip Break)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1760
#, no-wrap
msgid "G73 X- Y- Z- R- Q- <L->\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1763
msgid "'R' - retract position along the Z axis."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1764
msgid "'Q' - delta increment along the Z axis."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1765
msgid "'L' - repeat"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1769
msgid ""
"The 'G73' cycle is drilling or milling with chip breaking.  This cycle takes "
"a Q number which represents a 'delta' increment along the Z axis."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1773
msgid ""
"If the current Z position is below the R position, The Z axis does a <<gcode:"
"g0,rapid move>> to the R position."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1774
msgid "Move to the X Y coordinates"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1776
msgid ""
"Move the Z-axis only at the current <<sec:set-feed-rate,feed rate>> downward "
"by delta or to the Z position, whichever is less deep."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1777
msgid "Rapid up .010 of an inch or 0.254 mm."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1778
msgid "Repeat steps 2 and 3 until the Z position is reached at step 2."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1779
msgid "The Z axis does a rapid move to the R position."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1783 src/gcode/g-code.adoc:2397
msgid "the Q number is negative or zero."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1784
msgid "the R number is not specified"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1786
#, no-wrap
msgid "G74 Left-hand Tapping Cycle with Dwell(((G74 Left-hand Tapping Cycle with Dwell)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1791
#, no-wrap
msgid "G74 (X- Y- Z-) or (U- V- W-) R- L- P- $- F-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1794 src/gcode/g-code.adoc:2407
msgid "'R-' - Retract position along the Z axis."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1796 src/gcode/g-code.adoc:2409
msgid ""
"'L-' - Used in incremental mode; number of times to repeat the cycle.  See "
"<<gcode:g81,G81>> for examples."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1797 src/gcode/g-code.adoc:2410
msgid "'P-' - Dwell time (seconds)."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1798 src/gcode/g-code.adoc:2411
msgid "'$-' - Selected spindle."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1800 src/gcode/g-code.adoc:2413
msgid ""
"'F-' - Feed rate (spindle speed multiplied by distance traveled per "
"revolution (thread pitch))."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1802
msgid "G74 does not use synchronized motion."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1805
msgid ""
"The 'G74' cycle is intended for tapping with floating chuck and dwell at the "
"bottom of the hole."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1808 src/gcode/g-code.adoc:2216
#: src/gcode/g-code.adoc:2351 src/gcode/g-code.adoc:2387
#: src/gcode/g-code.adoc:2421 src/gcode/g-code.adoc:2448
#: src/gcode/g-code.adoc:2467 src/gcode/g-code.adoc:2503
msgid ""
"Preliminary motion, as described in the <<gcode:preliminary-motion,"
"Preliminary and In-Between Motion>> section."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1809 src/gcode/g-code.adoc:2422
msgid "Disable Feed and Speed Overrides."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1810 src/gcode/g-code.adoc:2423
msgid "Move the Z-axis at the current feed rate to the Z position."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1811 src/gcode/g-code.adoc:2424
msgid "Stop the selected spindle (chosen by the $ parameter)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1812
msgid "Start spindle rotation clockwise."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1813 src/gcode/g-code.adoc:2354
#: src/gcode/g-code.adoc:2426 src/gcode/g-code.adoc:2470
#: src/gcode/g-code.adoc:2506
msgid "Dwell for the P number of seconds."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1814 src/gcode/g-code.adoc:2427
msgid "Move the Z-axis at the current feed rate to clear Z"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1815 src/gcode/g-code.adoc:2428
msgid "Restore Feed and Speed override enables to previous state"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1821
msgid ""
"The length of the dwell is specified by a 'P-' word in the G74 block.  The "
"feed rate 'F-' is spindle speed multiplied by distance per revolution "
"(thread pitch).  In example S100 with 1.25MM per revolution thread pitch "
"gives a feed of F125."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1823
#, no-wrap
msgid "G76 Threading Cycle(((G76 Threading Cycle)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1828
#, no-wrap
msgid "G76 P- Z- I- J- R- K- Q- H- E- L- $-\n"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/g-code.adoc:1830 src/gcode/g-code.adoc:1831
#, no-wrap
msgid "G76 Threading"
msgstr ""

#. type: Target for macro image
#: src/gcode/g-code.adoc:1831
#, no-wrap
msgid "images/g76-threads_en.svg"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1834
msgid "'Drive Line' - A line through the initial X position parallel to the Z."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1835
msgid "'P-' - The 'thread pitch' in distance per revolution."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1837
msgid ""
"'Z-' - The final position of threads. At the end of the cycle the tool will "
"be at this Z position."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1842
msgid ""
"When G7 'Lathe Diameter Mode' is in force the values for 'I', 'J' and 'K' "
"are diameter measurements. When G8 'Lathe Radius Mode' is in force the "
"values for 'I', 'J' and 'K' are radius measurements."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1848
msgid ""
"'I-' - The 'thread peak' offset from the 'drive line'.  Negative 'I' values "
"are external threads, and positive 'I' values are internal threads.  "
"Generally the material has been turned to this size before the 'G76' cycle."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1850
msgid ""
"'J-' - A positive value specifying the 'initial cut depth'.  The first "
"threading cut will be 'J' beyond the 'thread peak' position."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1852
msgid ""
"'K-' - A positive value specifying the 'full thread depth'.  The final "
"threading cut will be 'K' beyond the 'thread peak' position."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1854
msgid "Optional settings"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1860
msgid ""
"'$-' - The spindle number to which the motion will be synchronised (default "
"0).  For example is $1 is programmed then the motion will begin on the reset "
"od spindle.1.index-enable and proceed in synchrony with the value of "
"spindle.1.revs"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1867
msgid ""
"'R-' - The 'depth degression'. 'R1.0' selects constant depth on successive "
"threading passes. 'R2.0' selects constant area.  Values between 1.0 and 2.0 "
"select decreasing depth but increasing area.  Values above 2.0 select "
"decreasing area.  Beware that unnecessarily high degression values will "
"cause a large number of passes to be used. (degression = a descent by stages "
"or steps.)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1871
msgid ""
"Unnecessarily high degression values will produce an unnecessarily high "
"number of passes. (degressing = dive in stages)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1878
msgid ""
"'Q-' - The 'compound slide angle' is the angle (in degrees) describing to "
"what extent successive passes should be offset along the drive line.  This "
"is used to cause one side of the tool to remove more material than the "
"other. A positive 'Q' value causes the leading edge of the tool to cut more "
"heavily.  Typical values are 29, 29.5 or 30."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1881
msgid ""
"'H-' - The number of 'spring passes'.  Spring passes are additional passes "
"at full thread depth.  If no additional passes are desired, program 'H0'."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1884
msgid ""
"Thread entries and exits can be programmed tapered with the 'E' and 'L' "
"values."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1891
msgid ""
"'E-' - Specifies the distance along the drive line used for the taper.  The "
"angle of the taper will be so the last pass tapers to the thread crest over "
"the distance specified with E.  'E0.2' will give a taper for the first/last "
"0.2 length units along the thread.  For a 45 degree taper program E the same "
"as K."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1898
msgid ""
"'L-' - Specifies which ends of the thread get the taper.  Program 'L0' for "
"no taper (the default), 'L1' for entry taper, 'L2' for exit taper, or 'L3' "
"for both entry and exit tapers.  Entry tapers will pause at the drive line "
"to synchronize with the index pulse then move at the <<sec:set-feed-rate,"
"feed rate>> in to the beginning of the taper. No entry taper and the tool "
"will rapid to the cut depth then synchronize and begin the cut."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1902
msgid ""
"The tool is moved to the initial X and Z positions prior to issuing the G76. "
"The X position is the 'drive line' and the Z position is the start of the "
"threads."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1907
msgid ""
"The tool will pause briefly for synchronization before each threading pass, "
"so a relief groove will be required at the entry unless the beginning of the "
"thread is past the end of the material or an entry taper is used."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1916
msgid ""
"Unless using an exit taper, the exit move is not synchronized to the spindle "
"speed and will be a <<gcode:g0,rapid move>>. With a slow spindle, the exit "
"move might take only a small fraction of a revolution. If the spindle speed "
"is increased after several passes are complete, subsequent exit moves will "
"require a larger portion of a revolution, resulting in a very heavy cut "
"during the exit move. This can be avoided by providing a relief groove at "
"the exit, or by not changing the spindle speed while threading."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1920
msgid ""
"The final position of the tool will be at the end of the 'drive line'.  A "
"safe Z move will be needed with an internal thread to remove the tool from "
"the hole."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1924
msgid "The active plane is not the ZX plane."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1925
msgid "Other axis words, such as X- or Y-, are specified."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1926
msgid "The 'R-' degression value is less than 1.0."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1927
msgid "All the required words are not specified."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1928
msgid "'P-', 'J-', 'K-' or 'H-' is negative."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1929
msgid "'E-' is greater than half the drive line length."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1935
msgid ""
"The pins 'spindle.N.at-speed' and the 'encoder.n.phase-Z' for the spindle "
"must be connected in your HAL file before G76 will work.  See the <<sec:"
"motion-pins,spindle>> pins in the Motion section for more information."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1939
msgid ""
"The G76 canned cycle is based on the G33 Spindle Synchronized Motion.  For "
"more information see the G33 <<gcode:g33-tech-info,Technical Info>>."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1943
msgid ""
"The sample program 'g76.ngc' shows the use of the G76 canned cycle, and can "
"be previewed and executed on any machine using the 'sim/lathe.ini' "
"configuration."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:1944
#, no-wrap
msgid "G76 Example Code"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:1949
#, no-wrap
msgid ""
"G0 Z-0.5 X0.2\n"
"G76 P0.05 Z-1 I-.075 J0.008 K0.045 Q29.5 L2 E0.045\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1955
msgid ""
"In the figure the tool is in the final position after the G76 cycle is "
"completed. You can see the entry path on the right from the Q29.5 and the "
"exit path on the left from the L2 E0.045. The white lines are the cutting "
"moves."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/g-code.adoc:1956 src/gcode/g-code.adoc:1957
#, no-wrap
msgid "G76 Example"
msgstr ""

#. type: Target for macro image
#: src/gcode/g-code.adoc:1957
#, no-wrap
msgid "images/g76-01.png"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:1960
#, no-wrap
msgid "G80-G89 Canned Cycles(((G80-G89 Canned Cycles)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1964
msgid ""
"The canned cycles 'G81' through 'G89' and the canned cycle stop 'G80' are "
"described in this section."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1973
msgid ""
"All canned cycles are performed with respect to the currently-selected "
"plane. Any of the nine planes may be selected. Throughout this section, most "
"of the descriptions assume the XY-plane has been selected. The behavior is "
"analogous if another plane is selected, and the correct words must be used. "
"For instance, in the 'G17.1' plane, the action of the canned cycle is along "
"W, and the locations or increments are given with U and V. In this case "
"substitute U,V,W for X,Y,Z in the instructions below."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1978
msgid ""
"Rotary axis words are not allowed in canned cycles. When the active plane is "
"one of the XYZ family, the UVW axis words are not allowed. Likewise, when "
"the active plane is one of the UVW family, the XYZ axis words are not "
"allowed."
msgstr ""

#. type: Title ===
#: src/gcode/g-code.adoc:1979
#, no-wrap
msgid "Common Words"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1985
msgid ""
"All canned cycles use X, Y, Z, or U, V, W groups depending on the plane "
"selected and R words. The R (usually meaning retract) position is along the "
"axis perpendicular to the currently selected plane (Z-axis for XY-plane, "
"etc.) Some canned cycles use additional arguments."
msgstr ""

#. type: Title ===
#: src/gcode/g-code.adoc:1986
#, no-wrap
msgid "Sticky Words"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1993
msgid ""
"For canned cycles, we will call a number 'sticky' if, when the same cycle is "
"used on several lines of code in a row, the number must be used the first "
"time, but is optional on the rest of the lines. Sticky numbers keep their "
"value on the rest of the lines if they are not explicitly programmed to be "
"different. The R number is always sticky."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:1999
msgid ""
"In incremental distance mode X, Y, and R numbers are treated as increments "
"from the current position and Z as an increment from the Z-axis position "
"before the move involving Z takes place. In absolute distance mode, the X, "
"Y, R, and Z numbers are absolute positions in the current coordinate system."
msgstr ""

#. type: Title ===
#: src/gcode/g-code.adoc:2000
#, no-wrap
msgid "Repeat Cycle"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2016
msgid ""
"The L number is optional and represents the number of repeats.  L=0 is not "
"allowed. If the repeat feature is used, it is normally used in incremental "
"distance mode, so that the same sequence of motions is repeated in several "
"equally spaced places along a straight line. When L- is greater than 1 in "
"incremental mode with the XY-plane selected, the X and Y positions are "
"determined by adding the given X and Y numbers either to the current X and Y "
"positions (on the first go-around) or to the X and Y positions at the end of "
"the previous go-around (on the repetitions). Thus, if you program 'L10' , "
"you will get 10 cycles. The first cycle will be distance X,Y from the "
"original location. The R and Z positions do not change during the repeats. "
"The L number is not sticky. In absolute distance mode, L>1 means 'do the "
"same cycle in the same place several times', Omitting the L word is "
"equivalent to specifying L=1."
msgstr ""

#. type: Title ===
#: src/gcode/g-code.adoc:2017
#, no-wrap
msgid "Retract Mode"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2024
msgid ""
"The height of the retract move at the end of each repeat (called 'clear Z' "
"in the descriptions below) is determined by the setting of the retract mode, "
"either to the original Z position (if that is above the R position and the "
"retract mode is 'G98', OLD_Z), or otherwise to the R position. See the "
"<<gcode:g98-g99,G98 G99>> section."
msgstr ""

#. type: Title ===
#: src/gcode/g-code.adoc:2026
#, no-wrap
msgid "Canned Cycle Errors(((Canned Cycle Errors)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2031
msgid "axis words are all missing during a canned cycle,"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2032
msgid "axis words from different groups (XYZ) (UVW) are used together,"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2033
msgid "a P number is required and a negative P number is used,"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2034
msgid "an L number is used that does not evaluate to a positive integer,"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2035
msgid "rotary axis motion is used during a canned cycle,"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2036
msgid "inverse time feed rate is active during a canned cycle,"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2037
msgid "or cutter compensation is active during a canned cycle."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2040
msgid ""
"If the XY plane is active, the Z number is sticky, and it is an error if:"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2043
msgid ""
"the Z number is missing and the same canned cycle was not already active,"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2044
msgid "or the R number is less than the Z number."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2047
msgid ""
"If other planes are active, the error conditions are analogous to the XY "
"conditions above."
msgstr ""

#. type: Title ===
#: src/gcode/g-code.adoc:2049
#, no-wrap
msgid "Preliminary and In-Between Motion"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2055
msgid ""
"Preliminary motion is a set of motions that is common to all of the milling "
"canned cycles. If the current Z position is below the R position, the Z axis "
"does a <<gcode:g0,rapid move>> to the R position. This happens only once, "
"regardless of the value of L."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2058
msgid ""
"In addition, at the beginning of the first cycle and each repeat, the "
"following one or two moves are made:"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2061
msgid ""
"A <<gcode:g0,rapid move>> parallel to the XY-plane to the given XY-position."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2063
msgid ""
"The Z-axis make a rapid move to the R position, if it is not already at the "
"R position."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2066
msgid ""
"If another plane is active, the preliminary and in-between motions are "
"analogous."
msgstr ""

#. type: Title ===
#: src/gcode/g-code.adoc:2067
#, no-wrap
msgid "Why use a canned cycle?"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2072
msgid ""
"There are at least two reasons for using canned cycles. The first is the "
"economy of code. A single bore would take several lines of code to execute."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2080
msgid ""
"The G81 <<gcode:g81-example,Example 1>> demonstrates how a canned cycle "
"could be used to produce 8 holes with ten lines of G-code within the canned "
"cycle mode.  The program below will produce the same set of 8 holes using "
"five lines for the canned cycle. It does not follow exactly the same path "
"nor does it drill in the same order as the earlier example. But the program "
"writing economy of a good canned cycle should be obvious."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2083
msgid "Line numbers are not needed but help clarify these examples."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2084
#, no-wrap
msgid "Eight Holes"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2096
#, no-wrap
msgid ""
"N100 G90 G0 X0 Y0 Z0 (move coordinate home)\n"
"N110 G1 F10 X0 G4 P0.1\n"
"N120 G91 G81 X1 Y0 Z-1 R1 L4(canned drill cycle)\n"
"N130 G90 G0 X0 Y1\n"
"N140 Z0\n"
"N150 G91 G81 X1 Y0 Z-0.5 R1 L4(canned drill cycle)\n"
"N160 G80 (turn off canned cycle)\n"
"N170 M2 (program end)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2101
msgid ""
"The G98 on the second line above means that the return move will be to the Z "
"value on the first line since it is higher than the specified R value."
msgstr ""

#. type: Target for macro image
#: src/gcode/g-code.adoc:2102
#, no-wrap
msgid "images/eight-holes_en.svg"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2104
#, no-wrap
msgid "Twelve Holes in a Square"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2110
msgid ""
"This example demonstrates the use of the L word to repeat a set of "
"incremental drill cycles for successive blocks of code within the same G81 "
"motion mode. Here we produce 12 holes using five lines of code in the canned "
"motion mode."
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2124
#, no-wrap
msgid ""
"N1000 G90 G0 X0 Y0 Z0 (move coordinate home)\n"
"N1010 G1 F50 X0 G4 P0.1\n"
"N1020 G91 G81 X1 Y0 Z-0.5 R1 L4 (canned drill cycle)\n"
"N1030 X0 Y1 R0 L3 (repeat)\n"
"N1040 X-1 Y0 L3 (repeat)\n"
"N1050 X0 Y-1 L2 (repeat)\n"
"N1060 G80 (turn off canned cycle)\n"
"N1070 G90 G0 X0 (rapid move home)\n"
"N1080 Y0\n"
"N1090 Z0\n"
"N1100 M2 (program end)\n"
msgstr ""

#. type: Target for macro image
#: src/gcode/g-code.adoc:2126
#, no-wrap
msgid "images/twelve-holes_en.svg"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2131
msgid ""
"The second reason to use a canned cycle is that they all produce preliminary "
"moves and returns that you can anticipate and control regardless of the "
"start point of the canned cycle."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2133
#, no-wrap
msgid "G80 Cancel Canned Cycle(((G80 Cancel Modal Motion)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2138
msgid ""
"'G80' - cancel canned cycle modal motion. 'G80' is part of modal group 1, so "
"programming any other G-code from modal group 1 will also cancel the canned "
"cycle."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2142
msgid "Axis words are programmed when G80 is active."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2143
#, no-wrap
msgid "G80 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2149
#, no-wrap
msgid ""
"G90 G81 X1 Y1 Z1.5 R2.8 (absolute distance canned cycle)\n"
"G80 (turn off canned cycle motion)\n"
"G0 X0 Y0 Z0 (rapid move to coordinate home)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2153
msgid ""
"The following code produces the same final position and machine state as the "
"previous code."
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2159
#, no-wrap
msgid ""
"G90 G81 X1 Y1 Z1.5 R2.8 (absolute distance canned cycle)\n"
"G0 X0 Y0 Z0 (rapid move to coordinate home)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2165
msgid ""
"The advantage of the first set is that, the G80 line clearly turns off the "
"G81 canned cycle. With the first set of blocks, the programmer must turn "
"motion back on with G0, as is done in the next line, or any other motion "
"mode G word."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2170
msgid ""
"If a canned cycle is not turned off with G80 or another motion word, the "
"canned cycle will attempt to repeat itself using the next block of code that "
"contains an X, Y, or Z word. The following file drills (G81) a set of eight "
"holes as shown in the following caption."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2171
#, no-wrap
msgid "G80 Example 1"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2189
#, no-wrap
msgid ""
"N100 G90 G0 X0 Y0 Z0 (coordinate home)\n"
"N110 G1 X0 G4 P0.1\n"
"N120 G81 X1 Y0 Z0 R1 (canned drill cycle)\n"
"N130 X2\n"
"N140 X3\n"
"N150 X4\n"
"N160 Y1 Z0.5\n"
"N170 X3\n"
"N180 X2\n"
"N190 X1\n"
"N200 G80 (turn off canned cycle)\n"
"N210 G0 X0 (rapid move home)\n"
"N220 Y0\n"
"N230 Z0\n"
"N240 M2 (program end)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2195
msgid ""
"Notice the Z position change after the first four holes.  Also, this is one "
"of the few places where line numbers have some value, being able to point a "
"reader to a specific line of code."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2201
msgid ""
"The use of G80 in line N200 is optional because the G0 on the next line will "
"turn off the G81 cycle. But using the G80 as shown in Example 1, will "
"provide for easier to read canned cycle. Without it, it is not so obvious "
"that all of the blocks between N120 and N200 belong to the canned cycle."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2203
#, no-wrap
msgid "G81 Drilling Cycle(((G81 Drilling Cycle)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2208
#, no-wrap
msgid "G81 (X- Y- Z-) or (U- V- W-) R- L-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2211
msgid "The 'G81' cycle is intended for drilling."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2213
msgid "The cycle functions as follows:"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2218 src/gcode/g-code.adoc:2353
msgid ""
"Move the Z-axis at the current <<sec:set-feed-rate,feed rate>> to the Z "
"position."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2219 src/gcode/g-code.adoc:2355
#: src/gcode/g-code.adoc:2393 src/gcode/g-code.adoc:2472
msgid "The Z-axis does a <<gcode:g0,rapid move>> to clear Z."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/g-code.adoc:2220 src/gcode/g-code.adoc:2221
#, no-wrap
msgid "G81 Cycle"
msgstr ""

#. type: Target for macro image
#: src/gcode/g-code.adoc:2221
#, no-wrap
msgid "images/g81mult_en.svg"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2224
#, no-wrap
msgid "Example 1 - Absolute Position G81"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2228 src/gcode/g-code.adoc:2297
#, no-wrap
msgid "G90 G98 G81 X4 Y5 Z1.5 R2.8\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2232 src/gcode/g-code.adoc:2259
msgid ""
"Suppose the current position is (X1, Y2, Z3) and the preceding line of NC "
"code is interpreted."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2235
msgid ""
"This calls for absolute distance mode (G90) and OLD_Z retract mode (G98) and "
"calls for the G81 drilling cycle to be performed once."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2237
msgid "The X value and X position are 4."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2238
msgid "The Y value and Y position are 5."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2239
msgid "The Z value and Z position are 1.5."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2240
msgid "The R value and clear Z are 2.8. OLD_Z is 3."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2242
msgid "The following moves take place:"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2244
msgid "A <<gcode:g0,rapid move>> parallel to the XY plane to (X4, Y5)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2245
msgid "A rapid move move parallel to the Z-axis to (Z2.8)."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2247
msgid ""
"Move parallel to the Z-axis at the <<sec:set-feed-rate,feed rate>> to (Z1.5)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2248
msgid "A rapid move parallel to the Z-axis to (Z3)"
msgstr ""

#. type: Target for macro image
#: src/gcode/g-code.adoc:2249
#, no-wrap
msgid "images/g81ex1_en.svg"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2251
#, no-wrap
msgid "Example 2 - Relative Position G81"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2255 src/gcode/g-code.adoc:2316
#, no-wrap
msgid "G91 G98 G81 X4 Y5 Z-0.6 R1.8 L3\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2266
msgid ""
"This calls for incremental distance mode (G91) and OLD_Z retract mode (G98). "
"It also calls for the G81 drilling cycle to be repeated three times. The X "
"value is 4, the Y value is 5, the Z value is -0.6 and the R value is 1.8. "
"The initial X position is 5 (=1+4), the initial Y position is 7 (=2+5), the "
"clear Z position is 4.8 (=1.8+3), and the Z position is 4.2 (=4.8-0.6). "
"OLD_Z is 3."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2269
msgid ""
"The first preliminary move is a maximum rapid move along the Z axis to (X1,"
"Y2,Z4.8), since OLD_Z < clear Z."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2271
msgid "The first repeat consists of 3 moves."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2273
msgid "A <<gcode:g0,rapid move>> parallel to the XY-plane to (X5, Y7)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2275
msgid ""
"Move parallel to the Z-axis at the <<sec:set-feed-rate,feed rate>> to (Z4.2)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2276
msgid "A rapid move parallel to the Z-axis to (X5, Y7, Z4.8)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2279
msgid ""
"The second repeat consists of 3 moves. The X position is reset to 9 (=5+4) "
"and the Y position to 12 (=7+5)."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2281
msgid "A <<gcode:g0,rapid move>> parallel to the XY-plane to (X9, Y12, Z4.8)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2282
msgid "Move parallel to the Z-axis at the feed rate to (X9, Y12, Z4.2)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2283
msgid "A rapid move parallel to the Z-axis to (X9, Y12, Z4.8)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2286
msgid ""
"The third repeat consists of 3 moves. The X position is reset to 13 (=9+4) "
"and the Y position to 17 (=12+5)."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2288
msgid "A <<gcode:g0,rapid move>> parallel to the XY-plane to (X13, Y17, Z4.8)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2289
msgid "Move parallel to the Z-axis at the feed rate to (X13, Y17, Z4.2)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2290
msgid "A rapid move parallel to the Z-axis to (X13, Y17, Z4.8)"
msgstr ""

#. type: Target for macro image
#: src/gcode/g-code.adoc:2291
#, no-wrap
msgid "images/g81ex2_en.svg"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2293
#, no-wrap
msgid "Example 3 - Relative Position G81"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2301
msgid ""
"Now suppose that you execute the first G81 block of code but from (X0, Y0, "
"Z0) rather than from (X1, Y2, Z3)."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2306
msgid ""
"Since OLD_Z is below the R value, it adds nothing for the motion but since "
"the initial value of Z is less than the value specified in R, there will be "
"an initial Z move during the preliminary moves."
msgstr ""

#. type: Target for macro image
#: src/gcode/g-code.adoc:2307
#, no-wrap
msgid "images/g81_en.svg"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2309
#, no-wrap
msgid "Example 4 - Absolute G81 R > Z"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2312
msgid "This is a plot of the path of motion for the second g81 block of code."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2322
msgid ""
"Since this plot starts with (X0, Y0, Z0), the interpreter adds the initial "
"Z0 and R1.8 and rapid moves to that location. After that initial Z move, the "
"repeat feature works the same as it did in example 3 with the final Z depth "
"being 0.6 below the R value."
msgstr ""

#. type: Target for macro image
#: src/gcode/g-code.adoc:2323
#, no-wrap
msgid "images/g81a_en.svg"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2325
#, no-wrap
msgid "Example 5 - Relative position R > Z"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2330
#, no-wrap
msgid "G90 G98 G81 X4 Y5 Z-0.6 R1.8\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2337
msgid ""
"Since this plot starts with (X0, Y0, Z0), the interpreter adds the initial "
"Z0 and R1.8 and rapid moves to that location as in 'Example 4'.  After that "
"initial Z move, the <<gcode:g0,rapid move>> to X4 Y5 is done.  Then the "
"final Z depth being 0.6 below the R value. The repeat function would make "
"the Z move in the same location again."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2339
#, no-wrap
msgid "G82 Drilling Cycle, Dwell(((G82 Drilling Cycle Dwell)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2344
#, no-wrap
msgid "G82 (X- Y- Z-) or (U- V- W-) R- L- P-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2348
msgid ""
"The 'G82' cycle is intended for drilling with a dwell at the bottom of the "
"hole."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2359
msgid ""
"The motion of a G82 canned cycle looks just like G81 with the addition of a "
"dwell at the bottom of the Z move. The length of the dwell is specified by a "
"'P-' word in the G82 block."
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2363
#, no-wrap
msgid "G90 G82 G98 X4 Y5 Z1.5 R2.8 P2\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2367
msgid ""
"This will be similar to example 3 above, just with an added dwell of 2 "
"seconds at the bottom of the hole."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2369
#, no-wrap
msgid "G83 Peck Drilling Cycle(((G83 Peck Drilling)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2374
#, no-wrap
msgid "G83 (X- Y- Z-) or (U- V- W-) R- L- Q-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2384
msgid ""
"The 'G83' cycle (often called peck drilling) is intended for deep drilling "
"ormilling with chip breaking. The retracts in this cycle clear the hole of "
"chips and cut off any long stringers (which are common when drilling in "
"aluminum). This cycle takes a Q number which represents a 'delta' increment "
"along the Z-axis. The retract before final depth will always be to the "
"'retract' plane even if G98 is in effect. The final retract will honor the "
"G98/99 in effect. G83 functions the same as G81 with the addition of "
"retracts during the drilling operation."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2389
msgid ""
"Move the Z-axis at the current <<sec:set-feed-rate,feed rate>> downward by "
"delta or to the Z position, whichever is less deep."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2390
msgid "Rapid move back out to the retract plane specified by the R word."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2391
msgid ""
"Rapid move back down to the current hole bottom, less .010 of an inch or "
"0.254 mm."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2392
msgid "Repeat steps 2, 3, and 4 until the Z position is reached at step 2."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2399
#, no-wrap
msgid "G84 Right-hand Tapping Cycle, Dwell(((G84 Right-hand Tapping Cycle Dwell)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2404
#, no-wrap
msgid "G84 (X- Y- Z-) or (U- V- W-) R- L- P- $- F-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2416
msgid "G84 does not use synchronized motion."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2419
msgid ""
"The 'G84' cycle is intended for tapping with floating chuck and dwell at the "
"bottom of the hole."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2425
msgid "Start spindle rotation counterclockwise."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2434
msgid ""
"The length of the dwell is specified by a 'P-' word in the G84 block.  The "
"feed rate 'F-' is spindle speed multiplied by distance per revolution "
"(thread pitch).  In example S100 with 1.25MM per revolution thread pitch "
"gives a feed of F125."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2436
#, no-wrap
msgid "G85 Boring Cycle, Feed Out(((G85 Boring, Feed Out)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2441
#, no-wrap
msgid "G85 (X- Y- Z-) or (U- V- W-) R- L-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2445
msgid ""
"The 'G85' cycle is intended for boring or reaming, but could be used for "
"drilling or milling."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2450 src/gcode/g-code.adoc:2469
#: src/gcode/g-code.adoc:2505
msgid ""
"Move the Z-axis only at the current <<sec:set-feed-rate,feed rate>> to the Z "
"position."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2452
msgid ""
"Retract the Z-axis at the current feed rate to the R plane if it is lower "
"than the initial Z."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2453
msgid "Retract at the traverse rate to clear Z."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2455
#, no-wrap
msgid "G86 Boring Cycle, Spindle Stop, Rapid Move Out(((G86 Boring, Spindle Stop, Rapid Move Out)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2460
#, no-wrap
msgid "G86 (X- Y- Z-) or (U- V- W-) R- L- P- $-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2464
msgid ""
"The 'G86' cycle is intended for boring. This cycle uses a P number for the "
"number of seconds to dwell."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2471
msgid "Stop the selected spindle turning. (Chosen by the $ parameter)"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2473
msgid "Restart the spindle in the direction it was going."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2477
msgid "the spindle is not turning before this cycle is executed."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2479
#, no-wrap
msgid "G87 Back Boring Cycle(((G87 Back Boring Cycle)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2483 src/gcode/g-code.adoc:2489
msgid ""
"This code is currently unimplemented in LinuxCNC. It is accepted, but the "
"behavior is undefined."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2485
#, no-wrap
msgid "G88 Boring Cycle, Spindle Stop, Manual Out(((G88 Boring Cycle, Spindle Stop, Manual Out)))"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2491
#, no-wrap
msgid "G89 Boring Cycle, Dwell, Feed Out(((G89 Boring, Dwell, Feed Out)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2496
#, no-wrap
msgid "G89 (X- Y- Z-) or (U- V- W-) R- L- P-\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2500
msgid ""
"The 'G89' cycle is intended for boring. This cycle uses a P number, where P "
"specifies the number of seconds to dwell."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2507
msgid "Retract the Z-axis at the current feed rate to clear Z."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2509
#, no-wrap
msgid "G90, G91 Distance Mode(((G90, G91 Distance Mode)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2515
msgid ""
"'G90' - absolute distance mode In absolute distance mode, axis numbers (X, "
"Y, Z, A, B, C, U, V, W) usually represent positions in terms of the "
"currently active coordinate system. Any exceptions to that rule are "
"described explicitly in the <<gcode:g80-g89,G80 G89>> section."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2517
msgid ""
"'G91' - incremental distance mode In incremental distance mode, axis numbers "
"usually represent increments from the current coordinate."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2518
#, no-wrap
msgid "G90 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2523
#, no-wrap
msgid ""
"G90 (set absolute distance mode)\n"
"G0 X2.5 (rapid move to coordinate X2.5 including any offsets in effect)\n"
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2525
#, no-wrap
msgid "G91 Example"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2530
#, no-wrap
msgid ""
"G91 (set incremental distance mode)\n"
"G0 X2.5 (rapid move 2.5 from current position along the X axis)\n"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2535
#, no-wrap
msgid "G90.1, G91.1 Arc Distance Mode(((Arc Distance Mode)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2540
msgid ""
"'G90.1' - absolute distance mode for I, J & K offsets.  When G90.1 is in "
"effect I and J both must be specified with G2/3 for the XY plane or J and K "
"for the XZ plane or it is an error."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2542
msgid ""
"'G91.1' - incremental distance mode for I, J & K offsets.  G91.1 Returns I, "
"J & K to their default behavior."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2544
#, no-wrap
msgid "G92 Coordinate System Offset(((G92 Coordinate System Offset)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2549
#, no-wrap
msgid "G92 axes\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2554
msgid ""
"Only use 'G92' after your machine has been positioned to the desired point."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2560
msgid ""
"'G92' makes the current point have the coordinates you want (without "
"motion), where the axis words contain the axis numbers you want.  All axis "
"words are optional, except that at least one must be used.  If an axis word "
"is not used for a given axis, the offset for that axis will be zero."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2566
msgid ""
"When 'G92' is executed, the <<sec:machine-coordinate-system,origins>> of all "
"coordinate systems move. They move such that the value of the current "
"controlled point, in the currently active coordinate system, becomes the "
"specified value. All of the coordinate system's origins (G53-G59.3) are "
"offset this same distance."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2574
msgid ""
"'G92' uses the values stored in <<sub:numbered-parameters,parameters>> "
"5211-5219 as the X Y Z A B C U V W offset values for each axis.  The "
"parameter values are 'absolute' machine coordinates in the native machine "
"'units' as specified in the INI file.  All axes defined in the INI file will "
"be offset when G92 is active.  If an axis was not entered following the G92, "
"that axis' offset will be zero."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2579
msgid ""
"For example, suppose the current point is at X=4 and there is currently no "
"'G92' offset active. Then 'G92 X7' is programmed. This moves all origins -3 "
"in X, which causes the current point to become X=7. This -3 is saved in "
"parameter 5211."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2582
msgid ""
"Being in incremental distance mode (G91 instead of G90) has no effect on the "
"action of 'G92'."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2586
msgid ""
"'G92' offsets may be already be in effect when the 'G92' is called.  If this "
"is the case, the offset is replaced with a new offset that makes the current "
"point become the specified value."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2588
msgid "It is an error if all axis words are omitted."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2592
msgid ""
"LinuxCNC stores the G92 offsets and reuses them on the next run of a "
"program. To prevent this, one can program a G92.1 (to erase them), or "
"program a G92.2 (to remove them - they are still stored)."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2597
msgid ""
"The 'G52' command can also be used to change this offset; see the <<sec:g52-"
"and-g92-offsets,Offsets>> section for more details about 'G92' and 'G52' and "
"how they interact."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2603 src/gcode/machining-center.adoc:391
msgid ""
"See the <<sec:overview-parameters,Parameters>> section for more information."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2605
#, no-wrap
msgid "G92.1, G92.2 Reset G92 Offsets(((G92.1, G92.2 Reset G92 Offsets)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2609
msgid ""
"'G92.1' - turn off G92 offsets and reset <<sub:numbered-parameters,"
"parameters>> 5211 - 5219 to zero."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2611
msgid ""
"'G92.2' - turn off G92 offsets but keep <<sub:numbered-parameters,"
"parameters>> 5211 - 5219 available."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2616
msgid ""
"G92.1 only clears G92 offsets, to change G53-G59.3 coordinate system offsets "
"in G-code use either <<gcode:g10-l2,G10 L2>> or <<gcode:g10-l20,G10 L20>>."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2618
#, no-wrap
msgid "G92.3 Restore G92 Offsets(((G92.3 Restore G92 Offsets)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2622
msgid ""
"'G92.3' - set the G92 offset to the values saved in parameters 5211 to 5219"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2630
msgid ""
"You can set axis offsets in one program and use the same offsets in another "
"program. Program 'G92' in the first program. This will set parameters 5211 "
"to 5219. Do not use 'G92.1' in the remainder of the first program. The "
"parameter values will be saved when the first program exits and restored "
"when the second one starts up.  Use 'G92.3' near the beginning of the second "
"program. That will restore the offsets saved in the first program."
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2632
#, no-wrap
msgid "G93, G94, G95 Feed Rate Mode(((G93, G94, G95 Feed Rate Mode)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2639
msgid ""
"'G93' - is Inverse Time Mode.  In inverse time feed rate mode, an F word "
"means the move should be completed in [one divided by the F number] "
"minutes.  For example, if the F number is 2.0, the move should be completed "
"in half a minute."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2644
msgid ""
"When the inverse time feed rate mode is active, an F word must appear on "
"every line which has a G1, G2, or G3 motion, and an F word on a line that "
"does not have G1, G2, or G3 is ignored. Being in inverse time feed rate mode "
"does not affect G0 (<<gcode:g0,rapid move>>) motions."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2650
msgid ""
"'G94' - is Units per Minute Mode.  In units per minute feed mode, an F word "
"is interpreted to mean the controlled point should move at a certain number "
"of inches per minute, millimeters per minute, or degrees per minute, "
"depending upon what length units are being used and which axis or axes are "
"moving."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2659
msgid ""
"'G95' - is Units per Revolution Mode In units per revolution mode, an F word "
"is interpreted to mean the controlled point should move a certain number of "
"inches per revolution of the spindle, depending on what length units are "
"being used and which axis or axes are moving. G95 is not suitable for "
"threading, for threading use G33 or G76.  G95 requires that spindle.N.speed-"
"in to be connected. The actual spindle to which the feed is synchronised is "
"chosen by the $ parameter"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2664
msgid ""
"Inverse time feed mode is active and a line with G1, G2, or G3 (explicitly "
"or implicitly) does not have an F word."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2665
msgid "A new feed rate is not specified after switching to G94 or G95"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2667
#, no-wrap
msgid "G96, G97 Spindle Control Mode(((G96, G97 Spindle Control Mode)))"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2673
#, no-wrap
msgid ""
"G96 <D-> S- <$-> (Constant Surface Speed Mode)\n"
"G97 S- <$-> (RPM Mode)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2676
msgid "'D' - maximum rotation speed (RPM), optional"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2677
msgid "'S' - spindle speed"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2678
msgid "'$' - the spindle of which the speed will be varied, optional."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2680
msgid "'G96 S- <D->' - selects constant surface speed of 'S':"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2681
msgid "In feet per minute if G20 is in effect,"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2682
msgid "or meters per minute if G21 is in effect."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2687
msgid ""
"When using G96, ensure that X0 in the current coordinate system (including "
"offsets and tool lengths) is the center of rotation or LinuxCNC will not "
"give the desired surface speed.  G96 is not affected by radius or diameter "
"mode."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2690
msgid ""
"To achieve CSS mode on selected spindles programme successive G96 commands "
"for each spindle prior to issuing M3."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2692
msgid "'G97' selects RPM mode."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2693
#, no-wrap
msgid "G96 Example Line"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2697
#, no-wrap
msgid "G96 D2500 S250 (set CSS with a max rpm of 2500 and a surface speed of 250)\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2702
msgid "S is not specified with G96"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2703
msgid "A feed move is specified in G96 mode while the spindle is not turning"
msgstr ""

#. type: Title ==
#: src/gcode/g-code.adoc:2705
#, no-wrap
msgid "G98, G99 Canned Cycle Return Level(((G98, G99 Canned Cycle Return)))"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2709
msgid ""
"When spindle retracts during canned cycles, there are two options to choose "
"from for the way it does it:"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2712
msgid ""
"'G98' - retract to the position that axis was in just before this series of "
"one or more contiguous canned cycles was started."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2714
msgid ""
"'G99' - retract to the position specified by the R word of the canned cycle."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2720
msgid ""
"Program a 'G98' and the canned cycle will use the Z position prior to the "
"canned cycle as the Z return position if it is higher than the R value "
"specified in the cycle. If it is lower, the R value will be used. The R word "
"has different meanings in absolute distance mode and incremental distance "
"mode."
msgstr ""

#. type: Block title
#: src/gcode/g-code.adoc:2721
#, no-wrap
msgid "G98 Retract to Origin"
msgstr ""

#. type: delimited block -
#: src/gcode/g-code.adoc:2726
#, no-wrap
msgid ""
"G0 X1 Y2 Z3\n"
"G90 G98 G81 X4 Y5 Z-0.6 R1.8 F10\n"
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2731
msgid ""
"The G98 to the second line above means that the return move will be to the "
"value of Z in the first line since it is higher that the R value specified."
msgstr ""

#. type: Plain text
#: src/gcode/g-code.adoc:2737
msgid ""
"The 'initial' (G98) plane is reset any time cycle motion mode is abandoned, "
"whether explicitly (G80) or implicitly (any motion code that is not a "
"cycle). Switching among cycle modes (say G81 to G83) does NOT reset the "
"'initial' plane. It is possible to switch between G98 and G99 during a "
"series of cycles."
msgstr ""

#. type: Title =
#: src/gcode/machining-center.adoc:5
#, no-wrap
msgid "CNC Machine Overview(((Machine Overview)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:15
msgid ""
"This section gives a brief description of how a CNC machine is viewed from "
"the input and output ends of the Interpreter."
msgstr ""

#. type: Title ==
#: src/gcode/machining-center.adoc:16
#, no-wrap
msgid "Mechanical Components"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:24
msgid ""
"A CNC machine has many mechanical components that may be controlled or may "
"affect the way in which control is exercised. This section describes the "
"subset of those components that interact with the Interpreter. Mechanical "
"components that do not interact directly with the Interpreter, such as the "
"jog buttons, are not described here, even if they affect control."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:25
#, no-wrap
msgid "Axes(((axes)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:33
msgid ""
"Any CNC machine has one or more Axes. Different types of CNC machines have "
"different combinations. For instance, a '4-axis milling machine' may have "
"XYZA or XYZB axes. A lathe typically has XZ axes. A foam-cutting machine may "
"have XYUV axes. In LinuxCNC, the case of a XYYZ 'gantry' machine with two "
"motors for one axis is better handled by kinematics rather than by a second "
"linear axis."
msgstr ""

#. type: delimited block =
#: src/gcode/machining-center.adoc:42
msgid ""
"If the motion of mechanical components is not independent, as with hexapod "
"machines, the RS274/NGC language and the canonical machining functions will "
"still be usable, as long as the lower levels of control know how to control "
"the actual mechanisms to produce the same relative motion of tool and "
"workpiece as would be produced by independent axes.  This is called "
"'kinematics'."
msgstr ""

#. type: delimited block =
#: src/gcode/machining-center.adoc:49
msgid ""
"With LinuxCNC, the case of the XYYZ gantry machine with two motors for one "
"axis is better handled by the kinematics than by an additional linear axis."
msgstr ""

#. type: Block title
#: src/gcode/machining-center.adoc:51
#, no-wrap
msgid "Primary Linear Axes(((axes, primary linear)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:54
msgid ""
"The X, Y, and Z axes produce linear motion in three mutually orthogonal "
"directions."
msgstr ""

#. type: Block title
#: src/gcode/machining-center.adoc:55
#, no-wrap
msgid "Secondary Linear Axes(((axes, secondary linear)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:59
msgid ""
"The U, V, and W axes produce linear motion in three mutually orthogonal "
"directions. Typically, X and U are parallel, Y and V are parallel, and Z and "
"W are parallel."
msgstr ""

#. type: Block title
#: src/gcode/machining-center.adoc:60
#, no-wrap
msgid "Rotational Axes(((axes, rotational)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:64
msgid ""
"The A, B and C axes produce angular motion (rotation). Typically, A rotates "
"around a line parallel to X, B rotates around a line parallel to Y, and C "
"rotates around a line parallel to Z."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:65
#, no-wrap
msgid "Spindle(((spindle)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:73
msgid ""
"A CNC machine typically has a spindle which holds one cutting tool, probe, "
"or the material in the case of a lathe. The spindle may or may not be "
"controlled by the CNC software.  LinuxCNC offers support for up to 8 "
"spindles, which can be individually controlled and can run simultaneously at "
"different speeds and in different directions."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:74
#, no-wrap
msgid "Coolant(((coolant)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:79
msgid ""
"Flood coolant and mist coolant may each be turned on independently.  The "
"RS274/NGC language turns them off together see section <<mcode:m7-m8-m9,M7 "
"M8 M9>>."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:80
#, no-wrap
msgid "Feed and Speed Override(((feed override)))(((spindle override)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:85
msgid ""
"A CNC machine can have separate feed and speed override controls, which let "
"the operator specify that the actual feed rate or spindle speed used in "
"machining at some percentage of the programmed rate."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:86 src/gcode/machining-center.adoc:292
#, no-wrap
msgid "Block Delete Switch"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:90
msgid ""
"A CNC machine can have a block delete switch.  See the <<sub:block-delete-"
"switch,Block Delete>> section."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:92 src/gcode/machining-center.adoc:300
#, no-wrap
msgid "Optional Program Stop Switch"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:96
msgid ""
"A CNC machine can have an optional program stop switch.  See the <<sub:"
"optional-program-stop,Optional Program Stop>> section."
msgstr ""

#. type: Title ==
#: src/gcode/machining-center.adoc:97
#, no-wrap
msgid "Control and Data Components"
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:99
#, no-wrap
msgid "Linear Axes"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:104
msgid ""
"The X, Y, and Z axes form a standard right-handed coordinate system of "
"orthogonal linear axes. Positions of the three linear motion mechanisms are "
"expressed using coordinates on these axes."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:108
msgid ""
"The U, V and W axes also form a standard right-handed coordinate system. X "
"and U are parallel, Y and V are parallel, and Z and W are parallel (when A, "
"B, and C are rotated to zero)."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:109
#, no-wrap
msgid "Rotational Axes"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:119
msgid ""
"The rotational axes are measured in degrees as wrapped linear axes in which "
"the direction of positive rotation is counterclockwise when viewed from the "
"positive end of the corresponding X, Y, or Z-axis. By 'wrapped linear axis', "
"we mean one on which the angular position increases without limit (goes "
"towards plus infinity) as the axis turns counterclockwise and deceases "
"without limit (goes towards minus infinity) as the axis turns clockwise. "
"Wrapped linear axes are used regardless of whether or not there is a "
"mechanical limit on rotation."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:128
msgid ""
"Clockwise or counterclockwise is from the point of view of the workpiece. If "
"the workpiece is fastened to a turntable which turns on a rotational axis, a "
"counterclockwise turn from the point of view of the workpiece is "
"accomplished by turning the turntable in a direction that (for most common "
"machine configurations) looks clockwise from the point of view of someone "
"standing next to the machine. footnote:[If the parallelism requirement is "
"violated, the system builder will have to say how to distinguish clockwise "
"from counterclockwise.]"
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:130
#, no-wrap
msgid "Controlled Point(((Controlled Point)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:145
msgid ""
"The controlled point is the point whose position and rate of motion are "
"controlled. When the tool length offset is zero (the default value), this is "
"a point on the spindle axis (often called the gauge point) that is some "
"fixed distance beyond the end of the spindle, usually near the end of a tool "
"holder that fits into the spindle. The location of the controlled point can "
"be moved out along the spindle axis by specifying some positive amount for "
"the tool length offset.  This amount is normally the length of the cutting "
"tool in use, so that the controlled point is at the end of the cutting tool. "
"On a lathe, tool length offsets can be specified for X and Z axes, and the "
"controlled point is either at the tool tip or slightly outside it (where the "
"perpendicular, axis-aligned lines touched by the 'front' and 'side' of the "
"tool intersect)."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:147
#, no-wrap
msgid "Coordinated Linear Motion"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:162
msgid ""
"To drive a tool along a specified path, a machining center must often "
"coordinate the motion of several axes. We use the term 'coordinated linear "
"motion' to describe the situation in which, nominally, each axis moves at "
"constant speed and all axes move from their starting positions to their end "
"positions at the same time. If only the X, Y, and Z axes (or any one or two "
"of them) move, this produces motion in a straight line, hence the word "
"'linear' in the term. In actual motions, it is often not possible to "
"maintain constant speed because acceleration or deceleration is required at "
"the beginning and/or end of the motion. It is feasible, however, to control "
"the axes so that, at all times, each axis has completed the same fraction of "
"its required motion as the other axes. This moves the tool along same path, "
"and we also call this kind of motion coordinated linear motion."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:167
msgid ""
"Coordinated linear motion can be performed either at the prevailing feed "
"rate, or at traverse rate, or it may be synchronized to the spindle "
"rotation. If physical limits on axis speed make the desired rate "
"unobtainable, all axes are slowed to maintain the desired path."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:169
#, no-wrap
msgid "Feed Rate(((Feed Rate)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:176
msgid ""
"The rate at which the controlled point moves is nominally a steady rate "
"which may be set by the user. In the Interpreter, the feed rate is "
"interpreted as follows (unless 'inverse time feed' or 'feed per revolution' "
"modes are being used, in which case see section <<gcode:g93-g94-g95,G93-G94-"
"G95-Mode,G93 G94 G95>>)."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:180
msgid ""
"If any of XYZ are moving, F is in units per minute in the XYZ cartesian "
"system, and all other axes (ABCUVW) move so as to start and stop in "
"coordinated fashion."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:183
msgid ""
"Otherwise, if any of UVW are moving, F is in units per minute in the UVW "
"cartesian system, and all other axes (ABC) move so as to start and stop in "
"coordinated fashion."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:185
msgid ""
"Otherwise, the move is pure rotary motion and the F word is in rotary units "
"in the ABC 'pseudo-cartesian' system."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:186
#, no-wrap
msgid "Cooling(((Cooling)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:191
msgid ""
"Flood or droplets cooling can be enabled separately.  RS274/NGC language "
"stops them together.  See section about <<mcode:m7-m8-m9,cooling control>>."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:192
#, no-wrap
msgid "Dwell(((dwell)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:200
msgid ""
"A machining center may be commanded to dwell (i.e., keep all axes unmoving) "
"for a specific amount of time. The most common use of dwell is to break and "
"clear chips, so the spindle is usually turning during a dwell. Regardless of "
"the Path Control Mode (see section <<sec:path-control-mode,Path Control>>) "
"the machine will stop exactly at the end of the previous programmed move, as "
"though it was in exact path mode."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:201
#, no-wrap
msgid "Units(((units)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:211
msgid ""
"Units used for distances along the X, Y, and Z axes may be measured in "
"millimeters or inches. Units for all other quantities involved in machine "
"control cannot be changed. Different quantities use different specific "
"units. Spindle speed is measured in revolutions per minute.  The positions "
"of rotational axes are measured in degrees. Feed rates are expressed in "
"current length units per minute, or degrees per minute, or length units per "
"spindle revolution, as described in section <<gcode:g93-g94-g95,G93 G94 "
"G95>>."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:212
#, no-wrap
msgid "Current Position"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:218
msgid ""
"The controlled point is always at some location called the 'current "
"position', and the controller always knows where that is. The numbers "
"representing the current position must be adjusted in the absence of any "
"axis motion if any of several events take place:"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:220
msgid "Length units are changed."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:221
msgid "Tool length offset is changed."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:222
msgid "Coordinate system offsets are changed."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:223
#, no-wrap
msgid "Selected Plane"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:229
msgid ""
"There is always a 'selected plane', which must be the XY-plane, the YZ-"
"plane, or the XZ-plane of the machining center. The Z-axis is, of course, "
"perpendicular to the XY-plane, the X-axis to the YZ-plane, and the Y-axis to "
"the XZ-plane."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:230
#, no-wrap
msgid "Tool Carousel"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:233
msgid "Zero or one tool is assigned to each slot in the tool carousel."
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/machining-center.adoc:234 src/gcode/m-code.adoc:21
#: html/gcode.html:157
#, no-wrap
msgid "Tool Change"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:237
msgid "A machining center may be commanded to change tools."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:238
#, no-wrap
msgid "Pallet Shuttle"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:241
msgid "The two pallets may be exchanged by command."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:242
#, no-wrap
msgid "Speed Override"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:250
msgid ""
"The speed override buttons can be activated (they function normally) or "
"rendered inoperative (they no longer have any effect). The RS274/NGC "
"language has a command that activates all the buttons and another that "
"disables them.  See inhibition and activation <<mcode:m48-m49, speed "
"correctors>>.  See also <<sec:speed-interaction,here for further details>>."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:252
#, no-wrap
msgid "Path Control Mode(((Path Control Mode)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:256
msgid ""
"The machining center may be put into any one of three path control modes:"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:260
msgid ""
"In exact stop mode, the machine stops briefly at the end of each programmed "
"move."
msgstr ""

#. type: Labeled list
#: src/gcode/machining-center.adoc:260
#, no-wrap
msgid "exact path mode"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:264
msgid ""
"In exact path mode, the machine follows the programmed path as exactly as "
"possible, slowing or stopping if necessary at sharp corners of the path."
msgstr ""

#. type: Labeled list
#: src/gcode/machining-center.adoc:264
#, no-wrap
msgid "continuous mode"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:268
msgid ""
"In continuous mode, sharp corners of the path may be rounded slightly so "
"that the feed rate may be kept up (but by no more than the tolerance, if "
"specified)."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:270
msgid "See sections <<gcode:g61,G61>> and <<gcode:g64,G64>>."
msgstr ""

#. type: Title ==
#: src/gcode/machining-center.adoc:272
#, no-wrap
msgid "Interpreter Interaction with Switches"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:277
msgid ""
"The Interpreter interacts with several switches. This section describes the "
"interactions in more detail. In no case does the Interpreter know what the "
"setting of any of these switches is."
msgstr ""

#. type: Title ===
#: src/gcode/machining-center.adoc:279
#, no-wrap
msgid "Feed and Speed Override Switches(((Feed and Speed Interaction)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:285
msgid ""
"The Interpreter will interpret RS274/NGC commands which enable 'M48' or "
"disable 'M49' the feed and speed override switches. For certain moves, such "
"as the traverse out of the end of a thread during a threading cycle, the "
"switches are disabled automatically."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:288
msgid ""
"LinuxCNC reacts to the speed and feed override settings when these switches "
"are enabled."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:290
msgid ""
"See the <<mcode:m48-m49,M48 M49 Override>> section for more information."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:298
msgid ""
"If the block delete switch is on, lines of G-code which start with a slash "
"(the block delete character) are not interpreted. If the switch is off, such "
"lines are interpreted. Normally the block delete switch should be set before "
"starting the NGC program."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:304
msgid ""
"If this switch is on and an M1 code is encountered, program execution is "
"paused."
msgstr ""

#. type: Title ==
#: src/gcode/machining-center.adoc:305 src/gcode/tool-compensation.adoc:54
#, no-wrap
msgid "Tool Table(((Tool Table)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:310
msgid ""
"A tool table is required to use the Interpreter. The file tells which tools "
"are in which tool changer slots and what the size and type of each tool is. "
"The name of the tool table is defined in the INI file:"
msgstr ""

#. type: delimited block -
#: src/gcode/machining-center.adoc:314
#, no-wrap
msgid "[EMCIO]\n"
msgstr ""

#. type: delimited block -
#: src/gcode/machining-center.adoc:317
#, no-wrap
msgid ""
"# tool table file\n"
"TOOL_TABLE = tooltable.tbl\n"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:322
msgid ""
"The default filename probably looks something like the above, but you may "
"prefer to give your machine its own tool table, using the same name as your "
"INI file, but with a tbl extension:"
msgstr ""

#. type: delimited block -
#: src/gcode/machining-center.adoc:326
#, no-wrap
msgid "TOOL_TABLE = acme_300.tbl\n"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:329 src/plasma/qtplasmac.adoc:3436
msgid "or:"
msgstr ""

#. type: delimited block -
#: src/gcode/machining-center.adoc:333
#, no-wrap
msgid "TOOL_TABLE = EMC-AXIS-SIM.tbl\n"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:337
msgid ""
"For more information on the specifics of the tool table format, see the "
"<<sec:tool-table,Tool Table Format>> section."
msgstr ""

#. type: Title ==
#: src/gcode/machining-center.adoc:339 src/gcode/overview.adoc:179
#, no-wrap
msgid "Parameters(((Parameters)))"
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:350
msgid ""
"In the RS274/NGC language view, a machining center maintains an array of "
"numerical parameters defined by a system definition "
"(RS274NGC_MAX_PARAMETERS). Many of them have specific uses especially in "
"defining coordinate systems. The number of numerical parameters can increase "
"as development adds support for new parameters. The parameter array persists "
"over time, even if the machining center is powered down.  LinuxCNC uses a "
"parameter file to ensure persistence and gives the Interpreter the "
"responsibility for maintaining the file. The Interpreter reads the file when "
"it starts up, and writes the file when it exits."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:352
msgid "All parameters are available for use in G-code programs."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:362
msgid ""
"The format of a parameter file is shown in the following table.  The file "
"consists of any number of header lines, followed by one blank line, followed "
"by any number of lines of data. The Interpreter skips over the header lines. "
"It is important that there be exactly one blank line (with no spaces or "
"tabs, even) before the data. The header line shown in the following table "
"describes the data columns, so it is suggested (but not required) that that "
"line always be included in the header."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:365
msgid ""
"The Interpreter reads only the first two columns of the table. The third "
"column, 'Comment', is not read by the Interpreter."
msgstr ""

#. type: Plain text
#: src/gcode/machining-center.adoc:381
msgid ""
"Each line of the file contains the index number of a parameter in the first "
"column and the value to which that parameter should be set in the second "
"column. The value is represented as a double-precision floating point number "
"inside the Interpreter, but a decimal point is not required in the file. All "
"of the parameters shown in the following table are required parameters and "
"must be included in any parameter file, except that any parameter "
"representing a rotational axis value for an unused axis may be omitted. An "
"error will be signaled if any required parameter is missing. A parameter "
"file may include any other parameter, as long as its number is in the range "
"1 to 5400. The parameter numbers must be arranged in ascending order. An "
"error will be signaled if not. Any parameter included in the file read by "
"the Interpreter will be included in the file it writes as it exits. The "
"original file is saved as a backup file when the new file is written. "
"Comments are not preserved when the file is written."
msgstr ""

#. type: Block title
#: src/gcode/machining-center.adoc:382 src/gcode/overview.adoc:363
#, no-wrap
msgid "Parameter File Format"
msgstr ""

#. type: Table
#: src/gcode/machining-center.adoc:385 src/gcode/overview.adoc:366
#, no-wrap
msgid "Parameter Number"
msgstr ""

#. type: Table
#: src/gcode/machining-center.adoc:385 src/gcode/overview.adoc:367
#, no-wrap
msgid "Parameter Value"
msgstr ""

#. type: Table
#: src/gcode/machining-center.adoc:386
#, no-wrap
msgid "Comment"
msgstr ""

#. type: Table
#: src/gcode/machining-center.adoc:386 src/gcode/overview.adoc:367
#, no-wrap
msgid "5161"
msgstr ""

#. type: Table
#: src/gcode/machining-center.adoc:386 src/gcode/machining-center.adoc:387
#: src/gcode/overview.adoc:368 src/gcode/overview.adoc:369
#, no-wrap
msgid "0.0"
msgstr ""

#. type: Table
#: src/gcode/machining-center.adoc:387
#, no-wrap
msgid "G28 Home X"
msgstr ""

#. type: Table
#: src/gcode/machining-center.adoc:387 src/gcode/overview.adoc:368
#, no-wrap
msgid "5162"
msgstr ""

#. type: Table
#: src/gcode/machining-center.adoc:388
#, no-wrap
msgid "G28 Home Y"
msgstr ""

#. type: Title =
#: src/gcode/m-code.adoc:5
#, no-wrap
msgid "M-Codes"
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:11
#, no-wrap
msgid "M-Code Quick Reference Table"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:16
#, no-wrap
msgid "<<mcode:m0-m1,M0 M1>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/m-code.adoc:17 html/gcode.html:104
#, no-wrap
msgid "Program Pause"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:17
#, no-wrap
msgid "<<mcode:m2-m30,M2 M30>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/m-code.adoc:18 html/gcode.html:105
#, no-wrap
msgid "Program End"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:18
#, no-wrap
msgid "<<mcode:m60, M60>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/m-code.adoc:19 html/gcode.html:106
#, no-wrap
msgid "Pallet Change Pause"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:19
#, no-wrap
msgid "<<mcode:m3-m4-m5,M3 M4 M5>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:20
#, no-wrap
msgid "<<mcode:m6,M6>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:21
#, no-wrap
msgid "<<mcode:m7-m8-m9,M7 M8 M9>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/m-code.adoc:22 html/gcode.html:95
#, no-wrap
msgid "Coolant Control"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:22
#, no-wrap
msgid "<<mcode:m19,M19>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/m-code.adoc:23 html/gcode.html:91
#, no-wrap
msgid "Orient Spindle"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:23
#, no-wrap
msgid "<<mcode:m48-m49,M48 M49>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:24
#, no-wrap
msgid "Feed & Spindle Overrides Enable/Disable"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:24
#, no-wrap
msgid "<<mcode:m50,M50>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/m-code.adoc:25 html/gcode.html:132
#, no-wrap
msgid "Feed Override Control"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:25
#, no-wrap
msgid "<<mcode:m51,M51>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:26
#, no-wrap
msgid "Spindle Override Control"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:26
#, no-wrap
msgid "<<mcode:m52,M52>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/m-code.adoc:27 html/gcode.html:134
#, no-wrap
msgid "Adaptive Feed Control"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:27
#, no-wrap
msgid "<<mcode:m53,M53>>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/m-code.adoc:28 html/gcode.html:135
#, no-wrap
msgid "Feed Stop Control"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:28
#, no-wrap
msgid "<<mcode:m61,M61>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:29
#, no-wrap
msgid "Set Current Tool Number"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:29
#, no-wrap
msgid "<<mcode:m62-m65,m62-m65>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:30
#, no-wrap
msgid "Output Control"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:30
#, no-wrap
msgid "<<mcode:m66,M66>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:31
#, no-wrap
msgid "Input Control"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:31
#, no-wrap
msgid "<<mcode:m67,M67>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:32 src/gcode/m-code.adoc:33
#, no-wrap
msgid "Analog Output Control"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:32
#, no-wrap
msgid "<<mcode:m68,M68>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:33
#, no-wrap
msgid "<<mcode:m70,M70>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:34
#, no-wrap
msgid "Save Modal State"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:34
#, no-wrap
msgid "<<mcode:m71,M71>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:35
#, no-wrap
msgid "Invalidate Stored Modal State"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:35
#, no-wrap
msgid "<<mcode:m72,M72>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:36
#, no-wrap
msgid "Restore Modal State"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:36
#, no-wrap
msgid "<<mcode:m73,M73>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:37
#, no-wrap
msgid "Save Autorestore Modal State"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:37
#, no-wrap
msgid "<<mcode:m98-m99,M98 M99>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:38
#, no-wrap
msgid "Call and Return From Subprogram"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:38
#, no-wrap
msgid "<<mcode:m100-m199,M100-M199>>"
msgstr ""

#. type: Table
#: src/gcode/m-code.adoc:39
#, no-wrap
msgid "User Defined M-Codes"
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:42
#, no-wrap
msgid "M0, M1 Program Pause(((M0, M1 Program Pause)))(((M0 Mandatory Program Pause)))(((M1 Optional Program Pause)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:47
msgid ""
"'M0' - pause a running program temporarily. LinuxCNC remains in the Auto "
"Mode so MDI and other manual actions are not enabled. Pressing the resume "
"button will restart the program at the following line."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:51
msgid ""
"'M1' - pause a running program temporarily if the optional stop switch is "
"on.  LinuxCNC remains in the Auto Mode so MDI and other manual actions are "
"not enabled. Pressing the resume button will restart the program at the "
"following line."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:57
msgid ""
"It is OK to program 'M0' and 'M1' in MDI mode, but the effect will probably "
"not be noticeable, because normal behavior in MDI mode is to stop after each "
"line of input anyway."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:59
#, no-wrap
msgid "M2, M30 Program End(((M2 Program End)))(((M30 Pallet Exchange and Program End)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:63
msgid ""
"'M2' - end the program. Pressing `Cycle Start` (\"R\" in the Axis GUI)  will "
"restart the program at the beginning of the file."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:65
msgid ""
"'M30' - exchange pallet shuttles and end the program.  Pressing `Cycle "
"Start` will start the program at the beginning of the file."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:67
msgid "Both of these commands have the following effects:"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:69
msgid "Change from Auto mode to MDI mode."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:70
msgid "Origin offsets are set to the default (like 'G54')."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:71
msgid "Selected plane is set to XY plane (like 'G17')."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:72
msgid "Distance mode is set to absolute mode (like 'G90')."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:73
msgid "Feed rate mode is set to units per minute (like 'G94')."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:74
msgid "Feed and speed overrides are set to ON (like 'M48')."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:75
msgid "Cutter compensation is turned off (like 'G40')."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:76
msgid "The spindle is stopped (like 'M5')."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:77
msgid "The current motion mode is set to feed (like 'G1')."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:78
msgid "Coolant is turned off (like 'M9')."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:82
msgid ""
"Lines of code after M2/M30 will not be executed. Pressing `Cycle Start` will "
"start the program at the beginning of the file."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:87
msgid ""
"Using % to wrap the G-code does not do the same thing as a 'Program End'.  "
"See the section on <<gcode:file-requirements,File Requirements>> for more "
"information on what using % does not do."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:89
#, no-wrap
msgid "M60 Pallet Change Pause(((M60 Pallet Change Pause)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:95
msgid ""
"'M60' - exchange pallet shuttles and then pause a running program "
"temporarily (regardless of the setting of the optional stop switch). "
"Pressing the cycle start button will restart the program at the following "
"line."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:97
#, no-wrap
msgid "M3, M4, M5 Spindle Control(((M3, M4, M5 Spindle Control)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:100
msgid "'M3 [$n]' - start the selected spindle clockwise at the 'S' speed."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:101
msgid ""
"'M4 [$n]' - start the selected spindle counterclockwise at the 'S' speed."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:102
msgid "'M5 [$n]' - stop the selected spindle."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:106
msgid ""
"Use $ to operate on specific spindles.  If $ is omitted then the commands "
"default to operating on spindle 0.  Use $-1 to operate on all active "
"spindles."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:109
msgid ""
"This example will start spindles 0, 1, and 2 simultaneously at different "
"speeds:"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:116
#, no-wrap
msgid ""
"S100 $0\n"
"S200 $1\n"
"S300 $2\n"
"M3 $-1\n"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:120
msgid ""
"This example will then reverse spindle 1 but leave the other spindles "
"rotating forwards:"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:124
#, no-wrap
msgid "M4 $1\n"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:127
msgid "And this will stop spindle 2 and leave the other spindles rotating:"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:131
#, no-wrap
msgid "M5 $2\n"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:135
msgid ""
"If the $ is omitted then behaviour is exactly as normal for a single spindle "
"machine."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:145
msgid ""
"It is OK to use 'M3' or 'M4' if the <<sec:set-spindle-speed,S>> spindle "
"speed is set to zero. If this is done (or if the speed override switch is "
"enabled and set to zero), the spindle will not start turning.  If, later, "
"the spindle speed is set above zero (or the override switch is turned up), "
"the spindle will start turning.  It is OK to use 'M3' or 'M4' when the "
"spindle is already turning or to use 'M5' when the spindle is already "
"stopped."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:147
#, no-wrap
msgid "M6 Tool Change(((M6-Tool-Change)))"
msgstr ""

#. type: Title ===
#: src/gcode/m-code.adoc:149
#, no-wrap
msgid "Manual Tool Change"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:156
msgid ""
"If the HAL component 'hal_manualtoolchange' is loaded, M6 will stop the "
"spindle and prompt the user to change the tool based on the last 'T-' number "
"programmed.  For more information on hal_manualtoolchange see the <<sec:"
"manual-tool-change,Manual Tool Change>> section."
msgstr ""

#. type: Title ===
#: src/gcode/m-code.adoc:157
#, no-wrap
msgid "Tool Changer"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:163
msgid ""
"To change a tool in the spindle from the tool currently in the spindle to "
"the tool most recently selected (using a T word - see section <<sec:select-"
"tool,Select Tool>>), program 'M6'.  When the tool change is complete:"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:165
msgid "The spindle will be stopped."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:167
msgid ""
"The tool that was selected (by a T word on the same line or on any line "
"after the previous tool change) will be in the spindle."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:170
msgid ""
"If the selected tool was not in the spindle before the tool change, the tool "
"that was in the spindle (if there was one) will be placed back into the tool "
"changer magazine."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:173
msgid ""
"If configured in the INI file some axis positions may move when a M6 is "
"issued. See the <<sub:ini:sec:emcio,EMCIO section>> for more information on "
"tool change options."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:175
msgid ""
"No other changes will be made. For example, coolant will continue to flow "
"during the tool change unless it has been turned off by an 'M9'."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:179
msgid ""
"The 'T-' word is an integer number designating the tool pocket number in the "
"carousel (not its index)."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:183
msgid ""
"The tool length offset is not changed by 'M6', use '<<gcode:g43,G43>>' after "
"the 'M6' to change the tool length offset."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:192
msgid ""
"The tool change may include axis motion.  It is OK (but not useful) to "
"program a change to the tool already in the spindle.  It is OK if there is "
"no tool in the selected slot; in that case, the spindle will be empty after "
"the tool change.  If slot zero was last selected, there will definitely be "
"no tool in the spindle after a tool change. The tool changer will have to be "
"setup to perform the tool change in HAL and possibly ClassicLadder."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:194
#, no-wrap
msgid "M7, M8, M9 Coolant Control(((M7, M8, M9 Coolant Control)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:197
msgid "'M7' - turn mist coolant on. M7 controls iocontrol.0.coolant-mist pin."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:198
msgid ""
"'M8' - turn flood coolant on. M8 controls iocontrol.0.coolant-flood pin."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:199
msgid "'M9' - turn both M7 and M8 off."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:202
msgid ""
"Connect one or both of the coolant control pins in HAL before M7 or M8 will "
"control an output. M7 and M8 can be used to turn on any output via G-code."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:205
msgid ""
"It is OK to use any of these commands, regardless of the current coolant "
"state."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:207
#, no-wrap
msgid "M19 Orient Spindle(((M19 Orient Spindle)))"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:212
#, no-wrap
msgid "M19 R- Q- [P-] [$-]\n"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:215
msgid "'R' Position to rotate to from 0, valid range is 0-360 degrees"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:218
msgid ""
"'Q' Number of seconds to wait until orient completes. If spindle.N.is-"
"oriented does not become true within Q timeout an error occurs."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:219
msgid "'P' Direction to rotate to position."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:220
msgid "'0' rotate for smallest angular movement (default)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:221
msgid "'1' always rotate clockwise (same as M3 direction)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:222
msgid "'2' always rotate counterclockwise (same as M4 direction)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:224
msgid ""
"'$' The spindle to orient (actually only determines which HAL pins carry the "
"spindle position commands)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:227
msgid ""
"M19 is a command of modal group 7, like M3, M4 and M5.  M19 is cleared by "
"any of M3,M4,M5."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:230
msgid ""
"Spindle orientation requires a quadrature encoder with an index to sense the "
"spindle shaft position and direction of rotation."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:232
msgid "INI Settings in the [RS274NGC] section:"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:234
msgid "ORIENT_OFFSET = 0-360 (fixed offset in degrees added to M19 R word)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:238
msgid ""
"'spindle.N.orient-angle' (out float)  Desired spindle orientation for M19. "
"Value of the M19 R word parameter plus the value of the "
"[RS274NGC]ORIENT_OFFSET INI parameter."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:240
msgid ""
"'spindle.N.orient-mode' (out s32)  Desired spindle rotation mode. Reflects "
"M19 P parameter word, default = 0."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:244
msgid ""
"'spindle.N.orient' (out bit)  Indicates start of spindle orient cycle. Set "
"by M19. Cleared by any of M3,M4,M5. If spindle-orient-fault is not zero "
"during spindle-orient true, the M19 command fails with an error message."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:249
msgid ""
"'spindle.N.is-oriented' (in bit)  Acknowledge pin for spindle-orient. "
"Completes orient cycle. If spindle-orient was true when spindle-is-oriented "
"was asserted, the spindle-orient pin is cleared and the spindle-locked pin "
"is asserted. Also, the spindle-brake pin is asserted."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:252
msgid ""
"'spindle.N.orient-fault' (in s32)  Fault code input for orient cycle. Any "
"value other than zero will cause the orient cycle to abort."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:254
msgid ""
"'spindle.N.locked' (out bit)  Spindle orient complete pin. Cleared by any of "
"M3,M4,M5."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:256
#, no-wrap
msgid "M48, M49 Speed and Feed Override Control(((M48, M49 Speed and Feed Override Control)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:259
msgid "'M48' - enable the spindle speed and feed rate override controls."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:260
msgid "'M49' - disable both controls."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:263
msgid ""
"These commands also take an optional $ parameter to determine which spindle "
"they operate on."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:267
msgid ""
"It is OK to enable or disable the controls when they are already enabled or "
"disabled.  See the <<sub:feed-rate,Feed Rate>> section for more details."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:270
msgid ""
"They also can be be toggled individually using 'M50' and 'M51', see below."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:272
#, no-wrap
msgid "M50 Feed Override Control(((M50 Feed Override Control)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:276
msgid "'M50 <P1>' - enable the feed rate override control. The P1 is optional."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:277
msgid "'M50 P0' - disable the feed rate control."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:281
msgid ""
"While disabled the feed override will have no influence, and the motion will "
"be executed at programmed feed rate.  (unless there is an adaptive feed rate "
"override active)."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:283
#, no-wrap
msgid "M51 Spindle Speed Override Control(((M51 Spindle Speed Override)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:287
msgid ""
"'M51 <P1> <$->'- enable the spindle speed override control for the selected "
"spindle. The P1 is optional."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:288
msgid "'M51 P0 <$->' - disable the spindle speed override control program."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:293
msgid ""
"While disabled the spindle speed override will have no influence, and the "
"spindle speed will have the exact program specified value of the S-word "
"(described in the <<sec:set-spindle-speed,Spindle Speed>> section)."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:295
#, no-wrap
msgid "M52 Adaptive Feed Control(((M52 Adaptive Feed Control)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:298
msgid "'M52 <P1>' - use an adaptive feed. The P1 is optional."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:299
msgid "'M52 P0' - stop using adaptive feed."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:306
msgid ""
"When adaptive feed is enabled, some external input value is used together "
"with the user interface feed override value and the commanded feed rate to "
"set the actual feed rate. In LinuxCNC, the HAL pin 'motion.adaptive-feed' is "
"used for this purpose. Values on 'motion.adaptive-feed' should range from -1 "
"(programmed speed in reverse) to 1 (full speed). 0 is equivalent to feed-"
"hold."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:311
msgid ""
"The use of negative adaptive-feed for reverse run is a new feature and is "
"not very well tested as yet. The intended use is for plasma cutters and wire "
"spark eroders but it is not limited to such applications."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:313
#, no-wrap
msgid "M53 Feed Stop Control(((M53 Feed Stop Control)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:320
msgid ""
"'M53 <P1>' - enable the feed stop switch. The P1 is optional.  Enabling the "
"feed stop switch will allow motion to be interrupted by means of the feed "
"stop control. In LinuxCNC, the HAL pin 'motion.feed-hold' is used for this "
"purpose. A 'true' value will cause the motion to stop when 'M53' is active."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:322
msgid ""
"'M53 P0' - disable the feed stop switch. The state of 'motion.feed-hold' "
"will have no effect on feed when M53 is not active."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:324
#, no-wrap
msgid "M61 Set Current Tool(((M61 Set Current Tool)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:330
msgid ""
"'M61 Q-' - change the current tool number while in MDI or Manual mode "
"without a tool change. One use is when you power up LinuxCNC with a tool "
"currently in the spindle you can set that tool number without doing a tool "
"change."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:334
msgid ""
"The tool length offset is not changed by 'M61', use '<<gcode:g43,G43>>' "
"after the 'M61' to change the tool length offset."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:338
msgid "Q- is not 0 or greater"
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:340
#, no-wrap
msgid "M62 - M65 Digital Output Control(((M62 - M65 Digital Output Control)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:343
msgid "'M62 P-' - turn on digital output synchronized with motion."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:344
msgid "'M63 P-' - turn off digital output synchronized with motion."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:345
msgid "'M64 P-' - turn on digital output immediately."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:346
msgid "'M65 P-' - turn off digital output immediately."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:352
msgid ""
"The P- word specifies the digital output number.  The P-word ranges from 0 "
"to a default value of 3. If needed the the number of I/O can be increased by "
"using the num_dio parameter when loading the motion controller. See the "
"<<sec:motion,Motion>> section for more information."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:357
msgid ""
"The M62 & M63 commands will be queued. Subsequent commands referring to the "
"same output number will overwrite the older settings. More than one output "
"change can be specified by issuing more than one M62/M63 command."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:362
msgid ""
"The actual change of the specified outputs will happen at the beginning of "
"the next motion command. If there is no subsequent motion command, the "
"queued output changes won't happen. It's best to always program a motion G-"
"code (G0, G1, etc) right after the M62/63."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:366
msgid ""
"M64 & M65 happen immediately as they are received by the motion controller. "
"They are not synchronized with movement, and they will break blending."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:370
msgid ""
"M62-65 will not function unless the appropriate motion.digital-out-_nn_ pins "
"are connected in your HAL file to outputs."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:372
#, no-wrap
msgid "M66 Wait on Input(((M66 Wait on Input)))"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:377
#, no-wrap
msgid "M66 P- | E- <L->\n"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:380
msgid ""
"'P-' - specifies the digital input number from 0 to 3. (Adjustable from "
"motmod argument num_dio)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:381
msgid ""
"'E-' - specifies the analog input number from 0 to 3.  (Adjustable from "
"motmod argument num_aio)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:382
msgid "'L-' - specifies the wait mode type."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:384
msgid ""
"'Mode 0: IMMEDIATE' - no waiting, returns immediately.  The current value of "
"the input is stored in parameter #5399"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:385
msgid "'Mode 1: RISE' - waits for the selected input to perform a rise event."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:386
msgid "'Mode 2: FALL' - waits for the selected input to perform a fall event."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:387
msgid "'Mode 3: HIGH' - waits for the selected input to go to the HIGH state."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:388
msgid "'Mode 4: LOW' - waits for the selected input to go to the LOW state."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:392
msgid ""
"'Q-' - specifies the timeout in seconds for waiting. If the timeout is "
"exceeded, the wait is interrupt, and the variable #5399 will be holding the "
"value -1. The Q value is ignored if the L-word is zero (IMMEDIATE).  A Q "
"value of zero is an error if the L-word is non-zero."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:393
msgid "Mode 0 is the only one permitted for an analog input."
msgstr ""

#. type: Block title
#: src/gcode/m-code.adoc:394
#, no-wrap
msgid "M66 Example Lines"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:399
#, no-wrap
msgid "M66 P0 L3 Q5 (wait up to 5 seconds for digital input 0 to turn on)\n"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:403
msgid ""
"M66 wait on an input stops further execution of the program, until the "
"selected event (or the programmed timeout) occurs."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:408
msgid ""
"It is an error to program M66 with both a P-word and an E-word (thus "
"selecting both an analog and a digital input). In LinuxCNC these inputs are "
"not monitored in real time and thus should not be used for timing-critical "
"applications."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:412 src/gcode/m-code.adoc:443
#: src/gcode/m-code.adoc:467
msgid ""
"The number of I/O can be increased by using the num_dio or num_aio parameter "
"when loading the motion controller. See the <<sec:motion,Motion>> section "
"for more information."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:416
msgid ""
"M66 will not function unless the appropriate motion.digital-in-_nn_ pins or "
"motion.analog-in-_nn_ pins are connected in your HAL file to an input."
msgstr ""

#. type: Block title
#: src/gcode/m-code.adoc:417
#, no-wrap
msgid "Example HAL Connection"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:420
#, no-wrap
msgid "net signal-name motion.digital-in-00 <= parport.0.pin10-in\n"
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:423
#, no-wrap
msgid "M67 Analog Output,Synchronized(((M67 Analog Output, Synchronized)))"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:428
#, no-wrap
msgid "M67 E- Q-\n"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:431
msgid "'M67' - set an analog output synchronized with motion."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:432
msgid ""
"'E-' - output number ranging from 0 to 3 (Adjustable from motmod argument "
"num_aio)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:433 src/gcode/m-code.adoc:459
msgid "'Q-' - is the value to set (set to 0 to turn off)."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:439
msgid ""
"The actual change of the specified outputs will happen at the beginning of "
"the next motion command. If there is no subsequent motion command, the "
"queued output changes won't happen. It's best to always program a motion G-"
"code (G0, G1, etc) right after the M67. M67 functions the same as M62-63."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:447
msgid ""
"M67 will not function unless the appropriate motion.analog-out-_nn_ pins are "
"connected in your HAL file to outputs."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:449
#, no-wrap
msgid "M68 Analog Output, Immediate(((M68 Analog Output)))"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:454
#, no-wrap
msgid "M68 E- Q-\n"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:457
msgid "'M68' - set an analog output immediately."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:458
msgid ""
"'E-' - output number ranging from 0 to 3. (Adjustable from motmod argument "
"num_aio)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:463
msgid ""
"M68 output happen immediately as they are received by the motion controller. "
"They are not synchronized with movement, and they will break blending. M68 "
"functions the same as M64-65."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:471
msgid ""
"M68 will not function unless the appropriate motion.analog-out-_nn_ pins are "
"connected in your HAL file to outputs."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:473
#, no-wrap
msgid "M70 Save Modal State(((M70 Save Modal State)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:478
msgid ""
"To explicitly save the modal state at the current call level, program 'M70'. "
"Once modal state has been saved with 'M70', it can be restored to exactly "
"that state by executing an 'M72'."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:482
msgid ""
"A pair of 'M70' and 'M72' instructions will typically be used to protect a "
"program against inadvertent modal changes within subroutines."
msgstr ""

#. type: Block title
#: src/gcode/m-code.adoc:484
#, no-wrap
msgid "M70 Saved state(((M70 Saved state)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:486
msgid "The state saved consists of:"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:488
msgid "current G20/G21 settings (imperial/metric)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:489
msgid "selected plane (G17/G18/G19 G17.1,G18.1,G19.1)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:490
msgid "status of cutter compensation (G40,G41,G42,G41.1,G42,1)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:491
msgid "distance mode - relative/absolute (G90/G91)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:492
msgid "feed mode (G93/G94,G95)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:493
msgid "current coordinate system (G54-G59.3)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:494
msgid "tool length compensation status (G43,G43.1,G49)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:495
msgid "retract mode (G98,G99)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:496
msgid "spindle mode (G96-css or G97-RPM)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:497
msgid "arc distance mode (G90.1, G91.1)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:498
msgid "lathe radius/diameter mode (G7,G8)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:499
msgid "path control mode (G61, G61.1, G64)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:500
msgid "current feed and speed ('F' and 'S' values)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:501
msgid "spindle status (M3,M4,M5) - on/off and direction"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:502
msgid "mist (M7) and flood (M8) status"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:503
msgid "speed override (M51) and feed override (M50) settings"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:504
msgid "adaptive feed setting (M52)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:505
msgid "feed hold setting (M53)"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:507
msgid "Note that in particular, the motion mode (G1 etc) is NOT restored."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:509
msgid "'current call level' means either:"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:514
msgid ""
"executing in the main program. There is a single storage location for state "
"at the main program level; if several 'M70' instructions are executed in "
"turn, only the most recently saved state is restored when an 'M72' is "
"executed."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:518
msgid ""
"executing within a G-code subroutine. The state saved with 'M70' within a "
"subroutine behaves exactly like a local named parameter - it can be referred "
"to only within this subroutine invocation with an 'M72' and when the "
"subroutine exits, the parameter goes away."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:520
msgid "A recursive invocation of a subroutine introduces a new call level."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:522
#, no-wrap
msgid "M71 Invalidate Stored Modal State(((M71 Invalidate Stored Modal State)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:526
msgid ""
"Modal state saved with an 'M70' or by an 'M73' at the current call level is "
"invalidated (cannot be restored from anymore)."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:528
msgid "A subsequent 'M72' at the same call level will fail."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:531
msgid ""
"If executed in a subroutine which protects modal state by an 'M73', a "
"subsequent return or endsub will *not* restore modal state."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:534
msgid ""
"The usefulness of this feature is dubious. It should not be relied upon as "
"it might go away."
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:536
#, no-wrap
msgid "M72 Restore Modal State(((M72 Restore Modal State)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:540
msgid ""
"<<mcode:m70-saved-state,Modal state saved with an 'M70'>> code can be "
"restored by executing an 'M72'."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:546
msgid ""
"The handling of G20/G21 is specially treated as feeds are interpreted "
"differently depending on G20/G21: if length units (mm/in) are about to be "
"changed by the restore operation, 'M72 'will restore the distance mode "
"first, and then all other state including feed to make sure the feed value "
"is interpreted in the correct unit setting."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:549
msgid ""
"It is an error to execute an 'M72' with no previous 'M70' save operation at "
"that level."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:554
msgid ""
"The following example demonstrates saving and explicitly restoring modal "
"state around a subroutine call using 'M70' and 'M72'. Note that the "
"'imperialsub' subroutine is not \"aware\" of the M7x features and can be "
"used unmodified:"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:560 src/gcode/m-code.adoc:612
#, no-wrap
msgid ""
"O<showstate> sub\n"
"(DEBUG, imperial=#<_imperial> absolute=#<_absolute> feed=#<_feed> rpm=#<_rpm>)\n"
"O<showstate> endsub\n"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:569
#, no-wrap
msgid ""
"O<imperialsub> sub\n"
"g20 (imperial)\n"
"g91 (relative mode)\n"
"F5 (low feed)\n"
"S300 (low rpm)\n"
"(debug, in subroutine, state now:)\n"
"o<showstate> call\n"
"O<imperialsub> endsub\n"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:575
#, no-wrap
msgid ""
"; main program\n"
"g21 (metric)\n"
"g90 (absolute)\n"
"f200 (fast speed)\n"
"S2500 (high rpm)\n"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:578
#, no-wrap
msgid ""
"(debug, in main, state now:)\n"
"o<showstate> call\n"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:582
#, no-wrap
msgid ""
"M70 (save caller state in at global level)\n"
"O<imperialsub> call\n"
"M72 (explicitly restore state)\n"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:586
#, no-wrap
msgid ""
"(debug, back in main, state now:)\n"
"o<showstate> call\n"
"m2\n"
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:589
#, no-wrap
msgid "M73 Save and Autorestore Modal State(((M73 Save and Autorestore Modal State)))"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:593
msgid ""
"To save modal state within a subroutine, and restore state on subroutine "
"'endsub' or any 'return' path, program 'M73'."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:596
msgid ""
"Aborting a running program in a subroutine which has an 'M73' operation will "
"*not* restore state ."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:599
msgid ""
"Also, the normal end ('M2') of a main program which contains an 'M73' will "
"*not* restore state."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:606
msgid ""
"The suggested use is at the beginning of a O-word subroutine as in the "
"following example. Using 'M73' this way enables designing subroutines which "
"need to modify modal state but will protect the calling program against "
"inadvertent modal changes. Note the use of <<gcode:predefined-named-"
"parameters,predefined named parameters>> in the 'showstate' subroutine."
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:621
#, no-wrap
msgid ""
"O<imperialsub> sub\n"
"M73 (save caller state in current call context, restore on return or endsub)\n"
"g20 (imperial)\n"
"g91 (relative mode)\n"
"F5 (low feed)\n"
"S300 (low rpm)\n"
"(debug, in subroutine, state now:)\n"
"o<showstate> call\n"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:625
#, no-wrap
msgid ""
"; note - no M72 is needed here - the following endsub or an\n"
"; explicit 'return' will restore caller state\n"
"O<imperialsub> endsub\n"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:637
#, no-wrap
msgid ""
"; main program\n"
"g21 (metric)\n"
"g90 (absolute)\n"
"f200 (fast speed)\n"
"S2500 (high rpm)\n"
"(debug, in main, state now:)\n"
"o<showstate> call\n"
"o<imperialsub> call\n"
"(debug, back in main, state now:)\n"
"o<showstate> call\n"
"m2\n"
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:640
#, no-wrap
msgid "M98 and M99"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:645
msgid ""
"The interpreter supports Fanuc-style main- and sub-programs with the 'M98' "
"and 'M99' M-codes.  See <<ocode:fanuc-style-programs,Fanuc-Style Programs>>."
msgstr ""

#. type: Title ===
#: src/gcode/m-code.adoc:646
#, no-wrap
msgid "Selectively Restoring Modal State"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:650
msgid ""
"Executing an 'M72' or returning from a subroutine which contains an 'M73' "
"will restore <<mcode:m70-saved-state,*all* modal state saved>>."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:657
msgid ""
"If only some aspects of modal state should be preserved, an alternative is "
"the usage of <<gcode:predefined-named-parameters, predefined named "
"parameters>>, local parameters and conditional statements. The idea is to "
"remember the modes to be restored at the beginning of the subroutine, and "
"restore these before exiting. Here is an example, based on snippet of "
"'nc_files/tool-length-probe.ngc':"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:675
#, no-wrap
msgid ""
"O<measure> sub   (measure reference tool)\n"
";\n"
"#<absolute> = #<_absolute>  (remember in local variable if G90 was set)\n"
";\n"
"g30 (above switch)\n"
"g38.2 z0 f15 (measure)\n"
"g91 g0z.2 (off the switch)\n"
"#1000=#5063 (save reference tool length)\n"
"(print,reference length is #1000)\n"
";\n"
"O<restore_abs> if [#<absolute>]\n"
"    g90 (restore G90 only if it was set on entry:)\n"
"O<restore_abs> endif\n"
";\n"
"O<measure> endsub\n"
msgstr ""

#. type: Title ==
#: src/gcode/m-code.adoc:678
#, no-wrap
msgid "M100-M199 User Defined Commands(((M100-M199 User Defined Commands)))"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:683
#, no-wrap
msgid "M1-- <P- Q->\n"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:686
msgid "'M1--' - an integer in the range of 100 - 199."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:687
msgid "'P-' - a number passed to the file as the first parameter."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:688
msgid "'Q-' - a number passed to the file as the second parameter."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:692
msgid ""
"After creating a new 'M1nn' file you must restart the GUI so it is aware of "
"the new file, otherwise you will get an 'Unknown m code' error."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:697
msgid ""
"The external program named 'M100' through 'M199' (no extension, a capital M, "
"found in directory pointed by '[DISPLAY] PROGRAM_PREFIX' parameter of the "
"INI file) is executed with the optional P and Q values as its two arguments."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:702
msgid ""
"Execution of the G-code file pauses until the external program exits.  Any "
"valid executable file can be used. The file must be located in the search "
"path specified in the INI file configuration.  See the <<sub:ini:sec:display,"
"Display>> section for more information on search paths."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:705
msgid ""
"After creating a new M1nn program, the GUI should be restarted so that the "
"new program is taken into account, otherwise a 'Unknown M-code' error will "
"occur."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:711
msgid ""
"Do not use a word processor to create or edit the files. A word processor "
"will leave unseen codes that will cause problems and may prevent a bash or "
"python file from working. Use a text editor like Geany in Debian or Notepad+"
"+ in other operating systems to create or edit the files."
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:713
msgid "The error 'Unknown M-code used' denotes one of the following:"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:715
msgid "The specified User Defined Command does not exist"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:716
msgid "The file is not an executable file"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:717
msgid "The file name has an extension"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:718
msgid ""
"The file name does not follow this format Mnnn where nnn = 100 through 199"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:719
msgid "The file name used a lower case M"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:725
msgid ""
"For example to open and close a collet closer that is controlled by a "
"parallel port pin using a bash script file using M101 and M102. Create two "
"files named M101 and M102. Set them as executable files (typically right "
"click/properties/permissions) before running LinuxCNC. Make sure the "
"parallel port pin is not connected to anything in a HAL file."
msgstr ""

#. type: Block title
#: src/gcode/m-code.adoc:726
#, no-wrap
msgid "M101 Example File"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:732
#, no-wrap
msgid ""
"#!/bin/bash\n"
"# file to turn on parport pin 14 to open the collet closer\n"
"halcmd setp parport.0.pin-14-out True\n"
"exit 0\n"
msgstr ""

#. type: Block title
#: src/gcode/m-code.adoc:734
#, no-wrap
msgid "M102 Example File"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:740
#, no-wrap
msgid ""
"#!/bin/bash\n"
"# file to turn off parport pin 14 to open the collet closer\n"
"halcmd setp parport.0.pin-14-out False\n"
"exit 0\n"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:743
msgid "To pass a variable to a M1nn file you use the P and Q option like this:"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:747
#, no-wrap
msgid "M100 P123.456 Q321.654\n"
msgstr ""

#. type: Block title
#: src/gcode/m-code.adoc:749
#, no-wrap
msgid "M100 Example file"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:757
#, no-wrap
msgid ""
"#!/bin/bash\n"
"voltage=$1\n"
"feedrate=$2\n"
"halcmd setp thc.voltage $voltage\n"
"halcmd setp thc.feedrate $feedrate\n"
"exit 0\n"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:762
msgid ""
"To display a graphic message and stop until the message window is closed use "
"a graphic display program like Eye of Gnome to display the graphic file. "
"When you close it the program will resume."
msgstr ""

#. type: Block title
#: src/gcode/m-code.adoc:763
#, no-wrap
msgid "M110 Example file"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:768
#, no-wrap
msgid ""
"#!/bin/bash\n"
"eog /home/john/linuxcnc/nc_files/message.png\n"
"exit 0\n"
msgstr ""

#. type: Plain text
#: src/gcode/m-code.adoc:772
msgid ""
"To display a graphic message and continue processing the G-code file suffix "
"an ampersand to the command."
msgstr ""

#. type: Block title
#: src/gcode/m-code.adoc:773
#, no-wrap
msgid "M110 Example display and keep going"
msgstr ""

#. type: delimited block -
#: src/gcode/m-code.adoc:778
#, no-wrap
msgid ""
"#!/bin/bash\n"
"eog /home/john/linuxcnc/nc_files/message.png &\n"
"exit 0\n"
msgstr ""

#. type: Title =
#: src/gcode/o-code.adoc:5
#, no-wrap
msgid "O Codes(((O Codes)))"
msgstr ""

#. type: Title ==
#: src/gcode/o-code.adoc:13
#, no-wrap
msgid "Use of O-codes"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:19
msgid ""
"O-codes provide for flow control in NC programs. Each block has an "
"associated number, which is the number used after O. Care must be taken to "
"properly match the O-numbers. O codes use the letter 'O' not the number zero "
"as the first character in the number like O100 or o100."
msgstr ""

#. type: Title ==
#: src/gcode/o-code.adoc:20
#, no-wrap
msgid "Numbering"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:23
msgid "Numbered O codes must have a unique number for each subroutine,"
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:24
#, no-wrap
msgid "Numbering Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:38
#, no-wrap
msgid ""
"(the start of o100)\n"
"o100 sub\n"
"(notice that the if-endif block uses a different number)\n"
"  (the start of o110)\n"
"  o110 if [#2 GT 5]\n"
"    (some code here)\n"
"  (the end of o110)\n"
"  o110 endif\n"
"  (some more code here)\n"
"(the end of o100)\n"
"o100 endsub\n"
msgstr ""

#. type: Title ==
#: src/gcode/o-code.adoc:41 src/gcode/overview.adoc:969
#, no-wrap
msgid "Comments(((Comments)))"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:45
msgid ""
"Comments on the same line as the O word should not be used as the behavior "
"can change in the future."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:47
msgid "The behavior is undefined if:"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:49
msgid "The same number is used for more than one block."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:50
msgid "Other words are used on a line with an O- word."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:51
msgid "Comments are used on a line with an O-word."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:56
msgid ""
"Using the lower case 'o' makes it easier to distinguish from a 0 that might "
"have been mistyped. For example 'o100' is easier to see than 'O100' that it "
"is not a '0'."
msgstr ""

#. type: Title ==
#: src/gcode/o-code.adoc:58
#, no-wrap
msgid "Subroutines(((Subroutines)))"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:63
msgid ""
"Subroutines starts at 'Onnn sub' and ends at 'Onnn endsub'. The lines "
"between 'Onnn sub' and 'Onnn endsub' are not executed until the subroutine "
"is called with 'Onnn call'. Each subroutine must use a unique number."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:64
#, no-wrap
msgid "Subroutine Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:70
#, no-wrap
msgid ""
"o100 sub\n"
"  G53 G0 X0 Y0 Z0 (rapid move to machine home)\n"
"o100 endsub\n"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:74
#, no-wrap
msgid ""
"(the subroutine is called)\n"
"o100 call\n"
"M2\n"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:77
msgid ""
"See <<gcode:g53,G53>>, <<gcode:g0,G0>> and <<mcode:m2-m30,M2>> sections for "
"more information."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:78
#, no-wrap
msgid "O- Return"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:81
msgid ""
"Inside a subroutine, 'O- return' can be executed. This immediately returns "
"to the calling code, just as though 'O- endsub' was encountered."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:82
#, no-wrap
msgid "O- Return Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:94
#, no-wrap
msgid ""
"o100 sub\n"
"  (test if parameter #2 is greater than 5)\n"
"  o110 if [#2 GT 5]\n"
"    (return to top of subroutine if test is true)\n"
"    o100 return\n"
"  o110 endif\n"
"    (this only gets executed if parameter #2 is not greater than 5)\n"
"    (DEBUG, parameter 1 is [#1])\n"
"o100 endsub\n"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:97
msgid ""
"See the <<gcode:binary-operators,Binary Operators>> and <<sec:overview-"
"parameters,Parameters>> sections for more information."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:98
#, no-wrap
msgid "O- Call"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:106
msgid ""
"'O- Call' takes up to 30 optional arguments, which are passed to the "
"subroutine as '#1', '#2' , ..., #N. Parameters from #N+1 to #30 have the "
"same value as in the calling context.  On return from the subroutine, the "
"values of parameters #1 through #30 (regardless of the number of arguments) "
"will be restored to the values they had before the call. Parameters #1 - #30 "
"are local to the subroutine."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:109
msgid ""
"Because '1 2 3' is parsed as the number 123, the parameters must be enclosed "
"in square brackets. The following calls a subroutine with 3 arguments:"
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:110
#, no-wrap
msgid "O- Call Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:123
#, no-wrap
msgid ""
"o100 sub\n"
"  (test if parameter #2 is greater than 5)\n"
"  o110 if [#2 GT 5]\n"
"    (return to top of subroutine if test is true)\n"
"    o100 return\n"
"  o110 endif\n"
"    (this only gets executed if parameter #2 is not greater than 5)\n"
"    (DEBUG, parameter 1 is [#1])\n"
"    (DEBUG, parameter 3 is [#3])\n"
"o100 endsub\n"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:125
#, no-wrap
msgid "o100 call [100] [2] [325]\n"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:131
msgid ""
"Subroutine bodies may not be nested. They may only be called after they are "
"defined. They may be called from other functions, and may call themselves "
"recursively if it makes sense to do so. The maximum subroutine nesting level "
"is 10."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:135
msgid ""
"Subroutines can change the value of parameters above #30 and those changes "
"will be visible to the calling code. Subroutines may also change the value "
"of global named parameters."
msgstr ""

#. type: Title ===
#: src/gcode/o-code.adoc:137
#, no-wrap
msgid "Fanuc-Style Numbered Programs(((Subroutines,M98,M99)))"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:143
msgid ""
"Numbered programs (both main and subprograms), the 'M98' call and 'M99' "
"return M-codes, and their respective semantic differences are an alternative "
"to the rs274ngc subroutines described above, provided for compatibility with "
"Fanuc and other machine controllers."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:146
msgid ""
"Numbered programs are enabled by default, and may be disabled by placing "
"`DISABLE_FANUC_STYLE_SUB = 1` in the `[RS274NGC]` section of the `.ini` file."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:152
msgid ""
"Numbered main and subprogram definitions and calls differ from traditional "
"rs274ngc both in syntax and execution.  To reduce the possibility of "
"confusion, the interpreter will raise an error if definitions of one style "
"are mixed with calls of another."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:153
#, no-wrap
msgid "Numbered Subprogram Simple Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:159
#, no-wrap
msgid ""
"o1 (Example 1)    ; Main program 1, \"Example 1\"\n"
"M98 P100          ; Call subprogram 100\n"
"M30               ; End main program\n"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:163
#, no-wrap
msgid ""
"o100              ; Beginning of subprogram 100\n"
"  G53 G0 X0 Y0 Z0 ; Rapid move to machine home\n"
"M99               ; Return from subprogram 100\n"
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:165
#, no-wrap
msgid "'o1 (Title)'"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:170
msgid ""
"The optional main program beginning block gives the main program the number "
"`1`.  Some controllers treat an optional following parenthesized comment as "
"a program title, `Example 1` in this example, but this has no special "
"meaning in the rs274ngc interpreter."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:171
#, no-wrap
msgid "'M98 P- <L\\->'"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:176
msgid ""
"Call a numbered subprogram.  The block `M98 P100` is analogous to the "
"traditional `o100 call` syntax, but may only be used to call a following "
"numbered subprogram defined with `o100`...`M99`.  An optional 'L'-word "
"specifies a loop count."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:177
#, no-wrap
msgid "'M30'"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:180
msgid ""
"The main program must be terminated with `M02` or `M30` (or `M99`; see "
"below)."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:181
#, no-wrap
msgid "'O-' subprogram definition start"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:185
msgid ""
"Marks the start of a numbered subprogram definition.  The block `O100` is "
"similar to `o100 sub`, except that it must be placed later in the file than "
"the `M98 P100` calling block."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:186
#, no-wrap
msgid "'M99' return from numbered subroutine"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:191
msgid ""
"The block `M99` is analogous to the traditional `o100 endsub` syntax, but "
"may only terminate a numbered program (`o100` in this example), and may not "
"terminate a subroutine beginning with the `o100 sub` syntax."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:194
msgid ""
"The `M98` subprogram call differs from rs274ngc `O call` in the following "
"ways:"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:197
msgid ""
"The numbered subprogram must follow the `M98` call in the program file.  The "
"interpreter will throw an error if the subprogram precedes the call block."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:202
msgid ""
"Parameters `#1`, `#2`, ..., `#30` are global and accessible in numbered "
"subprograms, similar to higher-numbered parameters in traditional style "
"calls.  Modifications to these parameters within a subprogram are global "
"modifications, and will be persist after subprogram return."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:203
msgid "`M98` subprogram calls have no return value."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:206
msgid ""
"`M98` subprogram call blocks may contain an optional L-word specifying a "
"loop repeat count.  Without the L-word, the subprogram will execute once "
"only (equivalent to `M98 L1`).  An `M98 L0` block will not execute the "
"subprogram."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:214
msgid ""
"In rare cases, the `M99` M-code may be used to terminate the main program, "
"where it indicates an 'endless program'.  When the interpreter reaches an "
"`M99` in the main program, it will skip back to the beginning of the file "
"and resume execution at the first line.  An example use of an endless "
"program is in a machine warm-up cycle; a block delete program end `/M30` "
"block might be used to stop the cycle at a tidy point when the operator is "
"ready."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:215
#, no-wrap
msgid "Numbered Subprogram Full Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:224
#, no-wrap
msgid ""
"O1                             ; Main program 1\n"
"  #1 = 0\n"
"  (PRINT,X MAIN BEGIN:  1=#1)\n"
"  M98 P100 L5                  ; Call subprogram 100\n"
"  (PRINT,X MAIN END:  1=#1)\n"
"M30                            ; End main program\n"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:230
#, no-wrap
msgid ""
"O100                           ; Subprogram 100\n"
"  #1 = [#1 + 1]\n"
"  M98 P200 L5                  ; Call subprogram 200\n"
"  (PRINT,>> O100:  #1)\n"
"M99                            ; Return from Subprogram 100\n"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:235
#, no-wrap
msgid ""
"O200                           ; Subprogram 200\n"
"  #1 = [#1 + 0.01]\n"
"  (PRINT,>>>> O200:  #1)\n"
"M99                            ; Return from Subprogram 200\n"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:241
msgid ""
"In this example, parameter `#1` is initialized to `0`.  Subprogram `O100` is "
"called five times in a loop.  Nested within each call to `O100`, subprogram "
"`O200` is called five times in a loop, for 25 times total."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:244
msgid ""
"Note that parameter `#1` is global.  At the end of the main program, after "
"updates within `O100` and `O200`, its value will equal `5.25`."
msgstr ""

#. type: Title ==
#: src/gcode/o-code.adoc:246
#, no-wrap
msgid "Looping(((Subroutines,Looping)))"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:253
msgid ""
"The 'while loop' has two structures: 'while/endwhile', and 'do/while'. In "
"each case, the loop is exited when the 'while' condition evaluates to false. "
"The difference is when the test condition is done. The 'do/while' loop runs "
"the code in the loop then checks the test condition. The 'while/endwhile' "
"loop does the test first."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:254
#, no-wrap
msgid "While Endwhile Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:267
#, no-wrap
msgid ""
"(draw a sawtooth shape)\n"
"G0 X1 Y0 (move to start position)\n"
"#1 = 0 (assign parameter #1 the value of 0)\n"
"F25 (set a feed rate)\n"
"o101 while [#1 LT 10]\n"
"  G1 X0\n"
"  G1 Y[#1/10] X1\n"
"  #1 = [#1+1] (increment the test counter)\n"
"o101 endwhile\n"
"M2 (end program)\n"
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:269
#, no-wrap
msgid "Do While Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:285
#, no-wrap
msgid ""
"#1 = 0 (assign parameter #1 the value of 0)\n"
"o100 do\n"
"  (debug, parameter 1 = #1)\n"
"  o110 if [#1 EQ 2]\n"
"    #1 = 3 (assign the value of 3 to parameter #1)\n"
"    (msg, #1 has been assigned the value of 3)\n"
"    o100 continue (skip to start of loop)\n"
"  o110 endif\n"
"  (some code here)\n"
"  #1 = [#1 + 1] (increment the test counter)\n"
"o100 while [#1 LT 3]\n"
"(msg, Loop Done!)\n"
"M2\n"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:291
msgid ""
"Inside a while loop, 'O- break' immediately exits the loop, and 'O- "
"continue' immediately skips to the next evaluation of the 'while' condition. "
"If it is still true, the loop begins again at the top. If it is false, it "
"exits the loop."
msgstr ""

#. type: Title ==
#: src/gcode/o-code.adoc:293
#, no-wrap
msgid "Conditional(((Subroutines,Conditional Loops)))"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:298
msgid ""
"The 'if' conditional consists of a group of statements with the same 'o' "
"number that start with 'if' and end with 'endif'. Optional 'elseif' and "
"'else' conditions may be between the starting 'if' and the ending 'endif'."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:301
msgid ""
"If the 'if' conditional evaluates to true then the group of statements "
"following the 'if' up to the next conditional line are executed."
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:308
msgid ""
"If the 'if' conditional evaluates to false then the 'elseif' conditions are "
"evaluated in order until one evaluates to true. If the 'elseif' condition is "
"true then the statements following the 'elseif' up to the next conditional "
"line are executed. If none of the 'if' or 'elseif' conditions evaluate to "
"true then the statements following the 'else' are executed. When a condition "
"is evaluated to true no more conditions are evaluated in the group."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:309
#, no-wrap
msgid "If Endif Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:316
#, no-wrap
msgid ""
"(if parameter #31 is equal to 3 set S2000)\n"
"o101 if [#31 EQ 3]\n"
"  S2000\n"
"o101 endif\n"
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:318
#, no-wrap
msgid "If ElseIf Else EndIf Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:331
#, no-wrap
msgid ""
"(if parameter #2 is greater than 5 set F100)\n"
"o102 if [#2 GT 5]\n"
"  F100\n"
"o102 elseif [#2 LT 2]\n"
"(else if parameter #2 is less than 2 set F200)\n"
"  F200\n"
"(else if parameter #2 is 2 through 5 set F150)\n"
"o102 else\n"
"  F150\n"
"o102 endif\n"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:335
msgid ""
"Several conditions may be tested for by 'elseif' statements until the 'else' "
"path is finally executed if all preceding conditions are false:"
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:336
#, no-wrap
msgid "If Elseif Else Endif Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:349
#, no-wrap
msgid ""
"(if parameter #2 is greater than 5 set F100)\n"
"O102 if [#2 GT 5]\n"
"  F100\n"
"(else if parameter #2 less than 2 set F200)\n"
"O102 elseif [#2 LT 2]\n"
"  F20\n"
"(parameter #2 is between 2 and 5)\n"
"O102 else\n"
"  F200\n"
"O102 endif\n"
msgstr ""

#. type: Title ==
#: src/gcode/o-code.adoc:352
#, no-wrap
msgid "Repeat(((Subroutines,Repeat Loop)))"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:358
msgid ""
"The 'repeat' will execute the statements inside of the repeat/endrepeat the "
"specified number of times. The example shows how you might mill a diagonal "
"series of shapes starting at the present position."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:359
#, no-wrap
msgid "Example with 'repeat'"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:369
#, no-wrap
msgid ""
"(Mill 5 diagonal shapes)\n"
"G91 (Incremental mode)\n"
"o103 repeat [5]\n"
"... (insert milling code here)\n"
"G0 X1 Y1 (diagonal move to next position)\n"
"o103 endrepeat\n"
"G90 (Absolute mode)\n"
msgstr ""

#. type: Title ==
#: src/gcode/o-code.adoc:372
#, no-wrap
msgid "Indirection(((Indirection)))"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:375
msgid "The O-number may be given by a parameter and/or calculation."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:376
#, no-wrap
msgid "Indirection Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:380
#, no-wrap
msgid "o[#101+2] call\n"
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:382
#, no-wrap
msgid "Computing values in O-words"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:384
msgid "For more information on computing values see the following sections:"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:386
msgid "<<sec:overview-parameters,Parameters>>"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:387
msgid "<<gcode:expressions,Expressions>>"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:388
msgid "<<gcode:binary-operators,Binary Operators>>"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:389
msgid "<<gcode:functions,Functions>>"
msgstr ""

#. type: Title ==
#: src/gcode/o-code.adoc:391
#, no-wrap
msgid "Calling Files(((Calling Files)))"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:398
msgid ""
"To call a separate file with a subroutine name the file the same as your "
"call and include a sub and endsub in the file. The file must be in the "
"directory pointed to by 'PROGRAM_PREFIX' or 'SUBROUTINE_PATH' in the INI "
"file.  The file name can include *lowercase* letters, numbers, dash, and "
"underscore only. A named subroutine file can contain only a single "
"subroutine definition."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:399
#, no-wrap
msgid "Named File Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:403
#, no-wrap
msgid "o<myfile> call\n"
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:405
#, no-wrap
msgid "Numbered File Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:409
#, no-wrap
msgid "o123 call\n"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:413
msgid ""
"In the called file you must include the oxxx sub and endsub and the file "
"must be a valid file."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:414
#, no-wrap
msgid "Called File Example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:422
#, no-wrap
msgid ""
"(filename myfile.ngc)\n"
"o<myfile> sub\n"
"  (code here)\n"
"o<myfile> endsub\n"
"M2\n"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:428
msgid ""
"The file names are lowercase letters only so 'o<MyFile>' is converted to "
"'o<myfile>' by the interpreter. More information about the search path and "
"options for the search path are in the INI configuration section."
msgstr ""

#. type: Title ==
#: src/gcode/o-code.adoc:429
#, no-wrap
msgid "Subroutine return values(((Return Values)))"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:433
msgid ""
"Subroutines may optionally return a value by an optional expression at an "
"'endsub' or 'return' statement."
msgstr ""

#. type: Block title
#: src/gcode/o-code.adoc:434
#, no-wrap
msgid "Return value example"
msgstr ""

#. type: delimited block -
#: src/gcode/o-code.adoc:440
#, no-wrap
msgid ""
"o123 return [#2 *5]\n"
"...\n"
"o123 endsub [3 * 4]\n"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:447
msgid ""
"A subroutine return value is stored in the '#<_value>' <<gcode:predefined-"
"named-parameters,predefined named parameter>> , and the '#<_value_returned>' "
"predefined parameter is set to 1, to indicate a value was returned. Both "
"parameters are global, and are cleared just before the next subroutine call."
msgstr ""

#. type: Title ==
#: src/gcode/o-code.adoc:449
#, no-wrap
msgid "Errors(((O-Code Errors)))"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:453
msgid ""
"The following statements cause an error message and abort the interpreter:"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:455
msgid "a `return` or `endsub` not within a sub definition"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:456
msgid "a label on `repeat` which is defined elsewhere"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:457
msgid ""
"a label on `while` which is defińed elsewhere and not referring to a `do`"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:458
msgid "a label on `if` defined elsewhere"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:459
msgid "a undefined label on `else` or `elseif`"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:460
msgid "a label on `else`, `elseif` or `endif` not pointing to a matching `if`"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:461
msgid ""
"a label on `break` or `continue` which does not point to a matching `while` "
"or `do`"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:462
msgid ""
"a label on `endrepeat` or `endwhile` no referring to a corresponding `while` "
"or `repeat`"
msgstr ""

#. type: Plain text
#: src/gcode/o-code.adoc:465
msgid ""
"To make these errors non-fatal warnings on stderr, set bit 0x20 in the "
"`[RS274NGC]FEATURE=` mask ini option."
msgstr ""

#. type: Title =
#: src/gcode/other-code.adoc:5
#, no-wrap
msgid "Other Codes(((Other Codes)))"
msgstr ""

#. type: Title ==
#: src/gcode/other-code.adoc:8
#, no-wrap
msgid "F: Set Feed Rate(((F: Set Feed Rate)))"
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:12
msgid ""
"'Fx' - set the feed rate to 'x'.  'x' is usually in machine units (inches or "
"millimeters) per minute."
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:17
msgid ""
"The application of the feed rate is as described in the <<sub:feed-rate,Feed "
"Rate>> Section, unless 'inverse time feed rate mode' or 'feed per revolution "
"mode' are in effect, in which case the feed rate is as described in the "
"<<gcode:g93-g94-g95,G93 G94 G95>> section."
msgstr ""

#. type: Title ==
#: src/gcode/other-code.adoc:19
#, no-wrap
msgid "S: Set Spindle Speed(((S: Set Spindle Speed)))"
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:24
msgid ""
"'Sx [$n]' - set the speed of the spindle to 'x' revolutions per minute "
"(RPM)  with the optional $ set the spindle speed for a specific spindle. "
"Without the $ the command will default to spindle.0."
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:29
msgid ""
"The spindle(s) or selected spindle will turn at that speed when a 'M3' or "
"'M4' is in effect. It is OK to program an S word whether the spindle is "
"turning or not. If the speed override switch is enabled and not set at 100%, "
"the speed will be different from what is programmed."
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:31
msgid "It is OK to program S0, the spindle will not turn if that is done."
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:35
msgid "the S number is negative."
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:42
msgid ""
"As described in the section <<gcode:g84, Right-hand Tapping Cycle with "
"Dwell>>, if a 'G84' (tapping) drilling cycle is active and the speed and "
"feed potentiometers are enabled, the one with the lowest setting will be "
"used.  The rotational speed and feed rate will remain synchronized. In this "
"case, the speed may differ from the one programmed, even if the speed "
"correction potentiometer is set to 100%."
msgstr ""

#. type: Title ==
#: src/gcode/other-code.adoc:44
#, no-wrap
msgid "T: Select Tool(((T: Select Tool)))"
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:47
msgid "'Tx' - prepare to change to tool 'x'."
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:53
msgid ""
"The tool is not changed until an 'M6' is programmed (see Section <<mcode:m6,"
"M6>>). The T word may appear on the same line as the 'M6' or on a previous "
"line. It is OK if T words appear on two or more lines with no tool change. "
"Only the the most recent T word will take effect at the next tool change."
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:58
msgid ""
"When LinuxCNC is configured for a nonrandom toolchanger (see the entry for "
"RANDOM_TOOLCHANGER in the <<sub:ini:sec:emcio,EMCIO Section>>), 'T0' gets "
"special handling: no tool will be selected. This is useful if you want the "
"spindle to be empty after a tool change."
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:65
msgid ""
"When LinuxCNC is configured for a random toolchanger (see the entry for "
"RANDOM_TOOLCHANGER in the <<sub:ini:sec:emcio,EMCIO Section>>), 'T0' does "
"not get any special treatment: T0 is a valid tool like any other.  It is "
"customary to use T0 on a random toolchanger machine to track an empty "
"pocket, so that it behaves like a nonrandom toolchanger machine and unloads "
"the spindle."
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:69
msgid "a negative T number is used,"
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:72
msgid ""
"T number is used that does not appear in the tool table file (with the "
"exception that T0 on nonrandom toolchangers *is* accepted, as noted above)."
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:79
msgid ""
"On some machines, the carousel will move when a T word is programmed, at the "
"same time machining is occurring. On such machines, programming the T word "
"several lines before a tool change will save time. A common programming "
"practice for such machines is to put the T word for the next tool to be used "
"on the line after a tool change. This maximizes the time available for the "
"carousel to move."
msgstr ""

#. type: Plain text
#: src/gcode/other-code.adoc:85
msgid ""
"Rapid moves after a 'T<n>' will not show on the AXIS preview until after a "
"feed move. This is for machines that travel long distances to change the "
"tool like a lathe. This can be very confusing at first. To turn this feature "
"off for the current tool program a G1 without any move after the 'T<n>'."
msgstr ""

#. type: Title =
#: src/gcode/overview.adoc:5
#, no-wrap
msgid "G-code Overview"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:21
msgid ""
"The LinuxCNC G-code language is based on the RS274/NGC language. The G Code "
"language is based on lines of code. Each line (also called a 'block') may "
"include commands to do several different things. Lines of code may be "
"collected in a file to make a program."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:33
msgid ""
"A typical line of code consists of an optional line number at the beginning "
"followed by one or more 'words'. A word consists of a letter followed by a "
"number (or something that evaluates to a number). A word may either give a "
"command or provide an argument to a command. For example, 'G1 X3' is a valid "
"line of code with two words. 'G1' is a command meaning 'move in a straight "
"line at the programmed feed rate to the programmed end point', and 'X3' "
"provides an argument value (the value of X should be 3 at the end of the "
"move).  Most LinuxCNC G-code commands start with either G or M (for General "
"and Miscellaneous). The words for these commands are called 'G codes' and 'M-"
"codes'."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:46
msgid ""
"The LinuxCNC language has no indicator for the start of a program. The "
"Interpreter, however, deals with files. A single program may be in a single "
"file, or a program may be spread across several files. A file may demarcated "
"with percents in the following way. The first non-blank line of a file may "
"contain nothing but a percent sign, '%', possibly surrounded by white space, "
"and later in the file (normally at the end of the file) there may be a "
"similar line. Demarcating a file with percents is optional if the file has "
"an 'M2' or 'M30' in it, but is required if not. An error will be signaled if "
"a file has a percent line at the beginning but not at the end. The useful "
"contents of a file demarcated by percents stop after the second percent "
"line. Anything after that is ignored."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:51
msgid ""
"The LinuxCNC G-code language has two commands ('M2' or 'M30'), either of "
"which ends a program. A program may end before the end of a file. Lines of a "
"file that occur after the end of a program are not to be executed. The "
"interpreter does not even read them."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:52
#, no-wrap
msgid "Format of a line"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:57
msgid ""
"A permissible line of input code consists of the following, in order, with "
"the restriction that there is a maximum (currently 256) to the number of "
"characters allowed on a line."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:59
msgid "an optional block delete character, which is a slash '/'."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:60
msgid "an optional line number."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:61
msgid "any number of words, parameter settings, and comments."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:62
msgid "an end of line marker (carriage return or line feed or both)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:65
msgid ""
"Any input not explicitly allowed is illegal and will cause the Interpreter "
"to signal an error."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:70
msgid ""
"Spaces and tabs are allowed anywhere on a line of code and do not change the "
"meaning of the line, except inside comments. This makes some strange-looking "
"input legal. The line 'G0X +0. 12 34Y 7' is equivalent to 'G0 x+0.1234 Y7', "
"for example."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:72
msgid "Blank lines are allowed in the input. They are to be ignored."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:76
msgid ""
"Input is case insensitive, except in comments, i.e., any letter outside a "
"comment may be in upper or lower case without changing the meaning of a line."
msgstr ""

#. type: Title ===
#: src/gcode/overview.adoc:78
#, no-wrap
msgid "'/': Block Delete((('/' Block Delete)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:84
msgid ""
"The optional block delete character the slash '/' when placed first on a "
"line can be used by some user interfaces to skip lines of code when needed. "
"In Axis the key combination Alt-m-/ toggles block delete on and off. When "
"block delete is on any lines starting with the slash '/' are skipped."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:86
msgid ""
"In AXIS, it is also possible to enable block delete with the following icon:"
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:87
#, no-wrap
msgid "AXIS Block Delete Icon"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:89
msgid "image:../gui/images/tool_blockdelete.png[]"
msgstr ""

#. type: Title ===
#: src/gcode/overview.adoc:90
#, no-wrap
msgid "Line Number(((Line Number)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:99
msgid ""
"A line number is the letter N followed by an unsigned integer, optionally "
"followed by a period and another unsigned integer. For example, 'N1234' and "
"'N56.78' are valid line numbers. They may be repeated or used out of order, "
"although normal practice is to avoid such usage. Line numbers may also be "
"skipped, and that is normal practice. A line number is not required to be "
"used, but must be in the proper place if used."
msgstr ""

#. type: Title ===
#: src/gcode/overview.adoc:100
#, no-wrap
msgid "Word(((Words)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:103
msgid "A word is a letter other than N followed by a real value."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:110
msgid ""
"Words may begin with any of the letters shown in the following Table.  The "
"table includes N for completeness, even though, as defined above, line "
"numbers are not words. Several letters (I, J, K, L, P, R) may have different "
"meanings in different contexts.  Letters which refer to axis names are not "
"valid on a machine which does not have the corresponding axis."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:111
#, no-wrap
msgid "Words and their meanings"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:114
#, no-wrap
msgid "Letter"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:116
#, no-wrap
msgid "A axis of machine"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:117
#, no-wrap
msgid "B axis of machine"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:118
#, no-wrap
msgid "C axis of machine"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/overview.adoc:118 src/motion/pid-theory.adoc:157
#: src/motion/pid-theory.adoc:181 html/gcode.html:116
#, no-wrap
msgid "D"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:119
#, no-wrap
msgid "Tool radius compensation number"
msgstr ""

#. type: IP
#: src/gcode/overview.adoc:119 man/man3/hal_stream.3hal:176
#, no-wrap
msgid "F"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:120
#, no-wrap
msgid "G"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:121
#, no-wrap
msgid "General function (See table  <<cap:modal-groups,Modal Groups>>)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/overview.adoc:121 html/gcode.html:98 html/gcode.html:100
#, no-wrap
msgid "H"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:122
#, no-wrap
msgid "Tool length offset index"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:122 src/gui/axis.adoc:630
#: src/motion/pid-theory.adoc:156 src/motion/pid-theory.adoc:180
#, no-wrap
msgid "I"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:123
#, no-wrap
msgid "X offset for arcs and G87 canned cycles"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:123
#, no-wrap
msgid "J"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:124
#, no-wrap
msgid "Y offset for arcs and G87 canned cycles"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:124
#, no-wrap
msgid "K"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:125
#, no-wrap
msgid "Z offset for arcs and G87 canned cycles."
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:126
#, no-wrap
msgid "Spindle-Motion Ratio for G33 synchronized movements."
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:126 src/plasma/qtplasmac.adoc:2512
#, no-wrap
msgid "L"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:127
#, no-wrap
msgid "generic parameter word for G10, M66 and others"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:127
#, no-wrap
msgid "M"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:128
#, no-wrap
msgid "Miscellaneous function (See table  <<cap:modal-groups,Modal Groups>>)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:128
#, no-wrap
msgid "N"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:129
#, no-wrap
msgid "Line number"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/overview.adoc:129 src/gui/axis.adoc:641
#: src/motion/pid-theory.adoc:155 src/motion/pid-theory.adoc:180
#: src/motion/pid-theory.adoc:181 src/plasma/qtplasmac.adoc:762
#: html/gcode.html:60 html/gcode.html:151 html/gcode.html:161
#: html/gcode.html:162 html/gcode.html:164
#, no-wrap
msgid "P"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:130
#, no-wrap
msgid "Dwell time in canned cycles and with G4."
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:131
#, no-wrap
msgid "Key used with G10."
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/overview.adoc:131 html/gcode.html:158
#, no-wrap
msgid "Q"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:132
#, no-wrap
msgid "Feed increment in G73, G83 canned cycles"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:133
#, no-wrap
msgid "Arc radius or canned cycle plane"
msgstr ""

#. type: IP
#: src/gcode/overview.adoc:133 src/gui/axis.adoc:642
#: man/man3/hal_stream.3hal:172
#, no-wrap
msgid "S"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:134
#, no-wrap
msgid "Spindle speed"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gcode/overview.adoc:134 src/plasma/qtplasmac.adoc:761
#: html/gcode.html:153 html/gcode.html:154 html/gcode.html:157
#, no-wrap
msgid "T"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:135
#, no-wrap
msgid "Tool selection"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:136
#, no-wrap
msgid "U axis of machine"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:137
#, no-wrap
msgid "V axis of machine"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:138
#, no-wrap
msgid "W axis of machine"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:139
#, no-wrap
msgid "X axis of machine"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:140
#, no-wrap
msgid "Y axis of machine"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:141
#, no-wrap
msgid "Z axis of machine"
msgstr ""

#. type: Title ===
#: src/gcode/overview.adoc:144
#, no-wrap
msgid "Numbers(((Numbers)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:148
msgid ""
"The following rules are used for (explicit) numbers. In these rules a digit "
"is a single character between 0 and 9."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:150
msgid "A number consists of:"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:151
msgid "an optional plus or minus sign, followed by"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:152
msgid "zero to many digits, followed, possibly, by"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:153
msgid "one decimal point, followed by"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:155
msgid ""
"zero to many digits - provided that there is at least one digit somewhere in "
"the number."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:156
msgid "There are two kinds of numbers:"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:157
msgid "Integers, that does not have a decimal point,"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:158
msgid "Decimals, that do have a decimal point."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:161
msgid ""
"Numbers may have any number of digits, subject to the limitation on line "
"length. Only about seventeen significant figures will be retained, however "
"(enough for all known applications)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:163
msgid ""
"A non-zero number with no sign but the first character is assumed to be "
"positive."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:169
msgid ""
"Notice that initial (before the decimal point and the first non-zero digit) "
"and trailing (after the decimal point and the last non-zero digit) zeros are "
"allowed but not required. A number written with initial or trailing zeros "
"will have the same value when it is read as if the extra zeros were not "
"there."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:177
msgid ""
"Numbers used for specific purposes in RS274/NGC are often restricted to some "
"finite set of values or some to some range of values. In many uses, decimal "
"numbers must be close to integers; this includes the values of indices (for "
"parameters and carousel slot numbers, for example), M-codes, and G-codes "
"multiplied by ten. A decimal number which is intended to represent an "
"integer is considered close enough if it is within 0.0001 of an integer "
"value."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:191
msgid ""
"The RS274/NGC language supports 'parameters' - what in other programming "
"languages would be called 'variables'. There are several types of parameter "
"of different purpose and appearance, each described in the following "
"sections. The only value type supported by parameters is floating-point; "
"there are no string, boolean or integer types in G-code like in other "
"programming languages. However, logic expressions can be formulated with "
"<<gcode:binary-operators,boolean operators>> ( 'AND', 'OR', 'XOR', and the "
"comparison operators 'EQ','NE','GT','GE','LT','LE'), and the 'MOD', 'ROUND', "
"'FUP' and 'FIX' <<gcode:functions,operators>> support integer arithmetic."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:194
msgid ""
"Parameters differ in syntax, scope, behavior when not yet initialized, mode, "
"persistence and intended use."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:196
msgid "There are three kinds of syntactic appearance:"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:197
msgid "'numbered' - #4711"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:198
msgid "'named local' - #<localvalue>"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:199
msgid "'named global' - #<_globalvalue>"
msgstr ""

#. type: Labeled list
#: src/gcode/overview.adoc:200
#, no-wrap
msgid "Scope"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:207
msgid ""
"The scope of a parameter is either global, or local within a subroutine. "
"Subroutine parameters and local named variables have local scope. Global "
"named parameters and numbered parameters starting from number 31 are global "
"in scope. RS274/NGC uses 'lexical scoping' - in a subroutine only the local "
"variables defined therein, and any global variables are visible. The local "
"variables of a calling procedure are not visible in a called procedure."
msgstr ""

#. type: Labeled list
#: src/gcode/overview.adoc:208
#, no-wrap
msgid "Behavior of uninitialized parameters"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:211
msgid ""
"Uninitialized global parameters, and unused subroutine parameters return the "
"value zero when used in an expression."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:212
msgid ""
"Uninitialized named parameters signal an error when used in an expression."
msgstr ""

#. type: Title ===
#: src/gcode/overview.adoc:213 src/gcode/overview.adoc:488
#: src/gcode/overview.adoc:510 src/gui/axis.adoc:623 src/gui/halui.adoc:250
#, no-wrap
msgid "Mode"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:218
msgid ""
"Most parameters are read/write and may be assigned to within an assignment "
"statement. However, for many predefined parameters this does not make sense, "
"so they are are read-only - they may appear in expressions, but not on the "
"left-hand side of an assignment statement."
msgstr ""

#. type: Labeled list
#: src/gcode/overview.adoc:219
#, no-wrap
msgid "Persistence"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:228
msgid ""
"When LinuxCNC is shut down, volatile parameters lose their values. All "
"parameters except numbered parameters in the current persistent range "
"footnoteref:[persistent_range,The range of persistent parameters may change "
"as development progresses. This range is currently 5161- 5390. It is defined "
"in the '_required_parameters array' in file the src/emc/rs274ngc/"
"interp_array.cc .] are volatile.  Persistent parameters are saved in the ."
"var file and restored to their previous values when LinuxCNC is started "
"again. Volatile numbered parameters are reset to zero."
msgstr ""

#. type: Labeled list
#: src/gcode/overview.adoc:229
#, no-wrap
msgid "Intended Use"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:235
msgid ""
"user parameters - numbered parameters in the range 31..5000, and named "
"global and local parameters except predefined parameters. These are "
"available for general-purpose storage of floating-point values, like "
"intermediate results, flags etc, throughout program execution. They are read/"
"write (can be assigned a value)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:237
msgid ""
"<<sub:subroutine-parameters,subroutine parameters>> - these are used to hold "
"the actual parameters passed to a subroutine."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:239
msgid ""
"<<sub:numbered-parameters,numbered parameters>> - most of these are used to "
"access offsets of coordinate systems."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:241
msgid ""
"<<sub:system-parameters,system parameters>> - used to determine the current "
"running version. They are read-only."
msgstr ""

#. type: Title ===
#: src/gcode/overview.adoc:243
#, no-wrap
msgid "Numbered Parameters(((Numbered Parameters)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:254
msgid ""
"A numbered parameter is the pound character '#' followed by an integer "
"between 1 and (currently) 5602 footnote:[The RS274/NGC interpreter maintains "
"an array of numbered parameters. Its size is defined by the symbol "
"'RS274NGC_MAX_PARAMETERS' in the file src/emc/rs274ngc/interp_internal.hh). "
"This number of numerical parameters may also increase as development adds "
"support for new parameters.]. The parameter is referred to by this integer, "
"and its value is whatever number is stored in the parameter."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:256
msgid "A value is stored in a parameter with the = operator; for example:"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:259
#, no-wrap
msgid "#3 = 15 (set parameter 3 to 15)\n"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:267
msgid ""
"A parameter setting does not take effect until after all parameter values on "
"the same line have been found. For example, if parameter 3 has been "
"previously set to 15 and the line '#3=6 G1 X#3' is interpreted, a straight "
"move to a point where X equals 15 will occur and the value of parameter 3 "
"will be 6."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:275
msgid ""
"The '\\#' character takes precedence over other operations, so that, for "
"example, '\\#1+2' means the number found by adding 2 to the value of "
"parameter 1, not the value found in parameter 3. Of course, '\\#[1+2]' does "
"mean the value found in parameter 3. The '\\#' character may be repeated; "
"for example '##2' means the value of the parameter whose index is the "
"(integer) value of parameter 2."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:278
msgid ""
"'31-5000' - G-code user parameters. These parameters are global in the G "
"code file, and available for general use. Volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:281
msgid ""
"'5061-5069' - Coordinates of a <<gcode:g38,G38>> probe result (X, Y, Z, A, "
"B, C, U, V & W).  Coordinates are in the coordinate system in which the G38 "
"took place.  Volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:283
msgid ""
"'5070' - <<gcode:g38,G38>> probe result: 1 if success, 0 if probe failed to "
"close.  Used with G38.3 and G38.5. Volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:284
msgid "'5161-5169' - \"G28\" Home for X, Y, Z, A, B, C, U, V & W. Persistent."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:285
msgid "'5181-5189' - \"G30\" Home for X, Y, Z, A, B, C, U, V & W. Persistent."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:289
msgid ""
"'5210' - 1 if \"G52\" or \"G92\" offset is currently applied, 0 otherwise.  "
"Volatile by default; persistent if 'DISABLE_G92_PERSISTENCE = 1' in the "
"'[RS274NGC]' section of the INI file."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:293
msgid ""
"'5211-5219' - Shared \"G52\" and \"G92\" offset for X, Y, Z, A, B, C, U, V & "
"W.  Volatile by default; persistent if 'DISABLE_G92_PERSISTENCE = 1' in the "
"'[RS274NGC]' section of the INI file."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:294
msgid "'5220' - Coordinate System number 1 - 9 for G54 - G59.3. Persistent."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:296
msgid ""
"'5221-5230' - Coordinate System 1, G54 for X, Y, Z, A, B, C, U, V, W & R.  R "
"denotes the XY rotation angle around the Z axis. Persistent."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:298
msgid ""
"'5241-5250' - Coordinate System 2, G55 for X, Y, Z, A, B, C, U, V, W & R.  "
"Persistent."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:300
msgid ""
"'5261-5270' - Coordinate System 3, G56 for X, Y, Z, A, B, C, U, V, W & R.  "
"Persistent."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:302
msgid ""
"'5281-5290' - Coordinate System 4, G57 for X, Y, Z, A, B, C, U, V, W & R.  "
"Persistent."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:304
msgid ""
"'5301-5310' - Coordinate System 5, G58 for X, Y, Z, A, B, C, U, V, W & R.  "
"Persistent."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:306
msgid ""
"'5321-5330' - Coordinate System 6, G59 for X, Y, Z, A, B, C, U, V, W & R.  "
"Persistent."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:308
msgid ""
"'5341-5350' - Coordinate System 7, G59.1 for X, Y, Z, A, B, C, U, V, W & R.  "
"Persistent."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:310
msgid ""
"'5361-5370' - Coordinate System 8, G59.2 for X, Y, Z, A, B, C, U, V, W & R.  "
"Persistent."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:312
msgid ""
"'5381-5390' - Coordinate System 9, G59.3 for X, Y, Z, A, B, C, U, V, W & R.  "
"Persistent."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:313
msgid "'5399' - Result of M66 - Check or wait for input. Volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:314
msgid "'5400' - Tool Number. Volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:315
msgid "'5401-5409' - Tool Offsets for X, Y, Z, A, B, C, U, V & W. Volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:316
msgid "'5410' - Tool Diameter. Volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:317
msgid "'5411' - Tool Front Angle. Volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:318
msgid "'5412' - Tool Back Angle. Volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:319
msgid "'5413' - Tool Orientation. Volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:322
msgid ""
"'5420-5428' - Current relative position in the active coordinate system "
"including all offsets and in the current program units for X, Y, Z, A, B, C, "
"U, V & W, volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:324
msgid ""
"'5599' - Flag for controlling the output of (DEBUG,) statements.  1=output, "
"0=no output; default=1. Volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:326
msgid ""
"'5600' - Toolchanger fault indicator. Used with the iocontrol-v2 component.  "
"1: toolchanger faulted, 0: normal. Volatile."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:329
msgid ""
"'5601' - Toolchanger fault code. Used with the iocontrol-v2 component.  "
"Reflects the value of the 'toolchanger-reason' HAL pin if a fault occurred.  "
"Volatile."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:330
#, no-wrap
msgid "Numbered Parameters Persistence"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:336
msgid ""
"The values of parameters in the persistent range are retained over time, "
"even if the machining center is powered down. LinuxCNC uses a parameter file "
"to ensure persistence. It is managed by the Interpreter. The Interpreter "
"reads the file when it starts up, and writes the file when it exits."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:339
msgid ""
"The format of a parameter file is shown in Table <<gcode:format-parameter-"
"file,Parameter File Format>>."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:347
msgid ""
"The Interpreter expects the file to have two columns. It skips any lines "
"which do not contain exactly two numeric values. The first column is "
"expected to contain an integer value (the parameter's number). The second "
"column contains a floating point number (this parameter's last value). The "
"value is represented as a double-precision floating point number inside the "
"Interpreter, but a decimal point is not required in the file."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:351
msgid ""
"Parameters in the user-defined range (31-5000) may be added to this file. "
"Such parameters will be read by the Interpreter and written to the file as "
"it exits."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:354
msgid ""
"Missing Parameters in the persistent range will be initialized to zero and "
"written with their current values on the next save operation."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:358
msgid ""
"The parameter numbers must be arranged in ascending order. An 'Parameter "
"file out of order' error will be signaled if they are not in ascending order."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:361
msgid ""
"The original file is saved as a backup file when the new file is written."
msgstr ""

#. type: Title ===
#: src/gcode/overview.adoc:372
#, no-wrap
msgid "Subroutine Parameters(((Subroutine Parameters)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:377
msgid ""
"'1-30' Subroutine local parameters of call arguments. These parameters are "
"local to the subroutine. Volatile. See also the chapter on <<cha:o-codes,O-"
"Codes>>."
msgstr ""

#. type: Title ===
#: src/gcode/overview.adoc:379
#, no-wrap
msgid "Named Parameters(((Named Parameters)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:385
msgid ""
"Named parameters work like numbered parameters but are easier to read.  All "
"parameter names are converted to lower case and have spaces and tabs "
"removed, so '#<param>' and '#<P a R am >' refer to the same parameter. Named "
"parameters must be enclosed with '< >' marks."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:391
msgid ""
"'#<named parameter>' is a local named parameter. By default, a named "
"parameter is local to the scope in which it is assigned. You can't access a "
"local parameter outside of its subroutine. This means that two subroutines "
"can use the same parameter names without fear of one subroutine overwriting "
"the values in another."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:396
msgid ""
"'#<_global named parameter>' is a global named parameter. They are "
"accessible from within called subroutines and may set values within "
"subroutines that are accessible to the caller. As far as scope is concerned, "
"they act just like regular numeric parameters. They are not stored in files."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:398 src/getting-started/updating-linuxcnc.adoc:383
#: src/plasma/qtplasmac.adoc:1825 src/remap/remap.adoc:1701
msgid "Examples:"
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:399
#, no-wrap
msgid "Declaration of named global variable"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:402
#, no-wrap
msgid "#<_endmill_dia> = 0.049\n"
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:404
#, no-wrap
msgid "Reference to previously declared global variable"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:407
#, no-wrap
msgid "#<_endmill_rad> = [#<_endmill_dia>/2.0]\n"
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:409
#, no-wrap
msgid "Mixed literal and named parameters"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:412
#, no-wrap
msgid "o100 call [0.0] [0.0] [#<_inside_cutout>-#<_endmill_dia>] [#<_Zcut>] [#<_feedrate>]\n"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:418
msgid ""
"Named parameters spring into existence when they are assigned a value for "
"the first time. Local named parameters vanish when their scope is left: when "
"a subroutine returns, all its local parameters are deleted and cannot be "
"referred to anymore."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:423
msgid ""
"It is an error to use a non-existent named parameter within an expression, "
"or at the right-hand side of an assignment. Printing the value of a non-"
"existent named parameter with a DEBUG statement - like '(DEBUG, "
"#<no_such_parameter>)' will display the string '######'."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:427
msgid ""
"Global parameters, as well as local parameters assigned to at the global "
"level, retain their value once assigned even when the program ends, and have "
"these values when the program is run again."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:429
msgid ""
"The <<gcode:functions,'EXISTS' function>> tests whether a given named "
"parameter exists."
msgstr ""

#. type: Title ===
#: src/gcode/overview.adoc:431
#, no-wrap
msgid "Predefined Named Parameters(((Predefined Named Parameters)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:439
msgid ""
"The following global read only named parameters are available to access "
"internal state of the interpreter and machine state. They can be used in "
"arbitrary expressions, for instance to control flow of the program with if-"
"then-else statements. Note that new <<remap:adding-predefined-named-"
"parameters,predefined named parameters>> can be added easily without changes "
"to the source code."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:441
msgid ""
"'#<_vmajor>' - Major package version. If current version was 2.5.2 would "
"return 2.5."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:442
msgid ""
"'#<_vminor>' - Minor package version. If current version was 2.6.2 it would "
"return 0.2."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:443
msgid ""
"'#<_line>' - Sequence number. If running a G-code file, this returns the "
"current line number."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:444
msgid "'#<_motion_mode>' - Return the interpreter's current motion mode:"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:447
#, no-wrap
msgid "Motion mode"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:448 src/gcode/overview.adoc:476
#: src/gcode/overview.adoc:489 src/gcode/overview.adoc:511
#, no-wrap
msgid "return value"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:448
#, no-wrap
msgid "G1"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:449
#, no-wrap
msgid "G2"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:450 src/ladder/classic-ladder.adoc:104
#: src/ladder/classic-ladder.adoc:105 src/plasma/qtplasmac.adoc:3765
#: src/remap/remap.adoc:2174
#, no-wrap
msgid "20"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:450
#, no-wrap
msgid "G3"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:451 src/remap/remap.adoc:2190
#, no-wrap
msgid "30"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:451
#, no-wrap
msgid "G33"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:452
#, no-wrap
msgid "330"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:453
#, no-wrap
msgid "382"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:454
#, no-wrap
msgid "383"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:455
#, no-wrap
msgid "384"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:456
#, no-wrap
msgid "385"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:456
#, no-wrap
msgid "G5.2"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:457 src/remap/remap.adoc:2224
#, no-wrap
msgid "52"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:457
#, no-wrap
msgid "G73"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:458
#, no-wrap
msgid "730"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:459
#, no-wrap
msgid "760"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:460 src/integrator/stepper-timing.adoc:42
#, no-wrap
msgid "800"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:461
#, no-wrap
msgid "810"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:462
#, no-wrap
msgid "820"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:463
#, no-wrap
msgid "830"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:464
#, no-wrap
msgid "840"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:465 src/integrator/stepper-timing.adoc:82
#: src/integrator/stepper-timing.adoc:83
#, no-wrap
msgid "850"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:466
#, no-wrap
msgid "860"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:467
#, no-wrap
msgid "870"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:468
#, no-wrap
msgid "880"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:469
#, no-wrap
msgid "890"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:472
msgid "'#<_plane>' - returns the value designating the current plane:"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:475
#, no-wrap
msgid "Plane"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:477
#, no-wrap
msgid "170"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:478
#, no-wrap
msgid "180"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:479
#, no-wrap
msgid "190"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:479 src/remap/remap.adoc:2165
#, no-wrap
msgid "G17.1"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:480
#, no-wrap
msgid "171"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:480 src/remap/remap.adoc:2166
#, no-wrap
msgid "G18.1"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:481
#, no-wrap
msgid "181"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:481 src/remap/remap.adoc:2167
#, no-wrap
msgid "G19.1"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:482
#, no-wrap
msgid "191"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:485
msgid "'#<_ccomp>' - Status of cutter compensation. Return values:"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:490
#, no-wrap
msgid "400"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:490 src/gcode/overview.adoc:492
#: src/remap/remap.adoc:2207
#, no-wrap
msgid "G41"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:491 src/gcode/overview.adoc:493
#, no-wrap
msgid "410"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:491 src/remap/remap.adoc:2207
#, no-wrap
msgid "G41.1"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:492
#, no-wrap
msgid "411"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:493 src/remap/remap.adoc:2208
#, no-wrap
msgid "G42"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:494
#, no-wrap
msgid "420"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:494 src/remap/remap.adoc:2208
#, no-wrap
msgid "G42.1"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:495
#, no-wrap
msgid "421"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:498
msgid "'#<_metric>' - Return 1 if G21 is on, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:499
msgid "'#<_imperial>' - Return 1 if G20 is on, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:500
msgid "'#<_absolute>' - Return 1 if G90 is on, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:501
msgid "'#<_incremental>' - Return 1 if G91 is on, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:502
msgid "'#<_inverse_time>' - Return 1 if inverse feed mode (G93) is on, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:503
msgid ""
"'#<_units_per_minute>' - Return 1 if Units/minute feed mode (G94) is on, "
"else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:504
msgid ""
"'#<_units_per_rev>' - Return 1 if Units/revolution mode (G95) is on, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:507
msgid ""
"'#<_coord_system>' - Return a float of the current coordinate system name "
"(G54..G59.3).  For example if your in G55 coordinate system the return value "
"is 550.000000 and if your in G59.1 the return value is 591.000000."
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:512
#, no-wrap
msgid "540"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:513
#, no-wrap
msgid "550"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:514
#, no-wrap
msgid "560"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:515
#, no-wrap
msgid "570"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:516
#, no-wrap
msgid "580"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:517
#, no-wrap
msgid "590"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:518
#, no-wrap
msgid "591"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:519
#, no-wrap
msgid "592"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:520
#, no-wrap
msgid "593"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:523
msgid "'#<_tool_offset>' - Return 1 if tool offset (G43) is on, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:524
msgid "'#<_retract_r_plane>' - Return 1 if G98 is set, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:525
msgid "'#<_retract_old_z>' - Return 1 if G99 is on, else 0."
msgstr ""

#. type: Title ===
#: src/gcode/overview.adoc:527
#, no-wrap
msgid "System Parameters(((System Parameters)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:530
msgid ""
"'#<_spindle_rpm_mode>' - Return 1 if spindle rpm mode (G97) is on, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:531
msgid ""
"'#<_spindle_css_mode>' - Return 1 if constant surface speed mode (G96) is "
"on, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:532
msgid ""
"'#<_ijk_absolute_mode>' - Return 1 if Absolute Arc distance mode (G90.1) is "
"on, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:533
msgid ""
"'#<_lathe_diameter_mode>' - Return 1 if this is a lathe configuration and "
"diameter (G7) mode is on, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:534
msgid ""
"'#<_lathe_radius_mode>' - Return 1 if this is a lathe configuration and "
"radius (G8) mode is on, else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:535
msgid ""
"'#<_spindle_on>' - Return 1 if spindle currently running (M3 or M4) else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:536
msgid ""
"'#<_spindle_cw>' - Return 1 if spindle direction is clockwise (M3) else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:537
msgid "'#<_mist>' - Return 1 if mist (M7) is on."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:538
msgid "'#<_flood>' - Return 1 if flood (M8) is on."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:539
msgid ""
"'#<_speed_override>' - Return 1 if feed override (M48 or M50 P1) is on, else "
"0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:540
msgid ""
"'#<_feed_override>' - Return 1 if feed override (M48 or M51 P1) is on, else "
"0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:541
msgid ""
"'#<_adaptive_feed>' - Return 1 if adaptive feed (M52 or M52 P1) is on, else "
"0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:542
msgid ""
"'#<_feed_hold>' - Return 1 if feed hold switch is enabled (M53 P1), else 0."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:543
msgid "'#<_feed>' - Return the current value of F, not the actual feed rate."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:544
msgid ""
"'#<_rpm>' - Return the current value of S, not the actual spindle speed."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:546
msgid ""
"'#<_x>' - Return current relative X coordinate including all offsets. Same "
"as #5420.  In a lathe configuration, it always returns radius."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:547
msgid ""
"'#<_y>' - Return current relative Y coordinate including all offsets. Same "
"as #5421."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:548
msgid ""
"'#<_z>' - Return current relative Z coordinate including all offsets. Same "
"as #5422."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:549
msgid ""
"'#<_a>' - Return current relative A coordinate including all offsets. Same "
"as #5423."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:550
msgid ""
"'#<_b>' - Return current relative B coordinate including all offsets. Same "
"as #5424."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:551
msgid ""
"'#<_c>' - Return current relative C coordinate including all offsets. Same "
"as #5425."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:552
msgid ""
"'#<_u>' - Return current relative U coordinate including all offsets. Same "
"as #5426."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:553
msgid ""
"'#<_v>' - Return current relative V coordinate including all offsets. Same "
"as #5427."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:554
msgid ""
"'#<_w>' - Return current relative W coordinate including all offsets. Same "
"as #5428."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:555
msgid ""
"'#<_abs_x>' - Return current absolute X coordinate (G53) including no "
"offsets."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:556
msgid ""
"'#<_abs_y>' - Return current absolute Y coordinate (G53) including no "
"offsets."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:557
msgid ""
"'#<_abs_z>' - Return current absolute Z coordinate (G53) including no "
"offsets."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:558
msgid ""
"'#<_abs_a>' - Return current absolute A coordinate (G53) including no "
"offsets."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:559
msgid ""
"'#<_abs_b>' - Return current absolute B coordinate (G53) including no "
"offsets."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:560
msgid ""
"'#<_abs_c>' - Return current absolute C coordinate (G53) including no "
"offsets."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:561
msgid ""
"'#<_current_tool>' - Return number of the current tool in spindle. Same as "
"#5400."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:562
msgid "'#<_current_pocket>' - Return the tooldata index for the current tool."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:563
msgid ""
"'#<_selected_tool>' - Return number of the selected tool post a T code. "
"Default -1."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:565
msgid ""
"'#<_selected_pocket>' - Return the tooldata index of the selected pocket "
"post a T code.  Default -1 (no pocket selected)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:568
msgid ""
"'#<_value>' - Return value from the last O-word 'return' or 'endsub'. "
"Default value 0 if no expression after 'return' or 'endsub'. Initialized to "
"0 on program start."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:570
msgid ""
"'#<_value_returned>' - 1.0 if the last O-word 'return' or 'endsub' returned "
"a value, 0 otherwise. Cleared by the next O-word call."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:575
msgid ""
"'#<_task>' - 1.0 if the executing interpreter instance is part of milltask, "
"0.0 otherwise. Sometimes it is necessary to treat this case specially to "
"retain proper preview, for instance when testing the success of a probe (G38."
"n) by inspecting #5070, which will always fail in the preview interpreter (e."
"g. Axis)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:576
msgid ""
"'#<_call_level>' - current nesting level of O-word procedures. For debugging."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:578
msgid ""
"'#<_remap_level>' - current level of the remap stack. Each remap in a block "
"adds one to the remap level. For debugging."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:580
#, no-wrap
msgid "HAL pins and INI values(((HAL pins and INI values)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:584
msgid ""
"If enabled in the <<sub:ini:sec:rs274ngc, INI file>> G-code has access to "
"the values of INI file entries and HAL pins."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:587
msgid ""
"'#<_ini[section]name>' Returns the value of the corresponding item in the "
"INI file."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:589
msgid "For example, if the INI file looks like so:"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:595
#, no-wrap
msgid ""
"[SETUP]\n"
"XPOS = 3.145\n"
"YPOS = 2.718\n"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:599
msgid ""
"you may refer to the named parameters `#<_ini[setup]xpos>` and "
"`#<_ini[setup]ypos>` within G-code."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:602
msgid "`EXISTS` can be used to test for presence of a given INI file variable:"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:610
#, no-wrap
msgid ""
"o100 if [EXISTS[#<_ini[setup]xpos>]]\n"
"  (debug, [setup]xpos exists: #<_ini[setup]xpos>)\n"
"o100 else\n"
"  (debug, [setup]xpos does not exist)\n"
"o100 endif\n"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:616
msgid ""
"The value is read from the INI file once, and cached in the interpreter. "
"These parameters are read-only - assigning a value will cause a runtime "
"error. The names are not case sensitive - they are converted to uppercase "
"before consulting the INI file."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:625
msgid ""
"'#<_hal[HAL item]>' Allows G-code programs to read the values of HAL pins "
"Variable access is read-only, the only way to _set_ HAL pins from G-code "
"remains M62-M65, M67, M68 and custom M100-M199 codes.  Note that the value "
"read will not update in real-time, typically the value that was on the pin "
"when the G-code program was started will be returned. It is possible to work "
"round this by forcing a state synch.  One way to do this is with a dummy M66 "
"command: M66E0L0"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:631
#, no-wrap
msgid "(debug, #<_hal[motion-controller.time]>)\n"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:635
msgid ""
"Access of HAL items is read-only. Currently, only all-lowercase HAL names "
"can be accessed this way."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:637
msgid "`EXISTS` can be used to test for the presence of a given HAL item:"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:645
#, no-wrap
msgid ""
"o100 if [EXISTS[#<_hal[motion-controller.time]>]]\n"
"  (debug, [motion-controller.time] exists: #<_hal[motion-controller.time]>)\n"
"o100 else\n"
"  (debug, [motion-controller.time] does not exist)\n"
"o100 endif\n"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:653
msgid ""
"This feature was motivated by the desire for stronger coupling between user "
"interface components like `GladeVCP` and `PyVCP` to act as parameter source "
"for driving NGC file behavior. The alternative - going through the M6x pins "
"and wiring them - has a limited, non-mnemonic namespace and is unnecessarily "
"cumbersome just as a UI/Interpreter communications mechanism."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:655
#, no-wrap
msgid "Expressions(((Expressions)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:664
msgid ""
"An expression is a set of characters starting with a left bracket '[' and "
"ending with a balancing right bracket ']' . In between the brackets are "
"numbers, parameter values, mathematical operations, and other expressions. "
"An expression is evaluated to produce a number. The expressions on a line "
"are evaluated when the line is read, before anything on the line is "
"executed. An example of an expression is '[1 + acos[0] - [#3 ** [4.0/2]]]'."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:666
#, no-wrap
msgid "Binary Operators(((Binary Operators)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:678
msgid ""
"Binary operators only appear inside expressions. There are four basic "
"mathematical operations: addition ('+'), subtraction ('-'), multiplication "
"('\\*'), and division ('/'). There are three logical operations: non-"
"exclusive or ('OR'), exclusive or ('XOR'), and logical and ('AND'). The "
"eighth operation is the modulus operation ('MOD'). The ninth operation is "
"the 'power' operation ('**') of raising the number on the left of the "
"operation to the power on the right. The relational operators are equality "
"('EQ'), inequality ('NE'), strictly greater than ('GT'), greater than or "
"equal to ('GE'), strictly less than ('LT'), and less than or equal to ('LE')."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:688
msgid ""
"The binary operations are divided into several groups according to their "
"precedence. If operations in different precedence groups are strung together "
"(for example in the expression '[2.0 / 3 * 1.5 - 5.5 / 11.0]'), operations "
"in a higher group are to be performed before operations in a lower group. If "
"an expression contains more than one operation from the same group (such as "
"the first '/' and '*' in the example), the operation on the left is "
"performed first. Thus, the example is equivalent to: '[ [ [2.0 / 3] * 1.5] - "
"[5.5 / 11.0] ]' , which is equivalent to to '[1.0 - 0.5]' , which is '0.5'."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:692
msgid ""
"The logical operations and modulus are to be performed on any real numbers, "
"not just on integers. The number zero is equivalent to logical false, and "
"any non-zero number is equivalent to logical true."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:694
#, no-wrap
msgid "Operators Precedence(((Operators Precedence)))"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:697
#, no-wrap
msgid "Operators"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:698
#, no-wrap
msgid "Precedence"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:698
#, no-wrap
msgid "**"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:699
#, no-wrap
msgid "'highest'"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:699
#, no-wrap
msgid "* / MOD"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:700
#, no-wrap
msgid "+ -"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:701
#, no-wrap
msgid "EQ NE GT GE LT LE"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:702
#, no-wrap
msgid "AND OR XOR"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:703
#, no-wrap
msgid "'lowest'"
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:705
#, no-wrap
msgid "Equality and floating-point values"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:713
msgid ""
"The RS274/NGC language only supports floating-point values of finite "
"precision. Therefore, testing for equality or inequality of two floating-"
"point values is inherently problematic. The interpreter solves this problem "
"by considering values equal if their absolute difference is less than 0.0001 "
"(this value is defined as 'TOLERANCE_EQUAL' in src/emc/rs274ngc/"
"interp_internal.hh)."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:715
#, no-wrap
msgid "Functions(((Functions)))(((Unary operations)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:721
msgid ""
"The available functions are shown in following table. Arguments to unary "
"operations which take angle measures ('COS', 'SIN', and 'TAN' ) are in "
"degrees. Values returned by unary operations which return angle measures "
"('ACOS', 'ASIN', and 'ATAN') are also in degrees."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:722
#, no-wrap
msgid "G-code Functions"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:725
#, no-wrap
msgid "Function Name"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:726
#, no-wrap
msgid "Function result"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:726
#, no-wrap
msgid "ATAN[arg]/[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:727
#, no-wrap
msgid "Four quadrant inverse tangent"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:727
#, no-wrap
msgid "ABS[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:728
#, no-wrap
msgid "Absolute value"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:728
#, no-wrap
msgid "ACOS[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:729
#, no-wrap
msgid "Inverse cosine"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:729
#, no-wrap
msgid "ASIN[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:730
#, no-wrap
msgid "Inverse sine"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:730
#, no-wrap
msgid "COS[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:731
#, no-wrap
msgid "Cosine"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:731
#, no-wrap
msgid "EXP[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:732
#, no-wrap
msgid "e raised to the given power"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:732
#, no-wrap
msgid "FIX[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:733
#, no-wrap
msgid "Round down to integer"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:733
#, no-wrap
msgid "FUP[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:734
#, no-wrap
msgid "Round up to integer"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:734
#, no-wrap
msgid "ROUND[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:735
#, no-wrap
msgid "Round to nearest integer"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:735
#, no-wrap
msgid "LN[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:736
#, no-wrap
msgid "Base-e logarithm"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:736
#, no-wrap
msgid "SIN[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:737
#, no-wrap
msgid "Sine"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:737
#, no-wrap
msgid "SQRT[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:738
#, no-wrap
msgid "Square Root"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:738
#, no-wrap
msgid "TAN[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:739
#, no-wrap
msgid "Tangent"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:739
#, no-wrap
msgid "EXISTS[arg]"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:740
#, no-wrap
msgid "Check named Parameter"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:744
msgid ""
"The 'FIX' function rounds towards the left (less positive or more negative)  "
"on a number line, so that 'FIX[2.8] =2' and 'FIX[-2.8] = -3'."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:747
msgid ""
"The 'FUP' operation rounds towards the right (more positive or less "
"negative) on a number line; 'FUP[2.8] = 3' and 'FUP[-2.8] = -2'."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:752
msgid ""
"The 'EXISTS' function checks for the existence of a single named parameter.  "
"It takes only one named parameter and returns 1 if it exists and 0 if it "
"does not exist. It is an error if you use a numbered parameter or an "
"expression.  Here is an example for the usage of the EXISTS function:"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:762
#, no-wrap
msgid ""
"o<test> sub\n"
"o10 if [EXISTS[#<_global>]]\n"
"    (debug, _global exists and has the value #<_global>)\n"
"o10 else\n"
"    (debug, _global does not exist)\n"
"o10 endif\n"
"o<test> endsub\n"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:767
#, no-wrap
msgid ""
"o<test> call\n"
"#<_global> = 4711\n"
"o<test> call\n"
"m2\n"
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:769
#, no-wrap
msgid "Repeated Items"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:774
msgid ""
"A line may have any number of G words, but two G words from the same modal "
"group may not appear on the same line.  See the <<gcode:modal-groups,Modal "
"Groups>> section for more information."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:777
msgid ""
"A line may have zero to four M words. Two M words from the same modal group "
"may not appear on the same line."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:780
msgid ""
"For all other legal letters, a line may have only one word beginning with "
"that letter."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:785
msgid ""
"If a parameter setting of the same parameter is repeated on a line, '#3=15 "
"#3=6', for example, only the last setting will take effect.  It is silly, "
"but not illegal, to set the same parameter twice on the same line."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:790
msgid ""
"If more than one comment appears on a line, only the last one will be used; "
"each of the other comments will be read and its format will be checked, but "
"it will be ignored thereafter. It is expected that putting more than one "
"comment on a line will be very rare."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:791
#, no-wrap
msgid "Item order"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:797
msgid ""
"The three types of item whose order may vary on a line (as given at the "
"beginning of this section) are word, parameter setting, and comment. Imagine "
"that these three types of item are divided into three groups by type."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:800
msgid ""
"The first group (the words) may be reordered in any way without changing the "
"meaning of the line."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:808
msgid ""
"If the second group (the parameter settings) is reordered, there will be no "
"change in the meaning of the line unless the same parameter is set more than "
"once. In this case, only the last setting of the parameter will take effect. "
"For example, after the line '#3=15 #3=6' has been interpreted, the value of "
"parameter 3 will be 6. If the order is reversed to '#3=6 #3=15' and the line "
"is interpreted, the value of parameter 3 will be 15."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:811
msgid ""
"If the third group (the comments) contains more than one comment and is "
"reordered, only the last comment will be used."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:819
msgid ""
"If each group is kept in order or reordered without changing the meaning of "
"the line, then the three groups may be interleaved in any way without "
"changing the meaning of the line. For example, the line 'g40 g1 #3=15 (foo) "
"#4=-7.0' has five items and means exactly the same thing in any of the 120 "
"possible orders (such as '#4=-7.0 g1 #3=15 g40 (foo)') for the five items."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:820
#, no-wrap
msgid "Commands and Machine Modes"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:831
msgid ""
"Many commands cause the controller to change from one mode to another, and "
"the mode stays active until some other command changes it implicitly or "
"explicitly. Such commands are called 'modal'. For example, if coolant is "
"turned on, it stays on until it is explicitly turned off. The G-codes for "
"motion are also modal. If a G1 (straight move) command is given on one line, "
"for example, it will be executed again on the next line if one or more axis "
"words is available on the line, unless an explicit command is given on that "
"next line using the axis words or canceling motion."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:834
msgid ""
"'Non-modal' codes have effect only on the lines on which they occur.  For "
"example, G4 (dwell) is non-modal."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:836
#, no-wrap
msgid "Polar Coordinates(((Polar Coordinates)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:846
msgid ""
"Polar Coordinates can be used to specify the XY coordinate of a move.  The "
"@n is the distance and ^n is the angle. The advantage of this is for things "
"like bolt hole circles which can be done very simply by moving to a point in "
"the center of the circle, setting the offset and then moving out to the "
"first hole then run the drill cycle.  Polar Coordinates always are from the "
"current XY zero position.  To shift the Polar Coordinates from machine zero "
"use an offset or select a coordinate system."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:850
msgid ""
"In Absolute Mode the distance and angle is from the XY zero position and the "
"angle starts with 0 on the X Positive axis and increases in a CCW direction "
"about the Z axis. The code G1 @1^90 is the same as G1 Y1."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:854
msgid ""
"In Relative Mode the distance and angle is also from the XY zero position "
"but it is cumulative.  This can be confusing at first how this works in "
"incremental mode."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:857
msgid ""
"For example if you have the following program you might expect it to be a "
"square pattern:"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:866
#, no-wrap
msgid ""
"F100 G1 @.5 ^90\n"
"G91 @.5 ^90\n"
"@.5 ^90\n"
"@.5 ^90\n"
"@.5 ^90\n"
"G90 G0 X0 Y0 M2\n"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:871
msgid ""
"You can see from the following figure that the output is not what you might "
"expect. Because we added 0.5 to the distance each time the distance from the "
"XY zero position increased with each line."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/overview.adoc:873 src/gcode/overview.adoc:874
#, no-wrap
msgid "Polar Spiral"
msgstr ""

#. type: Target for macro image
#: src/gcode/overview.adoc:874
#, no-wrap
msgid "images/polar01.png"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:877
msgid "The following code will produce our square pattern:"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:886
#, no-wrap
msgid ""
"F100 G1 @.5 ^90\n"
"G91 ^90\n"
"^90\n"
"^90\n"
"^90\n"
"G90 G0 X0 Y0 M2\n"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:890
msgid ""
"As you can see by only adding to the angle by 90 degrees each time the end "
"point distance is the same for each line."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/overview.adoc:892 src/gcode/overview.adoc:893
#, no-wrap
msgid "Polar Square"
msgstr ""

#. type: Target for macro image
#: src/gcode/overview.adoc:893
#, no-wrap
msgid "images/polar02.png"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:898
msgid "An incremental move is started at the origin"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:899
msgid "A mix of Polar and X or Y words are used"
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:901
#, no-wrap
msgid "Modal Groups(((Modal Groups)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:910
msgid ""
"Modal commands are arranged in sets called 'modal groups', and only one "
"member of a modal group may be in force at any given time. In general, a "
"modal group contains commands for which it is logically impossible for two "
"members to be in effect at the same time - like measure in inches vs. "
"measure in millimeters. A machining center may be in many modes at the same "
"time, with one mode from each modal group being in effect. The modal groups "
"are shown in the following Table."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:912
#, no-wrap
msgid "G-code Modal Groups(((Modal Groups: G-codes)))"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:915 src/gcode/overview.adoc:937
#, no-wrap
msgid "Modal Group Meaning"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:916 src/gcode/overview.adoc:938
#, no-wrap
msgid "Member Words"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:916
#, no-wrap
msgid "Non-modal codes (Group 0)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:917
#, no-wrap
msgid "G4, G10 G28, G30, G52, G53, G92, G92.1, G92.2, G92.3,"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:917
#, no-wrap
msgid "Motion (Group 1)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:918
#, no-wrap
msgid "G0, G1, G2, G3, G33, G38.n, G73, G76, G80, G81"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:919
#, no-wrap
msgid "G82, G83, G84, G85, G86, G87, G88, G89"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:919
#, no-wrap
msgid "Plane selection (Group 2)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:920
#, no-wrap
msgid "G17, G18, G19, G17.1, G18.1, G19.1"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:920
#, no-wrap
msgid "Distance Mode (Group 3)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:921
#, no-wrap
msgid "G90, G91"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:921
#, no-wrap
msgid "Arc IJK Distance Mode (Group 4)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:922
#, no-wrap
msgid "G90.1, G91.1"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:922
#, no-wrap
msgid "Feed Rate Mode (Group 5)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:923
#, no-wrap
msgid "G93, G94, G95"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:923
#, no-wrap
msgid "Units (Group 6)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:924
#, no-wrap
msgid "G20, G21"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:924
#, no-wrap
msgid "Cutter Diameter Compensation (Group 7)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:925
#, no-wrap
msgid "G40, G41, G42, G41.1, G42.1"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:925
#, no-wrap
msgid "Tool Length Offset (Group 8)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:926
#, no-wrap
msgid "G43, G43.1, G49"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:926
#, no-wrap
msgid "Canned Cycles Return Mode (Group 10)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:927
#, no-wrap
msgid "G98, G99"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:927
#, no-wrap
msgid "Coordinate System (Group 12)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:928
#, no-wrap
msgid "G54, G55, G56, G57, G58, G59, G59.1, G59.2, G59.3"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:928
#, no-wrap
msgid "Control Mode (Group 13)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:929
#, no-wrap
msgid "G61, G61.1, G64"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:929
#, no-wrap
msgid "Spindle Speed Mode (Group 14)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:930
#, no-wrap
msgid "G96, G97"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:930
#, no-wrap
msgid "Lathe Diameter Mode (Group 15)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:931
#, no-wrap
msgid "G7, G8"
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:934
#, no-wrap
msgid "M-code Modal Groups(((Modal Groups: M-codes)))"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:938
#, no-wrap
msgid "Stopping (Group 4)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:939
#, no-wrap
msgid "M0, M1, M2, M30, M60"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:939
#, no-wrap
msgid "On/Off I/O ('Group 5')"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:940
#, no-wrap
msgid "FIXME M6 T__n__"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:940
#, no-wrap
msgid "Toolchange ('Group 6')"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:941
#, no-wrap
msgid "M6 T__n__"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:941
#, no-wrap
msgid "Spindle (Group 7)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:942
#, no-wrap
msgid "M3, M4, M5"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:942
#, no-wrap
msgid "Coolant (Group 8)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:943
#, no-wrap
msgid "(M7 M8 can both be on), M9"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:943
#, no-wrap
msgid "Override Switches (Group 9)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:944
#, no-wrap
msgid "M48, M49"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:944
#, no-wrap
msgid "User Defined (Group 10)"
msgstr ""

#. type: Table
#: src/gcode/overview.adoc:945
#, no-wrap
msgid "M100-M199"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:952
msgid ""
"For several modal groups, when a machining center is ready to accept "
"commands, one member of the group must be in effect. There are default "
"settings for these modal groups. When the machining center is turned on or "
"otherwise re-initialized, the default values are automatically in effect."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:956
msgid ""
"Group 1, the first group on the table, is a group of G-codes for motion. One "
"of these is always in effect. That one is called the current motion mode."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:964
msgid ""
"It is an error to put a G-code from group 1 and a G-code from group 0 on the "
"same line if both of them use axis words. If an axis word-using G-code from "
"group 1 is implicitly in effect on a line (by having been activated on an "
"earlier line), and a group 0 G-code that uses axis words appears on the "
"line, the activity of the group 1 G-code is suspended for that line. The "
"axis word-using G-codes from group 0 are G10, G28, G30, G52 and G92."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:967
msgid ""
"It is an error to include any unrelated words on a line with 'O-' flow "
"control."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:972
msgid ""
"Comments are purely informative and have no influence on machine behaviour."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:978
msgid ""
"Comments can be added to lines of G-code to help clear up the intention of "
"the programmer. Comments can be embedded in a line using parentheses () or "
"for the remainder of a line using a semi-colon. The semi-colon is not "
"treated as the start of a comment when enclosed in parentheses."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:982
msgid ""
"Comments may appear between words, but not between words and their "
"corresponding parameter. So, 'S100(set speed)F200(feed)' is OK while "
"'S(speed)100F(feed)' is not."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:984
msgid "Here is an example of a commented program:"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:990
#, no-wrap
msgid ""
"G0 (Rapid to start) X1 Y1\n"
"G0 X1 Y1 (Rapid to start; but don't forget the coolant)\n"
"M2 ; End of program.\n"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:999
msgid ""
"There are several 'active' comments which look like comments but cause some "
"action, like '(debug,..)' or '(print,..)'. If there are several comments on "
"a line, only the last comment will be interpreted according to these rules. "
"Hence, a normal comment following an active comment will in effect disable "
"the active comment. For example, '(foo)  (debug,#1)' will print the value of "
"parameter '#1', however '(debug,#1)(foo)' will not."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1002
msgid ""
"A comment introduced by a semicolon is by definition the last comment on "
"that line, and will always be interpreted for active comment syntax."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1005
msgid ""
"Inline comments on O-words should not be used see the O-code <<ocode:"
"comments,comments>> section for more information."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:1007
#, no-wrap
msgid "Messages(((Messages)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1015
msgid ""
"'(MSG,)' - displays message if 'MSG' appears after the left parenthesis and "
"before any other printing characters. Variants of 'MSG' which include white "
"space and lower case characters are allowed. The rest of the characters "
"before the right parenthesis are considered to be a message.  Messages "
"should be displayed on the message display device of the user interface if "
"provided."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:1016
#, no-wrap
msgid "Message Example"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:1019
#, no-wrap
msgid "(MSG, This is a message)\n"
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:1022
#, no-wrap
msgid "Probe Logging(((Probe Logging)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1026
msgid ""
"'(PROBEOPEN filename.txt)' - will open filename.txt and store the 9-number "
"coordinate consisting of XYZABCUVW of each successful straight probe in it."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1027
msgid "'(PROBECLOSE)' - will close the open probelog file."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1029
msgid "For more information on probing see the <<gcode:g38,G38>> section."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:1031
#, no-wrap
msgid "Logging(((Logging)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1035
msgid ""
"'(LOGOPEN,filename.txt)' - opens the named log file. If the file already "
"exists, it is truncated."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1037
msgid ""
"'(LOGAPPEND,filename)' - opens the named log file. If the file already "
"exists, the data is appended."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1038
msgid "'(LOGCLOSE)' - closes an open log file."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1040
msgid ""
"'(LOG,)' - everything past the ',' is written to the log file if it is "
"open.  Supports expansion of parameters as described below."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1043
msgid ""
"Examples of logging are in 'nc_files/examples/smartprobe.ngc' and in "
"'nc_files/ngcgui_lib/rectange_probe.ngc' sample G-code files."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:1045
#, no-wrap
msgid "Debug Messages(((Debug Messages)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1049
msgid ""
"'(DEBUG,)' - displays a message like '(MSG,)' with the addition of special "
"handling for comment parameters as described below."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:1051
#, no-wrap
msgid "Print Messages(((Print Messages)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1055
msgid ""
"'(PRINT,)' - messages are output to 'stderr' with special handling for "
"comment parameters as described below."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:1057
#, no-wrap
msgid "Comment Parameters(((Comment Parameters)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1061
msgid ""
"In the DEBUG, PRINT and LOG comments, the values of parameters in the "
"message are expanded."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1064
msgid ""
"For example: to print a named global variable to stderr (the default console "
"window)."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:1065
#, no-wrap
msgid "Parameters Example"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:1069
#, no-wrap
msgid ""
"(print,endmill dia = #<_endmill_dia>)\n"
"(print,value of variable 123 is: #123)\n"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1076
msgid ""
"Inside the above types of comments, sequences like '\\#123' are replaced by "
"the value of the parameter 123. Sequences like '\\#<named parameter>' are "
"replaced by the value of the named parameter. Named parameters will have "
"white space removed from them. So, '\\#<named parameter>' will be converted "
"to '#<namedparameter>'."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1078
msgid "Parameter numbers can be formatted, e.g.:"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:1081
#, no-wrap
msgid "(DEBUG, value = %d#<some_value>)\n"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1083
msgid "will print the value rounded to an integer."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1085
msgid "%lf is default if there is no formatting string."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1086
msgid "%d = 0 decimals"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1087
msgid "%f = four decimals"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1088
msgid "%.xf = x (0-9) number of decimals"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1091
msgid ""
"The formatting will be performed on all parameters in the same line unless "
"changed, i.e., multiple formatting is allowed in one line."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1093
msgid "The formatting string does not need to be right beside the parameter."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1096
msgid ""
"If the formatting string is created with the wrong pattern it will be "
"printed as characters."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:1098
#, no-wrap
msgid "File Requirements(((File Requirements)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1103
msgid ""
"A G-code file must contain one or more lines of G-code and be terminated "
"with a <<mcode:m2-m30,Program End>>. Any G-code past the program end is not "
"evaluated."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1108
msgid ""
"If a program end code is not used a pair of percent signs '%' with the first "
"percent sign on the first line of the file followed by one or more lines of "
"G-code and a second percent sign. Any code past the second percent sign is "
"not evaluated."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1115
msgid ""
"Using % to wrap a G-code file will not do the same thing as using a program "
"end. The machine will be in what ever state the program left it in using %, "
"the spindle and coolant may still be on and things like G90/91 are left as "
"the last program set them. If you don't use a proper preamble the next "
"program could start in a dangerous condition."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1119
msgid ""
"The file must be created with a text editor like Gedit and not a word "
"processor like Open Office Word Processor."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:1121
#, no-wrap
msgid "File Size(((File Size)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1131
msgid ""
"The interpreter and task are carefully written so that the only limit on "
"part program size is disk capacity. The TkLinuxCNC and Axis interface both "
"load the program text to display it to the user, though, so RAM becomes a "
"limiting factor. In Axis, because the preview plot is drawn by default, the "
"redraw time also becomes a practical limit on program size. The preview can "
"be turned off in Axis to speed up loading large part programs. In Axis "
"sections of the preview can be turned off using <<axis:preview-control,"
"preview control>> comments."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:1133
#, no-wrap
msgid "G-code Order of Execution(((G-code Order of Execution)))"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1137
msgid ""
"The order of execution of items on a line is defined not by the position of "
"each item on the line, but by the following list:"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1140
msgid ""
"O-word commands (optionally followed by a comment but no other words allowed "
"on the same line)"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1141
msgid "Comment (including message)"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1142
msgid "Set feed rate mode (G93, G94)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1143
msgid "Set feed rate (F)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1144
msgid "Set spindle speed (S)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1145
msgid "Select tool (T)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1146
msgid "HAL pin I/O (M62-M68)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1147
msgid "Change tool (M6) and Set Tool Number (M61)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1148
msgid "Spindle on or off (M3, M4, M5)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1149
msgid "Save State (M70, M73), Restore State (M72), Invalidate State (M71)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1150
msgid "Coolant on or off (M7, M8, M9)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1151
msgid "Enable or disable overrides (M48, M49,M50,M51,M52,M53)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1152
msgid "User-defined Commands (M100-M199)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1153
msgid "Dwell (G4)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1154
msgid "Set active plane (G17, G18, G19)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1155
msgid "Set length units (G20, G21)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1156
msgid "Cutter radius compensation on or off (G40, G41, G42)"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1157
msgid "Cutter length compensation on or off (G43, G49)"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1158
msgid ""
"Coordinate system selection (G54, G55, G56, G57, G58, G59, G59.1, G59.2, "
"G59.3)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1159
msgid "Set path control mode (G61, G61.1, G64)"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1160
msgid "Set distance mode (G90, G91)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1161
msgid "Set retract mode (G98, G99)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1163
msgid ""
"Go to reference location (G28, G30) or change coordinate system data (G10) "
"or set axis offsets (G52, G92, G92.1, G92.2, G94)."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1165
msgid ""
"Perform motion (G0 to G3, G33, G38.n, G73, G76, G80 to G89), as modified "
"(possibly) by G53."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1166
msgid "Stop (M0, M1, M2, M30, M60)."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:1168
#, no-wrap
msgid "G-code Best Practices(((G-code Best Practices)))"
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:1170
#, no-wrap
msgid "Use an appropriate decimal precision"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1173
msgid ""
"Use at least 3 digits after the decimal when milling in millimeters, and at "
"least 4 digits after the decimal when milling in inches."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1176
msgid ""
"In particular, tolerance checks of arcs are done for .001 and .0001 "
"according to the active units."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:1177
#, no-wrap
msgid "Use consistent white space"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1181
msgid ""
"G-code is most legible when at least one space appears before words.  While "
"it is permitted to insert white space in the middle of numbers, there is no "
"reason to do so."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:1182
#, no-wrap
msgid "Use Center-format arcs"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1186
msgid ""
"Center-format arcs (which use 'I- J- K-' instead of 'R-' ) behave more "
"consistently than R-format arcs, particularly for included angles near 180 "
"or 360 degrees."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:1187
#, no-wrap
msgid "Use a Preamble set modal groups"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1191
msgid ""
"When correct execution of your program depends on modal settings, be sure to "
"set them at the beginning of the part program. Modes can carry over from "
"previous programs and from the MDI commands."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:1192
#, no-wrap
msgid "Example Preamble for a Mill"
msgstr ""

#. type: delimited block -
#: src/gcode/overview.adoc:1197
#, no-wrap
msgid "G17 G20 G40 G49 G54 G80 G90 G94\n"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1202
msgid ""
"G17 use XY plane, G20 inch mode, G40 cancel diameter compensation, G49 "
"cancel length offset, G54 use coordinate system 1, G80 cancel canned cycles, "
"G90 absolute distance mode, G94 feed/minute mode."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1207
msgid ""
"Perhaps the most critical modal setting is the distance units--If you do not "
"include G20 or G21, then different machines will mill the program at "
"different scales. Other settings, such as the return mode in canned cycles "
"may also be important."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:1208
#, no-wrap
msgid "Don't put too many things on one line"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1211
msgid ""
"Ignore everything in section <<gcode:order-of-execution,Order of "
"Execution>>, and instead write no line of code that is the slightest bit "
"ambiguous."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:1212
#, no-wrap
msgid "Don't set & use a parameter on the same line"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1216
msgid ""
"Don't use and set a parameter on the same line, even though the semantics "
"are well defined. Updating a variable to a new value, such as '#1=[#1+#2]' "
"is OK."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:1217
#, no-wrap
msgid "Don't use line numbers"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1221
msgid ""
"Line numbers offer no benefits. When line numbers are reported in error "
"messages, the numbers refer to the line number in the file, not the N-word "
"value."
msgstr ""

#. type: Block title
#: src/gcode/overview.adoc:1222
#, no-wrap
msgid "When several coordinate systems are moved"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1225
msgid "Consider using the inverse time speed mode."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1230
msgid ""
"Because the meaning of an 'F' word in meters per minute varies depending on "
"the type of axis to be moved and because the amount of removed material does "
"not depend only on the feed rate, it can be simpler to use G93, inverse "
"speed of time, to achieve the removal of desired material."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:1231
#, no-wrap
msgid "Linear and Rotary Axis"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1238
msgid ""
"Because the meaning of an F-word in feed-per-minute mode varies depending on "
"which axes are commanded to move, and because the amount of material removed "
"does not depend only on the feed rate, it may be easier to use G93 inverse "
"time feed mode to achieve the desired material removal rate."
msgstr ""

#. type: Title ==
#: src/gcode/overview.adoc:1239
#, no-wrap
msgid "Common Error Messages"
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1244
msgid ""
"'G-code out of range' - A G-code greater than G99 was used, the scope of G "
"codes in LinuxCNC is 0 - 99. Not every number between 0 and 99 is a valid G-"
"code."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1246
msgid ""
"'Unknown G-code used' - A G-code was used that is not part of the LinuxCNC G-"
"code language."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1248
msgid ""
"'i,j,k word with no Gx to use it' - i, j and k words must be used on the "
"same line as the G-code."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1251
msgid ""
"'Cannot use axis values without a G-code that uses them' - Axis values can "
"not be used on a line without either a modal G-code in effect or a G-code on "
"the same line."
msgstr ""

#. type: Plain text
#: src/gcode/overview.adoc:1253
msgid ""
"'File ended with no percent sign or program end' - Every G-code file must "
"end in a M2 or M30 or be wrapped with the percent sign %."
msgstr ""

#. type: Title =
#: src/gcode/rs274ngc.adoc:5
#, no-wrap
msgid "RS274/NGC Differences"
msgstr ""

#. type: Title ==
#: src/gcode/rs274ngc.adoc:13
#, no-wrap
msgid "Changes from RS274/NGC"
msgstr ""

#. type: Block title
#: src/gcode/rs274ngc.adoc:15
#, no-wrap
msgid "Differences that change the meaning of RS274/NGC programs"
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:17
#, no-wrap
msgid "Location after a tool change"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:23
msgid ""
"In LinuxCNC, the machine does not return to its original position after a "
"tool change. This change was made because the new tool might be longer than "
"the old tool, and the move to the original machine position could therefore "
"leave the tool tip too low."
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:24
#, no-wrap
msgid "Offset parameters are INI file units"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:31
msgid ""
"In LinuxCNC, the values stored in parameters for the G28 and G30 home "
"locations, the P1...P9 coordinate systems, and the G92 offset are in \"INI "
"file units\". This change was made because otherwise the meaning of a "
"location changed depending on whether G20 or G21 was active when G28, G30, "
"G10 L2, or G92.3 is programmed."
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:32
#, no-wrap
msgid "Tool table lengths/diameters are in INI file units"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:42
msgid ""
"In LinuxCNC, the tool lengths (offsets) and diameters in the tool table are "
"specified in INI file units only. This change was made because otherwise the "
"length of a tool and its diameter would change based on whether G20 or G21 "
"was active when initiating G43, G41, G42 modes. This made it impossible to "
"run G-code in the machine's non-native units, even when the G-code was "
"simple and well-formed (starting with G20 or G21, and didn't change units "
"throughout the program), without changing the tool table."
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:43
#, no-wrap
msgid "G84, G87 not implemented"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:47
msgid ""
"G84 and G87 are not currently implemented, but may be added to a future "
"release of LinuxCNC."
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:48
#, no-wrap
msgid "G28, G30 with axis words"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:54
msgid ""
"When G28 or G30 is programmed with only some axis words present, LinuxCNC "
"only moves the named axes. This is common on other machine controls. To move "
"some axes to an intermediate point and then move all axes to the predefined "
"point, write two lines of G code:"
msgstr ""

#. type: delimited block -
#: src/gcode/rs274ngc.adoc:59
#, no-wrap
msgid ""
"G0 X- Y- (axes to move to intermediate point)\n"
"G28 (move all axes to predefined point)\n"
msgstr ""

#. type: Title ==
#: src/gcode/rs274ngc.adoc:61
#, no-wrap
msgid "Additions to RS274/NGC"
msgstr ""

#. type: Block title
#: src/gcode/rs274ngc.adoc:63
#, no-wrap
msgid "Differences that do not change the meaning of RS274/NGC programs"
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:65
#, no-wrap
msgid "G33, G76 threading codes"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:68
msgid "These codes are not defined in RS274/NGC."
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:73
msgid ""
"The probe tip is not retracted after a G38.2 movement. This retraction move "
"may be added in a future release of LinuxCNC."
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:74
#, no-wrap
msgid "G38.3...G38.5"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:77 src/gcode/rs274ngc.adoc:81
#: src/gcode/rs274ngc.adoc:85 src/gcode/rs274ngc.adoc:89
msgid "These codes are not defined in RS274/NGC"
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:78
#, no-wrap
msgid "O-codes"
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:82
#, no-wrap
msgid "M50...M53 overrides"
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:86
#, no-wrap
msgid "M61..M66"
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:90
#, no-wrap
msgid "G43, G43.1"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:93
msgid "'Negative Tool Lengths'"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:96
msgid ""
"The RS274/NGC spec says \"it is expected that\" all tool lengths will be "
"positive. However, G43 works for negative tool lengths."
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:98
msgid "'Lathe tools'"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:101
msgid ""
"G43 tool length compensation can offset the tool in both the X and Z "
"dimensions. This feature is primarily useful on lathes."
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:103
msgid "'Dynamic tool lengths'"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:106
msgid ""
"LinuxCNC allows specification of a computed tool length through G43.1 I K."
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:107
#, no-wrap
msgid "G41.1, G42.1"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:113
msgid ""
"LinuxCNC allows specification of a tool diameter and, if in lathe mode, "
"orientation in the G-code. The format is G41.1/G42.1 D L, where D is "
"diameter and L (if specified) is the lathe tool orientation."
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:114
#, no-wrap
msgid "G43 without H word"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:122
msgid ""
"In NGC this is not allowed. In LinuxCNC, it sets length offsets for the "
"currently loaded tool. If no tool is currently loaded, it is an error. This "
"change was made so the user doesn't have to specify the tool number in two "
"places for each tool change, and because it's consistent with the way G41/"
"G42 work when the D word is not specified."
msgstr ""

#. type: Labeled list
#: src/gcode/rs274ngc.adoc:123
#, no-wrap
msgid "U, V, and W axes"
msgstr ""

#. type: Plain text
#: src/gcode/rs274ngc.adoc:127
msgid ""
"LinuxCNC allows machines with up to 9 axes by defining an additional set of "
"3 linear axes known as U, V and W"
msgstr ""

#. type: Title =
#: src/gcode/tool-compensation.adoc:5
#, no-wrap
msgid "Tool Compensation(((Tool Compensation)))"
msgstr ""

#. type: Title ==
#: src/gcode/tool-compensation.adoc:14
#, no-wrap
msgid "Touch Off(((Touch Off)))"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:18
msgid ""
"Using the Touch Off Screen in the AXIS interface you can update the tool "
"table automatically."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:20
msgid "Typical steps for updating the tool table:"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:22
msgid "After homing load a tool with 'T__n__ M6' where _n_ is the tool number."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:24
msgid ""
"Move tool to an established point using a gauge or take a test cut and "
"measure."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:26
msgid ""
"Click the 'Touch Off' button in the Manual Control tab (or hit the 'End' "
"button on your keyboard)."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:27
msgid "Select 'Tool Table' in the Coordinate System drop down box."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:28
msgid "Enter the gauge or measured dimension and select OK."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:33
msgid ""
"The Tool Table will be changed with the correct Z length to make the DRO "
"display the correct Z position and a G43 command will be issued so the new "
"tool Z length will be in effect. Tool table touch off is only available when "
"a tool is loaded with 'T__n__ M6'."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/tool-compensation.adoc:35 src/gcode/tool-compensation.adoc:36
#, no-wrap
msgid "Touch Off Tool Table"
msgstr ""

#. type: Target for macro image
#: src/gcode/tool-compensation.adoc:36
#, no-wrap
msgid "images/ToolTable-TouchOff.png"
msgstr ""

#. type: Title ===
#: src/gcode/tool-compensation.adoc:38
#, no-wrap
msgid "Using G10 L1/L10/L11"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:41
msgid "The G10 L1/L10/L11 commands can be used to set tool table offsets:"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:44
msgid ""
"`G10 L1 P__n__` - Set offset(s) to a value. Current position irrelevant.  "
"(see <<gcode:g10-l1,G10 L1>> for details)"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:46
msgid ""
"`G10 L10 P__n__` - Set offset(s) so current position w/ fixture 1-8 becomes "
"a value. (see <<gcode:g10-l10,G10 L10>> for details)"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:48
msgid ""
"`G10 L11 P__n__` - Set offset(s) so current position w/ fixture 9 becomes a "
"value. (see <<gcode:g10-l11,G10 L11>> for details)"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:52
msgid ""
"This is only a brief presentation, refer to the reference guide of the G-"
"code for more detailed explanations."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:64
msgid ""
"The 'Tool Table' is a text file that contains information about each tool. "
"The file is located in the same directory as your configuration and is "
"called 'tool.tbl' by default.  A file name may be specified with the INI "
"file [EMCIO]TOOL_TABLE setting.  The tools might be in a tool changer or "
"just changed manually.  The file can be edited with a text editor or be "
"updated using G10 L1. See the <<sec:lathe-tool-table,Lathe Tool Table>> "
"Section for an example of the lathe tool table format. The maximum pocket "
"number is 1000."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:68
msgid ""
"The <<cha:tooledit-gui,Tool Editor>> or a text editor can be used to edit "
"the tool table. If you use a text editor make sure you reload the tool table "
"in the GUI."
msgstr ""

#. type: Title ===
#: src/gcode/tool-compensation.adoc:70
#, no-wrap
msgid "Tool Table Format(((Tool Table Format)))"
msgstr ""

#. type: Block title
#: src/gcode/tool-compensation.adoc:72
#, no-wrap
msgid "Tool Table Format"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:75
#, no-wrap
msgid "T#"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:75
#, no-wrap
msgid "P#"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:75
#, no-wrap
msgid "Dia"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:75
#, no-wrap
msgid "FA"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:75
#, no-wrap
msgid "BA"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:75
#, no-wrap
msgid "Ori"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:76
#, no-wrap
msgid "Rem"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:76
#, no-wrap
msgid ";"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77
#, no-wrap
msgid "(no data after opening semicolon)"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77
#, no-wrap
msgid "T1"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77
#, no-wrap
msgid "P17"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "X0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "Y0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "Z0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "A0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "B0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "C0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "U0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "V0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "W0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "D0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "I0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "J0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:77 src/gcode/tool-compensation.adoc:78
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "Q0"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:78 src/gcode/tool-compensation.adoc:79
#: src/gcode/tool-compensation.adoc:80
#, no-wrap
msgid ";rem"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:78
#, no-wrap
msgid "T2"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:78
#, no-wrap
msgid "P5"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "T3"
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:79
#, no-wrap
msgid "P12"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:83
msgid "In general, the tool table line format is:"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:85
msgid "T - tool number (tool numbers must be unique)"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:86
msgid ""
"P - pocket number, 1-1000 (pocket numbers must be unique, Pocket 0 "
"represents the spindle)"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:87
msgid "X..W - tool offset on specified axis - floating-point"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:88
msgid "D - tool diameter - floating-point, absolute value"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:89
msgid "I - front angle (lathe only) - floating-point"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:90
msgid "J - back angle (lathe only) - floating-point"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:91
msgid "Q - tool orientation (lathe only) - integer, 0-9"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:92
msgid "; - beginning of comment or remark - text"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:95
msgid ""
"Tool numbers should be unique.  Lines beginning with a semicolon are ignored."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:97
msgid "The units used for the length, diameter, etc., are in machine units."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:101
msgid ""
"You will probably want to keep the tool entries in ascending order, "
"especially if you are going to be using a randomizing tool changer.  "
"Although the tool table does allow for tool numbers in any order."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:109
msgid ""
"One line may contain as many as 16 entries, but will likely contain much "
"fewer.  The entries for T (tool number) and P (pocket number) are required.  "
"The last entry (a remark or comment, preceded by a semicolon) is optional. "
"It makes reading easier if the entries are arranged in columns, as shown in "
"the table, but the only format requirement is that there be at least one "
"space or tab after each of the entries on a line and a newline character at "
"the end of each entry."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:112
msgid ""
"The meanings of the entries and the type of data to be put in each are as "
"follows."
msgstr ""

#. type: Labeled list
#: src/gcode/tool-compensation.adoc:113
#, no-wrap
msgid "Tool Number (required)"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:117
msgid ""
"The 'T' column contains the number (unsigned integer) which represents a "
"code number for the tool. The user may use any code for any tool, as long as "
"the codes are unsigned integers."
msgstr ""

#. type: Labeled list
#: src/gcode/tool-compensation.adoc:118
#, no-wrap
msgid "Pocket Number (required)"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:123
msgid ""
"The 'P' column contains the number (unsigned integer) which represents the "
"pocket number (slot number) of the tool changer slot where the tool can be "
"found. The entries in this column must all be different."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:131
msgid ""
"The pocket numbers will typically start at 1 and go up to the highest "
"available pocket on your tool changer. But not all tool changers follow this "
"pattern. Your pocket numbers will be determined by the numbers that your "
"tool changer uses to refer to the pockets. So all this is to say that the "
"pocket numbers you use will be determined by the numbering scheme used in "
"your tool changer, and the pocket numbers you use must make sense on your "
"machine."
msgstr ""

#. type: Labeled list
#: src/gcode/tool-compensation.adoc:132
#, no-wrap
msgid "Data Offset Numbers (optional)"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:140
msgid ""
"The 'Data Offset' columns (XYZABCUVW) contain real numbers which represent "
"tool offsets in each axis. This number will be used if tool length offsets "
"are being used and this tool is selected.  These numbers can be positive, "
"zero, or negative, and are in fact completely optional. Although you will "
"probably want to make at least one entry here, otherwise there would be "
"little point in making an entry in the tool table to begin with."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:148
msgid ""
"In a typical mill, you probably want an entry for Z (tool length offset). In "
"a typical lathe, you probably want an entry for X (X tool offset) and Z (Z "
"tool offset). In a typical mill using cutter diameter compensation (cutter "
"comp), you probably also want to add an entry for D (cutter diameter). In a "
"typical lathe using tool nose diameter compensation (tool comp), you "
"probably also want to add an entry for D (tool nose diameter)."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:153
msgid ""
"A lathe also requires some additional information to describe the shape and "
"orientation of the tool. So you probably want to have entries for I (tool "
"front angle) and J (tool back angle). You probably also want an entry for Q "
"(tool orientation)."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:156
msgid ""
"See the <<cha:lathe-user-information,Lathe User Information>> chapter for "
"more detail."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:167
msgid ""
"The 'Diameter' column contains a real number. This number is used only if "
"cutter compensation is turned on using this tool. If the programmed path "
"during compensation is the edge of the material being cut, this should be a "
"positive real number representing the measured diameter of the tool. If the "
"programmed path during compensation is the path of a tool whose diameter is "
"nominal, this should be a small number (positive or negative, but near zero) "
"representing only the difference between the measured diameter of the tool "
"and the nominal diameter.  If cutter compensation is not used with a tool, "
"it does not matter what number is in this column."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:171
msgid ""
"The 'Comment' column may optionally be used to describe the tool. Any type "
"of description is OK. This column is for the benefit of human readers only. "
"The comment must be preceded by a semicolon."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:176
msgid ""
"Earlier versions of LinuxCNC had two different tool table formats for mills "
"and lathes, but since the 2.4.x release, one tool table format is used for "
"all machines."
msgstr ""

#. type: Title ===
#: src/gcode/tool-compensation.adoc:178
#, no-wrap
msgid "Tool IO(((Tool IO)))"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:184
msgid ""
"The userspace program specified by *[EMCIO]EMCIO = io* is conventionally "
"used for tool changer management (and other io functions for enabling "
"LinuxCNC and the control of coolant/lube hardware).  The HAL pins used for "
"tool management are prefixed with *iocontrol.0.*."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:189
msgid ""
"A G-code *T* command asserts the HAL output pin *iocontrol.0.tool-prepare*.  "
"The HAL input pin, *iocontrol.0.tool-prepared*, must be set by external HAL "
"logic to complete tool preparation leading to a subsequent reset of the tool-"
"prepare pin."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:194
msgid ""
"A G-code *M6* command asserts the HAL output pin *iocontrol.0.tool-change*.  "
"The related HAL input pin, *iocontrol.0.tool-prepared*, must be set by "
"external HAL logic to indicate completion of the tool change leading to a "
"subsequent reset of the tool-change pin."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:197
msgid ""
"Tooldata is accessed by an ordered index (idx) that depends on the type of "
"toolchanger specified by *[EMCIO]RANDOM_TOOLCHANGER=type*."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:201
msgid ""
"For *RANDOM_TOOLCHANGER = 0*, (0 is default and specifies a non-random "
"toolchanger) idx is a number indicating the sequence in which tooldata was "
"loaded."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:203
msgid ""
"For *RANDOM_TOOLCHANGER = 1*, idx is the *current* pocket number for the "
"tool number specified by the G-code select tool command *T__n__*."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:205
msgid ""
"The io program provides HAL output pins to facilitate toolchanger management:"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:207
#, no-wrap
msgid "*iocontrol.0.tool-prep-number*\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:208
#, no-wrap
msgid "*iocontrol.0.tool-prep-index*\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:209
#, no-wrap
msgid "*iocontrol.0.tool-prep-pocket*\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:210
#, no-wrap
msgid "*iocontrol.0.tool-from-pocket*\n"
msgstr ""

#. type: Title ====
#: src/gcode/tool-compensation.adoc:211
#, no-wrap
msgid "IO for non-random toolchanger"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:214
msgid "Tool number _n_==0 indicates no tool."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:216
msgid ""
"The pocket number for a tool is set when tooldata is loaded/reloaded from "
"its data source ([EMCIO]TOOL_TABLE or [EMCIO]DB_PROGRAM)."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:217
msgid "At G-code *T__n__* (_n_ != 0) command:"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:218
#, no-wrap
msgid "*iocontrol.0.tool-prep-index*  = _idx_ (index based on tooldata load sequence)\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:219 src/gcode/tool-compensation.adoc:235
#, no-wrap
msgid "*iocontrol.0.tool-prep-number* = _n_\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:220
#, no-wrap
msgid "*iocontrol.0.tool-prep-pocket* = the pocket number for _n_\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:221
#, no-wrap
msgid "At G-code *T0* (_n_ == 0 remove) command:\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:222
#, no-wrap
msgid "*iocontrol.0.tool-prep-index*  = 0\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:223
#, no-wrap
msgid "*iocontrol.0.tool-prep-number* = 0\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:224
#, no-wrap
msgid "*iocontrol.0.tool-prep-pocket* = 0\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:225 src/gcode/tool-compensation.adoc:237
#, no-wrap
msgid "At M-code *M6* (following iocontrol.0.tool-changed pin 0-->1):\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:226 src/gcode/tool-compensation.adoc:238
#, no-wrap
msgid "*iocontrol.0.tool-from-pocket* = pocket number used to retrieve tool\n"
msgstr ""

#. type: Title ====
#: src/gcode/tool-compensation.adoc:227
#, no-wrap
msgid "IO for random toolchanger"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:230
msgid "Tool number _n_==0 is *not special*."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:231
msgid "Pocket number 0 is *special* as it indicates the *spindle*."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:232
msgid ""
"The *current* pocket number for tool _n_ is the tooldata index (_idx_) for "
"tool _n_."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:233
msgid "At G-code command *T__n__*:"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:234
#, no-wrap
msgid "*iocontrol.0.tool-prep-index*  = tooldata index (idx) for tool _n_\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:236
#, no-wrap
msgid "*iocontrol.0.tool-prep-pocket* = pocket number for tool _n_\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:243
msgid ""
"At startup, *iocontrol.0.tool-from-pocket* = 0.  An M61Q__n__ (_n_!=0) "
"command does not change the *iocontrol.0.tool-from-pocket*.  An M61Q0 "
"(_n_==0) command sets *iocontrol.0.tool-from-pocket* to 0."
msgstr ""

#. type: Title ===
#: src/gcode/tool-compensation.adoc:245
#, no-wrap
msgid "Tool Changers(((Tool Changers)))"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:250
msgid ""
"LinuxCNC supports three types of tool changers: 'manual', 'random location' "
"and 'non-random or fixed location'. Information about configuring a LinuxCNC "
"tool changer is in the <<sub:ini:sec:emcio,EMCIO Section>> of the INI "
"chapter."
msgstr ""

#. type: Block title
#: src/gcode/tool-compensation.adoc:251
#, no-wrap
msgid "Manual Tool Changer"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:257
msgid ""
"Manual tool changer (you change the tool by hand) is treated like a fixed "
"location tool changer.  Manual toolchanges can be aided by a HAL "
"configuration that employs the userspace program *hal_manualtoolchange* and "
"is typically specified in an INI file with INI statements:"
msgstr ""

#. type: delimited block -
#: src/gcode/tool-compensation.adoc:262
#, no-wrap
msgid ""
"[HAL]\n"
"HALFILE = axis_manualtoolchange.hal\n"
msgstr ""

#. type: Block title
#: src/gcode/tool-compensation.adoc:264
#, no-wrap
msgid "Fixed Location Tool Changers "
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:271
msgid ""
"Fixed location tool changers always return the tools to a fixed position in "
"the tool changer. This would also include designs like lathe turrets. When "
"LinuxCNC is configured for a fixed location tool changer the 'P' number is "
"not used internally (but read, preserved and rewritten) by LinuxCNC, so you "
"can use P for any bookkeeping number you want."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:283
msgid ""
"When using [EMCIO]RANDOM_TOOLCHANGER = 0 (the default), the 'P' pocket "
"number is a parameter of the tooldata that is retrieved from the tooldata "
"source ([EMCIO]TOOL_TABLE or [EMCIO]DB_PROGRAM).  In many applications it is "
"fixed but it may be changed by edits to the [EMCIO]TOOL_TABLE or "
"programmatically when the [EMCIO]DB_PROGRAM is used.  LinuxCNC pushes "
"updates to the data source ([EMCIO]TOOL_TABLE or [EMCIO]DB_PROGRAM) for "
"gcodes G10L1,G10L10,G10L11,M61.  LinuxCNC can pull tooldata updates from the "
"data source by UI (user-interface)  commands (Python example: linuxcnc."
"command().load_tool_table()) or by the gcode: G10L0."
msgstr ""

#. type: Block title
#: src/gcode/tool-compensation.adoc:284
#, no-wrap
msgid "Random Location Tool Changers"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:291
msgid ""
"Random location tool changers ([EMCIO]RANDOM_TOOLCHANGER = 1) swap the tool "
"in the spindle with the one in the changer. With this type of tool changer "
"the tool will always be in a different pocket after a tool change. When a "
"tool is changed LinuxCNC rewrites the pocket number to keep track of where "
"the tools are. T can be any number but P must be a number that makes sense "
"for the machine."
msgstr ""

#. type: Title ==
#: src/gcode/tool-compensation.adoc:293
#, no-wrap
msgid "Tool Length Compensation(((Tool Length Compensation)))"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:299
msgid ""
"The tool length compensations are given as positive numbers in the tool "
"table.  A tool compensation is programmed using G43 H_n_, where _n_ is the "
"index number of the desired tool in the tool table. It is intended that all "
"entries in the tool table are positive. The value of H is checked, it must "
"be a non-negative integer when read. The interpreter behaves as follows:"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:307
msgid ""
"If G43 H_n_ is programmed, a call to the function "
"USE_TOOL_LENGTH_OFFSET(length) is made (where length is the length "
"difference, read from the tool table, of the indexed tool _n_), "
"tool_length_offset is repositioned in the machine settings model and the "
"value of current_z in the model is adjusted. Note that _n_ does not have to "
"be the same as the slot number of the tool currently in the spindle."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:318
msgid ""
"If G49 is programmed, USE_TOOL_LENGTH_OFFSET(0.0) is called, "
"tool_length_offset is reset to 0.0 in the machine settings template and the "
"current value of current_z in the model is adjusted.  The effect of the tool "
"length compensation is illustrated in the capture below. Note that the tool "
"length is subtracted from Z so that the programmed control point corresponds "
"to the tip of the tool.  Note also that the effect of the length "
"compensation is immediate when you see the compensation is immediate when "
"the position of Z is seen as a relative coordinate, but it has no effect on "
"the actual machine position until a Z movement is programmed."
msgstr ""

#. type: Block title
#: src/gcode/tool-compensation.adoc:319
#, no-wrap
msgid "Tool length test program. Tool #1 is one inch long."
msgstr ""

#. type: delimited block -
#: src/gcode/tool-compensation.adoc:328
#, no-wrap
msgid ""
"N01 G1 F15 X0 Y0 Z0\n"
"N02 G43 H1 Z0 X1\n"
"N03 G49 X0 Z0\n"
"N04 G0 X2\n"
"N05 G1 G43 H1 G4 P10 Z0 X3\n"
"N06 G49 X2 Z0\n"
"N07 G0 X0\n"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:331
msgid "image:images/length1.png[]"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:334
msgid ""
"With this program, in most cases, the machine will apply the offset in the "
"form of a ramp during the movement in xyz following the word G43."
msgstr ""

#. type: Title ==
#: src/gcode/tool-compensation.adoc:336
#, no-wrap
msgid "Cutter Radius Compensation(((Cutter Radius Compensation)))"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:342
msgid ""
"Cutter Compensation allows the programmer to program the tool path without "
"knowing the exact tool diameter. The only caveat is the programmer must "
"program the lead in move to be at least as long as the largest tool radius "
"that might be used."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:349
msgid ""
"There are two possible paths the cutter can take since the cutter "
"compensation can be on to the left or right side of a line when facing the "
"direction of cutter motion from behind the cutter. To visualize this imagine "
"you were standing on the part walking behind the tool as it progresses "
"across the part. G41 is your left side of the line and G42 is the right side "
"of the line."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:356
msgid ""
"The end point of each move depends on the next move. If the next move "
"creates an outside corner the move will be to the end point of the "
"compensated cut line. If the next move creates in an inside corner the move "
"will stop short so to not gouge the part. The following figure shows how the "
"compensated move will stop at different points depending on the next move."
msgstr ""

#. type: Block title
#: src/gcode/tool-compensation.adoc:358
#, no-wrap
msgid "Compensation End Point(((Compensation End Point)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/tool-compensation.adoc:359
#, no-wrap
msgid "Compensation End Point"
msgstr ""

#. type: Target for macro image
#: src/gcode/tool-compensation.adoc:359
#, no-wrap
msgid "images/comp-path_en.svg"
msgstr ""

#. type: Title ====
#: src/gcode/tool-compensation.adoc:363
#, no-wrap
msgid "Tool Table"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:368
msgid ""
"Cutter compensation uses the data from the tool table to determine the "
"offset needed. The data can be set at run time with G10 L1."
msgstr ""

#. type: Title ====
#: src/gcode/tool-compensation.adoc:369
#, no-wrap
msgid "Programming Entry Moves"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:376
msgid ""
"Any move that is long enough to perform the compensation will work as the "
"entry move. The minimum length is the cutter radius. This can be a rapid "
"move above the work piece. If several rapid moves are issued after a G41/42 "
"only the last one will move the tool to the compensated position."
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:382
msgid ""
"In the following figure you can see that the entry move is compensated to "
"the right of the line. This puts the center of the tool to the right of X0 "
"in this case. If you were to program a profile and the end is at X0 the "
"resulting profile would leave a bump due to the offset of the entry move."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/tool-compensation.adoc:384 src/gcode/tool-compensation.adoc:385
#, no-wrap
msgid "Entry Move"
msgstr ""

#. type: Target for macro image
#: src/gcode/tool-compensation.adoc:385
#, no-wrap
msgid "images/comp02_en.svg"
msgstr ""

#. type: Title ====
#: src/gcode/tool-compensation.adoc:387
#, no-wrap
msgid "Z Motion"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:392
msgid ""
"Z axis motion may take place while the contour is being followed in the XY "
"plane. Portions of the contour may be skipped by retracting the Z axis above "
"the part and by extending the Z-axis at the next start point."
msgstr ""

#. type: Title ====
#: src/gcode/tool-compensation.adoc:393
#, no-wrap
msgid "Rapid Moves"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:396
msgid "Rapid moves may be programmed while compensation is turned on."
msgstr ""

#. type: Title ====
#: src/gcode/tool-compensation.adoc:397
#, no-wrap
msgid "Good Practices"
msgstr ""

#. type: Plain text
#: src/gcode/tool-compensation.adoc:400
msgid "Start a program with G40 to make sure compensation is off."
msgstr ""

#. type: Table
#: src/gcode/tool-compensation.adoc:401 src/gui/qtvcp-libraries.adoc:822
#: src/gui/qtvcp-libraries.adoc:1103 src/hal/comp.adoc:594
#: src/hal/general-ref.adoc:150 src/hal/general-ref.adoc:201
#: src/hal/twopass.adoc:230 src/motion/external-offsets.adoc:259
#: src/plasma/qtplasmac.adoc:394 src/plasma/qtplasmac.adoc:411
#, no-wrap
msgid "Examples"
msgstr ""

#. type: Title ====
#: src/gcode/tool-compensation.adoc:403
#, no-wrap
msgid "Outside Profile Example"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/tool-compensation.adoc:406 src/gcode/tool-compensation.adoc:407
#, no-wrap
msgid "Outside Profile"
msgstr ""

#. type: Target for macro image
#: src/gcode/tool-compensation.adoc:407
#, no-wrap
msgid "images/outside-comp.png"
msgstr ""

#. type: Title ====
#: src/gcode/tool-compensation.adoc:409
#, no-wrap
msgid "Inside Profile Example"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gcode/tool-compensation.adoc:412 src/gcode/tool-compensation.adoc:413
#, no-wrap
msgid "Inside Profile"
msgstr ""

#. type: Target for macro image
#: src/gcode/tool-compensation.adoc:413
#, no-wrap
msgid "images/inside-comp.png"
msgstr ""

#. type: Title =
#: src/getting-started/about-linuxcnc.adoc:5
#, no-wrap
msgid "About LinuxCNC(((About LinuxCNC)))"
msgstr ""

#. type: Title ==
#: src/getting-started/about-linuxcnc.adoc:7
#, no-wrap
msgid "The Software"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:12
msgid ""
"LinuxCNC (the Enhanced Machine Control) is a software system for computer "
"control of machine tools such as milling machines and lathes, robots such as "
"puma and scara and other computer controlled machines up to 9 axes."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:15
msgid ""
"LinuxCNC is free software with open source code. Current versions of "
"LinuxCNC are entirely licensed under the GNU General Public License and "
"Lesser GNU General Public License (GPL and LGPL)"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:16
msgid "LinuxCNC provides:"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:17
msgid "easy discovery and testing without installation with the LiveCD"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:18
msgid "easy installation from the Live CD"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:20
msgid ""
"easy to use graphical configuration wizards to rapidly create a "
"configuration specific to the machine"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:21
msgid ""
"directly available as regular packages of recent releases of Debian (since "
"Bookworm) and Ubuntu (since Kinetic Kudu)"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:22
msgid "a graphical user interface (actually several interfaces to choose from)"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:23
msgid "a graphical interface creation tool (Glade)"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:25
msgid ""
"an interpreter for 'G-code' (the RS-274 machine tool programming language)"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:26
msgid "a realtime motion planning system with look-ahead"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:27
msgid ""
"operation of low-level machine electronics such as sensors and motor drives"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:28
msgid ""
"an easy to use 'breadboard' layer for quickly creating a unique "
"configuration for your machine"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:29
msgid "a software PLC programmable with ladder diagrams"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:31
msgid ""
"It does not provide drawing (CAD - Computer Aided Design) or G-code "
"generation from the drawing (CAM - Computer Automated Manufacturing) "
"functions."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:32
msgid ""
"It can simultaneously move up to 9 axes and supports a variety of interfaces."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:35
msgid ""
"The control can operate true servos (analog or PWM) with the feedback loop "
"closed by the LinuxCNC software at the computer, or open loop with step-"
"servos or stepper motors."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:39
msgid ""
"Motion control features include: cutter radius and length compensation, path "
"deviation limited to a specified tolerance, lathe threading, synchronized "
"axis motion, adaptive feedrate, operator feed override, and constant "
"velocity control."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:43
msgid ""
"Support for non-Cartesian motion systems is provided via custom kinematics "
"modules. Available architectures include hexapods (Stewart platforms and "
"similar concepts) and systems with rotary joints to provide motion such as "
"PUMA or SCARA robots."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:44
msgid "LinuxCNC runs on Linux using real time extensions."
msgstr ""

#. type: Title ==
#: src/getting-started/about-linuxcnc.adoc:45
#, no-wrap
msgid "The Operating System"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:49
msgid ""
"LinuxCNC is available as ready-to-use packages for the Ubuntu and Debian "
"distributions."
msgstr ""

#. type: Title ==
#: src/getting-started/about-linuxcnc.adoc:51
#, no-wrap
msgid "Getting Help(((Getting Help)))"
msgstr ""

#. type: Title ===
#: src/getting-started/about-linuxcnc.adoc:53
#, no-wrap
msgid "IRC"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:58
msgid ""
"IRC stands for Internet Relay Chat.  It is a live connection to other "
"LinuxCNC users.  The LinuxCNC IRC channel is #linuxcnc on libera.chat."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:61
msgid ""
"The simplest way to get on the IRC is to use the embedded client on this "
"https://web.libera.chat/#linuxcnc[page]."
msgstr ""

#. type: Labeled list
#: src/getting-started/about-linuxcnc.adoc:62
#, no-wrap
msgid "Some IRC etiquette"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:64
msgid ""
"Ask specific questions... Avoid questions like \"Can someone help me?\"."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:67
msgid ""
"If you're really new to all this, think a bit about your question before "
"typing it.  Make sure you give enough information so someone can solve your "
"question."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:70
msgid ""
"Have some patience when waiting for an answer, sometimes it takes a while to "
"formulate an answer or everyone might be busy working or something."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:75
msgid ""
"Set up your IRC account with your unique name so people will know who you "
"are.  If you use the java client, use the same name every time you log in.  "
"This helps people remember who you are and if you have been on before many "
"will remember the past discussions which saves time on both ends."
msgstr ""

#. type: Labeled list
#: src/getting-started/about-linuxcnc.adoc:76
#, no-wrap
msgid "Sharing Files"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:79
msgid ""
"The most common way to share files on the IRC is to upload the file to one "
"of the following or a similar service and paste the link:"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:81
msgid ""
"'For text': http://pastebin.com/, http://pastie.org/, https://gist.github."
"com/"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:82
msgid ""
"'For pictures': http://imagebin.org/, http://imgur.com/, http://bayimg.com/"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:83
msgid ""
"'For files': https://filedropper.com/, http://filefactory.com/, "
"http://1fichier.com/"
msgstr ""

#. type: Title ===
#: src/getting-started/about-linuxcnc.adoc:84
#, no-wrap
msgid "Mailing List"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:92
msgid ""
"An Internet Mailing List is a way to put questions out for everyone on that "
"list to see and answer at their convenience. You get better exposure to your "
"questions on a mailing list than on the IRC but answers take longer. In a "
"nutshell you e-mail a message to the list and either get daily digests or "
"individual replies back depending on how you set up your account."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:95
msgid ""
"You can subscribe to the emc-users mailing list at: https://lists."
"sourceforge.net/lists/listinfo/emc-users"
msgstr ""

#. type: Title ===
#: src/getting-started/about-linuxcnc.adoc:96
#, no-wrap
msgid "Web Forum"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:100
msgid ""
"A web forum can be found at https://forum.linuxcnc.org or by following the "
"link at the top of the linuxcnc.org home page."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:104
msgid ""
"This is quite active but the demographic is more user-biased than the "
"mailing list.  If you want to be sure that your message is seen by the "
"developers then the mailing list is to be preferred."
msgstr ""

#. type: Title ===
#: src/getting-started/about-linuxcnc.adoc:105
#, no-wrap
msgid "LinuxCNC Wiki"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:108
msgid ""
"A Wiki site is a user maintained web site that anyone can add to or edit."
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:112
msgid ""
"The user maintained LinuxCNC Wiki site contains a wealth of information and "
"tips at: link:http://wiki.linuxcnc.org/[http://wiki.linuxcnc.org]"
msgstr ""

#. type: Title ===
#: src/getting-started/about-linuxcnc.adoc:113
#, no-wrap
msgid "Bug Reports"
msgstr ""

#. type: Plain text
#: src/getting-started/about-linuxcnc.adoc:117
msgid ""
"Report bugs to the LinuxCNC link:http:///github.com/LinuxCNC/linuxcnc/"
"issues[github bug tracker]."
msgstr ""

#. type: Title =
#: src/getting-started/getting-linuxcnc.adoc:5
#, no-wrap
msgid "Getting LinuxCNC(((Getting LinuxCNC)))"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:12
msgid ""
"This section describes the recommended way to download and make a fresh "
"install of LinuxCNC.  There are also <<sec:_alternate_install_methods,"
"Alternate Install Methods>> for the adventurous.  If you have an existing "
"install that you want to upgrade, go to the <<cha:updating-linuxcnc,Updating "
"LinuxCNC>> section instead."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:17
msgid ""
"LinuxCNC requires a special kernel with real-time extensions.  There are "
"three possibilities here: preempt-rt, RTAI or Xenomai. In addition there are "
"two versions of LinuxCNC which work with these kernels.  See the table below "
"for details."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:25
msgid ""
"Fresh installs of LinuxCNC are most easily created using the Live/Install "
"Image.  This is a hybrid ISO filesystem image that can be written to a USB "
"storage device or a DVD and used to boot a computer.  At boot time you will "
"be given a choice of booting the \"Live\" system (to run LinuxCNC without "
"making any permanent changes to your computer) or booting the Installer (to "
"install LinuxCNC and its operating system onto your computer's hard drive)."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:27
msgid "The outline of the process looks like this:"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:29
msgid "Download the Live/Install Image."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:30
msgid "Write the image to a USB storage device or DVD."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:31
msgid "Boot the Live system to test out LinuxCNC."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:32
msgid "Boot the Installer to install LinuxCNC."
msgstr ""

#. type: Title ==
#: src/getting-started/getting-linuxcnc.adoc:33
#, no-wrap
msgid "Download the image"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:37
msgid ""
"This section describes some methods for downloading the Live/Install Image."
msgstr ""

#. type: Title ===
#: src/getting-started/getting-linuxcnc.adoc:39
#, no-wrap
msgid "Normal Download"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:42
msgid "For x86 PCs Download the Live/Install CD by clicking here:"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:44
msgid "http://www.linuxcnc.org/iso/linuxcnc-2.8.2-buster.iso"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:46
msgid "For the Raspberry Pi a complete SD card image is available here:"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:49
msgid ""
"http://www.linuxcnc.org/iso/linuxcnc-2.8.1-pi4.zip (this will auto-update to "
"2.8.2)"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:53
msgid ""
"This can be installed using the normal Pi https://www.raspberrypi.org/"
"documentation/installation/installing-images/README.md[install process] "
"including with the Raspberry Pi Imager app."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:62
msgid ""
"This SD image is reported not to work with the Raspberry Pi4 8GB model.  "
"Note also that this version of the SD image limits available memory to 3GB "
"as this is necessary to persuade it to run with both WiFi and USB working on "
"some versions of the Pi. You can experiment with removing this limit by "
"editing the config-rt.txt file in the boot directory. If you can't boot "
"after the change then the file can be edited back by mounting the SD card in "
"a a different computer (maybe even a Pi with a USB card reader)."
msgstr ""

#. type: Title ===
#: src/getting-started/getting-linuxcnc.adoc:63
#, no-wrap
msgid "Download using zsync"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:70
msgid ""
"zsync is a download application that efficiently resumes interrupted "
"downloads and efficiently transfers large files with small modifications (if "
"you have an older local copy).  Use zsync if you have trouble downloading "
"the image using the <<sec:_normal_download,Normal Download>> method."
msgstr ""

#. type: Block title
#: src/getting-started/getting-linuxcnc.adoc:71
#, no-wrap
msgid "zsync in Linux"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:75
msgid ""
"Install zsync using Synaptic or, by running the following in a <<faq:"
"terminal,terminal>>"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:78
#, no-wrap
msgid "sudo apt-get install zsync\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:81
msgid "Then run this command to download the iso to your computer"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:84
#, no-wrap
msgid "zsync http://www.linuxcnc.org/iso/linuxcnc-2.8.2-buster.iso\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:90
#, no-wrap
msgid "zsync http://www.linuxcnc.org/iso/linuxcnc-2.8.1-pi4.zip.zsync\n"
msgstr ""

#. type: Block title
#: src/getting-started/getting-linuxcnc.adoc:92
#, no-wrap
msgid "zsync in Windows"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:96
msgid ""
"There is a Windows port of zsync. It works as a console application. It can "
"be downloaded from:"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:98
msgid "https://www.assembla.com/spaces/zsync-windows/documents"
msgstr ""

#. type: Title ===
#: src/getting-started/getting-linuxcnc.adoc:99
#, no-wrap
msgid "Verify the image"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:102
msgid "(This step is unnecessary if you used zsync)"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:104
msgid ""
"After downloading, verify the checksum of the image to ensure integrity."
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:107
#, no-wrap
msgid "md5sum linuxcnc-2.8.2-buster.iso\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:113
#, no-wrap
msgid "sha256sum linuxcnc-2.8.2-buster.iso\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:116
msgid "Then compare to these checksums"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:120
#, no-wrap
msgid ""
"md5sum: 8a6e6abd2c792c3e06fbee0ed049ed41\n"
"sha256sum: 0bfeac3ddfe1bdbf5ca4dad84eeec165741d3f253a16b75e4405c06b7b489700\n"
msgstr ""

#. type: Block title
#: src/getting-started/getting-linuxcnc.adoc:122
#, no-wrap
msgid "Verify md5sum on Windows or Mac"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:126
msgid ""
"Windows and Mac OS X do not come with an md5sum program, but there are "
"alternatives.  More information can be found at: https://help.ubuntu.com/"
"community/HowToMD5SUM[How To MD5SUM]"
msgstr ""

#. type: Title ==
#: src/getting-started/getting-linuxcnc.adoc:127
#, no-wrap
msgid "Write the image to a bootable device"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:132
msgid ""
"The Raspberry Pi image is a completes SD card image and should be written to "
"an SD card in https://www.raspberrypi.org/documentation/installation/"
"installing-images/README.md[the normal way]."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:136
msgid ""
"The LinuxCNC Live/Install ISO Image is a hybrid ISO image which can be "
"written directly to a USB storage device (flash drive) or a DVD and used to "
"boot a computer. The image is too large to fit on a CD."
msgstr ""

#. type: Block title
#: src/getting-started/getting-linuxcnc.adoc:137
#, no-wrap
msgid "Writing the image to a USB storage device in Linux"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:140
msgid ""
"Connect a USB storage device (for example a flash drive or thumb drive type "
"device)."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:143
msgid ""
"Determine the device file corresponding to the USB flash drive.  This "
"information can be found in the output of `dmesg` after connecting the "
"device.  `/proc/partitions` may also be helpful."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:146
msgid ""
"Use the `dd` command to write the image to your USB storage device.  For "
"example, if your storage device showed up as `/dev/sde`, then use this "
"command:"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:149
#, no-wrap
msgid "dd if=linuxcnc-2.8.2-buster.iso of=/dev/sde\n"
msgstr ""

#. type: Block title
#: src/getting-started/getting-linuxcnc.adoc:151
#, no-wrap
msgid "Writing the image to a USB storage device in Mac OSX"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:156
#, no-wrap
msgid "diskutil list\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:160
msgid ""
"Insert the USB and note the name of the new disk that appears, eg /dev/disk5"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:162
msgid ""
"unmount the USB. The number found above should be substituted in place of "
"the N"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:165
#, no-wrap
msgid "diskutil unmountDisk /dev/diskN\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:169
msgid ""
"Transfer the data with dd, as for Linux above. Note that the disk name has "
"an added \"r\" at the beginning"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:172
#, no-wrap
msgid "sudo dd if=/path-to.iso of=/dev/rdiskN bs=1m\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:176
msgid ""
"Note that this may take a long time to complete and there will be no "
"feedback during the process."
msgstr ""

#. type: Block title
#: src/getting-started/getting-linuxcnc.adoc:177
#, no-wrap
msgid "Writing the image to a DVD in Linux"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:180
msgid ""
"Insert a blank DVD into your burner. A 'CD/DVD Creator' or 'Choose Disc "
"Type' window will pop up. Close this, as we will not be using it."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:181
msgid "Browse to the downloaded image in the file browser."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:182
msgid "Right click on the ISO image file and choose Write to Disc."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:184
msgid ""
"Select the write speed. It is recommended that you write at the lowest "
"possible speed."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:185
msgid "Start the burning process."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:187
msgid ""
"If a 'choose a file name for the disc image' window pops up, just pick OK."
msgstr ""

#. type: Block title
#: src/getting-started/getting-linuxcnc.adoc:188
#, no-wrap
msgid "Writing the image to a DVD in Windows"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:191
msgid ""
"Download and install Infra Recorder, a free and open source image burning "
"program: http://infrarecorder.org/"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:193
msgid ""
"Insert a blank CD in the drive and select Do nothing or Cancel if an auto-"
"run dialog pops up."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:195
msgid "Open Infra Recorder, and select the 'Actions' menu, then 'Burn image'."
msgstr ""

#. type: Block title
#: src/getting-started/getting-linuxcnc.adoc:196
#, no-wrap
msgid "Writing the image to a DVD in Mac OSX"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:198
msgid "Download the .iso file"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:201
msgid ""
"Right-click on the file in the Finder window and select \"Burn to disc"
"\" (The option to burn to disc will only appear if the machine has an "
"optical drive fitted or connected)"
msgstr ""

#. type: Title ==
#: src/getting-started/getting-linuxcnc.adoc:202
#, no-wrap
msgid "Testing LinuxCNC"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:207
msgid ""
"With the USB storage device plugged in or the DVD in the DVD drive, shut "
"down the computer then turn the computer back on. This will boot the "
"computer from the Live/Install Image and choose the Live boot option."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:210
msgid ""
"If the system does not boot from the DVD or USB stick it might be necessary "
"to change the boot order in the PC BIOS."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:215
msgid ""
"Once the computer has booted up you can try out LinuxCNC without installing "
"it. You can not create custom configurations or modify most system settings "
"in a Live session, but you can (and should) run the latency test."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:221
msgid ""
"To try out LinuxCNC: from the Applications/CNC menu pick LinuxCNC. A dialog "
"box will open from which you can choose one of many sample configurations. "
"At this point it only really makes sense to pick a \"sim\" configuration. "
"Some of the sample configurations include onscreen 3D simulated machines, "
"look for \"Vismach\" to see these."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:224
msgid ""
"To see if your computer is suitable for software step pulse generation run "
"the Latency Test as shown <<sec:latency-test,here>>."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:229
msgid ""
"At the time of writing the Live-Image is only available with the preempt-rt "
"kernel and a matching LinuxCNC. On some hardware this might not offer good "
"enough latency. There is an experimental version available using the RTAI "
"realtime kernel which will often give better latency."
msgstr ""

#. type: Title ==
#: src/getting-started/getting-linuxcnc.adoc:230 src/plasma/qtplasmac.adoc:49
#, no-wrap
msgid "Installing LinuxCNC"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:234
msgid ""
"To install LinuxCNC from the LiveCD select 'Install (Graphical)' at bootup."
msgstr ""

#. type: Title ==
#: src/getting-started/getting-linuxcnc.adoc:235
#, no-wrap
msgid "Updates to LinuxCNC(((Updates to LinuxCNC)))"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:241
msgid ""
"With the normal install the Update Manager will notify you of updates to "
"LinuxCNC when you go on line and allow you to easily upgrade with no Linux "
"knowledge needed.  It is OK to upgrade everything except the operating "
"system when asked to."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:245
msgid ""
"Do not upgrade the operating system if prompted to do so. You should accept "
"OS _updates_ however, especially security updates."
msgstr ""

#. type: Title ==
#: src/getting-started/getting-linuxcnc.adoc:247
#, no-wrap
msgid "Install Problems(((LinuxCNC:Installation Problems)))(((Installation:Problems)))"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:252
msgid ""
"In rare cases you might have to reset the BIOS to default settings if during "
"the Live CD install it cannot recognize the hard drive during the boot up."
msgstr ""

#. type: Title ==
#: src/getting-started/getting-linuxcnc.adoc:254
#, no-wrap
msgid "Alternate Install Methods(((LinuxCNC:Alternate Install Methods)))(((Installation:Alternate Methods)))"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:260
msgid ""
"The easiest, preferred way to install LinuxCNC is to use the Live/Install "
"Image as described above.  That method is as simple and reliable as we can "
"make it, and is suitable for novice users and experienced users alike.  "
"However, this will typically replace any existing operating system."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:266
msgid ""
"In addition, for experienced users who are familiar with Debian system "
"administration (finding install images, manipulating apt sources, changing "
"kernel flavors, etc), new installs are supported on following platforms: "
"(\"amd64\" means \"64-bit\", and is not specific to AMD processors, it will "
"run on any 64-bit x86 system)"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:269
#, no-wrap
msgid "Distribution"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:269
#, no-wrap
msgid "Architecture"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:269
#, no-wrap
msgid "Kernel"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:269
#, no-wrap
msgid "Package name"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:270
#, no-wrap
msgid "Typical use"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:270
#: src/getting-started/getting-linuxcnc.adoc:271
#: src/getting-started/getting-linuxcnc.adoc:272
#, no-wrap
msgid "Debian Buster"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:270
#: src/getting-started/getting-linuxcnc.adoc:273
#: src/getting-started/getting-linuxcnc.adoc:275
#: src/getting-started/getting-linuxcnc.adoc:276
#: src/getting-started/getting-linuxcnc.adoc:278
#, no-wrap
msgid "amd64 & i386"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:270
#: src/getting-started/getting-linuxcnc.adoc:273
#: src/getting-started/getting-linuxcnc.adoc:276
#: src/getting-started/getting-linuxcnc.adoc:278
#, no-wrap
msgid "Stock"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:270
#: src/getting-started/getting-linuxcnc.adoc:271
#: src/getting-started/getting-linuxcnc.adoc:273
#: src/getting-started/getting-linuxcnc.adoc:275
#: src/getting-started/getting-linuxcnc.adoc:276
#: src/getting-started/getting-linuxcnc.adoc:278
#, no-wrap
msgid "linuxcnc-uspace"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:271
#: src/getting-started/getting-linuxcnc.adoc:274
#: src/getting-started/getting-linuxcnc.adoc:277
#: src/getting-started/getting-linuxcnc.adoc:279
#, no-wrap
msgid "simulation only"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:271
#, no-wrap
msgid "amd64 & armhf"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:271
#, no-wrap
msgid "preemp-rt"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:272
#: src/getting-started/getting-linuxcnc.adoc:275
#: src/getting-started/getting-linuxcnc.adoc:276
#: src/getting-started/getting-linuxcnc.adoc:278
#, no-wrap
msgid "machine control & simulation"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:272
#, no-wrap
msgid "amd64"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:272
#: src/getting-started/getting-linuxcnc.adoc:274
#: src/getting-started/getting-linuxcnc.adoc:277
#, no-wrap
msgid "linuxcnc"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:273
#, no-wrap
msgid "machine control (known issues)"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:273
#, no-wrap
msgid "Debian Jessie"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:274
#: src/getting-started/getting-linuxcnc.adoc:275
#: src/getting-started/getting-linuxcnc.adoc:276
#: src/getting-started/updating-linuxcnc.adoc:106
#, no-wrap
msgid "Debian Wheezy"
msgstr ""

#. type: Table
#: src/getting-started/getting-linuxcnc.adoc:274
#: src/getting-started/getting-linuxcnc.adoc:277
#, no-wrap
msgid "i386"
msgstr ""

#. type: Title ===
#: src/getting-started/getting-linuxcnc.adoc:277
#: src/getting-started/getting-linuxcnc.adoc:278
#: src/getting-started/updating-linuxcnc.adoc:107
#: src/getting-started/updating-linuxcnc.adoc:144
#, no-wrap
msgid "Ubuntu Precise"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:282
msgid "LinuxCNC v2.8 is not supported on Ubuntu Lucid or older."
msgstr ""

#. type: Block title
#: src/getting-started/getting-linuxcnc.adoc:283
#, no-wrap
msgid "Preempt-RT kernels"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:289
msgid ""
"The Preempt-rt kernels are available for Debian from the regular debian.org "
"archive. The preempt-rt kernel for RaspBerry Pi is available from the "
"LinuxCNC repository.  The package is called `linux-image-rt-*` Simply "
"install the package in the same way as any other package from the Synaptic "
"Package manager or with apt-get at the command-line."
msgstr ""

#. type: Block title
#: src/getting-started/getting-linuxcnc.adoc:290
#, no-wrap
msgid "RTAI Kernels"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:293
msgid ""
"The RTAI kernels are available for download from the linuxcnc.org debian "
"archive.  The apt source is:"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:295
msgid "Debian Buster: `deb http://linuxcnc.org buster base`"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:296
msgid "Debian Wheezy: `deb http://linuxcnc.org wheezy base`"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:297
msgid "Ubuntu Precise: `deb http://linuxcnc.org precise base`"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:303
msgid ""
"Debian Wheezy and Ubuntu Precise are both extremely old, and are out of "
"their support period. It is strongly advised not to use either for a new "
"install, and to seriously consider upgrading an existing installation."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:306
msgid ""
"The Buster / RTAI package is only available on amd64, but there are very few "
"surviving systems that can not run a 64-bit OS."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:313
msgid ""
"There are known issues with the 64-bit RTAI 5.2 kernel with this version of "
"LinuxCNC. The system will occasionally lock solid.  However, this has, so "
"far, been seen only during system exit. While running the system appears to "
"be stable. But should nevertheless be considered experimental at this point."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:318
msgid ""
"If you decide to use the RTAI 5.2 kernel and see a problem outside the "
"circumstances described above then please report it immediately to the "
"project developers."
msgstr ""

#. type: Title ===
#: src/getting-started/getting-linuxcnc.adoc:319
#, no-wrap
msgid "Installing on Debian Buster (with Preempt-RT kernel)"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:323
msgid ""
"Install Debian Buster (Debian 10), amd64 version. You can download the "
"installer here: https://www.debian.org/releases/buster/"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:327
msgid ""
"After burning the iso and booting up if you don't want Gnome desktop select "
"'Advanced Options' > 'Alternative desktop environments' and pick the one you "
"like."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:329
msgid "Then select 'Install' or 'Graphical Install'."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:333
msgid ""
"Do not enter a root password, if you do sudo is disabled and you won't be "
"able to complete the following steps."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:336
msgid ""
"Run the following in a <<faq:terminal,terminal>> to bring the machine up to "
"date with the latest packages."
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:340
#: src/getting-started/getting-linuxcnc.adoc:500
#, no-wrap
msgid ""
"sudo apt-get update\n"
"sudo apt-get dist-upgrade\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:343
msgid "Install the Preempt-RT kernel and modules"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:346
#, no-wrap
msgid "sudo apt-get install linux-image-rt-amd64\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:352
msgid ""
"Re-boot, and select the Linux 4.19.0-9-rt-amd64 kernel. This might be hidden "
"in the \"Advanced options for Debian Buster\" sub-menu in Grub.  When you "
"log in, verify that `PREEMPT RT`is reported by the following command."
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:355
#, no-wrap
msgid "uname -v\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:364
msgid ""
"Open Applications Menu > System > Synaptic Package Manager search for 'linux-"
"image' and right click on the original non-rt and select 'Mark for Complete "
"Removal'. Reboot.  This is to force the system to boot from the RT kernel. "
"If you prefer to retain both kernels then the other kernels need not be "
"deleted, but grub boot configuration changes will be needed beyond the scope "
"of this document."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:366
#: src/getting-started/getting-linuxcnc.adoc:503
msgid "Add the LinuxCNC Archive Signing Key to your apt keyring by running"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:370
#, no-wrap
msgid ""
"sudo apt-key adv --keyserver hkp://keys.openpgp.org --recv-key 3cb9fd148f374fef\n"
"Alternate keyserver: keyserver.ubuntu.com\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:373
#: src/getting-started/getting-linuxcnc.adoc:417
#: src/getting-started/getting-linuxcnc.adoc:462
msgid "Add the apt repository:"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:377
#, no-wrap
msgid ""
"echo deb http://linuxcnc.org/ buster base 2.8-rtpreempt | sudo tee -a /etc/apt/sources.list.d/linuxcnc.list\n"
"echo deb-src http://linuxcnc.org/ buster base 2.8-rtpreempt | sudo tee -a /etc/apt/sources.list.d/linuxcnc.list\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:380
#: src/getting-started/getting-linuxcnc.adoc:424
#: src/getting-started/getting-linuxcnc.adoc:468
msgid "Update the package list from linuxcnc.org"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:383
#: src/getting-started/getting-linuxcnc.adoc:427
#: src/getting-started/getting-linuxcnc.adoc:471
#: src/getting-started/getting-linuxcnc.adoc:519
#, no-wrap
msgid "sudo apt-get update\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:386
msgid "Install uspace (a reboot may be required prior to installing uspace)"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:389
#: src/getting-started/getting-linuxcnc.adoc:483
#, no-wrap
msgid "sudo apt-get install linuxcnc-uspace\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:392
msgid "Optionally you can install mesaflash if you are using a Mesa card."
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:395
#, no-wrap
msgid "sudo apt install mesaflash\n"
msgstr ""

#. type: Title ===
#: src/getting-started/getting-linuxcnc.adoc:398
#, no-wrap
msgid "Installing on Debian Buster (with experimental RTAI kernel)"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:404
msgid ""
"This kernel has known stability problems. It appears to run reliably once "
"LinuxCNC is loaded. However kernel panics have been seen at system shut-down."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:408
msgid ""
"This kernel and LinuxCNC version can be installed on top of the LiveDVD "
"install, or alternatively on a fresh Install of Debian Buster 64-bit as "
"described above"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:410
msgid ""
"Add the LinuxCNC Archive Signing Key to your apt keyring (Not necessary if "
"switching the realtime mode of a LinuxCNC Live-CD image)"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:414
#: src/getting-started/getting-linuxcnc.adoc:459
#: src/getting-started/getting-linuxcnc.adoc:507
#, no-wrap
msgid ""
"# Alternate keyserver: keyserver.ubuntu.com\n"
"sudo apt-key adv --keyserver hkp://keys.openpgp.org --recv-key 3cb9fd148f374fef\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:421
#, no-wrap
msgid ""
"echo deb http://linuxcnc.org/ buster base 2.8-rt | sudo tee /etc/apt/sources.list.d/linuxcnc.list\n"
"echo deb-src http://linuxcnc.org/ buster base 2.8-rt | sudo tee -a /etc/apt/sources.list.d/linuxcnc.list\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:430
msgid "Install the new realtime kernel, RTAI and the rtai version of linuxcnc"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:433
#, no-wrap
msgid "sudo apt-get install linux-image-4.19.195-rtai-amd64\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:436
msgid "Install the RTAI application layer"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:439
#, no-wrap
msgid "sudo apt-get install rtai-modules-4.19.195\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:442
msgid "Install LinuxCNC (may be necessary to reboot before installing)"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:445
#: src/getting-started/getting-linuxcnc.adoc:545
#, no-wrap
msgid "sudo apt-get install linuxcnc\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:448
msgid ""
"Reboot the machine, ensuring that the system boots from the new 4.19.195-"
"rtai kernel."
msgstr ""

#. type: Title ===
#: src/getting-started/getting-linuxcnc.adoc:449
#, no-wrap
msgid "Installing on Raspbian 10"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:453
msgid ""
"Download a stock Raspbian image to an SD card and install in the https://www."
"raspberrypi.org/documentation/installation/installing-images/README.md[usual "
"way]"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:454
msgid "Boot the Pi and open a terminal"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:455
msgid "Add the LinuxCNC Archive Signing Key to your apt keyring"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:465
#, no-wrap
msgid "echo deb http://linuxcnc.org/ buster base 2.8-rtpreempt | sudo tee /etc/apt/sources.list.d/linuxcnc.list\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:474
msgid "install the realtime kernel"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:477
#, no-wrap
msgid "sudo apt-get install linux-image-4.19.71-rt24-v7l+\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:480
msgid "Install linuxcnc (a reboot may be required prior to installing)"
msgstr ""

#. type: Title ===
#: src/getting-started/getting-linuxcnc.adoc:485
#, no-wrap
msgid "Installing on Ubuntu Precise"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:493
msgid ""
"Install Ubuntu Precise 12.04 x86 (32-bit). Any flavor should work (regular "
"Ubuntu, Xubuntu, Lubuntu, etc). 64-bit (AMD64)  is currently not supported. "
"You can download the installer here: http://releases.ubuntu.com/precise/ "
"Note the warnings that this release is out of support. But it is a way to "
"install LinuxCNC with a well-tested RTAI kernel."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:496
msgid ""
"Run the following to bring the machine up to date with the latest packages "
"in Ubuntu Precise."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:510
msgid "Add a new apt source"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:513
#, no-wrap
msgid "sudo add-apt-repository \"deb http://linuxcnc.org/ precise base 2.8-rt\"\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:516
msgid "Fetch the package list from linuxcnc.org."
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:522
msgid "Install the RTAI kernel and modules by running"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:525
#, no-wrap
msgid "sudo apt-get install linux-image-3.4-9-rtai-686-pae rtai-modules-3.4-9-rtai-686-pae\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:529
msgid ""
"If you want to be able to build LinuxCNC from source using the git repo, "
"also run"
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:532
#, no-wrap
msgid "sudo apt-get install linux-headers-3.4-9-rtai-686-pae\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:536
msgid ""
"Reboot, and make sure you boot into the rtai kernel. When you log in, verify "
"that the kernel name is 3.4-9-rtai-686-pae."
msgstr ""

#. type: delimited block -
#: src/getting-started/getting-linuxcnc.adoc:539
#, no-wrap
msgid "uname -r\n"
msgstr ""

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:542
msgid "Run"
msgstr ""

#. type: Title =
#: src/getting-started/running-linuxcnc.adoc:5
#, no-wrap
msgid "Running LinuxCNC(((Running LinuxCNC)))"
msgstr ""

#. type: Title ==
#: src/getting-started/running-linuxcnc.adoc:7
#, no-wrap
msgid "Invoking LinuxCNC"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:12
msgid ""
"After installation, LinuxCNC starts just like any other Linux program: run "
"it from the <<faq:terminal,terminal>> by issuing the command 'linuxcnc', or "
"select it in the 'Applications -> CNC' menu."
msgstr ""

#. type: Title ==
#: src/getting-started/running-linuxcnc.adoc:14
#, no-wrap
msgid "Configuration Launcher(((Configuration Launcher)))"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:18
msgid ""
"When starting LinuxCNC (from the CNC menu or from the command line without "
"specifying an INI file) the Configuration Selector dialog starts."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:24
msgid ""
"The Configuration Selector dialog allows the user to pick one of their "
"existing configurations (My Configurations) or select a new one (from the "
"Sample Configurations) to be copied to their home directory. Copied "
"configurations will appear under My Configurations on the next invocation of "
"the Configuration Selector."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:26
msgid ""
"The Configuration Selector offers a selection of configurations organized:"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:28
msgid ""
"'My Configurations' - User configurations located in linuxcnc/configs in "
"your home directory."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:31
msgid ""
"'Sample Configurations' - Sample configurations, when selected, are copied "
"to linuxcnc/configs.  Once a sample configuration was copied to your local "
"directory, the launcher will offer it as 'My Configurations'.  The names "
"under which these local configurations are presented correspond to the names "
"of the directories within the configs/ directory:"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:33
msgid ""
"'sim' - Configurations that include simulated hardware.  These can be used "
"for testing or learning how LinuxCNC works."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:34
msgid "'by_interface' - Configurations organized by GUI."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:35
msgid "'by_machine' - Configurations organized by machine."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:37
msgid ""
"'apps' - Applications that do not require starting linuxcnc but may be "
"useful for testing or trying applications like <<cha:pyvcp,PyVCP>> or <<cha:"
"glade-vcp,GladeVCP>>."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:38
msgid "'attic' - Obsolete or historical configurations."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:41
msgid ""
"The sim configurations are often the most useful starting point for new "
"users and are organized around supported GUIs:"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:43
msgid "'axis' - Keyboard and Mouse GUI"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:44
msgid "'gmoccapy' - Touch Screen GUI"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:45
msgid "'gscreen' - Touch Screen GUI"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:46
msgid "'low_graphics' - Keyboard GUI"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:47
msgid "'pyvcp_demo' - Paneles de Control Virtuales Python"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:48
msgid "'qtvcp_screens' - Guis diseñadas con Qt5 y Python"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:49
msgid "'tklinuxcnc' - Keyboard and Mouse Gui(no longer maintained)"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:50
msgid "'touchy' - Touch Screen GUI"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:54
msgid ""
"A GUI configuration directory may contain subdirectories with configurations "
"that illustrate special situations or the embedding of other applications."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:57
msgid ""
"The 'by_interface' configurations are organized around common, supported "
"interfaces like:"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:59
msgid "general mechatronics"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:60
msgid "mesa"
msgstr ""

#. type: TH
#: src/getting-started/running-linuxcnc.adoc:61 man/man3/hal_parport.3hal:1
#: man/man3/rtapi_parport.3rtapi:22
#, no-wrap
msgid "parport"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:62
msgid "pico"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:63
msgid "pluto"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:64
msgid "servotogo"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:65
msgid "vigilant"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:66
msgid "vitalsystems"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:69
msgid ""
"Related hardware may be required to use these configurations as starting "
"points for a system."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:72
msgid ""
"The 'by_machine' configurations are organized around complete, known systems "
"like:"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:74
msgid "boss"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:75
msgid "cooltool"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:76
msgid "plasmac"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:77
msgid "scortbot erIII"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:78
msgid "sherline"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:79
msgid "smithy"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:80
msgid "tormach"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:82
msgid "A complete system may be required to use these configurations."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:86
msgid ""
"The 'apps items' are typically 1) utilities that don't require starting "
"linuxcnc or 2) demonstrations of applications that can be used with linuxcnc:"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:88
msgid ""
"info - creates a file with system information that may be useful for problem "
"diagnosis."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:89
msgid "gladevcp - Example GladeVCP applications."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:90
msgid "halrun - Starts halrun in an <<faq:terminal,terminal>>."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:91
msgid "latency - Applications to investigate latency"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:92
msgid "latency-test - standard test"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:93
msgid "latency-plot - stripchart"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:94
msgid "latency-histogram - histogram"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:95
msgid "parport - Applications to test parport."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:96
msgid "pyvcp - Example pyvcp applications."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:97
msgid "xhc-hb04 - Applications to test an xhc-hb04 USB wireless MPG"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:101
msgid ""
"Under the Apps directory, only applications that are usefully modified by "
"the user are offered for copying to the user's directory."
msgstr ""

#. .Configuration Selector
#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/getting-started/running-linuxcnc.adoc:103
#: src/getting-started/running-linuxcnc.adoc:104
#: src/user/starting-linuxcnc.adoc:66
#, no-wrap
msgid "LinuxCNC Configuration Selector"
msgstr ""

#. .Configuration Selector
#. type: Target for macro image
#: src/getting-started/running-linuxcnc.adoc:104
#: src/user/starting-linuxcnc.adoc:66
#, no-wrap
msgid "images/configuration-selector.png"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:108
msgid ""
"Click any of the listed configurations to display specific information about "
"it.  Double-click a configuration or click OK to start the configuration."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:111
msgid ""
"Select 'Create Desktop Shortcut' and then click 'OK' to add an icon on the "
"Ubuntu desktop to directly launch this configuration without showing the "
"Configuration Selector screen."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:115
msgid ""
"When you select a configuration from the Sample Configurations section, it "
"will automatically place a copy of that config in the ~/linuxcnc/configs "
"directory."
msgstr ""

#. type: Title ==
#: src/getting-started/running-linuxcnc.adoc:116
#, no-wrap
msgid "Next steps in configuration"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:123
msgid ""
"After finding the sample configuration that uses the same interface hardware "
"as your machine (or a simulator configuration), and saving a copy to your "
"home directory, you can customize it according to the details of your "
"machine.  Refer to the Integrator Manual for topics on configuration."
msgstr ""

#. type: Title ==
#: src/getting-started/running-linuxcnc.adoc:124
#, no-wrap
msgid "Simulator Configurations"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:129
msgid ""
"All configurations listed under Sample Configurations/sim are intended to "
"run on any computer.  No specific hardware is required and real-time support "
"is not needed."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:137
msgid ""
"These configurations are useful for studying individual capabilities or "
"options.  The sim configurations are organized according to the graphical "
"user interface used in the demonstration.  The directory for axis contains "
"the most choices and subdirectories because it is the most tested GUI.  The "
"capabilities demonstrated with any specific GUI may be available in other "
"GUIs as well."
msgstr ""

#. type: Title ==
#: src/getting-started/running-linuxcnc.adoc:138
#, no-wrap
msgid "Configuration Resources"
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:145
msgid ""
"The Configuration Selector copies all files needed for a configuration to a "
"new subdirectory of ~/linuxcnc/configs (equivalently: /home/username/"
"linuxcnc/configs).  Each created directory will include at least one INI "
"file (iniflename.ini)  that is used to describe a specific configuration."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:154
msgid ""
"File resources within the copied directory will typically include one or "
"more INI file (filename.ini) for related configurations and a tool table "
"file (toolfilename.tbl).  Additionally, resources may include HAL files "
"(filename.hal, filename.tcl), a README file for describing the directory, "
"and configuration specific information in a text file named after a specific "
"configuration (inifilename.txt).  That latter two files are displayed when "
"using the Configuration Selector."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:163
msgid ""
"The supplied sample configurations may specify the parameter HALFILE "
"(filename.hal) in the configuration INI file that are not present in the "
"copied directory because they are found in the system HAL file library.  "
"These files can be copied to the user configuration directory and altered as "
"required by the user for modification or test.  Since the user configuration "
"directory is searched first when finding HAL files, local modifications will "
"then prevail."
msgstr ""

#. type: Plain text
#: src/getting-started/running-linuxcnc.adoc:169
msgid ""
"The Configuration selector makes a symbolic link in the user configuration "
"directory (named hallib) that points to the system HAL file library.  This "
"link simplifies copying a library file.  For example, to copy the library "
"core_sim.hal file in order to make local modifications:"
msgstr ""

#. type: delimited block -
#: src/getting-started/running-linuxcnc.adoc:173
#, no-wrap
msgid ""
"cd ~/linuxcnc/configs/name_of_configuration\n"
"cp hallib/core_sim.hal core_sim.hal\n"
msgstr ""

#. type: Title =
#: src/getting-started/system-requirements.adoc:5
#, no-wrap
msgid "System Requirements(((System Requirements)))"
msgstr ""

#. type: Title ==
#: src/getting-started/system-requirements.adoc:7
#, no-wrap
msgid "Minimum Requirements"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:19
msgid ""
"The minimum system to run LinuxCNC and Debian / Ubuntu may vary depending on "
"the exact usage. Stepper systems in general require faster threads to "
"generate step pulses than servo systems. You can use the Live-CD to test the "
"software before committing to a permanent installation on a computer.  Keep "
"in mind that the Latency Test numbers are more important than the processor "
"speed for software step generation. More information on the Latency Test is "
"<<sec:latency-test,here>>.  In addition LinuxCNC needs to be run on an "
"operating system that uses a specially modified kernel, see <<sec:"
"kernel_and_version_requirements,Kernel and Version Requirements>>."
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:22
msgid ""
"Additional information is on the LinuxCNC Wiki site: http://wiki.linuxcnc."
"org/cgi-bin/wiki.pl?Hardware_Requirements[Hardware Requirements]"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:27
msgid ""
"LinuxCNC and Debian Linux should run reasonably well on a computer with the "
"following minimum hardware specification. These numbers are not the absolute "
"minimum but will give reasonable performance for most stepper systems."
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:30
msgid ""
"700 MHz x86 processor (1.2 GHz x86 processor recommended) or Raspberry Pi 4 "
"or better."
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:32
msgid ""
"To run LinuxCNC 2.8 and Debian Buster from the LiveCD the system should be "
"64-bit capable."
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:33
msgid "512 MB or more of RAM"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:34
msgid "8 GB hard disk"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:37
msgid ""
"Graphics card capable of at least 1024x768 resolution, which is not using "
"the NVidia or ATI fglrx proprietary drivers. Modern onboard graphic chipsets "
"seem to generally be OK."
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:39
msgid ""
"A network or Internet connection (not strictly needed, but very useful for "
"updates and for communicating with the LinuxCNC community)"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:44
msgid ""
"Minimum hardware requirements change as Linux distributions evolve so check "
"the https://www.debian.org/releases/stable/amd64/ch02.en.html[Debian] web "
"site for details on the LiveCD you're using. Older hardware may benefit from "
"selecting an older version of the LiveCD when available."
msgstr ""

#. type: Title ==
#: src/getting-started/system-requirements.adoc:46
#, no-wrap
msgid "Kernel and Version requirements"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:54
msgid ""
"LinuxCNC requires a kernel modified for realtime use to control real machine "
"hardware. It can, however run on a standard kernel in simulation mode for "
"purposes such as checking G-code, testing config files and learning the "
"system.  To work with these kernel versions there are two versions of "
"LinuxCNC distributed. The package names are \"linuxcnc\" and \"linuxcnc-"
"uspace\"."
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:56
msgid "The realtime kernel options are preempt-rt, RTAI and Xenomai."
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:58
msgid "You can discover the kernel version of your system with the command:"
msgstr ""

#. type: delimited block -
#: src/getting-started/system-requirements.adoc:61
#, no-wrap
msgid "uname -a\n"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:66
#: src/getting-started/updating-linuxcnc.adoc:70
msgid ""
"If you see (as above) `-rt-` in the kernel name then you are running the "
"preempt-rt kernel and should install the \"uspace\" version of LinuxCNC.  "
"You should also install uspace for \"sim\" configs on non-realtime kernels"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:69
#: src/getting-started/updating-linuxcnc.adoc:73
msgid ""
"If you see `-rtai-` in the kernel name then you are running RTAI realtime. "
"See below for the LinuxCNC version to install."
msgstr ""

#. type: Title ===
#: src/getting-started/system-requirements.adoc:70
#, no-wrap
msgid "Preempt-RT with 'linuxcnc-uspace' package"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:81
msgid ""
"Preempt-RT is the newest of the realtime systems, and is also the version "
"that is closest to a mainline kernel. Preempt-RT kernels are available as "
"precompiled packages from the main repositories. The search term \"PREEMPT_RT"
"\" will find them, and one can be downloaded and installed just like any "
"other package.  Preempt-RT will generally have the best driver support and "
"is the only option for systems using the Mesa ethernet-connected hardware "
"driver cards. In general preempt-rt has the worst latency of the available "
"systems, but there are exceptions."
msgstr ""

#. type: Title ===
#: src/getting-started/system-requirements.adoc:82
#, no-wrap
msgid "RTAI with 'linuxcnc' package"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:90
msgid ""
"RTAI has been the mainstay of LinuxCNC distributions for many years. It will "
"generally give the best realtime performance in terms of low latency, but "
"might have poorer peripheral support and not as many screen resolutions. An "
"RTAI kernel is available from the LinuxCNC package repository. If you "
"installed from the Live/Install image then switching kernel and LinuxCNC "
"flavour is described in [Installing-RTAI]."
msgstr ""

#. type: Title ===
#: src/getting-started/system-requirements.adoc:91
#, no-wrap
msgid "Xenomai with 'linuxcnc-uspace' package"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:95
msgid ""
"Xenomai is also supported, but you will have to find or build the kernel and "
"compile LinuxCNC from source to utilise it."
msgstr ""

#. type: Title ===
#: src/getting-started/system-requirements.adoc:96
#, no-wrap
msgid "RTAI with 'linuxcnc-uspace' package"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:100
msgid ""
"It is also possible to run LinuxCNC with RTAI in user-space mode. As with "
"Xenomai you will need to compile from source to do this."
msgstr ""

#. type: Title ==
#: src/getting-started/system-requirements.adoc:101
#, no-wrap
msgid "Problematic Hardware"
msgstr ""

#. type: Title ===
#: src/getting-started/system-requirements.adoc:103
#, no-wrap
msgid "Laptops"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:108
msgid ""
"Laptops are not generally suited to real time software step generation. "
"Again a Latency Test run for an extended time will give you the info you "
"need to determine suitability."
msgstr ""

#. type: Title ===
#: src/getting-started/system-requirements.adoc:109
#, no-wrap
msgid "Video Cards"
msgstr ""

#. type: Plain text
#: src/getting-started/system-requirements.adoc:115
msgid ""
"If your installation pops up with 800 x 600 screen resolution then most "
"likely Debian does not recognize your video card or monitor. This can "
"sometimes be worked-around by installing drivers or creating / editing Xorg."
"conf files."
msgstr ""

#. type: Title =
#: src/getting-started/updating-linuxcnc.adoc:5
#, no-wrap
msgid "Updating LinuxCNC(((Updating LinuxCNC)))"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:19
msgid ""
"Updating LinuxCNC to a new minor release (ie to a new version in the same "
"stable series, for example from 2.7.0 to 2.7.1) is an automatic process if "
"your PC is connected to the internet. You will see an update prompt after a "
"minor release along with other software updates. If you don't have an "
"internet connection to your PC see <<getting-started:update-no-network,"
"Updating without Network>>."
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:20
#, no-wrap
msgid "Upgrade to the new version"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:25
msgid ""
"This section describes how to upgrade LinuxCNC from version 2.7 to the new "
"2.8.0 version.  It assumes that you have an existing 2.7 install that you "
"want to update."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:29
msgid ""
"To upgrade LinuxCNC from a version older than 2.7, you have to first http://"
"linuxcnc.org/docs/2.7/html/getting-started/updating-linuxcnc.html[upgrade "
"your old install to 2.7], then follow these instructions to upgrade to the "
"new version."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:33
msgid ""
"If you do not have an old version of LinuxCNC to upgrade, then you're best "
"off making a fresh install of the new version as described in the section "
"<<cha:getting-linuxcnc,Getting LinuxCNC>>."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:41
msgid ""
"Furthermore, if you are running Ubuntu Precise or Debian Wheezy it is well "
"worth considering making a backup of the \"linuxcnc\" directory on removable "
"media and performing a <<cha:getting-linuxcnc,clean install of a newer OS "
"and LinuxCNC version>> as these releases were EOL in 2017 and 2018 "
"respectively.  If you are running on Ubuntu Lucid then you will have to do "
"this, as Lucid is no longer supported by LinuxCNC (it was EOL in 2013)."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:45
msgid ""
"To upgrade major versions like 2.7 to 2.8 when you have a network connection "
"at the machine you need to disable the old linuxcnc.org apt sources in the "
"file /etc/apt/sources.list and add a new linuxcnc.org apt source for 2.7, "
"then upgrade LinuxCNC."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:49
msgid ""
"The details will depend on which platform you're running on.  Open a <<faq:"
"terminal,terminal>> then type `lsb_release -ic` to find this information out:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:54
#, no-wrap
msgid ""
"lsb_release -ic\n"
"Distributor ID: Debian\n"
"Codename:       wheezy\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:59
msgid ""
"You should be running on Debian Stretch or Wheezy (as above), or Ubuntu "
"Precise. Packages are also available for Debian Jessie or Debian Buster if "
"you happen to already be running one of those."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:61
msgid "You will also need to check which realtime kernel is being used:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:65
#, no-wrap
msgid ""
"uname -r\n"
"4.19.0-9-rt-amd64\n"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:75
#, no-wrap
msgid "Apt Sources Configuration"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:79
msgid ""
"Open the `Software Sources` window. The process for doing this differs "
"slightly on the three supported platforms:"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:80
msgid "Debian:"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:81
msgid "Click on `Applications Menu`, then `System`, then"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:82
msgid "`Synaptic Package Manager`."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:84
msgid ""
"In Synaptic, click on the `Settings` menu, then click `Repositories` to open "
"the `Software Sources` window."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:85
msgid "Ubuntu Precise:"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:86
#: src/getting-started/updating-linuxcnc.adoc:147
msgid "Click on the `Dash Home` icon in the top left."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:88
msgid ""
"In the `Search` field, type \"software\", then click on the `Ubuntu Software "
"Center` icon."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:91
msgid ""
"In the Ubuntu Software Center window, click on the `Edit` menu, then click "
"on `Software Sources...` to open the `Software Sources` window."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:92
msgid "Ubuntu Lucid:"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:94
msgid ""
"Click the `System` menu, then `Administration`, then `Synaptic Package "
"Manager`."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:96
msgid ""
"In Synaptic, click on the `Settings` menu, then click on `Repositories` to "
"open the `Software Sources` window."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:97
msgid "In the `Software Sources` window, select the `Other Software` tab."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:99
msgid ""
"Delete or un-check all the old linuxcnc.org entries (leave all non-linuxcnc."
"org lines as they are)."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:101
msgid ""
"Click the `Add` button and add a new apt line. The line will be slightly "
"different on the different platforms:"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:104
#, no-wrap
msgid "Platform"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:105
#, no-wrap
msgid "apt source line"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:105
#, no-wrap
msgid "Debian Stretch"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:106
#, no-wrap
msgid "`deb http://linuxcnc.org stretch base 2.8-rtpreempt`"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:107
#, no-wrap
msgid "`deb http://linuxcnc.org wheezy base 2.8-rt`"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:108
#, no-wrap
msgid "`deb http://linuxcnc.org precise base 2.8-rt`"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:108
#, no-wrap
msgid "Debian Jessie - preempt"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:109
#, no-wrap
msgid "`deb http://linuxcnc.org jessie base 2.8-rtpreempt`"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:109
#, no-wrap
msgid "Debian Jessie - RTAI"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:110
#, no-wrap
msgid "`deb http://linuxcnc.org jessie base 2.8-rt`"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:110
#, no-wrap
msgid "Debian Buster - preempt"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:111
#, no-wrap
msgid "`deb http://linuxcnc.org buster base 2.8-rtpreempt`"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:111
#, no-wrap
msgid "Debian Buster - RTAI"
msgstr ""

#. type: Table
#: src/getting-started/updating-linuxcnc.adoc:112
#, no-wrap
msgid "`deb http://linuxcnc.org buster base 2.8-rt`"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/getting-started/updating-linuxcnc.adoc:114
#, no-wrap
msgid "Setting apt sources"
msgstr ""

#. type: Target for macro image
#: src/getting-started/updating-linuxcnc.adoc:114
#, no-wrap
msgid "images/upgrading-to-2.8.png"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:119
msgid ""
"Click `Add Source`, then `Close` in the Software Sources window.  If it pops "
"up a window informing you that the information about available software is "
"out-of-date, click the `Reload` button."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:120
#, no-wrap
msgid "Upgrading to the new version"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:124
msgid ""
"Now your computer knows where to get the new version of the software, next "
"we need to install it."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:126
msgid "The process again differs depending on your platform."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:127
#, no-wrap
msgid "Debian Wheezy & Stretch and Ubuntu Lucid"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:130
msgid "Debian Wheezy and Stretch both use the Synaptic Package Manager."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:132
msgid ""
"Open Synaptic using the instructions in <<_setting_apt_sources,Setting apt "
"sources>> above."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:133
msgid "Click the `Reload` button."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:134
msgid "Use the Search function to search for `linuxcnc`."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:136
msgid ""
"The package is called \"linuxcnc\" for RTAI kernels and \"linuxcnc-uspace\" "
"for preempt-rt."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:140
msgid ""
"Click the check box to mark the new linuxcnc and linuxcnc-doc-* packages for "
"upgrade. The package manager may select a number of additional packages to "
"be installed, to satisfy dependencies that the new linuxcnc package has."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:143
msgid ""
"Click the `Apply` button, and let your computer install the new package. The "
"old linuxcnc package will be automatically upgraded to the new one."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:149
msgid ""
"In the `Search` field, type \"update\", then click on the `Update Manager` "
"icon."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:150
msgid "Click the `Check` button to fetch the list of packages available."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:152
msgid ""
"Click the `Install Updates` button to install the new versions of all "
"packages."
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:154
#, no-wrap
msgid "Updating without Network"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:158
msgid ""
"To update without a network connection you need to download the .deb then "
"install it with dpkg. The .debs can be found in http://linuxcnc.org/dists/ ."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:162
msgid ""
"You have to drill down from the above link to find the correct deb for your "
"installation. Open a <<faq:terminal,terminal>> and type in 'lsb_release -ic' "
"to find the release name of your OS."
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:167
#, no-wrap
msgid ""
"> lsb_release -ic\n"
"Distributor ID: Debian\n"
"Codename:       buster\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:171
msgid ""
"Pick the OS from the list then pick the major version you want like 2.8-rt "
"for RTAI or 2.8-rtpreempt for preempt-rt."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:174
msgid ""
"Next pick the type of computer you have: binary-amd64 for any 64-bit x86, "
"binary-i386 for 32 bit, binary-armhf (32bit) or binary-arm64 (64bit) for "
"Raspberry Pi."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:181
msgid ""
"Next pick the version you want from the bottom of the list like 'linuxcnc-"
"uspace_2.8.0_amd64.deb' (choose the latest by date).  Download the deb and "
"copy it to your home directory. You can rename the file to something a bit "
"shorter with the file manager like 'linuxcnc_2.8.0.deb' then open a terminal "
"and install it with the package manager with this command:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:184
#, no-wrap
msgid "sudo dpkg -i linuxcnc_2.8.0.deb\n"
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:186
#, no-wrap
msgid "Updating Configuration Files (for 2.8.x)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:190
msgid ""
"The new version of LinuxCNC differs from version 2.7 in some ways that may "
"require changes to your machine configuration."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:197
msgid ""
"The main difference is that LinuxCNC no longer makes any assumptions about "
"which joint controls which axis. This change is generally termed \"joints-"
"axes\" after the name of the development branch where the changes started.  "
"This change has been in development since at least 2010, and has finally "
"been merged."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:198
#, no-wrap
msgid "Distribution Configurations (updates for joints_axes)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:205
msgid ""
"The LinuxCNC distribution includes many example configurations organized in "
"directory hierarchies named: by_machine, by_interface, and sim (simulated "
"machines).  These configurations are often used as starting points for "
"making a new configuration, as examples for study, or as complete simulated "
"machines that can run without special hardware or real-time kernels."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:208
msgid ""
"The configuration files in these directory trees have been updated for the "
"changes required for the joints_axes updates."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:209
#, no-wrap
msgid "Automatic updates (update_ini script for joints_axes)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:214
msgid ""
"Since the joints_axes updates require a number of changes to user INI files "
"and their related HAL files, a script named update_ini is provided to "
"automatically convert user configurations."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:222
msgid ""
"This script is invoked when a user starts an existing configuration for the "
"first time after updating LinuxCNC. The script searches the user INI file "
"for a [EMC]VERSION item. If this item 1) does not exist, or 2) exists and is "
"set to the historical CVS value \"$Revision$\", or is a numerical value less "
"than 1.1, then the update_ini script will popup a dialog to offer to edit "
"the user files to create an updated configuration. If the user accepts, the "
"configuration will be updated."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:228
msgid ""
"For example, if the user configuration is named bigmill.ini, the bigmill.ini "
"file and its local associated HAL files will be edited to incorporate "
"joints_axes changes. All files of the initial configuration will be saved in "
"a new directory named after the original configuration with a \".old\" "
"suffix (bigmill.old in the example)."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:233
msgid ""
"The update_ini script handles all common user items that are found in basic "
"machines employing identity kinematics.  Less common items used in more "
"complex machines may not be converted automatically.  Examples of complex "
"machine configurations include:"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:235
msgid "gantries with two joints for an axis"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:236
msgid "machines with jogwheels"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:237
msgid "robots with non-identity kinematics"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:238
msgid "configurations using haltcl files"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:241
msgid ""
"The following subsections and the section for 'HAL Changes' list items that "
"may require additional user edits to INI or HAL files."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:242
#, no-wrap
msgid "Multiple Spindle Support"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:250
msgid ""
"LinuxCNC now supports up to 8 spindles (and can be recompiled for more).  "
"Existing G-code will run without modification and most configurations will "
"default to single spindles. To specify more than one spindle set the "
"[TRAJ]SPINDLES= entry in the INI file *and* include the num_spindles= "
"parameter for the motion module (set with either [EMCMOT]EMCMOT = motmod "
"num_spindles= or included in a HAL file loadrt entry for motmod)."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:253
msgid ""
"The motion module num_spindles= parameter and the [TRAJ]SPINDLES= settings "
"*must* match."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:264
msgid ""
"The spindle control pin names have been changed to make spindles look more "
"like axes and joints. motion.spindle-speed-out is now spindle.0.speed-out "
"for example. The automatic update script will take care of these changes.  "
"To control extra spindles the G and M-codes which control spindle speed now "
"accept an additional \"$\" argument, for example M3 $2 to start the third "
"spindle. \"$\" was chosen to avoid clashes with any existing code letters. "
"It should be possible to create custom G-codes to match any other multi-"
"spindle controller.  See the G-code and M-code manuals for code changes, and "
"man motion for the HAL pin changes."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:265
#, no-wrap
msgid "TRAJ velocities, accelerations names"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:269
msgid ""
"With incorporation of joints_axes functionality, some names were changed to "
"clarify available functionality."
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:274
#, no-wrap
msgid ""
"was: [TRAJ]MAX_VELOCITY         is: [TRAJ]MAX_LINEAR_VELOCITY\n"
"was: [TRAJ]DEFAULT_VELOCITY     is: [TRAJ]DEFAULT_LINEAR_VELOCITY\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:277
#, no-wrap
msgid ""
"was: [TRAJ]MAX_ACCELERATION     is: [TRAJ]MAX_LINEAR_ACCELERATION\n"
"was: [TRAJ]DEFAULT_ACCELERATION is: [TRAJ]DEFAULT_LINEAR_ACCELERATION\n"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:279
#, no-wrap
msgid "Kinematics modules"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:283
msgid ""
"The gentrivkins and gantrykins kinematics modules have been removed as their "
"functionality is now available in the updated trivkins module."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:286
msgid ""
"The gentrivkins module has only been available in prior joints_axes "
"branches. To convert, it is necessary to change the name."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:288
msgid "HAL file examples:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:293
#, no-wrap
msgid ""
"was: loadrt gentrivkins\n"
" is: loadrt trivkins\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:296
#, no-wrap
msgid ""
"was: loadrt gentrivkins coordinates=xyyz\n"
" is: loadrt trivkins    coordinates=xyyz\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:300
msgid ""
"Configurations using gantrykins should be updated to use trivkins with the "
"kinstype= parameter set to BOTH (for KINEMATICS_BOTH)."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:302
msgid "HAL file example:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:307
#, no-wrap
msgid ""
"was: loadrt gantrykins coordinates=xyyz\n"
" is: loadrt trivkins   coordinates=xyyz kinstype=BOTH\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:310
msgid "See the trivkins man page for additional information ('$ man trivkins')"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:315
msgid ""
"Note: the most supported usage for specifying kinematics in joints_axes is "
"to set values in the configuration INI file [KINS] section and then "
"reference them within the specified [HAL]HALFILES ( .hal .tcl files). For "
"example:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:321
#, no-wrap
msgid ""
"INI file:    [KINS]\n"
"             KINEMATICS = trivkins\n"
"             JOINTS = 3\n"
"             ...\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:323
#, no-wrap
msgid "HAL file:    loadrt [KINS]KINEMATICS\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:325
#, no-wrap
msgid "haltcl file: loadrt $::KINS(KINEMATICS)\n"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:327
#, no-wrap
msgid "Lathe Configurations"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:335
msgid ""
"Prior to joints_axes incorporation, lathes were often configured as if they "
"were three axis (XYZ) machines with an unused axis (Y). This was convenient "
"for sharing HAL files (especially for simulation configs) but required "
"specification of [TRAJ]AXES =3, a 'dummy' AXIS_Y section, and provisions for "
"homing the unused Y coordinate. These arrangements are no longer required or "
"recommended."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:342
msgid ""
"Historical lathe configurations used the default options for the trivkins "
"kinematics module. These default options configure all axis letters "
"(XYZABCUVW). With joints_axes incorporation, a more appropriate kinematics "
"specification sets the coordinates to the exact ones used (XZ) and sets the "
"number of joints accordingly to 2.  There is no need for an INI file "
"[AXIS_Y] section and only two [JOINT_N] sections need be defined."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:345
msgid ""
"Example INI file items for a lathe (only sections relevant to kinematics are "
"shown):"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:355
#, no-wrap
msgid ""
"[TRAJ]\n"
"COORDINATES = XZ\n"
"...\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:358
#, no-wrap
msgid ""
"[AXIS_X]\n"
"...\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:361
#, no-wrap
msgid ""
"[AXIS_Z]\n"
"...\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:364
#, no-wrap
msgid ""
"[JOINT_0]\n"
"...\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:367
#, no-wrap
msgid ""
"[JOINT_1]\n"
"...\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:371
msgid ""
"Note that some simulation configurations may still use the historical lathe "
"configuration precedents."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:372
#, no-wrap
msgid "Consistent Joints/Axes specifications"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:375
msgid "INI file items that affect joints and axes usage must be consistent."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:378
msgid ""
"The motion kinematics module typically loaded with '[KINS]KINEMATICS=' must "
"use a number of joints equal to the number specified with '[KINS]JOINTS='."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:381
msgid ""
"The kinematics module must implement axis letters that are consistent with "
"the specification used by the task module item '[TRAJ]COORDINATES='."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:385
msgid "Three axis Cartesian machine using trivkins (KINEMATICS_IDENTITY):"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:391
#, no-wrap
msgid ""
"[KINS]KINEMATICS  = trivkins\n"
"[KINS]JOINTS      = 3\n"
"[TRAJ]COORDINATES = XYZ\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:395
msgid ""
"Two axis lathe using trivkins (KINEMATICS_IDENTITY) with non-consecutive "
"axis letters:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:401
#, no-wrap
msgid ""
"[KINS]KINEMATICS  = trivkins coordinates=XZ\n"
"[KINS]JOINTS      = 2\n"
"[TRAJ]COORDINATES = XZ\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:405
msgid ""
"Gantry using trivkins with duplicated axis letters and KINEMATICS_BOTH to "
"allow individual joint positioning (for homing):"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:411
#, no-wrap
msgid ""
"[KINS]KINEMATICS  = trivkins coordinates=XYYZ kinstype=BOTH\n"
"[KINS]JOINTS      = 4\n"
"[TRAJ]COORDINATES = XYYZ\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:415
msgid ""
"Gantry using trivkins (KINEMATICS_BOTH) with duplicated axis letters and a "
"rotary axis with skipped axis letters (A,B skipped):"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:421
#, no-wrap
msgid ""
"[KINS]KINEMATICS  = trivkins coordinates=XYYZC kinstype=BOTH\n"
"[KINS]JOINTS      = 5\n"
"[TRAJ]COORDINATES = XYYZC\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:425
msgid ""
"Linear Delta Robot with non-identity kins (KINEMATICS_BOTH) working in "
"Cartesian frame with an additional rotary coordinate:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:431
#, no-wrap
msgid ""
"[KINS]KINEMATICS  = lineardeltakins\n"
"[KINS]JOINTS      = 4\n"
"[TRAJ]COORDINATES = XYZA\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:437
msgid ""
"Note: Some general-purpose kinematics modules (like trivkins) implement "
"identity kinematics with support for coordinate specification (axis "
"letters).  Axis letters may be omitted.  Axis letters may be duplicated.  "
"Joints are assigned to axis letters in a defined manner ('$ man trivkins')."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:439
msgid ""
"Note: For trivkins module loading, do not include spaces about the = sign or "
"letters:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:444
#, no-wrap
msgid ""
"This:     [KINS]KINEMATICS = trivkins coordinates=XZ\n"
"NOT This: [KINS]KINEMATICS = trivkins coordinates = X Z\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:453
msgid ""
"Note: Custom kinematics modules that implement non-identity kinematics (like "
"lineardeltakins) define machine-specific relationships between a set of "
"coordinates and a set of joints.  Typically, custom kinematics modules "
"compute the joints-axes relationships within the custom module but it is "
"important to use consistent settings for the related INI items: "
"'[KINS]JOINTS' and '[TRAJ]COORDINATES'.  The details will usually be "
"explained in the module man page (for example, '$ man lineardeltakins')."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:454
#, no-wrap
msgid "Home sequences"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:462
#, no-wrap
msgid ""
"*Negative* values may be used for the INI file items\n"
"named [JOINT_n]HOME_SEQUENCE.  Prior to joints_axes incorporation a value\n"
"of -1 or the omission of the item indicated no sequence was applicable.\n"
"Now, only omission of the item is used for that purpose.\n"
"See the chapter: <<cha:homing-configuration,'Homing Configuration'>>\n"
"for more information.\n"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:463
#, no-wrap
msgid "Locking rotary indexer (updates for joints_axes)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:468
msgid ""
"With joints_axes, an indexer is a joint that can be homed (joint mode)  but "
"must also be unlocked from G-code.  This requires a one-to-one "
"correspondence between a single joint and an axis."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:471
msgid ""
"Specify the joint number that corresponds to a rotary axis (_L_ = A,B, or "
"C)  with an INI file setting for the axis:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:475
#, no-wrap
msgid "[AXIS_L]LOCKING_INDEXER_JOINT = joint_number_for_indexer\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:479
msgid ""
"Specify that the joint is a locking indexer with an INI file setting for the "
"joint (_N_ is the joint_number_for_indexer):"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:483
#, no-wrap
msgid "[JOINT_N]LOCKING_INDEXER = 1\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:486
msgid "HAL pins can be created to coordinate use of a locking indicator joint:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:490
#, no-wrap
msgid ""
"joint.N.unlock      (BIT output from HAL)\n"
"joint.N.is-unlocked (BIT input  to   HAL)\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:495
msgid ""
"To create these HAL pins for locking joints, specify all joints that are "
"used as locking indexers with the 'unlock_joints_mask' parameter for the "
"motmod module.  (bit0(LSB)==>joint0, bit1==>joint1, etc.)"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:500
#, no-wrap
msgid ""
"[EMCMOT]\n"
"EMCMOT = motmod unlock_joints_mask=BITMASK\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:507
msgid ""
"As an example, consider a machine using trivkins kinematics with coordinates "
"XYZB where B is a locking indexer.  For trivkins, joint numbers (starting "
"with 0) are assigned consecutively to the coordinates specified (axis "
"coordinate letters may be omitted).  For this example, X==>joint0, "
"Y==>joint1, Z==>joint2, B==>joint3.  The mask to specify joint 3 is "
"000001000 (binary) == 0x08 (hexadecimal)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:509
msgid "The required INI file entries for this trivkins XYZB example are:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:516
#, no-wrap
msgid ""
"[KINS]\n"
"JOINTS = 4\n"
"KINEMATICS = trivkins coordinates=XYZB\n"
"...\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:520
#, no-wrap
msgid ""
"[TRAJ]\n"
"COORDINATES = XYZB\n"
"...\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:524
#, no-wrap
msgid ""
"[EMCMOT]\n"
"EMCMOT = motmod unlock_joints_mask=0x08\n"
"...\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:528
#, no-wrap
msgid ""
"[AXIS_B]\n"
"LOCKING_INDEXER_JOINT = 3\n"
"...\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:532
#, no-wrap
msgid ""
"[JOINT_3]\n"
"LOCKING_INDEXER = 1\n"
"...\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:536
msgid ""
"For more complex kinematics, select the joint number as required -- there "
"must be a one-to-one correspondence between the rotary axis and the joint "
"number."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:538
msgid ""
"(See the motion man page ('$ man motion') for more information on motmod)"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:539
#, no-wrap
msgid "Stricter INI file syntax"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:546
msgid ""
"Lines with numeric INI variables are no longer allowed to have trailing "
"text.  In earlier versions of LinuxCNC any text after the number was "
"silently ignored, but as of this version such text is totally disallowed.  "
"This includes hash characters (\"#\"), which in this position are a part of "
"the value, not a comment character."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:548
msgid "For example, lines like this will no longer be accepted:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:552
#, no-wrap
msgid "MAX_VELOCITY = 7.5 # This is the max velocity of the axis.\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:555
msgid "They could be transformed into pairs of lines like this:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:560
#, no-wrap
msgid ""
"# This is the max velocity of the axis.\n"
"MAX_VELOCITY = 7.5\n"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:562
#, no-wrap
msgid "[TRAJ] settings"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:565
msgid "In 2.7.x versions, trajectory planning ([TRAJ]) settings included:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:571
#, no-wrap
msgid ""
"[TRAJ]\n"
"DEFAULT_ACCELERATION\n"
"MAX_ACCELERATION\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:575
msgid ""
"Interim work prepared for distinct linear and angular items by renaming "
"these items as:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:581
#, no-wrap
msgid ""
"[TRAJ]\n"
"DEFAULT_LINEAR_ACCEL\n"
"MAX_LINEAR_ACCEL\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:586
msgid ""
"As these abbreviated names were inconsistent with other name conventions and "
"the implementation of the update_ini script, the interim naming has been "
"corrected to use:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:592
#, no-wrap
msgid ""
"[TRAJ]\n"
"DEFAULT_LINEAR_ACCELERATION\n"
"MAX_LINEAR_ACCELERATION\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:597
msgid ""
"Support for specifying trajectory planning angular default and maximum "
"accelerations has not been implemented."
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:599
#, no-wrap
msgid "HAL Changes (updates for joints_axes 2.8.x)"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:601
#, no-wrap
msgid "Wheel or MPG (manual pulse generator) jogging"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:605
msgid ""
"Prior to incorporation of joints_axes updates, wheel jogging was supported "
"in joint mode only and controlled with HAL pins:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:611
#, no-wrap
msgid ""
"bit   IN  axis.M.jog-enable\n"
"float IN  axis.M.jog-scale\n"
"s32   IN  axis.M.jog-counts\n"
"bit   IN  axis.M.jog-vel-mode\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:614
msgid ""
"where 'M' is a number corresponding to an axis letter (0==>X, 1==>Y, etc.)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:618
msgid ""
"With incorporation of joints_axes updates, wheel jogging is available for "
"joints in joint mode and for each axis coordinate in teleop mode.  The "
"controlling HAL pins provided are:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:624
#, no-wrap
msgid ""
"bit   IN  joint.N.jog-enable\n"
"float IN  joint.N.jog-scale\n"
"s32   IN  joint.N.jog-counts\n"
"bit   IN  joint.N.jog-vel-mode\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:629
#, no-wrap
msgid ""
"bit   IN  axis.L.jog-enable\n"
"float IN  axis.L.jog-scale\n"
"s32   IN  axis.L.jog-counts\n"
"bit   IN  axis.L.jog-vel-mode\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:632
msgid "where _N_ is a joint number and _L_ is an axis letter."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:637
msgid ""
"To use an MPG in identity kins configurations where there is a one-to-one "
"correspondence of a joint number and an axis letter, it may be convenient to "
"connect the corresponding HAL pins.  For example, if joint 1 corresponds "
"exactly to axis letter y:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:644
#, no-wrap
msgid ""
"net jora_1_y_enable   => joint.1.jog-enable => axis.y.jog-enable\n"
"net jora_1_y_scale    => joint.1.jog-scale  => axis.y.jog-scale\n"
"net jora_1_y_counts   => joint.1.jog-counts => axis.y.jog-counts\n"
"net jora_1_y_vel-mode => joint.1.jog-counts => axis.y.jog-vel-mode\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:648
msgid ""
"(The signal names jora_1_y_* are examples, names prior to conversion for "
"joints_axes will depend upon the specific configuration details.)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:653
msgid ""
"Configurations with non-identity kinematics and configurations that use "
"duplicated axis letters (for example, gantries using more than one joint for "
"an axis coordinate) will require appropriate independent control logic to "
"support both joint and teleop (world) jogging."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:654
#, no-wrap
msgid "INI HAL pins"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:657
msgid ""
"HAL pins are created for INI file items for both joints ([JOINT_N]) and axes "
"([AXIS_L]):"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:659
msgid "For _N_ = 0 ... [KINS](JOINTS-1):"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:672
#, no-wrap
msgid ""
"INI file item              HAL pin name\n"
"[JOINT_N]BACKLASH          ini.N.backlash\n"
"[JOINT_N]FERROR            ini.N.ferror\n"
"[JOINT_N]MIN_FERROR        ini.N.min_ferror\n"
"[JOINT_N]MIN_LIMIT         ini.N.min_limit\n"
"[JOINT_N]MAX_LIMIT         ini.N.max_limit\n"
"[JOINT_N]MAX_VELOCITY      ini.N.max_velocity\n"
"[JOINT_N]MAX_ACCELERATION  ini.N.max_acceleration\n"
"[JOINT_N]HOME              ini.N.home\n"
"[JOINT_N]HOME_OFFSET       ini.N.home_offset\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:675
msgid "For _L_ = x y z a b c u v w:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:683
#, no-wrap
msgid ""
"INI file item              HAL pin name\n"
"[AXIS_L]MIN_LIMIT          ini.L.min_limit\n"
"[AXIS_L]MAX_LIMIT          ini.L.max_limit\n"
"[AXIS_L]MAX_VELOCITY       ini.L.max_velocity\n"
"[AXIS_L]MAX_ACCELERATION   ini.L.max_acceleration\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:690
msgid ""
"In prior versions of LinuxCNC (before joints_axes updates), the HAL pin "
"names `ini._N_.*` referred to axes with 0==>x, 1==>y, etc. (pins were "
"created for all 9 axes). See the man page of 'milltask' for more information."
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:691
#, no-wrap
msgid "HAL Changes (Other 2.8.x)"
msgstr ""

#. type: TH
#: src/getting-started/updating-linuxcnc.adoc:693 man/man1/halcompile.1:25
#, no-wrap
msgid "halcompile"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:699
msgid ""
"The number of names= instances was formerly limited to 16.  Now, for "
"realtime components (loadrt) the instances are assigned dynamically with no "
"built-in limit.  The limit of 16 still applies to names= items for userspace "
"(loadusr) components."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:702
msgid ""
"For components using 'personality', the maximum number is now settable by a "
"command line option -P|--personalities."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:703
#, no-wrap
msgid "Parameter to Pin changes"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:707
msgid ""
"The following HAL output pins were changed from parameters to pins so that "
"they can be connected to signals:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:711
#, no-wrap
msgid ""
"motion.servo.last-period    (servo last period in clks)\n"
"motion.servo.last-period_ns (kernel-dependent availability)\n"
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:713
#, no-wrap
msgid "Interface changes for joints_axes 2.8.x"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:715
#, no-wrap
msgid "Python LinuxCNC module"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:719
msgid ""
"The jog() interface includes a 'joint-flag' to specify joint (True)  or "
"teleop (False) jogging:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:722
#, no-wrap
msgid "jog(command, joint-flag, axis-or-joint-number, velocity[, distance])\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:726
#, no-wrap
msgid ""
"jog(linuxcnc.JOG_STOP, joint-flag, axis-or-joint-number)\n"
"jog(linuxcnc.JOG_CONTINUOUS, joint-flag, joint-flag, velocity)\n"
"jog(linuxcnc.JOG_INCREMENT, joint-flag, axis-or-joint-number, velocity, distance)\n"
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:728
#, no-wrap
msgid "GUIs (updates for joints_axes 2.8.x)"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:730
#, no-wrap
msgid "Notes on joint/axis jogging, homing, and kinematics"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:736
msgid ""
"With incorporation of joints_axes updates, LinuxCNC enforces the "
"distinctions of joints and axes (coordinate letters) -- but some GUIs (like "
"the AXIS GUI) may hide some of the distinctions for simple machines."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:738
msgid "In most cases, you can think of joints as 'motors'."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:742
msgid ""
"The relationships between joints and axis coordinates are determined by the "
"mathematical kinematics functions that describe a machine's motion."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:745
msgid ""
"World coordinates (X,Y,Z,A,B,C,U,V,W) are determined by applying 'FORWARD' "
"kinematics operations to joint (motor) positions."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:750
msgid ""
"When moving in world space (e.g., G-code movements) the required joint "
"(motor) positions are determined by applying 'INVERSE' kinematics operations "
"to the coordinates requested for motion in world space."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:752
msgid "Moving in world space is possible only 'after' homing."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:760
msgid ""
"For simple machines (like mills and lathes) there is a one-to-one "
"equivalence of joints and axis coordinate letters.  For example, on an XYZ "
"mill, the relationships are typically: axisX==joint0, axisY==joint1, "
"axisZ=joint2.  This correspondence is characterized as 'IDENTITY' kinematics "
"and the kinematics module used is usually trivkins (trivial kinematics).  "
"(See the trivkins man page '$ man trivkins')"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:767
msgid ""
"Joint jogging (by joint number 0,1,...) is used in joint mode (usually used "
"only 'BEFORE' homing).  When homing is completed, the jogging mode is "
"'AUTOMATICALLY' switched from joint mode to world mode and axis jogging "
"(coordinate letter X,Y,...) is used.  This is appropriate for all G-code "
"moves requested by MDI commands or by G-code programs."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:772
msgid ""
"Although jogging in joint mode is often never required after homing, some "
"GUIs (like AXIS) provide a keyboard shortcut ('$')  to allow toggling "
"between joint and world (teleop) modes for machines that use 'non-IDENTITY' "
"kinematics."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:779
msgid ""
"In many common situations, joint jogging is never needed since homing is "
"accomplished using home switches and/or the various homing methods provided "
"by LinuxCNC.  One simply turns on the machine, issues the Home-All command, "
"the machine homes and changes to world mode automatically.  See <<cha:homing-"
"configuration,Homing Configuration>>."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:784
msgid ""
"Machines that do not use home switches may require manual jogging in joint "
"mode before homing each and every joint.  It is also possible to use "
"immediate homing (see the homing docs) for joints that do not require homing "
"to a fixed position."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:788
msgid ""
"Although a GUI may hide joints/axes distinctions for 'IDENTITY' kinematics "
"machines, it is usually important to complete homing in order to run "
"programs or use features provided by a GUI."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:798
msgid ""
"By default, the trivkins module declares itself as having 'IDENTITY' "
"kinematics.  The distinctions of joint/world operations can be made visible "
"in the AXIS GUI when using trivkins by setting the kinemetics type to a 'non-"
"IDENTITY' type using 'kinstype=both'.  The 'both' setting indicates that "
"both forward and inverse kinematics functions are available and GUI "
"provisions that hide the distinctions of joints and axis letters should not "
"be employed.  For example, for an xyz configuration, specify:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:803
#, no-wrap
msgid ""
"[KINS]\n"
"KINEMATICS = trivkins coordinates=xyz kinstype=both\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:807
msgid ""
"With this setting, identity kinematics will be used but the AXIS GUI will:"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:809
msgid "show joint numbers prior to homing"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:810
msgid "show axis letters after successful homing"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:811
msgid "support toggling between joint and teleop modes with the '$' key"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:812
#, no-wrap
msgid "Halui"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:816
msgid ""
"Halui now supports teleop jogging resulting in some changed pin names and "
"numerous new names for jogging-related pins."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:818
msgid "See the man page ('$ man halui') for all pin names."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:819
#, no-wrap
msgid "TELEOP jogging (also called axis or world jogging)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:822
msgid "New pins for teleop jogging are:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:826
#, no-wrap
msgid ""
"new: halui.axis.jog-speed\n"
"new: halui.axis.jog-deadband\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:830
#, no-wrap
msgid ""
"new: halui.axis.L.plus\n"
"new: halui.axis.L.minus\n"
"      ... etc.\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:835
msgid ""
"where _L_ is a letter corresponding to one of the axis letters specified by "
"[TRAJ]COORDINATES or 'selected' for the axis selected by the halui.axis._L_."
"select pins."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:836
#, no-wrap
msgid "Joint jogging"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:839
msgid "All pins for joint jogging were renamed for specificity:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:843
#, no-wrap
msgid ""
"was: halui.jog-speed          is: halui.joint.jog-speed\n"
"was: halui.jog-deadband       is: halui.joint.jog-deadband\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:847
#, no-wrap
msgid ""
"was: halui.jog.N.plus         is: halui.joint.N.plus\n"
"was: halui.jog.N.minus        is: halui.joint.N.minus\n"
"      ...  etc.                    ... etc.\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:851
msgid ""
"where _N_ is a joint number (0 ... _num_noints_-1) or 'selected' for the "
"joint selected by the halui.joint._N_.select pins."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:852
#, no-wrap
msgid "Additional pin renames"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:856
msgid ""
"The HAL pins for 'selected' joints were renamed for consistency with related "
"pins."
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:860
#, no-wrap
msgid ""
"was: halui.joint.selected.is_homed\n"
"is: halui.joint.selected.is-homed\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:863
#, no-wrap
msgid ""
"was: halui.joint.selected.on-soft-limit\n"
"is: halui.joint.selected.on-soft-min-limit\n"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:865
#, no-wrap
msgid "AXIS GUI"
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:867
#, no-wrap
msgid "Identity Kinematics"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:872
msgid ""
"The AXIS GUI continues to support identity kinematics configurations. This "
"GUI hides the distinctions of axes and joints in order to simplify the "
"display and usage of simple machines."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:873
#, no-wrap
msgid "Special case kinematics"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:879
msgid ""
"Some machines, typically gantrys, may use a configuration with more than one "
"joint assigned to an axis letter.  This can be done with the trivkins "
"kinematics module using repeated coordinate letters.  For example, a machine "
"configured with INI settings:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:888
#, no-wrap
msgid ""
"[KINS]\n"
"KINEMATICS = trivkins coordinates=XYYZ kinstype=BOTH\n"
"...\n"
"[TRAJ]\n"
"COORDINATES = XYYZ\n"
"...\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:893
msgid ""
"This machine, after homing, has a one-to-one correspondence between a single "
"axis letter (Y) and a pair of joints (1,2).  Using 'kinematics=BOTH' allows "
"control of individual joints in joint mode 'if/when required'."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:894
#, no-wrap
msgid "Non-identity kinematics"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:897
msgid ""
"The AXIS GUI supports configurations using non-identity kinematics with:"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:899
msgid "Key binding ('$') to toggle joint or teleop mode"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:900
msgid "Preview Tab display of joints or axes according to joint or teleop mode"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:901
msgid "Preview Tab display of 'Home' and 'Limit' icons in joint mode"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:902
msgid "Preview Tab display of 'All-homed' and 'Any-limit' icons in teleop mode"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:903
msgid "DRO Tab display of joint or axes according to joint or teleop mode"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:904
msgid "Jogging is supported in both joint and teleop motion modes."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:905
msgid "External changes to the joint/teleop motion mode are detected."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:906
#, no-wrap
msgid "Home icons"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:910
msgid ""
"For identity kinematics, 'Home' icons are shown for the corresponding (one-"
"to-one) axis letter when a joint is homed."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:914
msgid ""
"For non-identity kinematics, 'Home' icons are shown for individual joints "
"when a joint is homed in joint display mode.  An 'All-homed' icon is "
"displayed for all axis letters when ALL joints are homed in world display "
"mode."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:915
#, no-wrap
msgid "Limit icons"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:919
msgid ""
"For identity kinematics, 'Limit' icons are shown for the corresponding (one-"
"to-one) axis letter when a joint limit is active."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:923
msgid ""
"For non-identity kinematics, 'Limit' icons are shown for individual joints "
"when the joint limit is active in joint display mode.  An 'Any-Limit' icon "
"is displayed if any joint is at a limit in teleop display mode."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:924
#, no-wrap
msgid "Key bindings for a fourth axis"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:932
msgid ""
"In the AXIS GUI, jogging keys are assigned to axes in a configurable "
"fashion.  For 3-axis machines, XYZA machines, and lathes the default is the "
"same as in 2.7.  For other machines, the 4 pairs of jogging keys are "
"assigned to the first 4 axes that exist in the order XYZ ABC UVW.  These "
"assignments can be controlled by new INI file directives in the <<sub:ini:"
"sec:display,[DISPLAY] section of the INI file>>."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:935
msgid ""
"Note that the parameters used for jogging may not be appropriate for both "
"modes for machines with non-identity kinematics."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:944
msgid ""
"The TkkLinuxCNC GUI supports both identity and non-identity kinematics, "
"includes GUI radiobuttons and a key binding ('$') for toggling joint and "
"teleop modes.  External changes to joint or teleop motion mode are "
"detected.  Jogging is supported in both joint and teleop motion modes.  Note "
"that the parameters used for jogging may not be appropriate for both modes "
"for machines with non-identity kinematics."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:947
msgid ""
"OpenGL is not used by TkLinuxCNC so it may be used to isolate problems and "
"system dependencies that are exposed with more modern GUIs like AXIS."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:950
msgid ""
"The rudimentary backplot GUI provided is available for use with identity "
"kinematics (xyz) machine configurations."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:951
#, no-wrap
msgid "emcsh commands"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:958
msgid ""
"The code of emcsh.cc provides the set of Tcl commands used by TkLinuxCNC.  "
"The commands are available to Tcl applications as the Tcl package named "
"'Linuxcnc'.  A number of commands previously required the use of a numeric "
"argument to specify an axis coordinate (0-->X, 1-->Y, ..., 8-->W).  These "
"commands have been simplified to use an argument that is just the coordinate "
"letter."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:960
msgid "Commands now using a coordinate letter argument are:"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:962
msgid "emc_pos_offset"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:963
msgid "emc_abs_cmd_pos"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:964
msgid "emc_abs_act_pos"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:965
msgid "emc_rel_cmd_pos"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:966
msgid "emc_rel_act_pos"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:967
msgid "emc_tool_offset"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:968
msgid "emc_probed_pos"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:974
msgid ""
"The Touchy GUI continues to support the identity kinematics configurations "
"that it supported prior to joints_axes incorporation.  Jogging is done in "
"teleop mode."
msgstr ""

#. type: Labeled list
#: src/getting-started/updating-linuxcnc.adoc:975 src/gui/gladevcp.adoc:29
#: src/gui/gscreen.adoc:5 src/user/user-intro.adoc:116
#, no-wrap
msgid "Gscreen"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:980
msgid ""
"The Gscreen GUI continues to support the identity kinematics configurations "
"that it supported prior to joints_axes incorporation.  Jogging is done in "
"teleop mode."
msgstr ""

#. type: TH
#: src/getting-started/updating-linuxcnc.adoc:981 src/gui/gladevcp.adoc:30
#: src/gui/gmoccapy.adoc:6 src/user/user-intro.adoc:122 man/man1/gmoccapy.1:25
#, no-wrap
msgid "GMOCCAPY"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:986
msgid ""
"The GMOCCAPY GUI continues to support the identity kinematics configurations "
"that it supported prior to joints_axes incorporation.  Jogging is done in "
"teleop mode."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:987
#, no-wrap
msgid "`shuttlexpress` driver renamed to `shuttle`"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:993
msgid ""
"The HAL driver for the Contour Designs ShuttleXpress device has been renamed "
"from \"shuttlexpress\" to just \"shuttle\".  If your HAL files include some "
"variant of \"loadusr shuttlexpress\", replace \"shuttlexpress\" with "
"\"shuttle\"."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:996
msgid ""
"Support has been added for the ShuttlePRO, a bigger version of the "
"ShuttleXpress, so the old driver name is no longer accurate."
msgstr ""

#. type: TH
#: src/getting-started/updating-linuxcnc.adoc:997 src/user/user-intro.adoc:149
#: man/man1/linuxcncrsh.1:1
#, no-wrap
msgid "linuxcncrsh"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1001
msgid ""
"\"Home All\" is now supported with the set home subcommand by using -1 for "
"the joint number."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1004
msgid ""
"The jogging commands have been altered to accommodate both joint (free)  and "
"teleop (world) jogging."
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1008
#, no-wrap
msgid ""
"was: set jog      joint_number             speed\n"
"is: set jog      joint_number|axis_letter speed\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1011
#, no-wrap
msgid ""
"was: set jog_incr joint_number             speed increment\n"
"is: set jog_incr joint_number|axis_letter speed increment\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1014
#, no-wrap
msgid ""
"was: set jog_stop\n"
"is: set jog_stop joint_number|axis_letter\n"
msgstr ""

#. type: delimited block =
#: src/getting-started/updating-linuxcnc.adoc:1021
#, no-wrap
msgid ""
"Test for teleop mode using command: `get teleop_enable` +\n"
"If TELEOP_ENABLE=YES, use axis_letter; +\n"
"Else                  use joint_number\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1028
msgid ""
"Formerly, the command 'set jog 0 1.234' would jog the zeroth axis (X) with "
"requested speed=1.234 in any mode (free or teleop).  This command now "
"attempts to jog the zeroth joint (Joint0) provided the mode is free (not "
"teleop).  To jog the X axis, the mode must be teleop and the corresponding "
"command is: 'set jog x 1.234'."
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:1029
#, no-wrap
msgid "Tools"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1031
#, no-wrap
msgid "Calibration (emccalib.tcl)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1034
msgid "The calibration/tuning tool now supports stanzas:"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1036
#, no-wrap
msgid "  [JOINT_N], [AXIS_L], [SPINDLE_S], [TUNE]\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1040
msgid ""
"where _N_ is a joint number (0 .. ([KINS]JOINTS-1) ), _L_ is an axis "
"coordinate letter (X,Y,Z,A,B,C,U,V,W), and _S_ is a spindle number (0 .. 9)."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1044
msgid ""
"The number of allowed spindles is 8 but legacy configurations may include a "
"stanza [SPINDLE_9] unrelated to an actual spindle number."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1048
msgid ""
"The [TUNE] stanza may be used for specifying tunable items not relevant to "
"the other supported stanzas."
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:1049
#, no-wrap
msgid "Obsolete Guis (removed for 2.8.x)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1054
msgid ""
"The GUIs 'mini', 'keystick', and 'xlinuxcnc' have been removed in "
"conjunction with updates for joints_axes.  All related source code, "
"examples, and documentation are available in the git repository."
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:1055
#, no-wrap
msgid "Deprecated Guis (marked at 2.8.x)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1060
msgid ""
"The 'linuxcnclcd' GUI is a candidate for removal.  Should this component be "
"removed, all related source code, examples, and documentation will be "
"available in the git repository."
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:1061
#, no-wrap
msgid "Simulator configurations (updates for joints axes 2.8.x)"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1063
#, no-wrap
msgid "Pre-joints_axes"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1069
msgid ""
"Prior to joints_axes incorporation, the HAL files used in sim configs "
"typically supported a common milling machine -- a Cartesian system with "
"trivial kinematics and three axes named 'X Y Z'.  Typical HAL file entries:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1077
#, no-wrap
msgid ""
"[HAL]\n"
"HALFILE = core_sim.hal\n"
"HALFILE = sim_spindle_encoder.hal\n"
"HALFILE = axis_manualtoolchange.hal\n"
"HALFILE = simulated_home.hal\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1083
msgid ""
"Lathe configs often shared the same HAL files and used the expedient method "
"of specifying 3 axes with 'Y' unused.  More complex sim configs provided "
"specific sets of HAL files according to the configuration purpose."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1084
#, no-wrap
msgid "Post-joints_axes"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1090
msgid ""
"With the incorporation of joints_axes functionality, many sims provided in "
"the distribution now take advantage of a general purpose HAL file that "
"supports numerous configurations automatically.  A typical sim config "
"HALFILE specification is:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1095
#, no-wrap
msgid ""
"[HAL]\n"
"HALFILE = LIB:basic_sim.tcl\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1099
msgid ""
"The basic_sim.tcl HALFILE supports a number of commonly required functions "
"for any number of joints as specified by:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1106
#, no-wrap
msgid ""
"[KINS]\n"
"...\n"
"JOINTS = number_of_joints\n"
"...\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1109
msgid "Functions supported include:"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1112
msgid ""
"'ddts' -- differentiator HAL components are loaded and connected for each "
"joint (and xy, xyz for trivkins machines)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1114
msgid ""
"'simulated_home' -- a sim_home_switch HAL component is loaded and connected "
"for each joint.  The homing conditions are specified by the usual "
"[JOINT_n]HOME_* INI file items."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1116
msgid ""
"'use_hal_manualtoolchange' -- the user space hal_manualtoolchange component "
"is loaded and connected."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1119
msgid ""
"'sim_spindle' -- the sim_spindle component is loaded and connected to "
"additional loaded HAL components to simulate the inertia of a rotating "
"spindle mass."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1123
msgid ""
"The functions are activated by default but can be excluded using options: '-"
"no_make_ddts', '-no_simulated_home', '-no_use_hal_manualtoolchange', '-"
"no_sim_spindle'."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1125
msgid "For example, to omit creation of ddts:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1129
#, no-wrap
msgid "HALFILE = LIB:basic_sim.tcl -no_make_ddts\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1134
msgid ""
"Omitting one or more of the core functions allows testing without without "
"the function or addition of new HALFILEs to implement or expand on the "
"functionality."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:1135
#, no-wrap
msgid "Equivalent HAL commands file"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1141
#, no-wrap
msgid ""
"When LIB:basic_sim.tcl is used, an equivalent HAL file is created (in the\n"
"configuration directory) to show the halcmd commands issued.   The file\n"
"name is based on the name of the INI file with '_cmds' appended to\n"
"the basename and a conventional '.hal' file extension. Example:\n"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1145
#, no-wrap
msgid ""
"inifilename:            example.ini\n"
"equivalent_halfilename: example_cmds.hal\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1152
msgid ""
"The equivalent HAL file supersedes previous instances of files with the same "
"filename.  INI file variables substitutions specified in the INI file and "
"interpreted by halcmd are automatically substituted in the created HAL "
"file.  If there are [HAL]HALFILEs specified before LIB:basic_sim.tcl, their "
"halcmd commands are included too."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1156
msgid ""
"The equivalent HAL file can be used to create a new configuration based on "
"the original configuration made with LIB:basic_sim.tcl with the following "
"steps:"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1158
msgid ""
"Run the simulator configuration to create a new equivalent HAL file, for "
"example: 'example_cmds.hal'."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1160
msgid ""
"To use this new equivalent HAL file in the original simulator configuration "
"INI file (or a copy of it), edit to change:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1165
#, no-wrap
msgid ""
"[HAL]\n"
"HALFILE = LIB:basic_sim.tcl other_parameters\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1168
msgid "to:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1173
#, no-wrap
msgid ""
"[HAL]\n"
"HALFILE = ./example_cmds.hal\n"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1175
#: src/motion/external-offsets.adoc:160 src/tooldatabase/tooldatabase.adoc:280
#, no-wrap
msgid "Notes"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1180
msgid ""
"All components and connections made by LIB:basic_sim.tcl can be viewed using "
"halcmd.  The entire HAL configuration (except for userspace components "
"loaded with loadusr) can be saved to a file using:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1183
#, no-wrap
msgid "$ halcmd save > hal.save\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1188
msgid ""
"Use of LIB:basic_sim.tcl reduces the effort needed to make a simulation "
"config since it handles most of the required component loading and HAL "
"connections."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1192
msgid ""
"The sim config 'Sample Configurations/sim/axis/minimal_xyz.ini' demonstrates "
"a working xyz configuration that uses LIB:basic_sim.tcl with a minimal "
"number of INI file settings."
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:1193
#, no-wrap
msgid "Miscellaneous updates for 2.8.x"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1197
msgid ""
"Commits to unreleased branches may make changes that affect testers and "
"early-adopters of the unreleased software."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1198
#, no-wrap
msgid "Motion pins"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1201
msgid "New pins (see the motion man page for more info):"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1202
#, no-wrap
msgid "---\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1205
#, no-wrap
msgid ""
"axis.L.jog-accel-fraction\n"
"joint.N.jog-accel-fraction\n"
"---\n"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1207
#, no-wrap
msgid "HAL pins"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1210
msgid "Name changes:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1214
#, no-wrap
msgid ""
"was: axis.L.vel-cmd\n"
"is:  axis.l.teleop-vel-cmd\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1217
msgid "New pins:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1220
#, no-wrap
msgid "motion.homing-inhibit (see motion manpage)\n"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1222
#, no-wrap
msgid "HAL component updates"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1225
msgid "siggen: new pin 'reset' to set output signal values to predefined state"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1226
msgid "biquad: pins 'type,f0,Q,s1,s2' were formerly params"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1227
msgid "userkins: template for user-built kinematics modules using halcompile"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1228
#, no-wrap
msgid "XHC-HB04 Pendant Support"
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:1230
#, no-wrap
msgid "xhc_hb04_util.comp (helper component)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1233
msgid "Remove unused pin 'jogenable-off'."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1238
msgid ""
"Add pin 'amux-enable' so that the multiplexed acceleration reductions are "
"now enabled by the ANDing the pins: 'is-manual' and 'amux-enable'.  These "
"two pins are typically connected to 'halui.mode.is-manual' and 'halui.mode."
"is-teleop' respectively."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:1239
#, no-wrap
msgid "xhc_hb04.tcl (optional LIB configuration HAL file)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1242
msgid ""
"Remove signal pendant:jogenable-off for removed pin 'pendant_util.jogenable-"
"off'."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1248
msgid ""
"Support new motion pins for reduced accelerations (axis._L_.jog-accel-"
"fraction, joint._N_.jog-accel-fraction) for wheel jogging.  The use of "
"[APPLICATIONS]APP=xhc-hb04-accels is no longer supported.  Reduced accels "
"are applied for wheel jogging only (not for nml commands issued by GUIs)."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1249
#, no-wrap
msgid "XHC-WHB04B-6 pendant support"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1252
msgid "See the documentation for the xhc-whb04b-6 component."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1253
#, no-wrap
msgid "bldc3_hall"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1257
msgid ""
"The bldc_hall3 component has been removed. The *bldc* component is more "
"flexible and better tested."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1258
#, no-wrap
msgid "[JOINT_n]HOME_SEQUENCE Starting values"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1262
msgid ""
"Starting sequence values may be 0, 1 (or -1) only.  See the \"Homing "
"Configuration\" documentation for more information."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1263
#, no-wrap
msgid "[JOINT_n]HOME_SEQUENCE Negative values"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1269
msgid ""
"Joints using a negative HOME_SEQUENCE are not allowed to jog in joint mode "
"in order to prevent misalignment (racking) in common gantry configurations.  "
"As always, machines with any kinematics type must be homed prior to enabling "
"conventional world mode jogging."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1270
#, no-wrap
msgid "TWOPASS support for complex loadrt config= items"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1274
msgid ""
"Added twopass support for loadrt config modparams with multiple settings "
"separated by blanks and enclosed with quotes.  Example:"
msgstr ""

#. type: delimited block -
#: src/getting-started/updating-linuxcnc.adoc:1278
#, no-wrap
msgid "loadrt hm2_eth board_ip=10.10.10.10 config=\"num_encoders=2 num_pwmgens=2 num_stepgens=3\"\n"
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:1280
#, no-wrap
msgid "Changes beyond 2.8.x (master branch development)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1284
msgid ""
"The master branch is version-tagged with prerelease notation, typically "
"2.9~pre*"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1285
#, no-wrap
msgid "Python3 and GTK3"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1288
msgid ""
"2.9 changed to Python3 and GTK3. This only affects you if you have custom "
"glade or Python handlers in your config."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1290
msgid "Run py3clean in your config directory to remove any temporary files."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1291
msgid ""
"Run py3clean in your LinuxCNC source directory if you compile from source."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1292
msgid "Run 2to3 -w on any .py files you have written."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1293
msgid ""
"Make sure the interpreter in the first line of the script is Python 3, not "
"Python 2."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1294
msgid ""
"Open the ui file in glade, and save it. It should convert everything that "
"can be converted automatically, and give you warnings."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1295
#, no-wrap
msgid "LinuxCNC Startup"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1301
msgid ""
"The main script, *linuxcnc*, supports a new option (-H dirname) to specify "
"an additional user-specified directory for HAL files.  This directory is "
"searched before the usual search of 1) the INI directory and 2)the system "
"HAL file library directory."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1302
#, no-wrap
msgid "G-code changes"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1305
msgid ""
"G43.2 (additional offsets) now accepts transient offsets to be added by axis "
"words as well as from the tool table."
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1306
#, no-wrap
msgid "Configuration Updates"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1308
#: src/tooldatabase/tooldatabase.adoc:24
#, no-wrap
msgid "INI file Settings"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1313
msgid ""
"New: [JOINT_n]HOME_INDEX_NO_ENCODER_RESET -- support encoder with index that "
"does not reset upon receipt of index pulse following assertion of "
"index_enable."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1315
msgid "axis.py default for [DISPLAY]GEOMETRY was:\"XYZBCUVW\",is:\"XYZABCUVW\""
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1316
#, no-wrap
msgid "Code Updates"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1322
msgid ""
"Management of the internal storage of tool data and the communication of "
"same between EMCIO and TASK has been refactored to use memory mapped "
"storage.  Legacy use of nml messages for tooldata is deprecated and may be "
"removed before a new release."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1329
msgid ""
"Code references to the sequential indexes for internal tooldata have been "
"clarified but legacy variable names persist for *selected_pocket* and "
"*current_pocket*.  Variables with these names refer to the sequential index "
"for internal tooldata not an actual pocket number.  These variable names may "
"be renamed in the future and require changes to user-fielded Python remap "
"applications that modify tool handling."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1332
msgid ""
"A new optional interface is provided to support management of tool data by "
"an external database application."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1336
msgid ""
"The ioControl_v2.cc file providing the userspace program iov2 has no "
"maintainter and its use is deprecated -- it may be removed before the next "
"release."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:1337
#, no-wrap
msgid "Reverse Run"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1341
msgid ""
"Support added for reverse run in the trajectory planner, the task, and "
"motion modules, the Python interface, the AXIS GUI, and the test suite."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:1342
#, no-wrap
msgid "Number of Joints"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1346
msgid ""
"The maximum number of joints (EMCMOT_MAX_JOINTS) increased from 9 to 16.  "
"The AXIS GUI now supports display of up to 16 joints."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:1347
#, no-wrap
msgid "Extra Joints"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1355
msgid ""
"A new motmod parameter (num_extrajoints) specifies joints that are homed by "
"conventional joint homing methods but controlled by new HAL pins (joint._N_."
"posthome-cmd) after homing.  Such joints may be managed by independent "
"motion planner/controllers in HAL and manipulated from G-code using custom M-"
"codes.  See the motion man page for more info."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1361
msgid ""
"A homing api is provided by src/emc/motion/homing.h to support users' custom "
"homing code that replaces src/emc/motion/homing.c with a user-customized "
"homing.c file."
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: src/getting-started/updating-linuxcnc.adoc:1362 html/gcode.html:56
#, no-wrap
msgid "Motion"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1368
msgid ""
"The motion module supports kinematics modules that define new functions "
"kinematicsSwitchable() and kinematicsSwitch() to switch their kinematics "
"type.  A HAL pin, motion.switchkins-type, is provided for use of such "
"kinematics modules."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1374
msgid ""
"Provided kinematics modules that implement kinematics switching use the "
"switchkins.o object to supply the required rtapi_main()  and related "
"functions.  Kinematics modules that do not support kinematics switching use "
"the macro \"KINS_NOT_SWITCHABLE\" provided by kinematics.h."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:1375
#, no-wrap
msgid "Switchkins Kinematics Modules"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1379
msgid ""
"Several kinematics modules are now switchable between their eponymous "
"kinematics and an alternate identity kinematics mode."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1381
msgid "Kinematic modules supporting switchkins:"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1383
msgid "xyzac-trt-kins table-rotary-tilting (supersedes xyzac-trt-kins)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1384
msgid "xyzbc-trt-kins table-rotary-tilting (supersedes xyzbc-trt-kins)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1385
#, no-wrap
msgid "genserkins     generalized serial-link kinematics\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1386
#, no-wrap
msgid "genhexkins     generalized hexapod parallel kinematics\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1387
#, no-wrap
msgid "scarakins      scara robot\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1388
#, no-wrap
msgid "pumakins       puma robot\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1389
#, no-wrap
msgid "5axiskins      bridgemill (xyzbcw 6axes)\n"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1394
msgid ""
"The switchkins modules above (and trivkins) support a coordinates= parameter "
"that optionally specifies an ordered set of coordinate letters that are "
"sequentially assigned to joint numbers (beginning with joint0)."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1399
msgid ""
"The switchkins modules above include provisions for compile-time support of "
"an additional user-specified kinematics type identified on the make command "
"line by the userkfuncs environmental variable.  (See src/Makefile)"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1406
msgid ""
"The userspace test program bin/genserkins has been isolated to a single file "
"(ugenserkins.c) since its original source file (genserkins.c) has been "
"refactored for switchkins support.  The userspace test program has not been "
"actively maintained and its use is deprecated.  The ugenserkins.c file may "
"be removed in the future."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:1407
#, no-wrap
msgid "Trajectory Planner"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1414
msgid ""
"The trajectory planner is now implemented as a loadable module (default:"
"tpmod).  An alternate (user-built) planner can be loaded using INI setting "
"[TRAJ]TPMOD= modulename or the 'linuxcnc -t modulename' option.  The example "
"file src/hal/components/tpcomp.com illustrates a method for creating a "
"module using halcompile."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1422
msgid ""
"Homing functions are now implemented by a loadable module (default:"
"homemod).  An alternate (user-built) planner can be loaded using INI setting "
"[EMCMOT]HOMEMOD=modulename or the 'linuxcnc -m modulename' option.  The "
"example file src/hal/components/homecomp.comp is a minimal example of a "
"homing module that can be built with halcompile."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:1423
#, no-wrap
msgid "Other"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1427
msgid ""
"lib/hallib/sim_lib.tcl: simulate encoder index if [JOINT_n]HOME_USE_INDEX is "
"specified."
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1429
msgid "lib/python/vismach.py: new HAL pin vismach.plotclear"
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:1432 src/hal/components.adoc:7
#: src/ladder/classic-ladder.adoc:47
#, no-wrap
msgid "Components"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1435
msgid "sim_home_switch: added I/O pin for index-enable"
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:1436
#, no-wrap
msgid "Motion module pins"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1439
msgid "motion.feed-upm -- current feed in units per minute"
msgstr ""

#. type: Title ===
#: src/getting-started/updating-linuxcnc.adoc:1440
#, no-wrap
msgid "Configs"
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:1442
#, no-wrap
msgid "INI file"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1446
msgid ""
"[DISPLAY]GEOMETRY settings that include the '!' character specify that "
"displayed rotations respect G5x,G92 offsets."
msgstr ""

#. type: Title ====
#: src/getting-started/updating-linuxcnc.adoc:1447
#, no-wrap
msgid "Simulation Configs"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1450
msgid "sim/configs/axis/axis_9axis: demonstrate simulated encoder index"
msgstr ""

#. type: Title ==
#: src/getting-started/updating-linuxcnc.adoc:1451
#, no-wrap
msgid "Changes after 2.8.x"
msgstr ""

#. type: Plain text
#: src/getting-started/updating-linuxcnc.adoc:1455
msgid ""
"Future versions of this document will take into account changes made to the "
"development branch after the latest 2.8.x release."
msgstr ""

#. type: Title =
#: src/gui/axis.adoc:5
#, no-wrap
msgid "AXIS GUI(((AXIS GUI)))"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:18
msgid ""
"AXIS is a graphical front-end for LinuxCNC which features a live preview and "
"backplot. It is written in Python and uses Tk and OpenGL to display its user "
"interface."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:20
#, no-wrap
msgid "The AXIS Window"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/axis.adoc:21
#, no-wrap
msgid "AXIS main window"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:21
#, no-wrap
msgid "images/axis.png"
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:23 src/gui/mdro.adoc:28 src/gui/qtdragon.adoc:52
#: src/gui/tklinuxcnc.adoc:26
#, no-wrap
msgid "Getting Started"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:28
msgid ""
"If your configuration is not currently set up to use AXIS, you can change it "
"by editing the .ini file (INI file). In the section `[DISPLAY]` change the "
"`[DISPLAY]` line to read `DISPLAY = axis`."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:30
msgid ""
"The sample configuration 'sim/axis.ini' is already configured to use AXIS as "
"its front-end."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:33
msgid ""
"When AXIS starts, a window like the one in the figure <<fig:axis-window>> "
"above opens."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:39
msgid ""
"For more information on INI file settings that can change how AXIS works see "
"the <<sub:ini:sec:display,Display Section>> of the INI Configuration Chapter."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:44
#, no-wrap
msgid ""
"'CYCLE_TIME' - Adjust the response rate of the GUI in milliseconds. Typical 100, useable range 50 - 200\n"
"(will accept time in seconds (.05 -.2) for legacy reasons - milliseconds preferred to match other screens)."
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:49
#, no-wrap
msgid ""
"[DISPLAY]\n"
"CYCLE_TIME = 100\n"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:56
msgid ""
"'PREVIEW_TIMEOUT' - Set timeout in seconds for loading G-code preview.  If "
"parsing the G-code lasts longer than this, a notice is shown and only the "
"initial part of the program is drawn in the graphical display. Specifying 0 "
"or leaving the setting out results in no timeout."
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:61
#, no-wrap
msgid ""
"[DISPLAY]\n"
"PREVIEW_TIMEOUT = 5\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:63
#, no-wrap
msgid "A Typical Session"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:66
msgid "Launch LinuxCNC and select a configuration file."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:67
msgid "Release the E-STOP button (F1) and turn the Machine Power on (F2)."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:68
msgid "Home all axes."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:69
msgid "Load the G-code file."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:70
msgid "Use the preview plot to verify that the program is correct."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:71
msgid "Load the material."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:73
msgid ""
"Set the proper offset for each axis by jogging and using the `Touch Off` "
"button as needed."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:74 src/gui/tklinuxcnc.adoc:56
msgid "Run the program."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:76
msgid ""
"To machine the same file again, return to step 6.  To machine a different "
"file, return to step 4."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:77
msgid "When the job is complete, exit AXIS."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:84
msgid ""
"To run the same program again depends on your setup and requirements.  You "
"might need to load more material and set offsets or move over and set an "
"offset then run the program again. If your material is fixtured then you "
"might need to only run the program again. See the <<sub:axis-machine-menu,"
"Machine Menu>> for more information on the run command."
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:85
#, no-wrap
msgid "AXIS Window"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:88
msgid "The AXIS window contains the following elements:"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:90
msgid "A display area that shows one of the following:"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:94
msgid ""
"A preview of the loaded file (in this case, 'axis.ngc'), as well as the "
"current location of the CNC machine's 'controlled point'. Later, this area "
"will display the path the CNC machine has moved through, called the "
"'backplot'."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:95
msgid "A large readout showing the current position and all offsets."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:96
msgid "A menu bar and toolbar that allow you to perform various actions"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:99
msgid ""
"'Manual Control Tab' - which allows you to make the machine move, turn the "
"spindle on or off, and turn the coolant on or off if included in the INI "
"file."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:102
msgid ""
"'MDI Tab' - where G-code programs can be entered manually, one line at a "
"time. This also shows the 'Active G-codes' which shows which modal G-codes "
"are in effect."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:106
msgid ""
"'Feed Override' - which allows you to scale the speed of programmed "
"motions.  The default maximum is 120% and can be set to a different value in "
"the INI file. See the <<sub:ini:sec:display,Display Section>> of the INI "
"file for more information."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:107
msgid ""
"'Spindle Override' - which allows you to scale the spindle speed up or down."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:109
msgid ""
"'Jog Speed' - which allows you to set the jog speed within the limits set in "
"the INI file.  See the <<sub:ini:sec:display,Display Section>> of the INI "
"file for more information."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:111
msgid ""
"'Max Velocity' - which allows you to restrict the maximum velocity of all "
"programmed motions (except spindle synchronized motion)."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:112
msgid "A text display area that shows the loaded G-code."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:116
msgid ""
"A status bar which shows the state of the machine. In this screen shot, the "
"machine is turned on, does not have a tool inserted, and the displayed "
"position is 'Relative' (showing all offsets), and 'Actual' (showing feedback "
"position)."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:117
#, no-wrap
msgid "Menu Items"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:122
msgid ""
"Some menu items might be grayed out depending on how you have your INI file "
"configured. For more information on configuration see the <<cha:ini-"
"configuration,INI Chapter>>."
msgstr ""

#. type: Title ====
#: src/gui/axis.adoc:123
#, no-wrap
msgid "File Menu"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:129
msgid ""
"'Open...' - Opens a standard dialog box to open a G-code file to load in "
"AXIS. If you have configured LinuxCNC to use a filter program you can also "
"open it up. See the <<sub:ini:sec:filter,FILTER Section>> of the INI "
"configuration for more information."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:130
msgid "'Recent Files' - Displays a list of recently opened files."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:133
msgid ""
"'Edit...' - Open the current G-code file for editing if you have an editor "
"configured in your INI file. See the <<sub:ini:sec:display,DISPLAY Section>> "
"for more information on specifying an editor to use."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:137
msgid ""
"'Reload' - Reload the current G-code file. If you edited it you must reload "
"it for the changes to take affect. If you stop a file and want to start from "
"the beginning then reload the file. The toolbar reload is the same as the "
"menu."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:138
msgid "'Save G-code as...' - Save the current file with a new name."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:141
msgid ""
"'Properties' - The sum of the rapid and feed moves. Does not factor in "
"acceleration, blending or path mode so time reported will never be less than "
"the actual run time."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:143
msgid ""
"'Edit tool table...' - Same as Edit if you have defined an editor you can "
"open the tool table and edit it."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:144
msgid "'Reload tool table' - After editing the tool table you must reload it."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:146
msgid ""
"'Ladder editor' - If you have loaded ClassicLadder you can edit it from "
"here. See the <<cha:classicladder,ClassicLadder chapter>> for more "
"information."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:147
msgid "'Quit' - Terminates the current LinuxCNC session."
msgstr ""

#. type: Title ====
#: src/gui/axis.adoc:149
#, no-wrap
msgid "Machine Menu"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:152
msgid "'Toggle Emergency Stop F1' - Change the state of the Emergency Stop."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:153
msgid ""
"'Toggle Machine Power F2' - Change the state of the Machine Power if the "
"Emergency Stop is not on."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:154
msgid "'Run Program' - Run the currently loaded program from the beginning."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:157
msgid ""
"'Run From Selected Line' - Select the line you want to start from first.  "
"Use with caution as this will move the tool to the expected position before "
"the line first then it will execute the rest of the code."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:160
msgid ""
"Do not use 'Run From Selected Line' if your G-code program contains "
"subroutines."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:162
msgid "'Step' - Single step through a program."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:163
msgid "'Pause' - Pause a program."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:164
msgid "'Resume' - Resume running from a pause."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:165
msgid ""
"'Stop' - Stop a running program. When run is selected after a stop the "
"program will start from the beginning."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:166
msgid ""
"'Stop at M1' - If an M1 is reached, and this is checked, program execution "
"will stop on the M1 line. Press Resume to continue."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:167
msgid ""
"'Skip lines with \"/\"' - If a line begins with '/' and this is checked, the "
"line will be skipped."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:168
msgid "'Clear MDI history' - Clears the MDI history window."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:169
msgid "'Copy from MDI history' - Copies the MDI history to the clipboard"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:170
msgid ""
"'Paste to MDI history' - Paste from the clipboard to the MDI history window"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:174
msgid ""
"'Calibration' - Starts the Calibration assistant (emccalib.tcl).  "
"Calibration reads the HAL file and for every 'setp' that uses a variable "
"from the INI file that is in an [AXIS_L],[JOINT_N],[SPINDLE_S], or [TUNE] "
"section it creates an entry that can be edited and tested."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:176
msgid ""
"'Show HAL Configuration' - Opens the HAL Configuration window where you can "
"monitor HAL Components, Pins, Parameters, Signals, Functions, and Threads."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:177
msgid ""
"'HAL Meter' - Opens a window where you can monitor a single HAL Pin, Signal, "
"or Parameter."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:178
msgid ""
"'HAL Scope' - Opens a virtual oscilloscope that allows plotting HAL values "
"vs. time."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:179
msgid "'Show LinuxCNC Status' - Opens a window showing LinuxCNC's status."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:180
msgid ""
"'Set Debug Level' - Opens a window where debug levels can be viewed and some "
"can be set."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:181
msgid "'Homing' - Home one or all axes."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:182
msgid "'Unhoming' - Unhome one or all axes."
msgstr ""

#. [[sub:axis:tool-touch-off]]
#. type: Plain text
#: src/gui/axis.adoc:183
msgid ""
"'Zero Coordinate System' - Set all offsets to zero in the coordinate system "
"chosen."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:185
msgid "Tool Touch Off(((AXIS, Tool Touch Off)))"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:190
msgid ""
"'Tool touch off to workpiece' - When performing Touch Off, the value entered "
"is relative to the current workpiece ('G5x') coordinate system, as modified "
"by the axis offset ('G92').  When the Touch Off is complete, the Relative "
"coordinate for the chosen axis will become the value entered.  See <<gcode:"
"g10-l10,G10 L10>> in the G-code chapter."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:196
msgid ""
"'Tool touch off to fixture' - When performing Touch Off, the value entered "
"is relative to the ninth ('G59.3') coordinate system, with the axis offset "
"('G92') ignored.  This is useful when there is a tool touch-off fixture at a "
"fixed location on the machine, with the ninth ('G59.3') coordinate system "
"set such that the tip of a zero-length tool is at the fixture's origin when "
"the Relative coordinates are 0.  See <<gcode:g10-l11,G10 L11>> in the G-code "
"chapter."
msgstr ""

#. type: Title ====
#: src/gui/axis.adoc:197
#, no-wrap
msgid "View Menu"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:201
msgid ""
"'Top View' - The Top View (or Z view) displays the G-code looking along the "
"Z axis from positive to negative. This view is best for looking at X & Y."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:205
msgid ""
"'Rotated Top View' - The Rotated Top View (or rotated Z view) also displays "
"the G-code looking along the Z axis from positive to negative. But sometimes "
"it's convenient to display the X & Y axes rotated 90 degrees to fit the "
"display better. This view is also best for looking at X & Y."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:207
msgid ""
"'Side View' - The Side View (or X view) displays the G-code looking along "
"the X axis from positive to negative. This view is best for looking at Y & Z."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:209
msgid ""
"'Front View' - The Front View (or Y view) displays the G-code looking along "
"the Y axis from negative to positive. This view is best for looking at X & Z."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:216
msgid ""
"'Perspective View' - The Perspective View (or P view) displays the G-code "
"looking at the part from an adjustable point of view, defaulting to X+, Y-, Z"
"+. The position is adjustable using the mouse and the drag/rotate selector.  "
"This view is a compromise view, and while it does do a good job of trying to "
"show three (to nine!) axes on a two-dimensional display, there will often be "
"some feature that is hard to see, requiring a change in viewpoint. This view "
"is best when you would like to see all three (to nine) axes at once."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:217
#, no-wrap
msgid "Point of View"
msgstr ""

#. type: delimited block *
#: src/gui/axis.adoc:224
msgid ""
"The AXIS display pick menu 'View' refers to 'Top', 'Front', and 'Side' "
"views.  These terms are correct if the CNC machine has its Z axis vertical, "
"with positive Z up. This is true for vertical mills, which is probably the "
"most popular application, and also true for almost all EDM machines, and "
"even vertical turret lathes, where the part is turning below the tool."
msgstr ""

#. type: delimited block *
#: src/gui/axis.adoc:230
msgid ""
"The terms 'Top', 'Front', and 'Side' might be confusing in other CNC "
"machines, such as a standard lathe, where the Z axis is horizontal, or a "
"horizontal mill, again where the Z axis is horizontal, or even an inverted "
"vertical turret lathe, where the part is turning above the tool, and the Z "
"axis positive direction is down!"
msgstr ""

#. type: delimited block *
#: src/gui/axis.adoc:233
msgid ""
"Just remember that positive Z axis is (almost) always away from the part.  "
"So be familiar with your machine's design and interpret the display as "
"needed."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:236
msgid "'Display Inches' - Set the AXIS display scaling for inches."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:237
msgid "'Display MM' - Set the AXIS display scaling for millimeters."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:238
msgid ""
"'Show Program' - The preview display of the loaded G-code program can be "
"entirely disabled if desired."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:241
msgid ""
"'Show Program Rapids' - The preview display of the loaded G-code program "
"will always show the feed rate moves (G1,G2,G3) in white.  But the display "
"of rapid moves (G0) in cyan can be disabled if desired."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:243
msgid ""
"'Alpha-blend Program' - This option makes the preview of complex programs "
"easier to see, but may cause the preview to display more slowly."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:244
msgid ""
"'Show Live Plot' - The highlighting of the feedrate paths (G1,G2,G3) as the "
"tool moves can be disabled if desired."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:245
msgid ""
"'Show Tool' - The display of the tool cone/cylinder can be disabled if "
"desired."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:246
msgid ""
"'Show Extents' - The display of the extents (maximum travel in each axis "
"direction) of the loaded G-code program can be disabled if desired."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:249
msgid ""
"'Show Offsets' - The selected fixture offset (G54-G59.3) origin location can "
"be shown as a set of three orthogonal lines, one each of red, blue, and "
"green.  This offset origin (or fixture zero) display can be disabled if "
"desired."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:254
msgid ""
"'Show Machine Limits' - The machine's maximum travel limits for each axis, "
"as set in the INI file, are shown as a rectangular box drawn in red dashed "
"lines. This is useful when loading a new G-code program, or when checking "
"for how much fixture offset would be needed to bring the G-code program "
"within the travel limits of your machine. It can be shut off if not needed."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:256
msgid ""
"'Show Velocity' - A display of velocity is sometimes useful to see how close "
"your machine is running to its design velocities. It can be disabled if "
"desired."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:260
msgid ""
"'Show Distance to Go' - Distance to go is a very handy item to know when "
"running an unknown G-code program for the first time. In combination with "
"the rapid override and feedrate override controls, unwanted tool and machine "
"damage can be avoided.  Once the G-code program has been debugged and is "
"running smoothly, the Distance to Go display can be disabled if desired."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:262
msgid ""
"'Coordinates in large font...' - The coordinates of the axes and the speed "
"in advance, will display in large font in the toolpath view."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:265
msgid ""
"'Clear Live Plot' - As the tool travels in the AXIS display, the G-code path "
"is highlighted.  To repeat the program, or to better see an area of "
"interest, the previously highlighted paths can be cleared."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:267
msgid ""
"'Show Commanded Position' - This is the position that LinuxCNC will try to "
"go to. Once motion has stopped, this is the position LinuxCNC will try to "
"hold."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:271
msgid ""
"'Show Actual Position' - Actual Position is the measured position as read "
"back from the system's encoders or simulated by step generators. This may "
"differ slightly from the Commanded Position for many reasons including PID "
"tuning, physical constraints, or position quantization."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:272
msgid ""
"'Show Machine Position' - This is the position in unoffset coordinates, as "
"established by Homing."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:273
msgid ""
"'Show Relative Position' - This is the Machine Position modified by 'G5x', "
"'G92', and 'G43' offsets."
msgstr ""

#. type: Title ====
#: src/gui/axis.adoc:274
#, no-wrap
msgid "Help Menu"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:277
msgid "'About AXIS' - We all know what this is."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:278
msgid "'Quick Reference' - Shows the keyboard shortcut keys."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:279
#, no-wrap
msgid "Toolbar buttons"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:282
msgid ""
"From left to right in the AXIS display, the toolbar buttons (keyboard "
"shortcuts shown [in brackets]) are:"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:284
msgid ""
"image:images/tool_estop.png[\"Toggle Emergency Stop\"] Toggle Emergency Stop "
"[F1] (also called E-Stop)"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:285
msgid ""
"image:images/tool_power.png[\"Toggle Machine Power\"] Toggle Machine Power "
"[F2]"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:286
msgid "image:images/tool_open.png[\"Open G Code file\"] Open G Code file [O]"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:287
msgid ""
"image:images/tool_reload.png[\"Reload current file\"] Reload current file "
"[Ctrl-R]"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:288
msgid ""
"image:images/tool_run.png[\"Begin executing the current file\"] Begin "
"executing the current file [R]"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:289
msgid "image:images/tool_step.png[\"Execute next line\"] Execute next line [T]"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:290
msgid ""
"image:images/tool_pause.png[\"Pause Execution - Resume Execution\"] Pause "
"Execution [P] Resume Execution [S]"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:291
msgid ""
"image:images/tool_stop.png[\"Stop Program Execution\"] Stop Program "
"Execution [ESC]"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:292
msgid ""
"image:images/tool_blockdelete.png[\"Toggle Skip lines\"] Toggle Skip lines "
"with \"/\" [Alt-M-/]"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:293
msgid ""
"image:images/tool_optpause.png[\"Toggle Optional Pause\"] Toggle Optional "
"Pause [Alt-M-1]"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:294
msgid "image:images/tool_zoomin.png[\"Zoom In\"] Zoom In"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:295
msgid "image:images/tool_zoomout.png[\"Zoom Out\"] Zoom Out"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:296
msgid "image:images/tool_axis_z.png[\"Top view\"] Top view"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:297
msgid "image:images/tool_axis_z2.png[\"Rotated Top view\"] Rotated Top view"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:298
msgid "image:images/tool_axis_x.png[\"Side view\"] Side view"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:299
msgid "image:images/tool_axis_y.png[\"Front view\"] Front view"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:300
msgid "image:images/tool_axis_p.png[\"Perspective view\"] Perspective view"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:301
msgid ""
"image:images/tool_rotate.png[\"Toggle between Drag and Rotate Mode\"] Toggle "
"between Drag and Rotate Mode [D]"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:302
msgid ""
"image:images/tool_clear.png[\"Clear live backplot\"] Clear live backplot "
"[Ctrl-K]"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:303
#, no-wrap
msgid "Graphical Display Area"
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:305
#, no-wrap
msgid "Coordinate Display"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:309
msgid ""
"In the upper-left corner of the program display is the coordinate position "
"display for each axis. To the right of the number an origin symbol image:"
"images/axis-homed.png[\"origin symbol is shown if the axis has been homed\"] "
"is shown if the axis has been homed."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:312
msgid ""
"A limit symbol image:images/axis-limit.png[\"limit symbol\"] is shown on the "
"right side of the coordinate position number if the axis is on one of its "
"limit switches."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:320
msgid ""
"To properly interpret the coordinate position numbers, refer to the "
"'Position:' indicator in the status bar. If the position is 'Machine "
"Actual', then the displayed number is in the machine coordinate system. If "
"it is 'Relative Actual', then the displayed number is in the offset "
"coordinate system. When the coordinates displayed are relative and an offset "
"has been set, the display will include a cyan <<sec:machine-coordinate-"
"system,'machine origin'>> image:images/axis-machineorigin.png[\"cyan machine "
"origin\"] marker."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:328
msgid ""
"If the position is 'Commanded', then the exact coordinate given in a G-code "
"command is displayed. If it is 'Actual', then it is the position the machine "
"has actually moved to. These values can be different from commanded position "
"due to following error, dead band, encoder resolution, or step size. For "
"instance, if you command a movement to X 0.0033 on your mill, but one step "
"of your stepper motor or one encoder count is 0.00125, then the 'Commanded' "
"position might be 0.0033, but the 'Actual' position will be 0.0025 (2 steps) "
"or 0.00375 (3 steps)."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:329
#, no-wrap
msgid "Preview Plot"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:338
msgid ""
"When a file is loaded, a preview of it is shown in the display area.  Fast "
"moves (such as those produced by the 'G0' command) are shown as cyan lines. "
"Moves at a feed rate (such as those produced by the 'G1' command) are shown "
"as solid white lines. Dwells (such as those produced by the 'G4' command)  "
"are shown as small pink 'X' marks."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:345
msgid ""
"G0 (Rapid) moves prior to a feed move will not show on the preview plot.  "
"Rapid moves after a T<n> (Tool Change) will not show on the preview until "
"after the first feed move.  To turn either of these features off program a "
"G1 without any moves prior to the G0 moves."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:346
#, no-wrap
msgid "Program Extents"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:350
msgid ""
"The 'extents' of the program in each axis are shown.  At the ends, the least "
"and greatest coordinate values are indicated.  In the middle, the difference "
"between the coordinates is shown."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:360
msgid ""
"When some coordinates exceed the 'soft limits' in the INI file, the relevant "
"dimension is shown in a different color and enclosed by a box.  In figure "
"below the maximum soft limit is exceeded on the X axis as indicated by the "
"box surrounding the coordinate value.  The minimum X travel of the program "
"is -1.95, the maximum X travel is 1.88, and the program requires 3.83 inches "
"of X travel.  To move the program so it's within the machine's travel in "
"this case, jog to the left and Touch Off X again."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:362
#, no-wrap
msgid "Soft Limits(((Soft Limits)))"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:363 src/motion/external-offsets.adoc:109
#, no-wrap
msgid "Soft Limits"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:363
#, no-wrap
msgid "images/axis-outofrange.png"
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:365
#, no-wrap
msgid "Tool Cone"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:369
msgid ""
"When no tool is loaded, the location of the tip of the tool is indicated by "
"the 'tool cone'.  The 'tool cone' does not provide guidance on the form, "
"length, or radius of the tool."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:373
msgid ""
"When a tool is loaded (for instance, with the MDI command 'T1 M6' ), the "
"cone changes to a cylinder which shows the diameter of the tool given in the "
"tool table file."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:374 src/gui/tklinuxcnc.adoc:127
#, no-wrap
msgid "Backplot"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:380
msgid ""
"When the machine moves, it leaves a trail called the backplot.  The color of "
"the line indicates the type of motion: Yellow for jogs, faint green for "
"rapid movements, red for straight moves at a feed rate, and magenta for "
"circular moves at a feed rate."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:381
#, no-wrap
msgid "Grid"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:388
msgid ""
"AXIS can optionally display a grid when in orthogonal views.  Enable or "
"disable the grid using the 'Grid' menu under 'View'.  When enabled, the grid "
"is shown in the top and rotated top views; when coordinate system is not "
"rotated, the grid is shown in the front and side views as well.  The presets "
"in the 'Grid' menu are controlled by the INI file item `[DISPLAY]GRIDS`.  If "
"unspecified, the default is `10mm 20mm 50mm 100mm 1in 2in 5in 10in`."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:390
msgid "Specifying a very small grid may decrease performance."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:391
#, no-wrap
msgid "Interacting"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:394
msgid ""
"By left-clicking on a portion of the preview plot, the line will be "
"highlighted in both the graphical and text displays.  By left-clicking on an "
"empty area, the highlighting will be removed."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:397
msgid ""
"By dragging with the left mouse button pressed, the preview plot will be "
"shifted (panned)."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:405
msgid ""
"By dragging with shift and the left mouse button pressed, or by dragging "
"with the mouse wheel pressed, the preview plot will be rotated.  When a line "
"is highlighted, the center of rotation is the center of the line.  "
"Otherwise, the center of rotation is the center of the entire program."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:409
msgid ""
"By rotating the mouse wheel, or by dragging with the right mouse button "
"pressed, or by dragging with control and the left mouse button pressed, the "
"preview plot will be zoomed in or out."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:412
msgid ""
"By clicking one of the 'Preset View' icons, or by pressing 'V', several "
"preset views may be selected."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:413
#, no-wrap
msgid "Text Display Area"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:417
msgid ""
"By left-clicking a line of the program, the line will be highlighted in both "
"the graphical and text displays."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:421
msgid ""
"When the program is running, the line currently being executed is "
"highlighted in red. If no line has been selected by the user, the text "
"display will automatically scroll to show the current line."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/axis.adoc:422 src/gui/axis.adoc:423
#, no-wrap
msgid "Current and Selected Lines"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:423
#, no-wrap
msgid "images/axis-currentandselected.png"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:425 src/gui/tklinuxcnc.adoc:154
#, no-wrap
msgid "Manual Control"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:430
msgid ""
"While the machine is turned on but not running a program, the items in the "
"'Manual Control' tab can be used to move the machine or control its spindle "
"and coolant."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:433
msgid ""
"When the machine is not turned on, or when a program is running, the manual "
"controls are unavailable."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:441
msgid ""
"Many of the items described below are not useful on all machines.  When AXIS "
"detects that a particular pin is not connected in HAL, the corresponding "
"item in the Manual Control tab is removed.  For instance, if the HAL pin "
"'spindle.0.brake' is not connected, then the 'Brake' button will not appear "
"on the screen.  If the environment variable 'AXIS_NO_AUTOCONFIGURE' is set, "
"this behavior is disabled and all the items will appear."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:442
#, no-wrap
msgid "The Axis group"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:452
msgid ""
"'AXIS' allows you to manually move the machine.  This action is known as "
"'jogging'.  First, select the axis to be moved by clicking it.  Then, click "
"and hold the '+' or '-' button depending on the desired direction of "
"motion.  The first four axes can also be moved by the arrow keys (X and Y), "
"PAGE UP and PAGE DOWN keys (Z), and the [ and ] keys (A)."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:459
msgid ""
"If 'Continuous' is selected, the motion will continue as long as the button "
"or key is pressed.  If another value is selected, the machine will move "
"exactly the displayed distance each time the button is clicked or the key is "
"pressed.  By default, the available values are '0.1000, 0.0100, 0.0010, "
"0.0001'."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:462
msgid ""
"See the <<sub:ini:sec:display,DISPLAY Section>> for more information on "
"setting the increments."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:463
#, no-wrap
msgid "Homing (Identity Kinematics)"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:469
msgid ""
"The INI file setting [KINS]JOINTS defines the total number of joints for the "
"system.  A joint may be configured with a home switch or for 'immediate' "
"homing.  Joints may specify a home sequence that organizes the order for "
"homing groups of joints."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:476
msgid ""
"If *all* joints are configured for homing and have valid home sequences, the "
"homing button will show 'Home All'. Pressing the 'Home All' button (or the "
"Ctrl-HOME key) will initiate homing for all joints using their defined home "
"sequences. Pressing the HOME key will home the joint corresponding to the "
"currently selected axis even if no homing sequence is defined."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:481
msgid ""
"If not all axes have valid home sequences, the homing button will show 'Home "
"Axis' and will home the joint for the currently selected axis only.  Each "
"axis must be selected and homed separately."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:485
msgid ""
"The dropdown menu Machine/Homing provides an alternate method to home axes. "
"The dropdown menu Machine/Unhoming provides means to unhome axes."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:489
msgid ""
"If your machine does not have home switches defined in the configuration, "
"the 'Home' button will set the current position of the selected axis as the "
"absolute position 0 for that axis and will set the 'is-homed' bit for that "
"axis."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:491 src/gui/axis.adoc:500
msgid ""
"See the <<cha:homing-configuration,Homing Configuration Chapter>> for more "
"information."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:492
#, no-wrap
msgid "Homing (Non-Identity Kinematics)"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:498
msgid ""
"Operation is similar to that for Identity Kinematics but, prior to homing, "
"the selection radio buttons select joints by number. The homing button will "
"show 'Home All' if all joints are configured for homing and have valid home "
"sequences.  Otherwise, the homing button will show 'Home Joint'."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:502
#, no-wrap
msgid "Touch Off"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:508
msgid ""
"By pressing 'Touch Off' or the END key, the 'G5x offset' for the current "
"axis is changed so that the current axis value will be the specified value. "
"Expressions may be entered using the rules for rs274ngc programs, except "
"that variables may not be referred to. The resulting value is shown as a "
"number."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/axis.adoc:509 src/gui/axis.adoc:510
#, no-wrap
msgid "Touch Off Window"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:510
#, no-wrap
msgid "images/touchoff.png"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:513
msgid ""
"See also the Machine menu options: 'Touch part' and 'Touch part holder'."
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:514 src/lathe/lathe-user.adoc:97
#, no-wrap
msgid "Tool Touch Off"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:518
msgid ""
"By pressing the 'Tool Touch Off' button the tool length and offsets of the "
"currently loaded tool will be changed so that the current tool tip position "
"matches the entered coordinate."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/axis.adoc:519 src/gui/axis.adoc:520
#, no-wrap
msgid "Tool Touch Off Window"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:520
#, no-wrap
msgid "images/tooltouchoff.png"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:524
msgid ""
"See also the 'Tool touch off to workpiece' and 'Tool touch off to fixture' "
"options in the Machine menu."
msgstr ""

#. type: Table
#: src/gui/axis.adoc:525 src/plasma/qtplasmac.adoc:1223
#, no-wrap
msgid "Override Limits"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:533
msgid ""
"By pressing Override Limits, the machine will temporarily be allowed to jog "
"off of a physical limit switch. This check box is only available when a "
"limit switch is tripped.  The override is reset after one jog.  If the axis "
"is configured with separate positive and negative limit switches, LinuxCNC "
"will allow the jog only in the correct direction.  _Override Limits will not "
"allow a jog past a soft limit.  The only way to disable a soft limit on an "
"axis is to Unhome it._"
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:534
#, no-wrap
msgid "The Spindle group"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:544
msgid ""
"The buttons on the first row select the direction for the spindle to rotate: "
"Counterclockwise, Stopped, Clockwise. Counterclockwise will only show up if "
"the pin 'spindle.0.reverse' is in the HAL file (it can be 'net trick-axis "
"spindle.0.reverse' ). The buttons on the next row increase or decrease the "
"rotation speed. The checkbox on the third row allows the spindle brake to be "
"engaged or released. Depending on your machine configuration, not all the "
"items in this group may appear. Pressing the spindle start button sets the "
"'S' speed to 1."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:545
#, no-wrap
msgid "The Coolant group"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:548
msgid ""
"The two buttons allow the 'Mist' and 'Flood' coolants to be turned on and "
"off.  Depending on your machine configuration, not all the items in this "
"group may appear."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:554
msgid ""
"MDI allows G-code commands to be entered manually.  When the machine is not "
"turned on, or when a program is running, the MDI controls are unavailable."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:555
#, no-wrap
msgid "The MDI tab"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/axis.adoc:556
#, no-wrap
msgid "MDI tab"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:556
#, no-wrap
msgid "images/axis-mdi.png"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:559
msgid ""
"'History' - This shows MDI commands that have been typed earlier in this "
"session."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:561
msgid ""
"'MDI Command' - This allows you to enter a G-code command to be executed. "
"Execute the command by pressing Enter or by clicking 'Go'."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:565
msgid ""
"'Active G-codes' - This shows the 'modal codes' that are active in the "
"interpreter. For instance, 'G54' indicates that the 'G54 offset' is applied "
"to all coordinates that are entered. When in Auto the Active G-codes "
"represent the codes after any read ahead by the interpreter."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:566 src/gui/halui.adoc:113 src/gui/tklinuxcnc.adoc:223
#, no-wrap
msgid "Feed Override"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:571
msgid ""
"By moving this slider, the programmed feed rate can be modified. For "
"instance, if a program requests 'F60' and the slider is set to 120%, then "
"the resulting feed rate will be 72."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:578
msgid ""
"By moving this slider, the programmed spindle speed can be modified. For "
"instance, if a program requests S8000 and the slider is set to 80%, then the "
"resulting spindle speed will be 6400. This item only appears when the HAL "
"pin 'spindle.0.speed-out' is connected."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:579 src/gui/tklinuxcnc.adoc:216
#, no-wrap
msgid "Jog Speed"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:587
msgid ""
"By moving this slider, the speed of jogs can be modified. For instance, if "
"the slider is set to 1 in/min, then a .01 inch jog will complete in about .6 "
"seconds, or 1/100 of a minute. Near the left side (slow jogs) the values are "
"spaced closely together, while near the right side (fast jogs) they are "
"spaced much further apart, allowing a wide range of jog speeds with fine "
"control when it is most important."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:590
msgid ""
"On machines with a rotary axis, a second jog speed slider is shown.  This "
"slider sets the jog rate for the rotary axes (A, B and C)."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:591 src/gui/halui.adoc:155
#, no-wrap
msgid "Max Velocity"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:596
msgid ""
"By moving this slider, the maximum velocity can be set. This caps the "
"maximum velocity for all programmed moves except spindle-synchronized moves."
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:597 src/gui/tklinuxcnc.adoc:242
#, no-wrap
msgid "Keyboard Controls"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:603
msgid ""
"Almost all actions in AXIS can be accomplished with the keyboard. A full "
"list of keyboard shortcuts can be found in the AXIS Quick Reference, which "
"can be displayed by choosing Help > Quick Reference.  Many of the shortcuts "
"are unavailable when in MDI mode."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:604
#, no-wrap
msgid "Feed Override Keys"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:608
msgid ""
"For details on the Spanish keyboard layout please inspect the translated "
"documentation."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:615
msgid ""
"The Feed Override keys behave differently when in Manual Mode.  The keys "
"'12345678 will select an axis if it is programmed. If you have 3 axis then ' "
"will select axis 0, 1 will select axis 1, and 2 will select axis 2. The "
"remainder of the number keys will still set the Feed Override. When running "
"a program '1234567890 will set the Feed Override to 0% - 100%."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:617
msgid ""
"The most frequently used keyboard shortcuts are shown in the following table:"
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:619
#, no-wrap
msgid "Most Common Keyboard Shortcuts(((AXIS,Keyboard Shortcuts)))"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:622 src/gui/tklinuxcnc.adoc:254
#, no-wrap
msgid "Keystroke"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:622 src/gui/tklinuxcnc.adoc:255
#, no-wrap
msgid "Action Taken"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:623 src/gui/tklinuxcnc.adoc:255
#: src/plasma/qtplasmac.adoc:2495
#, no-wrap
msgid "F1"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:623 src/gui/tklinuxcnc.adoc:256
#, no-wrap
msgid "Toggle Emergency Stop"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:624 src/gui/axis.adoc:625 src/gui/axis.adoc:650
#: src/gui/axis.adoc:651
#, no-wrap
msgid "Any"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:624 src/gui/tklinuxcnc.adoc:256
#: src/plasma/qtplasmac.adoc:2496
#, no-wrap
msgid "F2"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:624 src/gui/tklinuxcnc.adoc:257
#, no-wrap
msgid "Turn machine on/off"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:625 src/gui/tklinuxcnc.adoc:257
#, no-wrap
msgid "`, 1 .. 9, 0"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:625 src/gui/tklinuxcnc.adoc:258
#, no-wrap
msgid "Set feed override from 0% to 100%"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:626
#, no-wrap
msgid "Varies"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:626 src/gui/tklinuxcnc.adoc:258
#, no-wrap
msgid "X, `"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:626 src/gui/tklinuxcnc.adoc:259
#, no-wrap
msgid "Activate first axis"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:627 src/gui/axis.adoc:628 src/gui/axis.adoc:629
#: src/gui/axis.adoc:630 src/gui/axis.adoc:631 src/gui/axis.adoc:632
#: src/gui/axis.adoc:633 src/gui/axis.adoc:634 src/gui/axis.adoc:635
#: src/gui/axis.adoc:636 src/gui/axis.adoc:637 src/gui/axis.adoc:638
#: src/gui/axis.adoc:639 src/gui/axis.adoc:640 src/gui/axis.adoc:641
#: src/gui/axis.adoc:647 src/gui/axis.adoc:648 src/gui/axis.adoc:649
#, no-wrap
msgid "Manual"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:627 src/gui/tklinuxcnc.adoc:259
#, no-wrap
msgid "Y, 1"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:627 src/gui/tklinuxcnc.adoc:260
#, no-wrap
msgid "Activate second axis"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:628 src/gui/tklinuxcnc.adoc:260
#, no-wrap
msgid "Z, 2"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:628 src/gui/tklinuxcnc.adoc:261
#, no-wrap
msgid "Activate third axis"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:629 src/gui/tklinuxcnc.adoc:261
#, no-wrap
msgid "A, 3"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:629 src/gui/tklinuxcnc.adoc:262
#, no-wrap
msgid "Activate fourth axis"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:630
#, no-wrap
msgid "Select jog increment"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:631
#, no-wrap
msgid "Continuous jog"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:632
#, no-wrap
msgid "Control-Home"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:632
#, no-wrap
msgid "Perform homing sequence"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:633
#, no-wrap
msgid "End"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:633
#, no-wrap
msgid "Touch off: Set G5x offset for active axis"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:634 src/gui/tklinuxcnc.adoc:263
#, no-wrap
msgid "Left, Right"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:634 src/gui/tklinuxcnc.adoc:264
#, no-wrap
msgid "Jog first axis"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:635 src/gui/tklinuxcnc.adoc:264
#, no-wrap
msgid "Up, Down"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:635 src/gui/tklinuxcnc.adoc:265
#, no-wrap
msgid "Jog second axis"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:636 src/gui/tklinuxcnc.adoc:265
#, no-wrap
msgid "Pg Up, Pg Dn"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:636 src/gui/tklinuxcnc.adoc:266
#, no-wrap
msgid "Jog third axis"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:637 src/gui/tklinuxcnc.adoc:266
#, no-wrap
msgid "[, ]"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:637 src/gui/tklinuxcnc.adoc:267
#, no-wrap
msgid "Jog fourth axis"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:638 src/plasma/qtplasmac.adoc:2511
#, no-wrap
msgid "O"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:638
#, no-wrap
msgid "Open File"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:639
#, no-wrap
msgid "Control-R"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:639
#, no-wrap
msgid "Reload File"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:640
#, no-wrap
msgid "Run file"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:641
#, no-wrap
msgid "Pause execution"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:642 src/gui/axis.adoc:643 src/gui/axis.adoc:644
#: src/ladder/classic-ladder.adoc:114
#, no-wrap
msgid "Auto"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:642
#, no-wrap
msgid "Resume Execution"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:643 src/gui/tklinuxcnc.adoc:267
#: src/plasma/qtplasmac.adoc:2494
#, no-wrap
msgid "ESC"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:643 src/gui/tklinuxcnc.adoc:268
#, no-wrap
msgid "Stop execution"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:644
#, no-wrap
msgid "Control-K"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:644
#, no-wrap
msgid "Clear backplot"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:645 src/gui/axis.adoc:646
#, no-wrap
msgid "Auto/Manual"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:645
#, no-wrap
msgid "Cycle among preset views"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:646
#, no-wrap
msgid "Shift-Left,Right"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:646
#, no-wrap
msgid "Rapid X Axis"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:647
#, no-wrap
msgid "Shift-Up,Down"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:647
#, no-wrap
msgid "Rapid Y Axis"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:648
#, no-wrap
msgid "Shift-PgUp, PgDn"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:648
#, no-wrap
msgid "Rapid Z Axis"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:649
#, no-wrap
msgid "@"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:649
#, no-wrap
msgid "Toggle Actual/Commanded"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:650 src/remap/remap.adoc:2141 src/remap/remap.adoc:2157
#: src/remap/remap.adoc:2173 src/remap/remap.adoc:2189
#: src/remap/remap.adoc:2205 src/remap/remap.adoc:2221
#: src/remap/remap.adoc:2237 src/remap/remap.adoc:2253
#: src/remap/remap.adoc:2269 src/remap/remap.adoc:2285
#: src/remap/remap.adoc:2308
#, no-wrap
msgid "#"
msgstr ""

#. type: Table
#: src/gui/axis.adoc:650
#, no-wrap
msgid "Toggle Relative/Machine"
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:653
#, no-wrap
msgid "Show LinuxCNC Status (linuxcnctop)"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:658
msgid ""
"AXIS includes a program called 'linuxcnctop' which shows some of the details "
"of LinuxCNC's state. You can run this program by invoking Machine > Show "
"LinuxCNC Status"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/axis.adoc:659 src/gui/axis.adoc:660
#, no-wrap
msgid "LinuxCNC Status Window"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:660
#, no-wrap
msgid "images/axis-emc-status.png"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:665
msgid ""
"The name of each item is shown in the left column. The current value is "
"shown in the right column. If the value has recently changed, it is shown on "
"a red background."
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:666
#, no-wrap
msgid "MDI interface"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:671
msgid ""
"AXIS includes a program called `mdi` which allows text-mode entry of MDI "
"commands to a running LinuxCNC session. You can run this program by opening "
"a terminal and typing:"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:674
#, no-wrap
msgid "mdi\n"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:679
msgid ""
"Once it is running, it displays the prompt 'MDI>'. When a blank line is "
"entered, the machine's current position is shown.  When a command is "
"entered, it is sent to LinuxCNC to be executed."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:681
msgid "This is a sample session of mdi:"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:691
#, no-wrap
msgid ""
"$ mdi\n"
"MDI>\n"
"(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n"
"MDI> G1 F5 X1\n"
"MDI>\n"
"(0.5928500000000374, 0.0, 0.0, 0.0, 0.0, 0.0)\n"
"MDI>\n"
"(1.0000000000000639, 0.0, 0.0, 0.0, 0.0, 0.0)\n"
msgstr ""

#. type: TH
#: src/gui/axis.adoc:693 man/man1/axis-remote.1:26
#, no-wrap
msgid "axis-remote"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:700
msgid ""
"AXIS includes a program called 'axis-remote' which can send certain commands "
"to a running AXIS. The available commands are shown by running 'axis-remote "
"--help' and include checking whether AXIS is running ('--ping'), loading a "
"file by name, reloading the currently loaded file ('--reload'), and making "
"AXIS exit ('--quit')."
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:702
#, no-wrap
msgid "Manual Tool Change(((AXIS:Manual Tool Change)))"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:708
msgid ""
"LinuxCNC includes a userspace HAL component called 'hal_manualtoolchange', "
"which shows a window prompt telling you what tool is expected when a 'M6' "
"command is issued. After the OK button is pressed, execution of the program "
"will continue."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:712
msgid ""
"The hal_manualtoolchange component includes a HAL pin for a button that can "
"be connected to a physical button to complete the tool change and remove the "
"window prompt (hal_manualtoolchange.change_button)."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:715
msgid ""
"The HAL configuration file 'lib/hallib/axis_manualtoolchange.hal' shows the "
"HAL commands necessary to use this component."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:719 man/man1/hal_manualtoolchange.1:38
msgid ""
"hal_manualtoolchange can be used even when AXIS is not used as the GUI.  "
"This component is most useful if you have presettable tools and you use the "
"tool table."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:726
msgid ""
"Important Note: Rapids will not show on the preview after a T<n> is issued "
"until the next feed move after the M6.  This can be very confusing to most "
"users.  To turn this feature off for the current tool change program a G1 "
"with no move after the T<n>."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:728
#, no-wrap
msgid "Manual Toolchange Window(((AXIS:Manual Toolchange Window)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/axis.adoc:729
#, no-wrap
msgid "Manual Toolchange Window"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:729
#, no-wrap
msgid "images/manual-tool-change.png"
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:732
#, no-wrap
msgid "Python modules(((AXIS:Python Modules)))"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:737
msgid ""
"AXIS includes several Python modules which may be useful to others. For more "
"information on one of these modules, use 'pydoc <module name>' or read the "
"source code. These modules include:"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:739
msgid ""
"'emc' provides access to the LinuxCNC command, status, and error channels"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:740
msgid "'gcode' provides access to the rs274ngc interpreter"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:741
msgid "'rs274' provides additional tools for working with rs274ngc files"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:742
msgid "'hal' allows the creation of userspace HAL components written in Python"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:743
msgid ""
"'_togl' provides an OpenGL widget that can be used in Tkinter applications"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:744
msgid "'minigl' provides access to the subset of OpenGL used by AXIS"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:749
msgid ""
"To use these modules in your own scripts, you must ensure that the directory "
"where they reside is on Python's module path. When running an installed "
"version of LinuxCNC, this should happen automatically. When running 'in-"
"place', this can be done by using 'scripts/rip-environment'."
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:751
#, no-wrap
msgid "Using AXIS in Lathe Mode(((AXIS:Lathe Mode)))"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:760
msgid ""
"By including the line 'LATHE = 1' in the [DISPLAY] section of the INI file, "
"AXIS selects lathe mode. The 'Y' axis is not shown in coordinate readouts, "
"the view is changed to show the Z axis extending to the right and the X axis "
"extending towards the bottom of the screen, and several controls (such as "
"those for preset views) are removed.  The coordinate readouts for X are "
"replaced with diameter and radius."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/axis.adoc:761 src/gui/axis.adoc:762
#, no-wrap
msgid "AXIS Lathe Mode"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:762
#, no-wrap
msgid "images/axis-lathe.png"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:765
msgid "Pressing 'V' zooms out to show the entire file, if one is loaded."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:767
msgid "When in lathe mode, the shape of the loaded tool (if any) is shown."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/axis.adoc:768 src/gui/axis.adoc:769
#, no-wrap
msgid "Lathe Tool Shape"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:769
#, no-wrap
msgid "images/axis-lathe-tool.png"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:774
msgid ""
"To change the display to a back tool lathe you need to have both 'LATHE = 1' "
"and 'BACK_TOOL_LATHE = 1' in the [DISPLAY] section. This will invert the "
"view and put the tool on the back side of the Z axis."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/axis.adoc:775 src/gui/axis.adoc:776
#, no-wrap
msgid "Lathe Back Tool Shape"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:776
#, no-wrap
msgid "images/axis-back-tool-lathe.png"
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:778
#, no-wrap
msgid "Using AXIS in Foam Cutting mode"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:786
msgid ""
"By including the line 'FOAM = 1' in the [DISPLAY] section of the INI file, "
"AXIS selects foam-cutting mode.  In the program preview, XY motions are "
"displayed in one plane, and UV motions in another.  In the live plot, lines "
"are drawn between corresponding points on the XY plane and the UV plane.  "
"The special comments (XY_Z_POS) and (UV_Z_POS)  set the Z coordinates of "
"these planes, which default to 0 and 1.5 machine units."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/axis.adoc:787 src/gui/axis.adoc:788
#, no-wrap
msgid "Foam Cutting Mode"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:788
#, no-wrap
msgid "images/axis-foam.png"
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:790
#, no-wrap
msgid "Advanced Configuration"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:800
msgid ""
"When AXIS is started it creates the HAL pins for the GUI then it executes "
"the HAL file named in the INI file: '[HAL]POSTGUI_HALFILE=<filename>'.  "
"Typically '<filename>' would be the configs base name + '_postgui' + '.hal' "
"eg. 'lathe_postgui.hal', but can be any legal filename.  These commands are "
"executed after the screen is built, guaranteeing the widget's HAL pins are "
"available.  You can have multiple line of 'POSTGUI_HALFILE=<filename>' in "
"the INI.  Each will be run one after the other in the order they appear."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:803
msgid ""
"For more information on the INI file settings that can change the way AXIS "
"works, see the <<sub:ini:sec:display,Display Section>> of the INI "
"configuration chapter."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:804
#, no-wrap
msgid "Program Filters"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:810
msgid ""
"AXIS has the ability to send loaded files through a 'filter program'.  This "
"filter can do any desired task: Something as simple as making sure the file "
"ends with 'M2', or something as complicated as generating G-code from an "
"image."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:819 src/gui/filter-programs.adoc:30
msgid ""
"The '[FILTER]' section of the INI file controls how filters work.  First, "
"for each type of file, write a 'PROGRAM_EXTENSION' line.  Then, specify the "
"program to execute for each type of file.  This program is given the name of "
"the input file as its first argument, and must write rs274ngc code to "
"standard output. This output is what will be displayed in the text area, "
"previewed in the display area, and executed by LinuxCNC when 'Run'. The "
"following lines add support for the 'image-to-gcode' converter included with "
"LinuxCNC:"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:826 src/gui/filter-programs.adoc:37
#, no-wrap
msgid ""
"[FILTER]\n"
"PROGRAM_EXTENSION = .png,.gif Greyscale Depth Image\n"
"png = image-to-gcode\n"
"gif = image-to-gcode\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:834 src/gui/filter-programs.adoc:45
#, no-wrap
msgid ""
"PROGRAM_EXTENSION = .py Python Script\n"
"py = python\n"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:840 src/gui/filter-programs.adoc:51
msgid ""
"In this way, any Python script can be opened, and its output is treated as G-"
"code. One such example script is available at 'nc_files/holecircle.py'. This "
"script creates G-code for drilling a series of holes along the circumference "
"of a circle."
msgstr ""

#. type: Named 'alt' AttributeList argument for macro 'image'
#: src/gui/axis.adoc:841 src/gui/axis.adoc:842 src/gui/filter-programs.adoc:52
#: src/gui/filter-programs.adoc:53
#, no-wrap
msgid "Circular Holes"
msgstr ""

#. type: Target for macro image
#: src/gui/axis.adoc:842 src/gui/filter-programs.adoc:53
#, no-wrap
msgid "images/holes.png"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:846
msgid ""
"If the environment variable AXIS_PROGRESS_BAR is set, then lines written to "
"stderr of the form"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:850
#, no-wrap
msgid "FILTER_PROGRESS=%d\n"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:854
msgid ""
"will set the AXIS progress bar to the given percentage. This feature should "
"be used by any filter that runs for a long time."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:855
#, no-wrap
msgid "The X Resource Database"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:864
msgid ""
"The colors of most elements of the AXIS user interface can be customized "
"through the X Resource Database. The sample file 'axis_light_background' "
"changes the colors of the backplot window to a 'dark lines on white "
"background' scheme, and also serves as a reference for the configurable "
"items in the display area.  The sample file 'axis_big_dro' changes the "
"position readout to a larger size font.  To use these files:"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:867
#, no-wrap
msgid "xrdb -merge /usr/share/doc/emc2/axis_light_background\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:869
#, no-wrap
msgid "xrdb -merge /usr/share/doc/emc2/axis_big_dro\n"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:873
msgid ""
"For information about the other items which can be configured in Tk "
"applications, see the Tk man pages."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:878
msgid ""
"Because modern desktop environments automatically make some settings in the "
"X Resource Database that adversely affect AXIS, by default these settings "
"are ignored. To make the X Resource Database items override AXIS defaults, "
"include the following line in your X Resources:"
msgstr ""

#.  These asterisks are not for bold,
#. type: delimited block -
#: src/gui/axis.adoc:882
#, no-wrap
msgid "*AXIS*optionLevel: widgetDefault\n"
msgstr ""

#.  in this case, we want the asterisks to actually appear.
#. type: Plain text
#: src/gui/axis.adoc:888
msgid ""
"this causes the built-in options to be created at the option level "
"'widgetDefault', so that X Resources (which are level 'userDefault')  can "
"override them."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:890
#, no-wrap
msgid "Jogwheel(((AXIS:Jogwheel)))"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:897
msgid ""
"To improve the interaction of AXIS with a physical jogwheel, the current "
"active axis selected in the GUI is also reported on a 'HAL pin' with a name "
"like 'axisui.jog.x'.  Except for a short time after the current axis has "
"changed, only one of these pins at a time is 'TRUE', the others remain "
"'FALSE'."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:901
msgid ""
"After AXIS has created these 'HAL pins', it runs the HAL file declared with: "
"[HAL]POSTGUI_HALFILE. What differs from [HAL]HALFILE, which can only be used "
"once."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:903
#, no-wrap
msgid "~/.axisrc(((AXIS:.axisrc)))"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:909
msgid ""
"If it exists, the contents of `~/.axisrc` are executed as Python source code "
"just before the AXIS GUI is displayed. The details of what may be written in "
"the `~/.axisrc` are subject to change during the development cycle."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:911
msgid "The following adds Control-Q as a keyboard shortcut for Quit."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:913
#, no-wrap
msgid "Example of .axisrc file"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:917
#, no-wrap
msgid ""
"root_window.bind(\"<Control-q>\", \"destroy .\")\n"
"help2.append((\"Control-Q\", \"Quit\"))\n"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:920
msgid "The following stops the \"Do you really want to quit\" dialog."
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:923
#, no-wrap
msgid "root_window.tk.call(\"wm\",\"protocol\",\".\",\"WM_DELETE_WINDOW\",\"destroy .\")\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:925
#, no-wrap
msgid "USER_COMMAND_FILE"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:931
msgid ""
"A configuration-specific python file may be specified with an INI file "
"setting '[DISPLAY]USER_COMMAND_FILE=filename.py'.  Like a `~/.axisrc` file, "
"this file is sourced just before the AXIS GUI is displayed.  This file is "
"specific to an INI file configuration not the user's home directory."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:932
#, no-wrap
msgid "user_live_update()"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:941
msgid ""
"The AXIS GUI includes a no-op (placeholder) function named "
"'user_live_update()' that is executed at the conclusion of the update()  "
"function of its LivePlotter class.  This function may be implemented within "
"a `~/.axisrc` python script or a '[DISPLAY]USER_COMMAND_FILE' python script "
"to make custom, periodic actions.  The details of what may be accomplished "
"in this function are dependent on the AXIS GUI implementation and subject to "
"change during the development cycle."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:942
#, no-wrap
msgid "user_hal_pins()"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:953
#, no-wrap
msgid ""
"The AXIS GUI includes a no-op (placeholder) function named 'user_hal_pins()'.\n"
"It is executed just after the .axisrc file is called and just before any GladeVCP panels / embedded tabs are initialized.\n"
"This function may be implemented within a `~/.axisrc` python script or a '[DISPLAY]USER_COMMAND_FILE' python script to make custom HAL pins that use the 'axisui.' prefix.\n"
"Use 'comp' as the HAL component instance reference.\n"
"HAL comp.ready() is called just after this function returns."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:954
#, no-wrap
msgid "External Editor"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:961
msgid ""
"The menu options File > Edit... and File > Edit Tool Table... become "
"available after defining the editor in the INI section [DISPLAY].  Useful "
"values include EDITOR=gedit and EDITOR=gnome-terminal -e vim.  For more "
"information, see the <<sub:ini:sec:display,Display Section>> of the INI "
"Configuration Chapter."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:962
#, no-wrap
msgid "Virtual Control Panel(((AXIS: Virtual Control Panel)))"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:969
msgid ""
"AXIS can display a custom virtual control panel in either the right side "
"column or the bottom row.  Additionally one or more panels may be displayed "
"as embedded tabs.  You can program buttons, indicators, data displays and "
"more. For more information, see the <<cha:pyvcp,PyVCP>> and the <<cha:glade-"
"vcp,GladeVCP>> chapters."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:971
#, no-wrap
msgid "Preview Control(((AXIS: Preview Control)))"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:980
msgid ""
"Special comments can be inserted into the G-code file to control how the "
"preview of AXIS behaves. In the case where you want to limit the drawing of "
"the preview use these special comments. Anything between the (AXIS,hide) and "
"(AXIS,show) will not be drawn during the preview. The (AXIS,hide) and (AXIS,"
"show) must be used in pairs with the (AXIS,hide)  being first. Anything "
"after a (AXIS,stop) will not be drawn during the preview."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:984
msgid ""
"These comments are useful to unclutter the preview display (for instance "
"while debugging a larger G-code file, one can disable the preview on certain "
"parts that are already working OK)."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:986
msgid "(AXIS,hide) Stops the preview (must be first)"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:987
msgid "(AXIS,show) Resumes the preview (must follow a hide)"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:988
msgid "(AXIS,stop) Stops the preview from here to the end of the file."
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:989
msgid "(AXIS,notify,the_text) Displays the_text as an info display"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:991
msgid ""
"This display can be useful in the AXIS preview when (debug,message) comments "
"are not displayed."
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:993
#, no-wrap
msgid "Axisui(((AXIS: axisui pins)))"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:999
msgid ""
"To improve the interaction of AXIS with physical jog wheels, the axis "
"currently selected in the GUI is also reported on a pin with a name like "
"'axisui.jog.x'. One of these pins is 'TRUE' at one time, and the rest are "
"'FALSE'. These are meant to control motion's jog-enable pins."
msgstr ""

#. type: Block title
#: src/gui/axis.adoc:1000
#, no-wrap
msgid "Axisui Pins"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:1002
msgid ""
"AXIS has HAL pins to indicate which jog radio button is selected in the "
"'Manual Control' tab."
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1014
#, no-wrap
msgid ""
"Type Dir  Name\n"
"bit  OUT  axisui.jog.x\n"
"bit  OUT  axisui.jog.y\n"
"bit  OUT  axisui.jog.z\n"
"bit  OUT  axisui.jog.a\n"
"bit  OUT  axisui.jog.b\n"
"bit  OUT  axisui.jog.c\n"
"bit  OUT  axisui.jog.u\n"
"bit  OUT  axisui.jog.v\n"
"bit  OUT  axisui.jog.w\n"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:1017
msgid ""
"AXIS has a HAL pin to indicate the jog increment selected on the 'Manual "
"Tab'."
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1021
#, no-wrap
msgid ""
"Type  Dir Name\n"
"float OUT axisui.jog.increment\n"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:1025
msgid ""
"AXIS has a HAL output pin that indicates when an abort has occurred. The "
"'axisui.abort' pin will be 'TRUE' and come back to 'FALSE' after 0.3ms."
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1029
#, no-wrap
msgid ""
"Type  Dir    Name\n"
"bit   OUT    axisui.abort\n"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:1034
msgid ""
"AXIS has a HAL output pin that indicates when an error has occurred. The "
"'axisui.error' pin will remain 'TRUE' until all error notifications have "
"been dismissed."
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1038
#, no-wrap
msgid ""
"Type  Dir    Name\n"
"bit   OUT    axisui.error\n"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:1042
msgid ""
"AXIS has HAL input pins to clear the pop up notifications for errors and "
"information."
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1048
#, no-wrap
msgid ""
"Type  Dir    Name\n"
"bit   IN     axisui.notifications-clear\n"
"bit   IN     axisui.notifications-clear-error\n"
"bit   IN     axisui.notifications-clear-info\n"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:1051
msgid ""
"AXIS has a HAL input pin that disables/enables the 'Pause/Resume' function."
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1055
#, no-wrap
msgid ""
"Type  Dir    Name\n"
"bit   IN     axisui.resume-inhibit\n"
msgstr ""

#. type: Title ==
#: src/gui/axis.adoc:1057
#, no-wrap
msgid "AXIS Customization Hints"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:1064
#, no-wrap
msgid ""
"AXIS is a fairly large and difficult-to-penetrate code base, this is helpful To keep the code stable but makes it difficult to customize.\n"
"Here we will show code snippets to modify behaviours or visuals of the screen. Keep in mind the internal code of AXIS can change from time to time.\n"
"these snippets are not guaranteed to continue to work - they may need adjustment."
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1065
#, no-wrap
msgid "The update function"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:1069
msgid ""
"There is a function in AXIS named user_live_update that is called every time "
"AXIS updates itself. You can use this to update your own functions."
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1075
#, no-wrap
msgid ""
"# continuous update function\n"
"def user_live_update():\n"
"    print('i am printed every update...')\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1077
#, no-wrap
msgid "Disable the Close Dialog"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1083
#, no-wrap
msgid ""
"# disable the do you want to close dialog\n"
"root_window.tk.call(\"wm\",\"protocol\",\".\",\"WM_DELETE_WINDOW\",\"destroy .\")\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1085
#, no-wrap
msgid "Change the Text Font"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1090
#, no-wrap
msgid "# change the font\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1094
#, no-wrap
msgid ""
"font = 'sans 11'\n"
"fname,fsize = font.split()\n"
"root_window.tk.call('font','configure','TkDefaultFont','-family',fname,'-size',fsize)\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1096
#, no-wrap
msgid "# redo the text in tabs so they resize for the new default font\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1101
#, no-wrap
msgid ""
"root_window.tk.call('.pane.top.tabs','itemconfigure','manual','-text',' Manual - F3 ')\n"
"root_window.tk.call('.pane.top.tabs','itemconfigure','mdi','-text',' MDI - F5 ')\n"
"root_window.tk.call('.pane.top.right','itemconfigure','preview','-text',' Preview ')\n"
"root_window.tk.call('.pane.top.right','itemconfigure','numbers','-text',' DRO ')\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1104
#, no-wrap
msgid "# G-code font is independent\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1108
#, no-wrap
msgid ""
"root_window.tk.call('.pane.bottom.t.text','configure','-foreground','blue')\n"
"#root_window.tk.call('.pane.bottom.t.text','configure','-foreground','blue','-font',font)\n"
"#root_window.tk.call('.pane.bottom.t.text','configure','-foreground','blue','-font',font,'-height','12')\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1110
#, no-wrap
msgid "Modify Rapid Rate with Keyboard Shortcuts"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1116
#, no-wrap
msgid ""
"# use control + ` or 1-0 as keyboard shortcuts for rapidrate and keep ` or 1-0 for feedrate\n"
"# also adds text to quick reference in help\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1118
#, no-wrap
msgid "help1.insert(10,(\"Control+ `,1..9,0\", _(\"Set Rapid Override from 0% to 100%\")),)\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1141
#, no-wrap
msgid ""
"root_window.bind('<Control-Key-quoteleft>',lambda event: set_rapidrate(0))\n"
"root_window.bind('<Control-Key-1>',lambda event: set_rapidrate(10))\n"
"root_window.bind('<Control-Key-2>',lambda event: set_rapidrate(20))\n"
"root_window.bind('<Control-Key-3>',lambda event: set_rapidrate(30))\n"
"root_window.bind('<Control-Key-4>',lambda event: set_rapidrate(40))\n"
"root_window.bind('<Control-Key-5>',lambda event: set_rapidrate(50))\n"
"root_window.bind('<Control-Key-6>',lambda event: set_rapidrate(60))\n"
"root_window.bind('<Control-Key-7>',lambda event: set_rapidrate(70))\n"
"root_window.bind('<Control-Key-8>',lambda event: set_rapidrate(80))\n"
"root_window.bind('<Control-Key-9>',lambda event: set_rapidrate(90))\n"
"root_window.bind('<Control-Key-0>',lambda event: set_rapidrate(100))\n"
"root_window.bind('<Key-quoteleft>',lambda event: set_feedrate(0))\n"
"root_window.bind('<Key-1>',lambda event: set_feedrate(10))\n"
"root_window.bind('<Key-2>',lambda event: set_feedrate(20))\n"
"root_window.bind('<Key-3>',lambda event: set_feedrate(30))\n"
"root_window.bind('<Key-4>',lambda event: set_feedrate(40))\n"
"root_window.bind('<Key-5>',lambda event: set_feedrate(50))\n"
"root_window.bind('<Key-6>',lambda event: set_feedrate(60))\n"
"root_window.bind('<Key-7>',lambda event: set_feedrate(70))\n"
"root_window.bind('<Key-8>',lambda event: set_feedrate(80))\n"
"root_window.bind('<Key-9>',lambda event: set_feedrate(90))\n"
"root_window.bind('<Key-0>',lambda event: set_feedrate(100))\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1143
#, no-wrap
msgid "Read the INI file"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1150
#, no-wrap
msgid ""
"# read an INI file item\n"
"machine = inifile.find('EMC','MACHINE')\n"
"print('machine name =',machine)\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1152
#, no-wrap
msgid "Read linuxcnc Status"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1159
#, no-wrap
msgid ""
"# linuxcnc status can be read from s.\n"
"print(s.actual_position)\n"
"print(s.paused)\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1161
#, no-wrap
msgid "Change the current view"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1168
#, no-wrap
msgid ""
"# set the view of the preview\n"
"# valid views are view_x view_y view_y2 view_z view_z2 view_p\n"
"commands.set_view_z()\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1170
#, no-wrap
msgid "Creating new AXISUI HAL Pins"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1177
#, no-wrap
msgid ""
"def user_hal_pins():\n"
"    comp.newpin('my-new-in-pin', hal.HAL_BIT, hal.HAL_IN)\n"
"    comp.ready()\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1179
#, no-wrap
msgid "Creating new HAL Component and Pins"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1184
#, no-wrap
msgid "# create a component\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1189
#, no-wrap
msgid ""
"mycomp = hal.component('my_component')\n"
"mycomp.newpin('idle-led',hal.HAL_BIT,hal.HAL_IN)\n"
"mycomp.newpin('pause-led',hal.HAL_BIT,hal.HAL_IN)\n"
"mycomp.ready()\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1191
#, no-wrap
msgid "# connect pins\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1195
#, no-wrap
msgid ""
"hal.new_sig('idle-led',hal.HAL_BIT)\n"
"hal.connect('halui.program.is-idle','idle-led')\n"
"hal.connect('my_component.idle-led','idle-led')\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1197
#, no-wrap
msgid "# set a pin\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1199
#, no-wrap
msgid "hal.set_p('my_component.pause-led','1')\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1201
#, no-wrap
msgid "# get a pin 2,8+ branch\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1204
#, no-wrap
msgid ""
"value = hal.get_value('halui.program.is-idle')\n"
"print('value is a',type(value),'value of',value)\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1206
#, no-wrap
msgid "Switch Tabs with HAL Pins"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1212
#, no-wrap
msgid ""
"# HAL pins from a GladeVCP panel will not be ready when user_live_update is run\n"
"# to read them you need to put them in a try/except block\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1217
#, no-wrap
msgid ""
"# the following example assumes 5 HAL buttons in a GladeVCP panel used to switch\n"
"# the tabs in the AXIS screen.\n"
"# button names are 'manual-tab', 'mdi-tab', 'preview-tab', 'dro-tab', 'user0-tab'\n"
"# the user_0 tab if it exists would be the first GladeVCP embedded tab\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1219
#, no-wrap
msgid "# for LinuxCNC 2.8+ branch\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1234
#, no-wrap
msgid ""
"def user_live_update():\n"
"    try:\n"
"        if hal.get_value('gladevcp.manual-tab'):\n"
"            root_window.tk.call('.pane.top.tabs','raise','manual')\n"
"        elif hal.get_value('gladevcp.mdi-tab'):\n"
"            root_window.tk.call('.pane.top.tabs','raise','mdi')\n"
"        elif hal.get_value('gladevcp.preview-tab'):\n"
"            root_window.tk.call('.pane.top.right','raise','preview')\n"
"        elif hal.get_value('gladevcp.numbers-tab'):\n"
"            root_window.tk.call('.pane.top.right','raise','numbers')\n"
"        elif hal.get_value('gladevcp.user0-tab'):\n"
"            root_window.tk.call('.pane.top.right','raise','user_0')\n"
"    except:\n"
"        pass\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1236
#, no-wrap
msgid "Add a GOTO Home button"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1247
#, no-wrap
msgid ""
"def goto_home(axis):\n"
"    if s.interp_state == linuxcnc.INTERP_IDLE:\n"
"        home = inifile.find('JOINT_' + str(inifile.find('TRAJ', 'COORDINATES').upper().index(axis)), 'HOME')\n"
"        mode = s.task_mode\n"
"        if s.task_mode != linuxcnc.MODE_MDI:\n"
"            c.mode(linuxcnc.MODE_MDI)\n"
"        c.mdi('G53 G0 ' + axis + home)\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1250
#, no-wrap
msgid ""
"# make a button to home y axis\n"
"root_window.tk.call('button','.pane.top.tabs.fmanual.homey','-text','Home Y','-command','goto_home Y','-height','2')\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1253
#, no-wrap
msgid ""
"# place the button\n"
"root_window.tk.call('grid','.pane.top.tabs.fmanual.homey','-column','1','-row','7','-columnspan','2','-padx','4','-sticky','w')\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1257
#, no-wrap
msgid ""
"# any function called from Tcl needs to be added to TclCommands\n"
"TclCommands.goto_home = goto_home\n"
"commands = TclCommands(root_window)\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1259
#, no-wrap
msgid "Add Button to manual frame"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1264
#, no-wrap
msgid "# make a new button and put it in the manual frame\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1267
#, no-wrap
msgid ""
"root_window.tk.call('button','.pane.top.tabs.fmanual.mybutton','-text','My Button','-command','mybutton_clicked','-height','2')\n"
"root_window.tk.call('grid','.pane.top.tabs.fmanual.mybutton','-column','1','-row','6','-columnspan','2','-padx','4','-sticky','w')\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1272
#, no-wrap
msgid ""
"# the above send the \"mybutton_clicked\" command when clicked\n"
"# other options are to bind a press or release (or both) commands to the button\n"
"# these can be in addition to or instead of the clicked command\n"
"# if instead of then delete '-command','mybutton_clicked', from the first line\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1274
#, no-wrap
msgid "# Button-1 = left mouse button, 2 = right or 3 = middle\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1277
#, no-wrap
msgid ""
"root_window.tk.call('bind','.pane.top.tabs.fmanual.mybutton','<Button-1>','mybutton_pressed')\n"
"root_window.tk.call('bind','.pane.top.tabs.fmanual.mybutton','<ButtonRelease-1>','mybutton_released')\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1279
#, no-wrap
msgid "# functions called from the buttons\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1286
#, no-wrap
msgid ""
"def mybutton_clicked():\n"
"    print('mybutton was clicked')\n"
"def mybutton_pressed():\n"
"    print('mybutton was pressed')\n"
"def mybutton_released():\n"
"    print('mybutton was released')\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1288
#, no-wrap
msgid "# any function called from Tcl needs to be added to TclCommands\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1293
#, no-wrap
msgid ""
"TclCommands.mybutton_clicked = mybutton_clicked\n"
"TclCommands.mybutton_pressed = mybutton_pressed\n"
"TclCommands.mybutton_released = mybutton_released\n"
"commands = TclCommands(root_window)\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1295
#, no-wrap
msgid "Reading Internal Variables"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1300
#, no-wrap
msgid "# the following variables may be read from the vars instance\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1303
#, no-wrap
msgid ""
"print(vars.machine.get())\n"
"print(vars.emcini.get())\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1365
#, no-wrap
msgid ""
"    active_codes            = StringVar\n"
"    block_delete            = BooleanVar\n"
"    brake                   = BooleanVar\n"
"    coord_type              = IntVar\n"
"    display_type            = IntVar\n"
"    dro_large_font          = IntVar\n"
"    emcini                  = StringVar\n"
"    exec_state              = IntVar\n"
"    feedrate                = IntVar\n"
"    flood                   = BooleanVar\n"
"    grid_size               = DoubleVar\n"
"    has_editor              = IntVar\n"
"    has_ladder              = IntVar\n"
"    highlight_line          = IntVar\n"
"    interp_pause            = IntVar\n"
"    interp_state            = IntVar\n"
"    ja_rbutton              = StringVar\n"
"    jog_aspeed              = DoubleVar\n"
"    jog_speed               = DoubleVar\n"
"    kinematics_type         = IntVar\n"
"    linuxcnctop_command     = StringVar\n"
"    machine                 = StringVar\n"
"    max_aspeed              = DoubleVar\n"
"    max_maxvel              = DoubleVar\n"
"    max_queued_mdi_commands = IntVar\n"
"    max_speed               = DoubleVar\n"
"    maxvel_speed            = DoubleVar\n"
"    mdi_command             = StringVar\n"
"    metric                  = IntVar\n"
"    mist                    = BooleanVar\n"
"    motion_mode             = IntVar\n"
"    on_any_limit            = BooleanVar\n"
"    optional_stop           = BooleanVar\n"
"    override_limits         = BooleanVar\n"
"    program_alpha           = IntVar\n"
"    queued_mdi_commands     = IntVar\n"
"    rapidrate               = IntVar\n"
"    rotate_mode             = BooleanVar\n"
"    running_line            = IntVar\n"
"    show_distance_to_go     = IntVar\n"
"    show_extents            = IntVar\n"
"    show_live_plot          = IntVar\n"
"    show_machine_limits     = IntVar\n"
"    show_machine_speed      = IntVar\n"
"    show_program            = IntVar\n"
"    show_pyvcppanel         = IntVar\n"
"    show_rapids             = IntVar\n"
"    show_tool               = IntVar\n"
"    show_offsets            = IntVar\n"
"    spindledir              = IntVar\n"
"    spindlerate             = IntVar\n"
"    task_mode               = IntVar\n"
"    task_paused             = IntVar\n"
"    task_state              = IntVar\n"
"    taskfile                = StringVar\n"
"    teleop_mode             = IntVar\n"
"    tool                    = StringVar\n"
"    touch_off_system        = StringVar\n"
"    trajcoordinates         = StringVar\n"
"    tto_g11                 = BooleanVar\n"
"    view_type               = IntVar\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1367
#, no-wrap
msgid "Hide Widgets"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1374
#, no-wrap
msgid ""
"# hide a widget\n"
"# use 'grid' or 'pack' depending on how it was originally placed\n"
"root_window.tk.call('grid','forget','.pane.top.tabs.fmanual.jogf.zerohome.tooltouch')\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1376
#, no-wrap
msgid "Change a label"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1382
#, no-wrap
msgid ""
"# change label of a widget\n"
"root_window.tk.call('setup_widget_accel','.pane.top.tabs.fmanual.mist','Downdraft')\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1385
#, no-wrap
msgid ""
"# make sure it appears (only needed in this case if the mist button was hidden)\n"
"root_window.tk.call('grid','.pane.top.tabs.fmanual.mist','-column','1','-row','5','-columnspan','2','-padx','4','-sticky','w')\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1387
#, no-wrap
msgid "Redirect an existing command"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1394
#, no-wrap
msgid ""
"# hijack an existing command\n"
"# originally the mist button calls the mist function\n"
"root_window.tk.call('.pane.top.tabs.fmanual.mist','configure','-command','hijacked_command')\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1398
#, no-wrap
msgid ""
"# The new function\n"
"def hijacked_command():\n"
"    print('hijacked mist command')\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1402
#, no-wrap
msgid ""
"# add the function to TclCommands\n"
"TclCommands.hijacked_command = hijacked_command\n"
"commands = TclCommands(root_window)\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1404
#, no-wrap
msgid "Change the DRO color"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1410
#, no-wrap
msgid ""
"# change dro screen\n"
"root_window.tk.call('.pane.top.right.fnumbers.text','configure','-foreground','green','-background','black')\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1412
#, no-wrap
msgid "Change the Toolbar Buttons"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1417
#, no-wrap
msgid "# change the toolbar buttons\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1421
#, no-wrap
msgid ""
"buW = '3'\n"
"buH = '2'\n"
"boW = '3'\n"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1441
#, no-wrap
msgid ""
"root_window.tk.call('.toolbar.machine_estop','configure','-image','','-text','ESTOP','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.machine_power','configure','-image','','-text','POWER','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.file_open','configure','-image','','-text','OPEN','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.reload','configure','-image','','-text','RELOAD','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.program_run','configure','-image','','-text','RUN','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.program_step','configure','-image','','-text','STEP','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.program_pause','configure','-image','','-text','PAUSE','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.program_stop','configure','-image','','-text','STOP','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.program_blockdelete','configure','-image','','-text','Skip /','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.program_optpause','configure','-image','','-text','M1','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.view_zoomin','configure','-image','','-text','Zoom+','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.view_zoomout','configure','-image','','-text','Zoom-','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.view_z','configure','-image','','-text','Top X','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.view_z2','configure','-image','','-text','Top Y','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.view_x','configure','-image','','-text','Right','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.view_y','configure','-image','','-text','Front','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.view_p','configure','-image','','-text','3D','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.rotate','configure','-image','','-text','Rotate','-width',buW,'-height',buH,'-borderwidth',boW)\n"
"root_window.tk.call('.toolbar.clear_plot','configure','-image','','-text','Clear','-width',buW,'-height',buH,'-borderwidth',boW)\n"
msgstr ""

#. type: Title ===
#: src/gui/axis.adoc:1443
#, no-wrap
msgid "Change Plotter Colors"
msgstr ""

#. type: Plain text
#: src/gui/axis.adoc:1447
msgid "In RGBA format, in this order: jog, rapid, feed, arc, toolchange, probe"
msgstr ""

#. type: delimited block -
#: src/gui/axis.adoc:1460
#, no-wrap
msgid ""
"# change plotter colors\n"
"try:\n"
"    live_plotter.logger.set_colors((255,0,0,255),\n"
"                                    (0,255,0,255),\n"
"                                    (0,0,255,255),\n"
"                                    (255,255,0,255),\n"
"                                    (255,255,255,255),\n"
"                                    (0,255,255,255))\n"
"except Exception as e:\n"
"    print(e)\n"
msgstr ""

#. type: Title =
#: src/gui/filter-programs.adoc:4
#, no-wrap
msgid "Filter Programs"
msgstr ""

#. type: Plain text
#: src/gui/filter-programs.adoc:19
msgid ""
"Most of LinuxCNC's screens have the ability to send loaded files through a "
"'filter program' or use the filter program to make G-code.  Such a filter "
"can do any desired task: Something as simple as making sure the file ends "
"with 'M2', or something as complicated as generating G-code from an image."
msgstr ""

#. type: Title ==
#: src/gui/filter-programs.adoc:20
#, no-wrap
msgid "Setting up the INI for Program Filters"
msgstr ""

#. type: Plain text
#: src/gui/filter-programs.adoc:56
msgid "If the filter program sends lines to stderr of the form:"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:60
#, no-wrap
msgid "FILTER_PROGRESS=10\n"
msgstr ""

#. type: Plain text
#: src/gui/filter-programs.adoc:64
msgid ""
"It will set the screens progress bar to the given (10 in this case) "
"percentage.  This feature should be used by any filter that runs for a long "
"time."
msgstr ""

#. type: Title ==
#: src/gui/filter-programs.adoc:65
#, no-wrap
msgid "Making Python Based Filter Programs"
msgstr ""

#. type: Plain text
#: src/gui/filter-programs.adoc:72
msgid ""
"Here is a very basic example of the filtering mechanics: When run through a "
"Linucnc screen that offers program filtering, it will produce and write a "
"line of G-code every 100th of a second to standard output.  It also sends a "
"progress message out to the Unix standard error stream.  If there was an "
"error it would post an error message and exit with an exitcode of 1."
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:77
#, no-wrap
msgid ""
"import time\n"
"import sys\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:82
#, no-wrap
msgid ""
"for i in range(0,100):\n"
"    try:\n"
"        # simulate calculation time\n"
"        time.sleep(.1)\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:85
#, no-wrap
msgid ""
"        # output a line of G-code\n"
"        print('G0 X1', file=sys.stdout)\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:92
#, no-wrap
msgid ""
"        # update progress\n"
"        print('FILTER_PROGRESS={}'.format(i), file=sys.stderr)\n"
"    except:\n"
"        # This causes an error message\n"
"        print('Error; But this was only a test', file=sys.stderr)\n"
"        raise SystemExit(1)\n"
msgstr ""

#. type: Plain text
#: src/gui/filter-programs.adoc:99
msgid ""
"Here is a similar program but it actually could filter.  It puts up a PyQt5 "
"dialog with a cancel button.  Then it reads the program line by line and "
"passes it to standard output.  As it goes along, it updates any process "
"listening to standard error output."
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:107
#, no-wrap
msgid ""
"import sys\n"
"import os\n"
"import time\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:111
#, no-wrap
msgid ""
"from PyQt5.QtWidgets import (QApplication, QDialog, QDialogButtonBox,\n"
"                            QVBoxLayout,QDialogButtonBox)\n"
"from PyQt5.QtCore import QTimer, Qt\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:113
#, no-wrap
msgid "class CustomDialog(QDialog):\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:118
#, no-wrap
msgid ""
"    def __init__(self, path):\n"
"        super(CustomDialog, self).__init__(None)\n"
"        self.setWindowFlags(self.windowFlags() | Qt.WindowStaysOnTopHint)\n"
"        self.setWindowTitle(\"Filter-with-GUI Test\")\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:120
#, no-wrap
msgid "        QBtn = QDialogButtonBox.Cancel\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:123
#, no-wrap
msgid ""
"        self.buttonBox = QDialogButtonBox(QBtn)\n"
"        self.buttonBox.rejected.connect(self.reject)\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:127
#, no-wrap
msgid ""
"        self.layout = QVBoxLayout()\n"
"        self.layout.addWidget(self.buttonBox)\n"
"        self.setLayout(self.layout)\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:130
#, no-wrap
msgid ""
"        self.line = 0\n"
"        self._percentDone = 0\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:134
#, no-wrap
msgid ""
"        if not os.path.exists(path):\n"
"            print(\"Path: '{}' doesn't exist:\".format(path), file=sys.stderr)\n"
"            raise SystemExit(1)\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:137
#, no-wrap
msgid ""
"        self.infile = open(path, \"r\")\n"
"        self.temp = self.infile.readlines()\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:140
#, no-wrap
msgid ""
"        # calculate percent update interval\n"
"        self.bump = 100/float(len(self.temp))\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:144
#, no-wrap
msgid ""
"        self._timer = QTimer()\n"
"        self._timer.timeout.connect(self.process)\n"
"        self._timer.start(100)\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:149
#, no-wrap
msgid ""
"    def reject(self):\n"
"        # This provides an error message\n"
"        print('You asked to cancel before finished.', file=sys.stderr)\n"
"        raise SystemExit(1)\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:154
#, no-wrap
msgid ""
"    def process(self):\n"
"        try:\n"
"            # get next line of code\n"
"            codeLine = self.temp[self.line]\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:156
#, no-wrap
msgid "            # process the line somehow\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:160
#, no-wrap
msgid ""
"            # push out processed code\n"
"            print(codeLine, file=sys.stdout)\n"
"            self.line +=1\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:164
#, no-wrap
msgid ""
"            # update progress\n"
"            self._percentDone += self.bump\n"
"            print('FILTER_PROGRESS={}'.format(int(self._percentDone)), file=sys.stderr)\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:170
#, no-wrap
msgid ""
"            # if done end with no error/error message\n"
"            if self._percentDone >= 99:\n"
"                print('FILTER_PROGRESS=-1', file=sys.stderr)\n"
"                self.infile.close()\n"
"                raise SystemExit(0)\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:176
#, no-wrap
msgid ""
"        except Exception as e:\n"
"            # This provides an error message\n"
"            print(('Something bad happened:',e), file=sys.stderr)\n"
"            # this signals the error message should be shown\n"
"            raise SystemExit(1)\n"
msgstr ""

#. type: delimited block -
#: src/gui/filter-programs.adoc:186
#, no-wrap
msgid ""
"if __name__ == \"__main__\":\n"
"    if (len(sys.argv)>1):\n"
"        path = sys.argv[1]\n"
"    else:\n"
"        path = None\n"
"    app = QApplication(sys.argv)\n"
"    w = CustomDialog(path=path)\n"
"    w.show()\n"
"    sys.exit( app.exec_() )\n"
msgstr ""

#. type: Title =
#: src/gui/gladevcp.adoc:5
#, no-wrap
msgid "GladeVCP: Glade Virtual Control Panel(((GladeVCP: Glade Virtual Control Panel)))"
msgstr ""

#.  begin a listing of ini/hal/ngc files like so:
#. [source,{ini}]
#. [source,{hal}]
#. [source,{ngc}]
#. type: Title ==
#: src/gui/gladevcp.adoc:21
#, no-wrap
msgid "What is GladeVCP?"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:25
msgid ""
"GladeVCP is a LinuxCNC component which adds the ability to add a new user "
"interface panel to LinuxCNC user interfaces like:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:34
msgid ""
"Unlike PyVCP, GladeVCP is not limited to displaying and setting HAL pins, as "
"arbitrary actions can be executed in Python code - in fact, a complete "
"LinuxCNC user interface could be built with GladeVCP and Python."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:41
msgid ""
"GladeVCP uses the http://glade.gnome.org/[Glade] WYSIWYG user interface "
"editor, which makes it easy to create visually pleasing panels. It relies on "
"the https://pygobject.readthedocs.io/en/latest/[PyGObject] bindings to the "
"rich http://www.gtk.org/[GTK+] widget set, and in fact all of these may be "
"used in a GladeVCP application - not just the specialized widgets for "
"interacting with HAL and LinuxCNC, which are documented here."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:42
#, no-wrap
msgid "PyVCP versus GladeVCP at a glance"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:47
msgid ""
"Both support the creation of panels with 'HAL widgets' - user interface "
"elements like LED's, buttons, sliders etc whose values are linked to a HAL "
"pin, which in turn interfaces to the rest of LinuxCNC."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:49
#, no-wrap
msgid "*PyVCP:*\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:51
msgid "Widget set: uses TkInter widgets."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:52
msgid ""
"User interface creation: \"edit XML file / run result / evaluate looks\" "
"cycle."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:53
msgid "No support for embedding user-defined event handling."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:54
msgid "No LinuxCNC interaction beyond HAL pin I/O supported."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:56
#, no-wrap
msgid "*GladeVCP:*\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:58
msgid "Widget set: relies on the http://www.gtk.org/[GTK+] widget set."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:59
msgid ""
"User interface creation: uses the http://glade.gnome.org/[Glade] WYSIWYG "
"user interface editor."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:60
msgid ""
"Any HAL pin change may be directed to call back into a user-defined Python "
"event handler."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:61
msgid ""
"Any GTK signal (key/button press, window, I/O, timer, network events) may be "
"associated with user-defined handlers in Python."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:63
msgid ""
"Direct LinuxCNC interaction: arbitrary command execution, like initiating "
"MDI commands to call a G-code subroutine, plus support for status change "
"operations through Action Widgets."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:64
msgid "Several independent GladeVCP panels may be run in different tabs."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:65
msgid ""
"Separation of user interface appearance and functionality: change appearance "
"without touching any code."
msgstr ""

#. type: Title ==
#: src/gui/gladevcp.adoc:66
#, no-wrap
msgid "A Quick Tour with the Example Panel"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:69
msgid "GladeVCP panel windows may be run in three different setups:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:71
msgid ""
"always visible integrated into AXIS at the right side, exactly like PyVCP "
"panels,"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:73
msgid ""
"as a tab in AXIS,Touchy, Gscreen, or GMOCCAPY; in AXIS this would create a "
"third tab besides the Preview and DRO tabs which must be raised explicitly,"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:74
msgid ""
"as a standalone toplevel window, which can be iconifyed/deiconified "
"independent of the main window."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:75 src/gui/gscreen.adoc:148
#, no-wrap
msgid "Installed LinuxCNC"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:79
msgid ""
"If you're using an installed version of LinuxCNC the examples shown below "
"are in the <<cha:starting-linuxcnc,configuration picker>> in the 'Sample "
"Configurations > apps > GladeVCP' branch."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:80
#, no-wrap
msgid "Git Checkout"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:84
msgid ""
"The following instructions only apply if you're using a git checkout. Open a "
"terminal and change to the directory created by git then issue the commands "
"as shown."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:89
msgid ""
"For the following commands to work on your git checkout you must first run "
"'make' then run 'sudo make setuid' then run '. ./scripts/rip-environment'.  "
"More information about a git checkout is on the LinuxCNC wiki page."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:91
msgid ""
"Run the sample GladeVCP panel integrated into AXIS like PyVCP as follows:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:95
#, no-wrap
msgid ""
"$ cd configs/sim/axis/gladevcp\n"
"$ linuxcnc gladevcp_panel.ini\n"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:97
#, no-wrap
msgid "images/example-panel-small.png"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:100
msgid "Run the same panel, but as a tab inside AXIS:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:104
#, no-wrap
msgid ""
"$ cd configs/sim/axis/gladevcp\n"
"$ linuxcnc gladevcp_tab.ini\n"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:106
#, no-wrap
msgid "images/example-tabbed-small.png"
msgstr ""

#
#
#
#
#
#. To run this panel as a standalone toplevel window besides AXIS, just
#. start AXIS in the background and start GladeVCP as follows:
#. FIXME: I'm not sure how this is supposed to work with axis in one
#. directory and GladeVCP in a different directory.
#. FIXME: there is a conflict for motion.N.spindle-speed-out since it is used by both
#.    axis.ini: sim_spindle_encoder.hal
#.    and
#.    manual-example.ui: manual-example.hal
#. commit cd36e2 Jan 5 2012 added sim_spindle_encoder.hal to axis.ini
#. probably after creation of manual-example.ui
#. ----
#. $ cd configs/sim/axis
#. $ linuxcnc axis.ini &
#. $ cd gladevcp
#. $ gladevcp -c gladevcp -u ./hitcounter.py -H ./manual-example.hal ./manual-example.ui
#. ----
#. image::images/example-float-small.png[]
#. type: Plain text
#: src/gui/gladevcp.adoc:134
msgid "To run this panel inside 'Touchy':"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:138
#, no-wrap
msgid ""
"$ cd configs/sim/touchy/gladevcp\n"
"$ linuxcnc gladevcp_touchy.ini\n"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:140
#, no-wrap
msgid "images/touchy-tab-33.png"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:148
msgid ""
"Functionally these setups are identical - they only differ in screen real "
"estate requirements and visibility. Since it is possible to run several "
"GladeVCP components in parallel (with different HAL component names), mixed "
"setups are possible as well - for instance a panel on the right hand side, "
"and one or more tabs for less-frequently used parts of the interface."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:149
#, no-wrap
msgid "Exploring the example panel"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:155
msgid ""
"While running configs/sim/axis/gladevcp_panel.ini or configs/sim/axis/"
"gladevcp_tab.ini, explore 'Show HAL Configuration' - you will find the "
"`gladevcp` HAL component and may observe their pin values while interacting "
"with the widgets in the panel. The HAL setup can be found in 'configs/axis/"
"gladevcp/manual-example.hal'."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:164
msgid ""
"The example panel has two frames at the bottom. The panel is configured so "
"that resetting ESTOP activates the Settings frame and turning the machine on "
"enables the Commands frame at the bottom. The HAL widgets in the Settings "
"frame are linked to LEDs and labels in the 'Status' frame, and to the "
"current and prepared tool number - play with them to see the effect. "
"Executing the 'T<toolnumber>' and 'M6' commands in the MDI window will "
"change the current and prepared tool number fields."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:172
msgid ""
"The buttons in the 'Commands' frame are 'MDI Action widgets' - pressing them "
"will execute an MDI command in the interpreter.  The third button 'Execute "
"Oword subroutine' is an advanced example - it takes several HAL pin values "
"from the 'Settings' frame, and passes them as parameters to the Oword "
"subroutine. The actual parameters received by the routine are displayed by "
"'(DEBUG, )' commands - see '../../nc_files/oword.ngc' for the subroutine "
"body."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:178
msgid ""
"To see how the panel is integrated into AXIS, see the '[DISPLAY]GLADEVCP' "
"statement in configs/sim/axis/gladevcp/gladevcp_panel.ini, the "
"'[DISPLAY]EMBED*' statement in configs/sim/axis/gladevcp/gladevcp_tab.ini "
"and '[HAL]POSTGUI_HALFILE' statements in both configs/sim/axis/gladevcp/"
"gladevcp_tab.ini and configs/sim/axis/gladevcp/gladevcp_panel.ini."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:179
#, no-wrap
msgid "Exploring the User Interface description"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:184
msgid ""
"The user interface is created with the Glade UI editor - to explore it, you "
"need to have <<gladevcp:prerequisites,Glade installed>>. To edit the user "
"interface, run the command"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:187
#, no-wrap
msgid "$ glade configs/axis/gladevcp/manual-example.ui\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:190
msgid ""
"The required glade program may be named glade-gtk2 on more recent systems."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:196
msgid ""
"The center window shows the appearance of the UI. All user interface objects "
"and support objects are found in the right top window, where you can select "
"a specific widget (or by clicking on it in the center window). The "
"properties of the selected widget are displayed, and can be changed, in the "
"right bottom window."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:201
msgid ""
"To see how MDI commands are passed from the MDI Action widgets, explore the "
"widgets listed under 'Actions' in the top right window, and in the right "
"bottom window, under the 'General' tab, the 'MDI command' property."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:202
#, no-wrap
msgid "Exploring the Python callback"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:205
msgid "See how a Python callback is integrated into the example:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:207
msgid "In Glade, see the +hits+ label widget (a plain GTK+ widget)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:208
msgid ""
"In the +button1+ widget, look at the 'Signals' tab, and find the signal "
"'pressed' associated with the handler 'on_button_press'."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:209
msgid ""
"In hitcounter.py, see the method 'on_button_press' and see how it sets the "
"label property in the 'hits' object."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:213
msgid ""
"The is just touching upon the concept - the callback mechanism will be "
"handled in more detail in the <<gladevcp:programming,GladeVCP Programming>> "
"section."
msgstr ""

#. type: Title ==
#: src/gui/gladevcp.adoc:214
#, no-wrap
msgid "Creating and Integrating a Glade user interface"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:217
#, no-wrap
msgid "Prerequisite: Glade installation"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:222
msgid ""
"To view or modify Glade UI files, you need Glade 3.38.2 or later installed - "
"it is not needed just to run a GladeVCP panel. If the 'glade' command is "
"missing, install it with the command:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:225
#, no-wrap
msgid "$ sudo apt install glade\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:228
msgid ""
"Then verify installed version, which must be equal or superior to 3.6.7:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:231
#, no-wrap
msgid "$ glade --version\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:236
msgid ""
"Glade contains an internal Python interpreter, and only Python 3 is "
"supported.  This is true for Debian Bullseye, Ubuntu 21 and Mint 21 or "
"later.  Older versions will not work, you will get a Python error."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:237
#, no-wrap
msgid "Running Glade to create a new user interface"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:243
msgid ""
"This section just outlines the initial LinuxCNC-specific steps. For more "
"information and a tutorial on Glade, see http://glade.gnome.org. Some Glade "
"tips & tricks may also be found on http://www.youtube.com[youtube]."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:246
msgid ""
"Either modify an existing UI component by running +glade <file>.ui+ or start "
"a new one by just running the +glade+ command from the shell."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:249
msgid ""
"If LinuxCNC was not installed from a package, the LinuxCNC shell environment "
"needs to be set up with +<linuxcncdir>/scripts/rip-environment+, otherwise "
"Glade won't find the LinuxCNC-specific widgets."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:250
msgid ""
"When asked for unsaved preferences, just accept the defaults and hit 'Close'."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:252
msgid ""
"From 'Toplevel' (left pane), pick 'Window' (first icon) as top level window, "
"which by default will be named 'window1'. Do not change this name - GladeVCP "
"relies on it."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:253
msgid "In the left tab, scroll down and expand 'HAL Python' and 'VCP Actions'."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:254
msgid ""
"add a container like a HAL_Box or a HAL_Table from 'HAL Python' to the frame"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:255
msgid "pick and place some elements like LED, button, etc. within a container"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:257
msgid "This will look like so:"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:258
#, no-wrap
msgid "images/glade-manual-small.png"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:266
msgid ""
"Glade tends to write a lot of messages to the shell window, which mostly can "
"be ignored.  Select 'File→Save as', give it a name like 'myui.ui' and make "
"sure it's saved as 'GtkBuilder' file (radio button left bottom corner in "
"Save dialog). GladeVCP will also process the older 'libglade' format "
"correctly but there is no point in using it. The convention for GtkBuilder "
"file extension is '.ui'."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:267
#, no-wrap
msgid "Testing a panel"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:270
msgid ""
"You're now ready to give it a try (while LinuxCNC, e.g. AXIS is running) it "
"with:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:273
#, no-wrap
msgid "gladevcp myui.ui\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:278
msgid ""
"GladeVCP creates a HAL component named like the basename of the UI file - "
"'myui' in this case - unless overridden by the `-c <component name>` "
"option.  If running AXIS, just try 'Show HAL configuration' and inspect its "
"pins."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:285
msgid ""
"You might wonder why widgets contained a 'HAL_Hbox' or 'HAL_Table' appear "
"greyed out (inactive). HAL containers have an associated HAL pin which is "
"off by default, which causes all contained widgets to render inactive. A "
"common use case would be to associate these container HAL pins with `halui."
"machine.is-on` or one of the `halui.mode` signals, to assure some widgets "
"appear active only in a certain state."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:287
msgid ""
"To just activate a container, execute the HAL command `setp gladevcp."
"<container-name> 1`."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:288
#, no-wrap
msgid "Preparing the HAL command file"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:294
msgid ""
"The suggested way of linking HAL pins in a GladeVCP panel is to collect them "
"in a separate file with extension '.hal'. This file is passed via the "
"+POSTGUI_HALFILE=+ option in the +HAL+ section of your INI file."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:297
msgid ""
"Do not add the GladeVCP HAL command file to the AXIS +[HAL]HALFILE=+ ini "
"section, this will not have the desired effect - see the following sections."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:298
#, no-wrap
msgid "Integrating into AXIS, like PyVCP"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:302
msgid ""
"Place the GladeVCP panel in the righthand side panel by specifying the "
"following in the INI file:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:308
#, no-wrap
msgid ""
"[DISPLAY]\n"
"# add GladeVCP panel where PyVCP used to live:\n"
"GLADEVCP= -u ./hitcounter.py ./manual-example.ui\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:312
#, no-wrap
msgid ""
"[HAL]\n"
"# HAL commands for GladeVCP components in a tab must be executed via POSTGUI_HALFILE\n"
"POSTGUI_HALFILE =  ./manual-example.hal\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:316 src/gui/gladevcp.adoc:376
#: src/gui/gladevcp.adoc:412
#, no-wrap
msgid ""
"[RS274NGC]\n"
"# gladevcp Demo specific Oword subs live here\n"
"SUBROUTINE_PATH = ../../nc_files/gladevcp_lib\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:319
msgid ""
"The default HAL component name of a GladeVCP application started with the "
"GLADEVCP option is: `gladevcp`."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:321
msgid ""
"The command line actually run by AXIS in the above configuration is as "
"follows:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:324
#, no-wrap
msgid "halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x {XID} -u ./hitcounter.py ./manual-example.ui\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:328
msgid ""
"You may add arbitrary `gladevcp` options here, as long as they dont collide "
"with the above command line options."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:330
msgid ""
"It is possible to create a custom HAL component name by adding the +-c+ "
"option:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:336
#, no-wrap
msgid ""
"[DISPLAY]\n"
"# add GladeVCP panel where PyVCP used to live:\n"
"GLADEVCP= -c example -u ./hitcounter.py ./manual-example.ui\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:339
msgid "The command line actually run by AXIS for the above is:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:342
#, no-wrap
msgid "halcmd loadusr -Wn example gladevcp -c example -x {XID} -u ./hitcounter.py ./manual-example.ui\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:348 src/gui/gladevcp.adoc:418
msgid ""
"The file specifiers like ./hitcounter.py, ./manual-example.ui, etc. indicate "
"that the files are located in the same directory as the INI file.  You might "
"have to copy them to you directory (alternatively, specify a correct "
"absolute or relative path to the file(s))"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:355
msgid ""
"The +[RS274NGC]SUBROUTINE_PATH=+ option is only set so the example panel "
"will find the Oword subroutine (oword.ngc) for the MDI Command widget. It "
"might not be needed in your setup. The relative path specifier ../../"
"nc_files/gladevcp_lib is constructed to work with directories copied by the "
"configuration picker and when using a run-in-place setup."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:357
#, no-wrap
msgid "Embedding as a Tab"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:361
msgid ""
"To do so, edit your INI file and add to the DISPLAY and HAL sections of INI "
"file as follows:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:368
#, no-wrap
msgid ""
"[DISPLAY]\n"
"# add GladeVCP panel as a tab next to Preview/DRO:\n"
"EMBED_TAB_NAME=GladeVCP demo\n"
"EMBED_TAB_COMMAND=halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x {XID} -u ./gladevcp/hitcounter.py ./gladevcp/manual-example.ui\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:372
#, no-wrap
msgid ""
"[HAL]\n"
"# HAL commands for GladeVCP components in a tab must be executed via POSTGUI_HALFILE\n"
"POSTGUI_HALFILE =  ./gladevcp/manual-example.hal\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:385
msgid ""
"Note the `halcmd loadusr` way of starting the tab command - this assures "
"that 'POSTGUI_HALFILE' will only be run after the HAL component is ready. In "
"rare cases you might run a command here which uses a tab but does not have "
"an associated HAL component. Such a command can be started without 'halcmd "
"loadusr', and this signifies to AXIS that it does not have to wait for a HAL "
"component since there is none."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:389
msgid ""
"When changing the component name in the above example, note that the names "
"used in `-Wn <component>` and `-c <component>` must be identical."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:393
msgid ""
"Try it out by running AXIS - there should be a new tab called 'GladeVCP "
"demo' near the DRO tab. Select that tab, you should see the example panel "
"nicely fit within AXIS."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:397
msgid ""
"Make sure the UI file is the last option passed to GladeVCP in both the "
"`GLADEVCP=` and `EMBED_TAB_COMMAND=` statements."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:398
#, no-wrap
msgid "Integrating into Touchy"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:401
msgid "To do add a GladeVCP tab to 'Touchy', edit your INI file as follows:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:408
#, no-wrap
msgid ""
"[DISPLAY]\n"
"# add GladeVCP panel as a tab\n"
"EMBED_TAB_NAME=GladeVCP demo\n"
"EMBED_TAB_COMMAND=gladevcp -c gladevcp -x {XID} -u ./hitcounter.py -H ./gladevcp-touchy.hal  ./manual-example.ui\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:420
msgid "Note the following differences to the AXIS tab setup:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:424
msgid ""
"The HAL command file is slightly modified since 'Touchy' does not use the "
"'halui' components so its signals are not available and some shortcuts have "
"been taken."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:425
msgid ""
"there is no 'POSTGUI_HALFILE=' INI option, but passing the HAL command file "
"on the 'EMBED_TAB_COMMAND=' line is ok"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:426
msgid "the 'halcmd loaduser -Wn ...' incantation is not needed."
msgstr ""

#. type: Title ==
#: src/gui/gladevcp.adoc:427
#, no-wrap
msgid "GladeVCP command line options"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:430
msgid "See also `man gladevcp`. These are the GladeVCP command line options:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:433
#, no-wrap
msgid "Usage: gladevcp [options] myfile.ui\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:435
#, no-wrap
msgid "Options:\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:438
#, no-wrap
msgid ""
"-h, --help::\n"
"    Show this help message and exit.\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:441
#, no-wrap
msgid ""
"-c NAME::\n"
"    Set component name to NAME. Default is base name of UI file.\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:444
#, no-wrap
msgid ""
"-d::\n"
"    Enable debug output\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:450
#, no-wrap
msgid ""
"-g GEOMETRY::\n"
"    Set geometry WIDTHxHEIGHT+XOFFSET+YOFFSET. Values are in pixel units,\n"
"    XOFFSET/YOFFSET is referenced from top left of screen.\n"
"    Use -g WIDTHxHEIGHT for just setting size or -g +XOFFSET+YOFFSET for just\n"
"    position\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:454
#, no-wrap
msgid ""
"-H FILE::\n"
"    Execute HAL statements from FILE with halcmd after the\n"
"    component is set up and ready\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:458
#, no-wrap
msgid ""
"-m MAXIMUM::\n"
"    Force panel window to maximize. Together with the -g geometry option\n"
"    one can move the panel to a second monitor and force it to use all of the screen\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:462
#, no-wrap
msgid ""
"-t THEME::\n"
"    Set gtk theme. Default is system theme. Different panels can have different themes.\n"
"    An example theme can be found in the http://wiki.linuxcnc.org/cgi-bin/wiki.pl?GTK_Themes[EMC Wiki].\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:466
#, no-wrap
msgid ""
"-x XID::\n"
"    Re-parent GladeVCP into an existing window XID instead of creating a\n"
"    new top level window\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:469
#, no-wrap
msgid ""
"-u FILE::\n"
"    Use File's as additional user defined modules with handlers\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:472
#, no-wrap
msgid ""
"-U USEROPT::\n"
"    pass USEROPTs to Python modules\n"
msgstr ""

#. type: Title ==
#: src/gui/gladevcp.adoc:474
#, no-wrap
msgid "Understanding the GladeVCP startup process"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:479
msgid ""
"The integration steps outlined above look a bit tricky, and they are. It "
"does therefore help to understand the startup process of LinuxCNC and how "
"this relates to GladeVCP."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:481
msgid "The normal LinuxCNC startup process does the following:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:483
msgid "The realtime environment is started."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:484
msgid "All HAL components are loaded."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:485
msgid "The HAL components are linked together through the .hal cmd scripts."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:486
msgid "`task`, `iocontrol` and eventually the user interface is started."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:487
msgid ""
"Pre-GladeVCP the assumption was: by the time the UI starts, all of HAL is "
"loaded, plumbed and ready to go."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:489
msgid "The introduction of GladeVCP brought the following issue:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:491
msgid "GladeVCP panels need to be embedded in a master GUI window setup."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:493
msgid ""
"GladeVCP panels need to be embedded in a master GUI window setup, e.g., "
"AXIS, or Touchy, Gscreen, or GMOCCAPY (embedded window or as an embedded "
"tab)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:494
msgid ""
"This requires the master GUI to run before the GladeVCP window can be hooked "
"into the master GUI."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:495
msgid ""
"However, GladeVCP is also a HAL component, and creates HAL pins of its own."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:497
msgid ""
"As a consequence, all HAL plumbing involving GladeVCP HAL pins as source or "
"destination must be run *after* the GUI has been set up."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:508
msgid ""
"This is the purpose of the `POSTGUI_HALFILE`. This INI option is inspected "
"by the GUIs. If a GUI detects this option, it runs the corresponding HAL "
"file after any embedded GladeVCP panel is set up. However, it does not check "
"whether a GladeVCP panel is actually used, in which case the HAL cmd file is "
"just run normally. So if you do NOT start GladeVCP through `GLADEVCP` or "
"`EMBED_TAB` etc, but later in a separate shell window or some other "
"mechanism, a HAL command file in `POSTGUI_HALFILE` will be executed too "
"early. Assuming GladeVCP pins are referenced herein, this will fail with an "
"error message indicating that the GladeVCP HAL component is not available."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:511
msgid ""
"So, in case you run GladeVCP from a separate shell window (i.e., not started "
"by the GUI in an embedded fashion):"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:515
msgid ""
"You cannot rely on the `POSTGUI_HALFILE` INI option causing the HAL commands "
"being run 'at the right point in time', so comment that out in the INI file."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:517
msgid ""
"Explicitly pass the HAL command file which refers to GladeVCP pins to "
"GladeVCP with the `-H <halcmd file>` option (see previous section)."
msgstr ""

#. type: Title ==
#: src/gui/gladevcp.adoc:518
#, no-wrap
msgid "HAL Widget reference"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:526
msgid ""
"GladeVCP includes a collection of Gtk widgets with attached HAL pins called "
"HAL Widgets, intended to control, display or otherwise interact with the "
"LinuxCNC HAL layer. They are intended to be used with the Glade user "
"interface editor. With proper installation, the HAL Widgets should show up "
"in Glade's 'HAL Python' widget group. Many HAL specific fields in the Glade "
"'General' section have an associated mouse-over tool tip."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:535
msgid ""
"HAL signals come in two variants, bits and numbers. Bits are off/on signals. "
"Numbers can be \"float\", \"s32\" or \"u32\". For more information on HAL "
"data types see the <<sec:hal-data,HAL manual>>. The GladeVCP widgets can "
"either display the value of the signal with an indicator widget, or modify "
"the signal value with a control widget. Thus there are four classes of "
"GladeVCP widgets that you can connect to a HAL signal. Another class of "
"helper widgets allow you to organize and label your panel."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:537
msgid "Widgets for indicating \"bit\" signals: <<gladevcp:hal-led,HAL_LED>>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:538
msgid ""
"Widgets for controlling \"bit\" signals: <<gladevcp:hal-buttons,HAL_Button "
"HAL_RadioButton HAL_CheckButton>>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:541
msgid ""
"Widgets for indicating \"number\" signals: <<gladevcp:hal-label,HAL_Label>>, "
"<<gladevcp:hal-progressbar,HAL_ProgressBar>>, <<gladevcp:hal-bars,HAL_HBar "
"and HAL_VBar>>, <<gladevcp:hal-meter,HAL_Meter>>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:543
msgid ""
"Widgets for controlling \"number\" signals: <<gladevcp:hal-spinbutton,"
"HAL_SpinButton>>, <<gladevcp:hal-scales,HAL_HScale and HAL_VScale>>, "
"<<gladevcp:jogwheel,Jog Wheel>>, <<gladevcp:speedcontrol,Speed Control>>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:544
msgid ""
"Sensitive control widgets: <<gladevcp:hal-table,State_Sensitive_Table "
"HAL_Table and HAL_HBox>>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:545
msgid "Tool Path preview: <<gladevcp:hal-gremlin,HAL_Gremlin>>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:547
msgid ""
"Widgets to show axis positions: <<gladevcp:dro_widget,DRO Widget>>, "
"<<gladevcp:combi_dro,Combi DRO Widget>>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:548
msgid ""
"Widgets for file handling: <<gladevcp:iconview,IconView File Selection>>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:549
msgid ""
"Widgets for display/edit of all axes offsets: <<gladevcp:offsetpage,"
"OffsetPage>>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:550
msgid ""
"Widgets for display/edit of all tool offsets: <<gladevcp:tooledit,Tooloffset "
"editor>>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:551
msgid ""
"Widget for G-code display and edit: <<gladevcp:hal-sourceview,"
"HAL_Sourceview>>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:552
msgid ""
"Widget for MDI input and history display: <<gladevcp:mdi-history,MDI "
"History>>"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:553
#, no-wrap
msgid "Widget and HAL pin naming"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:557
msgid ""
"Most HAL widgets have a single associated HAL pin with the same HAL name as "
"the widget (glade: General→Name)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:559
msgid "Exceptions to this rule currently are:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:561
msgid ""
"'HAL_Spinbutton' and 'HAL_ComboBox', which have two pins: a +<widgetname>-f+ "
"(float) and a +<widgetname>-s+ (s32) pin"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:562
msgid ""
"'HAL_ProgressBar', which has a +<widgetname>-value+ input pin, and a "
"+<widgetname>-scale+ input pin."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:563
#, no-wrap
msgid "Python attributes and methods of HAL Widgets"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:571
msgid ""
"HAL widgets are instances of GtKWidgets and hence inherit the methods, "
"properties and signals of the applicable GtkWidget class. For instance, to "
"figure out which GtkWidget-related methods, properties and signals a "
"'HAL_Button' has, lookup the description of http://www.pygtk.org/docs/pygtk/"
"class-gtkbutton.html[GtkButton] in the http://www.pygtk.org/docs/pygtk[PyGtk "
"Reference Manual]."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:578
msgid ""
"An easy way to find out the inheritance relationship of a given HAL widget "
"is as follows: run glade, place the widget in a window, and select it; then "
"choose the 'Signals' tab in the 'Properties' window. For example, selecting "
"a 'HAL_LED' widget, this will show that a 'HAL_LED' is derived from a "
"'GtkWidget', which in turn is derived from a 'GtkObject', and eventually a "
"'GObject'."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:580
msgid "HAL Widgets also have a few HAL-specific Python attributes:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:581
#, no-wrap
msgid "hal_pin"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:584
msgid ""
"the underlying HAL pin Python object in case the widget has a single pin type"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:584
#, no-wrap
msgid "hal_pin_s, hal_pin_f"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:588
msgid ""
"the s32 and float pins of the 'HAL_Spinbutton' and 'HAL_ComboBox' widgets - "
"note these widgets do not have a 'hal_pin' attribute!"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:588
#, no-wrap
msgid "hal_pin_scale"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:591
msgid ""
"the float input pin of 'HAL_ProgressBar' widget representing the maximum "
"absolute value of input."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:594
msgid ""
"The are several HAL-specific methods of HAL Widgets, but the only relevant "
"method is:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:595
#, no-wrap
msgid "<halpin>.get()"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:598
msgid ""
"Retrieve the value of the current HAL pin, where '<halpin>' is the "
"applicable HAL pin name listed above."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:599
#, no-wrap
msgid "Setting pin and widget values"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:606
msgid ""
"As a general rule, if you need to set a HAL output widget's value from "
"Python code, do so by calling the underlying Gtk 'setter' (e.g.  "
"+set_active()+, +set_value()+) - do not try to set the associated pin's "
"value by +halcomp[pinname] = value+ directly because the widget will not "
"take notice of the change!"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:613
msgid ""
"It might be tempting to 'set HAL widget input pins' programmatically.  Note "
"this defeats the purpose of an input pin in the first place - it should be "
"linked to, and react to signals generated by other HAL components. While "
"there is currently no write protection on writing to input pins in HAL "
"Python, this doesn't make sense. You might use `setp _pinname_ _value_` in "
"the associated HAL file for testing though."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:619
msgid ""
"It is perfectly OK to set an output HAL pin's value with +halcomp[pinname] = "
"value+ provided this HAL pin is not associated with a widget, that is, has "
"been created by the +hal_glib.GPin(halcomp.newpin(<name>,<type>,"
"<direction>))+ method (see <<gladevcp:programming,GladeVCP Programming>> for "
"an example)."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:621
#, no-wrap
msgid "The hal-pin-changed signal"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:631
msgid ""
"Event-driven programming means that the UI tells your code when \"something "
"happens\" - through a callback, like when a button was pressed. The output "
"HAL widgets (those which display a HAL pin's value) like LED, Bar, VBar, "
"Meter etc, support the 'hal-pin-changed' signal which may cause a callback "
"into your Python code when - well, a HAL pin changes its value. This means "
"there's no more need for permanent polling of HAL pin changes in your code, "
"the widgets do that in the background and let you know."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:634
msgid ""
"Here is an example how to set a +hal-pin-changed+ signal for a HAL_LED in "
"the Glade UI editor:"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:635
#, no-wrap
msgid "images/hal-pin-change-66.png"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:639
msgid ""
"The example in +configs/apps/gladevcp/complex+ shows how this is handled in "
"Python."
msgstr ""

#. type: Title ====
#: src/gui/gladevcp.adoc:641 src/gui/pyvcp.adoc:482 src/gui/qtdragon.adoc:312
#: src/man/man1/xhc-whb04b-6.1.adoc:272
#, no-wrap
msgid "Buttons"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:648
msgid ""
"This group of widgets are derived from various Gtk buttons and consists of "
"HAL_Button, HAL_ToggleButton, HAL_RadioButton and CheckButton widgets. All "
"of them have a single output BIT pin named identical to the widget. Buttons "
"have no additional properties compared to their base Gtk classes."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:651
msgid ""
"HAL_Button: instantaneous action, does not retain state. Important signal: "
"`pressed`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:653
msgid ""
"HAL_ToggleButton, HAL_CheckButton: retains on/off state. Important signal: "
"`toggled`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:655
msgid ""
"HAL_RadioButton: a one-of-many group. Important signal: `toggled` (per "
"button)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:656
msgid "Important common methods: `set_active()`, `get_active()`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:657
msgid "Important properties: `label`, `image`"
msgstr ""

#. .Buttons
#. type: Block title
#: src/gui/gladevcp.adoc:659
#, no-wrap
msgid "Check button"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:660
#, no-wrap
msgid "images/checkbutton.png"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:662
#, no-wrap
msgid "Radio buttons"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:663
#, no-wrap
msgid "images/radiobutton.png"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:665
#, no-wrap
msgid "Toggle button"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:666
#, no-wrap
msgid "images/button.png"
msgstr ""

#. type: delimited block =
#: src/gui/gladevcp.adoc:671
msgid "Defining radio button groups in Glade:"
msgstr ""

#. type: delimited block =
#: src/gui/gladevcp.adoc:673
msgid "Decide on default active button."
msgstr ""

#. type: delimited block =
#: src/gui/gladevcp.adoc:675
msgid ""
"In the other button's 'General→Group' select the default active button's "
"name in the 'Choose a Radio Button in this project' dialog."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:679
msgid ""
"See +configs/apps/gladevcp/by-widget/+ for a GladeVCP applications and UI "
"file for working with radio buttons."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:681
#, no-wrap
msgid "Scales"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:685
msgid ""
"HAL_HScale and HAL_VScale are derived from the GtkHScale and GtkVScale "
"respectively."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:686 src/gui/gladevcp.adoc:735
#: src/gui/gladevcp.adoc:1145
#, no-wrap
msgid "<widgetname>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:688 src/gui/gladevcp.adoc:707
#: src/gui/gladevcp.adoc:739 src/gui/gladevcp.adoc:741
msgid "out FLOAT pin"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:688 src/gui/gladevcp.adoc:707
#: src/gui/gladevcp.adoc:847 src/gui/gladevcp.adoc:1185
#, no-wrap
msgid "<widgetname>-s"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:690 src/gui/gladevcp.adoc:709
#: src/gui/gladevcp.adoc:737 src/gui/gladevcp.adoc:849
msgid "out s32 pin"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:696
msgid ""
"To make a scale useful in Glade, add an 'Adjustment' (General → Adjustment → "
"New or existing adjustment) and edit the adjustment object. It defines the "
"default/min/max/increment values. Also, set adjustment 'Page size' and 'Page "
"increment' to zero to avoid warnings."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:697
#, no-wrap
msgid "Example HAL_HScale"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:698
#, no-wrap
msgid "images/hscale.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:701
#, no-wrap
msgid "SpinButton"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:704
msgid "HAL SpinButton is derived from GtkSpinButton and holds two pins:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:705 src/gui/gladevcp.adoc:1183
#, no-wrap
msgid "<widgetname>-f"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:712
msgid ""
"To be useful, Spinbuttons need an adjustment value like scales, see above."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:713
#, no-wrap
msgid "Example SpinButton"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:714
#, no-wrap
msgid "images/spinbutton.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:717
#, no-wrap
msgid "Hal_Dial"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:723
#, no-wrap
msgid ""
"The hal_dial widget simulates a jogwheel or adjustment dial.\n"
"It can be operated with the mouse. You can just use the mouse wheel, while the mouse cursor is over the Hal_Dial widget, or you hold the left mouse button and move the cursor in circular direction to increase or degrease the counts.\n"
"By double clicking the left or right button the scale factor can be increased or decreased."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:725
#, no-wrap
msgid "Counterclockwise   = reduce counts\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:726
#, no-wrap
msgid "Clockwise          = increase counts\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:727
#, no-wrap
msgid "Wheel up           = increase counts\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:728
#, no-wrap
msgid "Wheel down         = reduce counts\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:729
#, no-wrap
msgid "left Double Click  = x10 scale\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:730
#, no-wrap
msgid "Right Double Click = /10 scale\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:734
msgid "`hal_dial` exports it's count value as HAL pins:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:737
#, no-wrap
msgid "<widgetname>-scaled"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:739
#, no-wrap
msgid "<widgetname>-delta-scaled"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:742 src/gui/gladevcp.adoc:850
#: src/gui/gladevcp.adoc:924 src/gui/gladevcp.adoc:1083
#: src/gui/gladevcp.adoc:1150 src/gui/gladevcp.adoc:1188
#: src/gui/gladevcp.adoc:1225 src/gui/gladevcp.adoc:1291
#: src/gui/gladevcp.adoc:1346 src/gui/gladevcp.adoc:1473
#: src/gui/gladevcp.adoc:1496 src/gui/gladevcp.adoc:1556
#: src/gui/gladevcp.adoc:1721 src/gui/gladevcp.adoc:1832
#: src/gui/gladevcp.adoc:1874 src/gui/gladevcp.adoc:1946
#: src/gui/gladevcp.adoc:2061 src/gui/qtvcp-libraries.adoc:790
#: src/gui/qtvcp-libraries.adoc:884 src/gui/qtvcp-widgets.adoc:382
#: src/gui/qtvcp-widgets.adoc:1374 src/gui/qtvcp-widgets.adoc:1643
#: src/gui/qtvcp-widgets.adoc:1731 src/gui/qtvcp-widgets.adoc:2141
#: src/gui/qtvcp-widgets.adoc:2297 src/gui/qtvcp-widgets.adoc:2796
#: src/gui/qtvcp-widgets.adoc:2883
#, no-wrap
msgid "Properties"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:745
msgid "`hal_dial` has the following properties:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:746 src/gui/gladevcp.adoc:857
#, no-wrap
msgid "cpr"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:749
#, no-wrap
msgid ""
"Sets the Counts per Revolution, allowed values are in the range from 25 to 360\n"
"default = 100"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:749 src/gui/gladevcp.adoc:860
#, no-wrap
msgid "show_counts"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:752
#, no-wrap
msgid ""
"Set this to False, if you want to hide the counts display in the middle of the widget.\n"
"default = True"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:752 src/gui/gladevcp.adoc:862
#: src/gui/gladevcp.adoc:1305
#, no-wrap
msgid "label"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:756
#, no-wrap
msgid ""
"Set the content of the label which may be shown over the counts value.\n"
"If the label given is longer than 15 Characters, it will be cut to 15 Characters.\n"
"default = blank"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:756
#, no-wrap
msgid "center_color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:759
#, no-wrap
msgid ""
"This allows one to change the color of the wheel. It uses a GDK color string.\n"
"default = #bdefbdefbdef (gray)"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:759
#, no-wrap
msgid "count_type_shown"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:762
#, no-wrap
msgid ""
"There are three counts available 0) Raw CPR counts 1) Scaled counts 2) Delta scaled counts.\n"
"default = 1"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:763
msgid ""
"count is based on the CPR selected - it will count positive and negative. It "
"is available as a s32 pin."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:765
#, no-wrap
msgid ""
"Scaled-count is CPR count times the scale - it can be positive and negative.\n"
"If you change the scale the output will immediately reflect the change. It is available as a FLOAT pin."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:768
#, no-wrap
msgid ""
"Delta-scaled-count is cpr count CHANGE, times scale.\n"
"If you change the scale, only the counts after that change will be scaled and then added to the current value.\n"
"It is available as a FLOAT pin."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:768
#, no-wrap
msgid "scale_adjustable"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:772
#, no-wrap
msgid ""
"Set this to False if you want to disallow scale changes by double clicking the widget.\n"
"If this is false the scale factor will not show on the widget.\n"
"default = True"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:772 src/gui/gladevcp.adoc:1154
#, no-wrap
msgid "scale"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:775
#, no-wrap
msgid ""
"Set this to scale the counts.\n"
"default = 1.0"
msgstr ""

#. type: Title ====
#: src/gui/gladevcp.adoc:776 src/gui/gladevcp.adoc:867
#: src/gui/gladevcp.adoc:981 src/gui/gladevcp.adoc:1417
#: src/gui/gladevcp.adoc:1527 src/gui/gladevcp.adoc:1615
#: src/gui/gladevcp.adoc:1750 src/gui/gladevcp.adoc:1841
#: src/gui/gladevcp.adoc:1883 src/gui/gladevcp.adoc:1970
#: src/gui/gladevcp.adoc:2025 src/gui/gladevcp.adoc:2076
#, no-wrap
msgid "Direct program control"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:779
msgid "There are ways to directly control the widget using Python."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:781 src/gui/gladevcp.adoc:1422
#: src/gui/gladevcp.adoc:1532 src/gui/gladevcp.adoc:1846
#: src/gui/gladevcp.adoc:1888 src/gui/gladevcp.adoc:1975
#: src/gui/gladevcp.adoc:2079
msgid "Using goobject to set the above listed properties:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:790
#, no-wrap
msgid ""
"[widget name].set_property(\"cpr\",int(value))\n"
"[widget name].set_property(\"show_counts, True)\n"
"[widget name].set_property(\"center_color\",gtk.gdk.Color('#bdefbdefbdef'))\n"
"[widget name].set_property('label', 'Test Dial 12345')\n"
"[widget name].set_property('scale_adjustable', True)\n"
"[widget name].set_property('scale', 10.5)\n"
"[widget name].set_property('count_type_shown', 0)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:793 src/gui/gladevcp.adoc:1440
#: src/gui/gladevcp.adoc:1853 src/gui/gladevcp.adoc:1896
msgid "There are Python methods:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:796
#, no-wrap
msgid ""
"`[widget name].get_value()`\n"
"Will return the counts value as a s32 integer"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:798
#, no-wrap
msgid ""
"`[widget name].get_scaled_value()`\n"
"Will return the counts value as a float"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:800
#, no-wrap
msgid ""
"`[widget name].get_delta_scaled_value()`\n"
"Will return the counts value as a float"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:802 src/gui/gladevcp.adoc:885
#, no-wrap
msgid ""
"`[widget name].set_label(\"string\")`\n"
"Sets the label content with \"string\""
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:804
msgid "There are two GObject signals emitted:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:807
#, no-wrap
msgid ""
"`count_changed`\n"
"Emitted when the widget's count changes eg. from being wheel scrolled."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:809
#, no-wrap
msgid ""
"`scale_changed`\n"
"Emitted when the widget's scale changes eg. from double clicking."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:811
msgid "Connect to these like so:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:815
#, no-wrap
msgid ""
"[widget name].connect('count_changed', [count function name])\n"
"[widget name].connect('scale_changed', [scale function name])\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:818
msgid "The callback functions would use this pattern:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:821
#, no-wrap
msgid "def [count function name](widget, count,scale,delta_scale):\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:824
msgid ""
"This will return: the widget, the current count, scale and delta scale of "
"that widget."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:825
#, no-wrap
msgid "Example Hal_Dial"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:826
#, no-wrap
msgid "images/Hal_Dial.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:829
#, no-wrap
msgid "Jog Wheel"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:834
msgid ""
"The `jogwheel` widget simulates a real jogwheel.  It can be operated with "
"the mouse. You can just use the mouse wheel, while the mouse cursor is over "
"the JogWheel widget, or you push the left mouse button and move the cursor "
"in circular direction to increase or degrease the counts."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:836
msgid "Counterclockwise = reduce counts"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:837
#, no-wrap
msgid "Clockwise        = increase counts\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:838
#, no-wrap
msgid "Wheel up         = increase counts\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:839
#, no-wrap
msgid "Wheel down       = reduce counts\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:842
msgid ""
"As moving the mouse the drag and drop way may be faster than the widget can "
"update itself, you may loose counts turning to fast.  It is recommended to "
"use the mouse wheel, and only for very rough movements the drag and drop way."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:846
msgid "`jogwheel` exports it's count value as HAL pin:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:853
msgid "`jogwheel` has the following properties:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:854 src/gui/gmoccapy.adoc:1172
#, no-wrap
msgid "size"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:857
msgid ""
"Sets the size in pixel of the widget, allowed values are in the range of 100 "
"to 500 default = 200"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:860
msgid ""
"Sets the Counts per Revolution, allowed values are in the range from 25 to "
"100 default = 40"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:862
msgid ""
"Set this to False, if you want to hide the counts display in the middle of "
"the widget."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:866
msgid ""
"Set the content of the label which may be shown over the counts value.  The "
"purpose is to give the user an idea about the usage of that jogwheel.  If "
"the label given is longer than 12 Characters, it will be cut to 12 "
"Characters."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:870 src/gui/gladevcp.adoc:984
#: src/gui/gladevcp.adoc:1420 src/gui/gladevcp.adoc:1530
#: src/gui/gladevcp.adoc:1844 src/gui/gladevcp.adoc:1886
#: src/gui/gladevcp.adoc:1973
msgid "There a couple ways to directly control the widget using Python."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:872 src/gui/gladevcp.adoc:986
#: src/gui/gladevcp.adoc:1618 src/gui/gladevcp.adoc:1753
msgid "Using GObject to set the above listed properties:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:877
#, no-wrap
msgid ""
"[widget name].set_property(\"size\",int(value))\n"
"[widget name].set_property(\"cpr\",int(value))\n"
"[widget name].set_property(\"show_counts, True)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:880 src/gui/gladevcp.adoc:1543
msgid "There are two Python methods:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:883
#, no-wrap
msgid ""
"`[widget name].get_value()`\n"
"Will return the counts value as integer"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:886
#, no-wrap
msgid "Example JogWheel"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:887
#, no-wrap
msgid "images/JogWheel.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:890
#, no-wrap
msgid "Speed Control"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:895
msgid ""
"`speedcontrol` is a widget specially made to control an adjustment with a "
"touch screen. It is a replacement to the normal scale widget which is "
"difficult to slide on a touch screen."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:899
msgid ""
"The value is controlled with two button to increase or decrease the value.  "
"The increment will change as long a button is pressed. The value of each "
"increment as well as the time between two changes can be set using the "
"widget properties."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:903
msgid "`speedcontrol` offers some HAL pin:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:904
#, no-wrap
msgid "<widgetname>-value"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:907
#, no-wrap
msgid ""
"out float pin\n"
"The shown value of the widget."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:907
#, no-wrap
msgid "<widgetname>-scaled-value"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:911
#, no-wrap
msgid ""
"out float pin\n"
"The shown value divided by the scale value, this is very useful, if the velocity is shown in units / min, but LinuxCNC expects it to be in units / second."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:911 src/gui/gladevcp.adoc:1147
#, no-wrap
msgid "<widgetname>-scale"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:915
#, no-wrap
msgid ""
"in float pin\n"
"The scale to apply.\n"
"Default is 60."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:915
#, no-wrap
msgid "<widgetname>-increase"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:919
#, no-wrap
msgid ""
"in bit pin\n"
"As long as the pin is true, the value will increase.\n"
"Very handy with connected momentary switch."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:919
#, no-wrap
msgid "<widgetname>-decrease"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:923
#, no-wrap
msgid ""
"in bit pin\n"
"As long as the pin is true, the value will decrease.\n"
"Very handy with connected momentary switch."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:927
msgid "`speedcontrol` has the following properties:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:928
#, no-wrap
msgid "height"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:933
#, no-wrap
msgid ""
"Integer\n"
"The height of the widget in pixel.\n"
"Allowed values are 24 to 96.\n"
"Default is 36."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:938
#, no-wrap
msgid ""
"Float\n"
"The start value to set.\n"
"Allowed values are in the range from 0.001 to 99999.0.\n"
"Default is 10.0."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:938
#, no-wrap
msgid "min"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:944
#, no-wrap
msgid ""
"Float\n"
"The min allowed value.\n"
"Allowed values are 0.0 to 99999.0.\n"
"Default is 0.0.\n"
"If you change this value, the increment will be reset to default, so it might be necessary to set afterwards a new increment."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:944
#, no-wrap
msgid "max"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:950
#, no-wrap
msgid ""
"Float\n"
"The max allowed value.\n"
"Allowed values are 0.001 to 99999.0.\n"
"Default is 100.0.\n"
"If you change this value, the increment will be reset to default, so it might be necessary to set afterwards a new increment."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:950
#, no-wrap
msgid "increment"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:955
#, no-wrap
msgid ""
"Float\n"
"Sets the applied increment per mouse click.\n"
"Allowed values are 0.001 to 99999.0 and -1.\n"
"Default is -1, resulting in 100 increments from min to max."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:955
#, no-wrap
msgid "inc_speed"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:960
#, no-wrap
msgid ""
"Integer\n"
"Sets the timer delay for the increment speed holding pressed the buttons.\n"
"Allowed values are 20 to 300.\n"
"Default is 100."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:960
#, no-wrap
msgid "unit"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:965
#, no-wrap
msgid ""
"String\n"
"Sets the unit to be shown in the bar after the value.\n"
"Any string is allowed.\n"
"Default is \"\"."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:965
#, no-wrap
msgid "color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:970
#, no-wrap
msgid ""
"Color\n"
"Sets the color of the bar.\n"
"Any hex color is allowed.\n"
"Default is \"#FF8116\"."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:970
#, no-wrap
msgid "template"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:975
#, no-wrap
msgid ""
"String\n"
"Text template to display the value. Python formatting is used.\n"
"Any allowed format.\n"
"Default is \"%.1f\"."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:975
#, no-wrap
msgid "do_hide_button"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:980
#, no-wrap
msgid ""
"Boolean\n"
"Whether to show or hide the increment an decrement button.\n"
"True or False.\n"
"Default = False."
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:992
#, no-wrap
msgid ""
"[widget name].set_property(\"do_hide_button\",bool(value))\n"
"[widget name].set_property(\"color\",\"#FF00FF\")\n"
"[widget name].set_property(\"unit\", \"mm/min\")\n"
"etc.\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:995
msgid "There are also Python methods to modify the widget:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:998
#, no-wrap
msgid "[widget name].set_adjustment(gtk-adjustment)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1003
msgid ""
"You can assign a existing adjustment to the control, that way it is easy to "
"replace existing sliders without many code changes. Be aware, that after "
"changing the adjustment you may need to set a new increment, as it will be "
"reset to its default (100 steps from MIN to MAX):"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1006
#, no-wrap
msgid ""
"`[widget name].get_value()`\n"
"Will return the counts value as float"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1008
#, no-wrap
msgid ""
"`[widget name].set_value(float(value))`\n"
"Sets the widget to the commanded value"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1010
#, no-wrap
msgid ""
"`[widget name].set_digits(int(value))`\n"
"Sets the digits of the value to be used"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1012
#, no-wrap
msgid ""
"`[widget name].hide_button(bool(value))`\n"
"Hide or show the button"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:1013
#, no-wrap
msgid "Example Speedcontrol"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:1014
#, no-wrap
msgid "images/SpeedControl.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1017 src/gui/pyvcp.adoc:351
#, no-wrap
msgid "Label"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1021
msgid ""
"`hal_label` is a simple widget based on GtkLabel which represents a HAL pin "
"value in a user-defined format."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1022
#, no-wrap
msgid "label_pin_type"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1026
msgid ""
"The pin's HAL type (0:s32, 1:float, 2:u32), see also the tooltip on "
"'General→HAL pin type '(note this is different from PyVCP which has three "
"label widgets, one for each type)."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1026 src/gui/gladevcp.adoc:1165
#: src/gui/gladevcp.adoc:1246 src/gui/gladevcp.adoc:1302
#, no-wrap
msgid "text_template"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1033
#, no-wrap
msgid ""
"Determines the text displayed - a Python format string to convert the pin value to text. Defaults to +%s+ (values are converted by the str() function) but may contain any legit as an argument to Pythons format() method.\n"
"Example: +Distance: %.03f+ will display the text and the pin value with 3 fractional digits padded with zeros for a FLOAT pin."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1035 src/gui/pyvcp.adoc:916
#, no-wrap
msgid "Containers"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1038
msgid "HAL_HideTable"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1039
msgid "HAL_Table"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1040
msgid "State_Sensitive_Table"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1041
msgid "HAL_HBox (deprecated)"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1044
#, no-wrap
msgid ""
"These containers are meant to be used to insensitize (grey out) or hide their children.\n"
"Insensitized children will not respond to input."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1045
#, no-wrap
msgid "*HAL_HideTable*"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1046
msgid ""
"Has one HAL BIT input pin which controls if it's child widgets are hidden or "
"not."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1047 src/gui/gladevcp.adoc:1056
#, no-wrap
msgid "*Pin*"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1049 src/gui/gladevcp.adoc:1057
#, no-wrap
msgid "`<Panel_basename>.<widgetname>`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1051
#, no-wrap
msgid ""
"in bit pin\n"
"If the pin is low then child widgets are visible which is the default state."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1052
#, no-wrap
msgid "*HAL_Table* and *HAL_Hbox*"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1054
msgid ""
"Have one HAL BIT input pin which controls if their child widgets are "
"sensitive or not. +"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1059
#, no-wrap
msgid ""
"in bit pin\n"
"If the pin is low then child widgets are inactive which is the default state."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1060
#, no-wrap
msgid "*State_Sensitive_Table*"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1066
#, no-wrap
msgid ""
"Responds to the state to LinuxCNC's interpreter. +\n"
"Optionally selectable to respond to 'must-be-all-homed', 'must-be-on' and 'must-be-idle'. +\n"
"You can combine them. It will always be insensitive at Estop. +\n"
"(Has no pin).\n"
" +\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1070
#, no-wrap
msgid ""
"**HAL_Hbox is deprecated - use HAL_Table.** +\n"
"If current panels use it, it won't fail. You just won't find it in the GLADE editor anymore. +\n"
"Future versions of GladeVCP may remove this widget completely and then you will need to update the panel.\n"
msgstr ""

#. type: delimited block =
#: src/gui/gladevcp.adoc:1075
msgid ""
"If you find some part of your GladeVCP application is 'grayed "
"out' (insensitive), see whether a HAL_Table pin is unset or unconnected."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1082
#, no-wrap
msgid ""
"The `hal_led` simulates a real indicator LED.\n"
"It has a single input BIT pin which controls it's state: ON or OFF."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1086
msgid "LEDs have several properties which control their look and feel:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1087
#, no-wrap
msgid "on_color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1091
#, no-wrap
msgid ""
"String defining ON color of LED.\n"
"May be any valid gdk.Color name.\n"
"Not working on Ubuntu 8.04."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1091
#, no-wrap
msgid "off_color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1096
#, no-wrap
msgid ""
"String defining OFF color of LED.\n"
"May be any valid gdk.Color name or special value `dark`. `dark` means that OFF color will be set to 0.4 value of ON color.\n"
"Not working on Ubuntu 8.04."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1096
#, no-wrap
msgid "pick_color_on, pick_color_off"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1100
#, no-wrap
msgid ""
"Colors for ON and OFF states.\n"
"These may be represented as `#RRRRGGGGBBBB` strings and are optional properties which have precedence over `on_color` and `off_color`."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1100
#, no-wrap
msgid "led_size"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1102
msgid "LED radius (for square - half of LED's side)"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1102
#, no-wrap
msgid "led_shape"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1105
#, no-wrap
msgid ""
"LED Shape.\n"
"Valid values are 0 for round, 1 for oval and 2 for square shapes."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1105
#, no-wrap
msgid "led_blink_rate"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1108
#, no-wrap
msgid ""
"If set and LED is ON then it's blinking.\n"
"Blink period is equal to \"led_blink_rate\" specified in milliseconds."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1108
#, no-wrap
msgid "create_hal_pin"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1111
#, no-wrap
msgid ""
"Select/deselect creation of a HAL pin to control the LED.\n"
"With no HAL pin created LED can be controlled with a Python function."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:1112 src/gui/gladevcp.adoc:1802
#: src/gui/qtvcp-widgets.adoc:2759
#, no-wrap
msgid "Signals"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1118
msgid ""
"As an input widget, LED also supports the +hal-pin-changed+ signal. If you "
"want to get a notification in your code when the LED's HAL pin was changed, "
"then connect this signal to a handler, for example +on_led_pin_changed+ and "
"provide the handler as follows:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:1123
#, no-wrap
msgid ""
"def on_led_pin_changed(self,hal_led,data=None):\n"
"    print(\"on_led_pin_changed() - HAL pin value:\",hal_led.hal_pin.get())\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1127
msgid ""
"This will be called at any edge of the signal and also during program start "
"up to report the current value."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:1128
#, no-wrap
msgid "Example LEDs"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:1129
#, no-wrap
msgid "images/leds.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1132
#, no-wrap
msgid "ProgressBar"
msgstr ""

#. type: delimited block =
#: src/gui/gladevcp.adoc:1138
#, no-wrap
msgid ""
"This widget might go away.\n"
"Use the HAL_HBar and HAL_VBar widgets instead."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1144
msgid ""
"The `HAL_ProgressBar` is derived from gtk.ProgressBar and has two float HAL "
"input pins:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1147
msgid "the current value to be displayed"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1149
msgid "the maximum absolute value of input"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1153
msgid "`HAL_ProgressBar` has the following properties:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1159
#, no-wrap
msgid ""
"Value scale.\n"
"Sets the maximum absolute value of input. Same as setting the <widgetname>.scale pin.\n"
"A float, range from -2^24 to +2^24."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1159
#, no-wrap
msgid "green_limit"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1161
msgid "Green zone lower limit"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1161
#, no-wrap
msgid "yellow_limit"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1163
msgid "Yellow zone lower limit"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1163
#, no-wrap
msgid "red_limit"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1165
msgid "Red zone lower limit"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1169
#, no-wrap
msgid ""
"Text template to display the current value of the +<widgetname>+ pin.\n"
"Python formatting may be used for dict +{\"value\":value}+."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:1170
#, no-wrap
msgid "Example HAL_ProgressBar"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:1171
#, no-wrap
msgid "images/progressbar2.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1174
#, no-wrap
msgid "ComboBox"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1178
msgid ""
"`HAL_ComboBox` is derived from gtk.ComboBox. It enables choice of a value "
"from a dropdown list."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1182
msgid "`HAL_ComboBox` exports two HAL pins:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1185
msgid "Current value, type FLOAT"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1187
msgid "Current value, type s32"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1191
msgid "`HAL_ComboBox` has the following property which can be set in Glade:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1192
#, no-wrap
msgid "column"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1197
#, no-wrap
msgid ""
"The column index.\n"
"Type s32.\n"
"Valid range from -1..100.\n"
"Defaults value -1."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1201
msgid ""
"In default mode this widgets sets the pins to the index of the chosen list "
"entry. So if your widget has three labels, it may only assume values 0,1 and "
"2."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1207
msgid ""
"In column mode (column > -1), the value reported is chosen from the "
"ListStore array as defined in Glade. So typically your widget definition "
"would have two columns in the ListStore , one with text displayed in the "
"dropdown, and an int or float value to use for that choice."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1211
msgid ""
"There's an example in +configs/apps/by-widget/combobox.{py,ui}+ which uses "
"column mode to pick a float value from the ListStore."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1214
msgid ""
"If you're confused like me about how to edit ComboBox ListStores and "
"CellRenderer, see http://www.youtube.com/watch?v=Z5_F-rW2cL8."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1216
#, no-wrap
msgid "Bars"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1220
msgid ""
"`HAL_Bar` and `HAL_VBar` widgets for horizontal and vertical bars "
"representing float values."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1224
msgid "`HAL_Bar` and `HAL_VBar` each have one input FLOAT HAL pin."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1228
msgid "`HAL_Bar` and `HAL_VBar` both bars have the following properties:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1229
#, no-wrap
msgid "invert"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1232
#, no-wrap
msgid ""
"Swap min and max direction.\n"
"An inverted HBar grows from right to left, an inverted VBar from top to bottom."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1232 src/gui/gladevcp.adoc:1295
#, no-wrap
msgid "min, max"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1235
msgid ""
"Minimum and maximum value of desired range.  It is not an error condition if "
"the current value is outside this range."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1235 src/gui/gladevcp.adoc:1371
#, no-wrap
msgid "show limits"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1237
msgid "Used to select/deselect the limits text on bar."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1237
#, no-wrap
msgid "zero"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1242
#, no-wrap
msgid ""
"Zero point of range.\n"
"If it's inside of min/max range then the bar will grow from that value and not from the left (or right) side of the widget.\n"
"Useful to represent values that may be both positive or negative."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1242
#, no-wrap
msgid "force_width, force_height"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1246
#, no-wrap
msgid ""
"Forced width or height of widget.\n"
"If not set then size will be deduced from packing or from fixed widget size and bar will fill whole area."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1249
#, no-wrap
msgid ""
"Like in Label, sets text format for min/max/current values.\n"
"Can be used to turn off value display."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1253
#, no-wrap
msgid ""
"Sets the bar display to the value entered.\n"
"Used only for testing in GLADE editor.\n"
"The value will be set from a HAL pin."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1253
#, no-wrap
msgid "target value"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1257
#, no-wrap
msgid ""
"Sets the target line to the value entered.\n"
"Used only for testing in GLADE editor.\n"
"The value will can be set in a Python function."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1257
#, no-wrap
msgid "target_width"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1259
msgid "Width of the line that marks the target value."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1259 src/gui/gladevcp.adoc:1309
#, no-wrap
msgid "bg_color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1261
msgid "Background (inactive) color of bar."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1261
#, no-wrap
msgid "target_color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1263
msgid "Color of the the target line."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1263 src/gui/gladevcp.adoc:1311
#, no-wrap
msgid "z0_color, z1_color, z2_color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1267 src/gui/gladevcp.adoc:1315
#, no-wrap
msgid ""
"Colors of different value zones.\n"
"Defaults are `green`, `yellow` and `red`.\n"
"For description of zones see `z*_border` properties."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1267 src/gui/gladevcp.adoc:1315
#, no-wrap
msgid "z0_border, z1_border"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1275
#, no-wrap
msgid ""
"Define up bounds of color zones.\n"
"By default only one zone is enabled. If you want more then one zone set `z0_border` and `z1_border` to desired values so zone 0 will fill from 0 to first border, zone 1 will fill from first to second border and zone 2 from last border to 1.\n"
"Borders are set as fractions.\n"
"Valid values range from 0 to 1."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:1276
#, no-wrap
msgid "Horizontal bar"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:1277
#, no-wrap
msgid "images/hal_hbar.png"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:1279
#, no-wrap
msgid "Vertical bar"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:1280
#, no-wrap
msgid "images/vscale.png"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:1283 src/gui/pyvcp.adoc:694
#, no-wrap
msgid "Meter"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1286
msgid ""
"`HAL_Meter` is a widget similar to PyVCP meter - it represents a float value."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1290
msgid "`HAL_Meter` has one input FLOAT HAL pin."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1294
msgid "HAL Meter has the following properties:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1298
#, no-wrap
msgid ""
"Minimum and maximum value of desired range.\n"
"It is not an error condition if the current value is outside this range."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1298
#, no-wrap
msgid "force_size"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1302
#, no-wrap
msgid ""
"Forced diameter of widget.\n"
"If not set then size will be deduced from packing or from fixed widget size, and meter will fill all available space with respect to aspect ratio."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1305
#, no-wrap
msgid ""
"Like in Label, sets text format for current value.\n"
"Can be used to turn off value display."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1307
msgid "Large label above center of meter."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1307
#, no-wrap
msgid "sublabel"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1309
msgid "Small label below center of meter."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1311
msgid "Background color of meter."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1322
#, no-wrap
msgid ""
"Define up bounds of color zones.\n"
"By default only one zone is enabled. If you want more then one zone set `z0_border` and `z1_border` to desired values so zone 0 will fill from min to first border, zone 1 will fill from first to second border and zone 2 from last border to max.\n"
"Borders are set as values in range min-max."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:1323
#, no-wrap
msgid "Example HAL Meters"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:1324
#, no-wrap
msgid "images/hal_meter.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1327
#, no-wrap
msgid "HAL_Graph"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1330
msgid "This widget is for plotting values over time."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1332
#, no-wrap
msgid "Gremlin tool path preview for .ngc files"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1341
msgid ""
"Gremlin is a plot preview widget similar to the AXIS preview window.  It "
"assumes a running LinuxCNC environment like AXIS or Touchy. To connect to "
"it, inspects the INI_FILE_NAME environment variable. Gremlin displays the "
"current .ngc file - it does monitor for changes and reloads the ngc file if "
"the file name in AXIS/Touchy changes. If you run it in a GladeVCP "
"application when LinuxCNC is not running, you might get a traceback because "
"the Gremlin widget can't find LinuxCNC status, like the current file name."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1345
msgid "Gremlin does not export any HAL pins."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1349
msgid "Gremlin has the following properties:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1350
#, no-wrap
msgid "show tool speed"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1353
#, no-wrap
msgid ""
"This displays the tool speed.\n"
"Default = true."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1353
#, no-wrap
msgid "show commanded"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1356
#, no-wrap
msgid ""
"This selects the DRO to use: commanded or actual values.\n"
"Default = true."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1356
#, no-wrap
msgid "use metric units"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1359
#, no-wrap
msgid ""
"This selects the DRO to use: metric or imperial units.\n"
"Default = true."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1359
#, no-wrap
msgid "show rapids"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1362
#, no-wrap
msgid ""
"This tells the plotter to show the rapid moves.\n"
"Default = true."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1362
#, no-wrap
msgid "show DTG"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1365
#, no-wrap
msgid ""
"This selects the DRO to display the distance-to-go value.\n"
"Default = true."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1365
#, no-wrap
msgid "show relative"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1368
#, no-wrap
msgid ""
"This selects the DRO to show values relative to user system or machine coordinates.\n"
"Default = true."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1368
#, no-wrap
msgid "show live plot"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1371
#, no-wrap
msgid ""
"This tells the plotter to draw or not.\n"
"Default = true."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1374
#, no-wrap
msgid ""
"This tells the plotter to show the machine's limits.\n"
"Default = true."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1374
#, no-wrap
msgid "show lathe radius"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1378
#, no-wrap
msgid ""
"This selects the DRO to display the X axis in radius or diameter, if in lathe mode (selectable in the INI file with LATHE = 1).\n"
"Default = true."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1378
#, no-wrap
msgid "show extents"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1381
#, no-wrap
msgid ""
"This tells the plotter to show the extents.\n"
"Default = true."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1381
#, no-wrap
msgid "show tool"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1384
#, no-wrap
msgid ""
"This tells the plotter to draw the tool.\n"
"Default = true."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1384
#, no-wrap
msgid "show program"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1386 src/gui/qtvcp-widgets.adoc:1343
#: src/hal/halmodule.adoc:342 src/hal/halmodule.adoc:346
#: src/hal/halmodule.adoc:350
#, no-wrap
msgid "TODO"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1386
#, no-wrap
msgid "use joints mode"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1389
#, no-wrap
msgid ""
"Used in non trivialkins machines (e.g., robots).\n"
"Default = false."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1389
#, no-wrap
msgid "grid size"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1392
#, no-wrap
msgid ""
"Sets the size of the grid (only visible in the X, Y and Z views).\n"
"Defaults to 0"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1392
#, no-wrap
msgid "use default mouse controls"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1397
#, no-wrap
msgid ""
"This disables the default mouse controls.\n"
"This is most useful when using a touchscreen as the default controls do not work well. You can programmatically add controls using Python and the handler file technique.\n"
"Default = true."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1397
#, no-wrap
msgid "view"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1400
#, no-wrap
msgid ""
"May be any of `x`, `y`, `y2` , `z`, `z2` , `p` (perspective).\n"
"Defaults to `z` view."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1400
#, no-wrap
msgid "enable_dro"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1404
#, no-wrap
msgid ""
"Type = boolean.\n"
"Whether to draw a DRO on the plot or not.\n"
"Default = true."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1404
#, no-wrap
msgid "mouse_btn_mode"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1407
#, no-wrap
msgid ""
"Type = integer.\n"
"Mouse button handling: leads to different functions of the button:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1408
#, no-wrap
msgid "0 = default: left rotate, middle move,   right zoom\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1409
#, no-wrap
msgid "1 =          left zoom,   middle move,   right rotate\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1410
#, no-wrap
msgid "2 =          left move,   middle rotate, right zoom\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1411
#, no-wrap
msgid "3 =          left zoom,   middle rotate, right move\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1412
#, no-wrap
msgid "4 =          left move,   middle zoom,   right rotate\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1413
#, no-wrap
msgid "5 =          left rotate, middle zoom,   right move\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1414
#, no-wrap
msgid "6 =          left move,   middle zoom,   right zoom\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1416
msgid ""
"Mode 6 is recommended for plasmas and lathes, as rotation is not needed for "
"such machines."
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:1437
#, no-wrap
msgid ""
"[widget name].set_property('view','P')\n"
"[widget name].set_property('metric_units',False)\n"
"[widget name].set_property('use_default_controls',False)\n"
"[widget name].set_property('enable_dro' False)\n"
"[widget name].set_property('show_program', False)\n"
"[widget name].set_property('show_limits', False)\n"
"[widget name].set_property('show_extents_option', False)\n"
"[widget name].set_property('show_live_plot', False)\n"
"[widget name].set_property('show_tool', False)\n"
"[widget name].set_property('show_lathe_radius',True)\n"
"[widget name].set_property('show_dtg',True)\n"
"[widget name].set_property('show_velocity',False)\n"
"[widget name].set_property('mouse_btn_mode', 4)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:1455
#, no-wrap
msgid ""
"[widget name].show_offsets = True\n"
"[widget name].grid_size = .75\n"
"[widget name].select_fire(event.x,event.y)\n"
"[widget name].select_prime(event.x,event.y)\n"
"[widget name].start_continuous_zoom(event.y)\n"
"[widget name].set_mouse_start(0,0)\n"
"[widget name].gremlin.zoom_in()\n"
"[widget name].gremlin.zoom_out()\n"
"[widget name].get_zoom_distance()\n"
"[widget name].set_zoom_distance(dist)\n"
"[widget name].clear_live_plotter()\n"
"[widget name].rotate_view(x,y)\n"
"[widget name].pan(x,y)\n"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1457 src/gui/gladevcp.adoc:1517
#, no-wrap
msgid "Hints"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1460
msgid ""
"If you set all the plotting options false but show_offsets true you get an "
"offsets page instead of a graphics plot."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1462
msgid ""
"If you get the zoom distance before changing the view then reset the zoom "
"distance, it's much more user friendly."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1464
msgid ""
"if you select an element in the preview, the selected element will be used "
"as rotation center point"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:1465
#, no-wrap
msgid "Gremlin Example"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:1466
#, no-wrap
msgid "images/gremlin.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1469
#, no-wrap
msgid "HAL_Offset"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1472
msgid "The `HAL_Offset` widget is used to display the offset of a single axis."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1476
msgid "`HAL_Offset` has the following properties:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1477 src/gui/gladevcp.adoc:1510
#, no-wrap
msgid "Joint Number"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1480 src/gui/gladevcp.adoc:1513
#, no-wrap
msgid ""
"Used to select which axis (technically which joint) is displayed.\n"
"On a trivialkins machine (mill, lathe, router) axis vrs joint number are:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1482 src/gui/gladevcp.adoc:1515
msgid "0:X 1:Y 2:Z 3:A 4:B 5:C 6:U 7:V 8:W"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1483 src/gui/gladevcp.adoc:1502
#: src/gui/gladevcp.adoc:1965
#, no-wrap
msgid "Text template for metric units"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1485 src/gui/gladevcp.adoc:1487
#: src/gui/gladevcp.adoc:1504 src/gui/gladevcp.adoc:1506
#: src/gui/gladevcp.adoc:1967 src/gui/gladevcp.adoc:1969
msgid ""
"You can use Python formatting to display the position with different "
"precision."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1485 src/gui/gladevcp.adoc:1504
#: src/gui/gladevcp.adoc:1967
#, no-wrap
msgid "Text template for imperial units"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1487 src/gui/gladevcp.adoc:1506
#, no-wrap
msgid "Reference Type"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1490
msgid "0:G5x 1:tool 2:G92 3:Rotation around Z"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1492
#, no-wrap
msgid "DRO widget"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1495
msgid "The DRO widget is used to display the current axis position."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1499 src/gui/gladevcp.adoc:1949
msgid "It has the following properties:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1500
#, no-wrap
msgid "Actual Position"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1502
msgid "select actual (feedback) position or commanded position."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1508
msgid "`absolute` <<sec:machine-coordinate-system,(machine origin)>>, or"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1509
msgid "`relative` (to current user coordinate origin - G5x), or"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1510
msgid "`distance-to-go` (relative to current user coordinate origin)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1517 src/gui/gladevcp.adoc:1570
msgid "Used to toggle the display units between metric and imperial."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1519
msgid "If you want the display to be right justified, set the X align to 1.0"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1521
msgid ""
"If you want different colors or size or text change the attributes in the "
"Glade editor (eg scale is a good way to change the size of the text)"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1524
msgid ""
"The background of the widget is actually see through - so if you place if "
"over an image the DRO numbers will show on top of it with no background. "
"There is a special technique to do this. See the animated function diagrams "
"below."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1526
msgid ""
"The DRO widget is a modified gtk label widget. As such much or what can be "
"done to a gtk label can be done to DRO widget."
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:1540
#, no-wrap
msgid ""
"[widget name].set_property(\"display_units_mm\",True)\n"
"[widget name].set_property(\"actual\",True)\n"
"[widget name].set_property(\"mm_text_template\",\"%f\")\n"
"[widget name].set_property(\"imperial_text_template\",\"%f\")\n"
"[widget name].set_property(\"Joint_number\",3)\n"
"[widget name].set_property(\"reference_type\",3)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:1547
#, no-wrap
msgid ""
"[widget name].set_dro_inch()\n"
"[widget name].set_dro_metric()\n"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1550
#, no-wrap
msgid "Combi_DRO widget"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1555
#, no-wrap
msgid ""
"The `Combi_DRO` widget is used to display the current, the relative axis position and the distance to go in one DRO.\n"
"By clicking on the DRO the Order of the DRO will toggle around.\n"
"In Relative Mode the actual coordinate system will be displayed."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1559
msgid "`Combi_DRO` has the following properties:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1563
#, no-wrap
msgid ""
"Used to select which axis (technically which joint) is displayed.\n"
"On a trivialkins machine (mill, lathe, router) axis vrs. joint number are:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1565
msgid "0:X 1:Y 2:Z etc."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1566
#, no-wrap
msgid "actual"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1568
msgid "Select actual (feedback) or commanded position."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1568
#, no-wrap
msgid "metric_units"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1570
#, no-wrap
msgid "auto_units"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1574
#, no-wrap
msgid ""
"Units will toggle between metric and imperial according to the active G-code being G20 or G21.\n"
"Default is TRUE."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1577
#, no-wrap
msgid ""
"Whether to display position as diameter or radius.\n"
"In diameter mode the DRO will display the joint value multiplied by 2."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1577
#, no-wrap
msgid "mm_text_template"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1580
#, no-wrap
msgid ""
"You can use Python formatting to display the position with different precision.\n"
"Default is \"%10.3f\"."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1580
#, no-wrap
msgid "imperial_text_template"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1583
#, no-wrap
msgid ""
"You can use Python formatting to display the position with different precision.\n"
"Default is \"%9.4f\"."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1583
#, no-wrap
msgid "homed_color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1586
#, no-wrap
msgid ""
"The foreground color of the DRO numbers if the joint is homed.\n"
"Default is green."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1586
#, no-wrap
msgid "unhomed_color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1589
#, no-wrap
msgid ""
"The foreground color of the DRO numbers if the joint is not homed.\n"
"Default is red."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1589
#, no-wrap
msgid "abs_color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1592
#, no-wrap
msgid ""
"The background color of the DRO, if main DRO shows absolute coordinates.\n"
"Default is blue."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1592
#, no-wrap
msgid "rel_color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1595
#, no-wrap
msgid ""
"The background color of the DRO, if main DRO shows relative coordinates.\n"
"Default is black."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1595
#, no-wrap
msgid "dtg_color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1598
#, no-wrap
msgid ""
"The background color of the DRO, if main DRO shows distance to go.\n"
"Default is yellow."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1598
#, no-wrap
msgid "font_size"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1602
#, no-wrap
msgid ""
"The font size of the big numbers, the small ones will be 2.5 times smaller.\n"
"The value must be an integer in the range of 8 to 96.\n"
"Default is 25."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1602
#, no-wrap
msgid "toggle_readout"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1607
#, no-wrap
msgid ""
"A left mouse click will toggle the DRO readout through the different modes [\"Rel\", \"Abs\", \"DTG\"].\n"
"By unchecking the box you can disable that behavior. The toggling can still be done with `[widget name].toggle_readout()`.\n"
"Value must be boolean.\n"
"Default is TRUE."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1607
#, no-wrap
msgid "cycle_time"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1614
#, no-wrap
msgid ""
"The time the DRO waits between two polls.\n"
"this setting should only be changed if you use more than 5 DRO at the same time, i.e., on a 6 axis config, to avoid, that the DRO slows down the main application too much.\n"
"The value must be an integer in the range of 100 to 1000. FIXME unit=ms ?\n"
"Default is 150."
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:1621
#, no-wrap
msgid "[widget name].set_property(property, value)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1624
msgid "There are several Python methods to control the widget:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1629
#, no-wrap
msgid ""
"`[widget name].set_to_inch(state)`\n"
"Sets the DRO to show imperial units.\n"
"`state` = boolean (True or False)\n"
"Default is FIXME."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1633
#, no-wrap
msgid ""
"`[widget name].set_auto_units(state)`\n"
"If True the DRO will change units according to active G-code (G20 / G21).\n"
"`state` = boolean (True or False)\n"
"Default is True."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1638
#, no-wrap
msgid ""
"`[widget name].set_to_diameter(state)`\n"
"If True the DRO will show the diameter not the radius, i.e., the axis value multiplied by 2 (specially needed for lathes).\n"
"`state` = boolean (True or False)\n"
"Default is False."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1640
#, no-wrap
msgid ""
"`[widget name].toggle_readout()`\n"
"Toggles the order of the DRO in the widget."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1644
#, no-wrap
msgid ""
"`[widget name].change_axisletter(letter)`\n"
"Changes the automatically given axis letter.\n"
"Very useful to change an lathe DRO from 'X' to 'R' or 'D'.\n"
"`letter` = string"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1649
#, no-wrap
msgid ""
"`[widget name].get_order()`\n"
"Returns the order of the DRO in the widget mainly used to maintain them consistent.\n"
"The order will also be transmitted with the clicked signal.\n"
"Returns a list containing the order."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1652
#, no-wrap
msgid ""
"`[widget name].set_order(order)`\n"
"Sets the order of the DRO, mainly used to maintain them consistent.\n"
"`order` = list object, must be one of:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1653
msgid "`[\"Rel\", \"Abs\", \"DTG\"]` (default)"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1654
msgid "`[\"DTG\", \"Rel\", \"Abs\"]`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1655
msgid "`[\"Abs\", \"DTG\", \"Rel\"]`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1659
#, no-wrap
msgid ""
"`[widget name].get_position()`\n"
"Returns the position of the DRO as a list of floats.\n"
"The order is independent of the order shown on the DRO and will be given as `[Absolute , relative , DTG]`. +"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1661
msgid ""
"`Absolute` = the machine coordinates, depends on the actual property will "
"give actual or commanded position. +"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1662
msgid "`Relative` = will be the coordinates of the actual coordinate system. +"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1665
#, no-wrap
msgid ""
"`DTG` = the distance to go.\n"
"Will mostly be 0, as this function should not be used while the machine is moving, because of time delays."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1667 src/gui/gladevcp.adoc:1805
msgid "The widget will emit the following signals:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1671
#, no-wrap
msgid ""
"`clicked`\n"
"This signal is emitted, when the user has clicked on the Combi_DRO widget.\n"
"It will send the following data:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1673 src/gui/gladevcp.adoc:1684
#: src/gui/gladevcp.adoc:1692
#, no-wrap
msgid ""
"`widget` = widget object\n"
"The widget object that sends the signal."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1675
#, no-wrap
msgid ""
"`joint_number` = integer\n"
"The joint number of the DRO, where '0:X  1:Y  2:Z  etc'."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1679
#, no-wrap
msgid ""
"`order` = list object\n"
"The order of the DRO in that widget.\n"
"The order may be used to set other Combi_DRO widgets to the same order with `[widget name].set_order(order)`."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1682
#, no-wrap
msgid ""
"`units_changed`\n"
"This signal is emitted if the DRO units are changed.\n"
"It will send the following data:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1687
#, no-wrap
msgid ""
"`metric_units` = boolean\n"
"True if the DRO does display metric units, False in case of imperial display."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1690
#, no-wrap
msgid ""
"`system_changed`\n"
"This signal is emitted if the DRO units are changed.\n"
"It will send the following data:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1697
#, no-wrap
msgid ""
"`system` = string\n"
"The actual coordinate system. Will be one of G54 G55 G56 G57 G58 G59 G59.1 G59.2 G59.3 or Rel if non has been selected at all, what will only happen in Glade with no LinuxCNC running."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1699
msgid ""
"There are some information you can get through commands, which may be of "
"interest for you:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1702
#, no-wrap
msgid ""
"`[widget name].system`\n"
"The actual system, as mentioned in the system_changed signal."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1704
#, no-wrap
msgid ""
"`[widget name].homed`\n"
"True if the joint is homed."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1706
#, no-wrap
msgid ""
"`[widget name].machine_units`\n"
"0 if Imperial, 1 if Metric."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:1707
#, no-wrap
msgid "Example: Three Combi_DRO in a window"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:1708
#, no-wrap
msgid "images/combi_dro.png"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:1714
#, no-wrap
msgid ""
"X = Relative Mode\n"
"Y = Absolute Mode\n"
"Z = DTG Mode\n"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1717
#, no-wrap
msgid "IconView (File Select)"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1720
msgid ""
"This is a touch screen friendly widget to select a file and to change "
"directories."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1724
msgid "`IconView` widget has the following properties:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1725
#, no-wrap
msgid "icon_size"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1729
#, no-wrap
msgid ""
"Sets the size of the displayed icon.\n"
"Allowed values are integers in the range from 12 to 96.\n"
"Default is 48."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1729
#, no-wrap
msgid "start_dir"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1733
#, no-wrap
msgid ""
"Sets the directory to start in when the widget is shown first time.\n"
"Must be a string, containing a valid directory path.\n"
"Default is \"/\"."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1733
#, no-wrap
msgid "jump_to_dir"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1738
#, no-wrap
msgid ""
"Sets the \"jump to\" directory, which is selected by the corresponding button in the bottom button list (the 5th button counting from the left).\n"
"Must be a string, containing a valid directory path.\n"
"Default is \"\\~\"."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1738
#, no-wrap
msgid "filetypes"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1742
#, no-wrap
msgid ""
"Sets the file filter for the objects to be shown.\n"
"Must be a string containing a comma separated list of extensions to be shown.\n"
"Default is \"ngc,py\"."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1742
#, no-wrap
msgid "sortorder"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1745
#, no-wrap
msgid ""
"Sets the sorting order of the displayed icon.\n"
"Must be an integer value from 0 to 3, where: +"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1746
msgid "0 = ASCENDING (sorted according to file names)"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1747
msgid "1 = DESCENDING (sorted according to file names)"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1748
msgid "2 = FOLDERFIRST (show the folders first, then the files), default"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1749
msgid "3 = FILEFIRST (show the files first, then the folders)"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:1756
#, no-wrap
msgid "[widget name].set_property(property,Value)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1759 src/gui/gladevcp.adoc:1985
#: src/gui/gladevcp.adoc:2028
msgid "There are Python methods to control the widget:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1766
#, no-wrap
msgid ""
"`[widget name].show_buttonbox(state)`\n"
"If False the bottom button box will be hidden.\n"
"This is helpful in custom screens, with special buttons layouts to not alter the layout of the GUI. Good example for that is gmoccapy.\n"
"`state` = boolean (True or False).\n"
"Default is True."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1771
#, no-wrap
msgid ""
"`[widget name].show_filelabel(state)`\n"
"If True the file label (between the IconView window and the bottom button box) will be shown.\n"
"Hiding this label may save place, but showing it is very useful for debugging reasons.\n"
"`state` = boolean (True or False).\n"
"Default is True."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1775
#, no-wrap
msgid ""
"`[widget name].set_icon_size(iconsize)`\n"
"Sets the icon size.\n"
"Must be an integer in the range from 12 to 96.\n"
"Default = 48."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1778
#, no-wrap
msgid ""
"`[widget name].set_directory(directory)`\n"
"Allows to set an directory to be shown.\n"
"`directory` = string (a valid file path)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1783
#, no-wrap
msgid ""
"`[widget name].set_filetypes(filetypes)`\n"
"Sets the file filter to be used.\n"
"Only files with the given extensions will be shown.\n"
"`filetypes` = string containing a comma separated list of extensions.\n"
"Default = \"ngc,py\"."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1785
#, no-wrap
msgid ""
"`[widget name].get_selected()`\n"
"Returns the path of the selected file, or `None` if a directory has been selected."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1788
#, no-wrap
msgid ""
"`[widget name].refresh_filelist()`\n"
"Refreshes the filelist.\n"
"Needed if you add a file without changing the directory."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1791
msgid ""
"If the button box has been hidden, you can reach the functions of this "
"button through it's clicked signals like so:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:1800
#, no-wrap
msgid ""
"[widget name].btn_home.emit(\"clicked\")\n"
"[widget name].btn_jump_to.emit(\"clicked\")\n"
"[widget name].btn_sel_prev.emit(\"clicked\")\n"
"[widget name].btn_sel_next.emit(\"clicked\")\n"
"[widget name].btn_get_selected.emit(\"clicked\")\n"
"[widget name].btn_dir_up.emit(\"clicked\")\n"
"[widget name].btn_exit.emit(\"clicked\")\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1810
#, no-wrap
msgid ""
"`selected`\n"
"This signal is emitted when the user selects an icon.\n"
"It will return a string containing a file path if a file has been selected, or `None` if a directory has been selected."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1816
#, no-wrap
msgid ""
"`sensitive`\n"
"This signal is emitted when the buttons change their state from sensitive to not sensitive or vice versa.\n"
"This signal is useful to maintain surrounding GUI synchronized with the button of the widget. See gmoccapy as example.\n"
"It will return the **buttonname** and the new **state**: +"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1818
msgid ""
"`buttonname` is one of `btn_home`, `btn_dir_up`, `btn_sel_prev`, "
"`btn_sel_next`, `btn_jump_to` or `btn_select`."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1819
msgid "`state` is a boolean and will be True or False."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1822
#, no-wrap
msgid ""
"`exit`\n"
"This signal is emitted when the exit button has been pressed to close the IconView.\n"
"Mostly needed if the application is started as stand alone."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:1823
#, no-wrap
msgid "Iconview Example"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:1824
#, no-wrap
msgid "images/iconview.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1827
#, no-wrap
msgid "Calculator widget"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1831
#, no-wrap
msgid ""
"This is a simple calculator widget, that can be used for numerical input.\n"
"You can preset the display and retrieve the result or that preset value. +"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1835
msgid "`calculator` has the following properties:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1836
#, no-wrap
msgid "Is editable"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1838
msgid "This allows the entry display to be typed into from a keyboard."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1838
#, no-wrap
msgid "Set Font"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1840
msgid "This allows you to set the font of the display."
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:1850
#, no-wrap
msgid ""
"[widget name].set_property(\"is_editable\",True)\n"
"[widget name].set_property(\"font\",\"sans 25\")\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1856
#, no-wrap
msgid ""
"`[widget name].set_value(2.5)`\n"
"This presets the display and is recorded."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1857
msgid "`[widget name].set_font(\"sans 25\")`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1858
msgid "`[widget name].set_editable(True)`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1860
#, no-wrap
msgid ""
"`[widget name].get_value()`\n"
"Returns the calculated value - a float."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1861
msgid "`[widget name].set_editable(True)` +"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1863
#, no-wrap
msgid ""
"`[widget name].get_preset_value()`\n"
"Returns the recorded value: a float."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1865
#, no-wrap
msgid "Tooleditor widget"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1871
#, no-wrap
msgid ""
"This is a `tooleditor` widget for displaying and modifying a tool file.\n"
"If in lathe mode, it will display wear offsets and tool offsets separately.\n"
"Wear offsets are designated by tool number above 10000 (Fanuc style).\n"
"It checks the current file once a second to see if LinuxCNC updated it."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1873
msgid "LinuxCNC requires remapping of tool calls to actually use wear offsets."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1877
msgid "`tooleditor` has the following properties:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1878 src/gui/gladevcp.adoc:1950
#, no-wrap
msgid "Hidden Columns"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1882
#, no-wrap
msgid ""
"This will hide the given columns.\n"
"The columns are designated (in order) as such: `s,t,p,x,y,z,a,b,c,u,v,w,d,i,j,q`.\n"
"You can hide any number of columns including the select and comments."
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:1891
#, no-wrap
msgid "[widget name].set_properties('hide_columns','uvwijq')\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1894
msgid "This would hide the uvwij and q columns and show all others."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1899
#, no-wrap
msgid ""
"`[widget name].set_visible(\"ijq\",False)`\n"
"Would hide ij and Q columns and leave the rest as they were."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1901
#, no-wrap
msgid ""
"`[widget name].set_filename(path_to_file)`\n"
"Sets and loads the tool file."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1903
#, no-wrap
msgid ""
"`[widget name].reload(None)`\n"
"Reloads the current toolfile."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1908
#, no-wrap
msgid ""
"`[widget name].set_font('sans 16,tab='1')`\n"
"Sets the (Pango) font on the Tab, column title, and tool data.\n"
"The `all_offsets`, `wear_offsets`, `tool_offsets` can be set at the same time by adding 1, 2 and/or 3 to the tab string.\n"
"Default is all the tabs set."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1913
#, no-wrap
msgid ""
"`[widget name].set_title_font('sans 16,tab='1')`\n"
"Sets the (Pango) font on the column titles only.\n"
"The `all_offsets`, `wear_offsets`, `tool_offsets` can be set at the same time by adding 1, 2 and/or 3 to the tab string.\n"
"Default is all the tabs set."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1918
#, no-wrap
msgid ""
"`[widget name].set_tab_font('sans 16,tab='1')`\n"
"Sets the (Pango) font on the tabs only.\n"
"The `all_offsets`, `wear_offsets`, `tool_offsets` can be set at the same time by adding 1, 2 and/or 3 to the tab string.\n"
"Default is all the tabs set."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1920
#, no-wrap
msgid ""
"`[widget name].set_col_visible(\"abcUVW\", False, tab='1')`\n"
"This would hide (False) the abcuvw columns on tab 1 (all_offsets)"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1922
#, no-wrap
msgid ""
"`[widget name].set_lathe_display(value)`\n"
"Hides or shows the wear and tool offset tabs used for lathes"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1926
#, no-wrap
msgid ""
"`[widget name].get_toolinfo(toolnum)`\n"
"Returns the tool information array of the requested toolnumber or current tool if no tool number is specified.\n"
"Returns None if tool not found in table or if there is no current tool."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1929
#, no-wrap
msgid ""
"`[widget name].hide_buttonbox(self, True)`\n"
"'Convenience' method to hide buttons.\n"
"You must call this after show_all()."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1931
#, no-wrap
msgid ""
"`[widget name].get_selected_tool()`\n"
"Return the user selected (highlighted) tool number."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1933
#, no-wrap
msgid ""
"`[widget name].set_selected_tool(toolnumber)`\n"
"Selects (highlights) the requested tool."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:1934
#, no-wrap
msgid "Tooleditor Example"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:1935
#, no-wrap
msgid "images/gtk-tooledit.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:1938
#, no-wrap
msgid "Offsetpage"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1945
#, no-wrap
msgid ""
"The `Offsetpage` widget is used to display/edit the offsets of all the axes.\n"
"It has convenience buttons for zeroing G92 and Rotation-Around-Z offsets.\n"
"It will only allow you to select the edit mode when the machine is on and idle.\n"
"You can directly edit the offsets in the table at this time. Unselect the edit button to allow the `OffsetPage` to reflect changes."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1954
#, no-wrap
msgid ""
"A no-space list of columns to hide. The columns are designated (in order) as such: `xyzabcuvwt`.\n"
"You can hide any of the columns."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1954
#, no-wrap
msgid "Hidden Rows"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1958
#, no-wrap
msgid ""
"A no-space list of rows to hide.\n"
"The rows are designated (in order) as such: `0123456789abc`.\n"
"You can hide any of the rows."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1958
#, no-wrap
msgid "Pango Font"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1960
msgid "Sets text font type and size."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1960
#, no-wrap
msgid "HighLight color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1962
msgid "When editing this is the highlight color."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:1962
#, no-wrap
msgid "Active color"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1965
msgid ""
"When `OffsetPage` detects an active user coordinate system it will use this "
"color for the text."
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:1982
#, no-wrap
msgid ""
"[widget name].set_property(\"highlight_color\",gdk.Color('blue'))\n"
"[widget name].set_property(\"foreground_color\",gdk.Color('black'))\n"
"[widget name].set_property(\"hide_columns\",\"xyzabcuvwt\")\n"
"[widget name].set_property(\"hide_rows\",\"123456789abc\")\n"
"[widget name].set_property(\"font\",\"sans 25\")\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1987
msgid ""
"`[widget name].set_filename(\"../../../configs/sim/gscreen/gscreen_custom/"
"sim.var\")`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1988
msgid "`[widget name].set_col_visible(\"Yabuvw\",False)`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1989
msgid "`[widget name].set_row_visible(\"456789abc\",False)`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1990
msgid "`[widget name].set_to_mm()`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1991
msgid "`[widget name].set_to_inch()`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1992
msgid "`[widget name].hide_button_box(True)`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1993
msgid "`[widget name].set_font(\"sans 20\")`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1994
msgid "`[widget name].set_highlight_color(\"violet\")`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1995
msgid "`[widget name].set_foreground_color(\"yellow\")`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:1999
#, no-wrap
msgid ""
"`[widget name].mark_active(\"G55\")`\n"
"Allows you to directly set a row to highlight, e.g., in case you wish to use your own navigation controls. See the chapter on <<cha:gmoccapy,GMOCCAPY>>."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2001
#, no-wrap
msgid ""
"`[widget name].selection_mask = (\"Tool\",\"Rot\",\"G5x\")`\n"
"These rows are NOT selectable in edit mode."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2005
#, no-wrap
msgid ""
"`[widget name].set_names([['G54','Default'],[\"G55\",\"Vice1\"],['Rot','Rotational']])`\n"
"This allows you to set the text of the 'T' column of each/any row.\n"
"This is a list of a list of offset-name/user-name pairs.\n"
"The default text is the same as the offset name."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2009
#, no-wrap
msgid ""
"`[widget name].get_names()`\n"
"This returns a list of a list of row-keyword/user-name pairs.\n"
"The user name column is editable, so saving this list is user friendly.\n"
"See `set_names` above."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:2010
#, no-wrap
msgid "Offsetpage Example"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:2011
#, no-wrap
msgid "images/offsetpage.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2014
#, no-wrap
msgid "HAL_sourceview widget"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2019
msgid ""
"This is for displaying and simple editing of G-code.  It looks for `.ngc` "
"highlighting specs in `~/share/gtksourceview-2.0/language-specs/`.  The "
"current running line will be highlighted."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2021
msgid "With external Python glue code it can:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2023
msgid "Search for text, undo and redo changes."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2024
msgid "Be used for program line selection."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2031
#, no-wrap
msgid ""
"`[widget name].redo()`\n"
"Redo one level of changes."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2033
#, no-wrap
msgid ""
"`[widget name].undo()`\n"
"Undo one level of changes"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2036
#, no-wrap
msgid ""
"`[widget name].text_search(direction=True,mixed_case=True,text='G92')`\n"
"Searches forward (direction = True) or backward,\n"
"Searches with mixed case (mixed_case = True) or exact match"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2039
#, no-wrap
msgid ""
"`[widget name].set_line_number(linenumber)`\n"
"Sets the line to highlight.\n"
"Uses the sourceview line numbers."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2041
#, no-wrap
msgid ""
"`[widget name].get_line_number()`\n"
"Returns the currently highlighted line."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2043
#, no-wrap
msgid ""
"`[widget name].line_up()`\n"
"Moves the highlighted line up one line."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2045
#, no-wrap
msgid ""
"`[widget name].line_down()`\n"
"Moves the highlighted line down one line."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2048
#, no-wrap
msgid ""
"`[widget name].load_file('filename')`\n"
"Loads a file.\n"
"Using None (not a filename string) will reload the same program."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2050
#, no-wrap
msgid ""
"`[widget name].get_filename()`\n"
"FIXME description"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:2051
#, no-wrap
msgid "Sourceview Example"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:2052
#, no-wrap
msgid "images/hal_sourceview.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2055
#, no-wrap
msgid "MDI history"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2060
#, no-wrap
msgid ""
"This is for displaying and entering MDI codes.\n"
"It will be automatically grayed out when MDI is not available, eg during E-stop and program running."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:2063
#, no-wrap
msgid "font_size_tree"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2067
#, no-wrap
msgid ""
"Integer value between 8 and 96.\n"
"Will modify the default font size of the treeview to the selected value."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:2067
#, no-wrap
msgid "font_size_entry"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2070
#, no-wrap
msgid ""
"Integer value between 8 and 96.\n"
"Will modify the default font size of the entry to the selected value. +"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:2070
#, no-wrap
msgid "use_double_click"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2075
#, no-wrap
msgid ""
"Boolean, True enables the mouse double click feature and a double click on an entry will submit that command.\n"
"It is not recommended to use this feature on real machines, as a double click on a wrong entry may cause dangerous situations"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2084
#, no-wrap
msgid ""
"[widget name].set_property(\"font_size_tree\",10)\n"
"[widget name].set_property(\"font_size_entry\",20)\n"
"[widget name].set_property(\"use_double_click\",False)\n"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2086
#, no-wrap
msgid "Animated function diagrams: HAL widgets in a bitmap"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2095
msgid ""
"For some applications it might be desirable to have a background image - "
"like a functional diagram - and position widgets at appropriate places in "
"that image.  A good combination is setting a bitmap background image, like "
"from a .png file, making the GladeVCP window fixed-size, and use the Glade "
"Fixed widget to position widgets on this image.  The code for the below "
"example can be found in `configs/apps/gladevcp/animated-backdrop`:"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:2096
#, no-wrap
msgid "HAL widgets in a bitmap Example"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:2097
#, no-wrap
msgid "images/small-screenshot.png"
msgstr ""

#. type: Title ==
#: src/gui/gladevcp.adoc:2099
#, no-wrap
msgid "Action Widgets Reference"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2103
msgid ""
"GladeVCP includes a collection of \"canned actions\" called **VCP Action "
"Widgets** for the Glade user interface editor."
msgstr ""

#. type: delimited block =
#: src/gui/gladevcp.adoc:2108
msgid ""
"Other than HAL widgets, which interact with HAL pins, VCP Actions interact "
"with LinuxCNC and the G-code interpreter."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2111
msgid "VCP Action Widgets are derived from the `Gtk.Action` widget."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2113
msgid "The Action widget in a nutshell:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2115
msgid "is an object available in Glade"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2116
msgid "has no visual appearance by itself"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2119
msgid ""
"it's purpose: associate a visible, sensitive UI component like menu, "
"toolbutton, button with a command.  See these widget's "
"'General→Related→Action' property."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2121
msgid ""
"the \"canned action\" will be executed when the associated UI component is "
"triggered (button press, menu click..)"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2123
msgid ""
"provides an easy way to execute commands without resorting to Python "
"programming."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2125
msgid "The appearance of VCP Actions in Glade is roughly as follows:"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:2126
#, no-wrap
msgid "Action Widgets"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:2127
#, no-wrap
msgid "images/vcp-actions.png"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2130
msgid "Tooltip hovers provide a description."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2131
#, no-wrap
msgid "VCP Action Widgets"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2135
msgid ""
"VCP Action widgets are one-shot type widgets. They implement a single action "
"and are for use in simple buttons, menu entries or radio/check groups."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2136
#, no-wrap
msgid "VCP Action Python"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2139
msgid "This widget is used to execute small arbitrary Python code."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2141
msgid ""
"The command string may use special keywords to access important functions."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2143
msgid "'ACTION' for access to the ACTION command library."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2144
msgid "`GSTAT` for access to the Gstat status message library."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2145
msgid "'INFO' for access to collected data from the INI file."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2146
msgid "'HAL' for access to the HAL linuxcnc Python module"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2147
msgid ""
"`STAT` for access to LinuxCNC's raw status via the LinuxCNC Python module."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2148
msgid "`CMD` for access to LinuxCNC's commands via the LinuxCNC Python module."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2149
msgid "`EXT` for access to the handler file functions if available."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2150
msgid "`linuxcnc` for access to the LinuxCNC Python module."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2151
msgid "`self` for access to the widget instance."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2152
msgid "'dir' for access to the handlers list of attributes."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2154
msgid "There are options to"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2156
msgid "select when the widget will be active,"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2157
msgid "set the mode before the command is executed."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2159
msgid "Example command to just print a message to the terminal:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2163
#, no-wrap
msgid "print('action activated')\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2166
msgid "Example command to set the machine to off state:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2170
#, no-wrap
msgid "CMD.state(linuxcnc.STATE_OFF)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2173
msgid "Example command to call a handler function that passes data:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2177
#, no-wrap
msgid "EXT.on_button_press(self, 100)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2180
msgid "You can use a semicolon to separate multiple commands:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2184
#, no-wrap
msgid "print('Set Machine Off');CMD.state(linuxcnc.STATE_OFF)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2188
msgid ""
"More information on INFO and ACTION can be found here: <<cha:gladevcp-"
"libraries,GladeVCP Libraries modules>>"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2190
msgid "More information on GStat can be found here: <<cha:gstat,GStat>>"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2191
#, no-wrap
msgid "VCP ToggleAction widgets"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2199
msgid ""
"These are **bi-modal** widgets. They implement two actions or use a second "
"(usually `pressed`) state to indicate that currently an action is running.  "
"Toggle actions are aimed for use in `ToggleButtons`, `ToggleToolButtons` or "
"toggling menu items.  A simplex example is the `ESTOP` toggle button."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2201
msgid "Currently the following widgets are available:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2204
msgid ""
"The `ESTOP` toggle sends `ESTOP` or `ESTOP_RESET` commands to LinuxCNC "
"depending on it's state."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2205
msgid "The `ON/OFF` toggle sends `STATE_ON` and `STATE_OFF` commands."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2206
msgid "`Pause/Resume` sends `AUTO_PAUSE` or `AUTO_RESUME` commands."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2210
msgid ""
"The following toggle actions have only one associated command and use the "
"`pressed` state to indicate that the requested operation is running:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2213
msgid ""
"The `Run` toggle sends an `AUTO_RUN` command and waits in the `pressed` "
"state until the interpreter is idle again."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2216
msgid ""
"The `Stop` toggle is inactive until the interpreter enters the active state "
"(is running G-code) and then allows user to send `AUTO_ABORT` command."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2218
msgid ""
"The `MDI` toggle sends given MDI command and waits for its completion in "
"`pressed` inactive state."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2219
#, no-wrap
msgid "The Action_MDI Toggle and Action_MDI widgets"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2224
#, no-wrap
msgid ""
"These widgets provide a means to execute arbitrary MDI commands.\n"
"The `Action_MDI` widget does not wait for command completion as the `Action_MDI` Toggle does, which remains disabled until command complete."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2225
#, no-wrap
msgid "A simple example: Execute MDI command on button press"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2228
msgid ""
"`configs/apps/gladevcp/mdi-command-example/whoareyou.ui` is a Glade UI file "
"which conveys the basics:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2230
msgid "Open it in Glade and study how it's done."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2231
msgid ""
"Start AXIS, and then start this from a terminal window with `gladevcp "
"whoareyou.ui`."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2234
msgid ""
"See the `hal_action_mdi1` action and it's `MDI command` property - this just "
"executes `(MSG, \"Hi, I'm an VCP_Action_MDI\")` so there should be a message "
"popup in AXIS like so:"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:2235
#, no-wrap
msgid "Action_MDI Simple Example"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:2236
#, no-wrap
msgid "images/whoareyou.png"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2242
msgid ""
"You'll notice that the button associated with the Action_MDI action is "
"grayed out if the machine is off, in E-Stop or if the interpreter is "
"running.  It will automatically become active when the machine is turned on "
"and out of E-Stop, and the program is idle."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2243
#, no-wrap
msgid "Parameter passing with Action_MDI and ToggleAction_MDI widgets"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2249
msgid ""
"Optionally, `MDI command` strings may have parameters substituted before "
"they are passed to the interpreter.  Parameters currently may be names of "
"HAL pins in the GladeVCP component.  This is how it works:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2252
msgid ""
"assume you have a 'HAL SpinBox' named +speed+, and you want to pass it's "
"current value as a parameter in an MDI command."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2254
msgid ""
"The HAL SpinBox will have a float-type HAL pin named speed-f (see HalWidgets "
"description)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2256
msgid ""
"To substitute this value in the MDI command, insert the HAL pin name "
"enclosed like so: `${pin-name}`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2258
msgid ""
"for the above HAL SpinBox, we could use `(MSG, \"The speed is: ${speed-"
"f}\")` just to show what's happening."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2261
msgid ""
"The example UI file is `configs/apps/gladevcp/mdi-command-example/speed."
"ui`.  Here's what you get when running it:"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:2262
#, no-wrap
msgid "Action_MDI Parameter Passing Example"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:2263
#, no-wrap
msgid "images/speed.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2265
#, no-wrap
msgid "An advanced example: Feeding parameters to an O-word subroutine"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2270
msgid ""
"It's perfectly OK to call an O-word subroutine in an MDI command, and pass "
"HAL pin values as actual parameters.  An example UI file is in `configs/apps/"
"gladevcp/mdi-command-example/owordsub.ui`."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2274
msgid ""
"Place `nc_files/gladevcp_lib/oword.ngc` so AXIS can find it, and run "
"`gladevcp owordsub.ui` from a terminal window.  This looks like so:"
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:2275
#, no-wrap
msgid "Action_MDI Advanced Example"
msgstr ""

#. type: Target for macro image
#: src/gui/gladevcp.adoc:2276
#, no-wrap
msgid "images/oword.png"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2278
#, no-wrap
msgid "Preparing for an MDI Action, and cleaning up afterwards"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2287
msgid ""
"The LinuxCNC G-code interpreter has a single global set of variables, like "
"feed, spindle speed, relative/absolute mode and others. If you use G-code "
"commands or O-word subs, some of these variables might get changed by the "
"command or subroutine - for example, a probing subroutine will very likely "
"set the feed value quite low. With no further precautions, your previous "
"feed setting will be overwritten by the probing subroutine's value."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2296
msgid ""
"To deal with this surprising and undesirable side effect of a given O-word "
"subroutine or G-code statement executed with an LinuxCNC ToggleAction_MDI, "
"you might associate pre-MDI and post-MDI handlers with a given LinuxCNC "
"ToggleAction_MDI. These handlers are optional and provide a way to save any "
"state before executing the MDI Action, and to restore it to previous values "
"afterwards. The signal names are +mdi-command-start+ and +mdi-command-stop+; "
"the handler names can be set in Glade like any other handler."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2300
msgid ""
"Here's an example how a feed value might be saved and restored by such "
"handlers (note that LinuxCNC command and status channels are available as "
"`self.linuxcnc` and `self.stat` through the VCP_ActionBase class):"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2306
#, no-wrap
msgid ""
"    def on_mdi_command_start(self, action, userdata=None):\n"
"        action.stat.poll()\n"
"        self.start_feed = action.stat.settings[1]\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2311
#, no-wrap
msgid ""
"    def on_mdi_command_stop(self, action, userdata=None):\n"
"        action.linuxcnc.mdi('F%.1f' % (self.start_feed))\n"
"        while action.linuxcnc.wait_complete() == -1:\n"
"            pass\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2314
msgid "Only the `Action_MDI` Toggle widget supports these signals."
msgstr ""

#. type: delimited block =
#: src/gui/gladevcp.adoc:2319
msgid ""
"In a later release of LinuxCNC, the new M-codes M70-M72 will be available.  "
"They will make saving state before a subroutine call, and restoring state on "
"return much easier."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2321
#, no-wrap
msgid "Using the LinuxCNC Stat object to deal with status changes"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2329
msgid ""
"Many actions depend on LinuxCNC status - is it in manual, MDI or auto mode? "
"is a program running, paused or idle? You cannot start an MDI command while "
"a G-code program is running, so this needs to be taken care of.  Many "
"LinuxCNC actions take care of this themselves, and related buttons and menu "
"entries are deactivated when the operation is currently impossible."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2334
msgid ""
"When using Python event handlers - which are at a lower level than Actions - "
"one needs to take care of dealing with status dependencies oneself. For this "
"purpose, there's the LinuxCNC Stat widget: to associate LinuxCNC status "
"changes with event handlers."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2338
msgid ""
"LinuxCNC Stat has no visible component - you just add it to your UI with "
"Glade. Once added, you can associate handlers with its following signals:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2340
msgid "state-related:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2341
msgid "`state-estop`: emitted when E-Stop condition occurs,"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2342
msgid "`state-estop-reset`: emitted when machine is reset,"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2343
msgid "`state-on`: emitted when machine is turned on,"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2344
msgid "`state-off`: emitted when machine is turned off."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2345
msgid "mode-related:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2346
msgid "`mode-manual`: emitted when LinuxCNC enters manual mode,"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2347
msgid "`mode-mdi`: emitted when LinuxCNC enters MDI mode,"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2348
msgid "`mode-auto`: emitted when LinuxCNC enters automatic mode,"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2349
msgid ""
"interpreter-related: emitted when the G-code interpreter changes into that "
"mode"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2350
msgid "`interp-run`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2351
msgid "`interp-idle`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2352
msgid "`interp-paused`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2353
msgid "`interp-reading`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2354
msgid "`interp-waiting`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2355
msgid "`file-loaded`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2356
msgid "`line-changed`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2357
msgid "homing-related: emitted when LinuxCNC is homed or not"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2358
msgid "`all-homed`"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2359
msgid "`not-all-homed`"
msgstr ""

#. type: Title ==
#: src/gui/gladevcp.adoc:2361
#, no-wrap
msgid "GladeVCP Programming"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2363
#, no-wrap
msgid "User Defined Actions"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2370
msgid ""
"Most widget sets, and their associated user interface editors, support the "
"concept of callbacks - functions in user-written code which are executed "
"when 'something happens' in the UI - events like mouse clicks, characters "
"typed, mouse movement, timer events, window hiding and exposure and so forth."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2376
msgid ""
"HAL output widgets typically map input-type events like a button press to a "
"value change of the associated HAL pin by means of such a - predefined - "
"callback. Within PyVCP, this is really the only type of event handling "
"supported - doing something more complex, like executing MDI commands to "
"call a G-code subroutine, is not supported."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2381
msgid ""
"Within GladeVCP, HAL pin changes are just one type of the general class of "
"events (called signals) in GTK+. Most widgets may originate such signals, "
"and the Glade editor supports associating such a signal with a Python method "
"or function name."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2388
msgid ""
"If you decide to use user-defined actions, your job is to write a Python "
"module whose class methods - or in the simple case, just functions - can be "
"referred to in Glade as event handlers. GladeVCP provides a way to import "
"your module(s) at startup and will automatically link your event handlers "
"with the widget signals as set in the Glade UI description."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2389
#, no-wrap
msgid "Core Library"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2393
msgid ""
"There are three libraries of functions that can be used to help program "
"GladeVCP."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2395
msgid "'Info': collects details from the INI file."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2396
msgid "'Action': A collection of functions to change LinuxCNC states."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2397
msgid "'Status': Reports the state of LinuxCNC. It wraps around 'Gstat'."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2399
msgid "Importing and instantiating the libraries:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2403
#, no-wrap
msgid "from gladevcp.core import Info, Action\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2406
#, no-wrap
msgid ""
"ACTION = Action()\n"
"INFO = Info()\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2409
msgid "using the library functions:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2414
#, no-wrap
msgid ""
"print(INFO.MACHINE_IS_METRIC)\n"
"ACTION.SET_ERROR_MESSAGE('Something went wrong')\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2420
msgid ""
"More information can be found here: <<cha:gladevcp-libraries,GladeVCP "
"Libraries modules>> There is a sample configuration that demonstrates using "
"the core library with GladeVCP's action Python widgets and with a Python "
"handler file.  Try loading 'sim/axis/gladevcp/gladevcp_panel_tester'."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2422
#, no-wrap
msgid "An example: adding custom user callbacks in Python"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2426
msgid ""
"This is just a minimal example to convey the idea - details are laid out in "
"the rest of this section."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2430
msgid ""
"GladeVCP can not only manipulate or display HAL pins, you can also write "
"regular event handlers in Python. This could be used, among others, to "
"execute MDI commands. Here's how you do it:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2432
msgid "Write a Python module like so and save as e.g. handlers.py:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2440 src/gui/gladevcp.adoc:2510
#, no-wrap
msgid ""
"nhits = 0\n"
"def on_button_press(gtkobj,data=None):\n"
"    global nhits\n"
"    nhits += 1\n"
"    gtkobj.set_label(\"hits: %d\" % nhits)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2445
msgid ""
"In Glade, define a button or HAL button, select the 'Signals' tab, and in "
"the GtkButton properties select the 'pressed' line. Enter 'on_button_press' "
"there, and save the Glade file."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2449
msgid ""
"Then add the option '-u handlers.py' to the GladeVCP command line. If your "
"event handlers are spread over several files, just add multiple '-u "
"<pyfilename>' options."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2452
msgid ""
"Now, pressing the button should change its label since it's set in the "
"callback function."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2459
msgid ""
"What the `+-u+` flag does: all Python functions in this file are collected "
"and setup as potential callback handlers for your Gtk widgets - they can be "
"referenced from Glade 'Signals' tabs. The callback handlers are called with "
"the particular object instance as parameter, like the GtkButton instance "
"above, so you can apply any GtkButton method from there."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2461
msgid "Or do some more useful stuff, like calling an MDI command!"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2462
#, no-wrap
msgid "HAL value change events"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2466
msgid ""
"HAL input widgets, like a LED, automatically associate their HAL pin state "
"(on/off) with the optical appearance of the widget (LED lit/dark)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2473
msgid ""
"Beyond this built-in functionality, one may associate a change callback with "
"any HAL pin, including those of predefined HAL widgets. This fits nicely "
"with the event-driven structure of a typical widget application: every "
"activity, be it mouse click, key, timer expired, or the change of a HAL "
"pin's value, generates a callback and is handled by the same orthogonal "
"mechanism."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2478
msgid ""
"For user-defined HAL pins not associated with a particular HAL widget, the "
"signal name is 'value-changed'.  See the <<gladevcp:adding-hal-pins,Adding "
"HAL pins>> section below for details."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2481
msgid ""
"HAL widgets come with a pre-defined signal called 'hal-pin-changed'.  See "
"the <<gladevcp:hal-pin-changed-signal,HAL Widgets>> section for details."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2482
#, no-wrap
msgid "Programming model"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2485
msgid "The overall approach is as follows:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2488
msgid ""
"Design your UI with Glade, and set signal handlers where you want actions "
"associated with a widget."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2490
msgid ""
"Write a Python module which contains callable objects (see 'handler models' "
"below)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2491
msgid "Pass your module's path name to GladeVCP with the '-u <module>' option."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2493
msgid ""
"GladeVCP imports the module, inspects it for signal handlers and connects "
"them to the widget tree."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2494
msgid "The main event loop is run."
msgstr ""

#. type: Title ====
#: src/gui/gladevcp.adoc:2495
#, no-wrap
msgid "The simple handler model"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2502
msgid ""
"For simple tasks it's sufficient to define functions named after the Glade "
"signal handlers. These will be called when the corresponding event happens "
"in the widget tree. Here's a trivial example - it assumes that the 'pressed' "
"signal of a Gtk Button or HAL Button is linked to a callback called "
"'on_button_press':"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2513
msgid "Add this function to a Python file and run as follows:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2516
#, no-wrap
msgid "gladevcp -u <myhandler>.py mygui.ui\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2521
msgid ""
"Note communication between handlers has to go through global variables, "
"which does not scale well and is positively un-pythonic.  This is why we "
"came up with the class-based handler model."
msgstr ""

#. type: Title ====
#: src/gui/gladevcp.adoc:2522
#, no-wrap
msgid "The class-based handler model"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2528
msgid ""
"The idea here is: handlers are linked to class methods. The underlying "
"class(es) are instantiated and inspected during GladeVCP startup and linked "
"to the widget tree as signal handlers. So the task now is to write:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2531
msgid ""
"one or more several class definition(s) with one or several methods, in one "
"module or split over several modules,"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2534
msgid ""
"a function 'get_handlers' in each module which will return a list of class "
"instances to GladeVCP - their method names will be linked to signal handlers"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2536
msgid "Here is a minimum user-defined handler example module:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2542
#, no-wrap
msgid ""
"class MyCallbacks :\n"
"    def on_this_signal(self,obj,data=None):\n"
"        print(\"this_signal happened, obj=\",obj)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2545
#, no-wrap
msgid ""
"def get_handlers(halcomp,builder,useropts):\n"
"    return [MyCallbacks ()]\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2549
msgid ""
"Now, 'on_this_signal' will be available as signal handler to your widget "
"tree."
msgstr ""

#. type: Title ====
#: src/gui/gladevcp.adoc:2550
#, no-wrap
msgid "GladeVCP-specific signals"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2562
#, no-wrap
msgid ""
"For GladeVCP panel which respond to HAL inputs it may be important that the handler code can tell that the GladeVCP panel is currently active and displayed. For example a panel inside the Touchy interface might well need to perform an action when the switch connected to touchy.cycle-start is operated (in the same way that the native tabs respond differently to the same button).\n"
"To make this possible, a signal is sent from the GUI (at the time of writing, only Touchy) to the embedded tab. The signal is of type \"Gladevcp\" and the two messages sent are \"Visible\" and \"Hidden\". (Note that the signals  have a fixed length of 20 characters so only the first characters should be used in any comparison, hence the [:7] below.) A sample handler for these signals is:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2573
#, no-wrap
msgid ""
"    # This catches our messages from another program\n"
"    def event(self,w,event):\n"
"        print(event.message_type,event.data)\n"
"        if event.message_type == 'Gladevcp':\n"
"            if event.data[:7] == 'Visible':\n"
"                self.active = True\n"
"            else:\n"
"                self.active = False\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2579
#, no-wrap
msgid ""
"    # connect to client-events from the host GUI\n"
"    def on_map_event(self, widget, data=None):\n"
"        top = widget.get_toplevel()\n"
"        print(\"map event\")\n"
"        top.connect('client-event', self.event)\n"
msgstr ""

#. type: Title ====
#: src/gui/gladevcp.adoc:2581
#, no-wrap
msgid "The get_handlers protocol"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2585
msgid ""
"If during module inspection GladeVCP finds a function `get_handlers`, it "
"calls it as follows:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2588
#, no-wrap
msgid "get_handlers(halcomp,builder,useropts)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2591
msgid "The arguments are:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2593
msgid "`halcomp` - refers to the HAL component under construction,"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2594
msgid ""
"`builder` - widget tree - result of reading the UI definition (either "
"referring to a GtkBuilder or libglade-type object),"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2595
msgid ""
"`useropts` - a list of strings collected from the GladeVCP command line `-U "
"<useropts>` option."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2600
msgid ""
"GladeVCP then inspects the list of class instances and retrieves their "
"method names. Qualifying method names are connected to the widget tree as "
"signal handlers. Only method names which do not begin with an "
"'_' (underscore) are considered."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2606
msgid ""
"Note that regardless whether you're using the libglade or the new GtkBuilder "
"format for your Glade UI, widgets can always be referred to as `builder."
"get_object(<widgetname>)`. Also, the complete list of widgets is available "
"as `builder.get_objects()` regardless of UI format."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2607
#, no-wrap
msgid "Initialization sequence"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2614
msgid ""
"It is important to know in which state of affairs your `get_handlers()` "
"function is called so you know what is safe to do there and what not.  "
"First, modules are imported and initialized in command line order.  After "
"successful import, `get_handlers()` is called in the following state:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2617
msgid ""
"The widget tree is created, but not yet realized (no toplevel `window."
"show()` has been executed yet)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2619
msgid ""
"The halcomp HAL component is set up and all HAL widget's pins have already "
"been added to it."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2622
msgid ""
"It is safe to add more HAL pins because `halcomp.ready()` has not yet been "
"called at this point, so you may add your own pins, for instance in the "
"class `__init__()` method."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2625
msgid ""
"Once all modules have been imported and method names extracted, the "
"following steps happen:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2629
msgid ""
"All qualifying method names will be connected to the widget tree with "
"`connect_signals()/signal_autoconnect()` (depending on the type of UI "
"imported - GtkBuilder vs the old libglade format)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2630
msgid "The HAL component is finalized with halcomp.ready()."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2633
msgid ""
"If a window ID was passed as argument, the widget tree is re-parented to run "
"in this window, and Glade's toplevel window1 is abandoned (see FAQ)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2635
msgid ""
"If a HAL command file was passed with `-H halfile`, it is executed with "
"halcmd."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2636
msgid "The Gtk main loop is run."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2641
msgid ""
"So when your handler class is initialized, all widgets are existent but not "
"yet realized (displayed on screen). And the HAL component isn't ready as "
"well, so its unsafe to access pins values in your `__init__()` method."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2647
msgid ""
"If you want to have a callback to execute at program start after it is safe "
"to access HAL pins, then a connect a handler to the realize signal of the "
"top level window1 (which might be its only real purpose). At this point "
"GladeVCP is done with all setup tasks, the HAL file has been run, and "
"GladeVCP is about to enter the Gtk main loop."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2648
#, no-wrap
msgid "Multiple callbacks with the same name"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2656
msgid ""
"Within a class, method names must be unique. However, it is OK to have "
"multiple class instances passed to GladeVCP by get_handlers() with "
"identically named methods. When the corresponding signal occurs, these "
"methods will be called in definition order - module by module, and within a "
"module, in the order class instances are returned by `get_handlers()`."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2657
#, no-wrap
msgid "The GladeVCP `-U <useropts>` flag"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2666
msgid ""
"Instead of extending GladeVCP for any conceivable option which could "
"potentially be useful for a handler class, you may use the -U <useroption> "
"flag (repeatedly if you wish). This flag collects a list of <useroption> "
"strings. This list is passed to the get_handlers()  function (useropts "
"argument). Your code is free to interpret these strings as you see fit. An "
"possible usage would be to pass them to the Python exec function in your "
"`get_handlers()` as follows:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2676
#, no-wrap
msgid ""
"debug = 0\n"
"...\n"
"def get_handlers(halcomp,builder,useropts):\n"
"    ...\n"
"    global debug # assuming there's a global var\n"
"    for cmd in useropts:\n"
"        exec cmd in globals()\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2680
msgid ""
"This way you can pass arbitrary Python statements to your module through the "
"`gladevcp -U` option, for example:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2683
#, no-wrap
msgid "gladevcp -U debug=42 -U \"print 'debug=%d' % debug\" ...\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2686
msgid ""
"This should set debug to 2 and confirm that your module actually did it."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2687
#, no-wrap
msgid "Persistent variables in GladeVCP"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2694
msgid ""
"An annoying aspect of GladeVCP in its earlier form and PyVCP is the fact "
"that you may change values and HAL pins through text entry, sliders, spin "
"boxes, toggle buttons etc, but their settings are not saved and restored at "
"the next run of LinuxCNC - they start at the default value as set in the "
"panel or widget definition."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2698
msgid ""
"GladeVCP has an easy-to-use mechanism to save and restore the state of HAL "
"widgets, and program variables (in fact any instance attribute of type int, "
"float, bool or string)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2701
msgid ""
"This mechanism uses the popular INI file format to save and reload "
"persistent attributes."
msgstr ""

#. type: Block title
#: src/gui/gladevcp.adoc:2702
#, no-wrap
msgid "Persistence, program versions and the signature check"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2708
msgid ""
"Imagine renaming, adding or deleting widgets in Glade: an .INI file lying "
"around from a previous program version, or an entirely different user "
"interface, would be not be able to restore the state properly since "
"variables and types might have changed."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2713
msgid ""
"GladeVCP detects this situation by a signature which depends on all object "
"names and types which are saved and to be restored. In the case of signature "
"mismatch, a new INI file with default settings is generated."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2714
#, no-wrap
msgid "Using persistent variables"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2719
msgid ""
"If you want any of Gtk widget state, HAL widgets output pin's values and/or "
"class attributes of your handler class to be retained across invocations, "
"proceed as follows:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2721
msgid "Import the `gladevcp.persistence` module."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2723
msgid ""
"Decide which instance attributes, and their default values you want to have "
"retained, if any."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2724
msgid "Decide which widgets should have their state retained."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2726
msgid ""
"Describe these decisions in your handler class' `\\__init()__` method "
"through a nested dictionary as follows:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2743
#, no-wrap
msgid ""
"def __init__(self, halcomp,builder,useropts):\n"
"    self.halcomp = halcomp\n"
"    self.builder = builder\n"
"    self.useropts = useropts\n"
"    self.defaults = {\n"
"        # the following names will be saved/restored as method attributes\n"
"        # the save/restore mechanism is strongly typed - the variables type will be derived from the type of the\n"
"        # initialization value. Currently supported types are: int, float, bool, string\n"
"        IniFile.vars : { 'nhits' : 0, 'a': 1.67, 'd': True ,'c' : \"a string\"},\n"
"        # to save/restore all widget's state which might remotely make sense, add this:\n"
"        IniFile.widgets : widget_defaults(builder.get_objects())\n"
"        # a sensible alternative might be to retain only all HAL output widgets' state:\n"
"        # IniFile.widgets: widget_defaults(select_widgets(self.builder.get_objects(), hal_only=True,output_only = True)),\n"
"    }\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2746
msgid "Then associate an INI file with this descriptor:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2752
#, no-wrap
msgid ""
"self.ini_filename = __name__ + '.ini'\n"
"self.ini = IniFile(self.ini_filename,self.defaults,self.builder)\n"
"self.ini.restore_state(self)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2756
msgid ""
"After `restore_state()`, self will have attributes set if as running the "
"following:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2763
#, no-wrap
msgid ""
"self.nhits = 0\n"
"self.a = 1.67\n"
"self.d = True\n"
"self.c = \"a string\"\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2768
msgid ""
"Note that types are saved and preserved on restore. This example assumes "
"that the INI file didn't exist or had the default values from self.defaults."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2770
msgid "After this incantation, you can use the following IniFile methods:"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:2771
#, no-wrap
msgid "ini.save_state(obj)"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2774
msgid ""
"Saves objs's attributes as per `IniFile.vars` dictionary and the widget "
"state as described in `IniFile.widgets` in `self.defaults`."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:2774
#, no-wrap
msgid "ini.create_default_ini()"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2776
msgid "Create an INI file with default values."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:2776
#, no-wrap
msgid "ini.restore_state(obj)"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2779
msgid ""
"Restore HAL out pins and obj's attributes as saved/initialized to default as "
"above."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2780
#, no-wrap
msgid "Saving the state on GladeVCP shutdown"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2783
msgid "To save the widget and/or variable state on exit, proceed as follows:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2786
msgid ""
"Select some interior widget (type is not important, for instance a table)."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2788
msgid ""
"In the 'Signals' tab, select 'GtkObject'. It should show a 'destroy' signal "
"in the first column."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2789
msgid "Add the handler name, e.g. 'on_destroy' to the second column."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2790
msgid "Add a Python handler like below:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2797
#, no-wrap
msgid ""
"import gtk\n"
"...\n"
"def on_destroy(self,obj,data=None):\n"
"    self.ini.save_state(self)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2801
msgid ""
"This will save state and shutdown GladeVCP properly, regardless whether the "
"panel is embedded in AXIS, or a standalone window."
msgstr ""

#. type: delimited block =
#: src/gui/gladevcp.adoc:2811
msgid ""
"Do not use `window1` (the toplevel window) to connect a 'destroy' event. Due "
"to the way a GladeVCP panel interacts with AXIS, if a panel is embedded "
"within AXIS, *window1 will not receive destroy events properly*. However, "
"since on shutdown all widgets are destroyed, anyone will do. Recommended: "
"use a second-level widget - for instance, if you have a table container in "
"your panel, use that."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2815
msgid ""
"Next time you start the GladeVCP application, the widgets should come up in "
"the state when the application was closed."
msgstr ""

#. type: delimited block =
#: src/gui/gladevcp.adoc:2821
msgid ""
"The 'GtkWidget' line has a similarly sounding 'destroy-event' - *dont use "
"that to connect to the 'on_destroy' handler, it wont work* - make sure you "
"use the 'destroy' event from the 'GtkObject' line."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2823
#, no-wrap
msgid "Saving state when Ctrl-C is pressed"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2829
msgid ""
"By default, the reaction of GladeVCP to a Ctrl-C event is to just exit - "
"_without_ saving state. To make sure that this case is covered, add a "
"handler call `on_unix_signal` which will be automatically be called on Ctrl-"
"C (actually on the SIGINT and SIGTERM signals). Example:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2835
#, no-wrap
msgid ""
"def on_unix_signal(self,signum,stack_frame):\n"
"    print(\"on_unix_signal(): signal %d received, saving state\" % (signum))\n"
"    self.ini.save_state(self)\n"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2837
#, no-wrap
msgid "Hand-editing INI (.ini) files"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2844
msgid ""
"You can do that, but note that the values in self.defaults override your "
"edits if there is a syntax or type error in your edit. The error is "
"detected, a console message will hint about that happened, and the bad "
"inifile will be renamed to have the .BAD suffix. Subsequent bad INI files "
"overwrite earlier .BAD files."
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2846
#, no-wrap
msgid "Adding HAL pins"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2850
msgid ""
"If you need HAL pins which are not associated with a specific HAL widget, "
"add them as follows:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2857
#, no-wrap
msgid ""
"import hal_glib\n"
"...\n"
"# in your handler class __init__():\n"
"self.example_trigger = hal_glib.GPin(halcomp.newpin('example-trigger', hal.HAL_BIT, hal.HAL_IN))\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2861
msgid ""
"To get a callback when this pin's value changes, associate a `value-change` "
"callback with this pin, add:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2865
#, no-wrap
msgid "self.example_trigger.connect('value-changed', self._on_example_trigger_change)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2869
msgid ""
"and define a callback method (or function, in this case leave out the `self` "
"parameter):"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2875
#, no-wrap
msgid ""
"# note '_' - this method will not be visible to the widget tree\n"
"def _on_example_trigger_change(self,pin,userdata=None):\n"
"    print(\"pin value changed to:\" % (pin.get()))\n"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2877
#, no-wrap
msgid "Adding timers"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2883
msgid ""
"Since GladeVCP uses Gtk widgets which rely on the http://www.pygtk.org/"
"pygtk2reference/gobject-functions.html[GObject] base class, the full glib "
"functionally is available. Here is an example for a timer callback:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2894
#, no-wrap
msgid ""
"def _on_timer_tick(self,userdata=None):\n"
"    ...\n"
"    return True # to restart the timer; return False for on-shot\n"
"...\n"
"# demonstrate a slow background timer - granularity is one second\n"
"# for a faster timer (granularity 1 ms), use this:\n"
"# glib.timeout_add(100, self._on_timer_tick,userdata) # 10Hz\n"
"glib.timeout_add_seconds(1, self._on_timer_tick)\n"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2896
#, no-wrap
msgid "Setting HAL widget properties programmatically"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2903
msgid ""
"With Glade, widget properties are typically set fixed while editing.  You "
"can, however, set widget properties at runtime, for instance from INI file "
"values, which would typically be done in the handler initialization code. "
"Setting properties from HAL pin values is possible, too."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2907
msgid ""
"In the following example (assuming a HAL Meter widget called `meter`), the "
"meter's min value is set from an INI file parameter at startup, and the max "
"value is set via a HAL pin, which causes the widget's scale to readjust "
"dynamically:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2914
#, no-wrap
msgid ""
"import linuxcnc\n"
"import os\n"
"import hal\n"
"import hal_glib\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2916 src/gui/gstat.adoc:108 src/gui/gstat.adoc:152
#: src/gui/qtvcp.adoc:698
#, no-wrap
msgid "class HandlerClass:\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2920
#, no-wrap
msgid ""
"    def _on_max_value_change(self,hal_pin,data=None):\n"
"        self.meter.max = float(hal_pin.get())\n"
"        self.meter.queue_draw() # force a widget redraw\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2923
#, no-wrap
msgid ""
"    def __init__(self, halcomp,builder,useropts):\n"
"  self.builder = builder\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2928
#, no-wrap
msgid ""
"        # HAL pin with change callback.\n"
"        # When the pin's value changes the callback is executed.\n"
"        self.max_value = hal_glib.GPin(halcomp.newpin('max-value',  hal.HAL_FLOAT, hal.HAL_IN))\n"
"        self.max_value.connect('value-changed', self._on_max_value_change)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2933
#, no-wrap
msgid ""
"  inifile = linuxcnc.ini(os.getenv(\"INI_FILE_NAME\"))\n"
"  mmin = float(inifile.find(\"METER\", \"MIN\") or 0.0)\n"
"        self.meter = self.builder.get_object('meter')\n"
"        self.meter.min = mmin\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:2937 src/gui/gstat.adoc:133
#, no-wrap
msgid ""
"def get_handlers(halcomp,builder,useropts):\n"
"    return [HandlerClass(halcomp,builder,useropts)]\n"
msgstr ""

#. type: Title ===
#: src/gui/gladevcp.adoc:2939
#, no-wrap
msgid "Examples, and rolling your own GladeVCP application"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2943
msgid ""
"Visit `linuxcnc_root_directory/configs/apps/gladevcp` for running examples "
"and starters for your own projects."
msgstr ""

#. type: Title ==
#: src/gui/gladevcp.adoc:2944
#, no-wrap
msgid "FAQ"
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:2948
#, no-wrap
msgid "I get an unexpected unmap event in my handler function right after startup. What's this?"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2958
msgid ""
"This is a consequence of your Glade UI file having the window1 Visible "
"property set to True, together with re-parenting the GladeVCP window into "
"AXIS or touchy. The GladeVCP widget tree is created, including a top level "
"window, and then 'reparented into AXIS', leaving that toplevel window laying "
"around orphaned. To avoid having this useless empty window hanging around, "
"it is unmapped (made invisible), which is the cause of the unmap signal you "
"get. Suggested fix: set window1.visible to False, and ignore an initial "
"unmap event."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:2959
#, no-wrap
msgid "My GladeVCP program starts, but no window appears where I expect it to be?"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2972
msgid ""
"The window AXIS allocates for GladeVCP will obtain the 'natural size' of all "
"its child widgets combined. It's the child widget's job to request a size "
"(width and/or height). However, not all widgets do request a width greater "
"than 0, for instance the Graph widget in its current form. If there's such a "
"widget in your Glade file and it's the one which defines the layout you "
"might want to set its width explicitly. Note that setting the window1 width "
"and height properties in Glade does not make sense because this window will "
"be orphaned during re-parenting and hence its geometry will have no impact "
"on layout (see above). The general rule is: if you manually run a UI file "
"with 'gladevcp <uifile>' and its window has reasonable geometry, it should "
"come up in AXIS properly as well."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:2973
#, no-wrap
msgid "I want a blinking LED, but it wont blink"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2979
msgid ""
"I ticked the checkbutton to let it blink with 100 msec interval. It wont "
"blink, and I get a startup warning: Warning: value \"0\" of type `gint' is "
"invalid or out of range for property `led-blink-rate' of type `gint'? This "
"seems to be a Glade bug. Just type over the blink rate field, and save again "
"- this works for me."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:2980
#, no-wrap
msgid "My GladeVCP panel in AXIS doesn't save state when I close AXIS, although I defined an on_destroy handler linked to the window destroy signal"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2987
msgid ""
"Very likely this handler is linked to window1, which due to reparenting "
"isn't usable for this purpose. Please link the on_destroy handler to the "
"destroy signal of an interior window. For instance, I have a notebook inside "
"window1, and linked on_destroy to the notebooks destroy signal, and that "
"works fine. It doesn't work for window1."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:2988
#, no-wrap
msgid "I want to set the background color or text of a HAL_Label widget depending on its HAL pin value"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:2996
msgid ""
"See the example in configs/apps/gladevcp/colored-label.  Setting the "
"background color of a GtkLabel widget (and HAL_Label is derived from "
"GtkLabel) is a bit tricky. The GtkLabel widget has no window object of its "
"own for performance reasons, and only window objects can have a background "
"color. The solution is to enclose the Label in an EventBox container, which "
"has a window but is otherwise invisible - see the coloredlabel.ui file."
msgstr ""

#. type: Labeled list
#: src/gui/gladevcp.adoc:2997
#, no-wrap
msgid "I defined a `hal_spinbutton` widget in Glade, and set a default `value` property in the corresponding adjustment. It comes up with zero?"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3005
msgid ""
"This is due to a bug in the old Gtk version distributed with Ubuntu 8.04 and "
"10.04, and is likely to be the case for all widgets using adjustment. The "
"workaround mentioned for instance in http://osdir.com/ml/gtk-app-devel-"
"list/2010-04/msg00129.html does not reliably set the HAL pin value, it is "
"better to set it explicitly in an `on_realize` signal handler during widget "
"creation.  See the example in `configs/apps/gladevcp/by-widget/spinbutton."
"{ui,py}`."
msgstr ""

#. type: Title ==
#: src/gui/gladevcp.adoc:3006
#, no-wrap
msgid "Troubleshooting"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3011
msgid ""
"Make sure you have the development version of LinuxCNC installed. You don't "
"need the axisrc file any more, this was mentioned in the old GladeVCP wiki "
"page."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3017
msgid ""
"Run GladeVCP or AXIS from a terminal window. If you get Python errors, check "
"whether there's still a `/usr/lib/python2.6/dist-packages/hal.so` file lying "
"around besides the newer `/usr/lib/python2.6/dist-packages/_hal.so` (note "
"the underscore); if yes, remove the `hal.so` file. It has been superseded by "
"hal.py in the same directory and confuses the import mechanism."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3019
msgid ""
"If you're using run-in-place, do a 'make clean' to remove any accidentally "
"left over hal.so file, then 'make'."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3022
msgid ""
"If you're using 'HAL_table' or 'HAL_HBox' widgets, be aware they have an HAL "
"pin associated with it which is off by default. This pin controls whether "
"these container's children are active or not."
msgstr ""

#. type: Title ==
#: src/gui/gladevcp.adoc:3023
#, no-wrap
msgid "Implementation note: Key handling in AXIS"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3028
msgid ""
"We believe key handling works OK, but since it is new code, we're telling "
"about it you so you can watch out for problems; please let us know of errors "
"or odd behavior. This is the story:"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3034
msgid ""
"AXIS uses the TkInter widget set. GladeVCP applications use Gtk widgets and "
"run in a separate process context. They are hooked into AXIS with the Xembed "
"protocol. This allows a child application like GladeVCP to properly fit in a "
"parent's window, and - in theory - have integrated event handling."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3043
msgid ""
"However, this assumes that both parent and child application properly "
"support the Xembed protocol, which Gtk does, but TkInter doesn't. A "
"consequence of this is that certain keys would not be forwarded from a "
"GladeVCP panel to AXIS properly under all circumstances. One of these "
"situations was the case when an Entry, or SpinButton widget had focus: in "
"this case, for instance an Escape key would not have been forwarded to AXIS "
"and cause an abort as it should, with potentially disastrous consequences."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3048
msgid ""
"Therefore, key events in GladeVCP are explicitly handled, and selectively "
"forwarded to AXIS, to assure that such situations cannot arise. For details, "
"see the `keyboard_forward()` function in `lib/python/gladevcp/xembed.py`."
msgstr ""

#. type: Title ==
#: src/gui/gladevcp.adoc:3049
#, no-wrap
msgid "Adding Custom Widgets"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3053
msgid ""
"The LinuxCNC Wiki has information on adding custom widgets to GladeVCP.  "
"link:http://wiki.linuxcnc.org/cgi-bin/wiki.pl?"
"GladeVCP_Custom_Widgets[GladeVCP Custom Widgets]"
msgstr ""

#. type: Title ==
#: src/gui/gladevcp.adoc:3054
#, no-wrap
msgid "Auxiliary GladeVCP Applications"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3060
msgid ""
"Support is provided for independently installed GladeVCP applications that "
"conform to system directory placements as defined by the "
"LINUXCNC_AUX_GLADEVCP and LINUXCNC_AUX_EXAMPLES items reported by the script "
"linuxcnc_var:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:3066
#, no-wrap
msgid ""
"$ linuxcnc_var LINUXCNC_AUX_GLADEVCP\n"
"/usr/share/linuxcnc/aux_gladevcp\n"
"$ linuxcnc_var LINUXCNC_AUX_EXAMPLES\n"
"/usr/share/linuxcnc/aux_examples\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3074
msgid ""
"The system directory defined by LINUXCNC_AUX_GLADEVCP (/usr/share/linuxcnc/"
"aux_gladevcp) specifies the location for a GladeVCP-compatible Python "
"file(s) and related subdirectories.  The Python file is imported at GladeVCP "
"startup and made available to subsequent GladeVCP applications including "
"embedded usage in supporting GUIs."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3080
msgid ""
"The system directory defined by LINUXCNC_AUX_EXAMPLES (/usr/share/linuxcnc/"
"aux_examples) specifies the location of example configuration subdirectories "
"used for auxiliary applications.  See the getting-started/running-linuxcnc "
"section for 'Adding Configuration Selection Items'."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3087
msgid ""
"For testing, a runtime specification of auxiliary applications may be "
"specified using the exported environmental variable: GLADEVCP_EXTRAS.  This "
"variable should be a path list of one or more configuration directories "
"separated by a (:). Typically, this variable would be set in a shell "
"starting linuxcnc or in a user's ~/.profile startup script. Example:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp.adoc:3090
#, no-wrap
msgid "export GLADEVCP_EXTRAS=~/mygladevcp:/opt/othergladevcp\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp.adoc:3101
msgid ""
"Files found in directories specified with the environmental variable "
"GLADEVCP_EXTRAS supersede identically-named files within subdirectories of "
"the system directory specified by LINUXNC_AUX_GLADEVCP (e.g., /usr/share/"
"linuxcnc/aux_gladevcp).  This provision allows a developer to test an "
"application by exporting GLADEVCP_EXTRAS to specify a private application "
"directory without removing a system-installed application directory.  "
"Messages indicating rejected duplicates are printed to stdout."
msgstr ""

#. type: delimited block =
#: src/gui/gladevcp.adoc:3107
msgid ""
"Support for auxiliary GladeVCP applications requires a Python module named "
"'importlib'.  This module may not be available in older installations like "
"Ubuntu-Lucid."
msgstr ""

#. type: Title =
#: src/gui/gladevcp-libraries.adoc:5
#, no-wrap
msgid "GladeVCP Library modules"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp-libraries.adoc:15
msgid ""
"Libraries are prebuilt Python modules that give added features to GladeVCP.  "
"In this way you can select what features you want - yet don't have to build "
"common ones yourself."
msgstr ""

#. type: Title ==
#: src/gui/gladevcp-libraries.adoc:16
#, no-wrap
msgid "Info"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp-libraries.adoc:19
msgid "Info is a library to collect and filters data from the INI file."
msgstr ""

#. type: Plain text
#: src/gui/gladevcp-libraries.adoc:21
msgid "The available data and defaults:"
msgstr ""

#. TODO convert to definition list ?
#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:37 src/gui/qtvcp-libraries.adoc:114
#, no-wrap
msgid ""
"LINUXCNC_IS_RUNNING\n"
"LINUXCNC_VERSION\n"
"INIPATH\n"
"INI = linuxcnc.ini(INIPATH)\n"
"MDI_HISTORY_PATH = '~/.axis_mdi_history'\n"
"QTVCP_LOG_HISTORY_PATH = '~/qtvcp.log'\n"
"MACHINE_LOG_HISTORY_PATH = '~/.machine_log_history'\n"
"PREFERENCE_PATH = '~/.Preferences'\n"
"SUB_PATH = None\n"
"SUB_PATH_LIST = []\n"
"self.MACRO_PATH = None\n"
"MACRO_PATH_LIST = []\n"
"INI_MACROS = self.INI.findall(\"DISPLAY\", \"MACRO\")\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:40 src/gui/qtvcp-libraries.adoc:117
#, no-wrap
msgid ""
"IMAGE_PATH = IMAGEDIR\n"
"LIB_PATH = os.path.join(HOME, \"share\",\"qtvcp\")\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:58 src/gui/qtvcp-libraries.adoc:135
#, no-wrap
msgid ""
"PROGRAM_FILTERS = None\n"
"PARAMETER_FILE = None\n"
"MACHINE_IS_LATHE = False\n"
"MACHINE_IS_METRIC = False\n"
"MACHINE_UNIT_CONVERSION = 1\n"
"MACHINE_UNIT_CONVERSION_9 = [1]*9\n"
"TRAJ_COORDINATES =\n"
"JOINT_COUNT = int(self.INI.find(\"KINS\",\"JOINTS\")or 0)\n"
"AVAILABLE_AXES = ['X','Y','Z']\n"
"AVAILABLE_JOINTS = [0,1,2]\n"
"GET_NAME_FROM_JOINT = {0:'X',1:'Y',2:'Z'}\n"
"GET_JOG_FROM_NAME = {'X':0,'Y':1,'Z':2}\n"
"NO_HOME_REQUIRED = False\n"
"HOME_ALL_FLAG\n"
"JOINT_TYPE = self.INI.find(section, \"TYPE\") or \"LINEAR\"\n"
"JOINT_SEQUENCE_LIST\n"
"JOINT_SYNC_LIST\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:62 src/gui/qtvcp-libraries.adoc:139
#, no-wrap
msgid ""
"JOG_INCREMENTS = None\n"
"ANGULAR_INCREMENTS = None\n"
"GRID_INCREMENTS\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:66 src/gui/qtvcp-libraries.adoc:143
#, no-wrap
msgid ""
"DEFAULT_LINEAR_JOG_VEL = 15 units per minute\n"
"MIN_LINEAR_JOG_VEL = 60 units per minute\n"
"MAX_LINEAR_JOG_VEL = 300 units per minute\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:70 src/gui/qtvcp-libraries.adoc:147
#, no-wrap
msgid ""
"DEFAULT_ANGULAR_JOG_VEL =\n"
"MIN_ANGULAR_JOG_VEL =\n"
"MAX_ANGULAR_JOG_VEL =\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:73 src/gui/qtvcp-libraries.adoc:150
#, no-wrap
msgid ""
"MAX_FEED_OVERRIDE =\n"
"MAX_TRAJ_VELOCITY =\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:79 src/gui/qtvcp-libraries.adoc:156
#, no-wrap
msgid ""
"AVAILABLE_SPINDLES = int(self.INI.find(\"TRAJ\", \"SPINDLES\") or 1)\n"
"DEFAULT_SPINDLE_0_SPEED = 200\n"
"MAX_SPINDLE_0_SPEED = 2500\n"
"MAX_SPINDLE_0_OVERRIDE = 100\n"
"MIN_SPINDLE_0_OVERRIDE = 50\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:82 src/gui/qtvcp-libraries.adoc:159
#, no-wrap
msgid ""
"MAX_FEED_OVERRIDE = 1.5\n"
"MAX_TRAJ_VELOCITY\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:91
#, no-wrap
msgid ""
"# user message dialog info\n"
"USRMESS_BOLDTEXT = self.INI.findall(\"DISPLAY\", \"MESSAGE_BOLDTEXT\")\n"
"USRMESS_TEXT = self.INI.findall(\"DISPLAY\", \"MESSAGE_TEXT\")\n"
"USRMESS_TYPE = self.INI.findall(\"DISPLAY\", \"MESSAGE_TYPE\")\n"
"USRMESS_PINNAME = self.INI.findall(\"DISPLAY\", \"MESSAGE_PINNAME\")\n"
"USRMESS_DETAILS = self.INI.findall(\"DISPLAY\", \"MESSAGE_DETAILS\")\n"
"USRMESS_ICON = self.INI.findall(\"DISPLAY\", \"MESSAGE_ICON\")\n"
"ZIPPED_USRMESS =\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:93 src/gui/qtvcp-libraries.adoc:174
#, no-wrap
msgid "self.GLADEVCP = (self.INI.find(\"DISPLAY\", \"GLADEVCP\")) or None\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:99
#, no-wrap
msgid ""
"# embedded program info\n"
"TAB_NAMES = (self.INI.findall(\"DISPLAY\", \"EMBED_TAB_NAME\")) or None\n"
"TAB_LOCATION = (self.INI.findall(\"DISPLAY\", \"EMBED_TAB_LOCATION\")) or []\n"
"TAB_CMD = (self.INI.findall(\"DISPLAY\", \"EMBED_TAB_COMMAND\")) or None\n"
"ZIPPED_TABS =\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:103 src/gui/qtvcp-libraries.adoc:188
#, no-wrap
msgid ""
"MDI_COMMAND_LIST =      (heading: [MDI_COMMAND_LIST], title: MDI_COMMAND\")\n"
"TOOL_FILE_PATH =        (heading: [EMCIO], title:TOOL_TABLE)\n"
"POSTGUI_HALFILE_PATH =  (heading: [HAL], title: POSTGUI_HALFILE)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp-libraries.adoc:106
msgid "There are some 'helper functions' - mostly used for widget support"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:116
#, no-wrap
msgid ""
"get_error_safe_setting(self, heading, detail, default=None)\n"
"convert_metric_to_machine(data)\n"
"convert_imperial_to_machine(data)\n"
"convert_9_metric_to_machine(data)\n"
"convert_9_imperial_to_machine(data)\n"
"convert_units(data)\n"
"convert_units_9(data)\n"
"get_filter_program(fname)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp-libraries.adoc:119 src/gui/gladevcp-libraries.adoc:155
#: src/gui/qtvcp-libraries.adoc:708
msgid "To import this modules add this Python code to your import section:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:125 src/gui/gladevcp-libraries.adoc:161
#: src/gui/qtvcp-code-snippets.adoc:566 src/gui/qtvcp-libraries.adoc:40
#: src/gui/qtvcp-libraries.adoc:215 src/gui/qtvcp-libraries.adoc:271
#: src/gui/qtvcp-libraries.adoc:544 src/gui/qtvcp-libraries.adoc:578
#: src/gui/qtvcp-libraries.adoc:677 src/gui/qtvcp-libraries.adoc:714
#: src/gui/qtvcp-libraries.adoc:972 src/gui/qtvcp-libraries.adoc:1093
#: src/gui/qtvcp-libraries.adoc:1310
#, no-wrap
msgid ""
"############################\n"
"# **** IMPORT SECTION **** #\n"
"############################\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:127
#, no-wrap
msgid "from gladevcp.core import Info\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp-libraries.adoc:130
msgid ""
"To instantiate the module so you can use it in a handler file add this "
"Python code to your instantiate section:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:136 src/gui/gladevcp-libraries.adoc:172
#: src/gui/qtvcp.adoc:689 src/gui/qtvcp-libraries.adoc:227
#: src/gui/qtvcp-libraries.adoc:283 src/gui/qtvcp-libraries.adoc:556
#: src/gui/qtvcp-libraries.adoc:590 src/gui/qtvcp-libraries.adoc:689
#: src/gui/qtvcp-libraries.adoc:728 src/gui/qtvcp-libraries.adoc:984
#, no-wrap
msgid ""
"###########################################\n"
"# **** INSTANTIATE LIBRARIES SECTION **** #\n"
"###########################################\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:138 src/gui/qtvcp-libraries.adoc:229
#, no-wrap
msgid "INFO = Info()\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp-libraries.adoc:141
msgid "To access INFO data use this general syntax:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:147 src/gui/qtvcp-libraries.adoc:239
#, no-wrap
msgid ""
"home_state = INFO.NO_HOME_REQUIRED\n"
"if INFO.MACHINE_IS_METRIC is True:\n"
"    print('Metric based')\n"
msgstr ""

#. type: Table
#: src/gui/gladevcp-libraries.adoc:149 src/plasma/qtplasmac.adoc:2494
#, no-wrap
msgid "Action"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp-libraries.adoc:153
msgid ""
"This library is used to command LinuxCNC's motion controller.  It tries to "
"hide incidental details and add convenience methods for developers."
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:163
#, no-wrap
msgid "from gladevcp.core import Action\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp-libraries.adoc:166
msgid ""
"To instantiate the module so you can use it add this Python code to your "
"instantiate section:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:174 src/gui/qtvcp-libraries.adoc:285
#, no-wrap
msgid "ACTION = Action()\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp-libraries.adoc:176
msgid "To access Action commands use general syntax such as these:"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:180 src/gui/qtvcp-libraries.adoc:294
#, no-wrap
msgid ""
"ACTION.SET_ESTOP_STATE(state)\n"
"ACTION.SET_MACHINE_STATE(state)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:183 src/gui/qtvcp-libraries.adoc:297
#, no-wrap
msgid ""
"ACTION.SET_MACHINE_HOMING(joint)\n"
"ACTION.SET_MACHINE_UNHOMED(joint)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:185 src/gui/gladevcp-libraries.adoc:191
#: src/gui/qtvcp-libraries.adoc:299 src/gui/qtvcp-libraries.adoc:305
#, no-wrap
msgid "ACTION.SET_LIMITS_OVERRIDE()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:189 src/gui/qtvcp-libraries.adoc:303
#, no-wrap
msgid ""
"ACTION.SET_MDI_MODE()\n"
"ACTION.SET_MANUAL_MODE()\n"
"ACTION.SET_AUTO_MODE()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:195 src/gui/qtvcp-libraries.adoc:309
#, no-wrap
msgid ""
"ACTION.CALL_MDI(code)\n"
"ACTION.CALL_MDI_WAIT(code)\n"
"ACTION.CALL_INI_MDI(number)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:197 src/gui/qtvcp-libraries.adoc:311
#, no-wrap
msgid "ACTION.CALL_OWORD()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:200 src/gui/qtvcp-libraries.adoc:314
#, no-wrap
msgid ""
"ACTION.OPEN_PROGRAM(filename)\n"
"ACTION.SAVE_PROGRAM(text_source, fname):\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:203 src/gui/qtvcp-libraries.adoc:317
#, no-wrap
msgid ""
"ACTION.SET_AXIS_ORIGIN(axis,value)\n"
"ACTION.SET_TOOL_OFFSET(axis,value,fixture = False)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:207 src/gui/qtvcp-libraries.adoc:321
#, no-wrap
msgid ""
"ACTION.RUN()\n"
"ACTION.ABORT()\n"
"ACTION.PAUSE()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:212 src/gui/qtvcp-libraries.adoc:326
#, no-wrap
msgid ""
"ACTION.SET_MAX_VELOCITY_RATE(rate)\n"
"ACTION.SET_RAPID_RATE(rate)\n"
"ACTION.SET_FEED_RATE(rate)\n"
"ACTION.SET_SPINDLE_RATE(rate)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:217 src/gui/qtvcp-libraries.adoc:331
#, no-wrap
msgid ""
"ACTION.SET_JOG_RATE(rate)\n"
"ACTION.SET_JOG_INCR(incr)\n"
"ACTION.SET_JOG_RATE_ANGULAR(rate)\n"
"ACTION.SET_JOG_INCR_ANGULAR(incr, text)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:222 src/gui/qtvcp-libraries.adoc:336
#, no-wrap
msgid ""
"ACTION.SET_SPINDLE_ROTATION(direction = 1, rpm = 100, number = 0)\n"
"ACTION.SET_SPINDLE_FASTER(number = 0)\n"
"ACTION.SET_SPINDLE_SLOWER(number = 0)\n"
"ACTION.SET_SPINDLE_STOP(number = 0)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:224 src/gui/qtvcp-libraries.adoc:338
#, no-wrap
msgid "ACTION.SET_USER_SYSTEM(system)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:228 src/gui/qtvcp-libraries.adoc:342
#, no-wrap
msgid ""
"ACTION.ZERO_G92_OFFSET()\n"
"ACTION.ZERO_ROTATIONAL_OFFSET()\n"
"ACTION.ZERO_G5X_OFFSET(num)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:231 src/gui/qtvcp-libraries.adoc:345
#, no-wrap
msgid ""
"ACTION.RECORD_CURRENT_MODE()\n"
"ACTION.RESTORE_RECORDED_MODE()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:233 src/gui/qtvcp-libraries.adoc:347
#, no-wrap
msgid "ACTION.SET_SELECTED_AXIS(jointnum)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:236 src/gui/qtvcp-libraries.adoc:350
#, no-wrap
msgid ""
"ACTION.DO_JOG(jointnum, direction)\n"
"ACTION.JOG(jointnum, direction, rate, distance=0)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:240 src/gui/qtvcp-libraries.adoc:354
#, no-wrap
msgid ""
"ACTION.TOGGLE_FLOOD()\n"
"ACTION.SET_FLOOD_ON()\n"
"ACTION.SET_FLOOD_OFF()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:244 src/gui/qtvcp-libraries.adoc:358
#, no-wrap
msgid ""
"ACTION.TOGGLE_MIST()\n"
"ACTION.SET_MIST_ON()\n"
"ACTION.SET_MIST_OFF()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:247 src/gui/qtvcp-libraries.adoc:361
#, no-wrap
msgid ""
"ACTION.RELOAD_TOOLTABLE()\n"
"ACTION.UPDATE_VAR_FILE()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:251 src/gui/qtvcp-libraries.adoc:365
#, no-wrap
msgid ""
"ACTION.TOGGLE_OPTIONAL_STOP()\n"
"ACTION.SET_OPTIONAL_STOP_ON()\n"
"ACTION.SET_OPTIONAL_STOP_OFF()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:255 src/gui/qtvcp-libraries.adoc:369
#, no-wrap
msgid ""
"ACTION.TOGGLE_BLOCK_DELETE()\n"
"ACTION.SET_BLOCK_DELETE_ON()\n"
"ACTION.SET_BLOCK_DELETE_OFF()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:258 src/gui/qtvcp-libraries.adoc:372
#, no-wrap
msgid ""
"ACTION.RELOAD_DISPLAY()\n"
"ACTION.SET_GRAPHICS_VIEW(view)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:260 src/gui/qtvcp-libraries.adoc:374
#, no-wrap
msgid "ACTION.UPDATE_MACHINE_LOG(text, option=None):\n"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:263 src/gui/qtvcp-libraries.adoc:394
#, no-wrap
msgid ""
"ACTION.SET_DISPLAY_MESSAGE(string)\n"
"ACTION.SET_ERROR_MESSAGE(string)\n"
msgstr ""

#. type: Plain text
#: src/gui/gladevcp-libraries.adoc:266
msgid ""
"There are some 'helper functions' - mostly used for this library's support"
msgstr ""

#. type: delimited block -
#: src/gui/gladevcp-libraries.adoc:273
#, no-wrap
msgid ""
"get_jog_info (num)\n"
"jnum_check(num)\n"
"ensure_mode(modes)\n"
"open_filter_program(filename, filter)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:20
msgid ""
"GMOCCAPY is a GUI for LinuxCNC, designed to be used with a touch screen, but "
"can also be used on normal screens with a mouse or hardware buttons and MPG "
"wheels, as it presents HAL Pins for the most common needs. Please find more "
"information in the following."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:26
msgid ""
"It offers the possibility to display up to 9 axes, support a lathe mode for "
"normal and back tool lathe and can be adapted to nearly every need, because "
"GMOCCAPY supports embedded tabs and side panels.  As a good example for that "
"see http://wiki.linuxcnc.org/cgi-bin/wiki.pl?"
"Gmoccapy_plasma[gmoccapy_plasma]."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:30
msgid ""
"GMOCCAPY 3 does support up to 9 axes and 9 joints. As GMOCCAPY 3 has been "
"changed in code to support the joint / axis changes in LinuxCNC it does not "
"work on 2.7 or 2.6 branch!"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:35
msgid ""
"It has support for integrated virtual keyboard (onboard or matchbox-"
"keyboard), so there is no need for a hardware keyboard or mouse, but it can "
"also be used with that hardware. GMOCCAPY offers a separate settings page to "
"configure most settings of the GUI without editing files."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:47
msgid ""
"GMOCCAPY can be localized very easy, because the corresponding files are "
"separated from the linuxcnc.po files, so there is no need to translate "
"unneeded stuff. The files are placed in */src/po/gmoccapy*. You could just "
"copy the gmoccapy.pot file to something like it.po and translate that file "
"with gtranslator or poedit.  After rebuilding, you'd get the GUI in your "
"preference language. To facilitate the sharing of the translation, GMOCCAPY "
"is available on the https://hosted.weblate.org/projects/linuxcnc/gmocappy/"
"[Weblate web interface].  GMOCCAPY is currently available in English, "
"German, Spanish, Polish, Serbian and Hungarian. Feel free to help me to "
"introduce more languages, be it locally or via the web.  If you need help, "
"don't hesitate to contact me on *nieson@web.de*."
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:48
#, no-wrap
msgid "images/gmoccapy_5_axis.png"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:60
msgid ""
"GMOCCAPY 3 has been tested on Debian Jessie, Debian Stretch and MINT 18 with "
"LinuxCNC master and 2.8 release. It fully support joint / axis changes of "
"LinuxCNC, making it suitable as GUI for Scara, Robots or any other config "
"with more joints than axes. So it supports also gantry configs. If you use "
"other versions, please inform about problems and / or solutions on the "
"http://www.linuxcnc.org/index.php/english/forum/41-guis/26314-gmoccapy-a-new-"
"screen-for-linuxcnc[LinuxCNC forum] or the http://www.cncecke.de/forum/"
"showthread.php?t=78549[German CNC Ecke Forum] or https://lists.sourceforge."
"net/lists/listinfo/emc-users[LinuxCNC users mailing list]."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:64
msgid ""
"The minimum screen resolution for GMOCCAPY, using it without side panels is "
"*979 x 750 Pixel*, so it should fit to every standard screen. It is "
"recommended to use screens with minimum resolution of 1024x748."
msgstr ""

#. type: Title ==
#: src/gui/gmoccapy.adoc:65
#, no-wrap
msgid "How To Get GMOCCAPY"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:72
#, no-wrap
msgid ""
"GMOCCAPY 3 is included in the standard distribution of LinuxCNC since release 2.8. So the easiest way to get GMOCCAPY on your controlling PC, is just to download the http://www.linuxcnc.org/downloads/[ISO] and install it from the CD/DVD/USB-stick.\n"
"This allows you to receive updates with the regular Debian packages."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:74
msgid ""
"You will get a similar screen to the following (the design may vary "
"depending on your config):"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:75
#, no-wrap
msgid "images/gmoccapy_3_axis.png"
msgstr ""

#. type: Title ==
#: src/gui/gmoccapy.adoc:77
#, no-wrap
msgid "Basic Configuration"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:80
msgid "GMOCCAPY 3 supports the following command line options:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:82
msgid ""
"'-user_mode': If set, the setup button will be disabled, so normal machine "
"operators are not able to edit the settings of the machine."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:83
msgid ""
"'-logo <path to logo file>': If given, the logo will hide the jog button tab "
"in manual mode, this is only useful for machines with hardware buttons for "
"jogging and increment selection."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:86
msgid ""
"There is really not to much to configure just to run GMOCCAPY, but there are "
"some points you should take care off if you want to use all the features of "
"the GUI."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:88
msgid ""
"You will find a lot of simulation configurations (INI files) included, just "
"to show the basics:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:90
msgid "gmoccapy.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:91
msgid "gmoccapy_4_axis.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:92
msgid "lathe_configs/gmoccapy_lathe.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:93
msgid "lathe_configs/gmoccapy_lathe_imperial.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:94
msgid "gmoccapy_left_panel.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:95
msgid "gmoccapy_right_panel.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:96
msgid "gmoccapy_messages.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:97
msgid "gmoccapy_pendant.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:98
msgid "gmoccapy_sim_hardware_button.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:99
msgid "gmoccapy_tool_sensor.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:100
msgid "gmoccapy_with_user_tabs.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:101
msgid "gmoccapy_XYZAB.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:102
msgid "gmoccapy_XYZAC.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:103
msgid "gmoccapy_XYZCW.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:104
msgid "gmoccapy-JA/Gantry/gantry_mm.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:105
msgid "gmoccapy-JA/scara/scara.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:106
msgid "gmoccapy-JA/table-rotary-tilting/xyzac-trt.ini"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:107
msgid "and a lot more ..."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:109
msgid "The names should explain the main intention of the different INI files."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:111
msgid ""
"If you use an existing configuration of your machine, just edit your INI "
"according to this document."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:115
msgid ""
"If you want to use <<gmoccapy:macros,MACROS>>, don't forget to set the path "
"to your macros or subroutines folder as described below."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:118
msgid ""
"So let us take a closer look at the INI file and what you need to include to "
"use GMOCCAPY on your machine:"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:120
#, no-wrap
msgid "The DISPLAY Section"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:133
#, no-wrap
msgid ""
"[DISPLAY]\n"
"DISPLAY = gmoccapy\n"
"PREFERENCE_FILE_PATH = gmoccapy_preferences\n"
"MAX_FEED_OVERRIDE = 1.5\n"
"MAX_SPINDLE_OVERRIDE = 1.2\n"
"MIN_SPINDLE_OVERRIDE = 0.5\n"
"LATHE = 1\n"
"BACK_TOOL_LATHE = 1\n"
"PROGRAM_PREFIX = ../../nc_files/\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:137
msgid "_DISPLAY = gmoccapy_ - This tells LinuxCNC to use GMOCCAPY."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:141
msgid ""
"_PREFERENCE_FILE_PATH_ - Gives the location and name of the preferences file "
"to be used.  In most cases this line will not be needed, it is used by "
"GMOCCAPY to store your settings of the GUI, like themes, DRO units, colors, "
"and keyboard settings, etc., see <<gmoccapy:settings-page,settings page>> "
"for more details."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:149
msgid ""
"If no path or file is given, GMOCCAPY will use as default <your_machinename>."
"pref, if no machine name is given in your INI File it will use gmoccapy."
"pref. The file will be stored in your config directory, so the settings will "
"not be mixed if you use several configs. If you only want to use one file "
"for several machines, you need to include `PREFERENCE_FILE_PATH` in your INI."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:152
msgid ""
"_MAX_FEED_OVERRIDE = 1.5_ - Sets the maximum feed override, in the example "
"given, you will be allowed to override the feed by 150%."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:155
msgid "If no value is given, it will be set to 1.0."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:158
msgid ""
"_MIN_SPINDLE_OVERRIDE = 0.5_ and _MAX_SPINDLE_OVERRIDE = 1.2_ - Will allow "
"you to change the spindle override within a limit from 50% to 120%."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:161
msgid "If no values are given, MIN will be set to 0.1 and MAX to 1.0."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:163
msgid "_LATHE = 1_ - Set the screen layout to control a lathe."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:167
msgid ""
"_BACK_TOOL_LATHE = 1_ - Is optional and will switch the X axis in a way you "
"need for a back tool lathe. Also the keyboard shortcuts will react in a "
"different way.  It is allowed with GMOCCAPY to configure a lathe also with "
"additional axes, so you may use also a XZCW config for a lathe."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:170
msgid "See also the <<gmoccapy:lathe-section,Lathe Specific Section>>."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:172
msgid ""
"_PROGRAM_PREFIX = ../../nc_files/_ - Is the entry to tell LinuxCNC/GMOCCAPY "
"where to look for the NGC files."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:176
msgid ""
"If not specified, GMOCCAPY will look in the following order for NGC files: "
"First `linuxcnc/nc_files` and then the users home directory."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:179
#, no-wrap
msgid "The TRAJ Section"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:182
msgid ""
"_DEFAULT_LINEAR_VELOCITY = 85.0_ - Sets the default jog velocity of the "
"machine."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:186
msgid ""
"If not set, half of 'MAX_LINEAR_VELOCITY' will be used.  If that value is "
"also not given, it will default to 180."
msgstr ""

#.  max. jog velocity?
#. type: Plain text
#: src/gui/gmoccapy.adoc:189
msgid ""
"_MAX_LINEAR_VELOCITY = 230.0_ - Sets the maximal velocity of the machine."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:192
msgid "Defaults to 600 if not set."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:195 src/gui/qtdragon.adoc:270
#, no-wrap
msgid "Macro Buttons"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:201
msgid ""
"You can add macros to GMOCCAPY, similar to Touchy's way. A macro is nothing "
"else than a NGC file. You are able to execute complete CNC programs in MDI "
"mode by just pushing one button. To do so, you first have to specify the "
"search path for macros:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:207
#, no-wrap
msgid ""
"[RS274NGC]\n"
"SUBROUTINE_PATH = macros\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:210
msgid ""
"This sets the path to search for macros and other subroutines. Several "
"subroutine paths can be separeted \":\"."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:212
msgid "Then you just have to add a section like this:"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:213
#, no-wrap
msgid "Configuration of Five Macros to be Shown in the MDI Button List"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:222
#, no-wrap
msgid ""
"[MACROS]\n"
"MACRO = i_am_lost\n"
"MACRO = hello_world\n"
"MACRO = jog_around\n"
"MACRO = increment xinc yinc\n"
"MACRO = go_to_position X-pos Y-pos Z-pos\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:225
msgid ""
"Then you have to provide the corresponding NGC files which have to follow "
"these rules:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:228
msgid ""
"The name of the file need to be exactly the same as the name mentioned in "
"the macro line, just with the \".ngc\" extension (case sensitive)."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:230
msgid ""
"The file must contain a subroutine like '*O<i_am_lost> sub*', the name of "
"the sub must match exactly (case sensitive) the name of the macro."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:231
msgid ""
"The file must end with an endsub '*O<i_am_lost> endsub*' followed by an "
"'*M2*' command."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:233
msgid ""
"The files need to be placed in a folder specified in your INI file by "
"'SUBROUTINE_PATH' in the RS274NGC section"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:236
msgid ""
"The code between sub and endsub will be executed by pushing the "
"corresponding macro button."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:242
msgid ""
"A maximum of 16 macros will be shown in the GUI. Due to space reasons you "
"may need to click on an arrow to switch the page and display hidden macro "
"buttons.  The macro buttons will be displayed in the order of the INI "
"entries.  It is no error placing more than 16 macros in your INI file, they "
"will just not be shown."
msgstr ""

#. .Macros example
#. image::images/gmoccapy_mdi_hidden_keyboard.png[align="left"]
#. type: Plain text
#: src/gui/gmoccapy.adoc:250
msgid ""
"You will find the sample macros in a folder named 'macros' placed in the "
"GMOCCAPY sim folder. If you have given several subroutine paths, they will "
"be searched in the order of the given paths. The first file found will be "
"used."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:252
msgid "GMOCCAPY will also accept macros asking for parameters like:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:256
#, no-wrap
msgid ""
"[MACRO]\n"
"MACRO = go_to_position X-pos Y-pos Z-pos\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:260
msgid ""
"The parameters must be separated by spaces.  This example calls a file "
"'go_to_position.ngc' with the following content:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:264
#, no-wrap
msgid ""
"; Test file \"go to position\"\n"
"; will jog the machine to a given position\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:266
#, no-wrap
msgid "O<go_to_position> sub\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:275
#, no-wrap
msgid ""
"G17\n"
"G21\n"
"G54\n"
"G61\n"
"G40\n"
"G49\n"
"G80\n"
"G90\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:279
#, no-wrap
msgid ""
";#1 = <X-Pos>\n"
";#2 = <Y-Pos>\n"
";#3 = <Z-Pos>\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:282
#, no-wrap
msgid ""
"(DBG, Will now move machine to X = #1 , Y = #2 , Z = #3)\n"
"G0 X #1 Y #2 Z #3\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:285
#, no-wrap
msgid ""
"O<go_to_position> endsub\n"
"M2\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:290
msgid ""
"After pushing the '*execute macro button*', you will be asked to enter the "
"values for '*X-pos Y-pos Z-pos*' and the macro will only run if all values "
"have been given."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:294
msgid ""
"If you would like to use a macro without any movement, see also the notes in "
"<<sub:NOT_ENDING_MACROS,known problems>>."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:295
#, no-wrap
msgid "Macro example using the \"go to position\"-macro"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:296
#, no-wrap
msgid "images/gmoccapy_getting_macro_info.png"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:300
#, no-wrap
msgid "Embedded Tabs and Panels"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:304
msgid ""
"You can add embedded programs to GMOCCAPY like you can do in AXIS, Touchy "
"and Gscreen. All is done by GMOCCAPY automatically if you include a few "
"lines in your INI file in the DISPLAY section."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:307
msgid ""
"If you have never used a Glade panel, I recommend to read the excellent "
"documentation on http://www.linuxcnc.org/docs/2.9/html/gui/gladevcp."
"html[Glade VCP]."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:308
#, no-wrap
msgid "Embedded Tab Example"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:315
#, no-wrap
msgid ""
"EMBED_TAB_NAME = DRO\n"
"EMBED_TAB_LOCATION = ntb_user_tabs\n"
"EMBED_TAB_COMMAND = gladevcp -x {XID} dro.glade\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:319
#, no-wrap
msgid ""
"EMBED_TAB_NAME = Second user tab\n"
"EMBED_TAB_LOCATION = ntb_preview\n"
"EMBED_TAB_COMMAND = gladevcp -x {XID} vcp_box.glade\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:322
msgid ""
"All you have to take care of, is that you include for every tab or side "
"panel the mentioned three lines:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:325
msgid ""
"EMBED_TAB_NAME = Represents the name of the tab or side panel, it is up to "
"you what name you use, but it must be present!"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:326
msgid ""
"EMBED_TAB_LOCATION = The place where your program will be placed in the GUI, "
"see figure <<fig:gmoccapy_emb_tab_locations,Embedded tab locations>>. Valid "
"values are:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:327
#, no-wrap
msgid "*ntb_user_tabs*            (as main tab, covering the complete screen)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:328
#, no-wrap
msgid "*ntb_preview*              (as tab on the preview side *(1)*)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:329
#, no-wrap
msgid "*hbox_jog*                 (will hide the jog buttons and introduce your glade file here *(2)*)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:330
#, no-wrap
msgid "*box_left*                 (on the left, complete high of the screen)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:331
#, no-wrap
msgid "*box_right*                (on the right, in between the normal screen and the button list)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:332
#, no-wrap
msgid "*box_tool_and_code_info*   (will hide the Tool information and G-code frames and introduce your glade file here *(3)*)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:333
#, no-wrap
msgid "*box_tool_info*            (will hide the Tool information frame and introduce your glade file here)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:334
#, no-wrap
msgid "*box_code_info*            (will hide the G-code information frame and introduce your glade file here)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:335
#, no-wrap
msgid "*box_vel_info*             (will hide the velocity frames and introduce your glade file *(4)*)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:336
#, no-wrap
msgid "*box_coolant_and_spindle*  (will hide the coolant and spindle frames and introduce your glade file here *(5)+(6)*)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:337
#, no-wrap
msgid "*box_cooling*              (will hide the cooling frame and introduce your glade file *(5)*)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:338
#, no-wrap
msgid "*box_spindle*              (will hide the spindle frame and introduce your glade file *(6)*)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:339
#, no-wrap
msgid "*box_custom_1*             (will introduce your glade file left of vel_frame)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:340
#, no-wrap
msgid "*box_custom_2*             (will introduce your glade file left of cooling_frame)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:341
#, no-wrap
msgid "*box_custom_3*             (will introduce your glade file left of spindle_frame)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:342
#, no-wrap
msgid "*box_custom_4*             (will introduce your glade file right of spindle_frame)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:345
msgid "See also the included sample INI files to see the differences."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:347
msgid "EMBED_TAB_COMMAND = The command to execute, i.e."
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:350
#, no-wrap
msgid "gladevcp -x {XID} dro.glade\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:354
msgid ""
"includes a custom glade file called dro.glade in the mentioned location The "
"file must be placed in the config folder of your machine."
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:357
#, no-wrap
msgid "gladevcp h_buttonlist.glade\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:362
msgid ""
"will just open a new user window called h_buttonlist.glade note the "
"difference, this one is stand alone, and can be moved around independent "
"from GMOCCAPY window."
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:365
#, no-wrap
msgid "gladevcp -c gladevcp -u hitcounter.py -H manual-example.hal manual-example.ui\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:370
msgid ""
"will add a the panel manual-example.ui, include a custom Python handler, "
"hitcounter.py and make all connections after realizing the panel according "
"to manual-example.hal."
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:373
#, no-wrap
msgid "hide\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:376
msgid "will hide the chosen box."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:378
#, no-wrap
msgid "Embedded tab locations"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:379
#, no-wrap
msgid "images/gmoccapy_embedded_tabs.png"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:386
msgid ""
"If you make any HAL connections to your custom glade panel, you need to do "
"that in the HAL file specified in the EMBED_TAB_COMMAND line, otherwise you "
"may get an error that the HAL pin does not exist -- this is because of race "
"conditions loading the HAL files. Connections to GMOCCAPY HAL pins need to "
"be made in the postgui HAL file specified in your INI file, because these "
"pins do not exist prior of realizing the GUI."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:388
msgid "Here are some examples:"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:389
#, no-wrap
msgid "ntb_preview - in maximized view"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:390
#, no-wrap
msgid "images/gmoccapy_ntb_preview_maximized_2.png"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:392
#, no-wrap
msgid "ntb_preview"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:393
#, no-wrap
msgid "images/gmoccapy_ntb_preview.png"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:395
#, no-wrap
msgid "box_right - and GMOCCAPY in MDI mode"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:396
#, no-wrap
msgid "images/gmoccapy_with_right_panel_in_MDI_mode.png"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:399
#, no-wrap
msgid "User Created Messages"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:402
msgid ""
"GMOCCAPY has the ability to create HAL driven user messages. To use them you "
"need to introduce some lines in the [DISPLAY] section of the INI file."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:404
msgid "These three lines are needed to define a user pop up message dialog:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:409
#, no-wrap
msgid ""
"MESSAGE_TEXT    = The text to be displayed, may be pango markup formatted\n"
"MESSAGE_TYPE    = \"status\" , \"okdialog\" , \"yesnodialog\"\n"
"MESSAGE_PINNAME = is the name of the HAL pin group to be created\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:414
msgid ""
"The messages support pango markup language. Detailed information about the "
"markup language can be found at https://developer.gnome.org/pango/stable/"
"PangoMarkupFormat.html[Pango Markup]."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:416
msgid "The following three dialog types are available:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:419
#, no-wrap
msgid ""
"*status* - Will just display a message as pop up window, using the messaging\n"
"system of GMOCCAPY.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:421
#, no-wrap
msgid ""
"*okdialog* - Will hold focus on the message dialog and will activate a\n"
"`-waiting` HAL pin.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:423
#, no-wrap
msgid ""
"*yesnodialog* - Will hold focus on the message dialog and will activate\n"
"a `-waiting` HAL pin and provide a `-response` HAL pin.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:425
msgid ""
"For more detailed information of the pins see <<gmoccapy:user-created-"
"message,User Created Message HAL Pins>>."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:426
#, no-wrap
msgid "Example of User Message Configuration"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:432
#, no-wrap
msgid ""
"MESSAGE_TEXT = This is a <span background=\"#ff0000\" foreground=\"#ffffff\">info-message</span> test\n"
"MESSAGE_TYPE = status\n"
"MESSAGE_PINNAME = statustest\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:436
#, no-wrap
msgid ""
"MESSAGE_TEXT = This is a yes no dialog test\n"
"MESSAGE_TYPE = yesnodialog\n"
"MESSAGE_PINNAME = yesnodialog\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:440
#, no-wrap
msgid ""
"MESSAGE_TEXT = Text can be <small>small</small>, <big>big</big>, <b>bold</b <i>italic</i>, and even be <span color=\"red\">colored</span>.\n"
"MESSAGE_TYPE = okdialog\n"
"MESSAGE_PINNAME = okdialog\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:444
msgid "Currently the formatting doesn't work."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:447 src/gui/qtdragon.adoc:184
#, no-wrap
msgid "Preview Control"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:451
msgid ""
"Magic comments can be used to control the G-code preview.  On very large "
"programs the preview can take a long time to load. You can control what is "
"shown and what is hidden on the graphics screen by adding the appropriate "
"comments from this list into your gcode:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:456
#, no-wrap
msgid ""
"(PREVIEW,hide)\n"
"<G-code to be hidden>\n"
"(PREVIEW,show)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:463
msgid ""
"GMOCCAPY exports several HAL pins to be able to react to hardware devices.  "
"The goal is to get a GUI that may be operated in a tool shop, completely/"
"mostly without mouse or keyboard."
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:469
msgid ""
"You will have to do all connections to GMOCCAPY pins in your postgui.hal "
"file.  When GMOCCAPY is started, it creates the HAL pins for the GUI then it "
"executes the post-GUI HAL file named in the INI file:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:473
#, no-wrap
msgid ""
"[HAL]\n"
"POSTGUI_HALFILE=<filename>\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:480
#, no-wrap
msgid ""
"Typically `<filename>` would be the configs base name + `_postgui.hal`, e.g. `lathe_postgui.hal`, but can be any legal filename.\n"
"These commands are executed after the screen is built, guaranteeing the widget's HAL pins are available.\n"
"You can have multiple line of `POSTGUI_HALFILE=<filename>` in the INI file. Each will be run one after the other in the order they appear."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:482
#, no-wrap
msgid "Right and Bottom Button Lists"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:488
msgid ""
"The screen has two main button lists, one on the right side an one on the "
"bottom. The right handed buttons will not change during operation, but the "
"bottom button list will change very often. The buttons are count from up to "
"down and from left to right beginning with 0."
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:491
msgid "The pin names have changed in GMOCCAPY 2 to order them in a better way."
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:493
msgid "The pins for the right (vertical) buttons are:"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:495
#, no-wrap
msgid "*gmoccapy.v-button.button-0* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:496
#, no-wrap
msgid "*gmoccapy.v-button.button-1* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:497
#, no-wrap
msgid "*gmoccapy.v-button.button-2* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:498
#, no-wrap
msgid "*gmoccapy.v-button.button-3* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:499
#, no-wrap
msgid "*gmoccapy.v-button.button-4* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:500
#, no-wrap
msgid "*gmoccapy.v-button.button-5* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:501
#, no-wrap
msgid "*gmoccapy.v-button.button-6* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:503
msgid "For the bottom (horizontal) buttons they are:"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:505
#, no-wrap
msgid "*gmoccapy.h-button.button-0* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:506
#, no-wrap
msgid "*gmoccapy.h-button.button-1* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:507
#, no-wrap
msgid "*gmoccapy.h-button.button-2* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:508
#, no-wrap
msgid "*gmoccapy.h-button.button-3* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:509
#, no-wrap
msgid "*gmoccapy.h-button.button-4* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:510
#, no-wrap
msgid "*gmoccapy.h-button.button-5* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:511
#, no-wrap
msgid "*gmoccapy.h-button.button-6* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:512
#, no-wrap
msgid "*gmoccapy.h-button.button-7* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:513
#, no-wrap
msgid "*gmoccapy.h-button.button-8* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:514
#, no-wrap
msgid "*gmoccapy.h-button.button-9* _(bit IN)_\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:519
msgid ""
"As the buttons in the bottom list will change according to the mode and "
"other influences, the hardware buttons will activate the displayed "
"functions. So you don't have to take care about switching functions around "
"in HAL, because that is done completely by GMOCCAPY!"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:521
msgid ""
"For a three axes XYZ machine the HAL pins will react as shown in the "
"following three tables:"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:523
#, no-wrap
msgid "Functional assignment of horizontal buttons (1)"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:526 src/gui/gmoccapy.adoc:543
#: src/gui/gmoccapy.adoc:560 src/hal/intro.adoc:196
#: src/hal/parallel-port.adoc:127
#, no-wrap
msgid "Pin"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:526
#, no-wrap
msgid "Manual Mode"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:526
#, no-wrap
msgid "MDI Mode"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:527
#, no-wrap
msgid "Auto Mode"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:527 src/gui/gmoccapy.adoc:544
#: src/gui/gmoccapy.adoc:561
#, no-wrap
msgid "gmoccapy.h-button.button-0"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:527
#, no-wrap
msgid "open homing button"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:527
#, no-wrap
msgid "macro_0 or nothing"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:528
#, no-wrap
msgid "open file"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:528 src/gui/gmoccapy.adoc:545
#: src/gui/gmoccapy.adoc:562
#, no-wrap
msgid "gmoccapy.h-button.button-1"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:528
#, no-wrap
msgid "open touch off stuff"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:528
#, no-wrap
msgid "macro_1 or nothing"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:529
#, no-wrap
msgid "reload program"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:529 src/gui/gmoccapy.adoc:546
#: src/gui/gmoccapy.adoc:563
#, no-wrap
msgid "gmoccapy.h-button.button-2"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:529
#, no-wrap
msgid "macro_2 or nothing"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:530
#, no-wrap
msgid "run"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:530 src/gui/gmoccapy.adoc:547
#: src/gui/gmoccapy.adoc:564
#, no-wrap
msgid "gmoccapy.h-button.button-3"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:530
#, no-wrap
msgid "open tool dialogs"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:530
#, no-wrap
msgid "macro_3 or nothing"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:531
#, no-wrap
msgid "stop"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:531 src/gui/gmoccapy.adoc:548
#: src/gui/gmoccapy.adoc:565
#, no-wrap
msgid "gmoccapy.h-button.button-4"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:531
#, no-wrap
msgid "macro_4 or nothing"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:532
#, no-wrap
msgid "pause"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:532 src/gui/gmoccapy.adoc:549
#: src/gui/gmoccapy.adoc:566
#, no-wrap
msgid "gmoccapy.h-button.button-5"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:532
#, no-wrap
msgid "macro_5 or nothing"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:533
#, no-wrap
msgid "step by step"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:533 src/gui/gmoccapy.adoc:550
#: src/gui/gmoccapy.adoc:567
#, no-wrap
msgid "gmoccapy.h-button.button-6"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:533
#, no-wrap
msgid "macro_6 or nothing"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:534
#, no-wrap
msgid "run from line if enabled in settings, otherwise Nothing"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:534 src/gui/gmoccapy.adoc:551
#: src/gui/gmoccapy.adoc:568
#, no-wrap
msgid "gmoccapy.h-button.button-7"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:534
#, no-wrap
msgid "macro_7 or nothing"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:535
#, no-wrap
msgid "optional blocks"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:535 src/gui/gmoccapy.adoc:552
#: src/gui/gmoccapy.adoc:569
#, no-wrap
msgid "gmoccapy.h-button.button-8"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:535 src/gui/gmoccapy.adoc:536
#, no-wrap
msgid "full-size preview"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:535
#, no-wrap
msgid "macro_8 or switch page to additional macros"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:536 src/gui/gmoccapy.adoc:553
#: src/gui/gmoccapy.adoc:570
#, no-wrap
msgid "gmoccapy.h-button.button-9"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:536
#, no-wrap
msgid "exit if machine is off, otherwise no reaction"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:536
#, no-wrap
msgid "open keyboard or abort if macro is running"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:537
#, no-wrap
msgid "edit code"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:540
#, no-wrap
msgid "Functional assignment of horizontal buttons (2)"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:543
#, no-wrap
msgid "Settings Mode"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:543
#, no-wrap
msgid "Homing Mode"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:544
#, no-wrap
msgid "Touch off Mode"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:544
#, no-wrap
msgid "delete MDI history"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:545
#, no-wrap
msgid "edit offsets"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:545
#, no-wrap
msgid "home all"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:546
#, no-wrap
msgid "touch X"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:547
#, no-wrap
msgid "touch Y"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:547
#, no-wrap
msgid "home x"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:548
#, no-wrap
msgid "touch Z"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:548
#, no-wrap
msgid "open classic ladder"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:548
#, no-wrap
msgid "home y"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:549
#, no-wrap
msgid "open HAL scope"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:549
#, no-wrap
msgid "home z"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:550
#, no-wrap
msgid "open HAL status"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:551
#, no-wrap
msgid "zero G92"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:551
#, no-wrap
msgid "open HAL meter"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:552
#, no-wrap
msgid "open HAL calibration"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:552
#, no-wrap
msgid "unhome all"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:553
#, no-wrap
msgid "set selected"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:553
#, no-wrap
msgid "open HAL show"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:553 src/gui/gmoccapy.adoc:554
#: src/gui/gmoccapy.adoc:570 src/gui/gmoccapy.adoc:571
#, no-wrap
msgid "back"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:557
#, no-wrap
msgid "Functional assignment of horizontal buttons (3)"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:560
#, no-wrap
msgid "Tool Mode"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:560
#, no-wrap
msgid "Edit Mode"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:561
#, no-wrap
msgid "Select File"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:561
#, no-wrap
msgid "delete tool(s)"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:562
#, no-wrap
msgid "go to home"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:562
#, no-wrap
msgid "new tool"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:562
#, no-wrap
msgid "reload file"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:563
#, no-wrap
msgid "one directo"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:563
#, no-wrap
msgid "reload tool table"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:563
#, no-wrap
msgid "save"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:564
#, no-wrap
msgid "apply changes"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:564
#, no-wrap
msgid "save as"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:565 src/gui/gmoccapy.adoc:566
#, no-wrap
msgid "move select"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:565
#, no-wrap
msgid "change tool by number T? M6"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:566
#, no-wrap
msgid "set tool by number without change M61 Q?"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:567
#, no-wrap
msgid "jump to dir"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:567
#, no-wrap
msgid "change tool to the selected one"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:567
#, no-wrap
msgid "new file"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:569
#, no-wrap
msgid "select / EN"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:569
#, no-wrap
msgid "touch of tool in Z"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:569
#, no-wrap
msgid "show keyboard"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:574
msgid "So we have 67 reactions with only 10 HAL pins!"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:578
msgid ""
"These pins are made available to be able to use the screen without an touch "
"panel, or protect it from excessive use by placing hardware buttons around "
"the panel. They are available in a sample configuration like shown in the "
"<<gmoccapy-sim-hardware-button,image below>>."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:580
#, no-wrap
msgid "Sample configuration \"gmoccapy_sim_hardware_button\" showing the buttons"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:581
#, no-wrap
msgid "images/gmoccapy_sim_hardware_button.png"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:583
#, no-wrap
msgid "Velocities And Overrides"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:586
msgid ""
"All sliders from GMOCCAPY can be connected to hardware encoders or hardware "
"potentiometers."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:590
msgid ""
"For GMOCCAPY 3 some HAL pin names have changed when new controls have been "
"implemented.  Max velocity does not exist any more, it was replaced by rapid "
"override due to the demand of many users."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:592
msgid "To connect encoders, the following pins are exported:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:594
#, no-wrap
msgid "*gmoccapy.jog.jog-velocity.counts*                _(s32 IN)_ - Jog velocity\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:595
#, no-wrap
msgid "*gmoccapy.jog.jog-velocity.count-enable*          _(bit IN)_ - Must be True, to enable counts\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:596
#, no-wrap
msgid "*gmoccapy.feed.feed-override.counts*              _(s32 IN)_ - feed override\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:597
#, no-wrap
msgid "*gmoccapy.feed.feed-override.count-enable*        _(bit IN)_ - Must be True, to enable counts\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:598
#, no-wrap
msgid "*gmoccapy.feed.reset-feed-override*               _(bit IN)_ - reset the feed override to *0%\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:599
#, no-wrap
msgid "*gmoccapy.spindle.spindle-override.counts*        _(s32 IN)_ - spindle override\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:600
#, no-wrap
msgid "*gmoccapy.spindle.spindle-override.count-enable*  _(bit IN)_ - Must be True, to enable counts\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:601
#, no-wrap
msgid "*gmoccapy.spindle.reset-spindle-override*         _(bit IN)_ - reset the spindle override to *0%\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:602
#, no-wrap
msgid "*gmoccapy.rapid.rapid-override.counts*            _(s32 IN)_ - Maximal Velocity of the *chine\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:603
#, no-wrap
msgid "*gmoccapy.rapid.rapid-override.count-enable*      _(bit IN)_ - Must be True, to enable counts\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:605
msgid "To connect potentiometers, use the following pins:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:607
#, no-wrap
msgid "*gmoccapy.jog.jog-velocity.direct-value*          _(float IN)_ - To adjust the jog velocity slider\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:608
#, no-wrap
msgid "*gmoccapy.jog.jog-velocity.analog-enable*         _(bit IN)_   - Must be True, to allow analog inputs\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:609
#, no-wrap
msgid "*gmoccapy.feed.feed-override.direct-value*        _(float IN)_ - To adjust the feed override slider\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:610
#, no-wrap
msgid "*gmoccapy.feed.feed-override.analog-enable*       _(bit IN)_   - Must be True, to allow analog inputs\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:611
#, no-wrap
msgid "*gmoccapy.spindle.spindle-override.direct-value*  _(float IN)_ - To adjust the spindle override slider\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:612
#, no-wrap
msgid "*gmoccapy.spindle.spindle-override.analog-enable* _(bit IN)_   - Must be True, to allow analog inputs\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:613
#, no-wrap
msgid "*gmoccapy.rapid.rapid-override.direct-value*      _(float)_    - To adjust the max velocity slider\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:614
#, no-wrap
msgid "*gmoccapy.rapid.rapid-override.analog-enable*     _(bit IN)_   - Must be True, to allow analog inputs\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:619
msgid ""
"In addition, GMOCCAPY 3 offers additional HAL pins to control the new slider "
"widgets with momentary switches.  The values how fast the increase or "
"decrease will be, must be set in the glade file.  In a future release it "
"will be integrated in the settings page."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:621
#, no-wrap
msgid "SPEED"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:623
#, no-wrap
msgid "*gmoccapy.spc_jog_vel.increase*      _(bit IN)_    - As long as True the value of the slider will increase\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:624
#, no-wrap
msgid "*gmoccapy.spc_jog_vel.decrease*      _(bit IN)_    - As long as True the value of the slider will decrease\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:625
#, no-wrap
msgid "*gmoccapy.spc_jog_vel.scale*         _(float IN)_  - A value to scale the output value (handy to change units/min to units/sec)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:626
#, no-wrap
msgid "*gmoccapy.spc_jog_vel.value*         _(float OUT)_ - Value of the widget\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:627
#, no-wrap
msgid "*gmoccapy.spc_jog_vel.scaled-value*  _(float OUT)_ - Scaled value of the widget\n"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:627 src/plasma/qtplasmac.adoc:795
#: src/plasma/qtplasmac.adoc:931
#, no-wrap
msgid "FEED"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:629
#, no-wrap
msgid "*gmoccapy.spc_feed.increase*         _(bit IN)_    - As long as True the value of the slider will increase\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:630
#, no-wrap
msgid "*gmoccapy.spc_feed.decrease*         _(bit IN)_    - As long as True the value of the slider will decrease\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:631
#, no-wrap
msgid "*gmoccapy.spc_feed.scale*            _(float IN)_  - A value to scale the output value (handy to change units/min to units/sec)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:632
#, no-wrap
msgid "*gmoccapy.spc_feed.value*            _(float OUT)_ - Value of the widget\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:633
#, no-wrap
msgid "*gmoccapy.spc_feed.scaled-value*     _(float OUT)_ - Scaled value of the widget\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:635
#, no-wrap
msgid "*gmoccapy.spc_spindle.increase*      _(bit IN)_    - As long as True the value of the slider will increase\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:636
#, no-wrap
msgid "*gmoccapy.spc_spindle.decrease*      _(bit IN)_    - As long as True the value of the slider will decrease\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:637
#, no-wrap
msgid "*gmoccapy.spc_spindle.scale*         _(float IN)_  - A value to scale the output value (handy to change units/min to units/sec)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:638
#, no-wrap
msgid "*gmoccapy.spc_spindle.value*         _(float OUT)_ - Value of the widget\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:639
#, no-wrap
msgid "*gmoccapy.spc_spindle.scaled-value*  _(float OUT)_ - Scaled value of the widget\n"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:639
#, no-wrap
msgid "RAPIDS"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:641
#, no-wrap
msgid "*gmoccapy.spc_rapid.increase*        _(bit IN)_    - As long as True the value of the slider will increase\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:642
#, no-wrap
msgid "*gmoccapy.spc_rapid.decrease*        _(bit IN)_    - As long as True the value of the slider will decrease\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:643
#, no-wrap
msgid "*gmoccapy.spc_rapid.scale*           _(float IN)_  - A value to scale the output value (handy to change units/min to units/sec)\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:644
#, no-wrap
msgid "*gmoccapy.spc_rapid.value*           _(float OUT)_ - Value of the widget\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:645
#, no-wrap
msgid "*gmoccapy.spc_rapid.scaled-value*    _(float OUT)_ - Scaled value of the widget\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:648
msgid ""
"The float pins do accept values from 0.0 to 1.0, being the percentage value "
"you want to set the slider value."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:653
msgid ""
"If you use both connection types, do not connect the same slider to both "
"pin, as the influences between the two has not been tested! Different "
"sliders may be connected to the one or other HAL connection type."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:660
msgid ""
"Please be aware that the jog velocity depends on the turtle button state.  "
"It will lead to different slider scales depending on the mode (turtle or "
"rabbit). Please take also a look at <<gmoccapy:jog-velocity,jog velocities "
"and turtle-jog HAL pin>> for more details."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:661
#, no-wrap
msgid "Setting a slider value"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:671
#, no-wrap
msgid ""
"Spindle Override Min Value =  20 % +\n"
"Spindle Override Max Value = 120 % +\n"
"gmoccapy.analog-enable = 1 +\n"
"gmoccapy.spindle-override-value = 0.25 +\n"
" +\n"
"value to set = Min Value + (Max Value - Min Value) * gmoccapy.spindle-override-value +\n"
"value to set = 20 + (120 - 20) * 0.25 +\n"
"value to set = 45 % +\n"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:673
#, no-wrap
msgid "Jog HAL Pins"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:677
msgid ""
"All axes given in the INI file have a jog-plus and a jog-minus pin, so "
"hardware momentary switches can be used to jog the axes."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:680
msgid "Naming of these HAL pins have changed in GMOCCAPY 2."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:682
msgid "For the standard XYZ config following HAL pins will be available:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:684
#, no-wrap
msgid "*gmoccapy.jog.axis.jog-x-plus*  _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:685
#, no-wrap
msgid "*gmoccapy.jog.axis.jog-x-minus* _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:686
#, no-wrap
msgid "*gmoccapy.jog.axis.jog-y-plus*  _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:687
#, no-wrap
msgid "*gmoccapy.jog.axis.jog-y-minus* _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:688
#, no-wrap
msgid "*gmoccapy.jog.axis.jog-z-plus*  _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:689
#, no-wrap
msgid "*gmoccapy.jog.axis.jog-z-minus* _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:691
msgid "If you use a 4 axes configuration, there will be two additional pins:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:693
#, no-wrap
msgid "*gmoccapy.jog.jog-<your fourth axis letter >-plus*  _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:694
#, no-wrap
msgid "*gmoccapy.jog.jog-<your fourth axis letter >-minus* _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:696
msgid "For a C-axis you will see:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:698
#, no-wrap
msgid "*gmoccapy.jog.axis.jog-c-plus*  _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:699
#, no-wrap
msgid "*gmoccapy.jog.axis.jog-c-minus* _(bit IN)_\n"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:701
#, no-wrap
msgid "Jog Velocities and Turtle-Jog HAL Pin"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:710
msgid ""
"The jog velocity can be selected with the corresponding slider. The scale of "
"the slider will be modified if the turtle button (the one showing a rabbit "
"or a turtle) has been toggled. If the button is not visible, it might have "
"been disabled on the <<gmoccapy:turtle-jog,settings page>>. If the button "
"shows the rabbit-icon, the scale is from min to max machine velocity. If it "
"shows the turtle, the scale will reach only 1/20 of max velocity by default. "
"The used divider can be set on the <<gmoccapy:turtle-jog,settings page>>."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:712
msgid "So using a touch screen it is much easier to select smaller velocities."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:714
msgid ""
"GMOCCAPY offers this HAL pin to toggle between turtle and rabbit jogging:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:716
#, no-wrap
msgid "*gmoccapy.jog.turtle-jog* _(bit IN)_\n"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:717
#, no-wrap
msgid "Jog Increment HAL Pins"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:720
msgid "The jog increments given in thhe INI file like"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:724
#, no-wrap
msgid ""
"[DISPLAY]\n"
"INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:731
msgid ""
"are selectable through HAL pins, so a selection hardware switch can be used "
"to select the increment to use. There will be a maximum of 10 HAL pins for "
"the increments given in the INI file.  If you give more increments in your "
"INI file, they will be not reachable from the GUI as they will not be "
"displayed."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:733
msgid ""
"If you have 6 increments in your INI file like in the example above, you "
"will get *7* pins:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:735
#, no-wrap
msgid "*gmoccapy.jog.jog-inc-0* _(bit IN)_ - This one is fixed and will represent continuous jogging.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:736
#, no-wrap
msgid "*gmoccapy.jog.jog-inc-1* _(bit IN)_ - First increment given in the INI file.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:737
#, no-wrap
msgid "*gmoccapy.jog.jog-inc-2* _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:738
#, no-wrap
msgid "*gmoccapy.jog.jog-inc-3* _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:739
#, no-wrap
msgid "*gmoccapy.jog.jog-inc-4* _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:740
#, no-wrap
msgid "*gmoccapy.jog.jog-inc-5* _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:741
#, no-wrap
msgid "*gmoccapy.jog.jog-inc-6* _(bit IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:743
msgid "GMOCCAPY offers also a HAL pin to output the selected jog increment:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:745
#, no-wrap
msgid "*gmoccapy.jog.jog-increment* _(float OUT)_\n"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:747
#, no-wrap
msgid "Hardware Unlock Pin"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:751
msgid ""
"To be able to use a key switch to unlock the settings page, the following "
"pin is exported:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:754
#, no-wrap
msgid ""
"*gmoccapy.unlock-settings* _(bit IN)_ - The settings page is unlocked if the pin is high.\n"
"To use this pin, you need to activate it on the settings page.\n"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:755
#, no-wrap
msgid "Error/Warning Pins"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:759
#, no-wrap
msgid ""
"*gmoccapy.error* _(bit OUT)_ - Indicates an error, so a light can lit or even the machine may\n"
"be stopped. It will be reset with the pin `gmoccapy.delete-message`.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:760
#, no-wrap
msgid "*gmoccapy.delete-message* _(bit IN)_ - Will delete the first error and reset the `gmoccapy.error` pin to false after the last error has been cleared.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:761
#, no-wrap
msgid "*gmoccapy.warning-confirm* _(bit IN)_ - Confirms warning dialog like click on OK\n"
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:767
msgid ""
"Messages or user infos will not affect the `gmoccapy.error` pin, but the "
"`gmoccapy.delete-message` pin will delete the last message if no error is "
"shown!"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:770
#, no-wrap
msgid "User Created Message HAL Pins"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:773
msgid ""
"GMOCCAPY may be configured to react to external errors, using 3 different "
"user messages:"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:774
#, no-wrap
msgid "status"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:777
#, no-wrap
msgid "*gmoccapy.messages.status* _(bit IN)_ - Triggers the dialog.\n"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:778
#, no-wrap
msgid "okdialog"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:781
#, no-wrap
msgid "*gmoccapy.messages.okdialog* _(bit IN)_ - Triggers the dialog.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:782
#, no-wrap
msgid "*gmoccapy.messages.okdialog-waiting* _(bit OUT)_ - Will be '1' as long as the dialog is open. Closing the message will reset the this pin.\n"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:783
#, no-wrap
msgid "yesnodialog"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:786
#, no-wrap
msgid "*gmoccapy.messages.yesnodialog* _(bit IN)_ - Triggers the dialog.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:787
#, no-wrap
msgid "*gmoccapy.messages.yesnodialog-waiting* _(bit OUT)_ - Will be '1' as long as the dialog is open. Closing the message will reset the this pin.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:789
#, no-wrap
msgid ""
"*gmoccapy.messages.yesnodialog-response* _(bit OUT)_ - This pin will change to '1' if the user clicks OK and in all\n"
"other cases it will be '0'. This pin will remain '1' until the dialog is called again.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:792
msgid ""
"To add a user created message you need to add the message to the INI file in "
"the DISPLAY section. See <<sub:gmocccapy-configuration-user-messages,"
"Configuration of User Created Messages>>."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:793
#, no-wrap
msgid "User Message Example (INI file)"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:799
#, no-wrap
msgid ""
"MESSAGE_TEXT = LUBE FAULT\n"
"MESSAGE_TYPE = okdialog\n"
"MESSAGE_PINNAME = lube-fault\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:803
#, no-wrap
msgid ""
"MESSAGE_TEXT = X SHEAR PIN BROKEN\n"
"MESSAGE_TYPE = status\n"
"MESSAGE_PINNAME = pin\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:807
msgid ""
"To connect these new pins you need to do this in the postgui HAL file.  Here "
"are some example connections which connect the message signals to some place "
"else in the HAL file."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:808
#, no-wrap
msgid "Example Connection of User Messages (HAL file)"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:814
#, no-wrap
msgid ""
"net gmoccapy-lube-fault gmoccapy.messages.lube-fault\n"
"net gmoccapy-lube-fault-waiting gmoccapy.messages.lube-fault-waiting\n"
"net gmoccapy-pin gmoccapy.messages.pin\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:818
msgid ""
"For more information about HAL files and the net command see the <<cha:basic-"
"hal-reference,HAL Basics>>."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:819
#, no-wrap
msgid "Spindle Feedback Pins"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:822
msgid "There are two pins for spindle feedback:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:824
#, no-wrap
msgid "*gmoccapy.spindle_feedback_bar* _(float IN)_ - Pin to show the spindle speed on the spindle bar.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:825
#, no-wrap
msgid "*gmoccapy.spindle_at_speed_led* _(bit IN)_ - Pin to lit the is-at-speed-led.\n"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:827
#, no-wrap
msgid "Pins To Indicate Program Progress Information"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:830
msgid "There are three pins giving information about the program progress:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:832
#, no-wrap
msgid "*gmoccapy.program.length* _(s32 OUT)_ - Shows the total number of lines of the program\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:833
#, no-wrap
msgid "*gmoccapy.program.current-line* _(s32 OUT)_ - Indicates the current working line of the program\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:834
#, no-wrap
msgid "*gmoccapy.program.progress* _(float OUT)_ - Gives the program progress in percentage\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:837
msgid ""
"The values may not be very accurate if you are working with subroutines or "
"large remap procedures. Also loops will cause different values."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:838
#, no-wrap
msgid "Tool related pins"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:840
#, no-wrap
msgid "Tool Change Pins"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:846
msgid ""
"These pins are provided to use GMOCCAPY's internal tool change dialog, "
"similar to the one known from AXIS, but with several modifications. So you "
"will not only get the message to change to 'tool number 3', but also the "
"description of that tool like '7.5 mm 3 flute cutter'. The information is "
"taken from the tool table, so it is up to you what to display."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gmoccapy.adoc:847
#, no-wrap
msgid "Manual tool change"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:847
#, no-wrap
msgid "images/manual_toolchange.png"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:850
#, no-wrap
msgid "*gmoccapy.toolchange-number*  _(s32 IN)_ - The number of the tool to be changed\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:851
#, no-wrap
msgid "*gmoccapy.toolchange-change*  _(bit IN)_ - Indicates that a tool has to be changed\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:852
#, no-wrap
msgid "*gmoccapy.toolchange-changed* _(bit OUT)_ - Indicates tool has been changed\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:853
#, no-wrap
msgid "*gmoccapy.toolchange-confirm* _(bit IN)_ - Confirms tool change\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:855
msgid "Usually they are connected like this for a manual tool change:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:862
#, no-wrap
msgid ""
"net tool-change gmoccapy.toolchange-change <= iocontrol.0.tool-change\n"
"net tool-changed gmoccapy.toolchange-changed <= iocontrol.0.tool-changed\n"
"net tool-prep-number gmoccapy.toolchange-number <= iocontrol.0.tool-prep-number\n"
"net tool-prep-loop iocontrol.0.tool-prepare <= iocontrol.0.tool-prepared\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:866
msgid ""
"Please take care, that this connections have to be done in the postgui HAL "
"file."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:867
#, no-wrap
msgid "Tool Offset Pins"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:870
msgid ""
"These pins allow you to show the active tool offset values for X and Z in "
"the tool information frame. You should know that they are only active after "
"G43 has been sent."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gmoccapy.adoc:871
#, no-wrap
msgid "Tool information"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:871
#, no-wrap
msgid "images/gmoccapy_tool_info.png"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:874
#, no-wrap
msgid "*gmoccapy.tooloffset-x* _(float IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:875
#, no-wrap
msgid "*gmoccapy.tooloffset-z* _(float IN)_\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:879
msgid ""
"The tooloffset-x line is not needed on a mill, and will not be displayed on "
"a mill with trivial kinematics."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:881
msgid ""
"To display the current offsets, the pins have to be connected like this in "
"the postgui HAL file:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:886
#, no-wrap
msgid ""
"net tooloffset-x gmoccapy.tooloffset-x <= motion.tooloffset.x\n"
"net tooloffset-z gmoccapy.tooloffset-z <= motion.tooloffset.z\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:893
#, no-wrap
msgid ""
"Please note, that GMOCCAPY takes care of its own to update the offsets, sending an G43 after any tool change, *but not in auto mode!*\n"
"So writing a program makes you responsible to include an G43 after each tool change!"
msgstr ""

#. type: Title ==
#: src/gui/gmoccapy.adoc:895 src/gui/qtdragon.adoc:653
#, no-wrap
msgid "Auto Tool Measurement"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:900
msgid ""
"GMOCCAPY offers an integrated auto tool measurement. To use this feature, "
"you will need to do some additional settings and you may want to use the "
"offered HAL pin to get values in your own NGC remap procedure."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:905
msgid ""
"Before starting the first test, do not forget to enter the probe height and "
"probe velocities on the settings page! See <<gmoccapy:tool-measurement,"
"Settings Page Tool Measurement>>"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:908
msgid ""
"It might be also a good idea to take a look at the tool measurement video: "
"see <<gmoccapy:tool-measurement-videos,tool measurement related videos>>."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:911
msgid ""
"Tool Measurement in GMOCCAPY is done a little bit different to many other "
"GUIs.  You should follow these steps:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:913
msgid "Touch off your workpiece in X and Y."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:915 src/gui/qtdragon.adoc:669
msgid ""
"Measure the height of your block from the base where your tool switch is "
"located, to the upper face of the block (including chuck etc.)."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:916
msgid "Push the button block height and enter the measured value."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:917 src/gui/qtdragon.adoc:672
msgid "Go to auto mode and start your program."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:919
msgid "Here is a small sketch:"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:920
#, no-wrap
msgid "Tool measurement data"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:921 src/gui/qtdragon.adoc:679
#, no-wrap
msgid "images/sketch_auto_tool_measurement.png"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:926
msgid ""
"With the first given tool change the tool will be measured and the offset "
"will be set automatically to fit the block height. The advantage of the "
"GMOCCAPY way is, that you do not need a reference tool."
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:933
msgid ""
"Your program must contain a tool change at the beginning! The tool will be "
"measured, even it has been used before, so there is no danger, if the block "
"height has changed. There are several videos showing the way to do that on "
"YouTube."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:936 src/gui/qtdragon.adoc:743
#, no-wrap
msgid "Tool Measurement Pins"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:940
msgid ""
"GMOCCAPY offers five pins for tool measurement purposes. These pins are "
"mostly used to be read from a G-code subroutine, so the code can react to "
"different values."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:942
#, no-wrap
msgid "*gmoccapy.toolmeasurement* _(bit OUT)_ - Enable or not tool measurement\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:943
#, no-wrap
msgid "*gmoccapy.blockheight* _(float OUT)_ - The measured value of the top face of the workpiece\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:944
#, no-wrap
msgid "*gmoccapy.probeheight* _(floiat OUT)_ - The probe switch height\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:945
#, no-wrap
msgid "*gmoccapy.searchvel* _(float OUT)_ - The velocity to search for the tool probe switch\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:946
#, no-wrap
msgid "*gmoccapy.probevel* _(float OUT)_ - The velocity to probe tool length\n"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:947 src/gui/qtdragon.adoc:757
#, no-wrap
msgid "Tool Measurement INI File Modifications"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:950
msgid "Modify your INI file to include the following sections."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:951
#, no-wrap
msgid "The RS274NGC Section"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:957
#, no-wrap
msgid ""
"[RS274NGC]\n"
"# is the sub, with is called when a error during tool change happens, not needed on every machine configuration\n"
"ON_ABORT_COMMAND=O <on_abort> call\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:960
#, no-wrap
msgid ""
"# The remap code\n"
"REMAP=M6  modalgroup=6 prolog=change_prolog ngc=change epilog=change_epilog\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:963
msgid ""
"Make sure INI_VARS and HAL_PIN_VARS are not set to 0. They are set to 1 by "
"default."
msgstr ""

#. type: Title ====
#: src/gui/gmoccapy.adoc:965 src/gui/qtdragon.adoc:811
#, no-wrap
msgid "The Tool Sensor Section"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:969
msgid ""
"The position of the tool sensor and the start position of the probing "
"movement, all values are absolute coordinates, except MAXPROBE, which must "
"be given in relative movement."
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:977
#, no-wrap
msgid ""
"[TOOLSENSOR]\n"
"X = 10\n"
"Y = 10\n"
"Z = -20\n"
"MAXPROBE = -20\n"
msgstr ""

#. type: Title ====
#: src/gui/gmoccapy.adoc:979 src/gui/qtdragon.adoc:827
#, no-wrap
msgid "The Change Position Section"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:983
msgid ""
"This is not named TOOL_CHANGE_POSITION on purpose - *canon uses that name "
"and will interfere otherwise.* The position to move the machine before "
"giving the change tool command. All values are in absolute coordinates."
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:990 src/gui/qtdragon.adoc:840
#, no-wrap
msgid ""
"[CHANGE_POSITION]\n"
"X = 10\n"
"Y = 10\n"
"Z = -2\n"
msgstr ""

#. type: Title ====
#: src/gui/gmoccapy.adoc:992 src/gui/qtdragon.adoc:842
#, no-wrap
msgid "The Python Section"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:994
msgid "The Python plug ins serves interpreter and task."
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1002 src/gui/qtdragon.adoc:854
#, no-wrap
msgid ""
"[PYTHON]\n"
"# The path to start a search for user modules\n"
"PATH_PREPEND = python\n"
"# The start point for all.\n"
"TOPLEVEL = python/toplevel.py\n"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1004 src/gui/qtdragon.adoc:856
#, no-wrap
msgid "Needed Files"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1008
msgid ""
"First make a directory \"python\" in your config folder.  From "
"`<your_linuxcnc-dev_directory>/configs/sim/gmoccapy/python` copy the "
"following files into the just created `config_dir/python` folder:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1010
msgid "`toplevel.py`"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1011
msgid "`remap.py`"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1012
msgid "`stdglue.py`"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1014
msgid "From `<your_linuxcnc-dev_directory>/configs/sim/gmoccapy/macros` copy"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1016
msgid "`on_abort.ngc`"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1017
msgid "`change.ngc`"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1020
msgid ""
"to the directory specified as `SUBROUTINE_PATH`, see <<gmocappy:rs274ngc,"
"RS274NGC Section>>."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1023
msgid ""
"Open `change.ngc` with a editor and uncomment the following lines (49 and "
"50):"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1029
#, no-wrap
msgid ""
"F #<_hal[gmoccapy.probevel]>\n"
"G38.2 Z-4\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1032
msgid "You may want to modify this file to fit more your needs."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1033 src/gui/qtdragon.adoc:902
#, no-wrap
msgid "Needed HAL Connections"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1036
msgid "Connect the tool probe in your HAL file like so:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1040 src/gui/qtdragon.adoc:911
#, no-wrap
msgid "net probe  motion.probe-input <= <your_input_pin>\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1043
msgid "The line might look like this:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1048
#, no-wrap
msgid "net probe  motion.probe-input <= parport.0.pin-15-in\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1051
msgid "In your postgui.hal file add the following lines:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1059
#, no-wrap
msgid ""
"# The next lines are only needed if the pins had been connected before\n"
"unlinkp iocontrol.0.tool-change\n"
"unlinkp iocontrol.0.tool-changed\n"
"unlinkp iocontrol.0.tool-prep-number\n"
"unlinkp iocontrol.0.tool-prepared\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1065
#, no-wrap
msgid ""
"# link to GMOCCAPY toolchange, so you get the advantage of tool description on change dialog\n"
"net tool-change gmoccapy.toolchange-change <= iocontrol.0.tool-change\n"
"net tool-changed gmoccapy.toolchange-changed <= iocontrol.0.tool-changed\n"
"net tool-prep-number gmoccapy.toolchange-number <= iocontrol.0.tool-prep-number\n"
"net tool-prep-loop iocontrol.0.tool-prepare <= iocontrol.0.tool-prepared\n"
msgstr ""

#. type: Title ==
#: src/gui/gmoccapy.adoc:1068
#, no-wrap
msgid "The Settings Page"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1075
msgid ""
"To enter the page you will have to click on image:images/"
"gmoccapy_settings_button.png[align=\"left\"] and give an unlock code, which "
"is *123* by default. If you want to change it at this time you will have to "
"edit the hidden preference file, see <<gmoccapy:display-section,the display "
"section>> for details."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1077
msgid "The page is separated in three main tabs:"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1078
#, no-wrap
msgid "Appearance"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1080
#, no-wrap
msgid "GMOCCAPY settings page Appearance"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gmoccapy.adoc:1081
#, no-wrap
msgid "Configuration page"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:1081
#, no-wrap
msgid "images/gmoccapy_settings_appearance.png"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1084
msgid "On this tab you will find the following options:"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1085
#, no-wrap
msgid "Main Window"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1090
msgid ""
"Here you can select how you wish the GUI to start. The main reason for this "
"was the wish to get an easy way for the user to set the starting options "
"without the need to touch code.  You have three options:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1092
msgid "_Start as full screen_"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1093
msgid "_Start maximized_"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1097
msgid ""
"_Start as window_ - If you select start as window the spinboxes to set the "
"position and size will get active.  One time set, the GUI will start every "
"time on the place and with the size selected.  Nevertheless the user can "
"change the size and position using the mouse, but that will not have any "
"influence on the settings."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1098
msgid ""
"_hide the cursor_ - Does allow to hide the cursor, what is very useful if "
"you use a touch screen."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1099
#, no-wrap
msgid "Keyboard"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1106
msgid ""
"The checkboxes allow the user to select if he wants the on board keyboard to "
"be shown immediately, when entering the MDI Mode, when entering the offset "
"page, the tooledit widget or when open a program in the EDIT mode. The "
"keyboard button on the bottom button list will not be affected by theese "
"settings, so you are able to show or hide the keyboard by pressing the "
"button. The default behavior will be set by the checkboxes."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1108
msgid "Default are :"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1111
msgid ""
"If this section is not sensitive, you have not installed a virtual keyboard, "
"supported ones are _onboard_ and _matchbox-keyboard_."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1113
msgid "_Show keyboard on offset_"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1114
msgid "_Show keyboard on tooledit_"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1115
msgid "_Show keyboard on MDI_"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1116
msgid "_Show keyboard on EDIT_"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1117
msgid "_Show keyboard on load file_"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1121
msgid ""
"If the keyboard layout is not correct, i.e. clicking Y gives Z, than the "
"layout has not been set properly, related to your locale settings. For "
"onboard it can be solved with a small batch file with the following content:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1125
#, no-wrap
msgid ""
"#!/bin/bash\n"
"setxkbmap -model pc105 -layout de -variant basic\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1130
msgid ""
"The letters \"de\" are for German, you will have to set them according to "
"your locale settings. Just execute this file before starting LinuxCNC, it "
"can be done also adding a starter to your local folder."
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1133
#, no-wrap
msgid "./config/autostart\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1136
msgid "So that the layout is set automatically on starting."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1139
msgid ""
"For matchbox-keyboard you will have to make your own layout, for a German "
"layout ask in the forum."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1140
#, no-wrap
msgid "Gmoccapy with Onboard keyboard in edit mode"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gmoccapy.adoc:1141
#, no-wrap
msgid "Onboard keyboard"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:1141
#, no-wrap
msgid "images/gmoccapy_keyboard_edit_mode.png"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1143
#, no-wrap
msgid "On Touch Off"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1147
#, no-wrap
msgid ""
"This gives the option whether to show the preview tab or the offset page tab when\n"
" you enter the touch off mode by clicking the corresponding bottom button.\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1149
msgid "_show preview_"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1150
msgid "_show offsets_"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1151
#, no-wrap
msgid "DRO Options"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1155
msgid ""
"You have the option to select the background colors of the different DRO "
"states.  So users suffering from protanopia (red/green weakness) are able to "
"select proper colors."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1157
msgid "By default, the background colors are:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1159
msgid "Relative mode = black"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1160
msgid "Absolute mode = blue"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1161
msgid "Distance to go = yellow"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1163
msgid "The foreground color of the DRO can be selected with:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1165
#, no-wrap
msgid "homed color   = green\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1166
#, no-wrap
msgid "unhomed color = red\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1171
msgid ""
"You can change through the DRO modes (absolute, relative, distance to go) by "
"clicking the number on the DRO! If you click on the left side letter of the "
"DRO a popup window will allow you to set the value of the axes, making it "
"easier to set the value, as you will not need to go over the touch off "
"bottom button."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1175
msgid ""
"Allows to set the size of the DRO font, default is 28, if you use a bigger "
"screen you may want to increase the size up to 56.  If you do use 4 axes, "
"the DRO font size will be 3/4 of the value, because of space reason."
msgstr ""

#. type: Labeled list
#: src/gui/gmoccapy.adoc:1175
#, no-wrap
msgid "digits"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1177
msgid "Sets the number of digits of the DRO from 1 to 5."
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:1182
msgid ""
"Imperial will show one digit more that metric.  So if you are in imperial "
"machine units and set the digit value to 1, you will get no digit at all in "
"metric."
msgstr ""

#. type: Labeled list
#: src/gui/gmoccapy.adoc:1183
#, no-wrap
msgid "toggle DRO mode"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1187
#, no-wrap
msgid ""
"If not active, a mouse click on the DRO will not take any action.\n"
"By default this checkbox is active, so every click on any DRO will toggle the DRO readout from actual to relative to DTG (distance to go).\n"
"Neverthereless a click on the axis letter will open the popup dialog to set the axis value."
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1189 src/plasma/qtplasmac.adoc:1212
#, no-wrap
msgid "Preview"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1194
msgid ""
"_Grid Size_ - Sets the grid size of the preview window.  Unfortunately the "
"size *has to be set in inches*, even if your machine units are metric.  We "
"do hope to fix that in a future release."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1196
msgid "The grid will not be shown in perspective view."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1199
msgid ""
"_Show DRO_ - Will show the a DRO also in the preview pane, it will be always "
"shown in fullsize preview."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1201
msgid ""
"_Show DTG_ - Will show the DTG (direct distance to end point) in the preview "
"pane if Show DRO is active. Otherwise only in full size preview."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1203
msgid ""
"_Show Offsets_ - Will show the offsets in the preview pane when Show DRO is "
"active. Otherwise only in full size preview."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1206
msgid ""
"_Mouse Button Mode_ - This combobox allows you to select the button behavior "
"of the mouse to rotate, move or zoom within the preview:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1208
msgid "left rotate, middle move, right zoom"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1209
msgid "left zoom, middle move, right rotate"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1210
msgid "left move, middle rotate, right zoom"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1211
msgid "left zoom, middle rotate, right move"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1212
msgid "left move, middle zoom, right rotate"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1213
msgid "left rotate, middle zoom, right move"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1215
msgid "Default is left move, middle zoom, right rotate."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1217
msgid "The mouse wheel will still zoom the preview in every mode."
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:1222
msgid ""
"If you select an element in the preview, the selected element will be taken "
"as rotation center point and in auto mode the corresponding code line will "
"be highlighted."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1224
#, no-wrap
msgid "File to load on start up"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1229
msgid ""
"Select the file you want to be loaded on start up. If a file is loaded, it "
"can be set by pressing the current button. To avoid that any program is "
"loaded at start up, just press the None button."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1233
msgid ""
"The file selection screen will use the filters you have set in the INI file, "
"if there aren't any filters given, you will only see *NGC files*. The path "
"will be set according to the INI settings in `[DISPLAY] PROGRAM_PREFIX`."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1234
#, no-wrap
msgid "Jump to dir"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1238
msgid ""
"You can set here the directory to jump to if you press the corresponding "
"button in the file selection dialog."
msgstr ""

#.  image::images/gmoccapy_file_selection_dialog_with_keyboard.png["Directory selection",align="left"]
#. type: Block title
#: src/gui/gmoccapy.adoc:1241
#, no-wrap
msgid "Themes and Sounds"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1246
msgid ""
"This lets the user select what desktop theme to apply and what error and "
"messages sounds should be played.  By default \"Follow System Theme\" is set."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1249
msgid ""
"It further allows to change the icon theme.  Currently there are three "
"themes available:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1251
msgid "classic"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1252
msgid "material"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1253
msgid "material light"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1255
msgid ""
"To create custom icon themes, see section <<gmoccapy:icon-theme-section,Icon "
"Theme>> for details."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1256
#, no-wrap
msgid "Hardware"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gmoccapy.adoc:1258
#, no-wrap
msgid "Hardware settings"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:1258
#, no-wrap
msgid "images/gmoccapy_settings_hardware.png"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1260
#, no-wrap
msgid "Hardware MPG Scale"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1268
msgid ""
"For the different HAL pins to connect MPG wheels to, you may select "
"individual scales to be applied.  The main reason for this was my own test "
"to solve this through HAL connections, resulting in a very complex HAL file. "
"Imagine a user having an MPG Wheel with 100 ipr and he wants to slow down "
"the max.  vel. from 14000 to 2000 mm/min, that needs 12000 impulses, "
"resulting in 120 turns of the wheel! Or an other user having a MPG Wheel "
"with 500 ipr and he wants to set the spindle override witch has limits from "
"50 to 120 % so he goes from min to max within 70 impulses, meaning not even "
"1/4 turn."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1270
msgid "By default all scales are set using the calculation:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1273
#, no-wrap
msgid "(MAX - MIN)/100\n"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1275
#, no-wrap
msgid "Keyboard shortcuts"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1279
#, no-wrap
msgid ""
"Some users want to jog there machine using the keyboard buttons and there are others that will never allow this. So everybody can select whether to use them or not.\n"
"Keyboard shortcuts are disabled by default."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1282
msgid ""
"It is not recommended to use keyboard jogging, as it represents a serious "
"risk for operator and machine."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1285
msgid ""
"Please take care if you use a lathe, then the shortcuts will be different, "
"see the <<gmoccapy:lathe-section,Lathe Specific Section>>."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1289
msgid ""
"_F1_ - Trigger Estop (will work even if keyboard shortcuts are disabled)"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1290
msgid "_F2_ - Toggle machine on/off"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1291
msgid "_F3_ - Manual mode"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1292
msgid "_F5_ - MDI mode"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1293
msgid "_ESC_ - Abort"
msgstr ""

#. type: Labeled list
#: src/gui/gmoccapy.adoc:1294
#, no-wrap
msgid "In Manual Mode"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1297
msgid "_Arrow_Left_ or _NumPad_Left_ - Jog X minus"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1298
msgid "_Arrow_Right_ or _NumPad_Right_ - Jog X plus"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1299
msgid "_Arrow_up_ or _NumPad_Up_ - Jog Y plus"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1300
msgid "_Arrow_Down_ or _NumPad_Down_ - Jog Y minus"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1301
msgid "_Page_Up_ or _NumPad_Page_Up_ - Jog Z plus"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1302
msgid "_Page_Down_ or _NumPad_Page_Down_ - Jog Z minus"
msgstr ""

#. type: Labeled list
#: src/gui/gmoccapy.adoc:1303
#, no-wrap
msgid "In Auto Mode"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1306
msgid "_R_ or _r_ - Run program"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1307
msgid "_P_ or _p_ - Pause program"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1308
msgid "_S_ or _s_ - Resume program"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1309
msgid "_Control + R_ or _Control + r_ - Reload the loaded file"
msgstr ""

#. type: Labeled list
#: src/gui/gmoccapy.adoc:1310
#, no-wrap
msgid "Message handling (see <<gmoccapy:message-behavior,Message behavior and appearance>>)"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1313
msgid "_WINDOWS_ - Delete last message"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1314
msgid "_Control + Space_ - Delete all messages"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1315
#, no-wrap
msgid "Unlock options"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1318
msgid "There are three options to unlock the settings page:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1320
msgid "_Use unlock code_ - The user must give a code to get in"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1321
msgid "_Do not use unlock code_ - There will be no security check"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1323
msgid ""
"_Use HAL pin to unlock_ - Hardware pin must be high to unlock the settings, "
"see <<gmoccapy:hardware-unlock, hardware unlock pin>>"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1325
msgid "Default is _use unlock code_ (default = *123*)"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1328
msgid ""
"_Starting RPM_ - Sets the rpm to be used if the spindle is started and no S "
"value has been set."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1334
msgid ""
"This value will be presetted according to your settings in `[DISPLAY] "
"DEFAULT_SPINDLE_SPEED` of your INI file. If you change the settings on the "
"settings page, that value will be default from that moment, your INI file "
"will not be modified."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1337
msgid ""
"_Spindle bar min_ and _Spindle bar max_ - Sets the limits of the spindle bar "
"shown in the INFO frame on the main screen."
msgstr ""

#. type: delimited block =
#: src/gui/gmoccapy.adoc:1342
#, no-wrap
msgid ""
"Default values are:\n"
"MIN = 0\n"
"MAX = 6000"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1348
msgid ""
"It is no error giving wrong values. If you give a maximum of 2000 and your "
"spindle makes 4000 rpm, only the bar level will be wrong on higher speeds "
"than 2000 rpm."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1351
#, no-wrap
msgid "Turtle Jog"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1353
msgid "This settings will have influence on the jog velocities."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1358
msgid ""
"_Hide turtle jog button_ - Will hide the button right of the jog velocity "
"slider. If you hide this button, please take care that the \"rabbit mode\" "
"is activated, otherwise you will not be able to jog faster than the turtle "
"jog velocity, which is calculated using the turtle jog factor."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1361
msgid ""
"_Turtle jog factor_ - Sets the scale to apply for turtle jog mode (button "
"pressed, showing the turtle). If you set a factor of 20, the turtle max. jog "
"velocity will be 1/20 of the max. velocity of the machine."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1364
msgid ""
"This button can be controlled using the <<gmoccapy:jog-velocity,Turtle-Jog "
"HAL Pin>>."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1366
#, no-wrap
msgid "Advanced Settings"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gmoccapy.adoc:1368
#, no-wrap
msgid "Advanced settings"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:1368
#, no-wrap
msgid "images/gmoccapy_settings_advanced.png"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1371
#, no-wrap
msgid "Tool Measurement"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1374
msgid "Please check <<gmoccapy:auto-tool-measurement,Auto Tool Measurement>>"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1378
msgid ""
"If this part is not sensitive, you do not have a valid INI file "
"configuration to use tool measurement."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1382
msgid ""
"_Use auto tool measurement_ - If checked, after each tool change, a tool "
"measurement will be done, the result will be stored in the tool table and a "
"G43 will be executed after the change."
msgstr ""

#. type: Labeled list
#: src/gui/gmoccapy.adoc:1384
#, no-wrap
msgid "Probe Information"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1389
msgid ""
"The following information is taken from your INI file and must be given in "
"absolute coordinates."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1391
msgid "_X Pos._ - The X position of the tool switch."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1392
msgid "_Y Pos._ - The Y position of the tool switch."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1393
msgid ""
"_Z Pos._ - The Z position of the tool switch, we will go as rapid move to "
"this coordinate."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1395
msgid ""
"_Max. Probe_ The distance to search for contact, an error will be launched, "
"if no contact is given in this range.  The distance has to be given in "
"relative coordinates, beginning the move from Z Pos., so you have to give a "
"negative value to go down!"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1398
msgid ""
"_Probe Height_ - The height of your probe switch, you can measure it.  Just "
"touch off the base where the probe switch is located and set that to zero.  "
"Then make a tool change and watch the tool_offset_z value, that is the "
"height you must enter here."
msgstr ""

#. type: Labeled list
#: src/gui/gmoccapy.adoc:1399
#, no-wrap
msgid "Probe velocities"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1405
msgid ""
"_Search Vel._ - The velocity to search for the tool switch. After contact "
"the tool will go up again and then goes towards the probe again with probe "
"vel, so you will get better results."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1409
msgid ""
"_Probe Vel._ - The velocity for the second movement to the switch. It should "
"be slower to get better touch results. (In simulation mode, this is "
"commented out in macros/change.ngc, otherwise the user would have to click "
"twice on the probe button.)"
msgstr ""

#.  TODO: check if this option is accidently gone in 2.9
#.  Tool Changer::
#.  +
#.  --
#.  If your fourth axis is used as a tool changer, you may want to hide the
#.  DRO and all other buttons related to that axis.
#.  You can do that by marking the checkbox, which will hide:
#.  * 4^th^ axis DRO
#.  * 4^th^ axis jog button
#.  * 4^th^ axis homing button
#.  * 4^th^ axis column on the offset page.
#.  * 4^th^ axis column in the tool editor.
#.  [[gmoccapy:reload-tool-on-start]]
#.  If checked, the tool in spindle will be saved on each change in the preference
#.  file, making it possible to reload the last mounted tool on start up.
#.  The tool will be loaded after all axes are homed, because before it is not
#.  allowed to execute MDI commands. If you use NO_FORCE_HOMING you can not use
#.  this feature, because the needed all_homed_signal will never be emitted.
#.  --
#. type: Labeled list
#: src/gui/gmoccapy.adoc:1433
#, no-wrap
msgid "Reload Tool"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1436
msgid "_Reload Tool on Start_ - Loads the last tool on start after homing."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1437
#, no-wrap
msgid "Run From Line Option"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1442
msgid ""
"You can allow or disallow the run from line. This will set the corresponding "
"button insensitive (grayed out), so the user will not be able to use this "
"option. The default is disable run from line."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1447
msgid ""
"It is not recommend to use run from line, as LinuxCNC will not take care of "
"any previous lines in the code before the starting line. So errors or "
"crashes are fairly likely."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1449
#, no-wrap
msgid "Message Behavior And Appearance"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1456
msgid ""
"This will display small pop up windows displaying a message or error text, "
"similar to the ones known from AXIS. You can delete a specific message by "
"clicking on its close button. If you want to delete the last one, just hit "
"the `WINDOWS` key on your keyboard, or delete all messages at once with "
"`Control + Space`."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1458
msgid "You are able to set some options:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1461
msgid ""
"_X Pos_ - The position of the top left corner of the message in X counted in "
"pixel from the top left corner of the screen."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1463
msgid ""
"_Y Pos_ - The position of the top left corner of the message in Y counted in "
"pixel from the top left corner of the screen."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1464
msgid "_Width_ - The width of the message box."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1467
msgid ""
"_Max Messages_ - The maximum number of messages you want to see at once.  If "
"you set this to 10, the 11^th^ message will delete the first one, so you "
"will only see the last 10."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1468
msgid "_Font_ - The font and size you want to use to display the messages."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1471
msgid ""
"_Use frames_ - If you activate the checkbox, each message will be displayed "
"in a frame, so it is much easier to distinguish the messages. But you will "
"need a little bit more space."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1473
msgid ""
"_Launch test message_-button - It will show a message, so you can see the "
"changes of your settings without the need to generate an error."
msgstr ""

#. type: Title ==
#: src/gui/gmoccapy.adoc:1475
#, no-wrap
msgid "Icon Theme"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1478
msgid ""
"Icon themes are used to customize the look and feel of GMOCCAPY's icons."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1480
msgid "GMOCCAPY ships with three different icon themes:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1482
msgid "_classic_- The classic GMOCCAPY icons."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1483
msgid ""
"_material_ - A modern icon theme inspired by Google's Material Icons that "
"automatically adopts its coloring from the selected desktop theme."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1484
msgid ""
"_material-light_ - Derived from material but optimized for light desktop "
"themes."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1487
msgid ""
"The icon theme used in GMOCCAPY is a regular GTK icon theme that follows the "
"freedestktop icon theme specification.  Thus every valid GTK icon theme can "
"be used as GMOCCAPY icon theme as long as it contains the required icons."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1489
msgid "GMOCCAPY scans the following directories for icon themes:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1491
msgid "linuxcnc/share/gmoccapy/icons"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1492
msgid "~/.icons"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1493
#, no-wrap
msgid "Custom Icon Theme"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1497
msgid ""
"Creating a custom icon theme is pretty easy. All you need is a text editor "
"and of course the desired icons as pixel or vector graphics.  Details about "
"how exactly an icon theme is built can be found at the https://"
"specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest."
"html[Freedesktop Icon Theme Specification]."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1501
msgid ""
"Start by creating an empty directory with the name of the icon theme. Place "
"the directory in one of GMOCCAPY's icon theme directories.  Then we need a "
"file called index.theme in the root folder of our icon theme which contains "
"the required metadata for the theme.  That's a simple text file with at "
"least the following sections:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1503
msgid "[Icon Theme]"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1511
#, no-wrap
msgid ""
"[Icon Theme]\n"
"Name=YOUR_THEME_NAME\n"
"Comment=A DESCRIPTION OF YOUR THEME\n"
"Inherits=hicolor\n"
"Directories=16x16/actions,24x24/actions,32x32/actions,48x48/actions,scalable/actions\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1514
msgid "Name: The name of your icon theme."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1515
msgid "Comment: A description of your icon theme."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1516
msgid ""
"Inherits: A icon theme can derive from another icon theme, the default is "
"hicolor."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1522
#, no-wrap
msgid ""
"Directories: A comma separated list of all the directories of your icon theme.\n"
"Each directory usually contains all the icons of the theme in a specific size, for example 16x16/actions should contain all icons with the category \"actions\" in the size 16x16 pixels as pixel-graphics (e.g. png files). A special case is the directory called \"scalable/actions\", this contains scalable icons not tied to a specific size (e.g. svg files).\n"
"By supplying different sized versions of the icons, we can guarantee a nice looking icon if different sizes and we also have the ability to change the icon according to its size, for example a 64x64 px sized icon may contain more details than its 16x16 px version."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1524
msgid ""
"For each directory we also have to write a section in the index.theme file:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1530
#, no-wrap
msgid ""
"[16x16/actions]\n"
"Size=16\n"
"Type=Fixed\n"
"Context=Actions\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1535
#, no-wrap
msgid ""
"[scalable/actions]\n"
"Size=48\n"
"Type=Scalable\n"
"Context=Actions\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1538
msgid "Size: Nominal icon size in this directory"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1539
msgid "Type: Fixed, Threshold or Scalable"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1540
msgid "Context: Intended \"category\" of icons"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1542
msgid "Basically that's everything needed to create a custom icon theme."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1543
#, no-wrap
msgid "Symbolic Icons"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1547
msgid ""
"Symbolic icons are a special type of icon, usually a monochrome image. The "
"special feature of symbolic icons is that the icons are automatically "
"colored at runtime to match the desktop theme.  That way, icon themes can be "
"created that work well with dark and also light desktop themes (in fact, "
"that's not always the best option, that's why a dedicated \"material-light\" "
"theme exists)."
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:1548
#, no-wrap
msgid "images/gmoccapy_icon_theme_symbolic.png"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1551
msgid ""
"To make use of the symbolic feature, a icon file has to have the suffix ."
"symbolic.$ext (where $ext is the regular file extension like png) for "
"example \"power_on.symbolic.png\"."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1554
msgid ""
"With that name, GTK treats this image as symbolic icon and applies some "
"recoloring when loading the icon.  There are only four colors allowed to use:"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1557 src/plasma/qtplasmac.adoc:3018
#, no-wrap
msgid "Color"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1557
#, no-wrap
msgid "Hex Code"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1558 src/gui/pyvcp.adoc:336
#, no-wrap
msgid "black"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1558
#, no-wrap
msgid "#000000"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1559
#, no-wrap
msgid "Primary color, gets changed to match the desktop themes primary color."
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1559
#, no-wrap
msgid "red"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1559
#, no-wrap
msgid "#ff0000"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1560
#, no-wrap
msgid "Success: this color indicates \"success\" (usually something green'ish)."
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1560
#, no-wrap
msgid "green"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1560
#, no-wrap
msgid "#00ff00"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1561
#, no-wrap
msgid "Warning: this color indicates \"warning\"  (usually something yellow/orange'ish)."
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1561
#, no-wrap
msgid "blue"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1561
#, no-wrap
msgid "#0000ff"
msgstr ""

#. type: Table
#: src/gui/gmoccapy.adoc:1562
#, no-wrap
msgid "Error: this color indicates \"error\" (usually something red'ish)."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1566
msgid ""
"Examples of symbolic icons can be found at `linuxcnc/share/gmoccapy/icons/"
"material`."
msgstr ""

#. type: Title ==
#: src/gui/gmoccapy.adoc:1569
#, no-wrap
msgid "Lathe Specific Section"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1574
msgid ""
"If in the INI file `LATHE = 1` is given, the GUI will change its appearance "
"to the special needs for a lathe. Mainly the Y axis will be hidden and the "
"jog buttons will be arranged in a different order."
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1575
#, no-wrap
msgid "Normal Lathe"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:1576
#, no-wrap
msgid "images/gmoccapy_lathe.png"
msgstr ""

#. type: Block title
#: src/gui/gmoccapy.adoc:1578
#, no-wrap
msgid "Back Tool Lathe"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:1579
#, no-wrap
msgid "images/gmoccapy_back_tool_lathe.png"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1584
msgid ""
"As you see the R DRO has a black background and the D DRO is gray. This will "
"change according to the active G-code G7 or G8. The active mode is visible "
"by the black background, meaning in the shown images G8 is active."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1588
msgid ""
"The next difference to the standard screen is the location of the jog "
"buttons.  X and Z have changed places and Y is gone. You will note that the X"
"+ and X- buttons changes there places according to normal or back tool lathe."
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1590
msgid "Also the keyboard behavior will change:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1592
msgid "Normal Lathe:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1594 src/gui/gmoccapy.adoc:1601
msgid "_Arrow_Left_ or _NumPad_Left_ - Jog Z minus"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1595 src/gui/gmoccapy.adoc:1602
msgid "_Arrow_Right_ or _NumPad_Right_ - Jog Z plus"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1596
msgid "_Arrow_up_ or _NumPad_Up_ - Jog X minus"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1597
msgid "_Arrow_Down_ or _NumPad_Down_ - Jog X plus"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1599
msgid "Back Tool Lathe:"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1603
msgid "_Arrow_up_ or _NumPad_Up_ - Jog X plus"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1604
msgid "_Arrow_Down_ or _NumPad_Down_ - Jog X minus"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1607
msgid ""
"The tool information frame will show not only the Z offset, but also the X "
"offset and the tool table is showing all lathe relevant information."
msgstr ""

#. type: Title ==
#: src/gui/gmoccapy.adoc:1608
#, no-wrap
msgid "Plasma Specific Section"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gmoccapy.adoc:1610
#, no-wrap
msgid "Plasma GUI"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:1610
#, no-wrap
msgid "images/gmoccapy_plasma.png"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1614
msgid ""
"There is a very good WIKI, which is actually growing, maintained by Marius "
"see http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Gmoccapy_plasma[Plasma wiki "
"page]."
msgstr ""

#. type: Title ==
#: src/gui/gmoccapy.adoc:1615
#, no-wrap
msgid "Videos On YouTube"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1621
msgid ""
"Below is a series of videos that show GMOCCAPY in action.  Unfortunately, "
"these videos don't show the latest version of GMOCCAPY, but the way to use "
"it will still be the same as in the current version.  I will update the "
"videos as soon as possible."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1622
#, no-wrap
msgid "Basic Usage"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1625
msgid "https://www.youtube.com/watch?v=O5B-s3uiI6g"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1626
#, no-wrap
msgid "Simulated Jog Wheels"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1629
msgid "http://youtu.be/ag34SGxt97o"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1630
#, no-wrap
msgid "Settings Page"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1633
msgid "https://www.youtube.com/watch?v=AuwhSHRJoiI"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1634
#, no-wrap
msgid "Simulated Hardware Button"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1637
msgid "German: http://www.youtube.com/watch?v=DTqhY-MfzDE"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1639
msgid "English: http://www.youtube.com/watch?v=ItVWJBK9WFA"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1640
#, no-wrap
msgid "User Tabs"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1643
msgid "http://www.youtube.com/watch?v=rG1zmeqXyZI"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1645
#, no-wrap
msgid "Tool Measurement Videos"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1648
msgid "Auto Tool Measurement Simulation: http://youtu.be/rrkMw6rUFdk"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1650
msgid "Auto Tool Measurement Screen: http://youtu.be/Z2ULDj9dzvk"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1652
msgid "Auto Tool Measurement Machine: http://youtu.be/1arucCaDdX4"
msgstr ""

#. type: Title ==
#: src/gui/gmoccapy.adoc:1653
#, no-wrap
msgid "Known problems"
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1655
#, no-wrap
msgid "Strange numbers in the info area"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1658
msgid "If you get strange numbers in the info area of GMOCCAPY like:"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gmoccapy.adoc:1659
#, no-wrap
msgid "Strange numbers"
msgstr ""

#. type: Target for macro image
#: src/gui/gmoccapy.adoc:1659
#, no-wrap
msgid "images/strange_numbers.png"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1664
msgid ""
"You have made your config file using an older version of StepConfWizard.  It "
"has made a wrong entry in the INI file under the [TRAJ] named "
"MAX_LINEAR_VELOCITY = xxx. Change that entry to MAX_VELOCITY = xxx."
msgstr ""

#. type: Title ===
#: src/gui/gmoccapy.adoc:1666
#, no-wrap
msgid "Not ending macro"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1669
msgid "If you use a macro without movement, like this one:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1674 src/gui/gmoccapy.adoc:1693
#, no-wrap
msgid " o<zeroxy> sub\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1678 src/gui/gmoccapy.adoc:1697
#, no-wrap
msgid ""
"G92.1\n"
"G92.2\n"
"G40\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1680 src/gui/gmoccapy.adoc:1699
#, no-wrap
msgid "G10 L20 P0 X0 Y0\n"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1683 src/gui/gmoccapy.adoc:1704
#, no-wrap
msgid ""
"o<zeroxy> endsub\n"
"m2\n"
msgstr ""

#. type: Plain text
#: src/gui/gmoccapy.adoc:1689
msgid ""
"GMOCCAPY will not see the end of the macro, because the interpreter needs to "
"change its state to IDLE, but the macro does not even set the interpreter to "
"a new state. To avoid that just add a G4 P0.1 line to get the needed "
"signal.  The correct macro would be:"
msgstr ""

#. type: delimited block -
#: src/gui/gmoccapy.adoc:1701
#, no-wrap
msgid "G4 P0.1\n"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:20
msgid ""
"Gscreen is an infrastructure to display a custom screen to control "
"LinuxCNC.  Gscreen borrows heavily from GladeVCP. GladeVCP uses the GTK "
"widget editor GLADE to build virtual control panels (VCP) by point and "
"click. Gscreen combines this with Python programming to create a GUI screen "
"for running a CNC machine."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:25
msgid ""
"Gscreen is customizable if you want different buttons and status LEDs. "
"Gscreen supports GladeVCP which is used to add controls and indicators. To "
"customize Gscreen you use the Glade editor. Gscreen is not restricted to "
"adding a custom panel on the right or a custom tab it is fully editable."
msgstr ""

#. type: Block title
#: src/gui/gscreen.adoc:26
#, no-wrap
msgid "Gscreen Default Screen"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gscreen.adoc:27
#, no-wrap
msgid "Gscreen Mill Based Screen"
msgstr ""

#. type: Target for macro image
#: src/gui/gscreen.adoc:27
#, no-wrap
msgid "images/gscreen-mill.png"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gscreen.adoc:29 src/gui/gscreen.adoc:30
#, no-wrap
msgid "Gscreen Silverdragon Screen"
msgstr ""

#. type: Target for macro image
#: src/gui/gscreen.adoc:30 src/gui/qtdragon.adoc:33 src/gui/qtvcp.adoc:29
#, no-wrap
msgid "images/silverdragon.png"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gscreen.adoc:32 src/gui/gscreen.adoc:33
#, no-wrap
msgid "Gscreen Spartan Screen"
msgstr ""

#. type: Target for macro image
#: src/gui/gscreen.adoc:33
#, no-wrap
msgid "images/spartan.png"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gscreen.adoc:35 src/gui/gscreen.adoc:36
#, no-wrap
msgid "Gscreen Gaxis Screen"
msgstr ""

#. type: Target for macro image
#: src/gui/gscreen.adoc:36
#, no-wrap
msgid "images/gaxis.png"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gscreen.adoc:38 src/gui/gscreen.adoc:39
#, no-wrap
msgid "Gscreen Industrial Screen"
msgstr ""

#. type: Target for macro image
#: src/gui/gscreen.adoc:39
#, no-wrap
msgid "images/industrial.png"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:45
msgid ""
"Gscreen is based on 'Glade' (the editor), 'PyGTK' (the widget toolkit), and "
"'GladeVCP' (LinuxCNC's connection to Glade and PyGTK). GladeVCP has some "
"special widgets and actions added just for LinuxCNC A widget is just the "
"generic name used for the buttons, sliders, labels etc of the PyGTK toolkit."
msgstr ""

#. type: Title ===
#: src/gui/gscreen.adoc:46
#, no-wrap
msgid "Glade File"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:53
msgid ""
"A Glade file is a text file organized in the XML standard that describes the "
"layout and the widgets of the screen. PyGTK uses this file to actually "
"display and react to those widgets. The Glade editor makes it relatively "
"easy to build and edit this file You must use the Glade 3.38.2 editor that "
"uses the GTK3 widgets."
msgstr ""

#. type: Title ===
#: src/gui/gscreen.adoc:54
#, no-wrap
msgid "PyGTK"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:58
msgid ""
"PyGTK is the Python binding to GTK. GTK is the 'toolkit' of visual widgets, "
"it's programmed in C. PyGTK uses Python to 'bind' with GTK."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:66
msgid ""
"<<cha:glade-vcp,GladeVCP>> binds LinuxCNC, HAL, PyGTK and Glade all "
"together.  LinuxCNC requires some special widgets so GladeVCP supplies them. "
"Many are just HAL extensions to existing PyGTK widgets. GladeVCP creates the "
"HAL pins for the special widgets described in the Glade file.  GladeVCP also "
"allows one to add Python commands to interact with the widgets, to make them "
"do things not available in their default form.  If you can build a GladeVCP "
"panel you can customize Gscreen!"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:75
msgid ""
"There are two files that can be used, individually or in combination to add "
"customizations. Local Glade files and handler files. Normally Gscreen uses "
"the stock Glade file and possibly a handler file (if using a sample "
"'skin').  You can specify Gscreen to use 'local' Glade and handler files. "
"Gscreen looks in the folder that holds all the configuration files for the "
"configuration you selected."
msgstr ""

#. type: Block title
#: src/gui/gscreen.adoc:76
#, no-wrap
msgid "Local Glade Files"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:82
msgid ""
"If present, local Glade files in the configuration folder will be loaded "
"instead of the stock Glade files. Local Glade files allow you to use your "
"customized designs rather then the default screens. There is a switch in the "
"INI file to set set the base name: -c name so Gscreen looks for MYNAME.glade "
"and MYNAME_handler.py."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:93
msgid ""
"You can tell Gscreen to just load the Glade file and not connect it's "
"internal signals to it. This allows gscreen to load any GTK builder saved "
"Glade file This means you can display a completely custom screen, but also "
"requires you to use a handler file. Gscreen uses the Glade file to define "
"the widgets, so it can show and interact with them. Many of them have "
"specific names, others have Glade given generic names. If the widget will be "
"displayed but never changed then a generic name is fine. If one needs to "
"control or interact with the widget then a hopefully purposeful name is "
"given (all names must be unique). Widgets can also have signals defined for "
"them in the GLADE editor. It defines what signal is given and what method to "
"call."
msgstr ""

#. type: Block title
#: src/gui/gscreen.adoc:94
#, no-wrap
msgid "Modifying Stock Skins"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:101
msgid ""
"If you change the name of a widget, Gscreen might not be able to find it. If "
"this widget is referenced to from Python code, at best this makes the widget "
"not work anymore at worst it will cause an error when loading Gscreen's "
"default screens don't use many signals defined in the editor, it defines "
"them in the Python code. If you move (cut and paste) a widget with signals, "
"the signals will not be copied. You must add them again manually."
msgstr ""

#. type: Title ===
#: src/gui/gscreen.adoc:102 src/gui/qtvcp.adoc:166
#, no-wrap
msgid "Handler Files"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:118
msgid ""
"A handler file is a file containing Python code, which Gscreen adds to it's "
"default routines. A handler file allows one to modify defaults, or add logic "
"to a Gscreen skin without having to modify Gscreen proper. You can combine "
"new functions with Gscreen's function to modify behavior as you like. You "
"can completely bypass all of Gscreen's functions and make if work completely "
"differently. If present a handler file named gscreen_handler.py (or "
"MYNAME_handler.py if using the INI switch) will be loaded and registered "
"only one file is allowed Gscreen looks for the handler file, if found it "
"will look for specific function names and call them instead of the default "
"ones. If adding widgets you can set up signal calls from the Glade editor to "
"call routines you have written in the handler file. In this way you can have "
"custom behavior. Handler routines can call Gscreen's default routines, "
"either before or after running it's own code. In this way you can tack on "
"extra behavior such as adding a sound. Please see the <<cha:glade-vcp,"
"GladeVCP Chapter>> for the basics to GladeVCP handler files. Gscreen uses a "
"very similar technique."
msgstr ""

#. type: Title ===
#: src/gui/gscreen.adoc:119 src/gui/qtvcp.adoc:198
#, no-wrap
msgid "Themes"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:142
msgid ""
"Gscreen uses the PyGTK toolkit to display the screen.  PyGTK is the Python "
"language binding to GTK.  GTK supports 'themes'.  Themes are a way to modify "
"the look and feel of the widgets on the screen.  For instance the color or "
"size of buttons and sliders can be changed using themes.  There are many GTK "
"themes available on the web.  Themes can also be customized to modify "
"visuals of particular named widgets.  This ties the theme file to the Glade "
"file more tightly.  Some of the sample screen skins allow the user to select "
"any of the themes on the system.  The sample 'gscreen' is an example.  Some "
"will load the theme that is the same name in the config file.  The sample "
"'gscreen-gaxis' is an example.  This is done by putting the theme folder in "
"the config folder that has the INI and HAL files and naming it: "
"SCREENNAME_theme (SCREENNAME being the base name of the files eg. "
"gaxis_theme).  Inside this folder is another folder call gtk-2.0, inside "
"that is the theme files.  If you add this file, Gscreen will default to this "
"theme on start up.  gscreen-gaxis has a sample custom theme that looks for "
"certain named widgets and changes the visual behavior of those specific "
"widgets.  The Estop and machine-on buttons use different colors then the "
"rest of the buttons so that they stand out.  This is done in the handler "
"file by giving them specific names an by adding specific commands in the "
"theme's gtkrc file.  For some info on GTK theming (The sample theme uses the "
"pixmap theme engine), see: https://wiki.gnome.org/Attic/GnomeArt/Tutorials/"
"GtkThemes[GTK Themes], https://wiki.gnome.org/Attic/GnomeArt/Tutorials/"
"GtkEngines/PixmapEngine[Pixmap Theme Engine]."
msgstr ""

#. type: Title ===
#: src/gui/gscreen.adoc:143
#, no-wrap
msgid "Build a GladeVCP Panel"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:147
msgid ""
"Gscreen is just a big complicated GladeVCP panel, with Python code to "
"control it. To customize it we need the Glade file loaded in the Glade "
"editor."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:152
msgid ""
"If you have LinuxCNC 2.6+ installed on Ubuntu 10.04 just start the Glade "
"editor from the applications menu or from the terminal. Newer versions of "
"Linux will require you to install Glade 3.8.0 - 3.8.6 (you may need to "
"compile it yourself)."
msgstr ""

#. type: Block title
#: src/gui/gscreen.adoc:153
#, no-wrap
msgid "RIP compiled commands"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:163
msgid ""
"Using a compiled from source version of http://wiki.linuxcnc.org/cgi-bin/"
"wiki.pl?Installing_LinuxCNC[LinuxCNC] open a terminal and <<faq:cd,cd>> to "
"the top of the LinuxCNC folder. Set up the environment by entering '. ./"
"scripts/rip-environment' now enter 'glade', you see a bunch of warnings in "
"the terminal that you can ignore and the editor should open. The stock "
"Gscreen Glade file is in: src/emc/usr_intf/gscreen/ sample skins are in /"
"share/gscreen/skins/. This should be copied to a configuration folder. Or "
"you can make a clean-sheet Glade file by saving it in a configuration folder."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:170
msgid ""
"Ok you have loaded the stock Glade file and now can edit it. The first thing "
"you notice is it does not look in the editor like what it's displayed like "
"Gscreen uses some tricks, such as hiding all boxes of buttons except one and "
"changing that one depending on the mode. The same goes for notebooks, some "
"screens use notebooks with the tabs not shown. To change pages in the editor "
"you need to temporarily show those tabs."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:177
msgid ""
"When making changes it is far easier to add widgets then subtract widgets "
"and still have the screen work properly making objects 'not visible' is one "
"way to change the display without getting errors. This won't always work "
"some widgets will be set visible again. Changing the names of Gscreen's "
"regular widgets is probably not gonna work well without changing the Python "
"code, but moving a widget while keeping the name is usually workable."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:184
msgid ""
"Gscreen leverages GladeVCP widgets as much as possible, to avoid adding "
"Python code. Learning about <<cha:glade-vcp,GladeVCP>> widgets is a "
"prerequisite.  If the existing widgets give you the function you want or "
"need then no Python code needs be added, just save the Glade file in your "
"configuration folder.  If you need something more custom then you must do "
"some Python programming.  The name of the parent window needs to be window1. "
"Gscreen assumes this name."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:187
msgid ""
"Remember, if you use a custom screen option YOU are responsible for fixing "
"it (if required) when updating LinuxCNC."
msgstr ""

#. type: Title ==
#: src/gui/gscreen.adoc:188
#, no-wrap
msgid "Building a simple clean-sheet custom screen"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gscreen.adoc:190
#, no-wrap
msgid "Gscreen simple usable screen"
msgstr ""

#. type: Target for macro image
#: src/gui/gscreen.adoc:190
#, no-wrap
msgid "images/tester.png"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:194
msgid ""
"Lets build a simple usable screen. Build this in the Glade editor (if using "
"a RIP package run it from a terminal after using . scripts/rip-environment )."
msgstr ""

#. type: Block title
#: src/gui/gscreen.adoc:195
#, no-wrap
msgid "Things to note:"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:198
msgid ""
"The top level window must be called the default name, 'window1' - Gscreen "
"relies on this."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:201
msgid ""
"Add actions by right clicking, and selecting 'add as toplevel widget' they "
"don't add anything visual to the window but are added to the right most "
"action list. Add all the ones you see on the top right."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:203
msgid ""
"After adding the actions we must link the buttons to the actions for them to "
"work (see below)."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:205
msgid ""
"The gremlin widget doesn't have a default size so setting a requested size "
"is helpful (see below)."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:207
msgid ""
"The sourceview widget will try to use the whole window so adding it to a "
"scrolled window will cover this (This is already been done in the example)."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:209
msgid ""
"The buttons will expand as the window is made larger which is ugly so we "
"will set the box they are in, to not expand (see below)."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:211
msgid ""
"The button types to use depend on the VCP_action used -eg vcp_toggle_action "
"usually require toggle buttons (Follow the example for now)."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:213
msgid ""
"The buttons in this example are regular buttons not HAL buttons. We don't "
"need the HAL pins."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/gscreen.adoc:214
#, no-wrap
msgid "Glade editor tester.glade"
msgstr ""

#. type: Target for macro image
#: src/gui/gscreen.adoc:214
#, no-wrap
msgid "images/tester_editor.png"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:224
msgid ""
"In this screen we are using VCP_actions to communicate to LinuxCNC the "
"actions we want. This allows us standard functions without adding Python "
"code in the handler file. Let's link the estop toggle button to the estop "
"action Select the estop toggle button and under the general tab look for "
"'Related Action' and click the button beside it. Now select the toggle estop "
"action. Now the button will toggle estop on and off when clicked. Under the "
"general tab you can change the text of the button's label to describe it's "
"function. Do this for all the buttons."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:227
msgid ""
"Select the gremlin widget click the common tab and set the requested height "
"to 100 and click the checkbox beside it."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:230
msgid ""
"Click the horizontal box that holds the buttons. Click the packing tab and "
"click 'expand' to 'No'."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:243
msgid ""
"Save it as tester.glade and save it in sim/gscreen/gscreen_custom/ folder. "
"Now launch LinuxCNC and click to sim/gscreen/gscreen_custom/tester and start "
"it.  If all goes well our screen will pop up and the buttons will do their "
"job This works because the tester.ini tells gscreen to look for and load "
"tester.glade and tester_handler.py. The tester_handler.py file is included "
"in that folder and is coded just show the screen and not much else. Since "
"the special widgets directly communicate with LinuxCNC you can still do "
"useful things. If your screen needs are covered by the available special "
"widgets then this is as far as you need to go to build a screen. If you want "
"something more there are still many tricks available from just adding "
"'function calls' to get canned behaviour.  To coding your own Python code to "
"customize exactly what you want. But that means learning about handler files."
msgstr ""

#. type: Title ==
#: src/gui/gscreen.adoc:244
#, no-wrap
msgid "Handler file example"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:248
msgid ""
"There are special functions Gscreen checks the handler file for.  If you add "
"these in you handler file Gscreen will call them instead of gscreen's "
"internal same-named functions."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:250
msgid "initialize_preferences(self): You can install new preference routines."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:254
msgid ""
"initialize_keybindings(self) You can install new keybinding routines. In "
"most cases you won't want to do this, you will want to override the "
"individual keybinding calls. You can also add more keybindings that will "
"call an arbitrary function."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:255
msgid "initialize_pins(self): makes / initializes HAL pins"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:262
msgid ""
"connect_signals(self,handlers): If you are using a completely different "
"screen the default Gscreen you must add this or gscreen will try to connect "
"signals to widgets that are not there. Gscreen's default function is called "
"with self.gscreen.connect_signals(handlers) If you wish to just add extra "
"signals to your screen but still want the default ones call this first then "
"add more signals. If you signals are simple (no user data passed) then you "
"can also use the Glade signal selection in the Glade editor."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:268
msgid ""
"initialize_widgets(self): You can use this to set up any widgets. Gscreen "
"usually calls 'self.gscreen.initialize_widgets()' which actually calls many "
"separate functions. If you wish to incorporate some of those widgets then "
"just call those functions directly. or add self.gscreen.init_show_windows() "
"so widgets are just shown. Then if desired, initialize/adjust your new "
"widgets."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:270
msgid ""
"initialize_manual_toolchange(self): allows a complete revamp of the manual "
"toolchange system."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:271
msgid "set_restart_line(self.line):"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:274
msgid ""
"timer_interrupt(self): allows one to complete redefine the interrupt routine "
"This is used for calling periodic() and checking for errors from linuxcnc."
"status."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:276
msgid ""
"check_mode(self): used to check what mode the screen is in. Returns a list[] "
"0 -manual 1- mdi 2- auto 3- jog."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:278
msgid ""
"on_tool_change(self,widget): You can use this to override the manual tool "
"change dialog -this is called when 'gscreen.tool-change' changes state."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:281
msgid ""
"dialog_return(self,dialog_widget,displaytype,pinname): Use this to override "
"any user message or manual tool change dialog. Called when the dialog is "
"closed."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:287
msgid ""
"periodic(self): This is called every (default 100) milliseconds. Use it to "
"update your widgets/HAL pins. You can call Gscreen regular periodic "
"afterwards too, self.gscreen.update_position() or just add pass to not "
"update anything. Gscreen's update_position() actually calls many separate "
"functions. If you wish to incorporate some of those widgets then just call "
"those functions directly."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:290
msgid ""
"You can also add you own functions to be called in this file. Usually you "
"would add a signal to a widget to call your function."
msgstr ""

#. type: Title ===
#: src/gui/gscreen.adoc:291
#, no-wrap
msgid "Adding Keybindings Functions"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:296
msgid ""
"Our tester example would be more useful if it responded to keyboard "
"commands.  There is a function called keybindings() that tries to set this "
"up.  While you can override it completely, we didn't - but it assumes some "
"things:"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:298
msgid ""
"It assumes the estop toggle button is call 'button_estop' and that F1 key "
"controls it."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:299
msgid ""
"It assumes the power button is called 'button_machine_on' and the F2 key "
"controls it."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:302
msgid ""
"These are easily fixed by renaming the buttons in the Glade editor to "
"match.  But instead we are going to override the standard calls and add our "
"own."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:304
msgid "Add these command to the handler file:"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:323
#, no-wrap
msgid ""
"# override Gscreen Functions\n"
"# keybinding calls\n"
"def on_keycall_ESTOP(self,state,SHIFT,CNTRL,ALT):\n"
"  if state: # only if pressed, not released\n"
"    self.widgets.togglebutton1.emit('activate')\n"
"    self.gscreen.audio.set_sound(self.data.alert_sound)\n"
"    self.gscreen.audio.run()\n"
"    return True # stop progression of signal to other widgets\n"
"def on_keycall_POWER(self,state,SHIFT,CNTRL,ALT):\n"
"  if state:\n"
"    self.widgets.togglebutton2.emit('activate')\n"
"    return True\n"
"def on_keycall_ABORT(self,state,SHIFT,CNTRL,ALT):\n"
"  if state:\n"
"    self.widgets.button3.emit('activate')\n"
"    return True\n"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:330
msgid ""
"So now we have overridden Gscreen's function calls of the same name and deal "
"with them in our handler file We now reference the widgets by the name we "
"used in the Glade editor.  We also added a built in gscreen function to make "
"a sound when Estop changes.  Note that we we call Gscreen's built in "
"functions we must use self.gscreen.[FUNCTION NAME]()  If we used self."
"[FUNCTION NAME]() it would call the function in our handler file."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:332
msgid "Lets add another key binding that loads halmeter when F4 is pressed."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:334
msgid "In the handler file under 'def initialize_widgets(self):' change to:"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:340
#, no-wrap
msgid ""
"  def initialize_widgets(self):\n"
"    self.gscreen.init_show_windows()\n"
"    self.gscreen.keylookup.add_conversion('F4','TEST','on_keycall_HALMETER')\n"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:343
msgid "Then add these functions under the 'HandlerClass' class:"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:350
#, no-wrap
msgid ""
"  def on_keycall_HALMETER(self,state,SHIFT,CNTRL,ALT):\n"
"    if state:\n"
"      self.gscreen.on_halmeter()\n"
"      return True\n"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:354
msgid ""
"This adds a keybinding conversion that directs gscreen to call "
"on_keycall_HALMETER when F4 is pressed.  Then we add the function to the "
"handle file to call a Gscreen builtin function to start halmeter."
msgstr ""

#. type: Title ===
#: src/gui/gscreen.adoc:355
#, no-wrap
msgid "Linuxcnc State Status"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:362
msgid ""
"The module 'Gstat' polls LinuxCNC's state every 100ms and sends callback "
"messages to user functions when state changes.  You can register messages to "
"act on specific state changes.  As an example we will register to get 'file-"
"loaded' messages when LinuxCNC loads a new file.  First we must import the "
"module and instantiate it: In the import section of the handler file add:"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:367 src/gui/gstat.adoc:106
#, no-wrap
msgid ""
"from hal_glib import GStat\n"
"GSTAT = GStat()\n"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:370
msgid "In the handler file under 'def \\_\\_init__(self):' add:"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:374
#, no-wrap
msgid "GSTAT.connect('file-loaded', self.update_filepath)\n"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:377
msgid "Then in the 'HandlerClass', add the function:"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:382
#, no-wrap
msgid ""
"self.update_filepath(self, obj, path):\n"
"    self.widgets.my_path_label.set_text(path)\n"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:386
msgid ""
"When LinuxCNC loads a new file, Gstat will send a callback message to the "
"function 'update_filepath'.  In this example we update a label with that "
"path name (assuming there is a label nammed 'my_path_label') in the GLADE "
"file."
msgstr ""

#. type: Title ===
#: src/gui/gscreen.adoc:387
#, no-wrap
msgid "Jogging Keys"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:391
msgid ""
"There are no special widgets to do screen-button jogging, so we must do it "
"with Python code.  Under the connect_signals function add this code:"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:400
#, no-wrap
msgid ""
"        for i in('x','y','z'):\n"
"            self.widgets[i+'neg'].connect(\"pressed\", self['jog_'+i],0,True)\n"
"            self.widgets[i+'neg'].connect(\"released\", self['jog_'+i],0,False)\n"
"            self.widgets[i+'pos'].connect(\"pressed\", self['jog_'+i],1,True)\n"
"            self.widgets[i+'pos'].connect(\"released\", self['jog_'+i],1,False)\n"
"        self.widgets.jog_speed.connect(\"value_changed\",self.jog_speed_changed)\n"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:403
msgid "Add these functions under the HandlerClass class:"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:414
#, no-wrap
msgid ""
"    def jog_x(self,widget,direction,state):\n"
"        self.gscreen.do_key_jog(_X,direction,state)\n"
"    def jog_y(self,widget,direction,state):\n"
"        self.gscreen.do_key_jog(_Y,direction,state)\n"
"    def jog_z(self,widget,direction,state):\n"
"        self.gscreen.do_key_jog(_Z,direction,state)\n"
"    def jog_speed_changed(self,widget,value):\n"
"        self.gscreen.set_jog_rate(absolute = value)\n"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:419
msgid ""
"Finally add two buttons to the GLADE file for each axis - one for positive, "
"one for negative direction jogging.  Name these buttons xneg, xpos, yneg, "
"ypos zneg, zpos respectively.  add a SpeedControl widget to the GLADE file "
"and name it jog_speed."
msgstr ""

#. type: Title ==
#: src/gui/gscreen.adoc:420
#, no-wrap
msgid "Gscreen Start Up"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:424
msgid ""
"Gscreen is really just infrastructure to load a custom GladeVCP file and "
"interact with it."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:426
msgid "Gscreen reads the options it was started with."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:427
msgid "Gscreen sets the debug mode and set the optional skin name."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:430
msgid ""
"Gscreen checks to see if there are 'local' XML, handler and/or locale files "
"in the configuration folder. It will use them instead of the default ones "
"(in share/gscreen/skins/) (There can be two separate screens displayed)."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:432
msgid ""
"The main screen is loaded and translations set up. If present the second "
"screen will be loaded and translations set up."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:433
msgid "Optional Audio is initialized if available."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:435
msgid ""
"It reads some of the INI file to initialize the units, and the number/type "
"of axes."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:437
msgid ""
"Initializes Python's binding to HAL to build a userspace component with the "
"Gscreen name."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:439
msgid ""
"GladeVCP's makepins is called to parse the XML file to build HAL pins for "
"the HAL widgets and register the LinuxCNC connected widgets."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:441
msgid ""
"Checks for a 'local' handler file in the configuration folder or else uses "
"the stock one from the skin folder."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:443
msgid ""
"If there is a handler file gscreen parses it, and registers the function "
"calls into Gscreen's namespace."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:445
msgid ""
"Glade matches/registers all signal calls to functions in gscreen and the "
"handler file."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:447
msgid ""
"Gscreen checks the INI file for an option preference file name otherwise it "
"uses '.gscreen_preferences' =."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:450
msgid ""
"Gscreen checks to see if there is a preference function call "
"('initialize_preferences(self)') in the handler file otherwise it uses the "
"stock Gscreen one."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:451
msgid "Gscreen checks for ClassicLadder realtime component."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:452
msgid "Gscreen checks for the system wide GTK theme."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:453
msgid "Gscreen collects the jogging increments from the INI file."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:454
msgid "Gscreen collects the angular jogging increments from the INI file."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:455
msgid "Gscreen collects the default and max jog rate from the INI."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:456
msgid ""
"Gscreen collects the max velocity of any axes from the INI's TRAJ section."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:458
msgid ""
"Gscreen checks to see if there is angular axes then collects the default and "
"max velocity from the INI file."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:459
msgid "Gscreen collect all the override setting from the INI."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:460
msgid "Gscreen checks if its a lathe configuration from the INI file."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:462
msgid ""
"Gscreen finds the name of the tool_table,tool editor and param file from the "
"INI."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:464
msgid ""
"Gscreen checks the handler file for keybindings function "
"('initialize_keybindings(self)') or else use Gscreen stock one."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:466
msgid ""
"Gscreen checks the handler file for pins function ('initialize_pins(self)')  "
"or else use Gscreen stock one."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:468
msgid ""
"Gscreen checks the handler file for manual_toolchange function "
"('initialize_manual_toolchange(self)') or else use Gscreen stock one."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:470
msgid ""
"Gscreen checks the handler file for connect_signals function "
"('initialize_connect_signals(self)') or else use Gscreen stock one."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:472
msgid ""
"Gscreen checka the handler file for widgets function "
"('initialize_widgets(self)') or else use Gscreen stock one."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:473
msgid "Gscreen set up messages specified in the INI file."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:476
msgid ""
"Gscreen tells HAL the Gscreen HAL component is finished making pins and is "
"ready. If there is a terminal widget in the screen it will print all the "
"Gscreen pins to it."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:477
msgid "Gscreen sets the display cycle time based on the INI file."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:479
msgid ""
"Gscreen checks the handler file for 'timer_interupt(self)' function call "
"otherwise use Gscreen's default function call."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:483
msgid "Under the [DISPLAY] heading:"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:490
#, no-wrap
msgid ""
"DISPLAY = gscreen -c tester\n"
"  options:\n"
"   -d debugging on\n"
"   -v verbose debugging on\n"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:498
msgid ""
"The -c switch allows one to select a 'skin'. Gscreen assumes the Glade file "
"and the handler file use this same name. The optional second screen will be "
"the same name with a 2 (eg. tester2.glade) There is no second handler file "
"allowed.  It will only be loaded if it is present. Gscreen will search the "
"LinuxCNC configuration file that was launched first for the files, then in "
"the system skin folder."
msgstr ""

#. type: Title ==
#: src/gui/gscreen.adoc:499
#, no-wrap
msgid "User Dialog Messages"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:503
msgid ""
"This function is used to display pop up dialog messages on the screen.  "
"These are defined in the INI file and controlled by HAL pins:"
msgstr ""

#. type: Labeled list
#: src/gui/gscreen.adoc:504
#, no-wrap
msgid "MESSAGE_BOLDTEXT"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:505
msgid "is generally a title."
msgstr ""

#. type: Labeled list
#: src/gui/gscreen.adoc:505
#, no-wrap
msgid "MESSAGE_TEXT"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:506
msgid "is below that and usually longer."
msgstr ""

#. type: Labeled list
#: src/gui/gscreen.adoc:506
#, no-wrap
msgid "MESSAGE_DETAILS"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:507
msgid "is hidden unless clicked on."
msgstr ""

#. type: Labeled list
#: src/gui/gscreen.adoc:507
#, no-wrap
msgid "MESSAGE_PINNAME"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:508
msgid "is the basename of the HAL pins."
msgstr ""

#. type: Labeled list
#: src/gui/gscreen.adoc:508
#, no-wrap
msgid "MESSAGE_TYPE"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:509
msgid "specifies whether its a yes/no, ok, or status message"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:510
msgid "Status messages"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:511
msgid "will be shown in the status bar and the notify dialog,"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:512
msgid "require no user intervention."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:513
msgid "ok messages"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:514
msgid "require the user to click ok to close the dialog."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:515
msgid ""
"have one HAL pin to launch the dialog and one to signify it's waiting for "
"response."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:516
msgid "yes/no messages"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:517
msgid "require the user to select yes or no buttons to close the dialog."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:518
msgid "have three HAL pins:"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:519
msgid "one to show the dialog,"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:520
msgid "one for waiting, and"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:521
msgid "one for the answer."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:523
msgid "Here is a sample INI code. It would be under the [DISPLAY] heading."
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:532
#, no-wrap
msgid ""
"# This just shows in the status bar and desktop notify popup.\n"
"MESSAGE_BOLDTEXT = NONE\n"
"MESSAGE_TEXT = This is a statusbar test\n"
"MESSAGE_DETAILS = STATUS DETAILS\n"
"MESSAGE_TYPE = status\n"
"MESSAGE_PINNAME = statustest\n"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:539
#, no-wrap
msgid ""
"# This will pop up a dialog that asks a yes no question\n"
"MESSAGE_BOLDTEXT = NONE\n"
"MESSAGE_TEXT = This is a yes no dialog test\n"
"MESSAGE_DETAILS = Y/N DETAILS\n"
"MESSAGE_TYPE = yesnodialog\n"
"MESSAGE_PINNAME = yndialogtest\n"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:547
#, no-wrap
msgid ""
"# This pops up a dialog that requires an ok response and it shows in the status bar and\n"
"# the desktop notify popup.\n"
"MESSAGE_BOLDTEXT = This is the short text\n"
"MESSAGE_TEXT = This is the longer text of the both type test. It can be longer then the status bar text\n"
"MESSAGE_DETAILS = BOTH DETAILS\n"
"MESSAGE_TYPE = okdialog status\n"
"MESSAGE_PINNAME = bothtest\n"
msgstr ""

#. type: Title ===
#: src/gui/gscreen.adoc:549
#, no-wrap
msgid "Copy the Stock Handler/Glade File For Modification"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:563
msgid ""
"If you wish to use a stock screen but modify it's handler file, you need to "
"copy the stock file to your config file folder.  Gscreen will see this and "
"use the copied file.  But where is the original file? If using a RIP "
"LinuxCNC the sample skins are in /share/gscreen/skins/'SCREENNAME' Installed "
"versions of LinuxCNC have them in slightly different places depending on the "
"distribution used.  An easy way to find the location is to open a terminal "
"and start the sim screen you wish to use.  In the terminal the file "
"locations will be printed.  It may help to add the -d switch to the gscreen "
"load line in the INI."
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:565
msgid "Here is a sample:"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:580
#, no-wrap
msgid ""
"chris@chris-ThinkPad-T500 ~/emc-dev/src $ linuxcnc\n"
"LINUXCNC - 2.7.14\n"
"Machine configuration directory is '/home/chris/emc-dev/configs/sim/gscreen/gscreen_custom'\n"
"Machine configuration file is 'industrial_lathe.ini'\n"
"Starting LinuxCNC...\n"
"Found file(lib): /home/chris/emc-dev/lib/hallib/core_sim.hal\n"
"Note: Using POSIX non-realtime\n"
"Found file(lib): /home/chris/emc-dev/lib/hallib/sim_spindle_encoder.hal\n"
"Found file(lib): /home/chris/emc-dev/lib/hallib/axis_manualtoolchange.hal\n"
"Found file(lib): /home/chris/emc-dev/lib/hallib/simulated_home.hal\n"
"**** GSCREEN WARNING: no audio alerts available - Is python-gst0.10 library installed?\n"
"**** GSCREEN INFO ini: /home/chris/emc-dev/configs/sim/gscreen/gscreen_custom/industrial_lathe.ini\n"
"**** GSCREEN INFO: Skin name = industrial\n"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:582
#, no-wrap
msgid "**** GSCREEN INFO:  Using SKIN glade file from /home/chris/emc-dev/share/gscreen/skins/industrial/industrial.glade ****\n"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:585
#, no-wrap
msgid ""
"**** GSCREEN INFO:  No Screen 2 glade file present\n"
"**** GSCREEN INFO: handler file path: ['/home/chris/emc-dev/share/gscreen/skins/industrial/industrial_handler.py']\n"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:588
msgid "The line:"
msgstr ""

#. type: delimited block -
#: src/gui/gscreen.adoc:591
#, no-wrap
msgid "**** GSCREEN INFO: handler file path: ['/home/chris/emc-dev/share/gscreen/skins/industrial/industrial_handler.py']\n"
msgstr ""

#. type: Plain text
#: src/gui/gscreen.adoc:595
msgid ""
"shows where the stock file lives. Copy this file to your config folder.  "
"This works the same for the Glade file."
msgstr ""

#. type: Title =
#: src/gui/gstat.adoc:5
#, no-wrap
msgid "GStat"
msgstr ""

#. type: Title ==
#: src/gui/gstat.adoc:7
#, no-wrap
msgid "Intro"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:14
msgid ""
"GStat is a Python class used to send messages from LinuxCNC to other Python "
"programs.  It uses GObject to deliver messages, making it easy to listen for "
"specific information.  This is referred to as event-driven programming, "
"which is more efficient then every program polling LinuxCNC at the same "
"time.  GladeVCP, Gscreen, Gmoccapy and QtVCP use GStat extensively.  GStat "
"is in the `hal_glib` module."
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:17
msgid "First, a program imports the `hal_glib` module and instantiates GStat."
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:18
msgid "Then it 'connects' to the messages it wishes to monitor."
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:21
msgid ""
"GStat checks LinuxCNC's status every 100&thinsp;ms and if there are "
"differences from the last check, it will send a callback message to all the "
"connected programs with the current status."
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:22
msgid ""
"When GStat calls the registered function, it sends the GStat object plus any "
"return codes from the message."
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:24
msgid "Typical code signatures:"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:28
#, no-wrap
msgid "GSTAT.connect('MESSGAE-TO-LISTEN-FOR', FUNCTION_TO_CALL)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:30
#, no-wrap
msgid "def FUNCTION_TO_CALL(gstat_object, return_codes):\n"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:33
msgid ""
"Often LAMBDA is used to strip the GSTAT object and manipulate the return "
"codes:"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:37
#, no-wrap
msgid "GSTAT.connect('MESSGAE-TO-LISTEN-FOR', lambda o, return: FUNCTION_TO_CALL(not return))\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:39
#, no-wrap
msgid "def FUNCTION_TO_CALL(return_codes):\n"
msgstr ""

#. type: Title ==
#: src/gui/gstat.adoc:41
#, no-wrap
msgid "Sample GStat Code"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:47
msgid ""
"There are some basic patterns for using GStat, depending on what library you "
"are using them in.  If using GStat with GladeVCP, Gscreen, or QtVCP, the "
"GObject library is not needed as those toolkits already set up GObject."
msgstr ""

#. type: Title ===
#: src/gui/gstat.adoc:48
#, no-wrap
msgid "Sample HAL component code pattern"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:51
msgid "This program creates two HAL pins that output the status of G20/G21."
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:63
#, no-wrap
msgid ""
"import gi\n"
"gi.require_version('Gtk', '3.0')\n"
"from gi.repository import GObject\n"
"from gi.repository import GLib\n"
"import hal\n"
"from hal_glib import GStat\n"
"GSTAT = GStat()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:68
#, no-wrap
msgid ""
"# callback to change HAL pin state\n"
"def mode_changed(obj, data):\n"
"        h['g20'] = not data\n"
"        h['g21'] = data\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:74
#, no-wrap
msgid ""
"# Make a component and pins\n"
"h = hal.component(\"metric_status\")\n"
"h.newpin(\"g20\", hal.HAL_BIT, hal.HAL_OUT)\n"
"h.newpin(\"g21\", hal.HAL_BIT, hal.HAL_OUT)\n"
"h.ready()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:77
#, no-wrap
msgid ""
"# connect a GSTAT message to a callback function\n"
"GSTAT.connect(\"metric-mode-changed\",mode_changed)\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:80
#, no-wrap
msgid ""
"# force GSTAT to initialize states\n"
"GSTAT.forced_update()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:86
#, no-wrap
msgid ""
"# loop till exit\n"
"try:\n"
"    GLib.MainLoop().run()\n"
"except KeyboardInterrupt:\n"
"    raise SystemExit\n"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:91
#, no-wrap
msgid ""
"This would be loaded with 'loadusr python PATH-TO-FILE/FILENAME.py' or if you need to wait for the pins to be made before continuing:\n"
"`loadusr python -Wn metric_status PATH-TO-FILE/FILENAME.py`\n"
"The pins would be: 'metric_status.g20' and 'metric_status.g21'."
msgstr ""

#. type: Title ===
#: src/gui/gstat.adoc:92
#, no-wrap
msgid "GladeVCP Python extension code pattern"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:95
msgid "This file assumes there are three GTK labels named:"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:97 src/gui/gstat.adoc:141
msgid "'state_label'"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:98 src/gui/gstat.adoc:142
msgid "'e_state_label'"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:99 src/gui/gstat.adoc:143
msgid "'interp_state_label'"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:111
#, no-wrap
msgid ""
"    def __init__(self, halcomp, builder, useropts):\n"
"        self.builder = builder\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:114 src/gui/gstat.adoc:158
#, no-wrap
msgid ""
"        GSTAT.connect(\"state-estop\",lambda w: self.update_estate_label('ESTOP'))\n"
"        GSTAT.connect(\"state-estop-reset\",lambda w: self.update_estate_label('RESET'))\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:117 src/gui/gstat.adoc:161
#, no-wrap
msgid ""
"        GSTAT.connect(\"state-on\",lambda w: self.update_state_label('MACHIBE ON'))\n"
"        GSTAT.connect(\"state-off\",lambda w: self.update_state_label('MACHINE OFF'))\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:121 src/gui/gstat.adoc:165
#, no-wrap
msgid ""
"        GSTAT.connect(\"interp-paused\",lambda w: self.update_interp_label('Paused'))\n"
"        GSTAT.connect(\"interp-run\",lambda w: self.update_interp_label('Run'))\n"
"        GSTAT.connect(\"interp-idle\",lambda w: self.update_interp_label('Idle'))\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:124
#, no-wrap
msgid ""
"    def update_state_label(self,text):\n"
"        self.builder.get_object('state_label').set_label(\"State: %s\" % (text))\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:127
#, no-wrap
msgid ""
"    def update_estate_label(self,text):\n"
"        self.builder.get_object('e_state_label').set_label(\"E State: %s\" % (text))\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:130
#, no-wrap
msgid ""
"    def update_interp_label(self,text):\n"
"        self.builder.get_object('interp_state_label').set_label(\"Interpreter State: %s\" % (text))\n"
msgstr ""

#. type: Title ===
#: src/gui/gstat.adoc:135
#, no-wrap
msgid "QtVCP Python extension code pattern"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:139
#, no-wrap
msgid ""
"QtVCP extends GStat, so must be loaded differently but all the messages are available in QtVCP.\n"
"This handler file assumes there are three QLabels named:"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:150
#, no-wrap
msgid ""
"from qtvcp.core import Status\n"
"GSTAT = Status()\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:155
#, no-wrap
msgid ""
"    def __init__(self, halcomp,widgets,paths):\n"
"        self.w = widgets\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:168
#, no-wrap
msgid ""
"    def update_state_label(self,text):\n"
"        self.w.state_label.setText(\"State: %s\" % (text))\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:171
#, no-wrap
msgid ""
"    def update_estate_label(self,text):\n"
"        self.w.e_state_label.setText(\"E State: %s\" % (text))\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:174
#, no-wrap
msgid ""
"    def update_interp_label(self,text):\n"
"        self.winterp_state_label.setText(\"Interpreter State: %s\" % (text))\n"
msgstr ""

#. type: delimited block -
#: src/gui/gstat.adoc:177
#, no-wrap
msgid ""
"def get_handlers(halcomp,builder,useropts):\n"
"    return [HandlerClass(halcomp,widgets,paths)]\n"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gui/gstat.adoc:179 html/gcode.html:175
#, no-wrap
msgid "Messages"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:181
#, no-wrap
msgid "*periodic* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:183
msgid "'(returns nothing)' - sent every 100&thinsp;ms."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:184
#, no-wrap
msgid "*state-estop* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:186
msgid "'(returns nothing)' - Sent when LinuxCNC is goes into estop."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:187
#, no-wrap
msgid "*state-estop-reset*"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:189
msgid "'(returns nothing)' - Sent when LinuxCNC comes out of estop."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:190
#, no-wrap
msgid "*state-on* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:192
msgid "'(returns nothing)' - Sent when LinuxCNC is in machine on state."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:193
#, no-wrap
msgid "*state-off*"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:195
msgid "'(returns nothing)' - Sent when LinuxCNC is in machine off state."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:196
#, no-wrap
msgid "*homed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:198
msgid "'(returns string)' - Sent as each joint is homed."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:199
#, no-wrap
msgid "*all-homed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:201
msgid "'(returns nothing)' - Sent when all defined joints are homed."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:202
#, no-wrap
msgid "*not-all-homed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:204
msgid "'(returns string)' - Sends a list of joints not currently homed."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:205
#, no-wrap
msgid "*override_limits_changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:207
msgid ""
"'(returns string)' - Sent if LinuxCNC has been directed to override its "
"limits."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:208
#, no-wrap
msgid "*hard-limits-tripped* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:211
msgid ""
"'(returns bool, Python List)' - Sent when any hard limit is tripped.  bool "
"indicates if any limit is tripped, the list shows all available joint's "
"current limit values."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:212
#, no-wrap
msgid "*mode-manual* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:214
msgid "'(returns nothing)' - Sent when LinuxCNC switches to manual mode."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:215
#, no-wrap
msgid "*mode-mdi* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:217
msgid "'(returns nothing)' - Sent when LinuxCNC switches to MDI mode."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:218
#, no-wrap
msgid "*mode-auto* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:220
msgid "'(returns nothing)' - Sent when LinuxCNC switches to auto mode."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:221
#, no-wrap
msgid "*command-running* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:223
msgid "'(returns nothing)' - Sent when running a program or MDI"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:224
#, no-wrap
msgid "*command-stopped* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:226
msgid "'(returns nothing)' - Sent when a program or MDI stopped"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:227
#, no-wrap
msgid "*command-error* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:229
msgid "'(returns nothing)' - Sent when there is a command error"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:230
#, no-wrap
msgid "*interp-run* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:232
msgid ""
"'(returns nothing)' - Sent when LinuxCNC's interpreter is running an MDI or "
"program."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:233
#, no-wrap
msgid "*interp-idle* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:235
msgid "'(returns nothing)' - Sent when LinuxCNC's interpreter idle."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:236
#, no-wrap
msgid "*interp-paused* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:238
msgid "'(returns nothing)' - Sent when LinuxCNC's interpreter is paused."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:239
#, no-wrap
msgid "*interp-reading* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:241
msgid "'(returns nothing)' - Sent when LinuxCNC's interpreter is reading."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:242
#, no-wrap
msgid "*interp-waiting* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:244
msgid "'(returns nothing)' - Sent when LinuxCNC's interpreter is waiting."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:245
#, no-wrap
msgid "*jograte-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:250
#, no-wrap
msgid ""
"'(returns float)' - Sent when jog rate has changed.\n"
"LinuxCNC does not have an internal jog rate.\n"
"This is GStat's internal jog rate.\n"
"It is expected to be in the machine's native units regardless of the current unit mode ."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:251
#, no-wrap
msgid "*jograte-angular-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:256
#, no-wrap
msgid ""
"'(returns float)' - Sent when the angular jog rate has changed.\n"
"LinuxCNC does not have an internal angular jog rate.\n"
"This is GStat's internal jog rate.\n"
"It is expected to be in the machine's native units regardless of the current unit mode ."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:257
#, no-wrap
msgid "*jogincrement-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:262
#, no-wrap
msgid ""
"'(returns float, text)' - Sent when jog increment has changed.\n"
"LinuxCNC does not have an internal jog increment.\n"
"This is GStat's internal jog increment.\n"
"It is expected to be in the machine's native units regardless of the current unit mode ."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:263
#, no-wrap
msgid "*jogincrement-angular-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:268
#, no-wrap
msgid ""
"'(returns float, text)' - Sent when angular jog increment has changed.\n"
"LinuxCNC does not have an internal angular jog increment.\n"
"This is GStat's internal angular jog increment.\n"
"It is expected to be in the machine's native units regardless of the current unit mode ."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:269
#, no-wrap
msgid "*program-pause-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:271
msgid "'(returns bool)' - Sent when program is paused/unpaused."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:272
#, no-wrap
msgid "*optional-stop-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:274
msgid "'(returns bool)' - Sent when optional stop is set/unset"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:275
#, no-wrap
msgid "*block-delete-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:277
msgid "'(returns bool)' - sent when block delete is set/unset."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:278
#, no-wrap
msgid "*file-loaded* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:280
msgid "'(returns string)' - Sent when LinuxCNC has loaded a file"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:281
#, no-wrap
msgid "*reload-display* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:283
msgid ""
"'(returns nothing)' - Sent when there is a request to reload the display"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:284
#, no-wrap
msgid "*line-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:287
#, no-wrap
msgid ""
"'(returns integer)' - Sent when LinuxCNC has read a new line.\n"
"LinuxCNC does not update this for every type of line."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:288
#, no-wrap
msgid "*tool-in-spindle-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:290
msgid "'(returns integer)' - Sent when the tool has changed."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:291
#, no-wrap
msgid "*tool-info-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:293
msgid "'(returns Python object)' - Sent when current tool info changes."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:294
#, no-wrap
msgid "*current-tool-offset* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:296
msgid "'(returns Python object)' - Sent when the current tool offsets change."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:297
#, no-wrap
msgid "*motion-mode-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:299
msgid "'(returns integer)' - Sent when motion's mode has changed"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:300
#, no-wrap
msgid "*spindle-control-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:303
#, no-wrap
msgid ""
"'(returns integer, bool, integer, bool)' - (spindle num, spindle on state, requested spindle direction & rate, at-speed state)\n"
"Sent when spindle direction or running status changes or at-speed changes."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:304
#, no-wrap
msgid "*current-feed-rate* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:306
msgid "'(returns float)' - Sent when the current feed rate changes."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:307
#, no-wrap
msgid "*current-x-rel-position* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:309
msgid "'(returns float)' - Sent every 100&thinsp;ms."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:310
#, no-wrap
msgid "*current-position* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:314
#, no-wrap
msgid ""
"'(returns pyobject, pyobject, pyobject, pyobject)' - Sent every 100&thinsp;ms.\n"
"Returns tuples of position, relative position, distance-to-go and the joint actual position. Before homing, on multi-joint axes, only joint position is valid."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:315
#, no-wrap
msgid "*current-z-rotation* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:317
msgid ""
"'(returns float)' - Sent as the current rotatated angle around the Z axis "
"changes"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:318
#, no-wrap
msgid "*requested-spindle-speed-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:320
msgid "'(returns float)' - Sent when the current requested RPM changes"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:321
#, no-wrap
msgid "*actual-spindle-speed-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:323
msgid ""
"'(returns float)' - Sent when the actual RPM changes based on the HAL pin "
"'spindle.0.speed-in'."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:324
#, no-wrap
msgid "*spindle-override-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:327
#, no-wrap
msgid ""
"'(returns float)' - Sent when the spindle override value changes\n"
"in percent"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:328
#, no-wrap
msgid "*feed-override-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:331
#, no-wrap
msgid ""
"'(returns float)' - Sent when the feed override value changes\n"
"in percent"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:332
#, no-wrap
msgid "*rapid-override-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:335
#, no-wrap
msgid ""
"'(returns float)' - Sent when the rapid override value changes\n"
"in percent (0-100)"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:336
#, no-wrap
msgid "*max-velocity-override-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:339
#, no-wrap
msgid ""
"'(returns float)' - Sent when the maximum velocity override value changes\n"
"in units per minute"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:340
#, no-wrap
msgid "*feed-hold-enabled-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:342
msgid "'(returns bool)' - Sent when feed hold status changes"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:343
#, no-wrap
msgid "*itime-mode* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:346
#, no-wrap
msgid ""
"'(returns bool)' - Sent when G93 status changes\n"
"(inverse time mode)"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:347
#, no-wrap
msgid "*fpm-mode* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:350
#, no-wrap
msgid ""
"'(returns bool)' - Sent when G94 status changes\n"
"(feed per minute mode)"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:351
#, no-wrap
msgid "*fpr-mode* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:354
#, no-wrap
msgid ""
"'(returns bool)' - Sent when G95 status changes\n"
"(feed per revolution mode)"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:355
#, no-wrap
msgid "*css-mode* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:358
#, no-wrap
msgid ""
"'(returns bool)' - Sent when G96 status changes\n"
"(constant surface feed mode)"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:359
#, no-wrap
msgid "*rpm-mode* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:362
#, no-wrap
msgid ""
"'(returns bool)' - Sent when G97 status changes\n"
"(constant RPM mode)"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:363
#, no-wrap
msgid "*radius-mode* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:366
#, no-wrap
msgid ""
"'(returns bool)' - Sent when G8 status changes\n"
"display X in radius mode"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:367
#, no-wrap
msgid "*diameter-mode* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:370
#, no-wrap
msgid ""
"'(returns bool)' - Sent when G7 status changes\n"
"display X in Diameter mode"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:371
#, no-wrap
msgid "*flood-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:373
msgid "'(returns bool)' - Sent when flood coolant state changes."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:374
#, no-wrap
msgid "*mist-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:376
msgid "'(returns bool )' - Sent when mist coolant state changes."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:377
#, no-wrap
msgid "*m-code-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:379
msgid "'(returns string)' - Sent when active M-codes change"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:380
#, no-wrap
msgid "*g-code-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:382
msgid "'(returns string)' - Sent when active G-code change"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:383
#, no-wrap
msgid "*metric-mode-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:385
msgid "'(returns bool)' - Sent when G21 status changes"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:386
#, no-wrap
msgid "*user-system-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:388
msgid ""
"'(returns string)' - Sent when the reference coordinate system (G5x) changes"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:389
#, no-wrap
msgid "*mdi-line-selected* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:392
#, no-wrap
msgid ""
"'(returns string, string)' - intended to be sent when an MDI line is selected by user.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:393
#, no-wrap
msgid "*gcode-line-selected* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:396
#, no-wrap
msgid ""
"'(returns integer)' - intended to be sent when a G-code line is selected by user.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:397
#, no-wrap
msgid "*graphics-line-selected* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:400
#, no-wrap
msgid ""
"'(returns integer)' - intended to be sent when graphics line is selected by user.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:401
#, no-wrap
msgid "*graphics-loading-progress* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:404
#, no-wrap
msgid ""
"'(returns integer)' - intended to return percentage done of loading a program or running a program.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:405
#, no-wrap
msgid "*graphics-gcode-error* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:408
#, no-wrap
msgid ""
"'(returns string)' - intended to be sent when a G-code error is found when loading.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:409
#, no-wrap
msgid "*graphics-gcode-properties* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:412
#, no-wrap
msgid ""
"'(returns string)' - intended to be sent when G-code is loaded.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:413
#, no-wrap
msgid "*graphics-view-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:416
#, no-wrap
msgid ""
"'(returns string, Python dict or None)' - intended to be sent when graphics view is changed.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:417
#, no-wrap
msgid "*mdi-history-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:420
#, no-wrap
msgid ""
"'(returns None)' - intended to be sent when an MDI history needs to be reloaded.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:421
#, no-wrap
msgid "*machine-log-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:424
#, no-wrap
msgid ""
"'(returns None)' - intended to be sent when machine log has changed.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:425
#, no-wrap
msgid "*update-machine-log* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:428
#, no-wrap
msgid ""
"'(returns string, string)' - intended to be sent when updating the machine.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:429
#, no-wrap
msgid "*move-text-lineup* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:432
#, no-wrap
msgid ""
"'(returns None)' - intended to be sent when moving the cursor one line up in G-code display.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:433
#, no-wrap
msgid "*move-text-linedown* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:436
#, no-wrap
msgid ""
"'(returns None)' - intended to be sent when moving the cursor one line down in G-code display.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:437
#, no-wrap
msgid "*dialog-request* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:441
#, no-wrap
msgid ""
"'(returns Python dict)' - intended to be sent when requesting a gui dialog.\n"
"It uses a Python dict for communication. The dict must include the following keyname pair: +"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:445
#, no-wrap
msgid ""
"NAME: 'requested dialog name'\n"
"The dict usually has several keyname pairs - it depends on the dialog.\n"
"dialogs return information using a general message\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:446
#, no-wrap
msgid "*focus-overlay-changed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:449
#, no-wrap
msgid ""
"'(returns bool, string, Python object)' - intended to be sent when requesting an overlay to be put over the display.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:450
#, no-wrap
msgid "*play-sound* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:453
#, no-wrap
msgid ""
"'(returns string)' - intended to be sent when requesting a specific sound file to be played.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:454
#, no-wrap
msgid "*virtual-keyboard* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:457
#, no-wrap
msgid ""
"'(returns string)' - intended to be sent when requesting a on screen keyboard.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:458
#, no-wrap
msgid "*dro-reference-change-request* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:462
#, no-wrap
msgid ""
"'(returns integer)' - intended to be sent when requesting a DRO widget to change its reference.\n"
"0 = machine, 1 = relative, 3 = distance-to-go\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:463
#, no-wrap
msgid "*show-preferences* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:466
#, no-wrap
msgid ""
"'(returns None)' - intended to be sent when requesting the screen preferences to be displayed.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:467 src/gui/gstat.adoc:600
#, no-wrap
msgid "*shutdown* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:470
#, no-wrap
msgid ""
"'(returns None)' - intended to be sent when requesting LinuxCNC to shutdown.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:471
#, no-wrap
msgid "*error* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:476
#, no-wrap
msgid ""
"'(returns integer, string)' - intended to be sent when an error has been reported .\n"
"integer represents the kind of error. ERROR, TEXT or DISPLAY\n"
"string is the actual error message.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:477
#, no-wrap
msgid "*general* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:482
#, no-wrap
msgid ""
"'(returns Python dict)' - intended to be sent when message must be sent that is not covered by a more specific message.\n"
"General message should be used a sparsely as reasonable because all object connected to it will have to parse it.\n"
"It uses a Python dict for communication.\n"
"The dict should include and be checked for a unique id  keyname pair: +"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:484
#, no-wrap
msgid ""
"ID: 'UNIQUE_ID_CODE'\n"
"The dict usually has more keyname pair - it depends on implementation."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:485
#, no-wrap
msgid "*forced-update* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:488
#, no-wrap
msgid ""
"'(returns None)' - intended to be sent when one wishes to initialize or arbitrarily update an object.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:489
#, no-wrap
msgid "*progress* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:492
#, no-wrap
msgid ""
"'(returns integer, Python object)' - intended to be sent to indicate the progress of a filter program.\n"
"This depends on the widget/libraries used."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:493
#, no-wrap
msgid "*following-error* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:495
msgid ""
"'(returns Python list)' - returns a list of all joints current following "
"error."
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:499
msgid "These are convenience functions that are commonly used in programming."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:500
#, no-wrap
msgid "*set_jograte* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:506
#, no-wrap
msgid ""
"'(float)' - LinuxCNC has no internal concept of jog rate -each GUI has its own. This is not always convenient.\n"
"This function allows one to set a jog rate for all objects connected to the signal 'jograte-changed'.\n"
"It defaults to 15.\n"
"GSTAT.set_jog_rate(10) would set the jog rate to 10 machine-units-per-minute and emit the jograte-changed signal."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:507
#, no-wrap
msgid "*get_jograte()* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:509
msgid ""
"'(Nothing)' - x = GSTAT.get_jograte() would return GSTAT's current internal "
"jograte (float)."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:510
#, no-wrap
msgid "*set_jograte_angular* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:511
msgid "'(float)' -"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:512
#, no-wrap
msgid "*get_jograte_angular* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:513 src/gui/gstat.adoc:517 src/gui/gstat.adoc:521
#: src/gui/gstat.adoc:583 src/gui/gstat.adoc:585 src/gui/gstat.adoc:587
#: src/gui/gstat.adoc:589 src/gui/gstat.adoc:591 src/gui/gstat.adoc:593
#: src/gui/gstat.adoc:595 src/gui/gstat.adoc:597 src/gui/gstat.adoc:599
#: src/gui/gstat.adoc:601
msgid "'(None)' -"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:514
#, no-wrap
msgid "*set_jog_increment_angular* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:515 src/gui/gstat.adoc:519
msgid "'(float, string)' -"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:516
#, no-wrap
msgid "*get_jog_increment_angular* "
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:518
#, no-wrap
msgid "*set_jog_increments* "
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:520
#, no-wrap
msgid "*get_jog_increments* "
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:522
#, no-wrap
msgid "*is_all_homed* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:524
msgid "'(nothing)' - This will return the current state of all_homed (BOOL)."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:525
#, no-wrap
msgid "*machine_is_on* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:527
msgid "'(nothing)' - This will return the current state of machine (BOOL)."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:528
#, no-wrap
msgid "*estop_is_clear* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:530
msgid "'(nothing)' - This will return the state of Estop (BOOL)"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:531
#, no-wrap
msgid "*set_tool_touchoff* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:533
msgid "'(tool,axis,value)' - This command will"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:534 src/gui/gstat.adoc:544
msgid "record the current mode,"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:535 src/gui/gstat.adoc:545
msgid "switch to MDI mode,"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:536
msgid "invoke the MDI command: G10 L10 P[TOOL] [AXIS] [VALUE],"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:537 src/gui/gstat.adoc:539 src/gui/gstat.adoc:547
msgid "wait for it to complete,"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:538
msgid "invoke G43,"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:540
msgid "switch back to the original mode."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:541
#, no-wrap
msgid "*set_axis_origin* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:543
msgid "'(axis,value)' - This command will"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:546
msgid "invoke the MDI command: G10 L20 P0 [AXIS] [VALUE],"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:548
msgid "switch back to the original mode,"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:549
msgid "emit a 'reload-display' signal."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:550
#, no-wrap
msgid "*do_jog* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:553
#, no-wrap
msgid ""
"'(axis_number,direction, distance)' - This will jog an axis continuously or at a set distance.\n"
"You must be in the proper mode to jog."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:554
#, no-wrap
msgid "*check_for_modes* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:559
#, no-wrap
msgid ""
"'(mode)' - This function checks for required LinuxCNC mode.\n"
"It returns a Python tuple (state, mode)\n"
"mode will be set the mode the system is in\n"
"state will set to:"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:560
msgid "false if mode is 0"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:561
msgid "false if machine is busy"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:562
msgid "true if LinuxCNC is in the requested mode"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:563
msgid "None if possible to change, but not in requested mode"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:564
#, no-wrap
msgid "*get_current_mode* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:566
msgid "'(nothing)' - returns integer: the current LinuxCNC mode. +"
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:567
#, no-wrap
msgid "*set_selected_joint* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:571
#, no-wrap
msgid ""
"'(integer)' - records the selected joint number internally.\n"
"requests the joint to be selected by emitting the\n"
"'joint-selection-changed' message."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:572
#, no-wrap
msgid "*get_selected_joint* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:574
msgid ""
"'(None)' - returns integer representing the internal selected joint number."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:575
#, no-wrap
msgid "*set_selected_axis* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:578
#, no-wrap
msgid ""
"'(string)' - records the selected axis letter internally.\n"
"Requests the axis to be selected by emitting the 'axis-selection-changed' message."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:579
#, no-wrap
msgid "*get_selected_axis* "
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:581
msgid ""
"'(None)' - returns string representing the internal selected axis letter."
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:582
#, no-wrap
msgid "*is_man_mode* "
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:584
#, no-wrap
msgid "*is_mdi_mode* "
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:586
#, no-wrap
msgid "*is_auto_mode* "
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:588
#, no-wrap
msgid "*is_on_and_idle* "
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:590
#, no-wrap
msgid "*is_auto_running* "
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:592
#, no-wrap
msgid "*is_auto_paused* "
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:594
#, no-wrap
msgid "*is_file_loaded* "
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:596
#, no-wrap
msgid "*is_metric_mode* "
msgstr ""

#. type: Labeled list
#: src/gui/gstat.adoc:598
#, no-wrap
msgid "*is_spindle_on* "
msgstr ""

#. type: Title ==
#: src/gui/gstat.adoc:602 src/plasma/qtplasmac.adoc:4285
#, no-wrap
msgid "Known Issues"
msgstr ""

#. type: Plain text
#: src/gui/gstat.adoc:606
msgid ""
"Some status points are reported wrongly during a running program because the "
"interpreter runs ahead of the current position of a running program.  This "
"will hopefully be resolved with the merge of state-tags branch."
msgstr ""

#. type: TH
#: src/gui/halui.adoc:6 man/man1/halui.1:26
#, no-wrap
msgid "HAL User Interface"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:19
msgid ""
"Halui is a HAL based user interface for LinuxCNC, it connects HAL pins to "
"NML commands. Most of the functionality (buttons, indicators etc.) that is "
"provided by a traditional GUI (AXIS, GMOCCAPY, QtDragon, etc.), is provided "
"by HAL pins in Halui."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:22
msgid ""
"The easiest way to add halui is to add the following to the [HAL] section of "
"the INI file:"
msgstr ""

#. type: delimited block -
#: src/gui/halui.adoc:27
#, no-wrap
msgid ""
"[HAL]\n"
"HALUI = halui\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:31
#, no-wrap
msgid ""
"An alternate way to invoke it (specially if you generate the configuration with StepConf) is to include the following in your `custom.hal` file.\n"
"Make sure you use the correct path to your INI file."
msgstr ""

#. type: delimited block -
#: src/gui/halui.adoc:35
#, no-wrap
msgid "loadusr halui -ini /path/to/inifile.ini\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:43
msgid ""
"Sometimes the user wants to add more complicated tasks to be performed by "
"the activation of a HAL pin.  This is possible by adding MDI commands to the "
"INI file in the [HALUI] section.  Example:"
msgstr ""

#. type: delimited block -
#: src/gui/halui.adoc:52
#, no-wrap
msgid ""
"[HALUI]\n"
"MDI_COMMAND = G0 X0\n"
"MDI_COMMAND = G0 G53 Z0\n"
"MDI_COMMAND = G28\n"
"MDI_COMMAND = o<mysub>call\n"
"...\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:59
msgid ""
"When halui starts it will read the `MDI_COMMAND` fields in the INI and "
"export pins from 00 to the number of `MDI_COMMAND` 's found in the INI, up "
"to a maximum of 64 commands. These pins can be connected like any HAL pins. "
"A common method is to use buttons provided by virtual control panels like "
"shown in the example <<code:Example-HAL-file-connections, Example for "
"MDI_COMMAND connections>>."
msgstr ""

#. type: Block title
#: src/gui/halui.adoc:62
#, no-wrap
msgid "Example for MDI_COMMAND connections"
msgstr ""

#. type: Block title
#: src/gui/halui.adoc:64
#, no-wrap
msgid "HAL file"
msgstr ""

#. type: delimited block -
#: src/gui/halui.adoc:70
#, no-wrap
msgid ""
"net quill-up      halui.mdi-command-00 <= pyvcp.quillup\n"
"net reference-pos halui.mdi-command-01 <= pyvcp.referencepos\n"
"net call-mysub    halui.mdi-command-02 <= pyvcp.callmysub\n"
msgstr ""

#. type: Block title
#: src/gui/halui.adoc:71
#, no-wrap
msgid "Nets connecting the `halui.mdi-command-NN` pins provided by halui."
msgstr ""

#. type: delimited block -
#: src/gui/halui.adoc:81
#, no-wrap
msgid ""
"$ halcmd show pin halui.mdi\n"
"Component Pins:\n"
"Owner  Type  Dir Value  Name\n"
"   10  bit   IN  FALSE  halui.mdi-command-00 <== quill-up\n"
"   10  bit   IN  FALSE  halui.mdi-command-01 <== reference-pos\n"
"   10  bit   IN  FALSE  halui.mdi-command-02 <== call-mysub\n"
"    ...\n"
msgstr ""

#. type: delimited block =
#: src/gui/halui.adoc:88
msgid ""
"When a halui MDI pin is set (pulsed) true, halui will send the MDI command "
"defined in the INI.  This will not always succeed depending on the current "
"operating mode (e.g., while in AUTO halui can't successfully send MDI "
"commands)."
msgstr ""

#. type: Title ==
#: src/gui/halui.adoc:89
#, no-wrap
msgid "Example Configuration"
msgstr ""

#. type: delimited block =
#: src/gui/halui.adoc:93
msgid ""
"An example sim config (`configs/sim/axis/halui_pyvcp/halui.ini`)  is "
"included in the distribution."
msgstr ""

#. type: Title ==
#: src/gui/halui.adoc:94
#, no-wrap
msgid "Halui Pin Reference"
msgstr ""

#. type: delimited block =
#: src/gui/halui.adoc:97
msgid "All halui pins are also documented in the halui man page:"
msgstr ""

#. type: delimited block -
#: src/gui/halui.adoc:101
#, no-wrap
msgid "$ man halui\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:103 src/gui/tklinuxcnc.adoc:86
#, no-wrap
msgid "Abort"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:106
msgid ""
"'halui.abort' (bit, in) - pin to send an abort message (clears out most "
"errors)"
msgstr ""

#. type: Title ===
#: src/gui/halui.adoc:107
#, no-wrap
msgid "E-Stop"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:110
msgid "'halui.estop.activate' (bit, in) - pin for requesting E-Stop"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:111
msgid "'halui.estop.is-activated' (bit, out) - indicates E-stop reset"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:112
msgid "'halui.estop.reset' (bit, in) - pin for requesting E-Stop reset"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:116
msgid ""
"'halui.feed-override.count-enable' (bit, in) - must be true for 'counts' or "
"'direct-value' to work."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:117
msgid ""
"'halui.feed-override.counts' (s32, in) - counts * scale = FO percentage. Can "
"be used with an encoder or 'direct-value'."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:118
msgid ""
"'halui.feed-override.decrease' (bit, in) - pin for decreasing the FO (-"
"=scale)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:119
msgid ""
"'halui.feed-override.increase' (bit, in) - pin for increasing the FO "
"(+=scale)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:120
msgid ""
"'halui.feed-override.reset' (bit, in) - pin for resetting the FO (scale=1.0)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:121
msgid ""
"'halui.feed-override.direct-value' (bit, in) - false when using encoder to "
"change counts, true when setting counts directly."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:122
msgid ""
"'halui.feed-override.scale' (float, in) - pin for setting the scale for "
"increase and decrease of 'feed-override'."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:123
msgid "'halui.feed-override.value' (float, out) - current FO value"
msgstr ""

#. type: Title ===
#: src/gui/halui.adoc:124
#, no-wrap
msgid "Mist"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:127
msgid "'halui.mist.is-on' (bit, out) - indicates mist is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:128
msgid "'halui.mist.off' (bit, in) - pin for requesting mist off"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:129
msgid "'halui.mist.on' (bit, in) - pin for requesting mist on"
msgstr ""

#. type: Title ===
#: src/gui/halui.adoc:130
#, no-wrap
msgid "Flood"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:133
msgid "'halui.flood.is-on' (bit, out) - indicates flood is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:134
msgid "'halui.flood.off' (bit, in) - pin for requesting flood off"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:135
msgid "'halui.flood.on' (bit, in) - pin for requesting flood on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:140
msgid ""
"'halui.home-all' (bit, in) - pin for requesting all axis to home. This pin "
"will only be there if HOME_SEQUENCE is set in the INI file."
msgstr ""

#. type: Title ===
#: src/gui/halui.adoc:141
#, no-wrap
msgid "Lube"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:144
msgid "'halui.lube.is-on' (bit, out) - indicates lube is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:145
msgid "'halui.lube.off' (bit, in) - pin for requesting lube off"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:146
msgid "'halui.lube.on' (bit, in) - pin for requesting lube on"
msgstr ""

#. type: Title ====
#: src/gui/halui.adoc:147 src/man/man1/xhc-whb04b-6.1.adoc:154
#, no-wrap
msgid "Machine"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:151
msgid ""
"'halui.machine.units-per-mm' (float out) - pin for machine units-per-mm "
"(inch:1/25.4, mm:1) according to inifile setting: [TRAJ]LINEAR_UNITS"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:152
msgid "'halui.machine.is-on' (bit, out) - indicates machine on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:153
msgid "'halui.machine.off' (bit, in) - pin for requesting machine off"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:154
msgid "'halui.machine.on' (bit, in) - pin for requesting machine on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:159
msgid ""
"The maximum linear velocity can be adjusted from 0 to the MAX_VELOCITY that "
"is set in the [TRAJ] section of the INI file."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:161
msgid ""
"'halui.max-velocity.count-enable' (bit, in) - must be true for 'counts' or "
"'direct-value' to work."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:162
msgid ""
"'halui.max-velocity.counts' (s32, in) - counts * scale = MV percentage. Can "
"be used with an encoder or 'direct-value'."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:163
msgid ""
"'halui.max-velocity.direct-value' (bit, in) - false when using encoder to "
"change counts, true when setting counts directly."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:164
msgid ""
"'halui.max-velocity.decrease' (bit, in) - pin for decreasing max velocity"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:165
msgid ""
"'halui.max-velocity.increase' (bit, in) - pin for increasing max velocity"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:166
msgid ""
"'halui.max-velocity.scale' (float, in) - the amount applied to the current "
"maximum velocity with each transition from off to on of the increase or "
"decrease pin in machine units per second."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:167
msgid ""
"'halui.max-velocity.value' (float, out) - is the maximum linear velocity in "
"machine units per second."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:175
#, no-wrap
msgid ""
"'halui.mdi-command-_<nn>_' (bit, in) - halui will try to send the MDI command defined in the INI. _<nn>_ is a two  digit number  starting  at 00.\n"
"If the command succeeds then it will place LinuxCNC in the MDI mode and then back to Manual mode.\n"
"If no [HALUI]MDI_COMMAND variables are set in the  ini  file, no halui.mdi-command-<nn> pins will be exported by halui."
msgstr ""

#. type: Title ===
#: src/gui/halui.adoc:176
#, no-wrap
msgid "Joint"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:180
#, no-wrap
msgid ""
"_N_ = joint number (0 ... num_joints-1)\n"
"Example:"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:182
msgid "'halui.joint._N_.select' (bit in) - pin for selecting joint _N_"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:183
msgid ""
"'halui.joint._N_.is-selected' (bit out) - status pin that joint _N_ is "
"selected"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:184
msgid ""
"'halui.joint._N_.has-fault' (bit out) - status pin telling that joint _N_ "
"has a fault"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:185
msgid "'halui.joint._N_.home' (bit in) - pin for homing joint _N_"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:186
msgid ""
"'halui.joint._N_.is-homed' (bit out) - status pin telling that joint _N_ is "
"homed"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:187
msgid ""
"'halui.joint._N_.on-hard-max-limit' (bit out) - status pin telling that "
"joint _N_ is on the positive hardware limit"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:188
msgid ""
"'halui.joint._N_.on-hard-min-limit' (bit out) - status pin telling that "
"joint _N_ is on the negative hardware limit"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:189
msgid ""
"'halui.joint._N_.on-soft-max-limit' (bit out) - status pin telling that "
"joint _N_ is on the positive software limit"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:190
msgid ""
"'halui.joint._N_.on-soft-min-limit' (bit out) - status pin telling that "
"joint _N_ is on the negative software limit"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:191
msgid ""
"'halui.joint._N_.override-limits' (bit out) - status pin telling that joint "
"_N_'s limits are temporarily overridden"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:192
msgid "'halui.joint._N_.unhome' (bit in) - pin for unhoming joint _N_"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:193
msgid ""
"'halui.joint.selected' (u32 out) - selected joint number (0 ... num_joints-1)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:194
msgid ""
"'halui.joint.selected.has-fault' (bit out) - status pin selected joint is "
"faulted"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:195
msgid ""
"'halui.joint.selected.home' (bit in) - pin for homing the selected joint"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:196
msgid ""
"'halui.joint.selected.is-homed' (bit out) - status pin telling that the "
"selected joint is homed"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:197
msgid ""
"'halui.joint.selected.on-hard-max-limit' (bit out) - status pin telling that "
"the selected joint is on the positive hardware limit"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:198
msgid ""
"'halui.joint.selected.on-hard-min-limit' (bit out) - status pin telling that "
"the selected joint is on the negative hardware limit"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:199
msgid ""
"'halui.joint.selected.on-soft-max-limit' (bit out) - status pin telling that "
"the selected joint is on the positive software limit"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:200
msgid ""
"'halui.joint.selected.on-soft-min-limit' (bit out) - status pin telling that "
"the selected joint is on the negative software limit"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:201
msgid ""
"'halui.joint.selected.override-limits' (bit out) - status pin telling that "
"the selected joint's limits are temporarily overridden"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:202
msgid ""
"'halui.joint.selected.unhome' (bit in) - pin for unhoming the selected joint"
msgstr ""

#. type: Title ===
#: src/gui/halui.adoc:203
#, no-wrap
msgid "Joint Jogging"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:206
msgid "_N_ = joint number (0 ... num_joints-1)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:208
msgid ""
"'halui.joint.jog-deadband' (float in) - pin for setting jog analog deadband "
"(jog analog inputs smaller/slower than this - in absolute value - are "
"ignored)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:209
msgid ""
"'halui.joint.jog-speed' (float in) - pin for setting jog speed for plus/"
"minus jogging."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:210
msgid ""
"'halui.joint._N_.analog' (float in) - pin for jogging the joint _N_ using a "
"float value (e.g.  joy-stick).  The value, typically set between 0.0 and "
"±1.0, is used as a jog-speed multiplier."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:211
msgid ""
"'halui.joint._N_.increment' (float in) - pin for setting the jog increment "
"for joint _N_ when using increment-plus/minus"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:212
msgid ""
"'halui.joint._N_.increment-minus' (bit in) - a rising edge will will make "
"joint _N_ jog in the negative direction by the increment amount"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:213
msgid ""
"'halui.joint._N_.increment-plus' (bit in) - a rising edge will will make "
"joint _N_ jog in the positive direction by the increment amount"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:214
msgid ""
"'halui.joint._N_.minus' (bit in) - pin for jogging joint _N_ in negative "
"direction at the halui.joint.jog-speed velocity"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:215
msgid ""
"'halui.joint._N_.plus' (bit in) - pin for jogging joint _N_ in positive "
"direction at the halui.joint.jog-speed velocity"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:216
msgid ""
"'halui.joint.selected.increment' (float in) - pin for setting the jog "
"increment for the selected joint when using increment-plus/minus"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:217
msgid ""
"'halui.joint.selected.increment-minus' (bit in) - a rising edge will will "
"make the selected joint jog in the negative direction by the increment amount"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:218
msgid ""
"'halui.joint.selected.increment-plus' (bit in) - a rising edge will will "
"make the selected joint jog in the positive direction by the increment amount"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:219
msgid ""
"'halui.joint.selected.minus' (bit in) - pin for jogging the selected joint "
"in negative direction at the halui.joint.jog-speed velocity"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:220
msgid ""
"'halui.joint.selected.plus' (bit in) - pin for jogging the selected joint in "
"positive direction at the halui.joint.jog-speed velocity"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:224 src/gui/halui.adoc:234
msgid "_L_ = axis letter (xyzabcuvw)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:226
msgid "'halui.axis._L_.select' (bit) - pin for selecting axis by letter"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:227
msgid ""
"'halui.axis._L_.is-selected' (bit out) - status pin that axis _L_ is selected"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:228
msgid ""
"'halui.axis._L_.pos-commanded' (float out) - Commanded axis position in "
"machine coordinates"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:229
msgid ""
"'halui.axis._L_.pos-feedback' float out) - Feedback axis position in machine "
"coordinates"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:230
msgid ""
"'halui.axis._L_.pos-relative' (float out) - Feedback axis position in "
"relative coordinates"
msgstr ""

#. type: Title ===
#: src/gui/halui.adoc:231
#, no-wrap
msgid "Axis Jogging"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:236
#, no-wrap
msgid "'halui.axis.jog-deadband' (float in) - pin  for  setting  jog  analog  deadband  (jog   analog   inputs smaller/slower than this (in absolute value) are ignored)\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:237
#, no-wrap
msgid "'halui.axis.jog-speed' (float in) - pin for setting jog speed for plus/minus jogging.\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:238
#, no-wrap
msgid "'halui.axis._L_.analog' (float in) - pin for jogging the axis _L_ using an float value (e.g. joystick). The value, typically set between 0.0 and  ±1.0,  is  used as a jog-speed multiplier.\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:239
#, no-wrap
msgid "'halui.axis._L_.increment' (float in) - pin  for  setting the jog increment for axis _L_ when using increment-plus/minus\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:240
#, no-wrap
msgid "'halui.axis._L_.increment-minus' (bit in) - a rising edge will will make axis _L_ jog in the  negative  direction by the increment amount\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:241
#, no-wrap
msgid "'halui.axis._L_.increment-plus' (bit in) - a  rising  edge will will make axis _L_ jog in the positive direction by the increment amount\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:242
#, no-wrap
msgid "'halui.axis._L_.minus' (bit in) - pin  for  jogging  axis  _L_  in   negative   direction   at   the halui.axis.jog-speed velocity\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:243
#, no-wrap
msgid "'halui.axis._L_.plus' (bit in) - pin   for   jogging   axis   _L_  in  positive  direction  at  the halui.axis.jog-speed velocity\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:244
#, no-wrap
msgid "'halui.axis.selected' (u32 out) - selected axis (by index: 0:x 1:y 2:z 3:a 4:b 5:cr 6:u 7:v 8:w)\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:245
#, no-wrap
msgid "'halui.axis.selected.increment' (float in) - pin for setting the jog increment for  the  selected  axis  when using increment-plus/minus\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:246
#, no-wrap
msgid "'halui.axis.selected.increment-minus' (bit in) - a  rising edge will will make the selected axis jog in the negative direction by the increment amount\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:247
#, no-wrap
msgid "'halui.axis.selected.increment-plus' (bit in) - a rising edge will will make the selected axis jog in the  positive direction by the increment amount\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:248
#, no-wrap
msgid "'halui.axis.selected.minus' (bit in) - pin  for  jogging the selected axis in negative direction at the halui.axis.jog-speed velocity\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:249
#, no-wrap
msgid "'halui.axis.selected.plus' (pin in) - for jogging the selected axis bit in in positive  direction at the halui.axis.jog-speed velocity\n"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:253
msgid "'halui.mode.auto' (bit, in) - pin for requesting auto mode"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:254
msgid "'halui.mode.is-auto' (bit, out) - indicates auto mode is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:255
msgid ""
"'halui.mode.is-joint' (bit, out) - indicates joint by joint jog mode is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:256
msgid "'halui.mode.is-manual' (bit, out) - indicates manual mode is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:257
msgid "'halui.mode.is-mdi' (bit, out) - indicates MDI mode is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:258
msgid ""
"'halui.mode.is-teleop' (bit, out) - indicates coordinated jog mode is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:259
msgid ""
"'halui.mode.joint' (bit, in) - pin for requesting joint by joint jog mode"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:260
msgid "'halui.mode.manual' (bit, in) - pin for requesting manual mode"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:261
msgid "'halui.mode.mdi' (bit, in) - pin for requesting MDI mode"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:262
msgid "'halui.mode.teleop' (bit, in) - pin for requesting coordinated jog mode"
msgstr ""

#. type: Title ====
#: src/gui/halui.adoc:263 src/man/man1/xhc-whb04b-6.1.adoc:233
#, no-wrap
msgid "Program"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:266
msgid ""
"'halui.program.block-delete.is-on' (bit, out) - status pin telling that "
"block delete is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:267
msgid ""
"'halui.program.block-delete.off' (bit, in) - pin for requesting that block "
"delete is off"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:268
msgid ""
"'halui.program.block-delete.on' (bit, in) - pin for requesting that block "
"delete is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:269
msgid ""
"'halui.program.is-idle' (bit, out) - status pin telling that no program is "
"running"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:270
msgid ""
"'halui.program.is-paused' (bit, out) - status pin telling that a program is "
"paused"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:271
msgid ""
"'halui.program.is-running' (bit, out) - status pin telling that a program is "
"running"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:272
msgid ""
"'halui.program.optional-stop.is-on' (bit, out) - status pin telling that the "
"optional stop is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:273
msgid ""
"'halui.program.optional-stop.off' (bit, in) - pin requesting that the "
"optional stop is off"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:274
msgid ""
"'halui.program.optional-stop.on' (bit, in) - pin requesting that the "
"optional stop is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:275
msgid "'halui.program.pause' (bit, in) - pin for pausing a program"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:276
msgid "'halui.program.resume' (bit, in) - pin for resuming a paused program"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:277
msgid "'halui.program.run' (bit, in) - pin for running a program"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:278
msgid "'halui.program.step' (bit, in) - pin for stepping in a program"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:279
msgid "'halui.program.stop' (bit, in) - pin for stopping a program"
msgstr ""

#. type: Title ===
#: src/gui/halui.adoc:280
#, no-wrap
msgid "Rapid Override"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:283
msgid ""
"'halui.rapid-override.count-enable' (bit in (default: TRUE)) - When TRUE, "
"modify Rapid Override when counts changes."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:284
msgid ""
"'halui.rapid-override.counts' (s32 in) - counts X scale = Rapid Override "
"percentage. Can be used with an encoder or 'direct-value'."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:285
msgid ""
"'halui.rapid-override.decrease' (bit in) - pin for decreasing the Rapid "
"Override (-=scale)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:286
msgid ""
"'halui.rapid-override.direct-value' (bit in) - pin to enable direct value "
"Rapid Override input"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:287
msgid ""
"'halui.rapid-override.increase' (bit in) - pin for increasing the Rapid "
"Override (+=scale)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:288
msgid ""
"'halui.rapid-override.scale' (float in) - pin for setting the scale on "
"changing the Rapid Override"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:289
msgid "'halui.rapid-override.value' (float out) - current Rapid Override value"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:290
msgid ""
"'halui.rapid-override.reset' (bit, in) - pin for resetting the Rapid "
"Override value (scale=1.0)"
msgstr ""

#. type: Title ===
#: src/gui/halui.adoc:291
#, no-wrap
msgid "Spindle Override"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:294
msgid ""
"'halui.spindle._N_.override.count-enable' (bit, in) - must be true for "
"'counts' or 'direct-value' to work."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:295
msgid ""
"'halui.spindle._N_.override.counts' (s32, in) - counts * scale = SO "
"percentage.  Can be used with an encoder or 'direct-value'."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:296
msgid ""
"'halui.spindle._N_.override.decrease' (bit, in) - pin for decreasing the SO "
"(-=scale)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:297
msgid ""
"'halui.spindle._N_.override.direct-value' (bit, in) - false when using "
"encoder to change counts, true when setting counts directly."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:298
msgid ""
"'halui.spindle._N_.override.increase' (bit, in) - pin for increasing the SO "
"(+=scale)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:299
msgid ""
"'halui.spindle._N_.override.scale' (float, in) - pin for setting the scale "
"on changing the SO"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:300
msgid "'halui.spindle._N_.override.value' (float, out) - current SO value"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:301
msgid ""
"'halui.spindle._N_.override.reset' (bit, in) - pin for resetting the SO "
"value (scale=1.0)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:305
msgid "'halui.spindle._N_.brake-is-on' (bit, out) - indicates brake is on"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:306
msgid ""
"'halui.spindle._N_.brake-off' (bit, in) - pin for deactivating spindle/brake"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:307
msgid ""
"'halui.spindle._N_.brake-on' (bit, in) - pin for activating spindle-brake"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:308
msgid "'halui.spindle._N_.decrease' (bit, in) - decreases spindle speed"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:309
msgid ""
"'halui.spindle._N_.forward' (bit, in) - starts the spindle with CW motion"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:310
msgid "'halui.spindle._N_.increase' (bit, in)- increases spindle speed"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:311
msgid ""
"'halui.spindle._N_.is-on' (bit, out) - indicates spindle is on (either "
"direction)"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:312
msgid ""
"'halui.spindle._N_.reverse' (bit, in)- starts the spindle with a CCW motion"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:313
msgid ""
"'halui.spindle._N_.runs-backward' (bit, out) - indicates spindle is on, and "
"in reverse"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:314
msgid ""
"'halui.spindle._N_.runs-forward' (bit, out) - indicates spindle is on, and "
"in forward"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:315
msgid "'halui.spindle._N_.start' (bit, in) - starts the spindle"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:316
msgid "'halui.spindle._N_.stop' (bit, in) - stops the spindle"
msgstr ""

#. type: Title ===
#: src/gui/halui.adoc:317
#, no-wrap
msgid "Tool"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:320
msgid ""
"'halui.tool.length-offset.a' (float out) - current applied tool length "
"offset for the A axis"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:321
msgid ""
"'halui.tool.length-offset.b' (float out) - current applied tool length "
"offset for the B axis"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:322
msgid ""
"'halui.tool.length-offset.c' (float out) - current applied tool length "
"offset for the C axis"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:323
msgid ""
"'halui.tool.length-offset.u' (float out) - current applied tool length "
"offset for the U axis"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:324
msgid ""
"'halui.tool.length-offset.v' (float out) - current applied tool length "
"offset for the V axis"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:325
msgid ""
"'halui.tool.length-offset.w' (float out) - current applied tool length "
"offset for the W axis"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:326
msgid ""
"'halui.tool.length-offset.x' (float out) - current applied tool length "
"offset for the X axis"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:327
msgid ""
"'halui.tool.length-offset.y' (float out) - current applied tool length "
"offset for the Y axis"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:328
msgid ""
"'halui.tool.length-offset.z' (float out) - current applied tool length "
"offset for the Z axis"
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:329
msgid ""
"'halui.tool.diameter' (float out) - Current tool diameter, or 0 if no tool "
"is loaded."
msgstr ""

#. type: Plain text
#: src/gui/halui.adoc:330
msgid "'halui.tool.number' (u32, out) - indicates current selected tool"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/image-to-gcode.adoc:5 src/gui/image-to-gcode.adoc:13
#, no-wrap
msgid "Image to G-Code"
msgstr ""

#. type: Target for macro image
#: src/gui/image-to-gcode.adoc:13
#, no-wrap
msgid "images/image-to-gcode.png"
msgstr ""

#. type: Title ==
#: src/gui/image-to-gcode.adoc:15
#, no-wrap
msgid "What is a depth map?"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:19
msgid ""
"A depth map is a greyscale image where the brightness of each pixel "
"corresponds to the depth (or height) of the object at each point."
msgstr ""

#. type: Title ==
#: src/gui/image-to-gcode.adoc:20
#, no-wrap
msgid "Integrating image-to-gcode with the AXIS user interface"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:25
msgid ""
"Add the following lines to the '[FILTER]' section of your INI file to make "
"AXIS automatically invoke image-to-gcode when you open a PNG, GIF, or JPEG "
"image:"
msgstr ""

#. type: delimited block -
#: src/gui/image-to-gcode.adoc:32
#, no-wrap
msgid ""
"PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image\n"
"png = image-to-gcode\n"
"gif = image-to-gcode\n"
"jpg = image-to-gcode\n"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:36
msgid ""
"The standard 'sim/axis.ini' configuration file is already prepared this way."
msgstr ""

#. type: Title ==
#: src/gui/image-to-gcode.adoc:37
#, no-wrap
msgid "Using `image-to-gcode`"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:41
msgid ""
"Start image-to-gcode either by opening an image file in AXIS, or by invoking "
"image-to-gcode from the terminal, as follows:"
msgstr ""

#. type: delimited block -
#: src/gui/image-to-gcode.adoc:44
#, no-wrap
msgid "image-to-gcode torus.png > torus.ngc\n"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:52
msgid ""
"Verify all the settings in the right-hand column, then press OK to create "
"the G-code. Depending on the image size and options chosen, this may take "
"from a few seconds to a few minutes. If you are loading the image in AXIS, "
"the G-code will automatically be loaded and previewed once image-to-gcode "
"completes. In AXIS, hitting reload will show the image-to-gcode option "
"screen again, allowing you to tweak them."
msgstr ""

#. type: Title ==
#: src/gui/image-to-gcode.adoc:53
#, no-wrap
msgid "Option Reference"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:59
msgid ""
"Specifies whether to use G20 (inches) or G21 (mm) in the generated G-code "
"and as the units for each option labeled '(units)'."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:60
#, no-wrap
msgid "Invert Image"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:65
msgid ""
"If \"no\", the black pixel is the lowest point and the white pixel is the "
"highest point. If \"yes\", the black pixel is the highest point and the "
"white pixel is the lowest point."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:66
#, no-wrap
msgid "Normalize Image"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:70
msgid ""
"If 'yes', the darkest pixel is remapped to black, the lightest pixel is "
"remapped to white."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:71
#, no-wrap
msgid "Expand Image Border"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:77
msgid ""
"If 'None', the input image is used as-is, and details which are at the very "
"edges of the image may be cut off. If 'White' or 'Black', then a border of "
"pixels equal to the tool diameter is added on all sides, and details which "
"are at the very edges of the images will not be cut off."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:78
#, no-wrap
msgid "Tolerance (units)"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:84
msgid ""
"When a series of points are within 'tolerance' of being a straight line, "
"they are output as a straight line.  Increasing tolerance can lead to better "
"contouring performance in LinuxCNC, but can also remove or blur small "
"details in the image."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:85
#, no-wrap
msgid "Pixel Size (units)"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:91
msgid ""
"One pixel in the input image will be this many units--usually this number is "
"much smaller than 1.0. For instance, to mill a 2.5x2.5-inch object from a "
"400x400 image file, use a pixel size of .00625, because 2.5 / 400 = .00625."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:92
#, no-wrap
msgid "Plunge Feed Rate (units per minute)"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:95
msgid "The feed rate for the initial plunge movement."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:96
#, no-wrap
msgid "Feed Rate (units per minute)"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:99
msgid "The feed rate for other parts of the path."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:100
#, no-wrap
msgid "Spindle Speed (RPM)"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:103
msgid "The spindle speed S-code that should be put into the G-code file."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:104
#, no-wrap
msgid "Scan Pattern"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:107
msgid "Possible scan patterns are:"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:109
msgid "Rows"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:110
msgid "Columns"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:111
msgid "Rows, then Columns"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:112
msgid "Columns, then Rows"
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:113
#, no-wrap
msgid "Scan Direction"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:116
msgid "Possible scan directions are:"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:119
msgid ""
"Positive: Start milling at a low X or Y axis value, and move towards a high "
"X or Y axis value."
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:121
msgid ""
"Negative: Start milling at a high X or Y axis value, and move towards a low "
"X or Y axis value."
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:123
msgid ""
"Alternating: Start on the same end of the X or Y axis travel that the last "
"move ended on. This reduces the amount of traverse movements."
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:124
msgid "Up Milling: Start milling at low points, moving towards high points."
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:125
msgid "Down Milling: Start milling at high points, moving towards low points."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:126
#, no-wrap
msgid "Depth (units)"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:130
msgid ""
"The top of material is always at 'Z&hairsp;=&hairsp;0'. The deepest cut into "
"the material is _Z&hairsp;=&hairsp;-depth_."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:131
#, no-wrap
msgid "Step Over (pixels)"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:138
msgid ""
"The distance between adjacent rows or columns. To find the number of pixels "
"for a given units distance, compute 'distance/pixel size' and round to the "
"nearest whole number. For example, if 'pixel size=.006' and the desired step "
"over 'distance=.015', then use a Step Over of 2 or 3 pixels, because "
"'.015/.006=2.5'."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:139
#, no-wrap
msgid "Tool Diameter"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:142
msgid "The diameter of the cutting part of the tool."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:143
#, no-wrap
msgid "Safety Height"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:147
msgid ""
"The height to move to for traverse movements. image-to-gcode always assumes "
"the top of material is at 'Z=0'."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:148
#, no-wrap
msgid "Tool Type"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:151
msgid "The shape of the cutting part of the tool. Possible tool shapes are:"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:153
msgid "Ball End"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:154
msgid "Flat End"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:155
msgid "45 degree \"vee\""
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:156
msgid "60 degree \"vee\""
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:157
#, no-wrap
msgid "Lace bounding"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:162
msgid ""
"This controls whether areas that are relatively flat along a row or column "
"are skipped. This option only makes sense when both rows and columns are "
"being milled. Possible bounding options are:"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:164
msgid "None: Rows and columns are both fully milled."
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:166
msgid ""
"Secondary: When milling in the second direction, areas that do not strongly "
"slope in that direction are skipped."
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:170
msgid ""
"Full: When milling in the first direction, areas that strongly slope in the "
"second direction are skipped. When milling in the second direction, areas "
"that do not strongly slope in that direction are skipped."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:171
#, no-wrap
msgid "Contact angle"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:176
msgid ""
"When 'Lace bounding' is not 'None', slopes greater than 'Contact angle' are "
"considered to be 'strong' slopes, and slopes less than that angle are "
"considered to be weak slopes."
msgstr ""

#. type: Title ===
#: src/gui/image-to-gcode.adoc:177
#, no-wrap
msgid "Roughing offset and depth per pass"
msgstr ""

#. type: Plain text
#: src/gui/image-to-gcode.adoc:188
msgid ""
"Image-to-gcode can optionally perform roughing passes. The depth of "
"successive roughing passes is given by 'Roughing depth per pass'. For "
"instance, entering 0.2 will perform the first roughing pass with a depth of "
"0.2, the second roughing pass with a depth of 0.4, and so on until the full "
"Depth of the image is reached. No part of any roughing pass will cut closer "
"than Roughing Offset to the final part. The following figure shows a tall "
"vertical feature being milled.  In this image, Roughing depth per pass is "
"0.2 inches and roughing offset is 0.1 inches."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/image-to-gcode.adoc:189 src/gui/image-to-gcode.adoc:190
#, no-wrap
msgid "Roughing passes and final pass"
msgstr ""

#. type: Target for macro image
#: src/gui/image-to-gcode.adoc:190
#, no-wrap
msgid "images/i2g-roughing.png"
msgstr ""

#. type: Title =
#: src/gui/mdro.adoc:5
#, no-wrap
msgid "MDRO GUI(((mdro GUI)))"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:21
msgid ""
"MDRO is a simple graphical front-end for LinuxCNC providing a display of "
"data from Digital Read Out (DRO) scales. It provides functionality similar "
"to a normal machinist's DRO display, allowing the user to use the DRO scales "
"on the machine when operating in a manual-only (hand-cranked) mode. It is "
"most useful for manual machines such as DRO equipped Bridgeport style mills "
"that have been converted to CNC but still have the manual controls."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:23
msgid "MDRO is mouse and touch screen friendly."
msgstr ""

#. type: Title ==
#: src/gui/mdro.adoc:25 src/gui/mdro.adoc:26 src/gui/mdro.adoc:91
#, no-wrap
msgid "MDRO Window"
msgstr ""

#. type: Target for macro image
#: src/gui/mdro.adoc:26
#, no-wrap
msgid "images/mdro.png"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:37
msgid ""
"If your configuration is not currently set up to use MDRO, you can change it "
"by editing the INI file. In the `[DISPLAY]` section, change the `DISPLAY =` "
"line to read `DISPLAY = mdro`. MDRO defaults to XYZ for the axes but that "
"can be changed.  Set `[DISPLAY]` section `GEOMETRY = XYZ` for a 3 axis mill. "
"A lathe with with DRO scales on the X and Z axes might use `GEOMETRY = XZ`."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:40
msgid ""
"When MDRO starts, a window like the one in the figure <<fig:mdro-window>> "
"above opens."
msgstr ""

#. type: Title ===
#: src/gui/mdro.adoc:41
#, no-wrap
msgid "INI File Options"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:44
msgid "Other options that can be included on the `[DISPLAY]` section include:"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:46
msgid ""
"`MDRO_VAR_FILE = <file.var>` - preload G54 - G57 coordinate system data."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:48
msgid ""
"Preload a .var file. This is typically the .var file used by the operational "
"code."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:49
msgid "`POINT_SIZE = <n>` - Set text point size."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:52
msgid ""
"This option sets the size of the font used which sets the overall size of "
"the window. The default point size is 20, Typical sizes are 20 to 30."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:53
msgid "`MM = 1` Set this if the DRO scales provide data scaled in millimeters."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:58
msgid ""
"MDRO can be started by a `loadusr` command in a HAL file. Options equivalent "
"to those in the INI file can be set on the command line:"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:60
msgid "`-l <file.var>` - preload G54 - G57 coordinate system data."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:61
msgid "`-p <n>` - Set text point size."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:62
msgid "`-m` - Set this if the DRO scales provide data scaled in millimeters."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:63
msgid "`<axes>` - axes to display. See `GEOMETRY` above."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:68
msgid ""
"Using an example of \"XYZA\" for an AXES argument, these pins will be "
"created when MDRO starts:"
msgstr ""

#. type: delimited block -
#: src/gui/mdro.adoc:79
#, no-wrap
msgid ""
"mdro.axis.0\n"
"mdro.axis.1\n"
"mdro.axis.2\n"
"mdro.axis.3\n"
"mdro.index-enable.0\n"
"mdro.index-enable.1\n"
"mdro.index-enable.2\n"
"mdro.index-enable.3\n"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:85
msgid ""
"In this example, the first row of the display will be labeled `X` and will "
"show the data from the DRO scale connected to pin `mdro.axis.0`. The `mdro."
"index-enable.n` pins should be connected to the index pins of the DRO if the "
"DRO supports them."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:90
msgid ""
"The pins must be connected in the file specified in the `POSTGUI_HALFILE` "
"entry of the INI file when the program is started from an INI file. They can "
"be set directly after the loadusr command if the program is started in a HAL "
"file."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:94
msgid "The MDRO window contains the following elements:"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:96
msgid "A row for each axis. Each row includes:"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:97
msgid "the name of the axis,"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:98
msgid "the current value,"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:99
msgid "a \"z\" button that zeros the value,"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:100
msgid "a \"1/2\" button that halves the value,"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:102
msgid ""
"a entry field that can be used to set a user-defined value. This field can "
"be set from the keyboard or from the on-screen keypad."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:103
msgid "A \"I\" button that starts an index operation (see below),"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:105
msgid ""
"a keypad used to set values in the entry field via a mouse or touchscreen,"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:106
msgid "coordinate system selection buttons:"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:109
msgid ""
"The \"mcs\" button selects the machine coordinate system. These are the raw "
"values from the encoders connected to the `mdro.axis.n` pins."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:115
msgid ""
"The \"cs1\" - \"cs4\" buttons allow the user to select among one of four "
"user-defined coordinate systems. If the program is started with the "
"`MDRO_VAR_FILE =` option, the labels will be changed to \"g54\" - \"g57\" "
"and the values from the specified .var file will be preloaded. Note that any "
"changes to the values are not persistent: the .var file is never changed."
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:116
msgid "Inch/Millimeter selection buttons."
msgstr ""

#. type: Title ==
#: src/gui/mdro.adoc:117
#, no-wrap
msgid "Index operations"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:123
msgid ""
"`MDRO` supports DRO scales with index marks. Hit the \"I\" button on the "
"axis row then crank the axis to the index position. The machine coordinate "
"will be zeroed. This is easiest to see at startup or when the \"mcs\" "
"coordinate system has been selected."
msgstr ""

#. type: Title ==
#: src/gui/mdro.adoc:124
#, no-wrap
msgid "Simulation"
msgstr ""

#. type: Plain text
#: src/gui/mdro.adoc:129
msgid ""
"The easiest way to see how `MDRO` works is to try it in a simulation "
"environment.  Add this section to the end of your simulation HAL file, "
"usually \"hallib/core_sim.hal\":"
msgstr ""

#. type: delimited block -
#: src/gui/mdro.adoc:136
#, no-wrap
msgid ""
"loadusr -W mdro -l sim.var XYZ\n"
"net x-pos-fb  => mdro.axis.0\n"
"net y-pos-fb  => mdro.axis.1\n"
"net z-pos-fb  => mdro.axis.2\n"
msgstr ""

#. type: Title =
#: src/gui/ngcgui.adoc:5
#, no-wrap
msgid "NGCGUI(((NGCGUI)))"
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:13
#, no-wrap
msgid "NGCGUI embedded into AXIS"
msgstr ""

#. type: Target for macro image
#: src/gui/ngcgui.adoc:14
#, no-wrap
msgid "images/ngcgui.png"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:22
msgid ""
"'NGCGUI' is a Tcl application to work with subroutines. It allows you to "
"have a conversational interface with LinuxCNC. You can organize the "
"subroutines in the order you need them to run and concatenate the "
"subroutines into one file for a complete part program."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:24
msgid ""
"'NGCGUI' can run as a standalone application or can be embedded in multiple "
"tab pages in the AXIS GUI."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:25
msgid "'PyNGCGUI' is an alternate, python implementation of NGCGUI."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:29
msgid ""
"'PyNGCGUI' can run as a standalone application or can be embedded as a tab "
"page (with its own set of multiple subroutine tabs) in any GUI that supports "
"embedding of GladeVCP applications AXIS, Touchy, Gscreen and GMOCCAPY."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:31
msgid "Using NGCGUI or PyNGCGUI:"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:33
msgid "Tab pages are provided for each subroutine specified in the INI file."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:35
msgid ""
"New subroutines tab pages can be added on the fly using the <<ngcgui-ini,"
"custom tab>>."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:36
msgid ""
"Each subroutine tab page provides entry boxes for all subroutine parameters."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:38
msgid ""
"The entry boxes can have a default value and an label that are identified by "
"special comments in the subroutine file."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:40
msgid ""
"Subroutine invocations can be concatenated together to form a multiple step "
"program."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:41
msgid ""
"Any single-file G-code subroutine that conforms to NGCGUI conventions can be "
"used."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:44
msgid ""
"Any gcmc (G-code-meta-compiler) program that conforms to NGCGUI conventions "
"for tagging variables can be used. (The gcmc executable must be installed "
"separately, see: http://www.vagrearg.org/content/gcmc)"
msgstr ""

#. type: delimited block =
#: src/gui/ngcgui.adoc:50
msgid ""
"NGCGUI and PyNGCGUI implement the same functions and both process .ngc and ."
"gcmc files that conform to a few NGCGUI-specific conventions.  In this "
"document, the term 'NGCGUI' generally refers to either application."
msgstr ""

#. type: Title ==
#: src/gui/ngcgui.adoc:52
#, no-wrap
msgid "Demonstration Configurations"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:57
msgid ""
"A number of demonstration configurations are located in the sim directory of "
"the Sample Configurations offered by the LinuxCNC configuration picker. The "
"configuration picker is on the system's main menu: Applications > CNC > "
"LinuxCNC"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:65
msgid ""
"Examples are included for the AXIS, Touchy, gscreen, and GMOCCAPY.  These "
"examples demonstrate both 3-axis (XYZ) cartesian configurations (like mills) "
"and lathe (XZ) setups.  Some examples show the use of a pop up keyboard for "
"touch screen systems and other examples demonstrate the use of files created "
"for the gcmc (G-code Meta Compiler) application.  The touchy examples also "
"demonstrate incorporation of a GladeVCP back plot viewer (gremlin_view)."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:67
msgid "The simplest application is found as:"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:69
#, no-wrap
msgid "  Sample Configurations/sim/axis/ngcgui/ngcgui_simple\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:71
msgid "A comprehensive example showing gcmc compatibility is at:"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:73
#, no-wrap
msgid "  Sample Configurations/sim/axis/ngcgui/ngcgui_gcmc\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:75
msgid ""
"A comprehensive example embedded as a GladeVCP app and using gcmc is at:"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:77
#, no-wrap
msgid "  Sample Configurations/sim/gscreen/ngcgui/pyngcgui_gcmc\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:80
msgid ""
"The example sim configurations make use of library files that provide "
"example G-code subroutine (.ngc) files and G-code-meta-compiler (.gcmc) "
"files:"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:82
msgid "'nc_files/ngcgui_lib'"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:83
msgid "'ngcgui.ngc' - An easy to understand example using subroutines"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:84
msgid "'arc1.ngc' - basic arc using cutter radius compensation"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:85
msgid "'arc2.ngc' - arc speced by center, offset, width, angle (calls arc1)"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:86
msgid ""
"'backlash.ngc' - routine to measure an axis backlash with dial indicator"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:87
msgid "'db25.ngc' - creates a DB25 plug cutout"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:88
msgid "'gosper.ngc' - a recursion demo (flowsnake)"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:89
msgid "'helix.ngc' - helix or D-hole cutting"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:90
msgid "'helix_rtheta.ngc' - helix or D-hole positioned by radius and angle"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:91
msgid "'hole_circle.ngc' - equally spaced holes on a circle"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:92
msgid "'ihex.ngc' - internal hexagon"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:93
msgid "'iquad.ngc' - internal quadrilateral"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:94
msgid "'ohex.ngc' - outside hexagon"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:95
msgid "'oquad.ngc' - outside quadrilateral"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:96
msgid "'qpex_mm.ngc' - demo of qpockets (mm based)"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:97
msgid "'qpex.ngc' - demo of qpockets (inch based)"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:98
msgid "'qpocket.ngc' - quadrilateral pocket"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:99
msgid "'rectangle_probe.ngc' - probe a rectangular area"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:100
msgid "'simp.ngc' - a simple subroutine example that creates two circles"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:101
msgid "'slot.ngc' - slot from connecting two endpoints"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:102
msgid "'xyz.ngc' - machine exerciser constrained to a box shape"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:103 src/gui/ngcgui.adoc:113
msgid "'Custom' - Creates custom tabs"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:104
msgid "'ttt' - True Type Tracer, to create texts to be engraved"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:106
msgid "'nc_files/ngcgui_lib/lathe'"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:107
msgid "'ngcgui-lathe' - Example lathe subroutine"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:108
msgid "'g76base.ngc' - GUI for G76 threading"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:109
msgid "'g76diam.ngc' - threading speced by major, minor diameters"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:110
msgid "'id.ngc' - bores the inside diameter"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:111
msgid "'od.ngc' - turns the outside diameter"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:112
msgid "'taper-od.ngc' - turns a taper on the outside diameter"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:115
msgid "'nc_files/gcmc_lib'"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:116
msgid "'drill.gcmc' - drill holes in rectangle pattern"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:117
msgid "'square.gcmc' - simple demo of variable tags for gcmc files"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:118
msgid "'star.gcmc' - gcmc demo illustrating functions and arrays"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:119
msgid "'wheels.gcmc' - gcmc demo of complex patterns"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:122
msgid ""
"To try a demonstration, select a sim configuration and start the LinuxCNC "
"program."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:130
msgid ""
"If using the AXIS GUI, press the 'E-Stop' image:images/tool_estop.png[] then "
"'Machine Power' image:images/tool_power.png[] then 'Home All'. Pick a NGCGUI "
"tab, fill in any empty blanks with sensible values and press 'Create "
"Feature' then 'Finalize'. Finally press the 'Run' image:images/tool_run."
"png[] button to watch it run. Experiment by creating multiple features and "
"features from different tab pages."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:135
msgid ""
"To create several subroutines concatenated into a single file, go to each "
"tab fill in the blanks, press 'Create Feature' then using the arrow keys "
"move any tabs needed to put them in order. Now press 'Finalize' and answer "
"the prompt to create"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:138
msgid ""
"Other GUIs will have similar functionality but the buttons and names may be "
"different."
msgstr ""

#. type: delimited block =
#: src/gui/ngcgui.adoc:145
msgid ""
"The demonstration configs create tab pages for just a few of the provided "
"examples. Any GUI with a <<ngcgui-ini,custom tab>> can open any of the "
"library example subroutines or any user file if it is in the LinuxCNC "
"subroutine path."
msgstr ""

#. type: delimited block =
#: src/gui/ngcgui.adoc:148
msgid ""
"To see special key bindings, click inside an NGCGUI tab page to get focus "
"and then press Control-k."
msgstr ""

#. type: delimited block =
#: src/gui/ngcgui.adoc:153
msgid ""
"The demonstration subroutines should run on the simulated machine "
"configurations included in the distribution.  A user should always "
"understand the behavior and purpose of a program before running on a real "
"machine."
msgstr ""

#. type: Title ==
#: src/gui/ngcgui.adoc:155
#, no-wrap
msgid "Library Locations"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:159
msgid ""
"In LinuxCNC installations installed from deb packages, the simulation "
"configs for NGCGUI use symbolic links to non-user-writable LinuxCNC "
"libraries for:"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:161
#, no-wrap
msgid "'nc_files/ngcgui_lib'             NGCGUI-compatible subfiles\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:162
#, no-wrap
msgid "'nc_files/ngcgui_lib/lathe'       NGCGUI-compatible lathe subfiles\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:163
#, no-wrap
msgid "'nc_files/gcmc_lib'               NGCGUI-gcmc-compatible programs\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:164
#, no-wrap
msgid "'nc_files/ngcgui_lib/utilitysubs' Helper subroutines\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:165
#, no-wrap
msgid "'nc_files/ngcgui_lib/mfiles'      User M files\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:168
msgid ""
"These libraries are located by INI file items that specify the search paths "
"used by LinuxCNC (and NGCGUI):"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:174
#, no-wrap
msgid ""
"[RS274NGC]\n"
"SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../nc_files/gcmc_lib:../../nc_files/ngcgui_lib/utilitysubs\n"
"USER_M_PATH     = ../../nc_files/ngcgui_lib/mfiles\n"
msgstr ""

#. type: delimited block =
#: src/gui/ngcgui.adoc:182
msgid ""
"These are long lines (not continued on multiple lines)  that specify the "
"directories used in a search patch.  The directory names are separated by "
"colons (:). No spaces should occur between directory names."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:186
msgid ""
"A user can create new directories for their own subroutines and M-files and "
"add them to the search path(s)."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:188
msgid ""
"For example, a user could create directories from the terminal with the "
"commands:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:192
#, no-wrap
msgid ""
"mkdir /home/myusername/mysubs\n"
"mkdir /home/myusername/mymfiles\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:196
msgid ""
"And then create or copy system-provided files to these user-writable "
"directories.  For instance, a user might create a NGCGUI-compatible subfile "
"named:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:199
#, no-wrap
msgid "/home/myusername/mysubs/example.ngc\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:203
msgid ""
"To use files in new directories, the INI file must be edited to include the "
"new subfiles and to augment the search path(s).  For this example:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:210
#, no-wrap
msgid ""
"[RS274NGC]\n"
"...\n"
"SUBROUTINE_PATH = /home/myusername/mysubs:../../nc_files/ngcgui_lib:../../nc_files/gcmc_lib:../../nc_files/ngcgui_lib/utilitysubs\n"
"USER_M_PATH     = /home/myusername/mymfiles:../../nc_files/ngcgui_lib/mfiles\n"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:215
#, no-wrap
msgid ""
"[DISPLAY]\n"
"...\n"
"NGCGUI_SUBFILE = example.ngc\n"
"...\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:223
msgid ""
"LinuxCNC (and NGCGUI) use the first file found when searching directories in "
"the search path.  With this behavior, you can supersede an ngcgui_lib "
"subfile by placing a subfile with an identical name in a directory that is "
"found earlier in the path search. More information can be found in the INI "
"chapter of the Integrators Manual."
msgstr ""

#. type: SH
#: src/gui/ngcgui.adoc:224 src/man/man1/xhc-whb04b-6.1.adoc:88
#: man/man1/xhc-hb04.1:40
#, no-wrap
msgid "Standalone Usage"
msgstr ""

#. type: Title ===
#: src/gui/ngcgui.adoc:226
#, no-wrap
msgid "Standalone NGCGUI"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:229 src/gui/ngcgui.adoc:264
msgid "For usage, type in a terminal:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:237
#, no-wrap
msgid ""
"ngcgui --help\n"
"Usage:\n"
"  ngcgui --help | -?\n"
"  ngcgui [Options] -D <nc files directory name>\n"
"  ngcgui [Options] -i <LinuxCNC INI file name>\n"
"  ngcgui [Options]\n"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:252
#, no-wrap
msgid ""
"Options:\n"
"  [-S subroutine_file]\n"
"  [-p preamble_file]\n"
"  [-P postamble_file]\n"
"  [-o output_file]\n"
"  [-a autosend_file]            (autosend to AXIS default:auto.ngc)\n"
"  [--noauto]                    (no autosend to AXIS)\n"
"  [-N | --nom2]                 (no m2 terminator (use %))\n"
"  [--font [big|small|fontspec]] (default: \"Helvetica -10 normal\")\n"
"  [--horiz|--vert]              (default: --horiz)\n"
"  [--cwidth comment_width]      (width of comment field)\n"
"  [--vwidth varname_width]      (width of varname field)\n"
"  [--quiet]                     (fewer comments in outfile)\n"
"  [--noiframe]                  (default: frame displays image)\n"
msgstr ""

#. type: delimited block =
#: src/gui/ngcgui.adoc:259
msgid ""
"As a standalone application, NGCGUI handles a single subroutine file which "
"can be invoked multiple times.  Multiple standalone NGCGUI applications can "
"be started independently."
msgstr ""

#. type: Title ===
#: src/gui/ngcgui.adoc:261
#, no-wrap
msgid "Standalone PyNGCGUI"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:294
#, no-wrap
msgid ""
"pyngcgui --help\n"
"Usage:\n"
"pyngcgui [Options] [<sub_filename>]\n"
"Options requiring values:\n"
"    [-d | --demo] [0|1|2] (0: DEMO standalone toplevel)\n"
"                          (1: DEMO embed new notebook)\n"
"                          (2: DEMO embed within existing notebook)\n"
"    [-S | --subfile       <sub file name>]\n"
"    [-p | --preamble      <preamble file name>]\n"
"    [-P | --postamble     <postamble file name>]\n"
"    [-i | --ini           <INI file name>]\n"
"    [-a | --autofile      <auto file name>]\n"
"    [-t | --test          <testno>]\n"
"    [-K | --keyboardfile  <glade_file>] (use custom popupkeyboard glade file)\n"
"Solo Options:\n"
"    [-v | --verbose]\n"
"    [-D | --debug]\n"
"    [-N | --nom2]         (no m2 terminator (use %))\n"
"    [-n | --noauto]       (save but do not automatically send result)\n"
"    [-k | --keyboard]     (use default popupkeybaord)\n"
"    [-s | --sendtoaxis]   (send generated ngc file to AXIS GUI)\n"
"Notes:\n"
"      A set of files is comprised of a preamble, subfile, postamble.\n"
"      The preamble and postamble are optional.\n"
"      One set of files can be specified from cmdline.\n"
"      Multiple sets of files can be specified from an INI file.\n"
"      If --ini is NOT specified:\n"
"         search for a running LinuxCNC and use its INI file.\n"
msgstr ""

#. type: delimited block =
#: src/gui/ngcgui.adoc:301
msgid ""
"As a standalone application, PyNGCGUI can read an INI file (or a running "
"LinuxCNC application) to create tab pages for multiple subfiles."
msgstr ""

#. type: Title ==
#: src/gui/ngcgui.adoc:303
#, no-wrap
msgid "Embedding NGCGUI"
msgstr ""

#. type: Title ===
#: src/gui/ngcgui.adoc:305
#, no-wrap
msgid "Embedding NGCGUI in AXIS"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:309
msgid ""
"The following INI file items go in the [DISPLAY] section. (See additional "
"sections below for additional items needed)"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:311
msgid "'TKPKG = Ngcgui 1.0' - the NGCGUI package"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:313
msgid ""
"'TKPKG = Ngcguittt 1.0' - the True Type Tracer package for generating text "
"for engraving (optional, must follow TKPKG = Ngcgui)."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:314
msgid "'NGCGUI_FONT = Helvetica -12 normal' - Sets the font used"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:317
msgid ""
"'NGCGUI_PREAMBLE = in_std.ngc' - The preamble file to be added at the "
"beginning of the subroutine. When several subroutines are concatenated, it "
"is only added once."
msgstr ""

#. FIXME * 'NGCGUI_SUBFILE = "" - Creates a custom tab ?
#. type: Plain text
#: src/gui/ngcgui.adoc:318
msgid "'NGCGUI_SUBFILE = simp.ngc' - Creates a tab from the named subroutine."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:320
msgid "'NGCGUI_SUBFILE = \"\"' - Creates a custom tab"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:321
msgid "'#NGCGUI_OPTIONS = opt1 opt2 ...' - NGCGUI options:"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:322
#, no-wrap
msgid "'nonew'    -- Prohibits creation of new custom tab\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:323
#, no-wrap
msgid "'noremove' -- Prohibits deleting a tab page\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:324
#, no-wrap
msgid "'noauto'   -- Do not run automatically (makeFile, then manual run)\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:325
#, no-wrap
msgid "'noiframe' -- No internal image, image on separate top level\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:326
#, no-wrap
msgid "'TTT = truetype-tracer' - name of the truetype tracer program (it must be in user PATH)\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:328
#, no-wrap
msgid ""
"'TTT_PREAMBLE = in_std.ngc' - Optional, specifies filename for preamble used for\n"
"ttt created subfiles. (alternate: mm_std.ngc)\n"
msgstr ""

#. type: delimited block =
#: src/gui/ngcgui.adoc:334
msgid ""
"The optional truetype tracer items are used to specify an NGCGUI-compatible "
"tab page that uses the application truetype-tracer.  The truetype-tracer "
"application must be installed independently and located in the user PATH."
msgstr ""

#. type: Title ===
#: src/gui/ngcgui.adoc:336
#, no-wrap
msgid "Embedding PyNGCGUI as a GladeVCP tab page in a GUI"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:341
msgid ""
"The following INI file items go in the [DISPLAY] section for use with the "
"AXIS, Gscreen, or Touchy GUIs.  (See additional sections below for "
"additional items needed)"
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:342
#, no-wrap
msgid "EMBED_ Items"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:344
msgid "`EMBED_TAB_NAME = PyNGCGUI` - name to appear on embedded tab"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:345
msgid ""
"`EMBED_TAB_COMMAND = gladevcp -x {XID} pyngcgui_axis.ui` - invokes GladeVCP"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:346
msgid ""
"`EMBED_TAB_LOCATION = name_of_location` - where the embedded page is located"
msgstr ""

#. type: delimited block =
#: src/gui/ngcgui.adoc:354
msgid ""
"The EMBED_TAB_LOCATION specifier is not used for the AXIS GUI.  While "
"PyNGCGUI can be embedded in AXIS, integration is more complete when using "
"NGCGUI (using TKPKG = Ngcgui 1.0).  To specify the EMBED_TAB_LOCATION for "
"other GUIs, see the <<sub:ini:sec:display,DISPLAY Section>> of the INI "
"Configuration Chapter."
msgstr ""

#. type: delimited block =
#: src/gui/ngcgui.adoc:360
msgid ""
"The truetype tracer GUI front-end is not currently available for GladeVCP "
"applications."
msgstr ""

#. type: Title ===
#: src/gui/ngcgui.adoc:363
#, no-wrap
msgid "Additional INI File items required for NCGUI or PyNGCGUI"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:367
msgid ""
"The following INI file items go in the [DISPLAY] section for any GUI that "
"embeds either NGCGUI or PyNGCGUI."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:369
msgid ""
"'NGCGUI_FONT = Helvetica -12 normal' - specifies the font name,size, normal|"
"bold"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:372
msgid ""
"'NGCGUI_PREAMBLE = in_std.ngc' - the preamble file to be added in front of "
"the subroutines. When concatenating several common subroutine invocations, "
"this preamble is only added once.  For mm-based machines, use mm_std.ngc"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:373
msgid ""
"'NGCGUI_SUBFILE = filename1.ngc' - creates a tab from the filename1 "
"subroutine"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:374
msgid ""
"'NGCGUI_SUBFILE = filename2.ngc' - creates a tab from the filename2 "
"subroutine"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:375 src/gui/ngcgui.adoc:378
msgid "'... etc.'"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:376
msgid ""
"'NGCGUI_SUBFILE = gcmcname1.gcmc' - creates a tab from the gcmcname1 file"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:377
msgid ""
"'NGCGUI_SUBFILE = gcmcname2.gcmc' - creates a tab from the gcmcname2 file"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:379
msgid ""
"'NGCGUI_SUBFILE = \"\"' - creates a custom tab that can open any subroutine "
"in the search path"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:380
msgid "'NGCGUI_OPTIONS = opt1 opt2 ...' - NGCGUI options"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:381
msgid "'nonew' - disallow making a new custom tab"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:382
msgid "'noremove' - disallow removing any tab page"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:383
msgid "'noauto' - no autosend (use makeFile, then save or manually send)"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:384
msgid ""
"'noiframe' - no internal image, display images on separate top level widget"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:386
msgid ""
"'nom2' - do not terminate with m2, use % terminator.  This option eliminates "
"all the side effects of m2 termination"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:387
msgid ""
"'GCMC_INCLUDE_PATH = dirname1:dirname2' - search directories for gcmc "
"include files"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:394
msgid ""
"This is an example of embedding NGCGUI into AXIS. The subroutines need to be "
"in a directory specified by the [RS274NGC]SUBROUTINE_PATH.  Some example "
"subroutines use other subroutines so check to be sure you have the "
"dependences, if any, in a SUBROUTINE_PATH directory.  Some subroutines may "
"use custom M-files which must be in a directory specified by the "
"[RS274NGC]USER_M_PATH."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:396
msgid "The G-code-meta-compiler (gcmc) can include statements like:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:399
#, no-wrap
msgid "include(\"filename.inc.gcmc\");\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:404
msgid ""
"By default, gcmc includes the current directory which, for LinuxCNC, will be "
"the directory containing the LinuxCNC INI file. Additional directories can "
"be prepended to the gcmc search order with the GCMC_INCLUDE_PATH item."
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:405
#, no-wrap
msgid "Sample AXIS-GUI-based INI"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:412
#, no-wrap
msgid ""
"[RS274NGC]\n"
"...\n"
"SUBROUTINE_PATH   = ../../nc_files/ngcgui_lib:../../ngcgui_lib/utilitysubs\n"
"USER_M_PATH       = ../../nc_files/ngcgui_lib/mfiles\n"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:417
#, no-wrap
msgid ""
"[DISPLAY]\n"
"TKPKG             = Ngcgui    1.0\n"
"TKPKG             = Ngcguittt 1.0\n"
"# Ngcgui must precede Ngcguittt\n"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:440
#, no-wrap
msgid ""
"NGCGUI_FONT       = Helvetica -12 normal\n"
"# specify filenames only, files must be in [RS274NGC]SUBROUTINE_PATH\n"
"NGCGUI_PREAMBLE   = in_std.ngc\n"
"NGCGUI_SUBFILE    = simp.ngc\n"
"NGCGUI_SUBFILE    = xyz.ngc\n"
"NGCGUI_SUBFILE    = iquad.ngc\n"
"NGCGUI_SUBFILE    = db25.ngc\n"
"NGCGUI_SUBFILE    = ihex.ngc\n"
"NGCGUI_SUBFILE    = gosper.ngc\n"
"# specify \"\" for a custom tab page\n"
"NGCGUI_SUBFILE    = \"\"\n"
"#NGCGUI_SUBFILE   = \"\" use when image frame is specified if\n"
"#                      opening other files is required\n"
"#                      images will be put in a top level window\n"
"NGCGUI_OPTIONS    =\n"
"#NGCGUI_OPTIONS   = opt1 opt2 ...\n"
"# opt items:\n"
"#   nonew      -- disallow making a new custom tab\n"
"#   noremove   -- disallow removing any tab page\n"
"#   noauto     -- no auto send (makeFile, then manually send)\n"
"#   noiframe   -- no internal image, image on separate top level\n"
"GCMC_INCLUDE_PATH = /home/myname/gcmc_includes\n"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:443
#, no-wrap
msgid ""
"TTT               = truetype-tracer\n"
"TTT_PREAMBLE      = in_std.ngc\n"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:445
#, no-wrap
msgid "PROGRAM_PREFIX    = ../../nc_files\n"
msgstr ""

#. type: delimited block =
#: src/gui/ngcgui.adoc:452
msgid ""
"The above is not a complete AXIS GUI INI -- the items show are those used by "
"NGCGUI.  Many additional items are required by LinuxCNC to have a complete "
"INI file."
msgstr ""

#. type: Title ===
#: src/gui/ngcgui.adoc:454
#, no-wrap
msgid "Truetype Tracer"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:460
msgid ""
"Ngcgui_ttt provides support for truetype-tracer (v4).  It creates an AXIS "
"tab page which allows a user to create a new NGCGUI tab page after entering "
"text and selecting a font and other parameters.  (Truetype-tracer must be "
"installed independently)."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:463
msgid ""
"To embed ngcgui_ttt in AXIS, specify the following items in addition to "
"NGCGUI items:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:470
#, no-wrap
msgid ""
"Item:    [DISPLAY]TKPKG = Ngcgui_ttt version_number\n"
"Example: [DISPLAY]TKPKG = Ngcgui_ttt 1.0\n"
"Note:    Mandatory, specifies loading of ngcgui_ttt in an AXIS tab page\n"
"         named ttt.\n"
"         Must follow the TKPKG = Ngcgui item.\n"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:478
#, no-wrap
msgid ""
"Item:    [DISPLAY]TTT = path_to_truetype-tracer\n"
"Example: [DISPLAY]TTT = truetype-tracer\n"
"Note:    Optional, if not specified, attempt to use\n"
"         /usr/local/bin/truetype-tracer.\n"
"         Specify with absolute pathname or as a simple executable\n"
"         name in which case the user PATH environment will used\n"
"         to find the program.\n"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:483
#, no-wrap
msgid ""
"Item:    [DISPLAY]TTT_PREAMBLE = preamble_filename\n"
"Example: [DISPLAY]TTT_PREAMBLE = in_std.ngc\n"
"Note:    Optional, specifies filename for preamble used for ttt\n"
"         created subfiles.\n"
msgstr ""

#. type: Title ===
#: src/gui/ngcgui.adoc:485
#, no-wrap
msgid "INI File Path Specifications"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:488
msgid "NGCGUI uses the LinuxCNC search path to find files."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:490
msgid "The search path begins with the standard directory specified by:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:494
#, no-wrap
msgid "[DISPLAY]PROGRAM_PREFIX = directory_name\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:497
msgid "followed by multiple directories specified by:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:501
#, no-wrap
msgid "[RS274NGC]SUBROUTINE_PATH = directory1_name:directory1_name:directory3_name ...\n"
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:503
#, no-wrap
msgid "Directories"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:506
msgid "Directories may be specified as absolute paths or relative paths."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:508
msgid "Example: `[DISPLAY]PROGRAM_PREFIX = /home/myname/linuxcnc/nc_files`"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:509
msgid "Example: `[DISPLAY]PROGRAM_PREFIX = ~/linuxcnc/nc_files`"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:510
msgid "Example: `[DISPLAY]PROGRAM_PREFIX = ../../nc_files`"
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:511
#, no-wrap
msgid "Absolute Paths"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:517
msgid ""
"An absolute path beginning with a \"/\" specifies a complete filesystem "
"location.  A path beginning with a \"\\~/\" specifies a path starting from "
"the user's home directory.  A path beginning with \"~username/\" specifies a "
"path starting in username's home directory."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:523
msgid ""
"Relative paths are based on the startup directory which is the directory "
"containing the INI file.  Using relative paths can facilitate relocation of "
"configurations but requires a good understanding of Linux path specifiers."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:525
#, no-wrap
msgid "`./d0`        is the same as d0, e.g., a directory named d0 in the startup directory\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:526
#, no-wrap
msgid "`../d1`       refers to a directory d1 in the parent directory\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:527
#, no-wrap
msgid "`../../d2`    refers to a directory d2 in the parent of the parent directory\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:528
#, no-wrap
msgid "`../../../d3` etc.\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:532
msgid ""
"Multiple directories can be specified with [RS274NGC]SUBROUTINE_PATH by "
"separating them with colons.  The following example illustrates the format "
"for multiple directories and shows the use of relative and absolute paths."
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:533
#, no-wrap
msgid "Multiple Directories Example:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:537
#, no-wrap
msgid "[RS274NGC]SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../nc_files/ngcgui_lib/utilitysubs:/tmp/tmpngc\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:541
msgid ""
"This is one long line, do not continue on multiple lines.  When LinuxCNC and/"
"or NGCGUI searches for files, the first file found in the search is used."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:545
msgid ""
"LinuxCNC (and NGCGUI) must be able to find all subroutines including helper "
"routines that are called from within NGCGUI subfiles.  It is convenient to "
"place utility subs in a separate directory as indicated in the example above."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:552
msgid ""
"The distribution includes the ngcgui_lib directory and demo files for "
"preambles, subfiles, postambles and helper files.  To modify the behavior of "
"the files, you can copy any file and place it in an earlier part of the "
"search path.  The first directory searched is [DISPLAY]PROGRAM_PREFIX.  You "
"can use this directory but it is better practice to create dedicated "
"directory(ies) and put them at the beginning of the "
"[RS274NGC]SUBROUTINE_PATH."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:555
msgid ""
"In the following example, files in /home/myname/linuxcnc/mysubs will be "
"found before files in ../../nc_files/ngcgui_lib."
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:556
#, no-wrap
msgid "Adding User Directory Example:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:560
#, no-wrap
msgid "[RS274NGC]SUBROUTINE_PATH = /home/myname/linuxcnc/mysubs:../../nc_files/ngcgui_lib:../../nc_files/ngcgui_lib/utilitysubs`\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:570
msgid ""
"New users may inadvertently try to use files that are not structured to be "
"compatible with NGCGUI requirements.  NGCGUI will likely report numerous "
"errors if the files are not coded per its conventions.  Good practice "
"suggests that NGCGUI-compatible subfiles should be placed in a directory "
"dedicated to that purpose and that preamble, postamble, and helper files "
"should be in separate directory(ies) to discourage attempts to use them as "
"subfiles.  Files not intended for use as subfiles can include a special "
"comment: \"(not_a_subfile)\" so that NGCGUI will reject them automatically "
"with a relevant message."
msgstr ""

#. type: Title ===
#: src/gui/ngcgui.adoc:571
#, no-wrap
msgid "Summary of INI File item details for NGCGUI usage"
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:573
#, no-wrap
msgid "[RS274NGC]SUBROUTINE_PATH = dirname1:dirname2:dirname3 ..."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:576
#, no-wrap
msgid ""
"_Example_: `[RS274NGC]SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../nc_files/ngcgui_lib/utilitysubs` +\n"
"_Note_:    Optional, but very useful to organize subfiles and utility files.\n"
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:577
#, no-wrap
msgid "[RS274NGC]USER_M_PATH = dirname1:dirname2:dirname3 ..."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:580
#, no-wrap
msgid ""
"_Example_: `[RS274NGC]USER_M_PATH = ../../nc_files/ngcgui_lib/mfiles` +\n"
"_Note_:    Optional, needed to locate custom user M-files.\n"
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:581
#, no-wrap
msgid "[DISPLAY]EMBED_TAB_NAME = name to display on embedded tab page"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:585
#, no-wrap
msgid ""
"_Example_: `[DISPLAY]EMBED_TAB_NAME = Pyngcgui` +\n"
"_Note_:    The entries: `EMBED_TAB_NAME`, `EMBED_TAB_COMMAND`, `EMBED_TAB_LOCATION`\n"
"define an embedded application for several LinuxCNC GUIs.\n"
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:586
#, no-wrap
msgid "[DISPLAY]EMBED_TAB_COMMAND = programname followed by arguments"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:589
#, no-wrap
msgid ""
"_Example_: `[DISPLAY]EMBED_TAB_COMMAND = gladevcp -x {XID} pyngcgui_axis.ui` +\n"
"_Note_:    For GladeVCP applications, see the <<cha:glade-vcp,GladeVCP Chapter>>.\n"
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:590
#, no-wrap
msgid "[DISPLAY]EMBED_TAB_LOCATION = name_of_location"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:594
#, no-wrap
msgid ""
"_Example_: `[DISPLAY]EMBED_TAB_LOCATION = notebook_main` +\n"
"_Note_:    See example INI files for possible locations. +\n"
"Not required for the AXIS GUI.\n"
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:595
#, no-wrap
msgid "[DISPLAY]PROGRAM_PREFIX = dirname"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:599
#, no-wrap
msgid ""
"_Example_: `[DISPLAY]PROGRAM_PREFIX = ../../nc_files` +\n"
"_Note_:    Mandatory and needed for numerous LinuxCNC functions. +\n"
"It is the first directory used in the search for files.\n"
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:600
#, no-wrap
msgid "[DISPLAY]TKPKG = NGCGUI version_number"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:604
#, no-wrap
msgid ""
"_Example_: `[DISPLAY]TKPKG = Ngcgui 1.0` +\n"
"_Note_:    Required only for AXIS GUI embedding. +\n"
"Specifies loading of NGCGUI AXIS tab pages.\n"
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:605
#, no-wrap
msgid "[DISPLAY]NGCGUI_FONT = font_descriptor"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:612
#, no-wrap
msgid ""
"_Example_: [DISPLAY]NGCGUI_FONT = Helvetica -12 normal +\n"
"_Note_:    Optional, font_descriptor is a tcl-compatible font specifier\n"
"with items for fonttype -fontsize fontweight. +\n"
"Default is: Helvetica -10 normal. +\n"
"Smaller font sizes may be useful for small screens. +\n"
"Larger font sizes may be helpful for touch screen applications .\n"
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:613
#, no-wrap
msgid "[DISPLAY]NGCGUI_SUBFILE = subfile_filename"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:622
#, no-wrap
msgid ""
"_Example_: `[DISPLAY]NGCGUI_SUBFILE = simp.ngc` +\n"
"_Example_: `[DISPLAY]NGCGUI_SUBFILE = square.gcmc` +\n"
"_Example_: `[DISPLAY]NGCGUI_SUBFILE = \"\"` +\n"
"_Note_:    Use one or more items to specify NGCGUI-compatible\n"
"subfiles or gcmc programs that require a tab page on startup. +\n"
"A \"Custom\" tab will be created when the filename is \"\". +\n"
"A user can use a \"Custom\" tab to browse the file system\n"
"and identify preamble, subfile, and postamble files.\n"
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:623
#, no-wrap
msgid "[DISPLAY]NGCGUI_PREAMBLE = preamble_filename"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:628
#, no-wrap
msgid ""
"_Example_: `[DISPLAY]NGCGUI_PREAMBLE = in_std.ngc` +\n"
"_Note_:    Optional, when specified, the file is prepended to a subfile. +\n"
"Files created with \"Custom\" tab pages use the preamble specified\n"
"with the page.\n"
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:629
#, no-wrap
msgid "[DISPLAY]NGCGUI_POSTAMBLE = postamble_filename"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:634
#, no-wrap
msgid ""
"_Example_: `[DISPLAY]NGCGUI_POSTAMBLE = bye.ngc` +\n"
"_Note_:    Optional, when specified, the file is appended to a subfiles. +\n"
"Files created with \"Custom\" tab pages use the postamble specified\n"
"with the page.\n"
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:635
#, no-wrap
msgid "[DISPLAY]NGCGUI_OPTIONS = opt1 opt2 ..."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:639
#, no-wrap
msgid ""
"_Example_: [DISPLAY]NGCGUI_OPTIONS = nonew noremove +\n"
"_Note_:    Multiple options are separated by blanks. +\n"
"By default, NGCGUI configures tab pages so that: +\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:640
#, no-wrap
msgid "a user can make new tabs; +\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:641
#, no-wrap
msgid "a user can remove tabs (except for the last remaining one); +\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:642
#, no-wrap
msgid "finalized files are automatically sent to LinuxCNC; +\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:644
#, no-wrap
msgid ""
"an image frame (iframe) is made available to display\n"
"an image for the subfile (if an image is provided); +\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:646
#, no-wrap
msgid ""
"the NGCGUI result file sent to LinuxCNC is terminated with\n"
"an M2 (and incurs M2 side-effects). +\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:649
msgid ""
"The options `nonew`, `noremove`, `noauto`, `noiframe`, `nom2` respectively "
"disable these default behaviors."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:661
#, no-wrap
msgid ""
"By default, if an image (.png,.gif,jpg,pgm) file\n"
"is found in the same directory as the subfile, the\n"
"image is displayed in the iframe. Specifying\n"
"the `noiframe` option makes available additional buttons\n"
"for selecting a preamble, subfile, and postamble and\n"
"additional checkboxes. Selections of the checkboxes\n"
"are always available with special keys: +\n"
"  `Ctrl-R` Toggle \"Retain values on Subfile read\", +\n"
"  `Ctrl-E` Toggle \"Expand subroutine\", +\n"
"  `Ctrl-a` Toggle \"Autosend\", +\n"
"  `Ctrl-k` lists all keys and functions. +\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:664
msgid ""
"If `noiframe` is specified and an image file is found, the image is "
"displayed in a separate window and all functions are available on the tab "
"page."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:667
msgid ""
"The `NGCGUI_OPTIONS` apply to all NGCGUI tabs except that the `nonew`, "
"`noremove`, and `noiframe` options are not applicable for \"Custom\" tabs.  "
"Do not use \"Custom\" tabs if you want to limit the user's ability to select "
"subfiles or create additional tab pages."
msgstr ""

#. type: Labeled list
#: src/gui/ngcgui.adoc:668
#, no-wrap
msgid "[DISPLAY]GCMC_INCLUDE_PATH = dirname1:dirname2:..."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:672
#, no-wrap
msgid ""
"_Example_: `[DISPLAY]GCMC_INCLUDE_PATH = /home/myname/gcmc_includes:/home/myname/gcmc_includes2` +\n"
"_Note_:    Optional, each directory will be included when gcmc is invoked\n"
"using the option: `--include dirname`.\n"
msgstr ""

#.  FIXME Keyboard shortcuts do not work in version _fr.
#. type: Title ==
#: src/gui/ngcgui.adoc:676
#, no-wrap
msgid "File Requirements for NGCGUI Compatibility"
msgstr ""

#. type: Title ===
#: src/gui/ngcgui.adoc:678
#, no-wrap
msgid "Single-File Gcode (.ngc) Subroutine Requirements"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:685
msgid ""
"An NGCGUI-compatible subfile contains a single subroutine definition. The "
"name of the subroutine must be the same as the filename (not including the ."
"ngc suffix). LinuxCNC supports named or numbered subroutines, but only named "
"subroutines are compatible with NGCGUI. For more information see the <<cha:o-"
"codes,O-Codes>> chapter."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:688
#, no-wrap
msgid ""
"The first non-comment line should be a `sub` statement.\n"
"The last non-comment line should be a `endsub` statement."
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:689
#, no-wrap
msgid "examp.ngc:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:699
#, no-wrap
msgid ""
"(info: info_text_to_appear_at_top_of_tab_page)\n"
"; comment line beginning with semicolon\n"
"( comment line using parentheses)\n"
"o<examp> sub\n"
"  BODY_OF_SUBROUTINE\n"
"o<examp> endsub\n"
"; comment line beginning with semicolon\n"
"( comment line using parentheses)\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:706
msgid ""
"The body of the subroutine should begin with a set of statements that define "
"local named parameters for each positional parameter expected for the "
"subroutine call. These definitions must be consecutive beginning with #1 and "
"ending with the last used parameter number. Definitions must be provided for "
"each of these parameters (no omissions)."
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:707
#, no-wrap
msgid "Parameter Numbering"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:712
#, no-wrap
msgid ""
"#<xparm> = #1\n"
"#<yparm> = #2\n"
"#<zparm> = #3\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:719
msgid ""
"LinuxCNC considers all numbered parameters in the range #1 thru #30 to be "
"calling parameters so NGCGUI provides entry boxes for any occurrence of "
"parameters in this range. It is good practice to avoid use of numbered "
"parameters #1 through #30 anywhere else in the subroutine. Using local, "
"named parameters is recommended for all internal variables."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:722
msgid ""
"Each defining statement may optionally include a special comment and a "
"default value for the parameter."
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:723
#, no-wrap
msgid "Statement Prototype"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:730
#, no-wrap
msgid ""
"#<vname> = #n (=default_value)\n"
"or\n"
"#<vname> = #n (comment_text)\n"
"or\n"
"#<vname> = #n (=default_value comment_text)\n"
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:732
#, no-wrap
msgid "Parameter Examples"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:737
#, no-wrap
msgid ""
"#<xparm> = #1 (=0.0)\n"
"#<yparm> = #2 (Ystart)\n"
"#<zparm> = #3 (=0.0 Z start setting)\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:741
msgid ""
"If a default_value is provided, it will be entered in the entry box for the "
"parameter on startup."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:744
msgid ""
"If comment_text is included, it will be used to identify the input instead "
"of the parameter name."
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:745
#, no-wrap
msgid "Global Named Parameters"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:748
msgid "Notes on global named parameters and NGCGUI:"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:751
msgid ""
"(global named parameters have a leading underscore in the name, like "
"#<_someglobalname>)"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:756
msgid ""
"As in many programming languages, use of globals is powerful but can often "
"lead to unexpected consequences. In LinuxCNC, existing global named "
"parameters will be valid at subroutine execution and subroutines can modify "
"or create global named parameters."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:762
msgid ""
"Passing information to subroutines using global named parameters is "
"discouraged since such usage requires the establishment and maintenance of a "
"well-defined global context that is difficult to maintain. Using numbered "
"parameters #1 thru #30 as subroutine inputs should be sufficient to satisfy "
"a wide range of design requirements."
msgstr ""

#. FIXME are input global named parameters supported or not ?
#. type: Plain text
#: src/gui/ngcgui.adoc:766
msgid ""
"NGCGUI supports some input global named parameter but their usage is "
"obsolete and not documented here."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:773
msgid ""
"While input global named parameters are discouraged, LinuxCNC subroutines "
"must use global named parameters for returning results. Since NGCGUI-"
"compatible subfiles are aimed at GUI usage, return values are not a common "
"requirement.  However, NGCGUI is useful as a testing tool for subroutines "
"which do return global named parameters and it is common for NGCGUI-"
"compatible subfiles to call utility subroutine files that return results "
"with global named parameters."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:777
msgid ""
"To support these usages, NGCGUI ignores global named parameters that include "
"a colon (:) character in their name. Use of the colon (:) in the name "
"prevents NGCGUI from making entryboxes for these parameters."
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:778
#, no-wrap
msgid "Global Named Parameters Example"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:789
#, no-wrap
msgid ""
"o<examp> sub\n"
"...\n"
"#<_examp:result> = #5410       (return the current tool diameter)\n"
"...\n"
"o<helper> call [#<x1>] [#<x2>] (call a subroutine)\n"
"#<xresult> = #<_helper:answer> (immediately localize the helper global result)\n"
"#<_helper:answer> = 0.0        (nullify global named parameter used by subroutine)\n"
"...\n"
"o<examp> endsub\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:794
msgid ""
"In the above example, the utility subroutine will be found in a separate "
"file named helper.ngc. The helper routine returns a result in a global named "
"parameter named #<_helper:answer."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:800
msgid ""
"For good practice, the calling subfile immediately localizes the result for "
"use elsewhere in the subfile and the global named parameter used for "
"returning the result is nullified in an attempt to mitigate its inadvertent "
"use elsewhere in the global context. (A nullification value of 0.0 may not "
"always be a good choice)."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:806
msgid ""
"NGCGUI supports the creation and concatenation of multiple features for a "
"subfile and for multiple subfiles. It is sometimes useful for subfiles to "
"determine their order at runtime so NGCGUI inserts a special global "
"parameter that can be tested within subroutines. The parameter is named "
"#<_feature:>.  Its value begins with a value of 0 and is incremented for "
"each added feature."
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:807
#, no-wrap
msgid "Additional Features"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:811
msgid ""
"A special 'info' comment can be included anywhere in an NGCGUI-compatible "
"subfile. The format is:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:815
#, no-wrap
msgid "(info: info_text)\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:818
msgid "The info_text is displayed near the top of the NGCGUI tab page in AXIS."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:821
msgid ""
"Files not intended for use as subfiles can include a special comment so that "
"NGCGUI will reject them automatically with a relevant message."
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:825
#, no-wrap
msgid "(not_a_subfile)\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:833
msgid ""
"An optional image file (.png,.gif,.jpg,.pgm) can accompany a subfile. The "
"image file can help clarify the parameters used by the subfile. The image "
"file should be in the same directory as the subfile and have the same name "
"with an appropriate image suffix, e.g. the subfile example.ngc could be "
"accompanied by an image file examp.png. NGCGUI attempts to resize large "
"images by subsampling to a size with maximum width of 320 and maximum height "
"of 240 pixels."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:836
msgid ""
"None of the conventions required for making an NGCGUI-compatible subfile "
"preclude its use as general purpose subroutine file for LinuxCNC."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:842
msgid ""
"The LinuxCNC distribution includes a library (ngcgui_lib directory) that "
"includes both example NGCGUI-compatible subfiles and utility files to "
"illustrate the features of LinuxCNC subroutines and NGCGUI usage.  Another "
"library (gcmc_lib) provides examples for subroutine files for the G-code "
"meta compiler (gcmc)."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:845
msgid ""
"Additional user sumitted subroutines can be found on the Forum in the "
"Subroutines Section."
msgstr ""

#. type: Title ===
#: src/gui/ngcgui.adoc:846
#, no-wrap
msgid "Gcode-meta-compiler (.gcmc) file requirements"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:855
msgid ""
"Files for the Gcode-meta-compiler (gcmc) are read by NGCGUI and it creates "
"entry boxes for variables tagged in the file.  When a feature for the file "
"is finalized, NGCGUI passes the file as input to the gcmc compiler and, if "
"the compile is successful, the resulting G-code file is sent to LinuxCNC for "
"execution.  The resulting file is formatted as single-file subroutine; .gcmc "
"files and .ngc files can be intermixed by NGCGUI."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:858
msgid ""
"The variables identified for inclusion in NGCGUI are tagged with lines that "
"will appear as comments to the gcmc compiler."
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:859
#, no-wrap
msgid "Variable Tags Formats"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:864
#, no-wrap
msgid ""
"//ngcgui: varname1 =\n"
"//ngcgui: varname2 = value2\n"
"//ngcgui: varname3 = value3, label3;\n"
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:866
#, no-wrap
msgid "Variable Tags Examples"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:871
#, no-wrap
msgid ""
"//ngcgui: zsafe =\n"
"//ngcgui: feedrate = 10\n"
"//ngcgui: xl = 0, x limit\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:877
msgid ""
"For these examples, the entry box for varname1 will have no default, the "
"entry box for varname2 will have a default of value2, and the entry box for "
"varname 3 will have a default of value 3 and a label label3 (instead of "
"varname3).  The default values must be numbers."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:883
msgid ""
"To make it easier to modify valid lines in a gcmc file, alternate tag line "
"formats accepted.  The alternate formats ignore trailing semicolons (;) and "
"trailing comment markers (//)  With this provision, it is often makes it "
"possible to just add the //ngcgui: tag to existing lines in a .gcmc file."
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:884
#, no-wrap
msgid "Alternate Variable Tags Formats"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:888
#, no-wrap
msgid ""
"//ngcgui: varname2 = value2;\n"
"//ngcgui: varname3 = value3; //, label3;\n"
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:890
#, no-wrap
msgid "Alternate Variable Tags Examples"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:894
#, no-wrap
msgid ""
"//ngcgui: feedrate = 10;\n"
"//ngcgui: xl = 0; //, x limit\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:898
msgid ""
"An info line that will appear at the top of a tab page may be optionally "
"included with a line tagged as:"
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:899
#, no-wrap
msgid "Info tag"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:902
#, no-wrap
msgid "//ngcgui: info: text_to_appear_at_top_of_tab_page\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:905
msgid ""
"When required, options can be passed to the gcmc compiler with a line tagged:"
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:906
#, no-wrap
msgid "Option line tag format"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:909
#, no-wrap
msgid "//ngcgui: -option_name [ [=] option_value]\n"
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:911
#, no-wrap
msgid "Option line tag Examples"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:917
#, no-wrap
msgid ""
"//ngcgui: -I\n"
"//ngcgui: --imperial\n"
"//ngcgui: --precision 5\n"
"//ngcgui: --precision=6\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:920
msgid "Options for gcmc are available with the terminal command:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:923
#, no-wrap
msgid "gcmc --help\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:927
msgid ""
"A gcmc program by default uses metric mode.  The mode can be set to inches "
"with the option setting:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:930
#, no-wrap
msgid "//ngcgui: --imperial\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:936
msgid ""
"A preamble file, if used, can set a mode (g20 or g21) that conflicts with "
"the mode used by a gcmc file.  To ensure that the gcmc program mode is in "
"effect, include the following statement in the .gcmc file:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:939
#, no-wrap
msgid "include(\"ensure_mode.gcmc\")\n"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:943
msgid ""
"and provide a proper path for gcmc include_files in the INI file, for "
"example:"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:948
#, no-wrap
msgid ""
"[DISPLAY]\n"
"GCMC_INCLUDE_PATH = ../../nc_files/gcmc_lib\n"
msgstr ""

#. type: Title ==
#: src/gui/ngcgui.adoc:950
#, no-wrap
msgid "DB25 Example"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:953
msgid "The following shows the DB25 subroutine."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:955
msgid ""
"In the first photo you see where you fill in the blanks for each variable."
msgstr ""

#. type: Target for macro image
#: src/gui/ngcgui.adoc:956
#, no-wrap
msgid "images/ngcgui-db25-1.png"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:959
msgid "This photo shows the backplot of the DB25 subroutine."
msgstr ""

#. type: Target for macro image
#: src/gui/ngcgui.adoc:960
#, no-wrap
msgid "images/ngcgui-db25-2.png"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:964
msgid ""
"This photo shows the use of the new button and the custom tab to create "
"three DB25 cutouts in one program."
msgstr ""

#. type: Target for macro image
#: src/gui/ngcgui.adoc:965
#, no-wrap
msgid "images/ngcgui-db25-3.png"
msgstr ""

#. type: Title ==
#: src/gui/ngcgui.adoc:967
#, no-wrap
msgid "Creating a subroutine"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:971
msgid ""
"For creating a subroutine for use with NGCGUI, the filename and the "
"subroutine name must be the same."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:972
msgid "The file must be placed in the subdirectory pointed to in the INI file."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:973
msgid "On the first line there may be a comment of type `info:`"
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:974
msgid "The subroutine must be surrounded by the `sub` and `endsub` tags."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:975
msgid "The variables used must be numbered variables and must not skip number."
msgstr ""

#. type: Plain text
#: src/gui/ngcgui.adoc:976
msgid "Comments and presets may be included."
msgstr ""

#. type: Block title
#: src/gui/ngcgui.adoc:977
#, no-wrap
msgid "Subroutine Skeleton Example"
msgstr ""

#. type: delimited block -
#: src/gui/ngcgui.adoc:988
#, no-wrap
msgid ""
"(info: simp -- simple exemple de sous-programme -- Ctrl-U pour éditer)\n"
"o<simp> sub\n"
"  #<ra>       = #1 (=.6 Rayon A) ;Example de paramètre avec un commentaire\n"
"  #<radius_b> = #2 (=0.4)         ;Example de paramètre sans commentaire\n"
"  #<feedrate> = #3 (Feedrate)     ;Example de paramètre sans preset\n"
"  g0x0y0z1\n"
"  g3 i#<ra> f#<feedrate>\n"
"  g3 i[0-#<radius_b>]\n"
"o<simp> endsub\n"
msgstr ""

#. type: Title =
#: src/gui/panelui.adoc:5
#, no-wrap
msgid "Panelui(((Panelui)))"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:14
msgid ""
"Panelui is a userspace component to interface buttons to LinuxCNC or HAL:"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:15
msgid ""
"It decodes MESA 7I73 style key-scan codes and calls the appropriate routine."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:17
msgid ""
"It gets input from a realtime component - sampler.  Sampler gets it's input "
"from either the MESA 7i73 or sim_matrix_kb component."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:19
msgid ""
"Panelui is configurable using an INI style text file to define button types, "
"HAL pin types, and/or commands."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:20
msgid ""
"It can be extended using a Python based 'handler' file to add functions."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:23
msgid ""
"While actual input buttons are required to be momentary, Panelui will use "
"this input to make toggle, radio, or momentary button output."
msgstr ""

#. type: Title ==
#: src/gui/panelui.adoc:24
#, no-wrap
msgid "Loading Commands"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:27
msgid "The command used to load panelui (with optional -d debug switch):"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:31
#, no-wrap
msgid "loadusr -W panelui -d\n"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:35
msgid ""
"This will initialize panelui, which will look for the INI file panelui.ini "
"in the config folder or user folder."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:37
msgid "One can validate the INI file with this command:"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:41
#, no-wrap
msgid "loadusr pyui\n"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:45 man/man1/pyui.1:36
msgid ""
"This will read, try to correct, then save the panelui.ini file.  It will "
"print errors to the terminal if found."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:47
msgid "A typical HAL file will have these commands added:"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:55
#, no-wrap
msgid ""
"# commands needed for panelui loading\n"
"#\n"
"# sampler is needed for panelui\n"
"# cfg= must always be u for panelui. depth sets the available buffer\n"
"loadrt sampler cfg=u depth=1025\n"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:58
#, no-wrap
msgid ""
"#uncomment to validate the panelui INI file\n"
"#loadusr pyui\n"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:63
#, no-wrap
msgid ""
"# -d = debug, -v = verbose debug\n"
"# -d will show you keypress identification and commands called\n"
"# -v is for develeper info\n"
"loadusr -W panelui -d\n"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:67
#, no-wrap
msgid ""
"# using simulated buttons instead of the MESA 7I73 card\n"
"# so we load the sim_matrix_kb component to convert HAL pins to keyscan codes\n"
"loadrt sim_matrix_kb\n"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:72
#, no-wrap
msgid ""
"# connect the components together.\n"
"# sampler talks to panelui internally\n"
"net key-scan    sim-matrix-kb.0.out\n"
"net key-scan    sampler.0.pin.0\n"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:74
#, no-wrap
msgid "# add panelui components to a thread\n"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:77
#, no-wrap
msgid ""
"addf sim-matrix-kb.0    servo-thread\n"
"addf sampler.0          servo-thread\n"
msgstr ""

#. type: Title ==
#: src/gui/panelui.adoc:79
#, no-wrap
msgid "panelui.ini file reference"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:81
#, no-wrap
msgid "*Key words*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:84
msgid ""
"KEY= This is used to designate the key that the button responds to. It can "
"be NONE or ROW number and column number eg R1C2. A row and column can only "
"be used once."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:85
msgid ""
"OUTPUT= This sets the Button's output type, eg S32, U32, FLOAT, BIT, NONE, "
"COMMAND, ZMQ."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:86
msgid "DEFAULT= This sets the starting output of the group or button."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:87
msgid "GROUP= In radiobuttons, designates the group the button interacts with."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:88
msgid ""
"GROUP_OUTPUT= sets the output the group pin will be, if this button is "
"active."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:89
msgid ""
"STATUS_PIN= If TRUE, a HAL pin will be added that reflects the current state "
"of button."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:90
msgid "TRUE_STATE= sets the output the HAL pin will be, if button is TRUE."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:91
msgid ""
"FALSE_STATE= sets the OUTPUT the HAL pin will be, if the button is FALSE."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:92
msgid ""
"TRUE_COMMAND= sets the command and arguments to be called when the button is "
"TRUE."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:93
msgid ""
"FALSE_COMMAND= sets the command and arguments to be called when the button "
"is FALSE."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:94
msgid ""
"TRUE_FUNCTION= sets the ZMQ message function and arguments to be called when "
"the button is TRUE."
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:95
msgid ""
"FALSE_FUNCTION= sets the ZMQ message function and arguments to be called "
"when the button is FALSE."
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:96
#, no-wrap
msgid "*HAL Prefix*"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:101
#, no-wrap
msgid ""
"[HAL_PREFIX]\n"
"    NAME= Yourname\n"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:104
msgid ""
"This allows one to change the prefix of the HAL pins from 'panelui' to an "
"arbitrary name."
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:105
#, no-wrap
msgid "*ZMQ Messaging Setup*"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:112
#, no-wrap
msgid ""
"[ZMQ_SETUP]\n"
"  TOPIC = 'QTVCP'\n"
"  SOCKET = 'tcp://127.0.0.1:5690'\n"
"  ENABLE = True\n"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:116
msgid ""
"This sets up and enables ZMQ based messaging.  TOPIC and SOCKET must match "
"the listening program."
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:117
#, no-wrap
msgid "*Radio Buttons*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:121
msgid ""
"Radiobutons allow only one button in the group to be active at a time.  Each "
"group has its own output pin, separate from each button in the group.  Radio "
"button definitions start with the text 'RADIO_BUTTON' inside single brackets."
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:171
#, no-wrap
msgid ""
"[RADIO_BUTTONS]\n"
"  # The double bracket section(s) define the group(s) of radio buttons.\n"
"  # The group name must be unique and is case sensitive.\n"
"  # Groups output is controlled by what button is active not directly by keycode.\n"
"  # DEFAULT references a button in the group by name and is case sensitive.\n"
"  [[group1_name]]\n"
"    KEY = NONE\n"
"    OUTPUT = FLOAT\n"
"    DEFAULT = small\n"
"    # The triple bracket sections define the buttons in this group.\n"
"    # button names must be unique and are case sensitive.\n"
"    # There must be at least two buttons in a group.\n"
"    #\n"
"    # This button, named 'small'is controller by the row 0 column 1 key.\n"
"    # It will cause the group output to be .0001 when it is pressed.\n"
"    # It has no output of it's own, but has a status\n"
"    # pin which will follow it's current state.\n"
"    # since this button is in a group, DEFAULT has no bearing.\n"
"    # since OUTPUT in not 'COMMAND' _COMMAND entries are ignored.\n"
"    [[[small]]]\n"
"      KEY = R0C1\n"
"      GROUP = group1_name\n"
"      GROUP_OUTPUT = .0001\n"
"      OUTPUT = NONE\n"
"      STATUS_PIN = True\n"
"      TRUE_STATE = TRUE\n"
"      FALSE_STATE = FALSE\n"
"      TRUE_COMMAND = NONE, NONE\n"
"      FALSE_COMMAND = NONE, NONE\n"
"      DEFAULT = false\n"
"    # This button, named 'large' is controller by the row 0 column 2 key.\n"
"    # It will cause the group output to be 1000 when it is pressed.\n"
"    # It has a S32 output of it's own, will be 20 on true and 0 on false.\n"
"    # It also has a status pin which will follow it's current state.\n"
"    # since this button is in a group, DEFAULT has no bearing.\n"
"    # since OUTPUT in not 'COMMAND' _COMMAND entries are ignored.\n"
"    [[[large]]]\n"
"      KEY = R0C2\n"
"      GROUP = group1_name\n"
"      GROUP_OUTPUT = 1000\n"
"      OUTPUT = S32\n"
"      STATUS_PIN = True\n"
"      TRUE_STATE = 20\n"
"      TRUE_COMMAND = NONE, NONE\n"
"      FALSE_COMMAND = NONE, NONE\n"
"      FALSE_STATE = 0\n"
"      DEFAULT = false\n"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:173
#, no-wrap
msgid "*Toggle Buttons*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:176
msgid ""
"Togglebuttons only change state on each press of the button.  Toggle button "
"definitions start with the text 'TOGGLE_BUTTON' inside single brackets."
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:196
#, no-wrap
msgid ""
"[TOGGLE_BUTTONS]\n"
"  # Each button name inside double brackets, must be unique and is case sensitive.\n"
"  # This button, named 'tool_change'is controller by the row 2 column 5 key.\n"
"  # It has a BIT output, will output 1 on true state and 0 on false state.\n"
"  # It also has a status pin which will follow it's current state.\n"
"  # DEFAULT sets this to true when first initialized.\n"
"  # The _COMMAND are not used since OUTPUT is not set to COMMAND but validation will\n"
"  # add the lines regardless\n"
"  [[tool_change]]\n"
"    KEY = R2C5\n"
"    OUTPUT = BIT\n"
"    TRUE_COMMAND = NONE, NONE\n"
"    FALSE_COMMAND = NONE, NONE\n"
"    STATUS_PIN = True\n"
"    DEFAULT = TRUE\n"
"    TRUE_STATE = 1\n"
"    FALSE_STATE = 0\n"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:198
#, no-wrap
msgid "*Momentary Buttons*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:201
msgid ""
"Momentary buttons are true when pressed and false when released.  Momentary "
"button definitions start with the text 'MOMENTARY_BUTTON' inside single "
"brackets."
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:224
#, no-wrap
msgid ""
"[MOMENTARY_BUTTONS]\n"
"  # Each button name inside double brackets, must be unique and is case sensitive.\n"
"  # This button, named 'spindle_rev'is controller by the row 2 column 3 key.\n"
"  # It has a COMMAND output, so will use TRUE_COMMAND and FALSE_COMMAND.\n"
"  # It also has a status pin which will follow it's current state.\n"
"  # COMMANDs will have a command name and then any required arguments\n"
"  # This TRUE_COMMAND calls an internal command to start the spindle in reverse at 200 rpm\n"
"  # If the spindle is already started, it will increase the rpm.\n"
"  # DEFAULT is not used with Momentary buttons.\n"
"  # The _STATE are not used since OUTPUT is set to COMMAND but validation will\n"
"  # add the lines regardless\n"
"  [[spindle_rev]]\n"
"    KEY = R2C3\n"
"    OUTPUT = COMMAND\n"
"    TRUE_COMMAND = SPINDLE_REVERSE_INCREASE, 200\n"
"    FALSE_COMMAND = None, NONE\n"
"    STATUS_PIN = True\n"
"    DEFAULT = FALSE\n"
"    TRUE_STATE = 1\n"
"    FALSE_STATE = 0\n"
msgstr ""

#. type: Title ==
#: src/gui/panelui.adoc:226
#, no-wrap
msgid "Internal Command reference"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:229
msgid "There are a number of internal commands you may use."
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:230
#, no-wrap
msgid "*mist_on*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:232
#, no-wrap
msgid "*mist_off*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:234
#, no-wrap
msgid "*flood_on*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:236
#, no-wrap
msgid "*flood_off*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:240
#, no-wrap
msgid "*estop_reset*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:242
#, no-wrap
msgid "*machine_off*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:244
#, no-wrap
msgid "*machine_on*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:246
#, no-wrap
msgid "*home_all*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:248
#, no-wrap
msgid "*unhome_all*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:250
#, no-wrap
msgid "*home_selected*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:252 src/gui/panelui.adoc:255
msgid "required argument: axis number (int)"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:253
#, no-wrap
msgid "*unhome_selected*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:258
#, no-wrap
msgid "*spindle_forward_adjust*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:260 src/gui/panelui.adoc:266 src/gui/panelui.adoc:271
#: src/gui/panelui.adoc:274
msgid "optional argument: starting RPM (int) - default 100"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:263
msgid ""
"Description: If the spindle is stopped it will start in the forward "
"direction.  If it is already running it will increase or decrease the rpm "
"depending on what direction the spindle is running in."
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:264
#, no-wrap
msgid "*spindle_forward*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:267
#, no-wrap
msgid "*spindle_stop*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:269
#, no-wrap
msgid "*spindle_reverse*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:272
#, no-wrap
msgid "*spindle_reverse_adjust*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:277
msgid ""
"Description: If the spindle is stopped it will start in the reverse "
"direction.  If it is already running it will increase or decrease the rpm "
"depending on what direction the spindle is running in."
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:278
#, no-wrap
msgid "*spindle_faster*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:280
msgid "Description: increases spindle speed by 100 RPM"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:281
#, no-wrap
msgid "*spindle_slower*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:283
msgid "Description: decreases spindle speed by 100 RPM, until RPM is 100"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:284
#, no-wrap
msgid "*set_linear_jog_velocity*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:286
msgid "required argument: velocity in inches per minute (float)"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:287
msgid "description: sets the jog velocity on axis 0,1,2,6,7,8 (X,Y,Z,U,V,W)"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:288
#, no-wrap
msgid "*set_angular_jog_velocity*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:290
msgid "required argument: velocity in degrees per minute (float)"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:291
msgid "description: sets the jog velocity on axis 3,4,5 (A.B.C)"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:292
#, no-wrap
msgid "*continuous_jog*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:294
msgid "required arguments: axis number (int), direction (int)"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:295
#, no-wrap
msgid "*incremental_jog*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:297
msgid ""
"required arguments: axis number (int), direction (int), distance (float)"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:298
#, no-wrap
msgid "*quill_up*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:300
msgid "optional arguments: machine Z axis absolute position (float)"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:301
msgid "Description: Move Z axis to the given machine position"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:302
#, no-wrap
msgid "*feed_hold*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:304 src/gui/panelui.adoc:321 src/gui/panelui.adoc:324
#: src/gui/panelui.adoc:333
msgid "required argument: state (bool 0 or 1)"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:305
#, no-wrap
msgid "*feed_override*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:307 src/gui/panelui.adoc:313 src/gui/panelui.adoc:316
msgid "required argument: rate (float)"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:308
#, no-wrap
msgid "*rapid_override*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:310
msgid "required argument: rate (float 0-1)"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:311
#, no-wrap
msgid "*spindle_override*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:317
#, no-wrap
msgid "*reload_tooltable*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:325
#, no-wrap
msgid "*abort*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:327
#, no-wrap
msgid "*pause*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:329
#, no-wrap
msgid "*resume*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:331
#, no-wrap
msgid "*single_block*"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:334
#, no-wrap
msgid "*smart_cycle_start*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:336
msgid "Description: If idle, starts G-code program, if paused runs one line."
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:337
#, no-wrap
msgid "*re_start line*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:339
msgid "required argument: line number (int)"
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:340
#, no-wrap
msgid "*mdi_and_return*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:342 src/gui/panelui.adoc:347
msgid "required argument: G-code command(s)"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:344
msgid ""
"Description: records the current mode, calls commands and then returns to "
"mode."
msgstr ""

#. type: Block title
#: src/gui/panelui.adoc:345
#, no-wrap
msgid "*mdi*"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:348
msgid "Description: sets mode to MDI, calls commands."
msgstr ""

#. type: Title ==
#: src/gui/panelui.adoc:349
#, no-wrap
msgid "ZMQ Messages"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:353
#, no-wrap
msgid ""
"panelui can send ZMQ based messages on button presses.\n"
"In this way panelui can interact will other programs such as QtVCP screens. +"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:366
#, no-wrap
msgid ""
"[TOGGLE_BUTTONS]\n"
"  [[zmq_test]]\n"
"    KEY = R2C3\n"
"    OUTPUT = ZMQ\n"
"    TRUE_FUNCTION = ZMQ_BUTTON, 200\n"
"    FALSE_FUNCTION = ZMQ_BUTTON, 0\n"
"    STATUS_PIN = False\n"
"    DEFAULT = FALSE\n"
"    TRUE_STATE = 1\n"
"    FALSE_STATE = 0\n"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:370
msgid ""
"Here is a sample program that will receive the message and print it to the "
"terminal. +"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:375 src/gui/qtvcp-code-snippets.adoc:839
#: src/gui/qtvcp-code-snippets.adoc:934
#, no-wrap
msgid ""
"import zmq\n"
"import json\n"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:378 src/gui/qtvcp-code-snippets.adoc:937
#, no-wrap
msgid ""
"# ZeroMQ Context\n"
"context = zmq.Context()\n"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:381 src/gui/qtvcp-code-snippets.adoc:940
#, no-wrap
msgid ""
"# Define the socket using the \"Context\"\n"
"sock = context.socket(zmq.SUB)\n"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:386 src/gui/qtvcp-code-snippets.adoc:945
#, no-wrap
msgid ""
"# Define subscription and messages with topic to accept.\n"
"topic = \"\" # all topics\n"
"sock.setsockopt(zmq.SUBSCRIBE, topic)\n"
"sock.connect(\"tcp://127.0.0.1:5690\")\n"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:390 src/gui/qtvcp-code-snippets.adoc:949
#, no-wrap
msgid ""
"while True:\n"
"    topic, message = sock.recv_multipart()\n"
"    print('{} sent message:{}'.format(topic,json.loads(message)))\n"
msgstr ""

#. type: Title ==
#: src/gui/panelui.adoc:392
#, no-wrap
msgid "Handler File Extension"
msgstr ""

#. type: Plain text
#: src/gui/panelui.adoc:398
msgid ""
"A special file can be used to add custom python code that will be available "
"as commands.  panelui_handler.py must be written in python and be placed in "
"the configuration folder.  If panelui finds a file there it will add it's "
"function calls to the available commands.  Here is an example of a handler "
"file that adds two functions - hello_world and cycle_mode:"
msgstr ""

#. type: delimited block -
#: src/gui/panelui.adoc:402
#, no-wrap
msgid "include::panelui_handler.py[]\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:18
msgid ""
"PyVCP, **Py**thon **V**irtual **C**ontrol **P**anel, is designed to give the "
"integrator the ability to customize the AXIS interface with buttons and "
"indicators to do special tasks."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:22
msgid ""
"Hardware machine control panels can use up a lot of I/O pins and can be "
"expensive. That is where Virtual Control Panels have the advantage as well "
"as it cost nothing to build a PyVCP."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:27
msgid ""
"Virtual Control Panels can be used for testing or monitoring things to "
"temporarily replace real I/O devices while debugging ladder logic, or to "
"simulate a physical panel before you build it and wire it to an I/O board."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:29
msgid "The following graphic displays many of the PyVCP widgets."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:30
#, no-wrap
msgid "PyVCP Widgets Showcase"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:31
#, no-wrap
msgid "images/pyvcp_group.png"
msgstr ""

#. type: Title ==
#: src/gui/pyvcp.adoc:33
#, no-wrap
msgid "Panel Construction"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:37
msgid ""
"The layout of a PyVCP panel is specified with an XML file that contains "
"widget tags between <pyvcp> and </pyvcp>. For example:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:44
#, no-wrap
msgid ""
"<pyvcp>\n"
"    <label text=\"This is a LED indicator\"/>\n"
"    <led/>\n"
"</pyvcp>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:46
#, no-wrap
msgid "Simple PyVCP LED Panel Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:47
#, no-wrap
msgid "images/pyvcp_mypanel.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:50
msgid "If you place this text in a file called tiny.xml, and run"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:53
#, no-wrap
msgid "halcmd loadusr pyvcp -c mypanel tiny.xml\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:62
msgid ""
"PyVCP will create the panel for you, which includes two widgets, a Label "
"with the text 'This is a LED indicator', and a LED, used for displaying the "
"state of a HAL BIT signal. It will also create a HAL component named "
"'mypanel' (all widgets in this panel are connected to pins that start with "
"'mypanel.'). Since no <halpin> tag was present inside the <led> tag, PyVCP "
"will automatically name the HAL pin for the LED widget mypanel.led.0"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:65
msgid ""
"For a list of widgets and their tags and options, see the <<sec:pyvcp:"
"widgets,widget reference>> below."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:68
msgid ""
"Once you have created your panel, connecting HAL signals to and from the "
"PyVCP pins is done with the halcmd:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:72
#, no-wrap
msgid "net <signal-name> <pin-name> <opt-direction> <opt-pin-name>signal-name\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:76
msgid ""
"If you are new to HAL, the HAL basics chapter in the Integrator Manual is a "
"good place to start."
msgstr ""

#. type: Title ==
#: src/gui/pyvcp.adoc:77
#, no-wrap
msgid "Security"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:82
msgid ""
"Parts of PyVCP files are evaluated as Python code, and can take any action "
"available to Python programs. Only use PyVCP .xml files from a source that "
"you trust."
msgstr ""

#. type: Title ==
#: src/gui/pyvcp.adoc:84
#, no-wrap
msgid "AXIS(((PyVCP with AXIS)))"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:91
msgid ""
"Since AXIS uses the same GUI toolkit (Tkinter) as PyVCP, it is possible to "
"include a PyVCP panel at either the right side or the bottom of the AXIS "
"user interface. It is not possible to display a panel in both of these "
"positions simultaneously.  A typical example is explained below."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:95
msgid ""
"In addition to or instead of displaying a PyVCP panel as described above, it "
"is possible to display one or more PyVCP panels as embedded tabs in the AXIS "
"GUI.  This is achieved by the following in the `[DISPLAY]` section of the `."
"ini` file:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:100
#, no-wrap
msgid ""
"EMBED_TAB_NAME    = Spindle\n"
"EMBED_TAB_COMMAND = pyvcp spindle.xml\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:103
msgid "The text label of the AXIS tab will display `Spindle`."
msgstr ""

#. type: Title ===
#: src/gui/pyvcp.adoc:104
#, no-wrap
msgid "Example Panel"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:110
msgid ""
"Place your PyVCP XML file describing the panel in the same directory where "
"your .ini file is. Say we we want to display the current spindle speed using "
"a Bar widget. Place the following in a file called spindle.xml:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:122
#, no-wrap
msgid ""
"<pyvcp>\n"
"    <label>\n"
"        <text>\"Spindle speed:\"</text>\n"
"    </label>\n"
"    <bar>\n"
"        <halpin>\"spindle-speed\"</halpin>\n"
"        <max_>5000</max_>\n"
"    </bar>\n"
"</pyvcp>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:129
msgid ""
"Here we've made a panel with a Label and a Bar widget, specified that the "
"HAL pin connected to the Bar should be named 'spindle-speed', and set the "
"maximum value of the bar to 5000 (see <<sec:pyvcp:widgets,widget reference>> "
"below for all options). To make AXIS aware of this file, and call it at "
"start up, we need to specify the following in the `[DISPLAY]` section of the "
"`.ini` file:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:133
#, no-wrap
msgid "PYVCP = spindle.xml\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:137
msgid ""
"If the panel should appear at the bottom of the AXIS user interface then we "
"need to specify the following in the `[DISPLAY]` section of the `.ini` file:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:141
#, no-wrap
msgid "PYVCP_POSITION = BOTTOM\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:145
msgid ""
"Anything other than BOTTOM or omitting this variable will place the PYVCP "
"panel at the right."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:150
msgid ""
"To make our widget actually display the spindle-speed it needs to be hooked "
"up to the appropriate HAL signal. A .hal file that will be run once AXIS and "
"PyVCP have started can be specified in the [HAL] section of the .ini file:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:154
#, no-wrap
msgid "POSTGUI_HALFILE = spindle_to_pyvcp.hal\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:159
msgid ""
"This change will run the HAL commands specified in 'spindle_to_pyvcp.hal'. "
"In our example the contents could look like this:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:163
#, no-wrap
msgid "net spindle-rpm-filtered => pyvcp.spindle-speed\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:170
msgid ""
"assuming that a signal called 'spindle-rpm-filtered' already exists.  Note "
"that when running together with AXIS, all PyVCP panel widget HAL pins have "
"names that start with 'pyvcp.', all PyVCP embedded tab widget HAL pins start "
"with the name specified as EMBED_TAB_NAME converted to lower case."
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:171
#, no-wrap
msgid "images/pyvcp_axis_lathe.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:175
msgid ""
"This is what the newly created PyVCP panel should look like in AXIS.  The "
"'sim/lathe' configuration is already configured this way."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:176 src/gui/tooledit.adoc:86
#, no-wrap
msgid "Stand Alone"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:180
msgid ""
"This section describes how PyVCP panels can be displayed on their own with "
"or without LinuxCNC's machine controller."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:182
msgid "To load a stand alone PyVCP panel with LinuxCNC use these commands:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:186
#, no-wrap
msgid "loadusr -Wn mypanel pyvcp -g WxH+X+Y -c mypanel <path/>panel_file.xml\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:190
msgid ""
"You would use this if you wanted a floating panel or a panel with a GUI "
"other than AXIS."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:198
msgid ""
"'-Wn panelname' - makes HAL wait for the component 'panelname' to finish "
"loading ('become ready' in HAL speak) before processing more HAL commands. "
"This is important because PyVCP panels export HAL pins, and other HAL "
"components will need them present to connect to them. Note the capital W and "
"lowercase n. If you use the -Wn option you must use the -c option to name "
"the panel."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:204
msgid ""
"'pyvcp < -g> < -c> panel.xml' - builds the panel with the optional geometry "
"and/or panelname from the XML panel file. The panel.xml can be any name that "
"ends in .xml. The .xml file is the file that describes how to build the "
"panel. You must add the path name if the panel is not in the directory that "
"the HAL script is in."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:210
msgid ""
"'-g <WxH><+X+Y>' - specifies the geometry to be used when constructing the "
"panel. The syntax is 'Width x Height + X Anchor + Y Anchor'. You can set the "
"size or position or both. The anchor point is the upper left corner of the "
"panel. An example is -g 250x500+800+0 This sets the panel at 250 pixels "
"wide, 500 pixels tall, and anchors it at X800 Y0."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:213
msgid ""
"'-c panelname' - tells PyVCP what to call the component and also the title "
"of the window. The panelname can be any name without spaces."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:215
msgid "To load a 'stand alone' PyVCP panel without LinuxCNC use this command:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:219
#, no-wrap
msgid "loadusr -Wn mypanel pyvcp -g 250x500+800+0 -c mypanel mypanel.xml\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:222
msgid "The minimum command to load a PyVCP panel is:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:226
#, no-wrap
msgid "loadusr pyvcp mypanel.xml\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:230
msgid ""
"You would use this if you want a panel without LinuxCNC's machine controller "
"such as for testing or a standalone DRO."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:242
msgid ""
"The loadusr command is used when you also load a component that will stop "
"HAL from closing until it's done. If you loaded a panel and then loaded "
"Classic Ladder using 'loadusr -w classicladder', CL would hold HAL open (and "
"the panel)  until you closed CL.  The '-Wn' above means wait for the "
"component '-Wn \"name\"' to become ready.  ('name' can be any name. Note the "
"capital W and lowercase n.)  The -c tells PyVCP to build a panel with the "
"name 'panelname' using the info in 'panel_file_name.xml'.  The name "
"'panel_file_name.xml' can be any name but must end in .xml - it is the file "
"that describes how to build the panel. You must add the path name if the "
"panel is not in the directory that the HAL script is in."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:246
msgid ""
"An optional command to use if you want the panel to stop HAL from continuing "
"commands / shutting down. After loading any other components you want the "
"last HAL command to be:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:250
#, no-wrap
msgid "waitusr panelname\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:255
msgid ""
"This tells HAL to wait for component 'panelname' to close before continuing "
"HAL commands. This is usually set as the last command so that HAL shuts down "
"when the panel is closed."
msgstr ""

#. type: Title ==
#: src/gui/pyvcp.adoc:257
#, no-wrap
msgid "Widgets(((PyVCP Widgets Reference)))"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:266
msgid ""
"HAL signals come in two variants, bits and numbers. Bits are off/on signals. "
"Numbers can be 'float', 's32' or 'u32'. For more information on HAL data "
"types see the <<sec:hal-data,HAL Data>> section. The PyVCP widget can either "
"display the value of the signal with an indicator widget, or modify the "
"signal value with a control widget. Thus there are four classes of PyVCP "
"widgets that you can connect to a HAL signal. A fifth class of helper "
"widgets allow you to organize and label your panel."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:268
msgid "Widgets for indicating 'bit' signals: `led`, `rectled`."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:269
msgid ""
"Widgets for controlling 'bit' signals: `button`, `checkbutton`, "
"`radiobutton`."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:270
msgid ""
"Widgets for indicating 'number' signals: `number`, `s32`, `u32`, `bar`, "
"`meter`."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:271
msgid ""
"Widgets for controlling 'number' signals: `spinbox`, `scale`, `jogwheel`."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:272
msgid "Helper widgets: `hbox`, `vbox`, `table`, `label`, `labelframe`."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:277
msgid ""
"Each widget is described briefly, followed by the markup used, and a screen "
"shot. All tags inside the main widget tag are optional."
msgstr ""

#. type: Title ===
#: src/gui/pyvcp.adoc:278
#, no-wrap
msgid "General Notes"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:283
msgid ""
"At the present time, both a tag-based and an attribute-based syntax are "
"supported. For instance, the following XML fragments are treated identically:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:287
#, no-wrap
msgid "<led halpin=\"my-led\"/>\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:294
#, no-wrap
msgid "<led><halpin>\"my-led\"</halpin></led>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:298
msgid ""
"When the attribute-based syntax is used, the following rules are used to "
"turn the attributes value into a Python value:"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:301
msgid ""
"If the first character of the attribute is one of the following, it is "
"evaluated as a Python expression: `{([\"'` ."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:302
msgid "If the string is accepted by int(), the value is treated as an integer."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:304
msgid ""
"If the string is accepted by float(), the value is treated as floating-point."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:305
msgid "Otherwise, the string is accepted as a string."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:308
msgid ""
"When the tag-based syntax is used, the text within the tag is always "
"evaluated as a Python expression."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:310
msgid "The examples below show a mix of formats."
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: src/gui/pyvcp.adoc:311 src/hal/comp.adoc:398 html/gcode.html:174
#, no-wrap
msgid "Comments"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:314
msgid "To add a comment use the xml syntax for a comment."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:318
#, no-wrap
msgid "<!-- My Comment -->\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:320
#, no-wrap
msgid "Editing the XML file"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:324
msgid ""
"Edit the XML file with a text editor. In most cases you can right click on "
"the file and select 'open with text editor' or similar."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:326
#, no-wrap
msgid "Colors"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:331
msgid ""
"Colors can be specified using the X11 rgb colors by name 'gray75' or hex "
"'#0000ff'. A complete list is located here http://sedition.com/perl/rgb."
"html[http://sedition.com/perl/rgb.html]."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:333
msgid "Common Colors (colors with numbers indicate shades of that color)"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:335
msgid "white"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:337
msgid "blue and blue1 - 4"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:338
msgid "cyan and cyan1 - 4"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:339
msgid "green and green1 - 4"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:340
msgid "yellow and yellow1 - 4"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:341
msgid "red and red1 - 4"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:342
msgid "purple and purple1 - 4"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:343
msgid "gray and gray0 - 100"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:350
msgid ""
"HAL pins provide a means to 'connect' the widget to something. Once you "
"create a HAL pin for your widget you can 'connect' it to another HAL pin "
"with a 'net' command in a .hal file. For more information on the 'net' "
"command see the <<sec:hal-commands,HAL Commands>> section."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:354
msgid "A label is a way to add text to your panel."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:356
msgid "'<label></label>' - creates a label."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:358
msgid ""
"'<text>\"text\"</text>' - the text to put in your label, a blank label can "
"be used as a spacer to align other objects."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:359
msgid ""
"'<font>(\"Helvetica\",20)</font>' - specify the font and size of the text."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:361
msgid ""
"'<relief>FLAT</relief>' - specify the border around the label ('FLAT', "
"'RAISED', 'SUNKEN') default is 'FLAT'."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:363
msgid ""
"'<bd>_n_</bd>' - where _n_ is the border width when 'RAISED' or 'SUNKEN' "
"borders are used."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:364
msgid ""
"'<padx>_n_</padx>' - where _n_ is the amount of extra horizontal extra space."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:365
msgid ""
"'<pady>_n_</pady>' - where _n_ is the amount of extra vertical extra space."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:368
msgid ""
"The label has an optional disable pin that is created when you add "
"'<disable_pin>True</disable_pin>'."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:375
#, no-wrap
msgid ""
"<label>\n"
"    <text>\"This is a Label:\"</text>\n"
"    <font>(\"Helvetica\",20)</font>\n"
"</label>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:378 src/gui/pyvcp.adoc:453 src/gui/pyvcp.adoc:516
#: src/gui/pyvcp.adoc:551 src/gui/pyvcp.adoc:575 src/gui/pyvcp.adoc:608
#: src/gui/pyvcp.adoc:640 src/gui/pyvcp.adoc:690 src/gui/pyvcp.adoc:715
#: src/gui/pyvcp.adoc:743 src/gui/pyvcp.adoc:783 src/gui/pyvcp.adoc:821
#: src/gui/pyvcp.adoc:848 src/gui/pyvcp.adoc:965 src/gui/pyvcp.adoc:1014
#: src/gui/pyvcp.adoc:1041 src/gui/pyvcp.adoc:1071 src/gui/pyvcp.adoc:1114
msgid "The above code produced this example:"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:379
#, no-wrap
msgid "Simple Label Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:380
#, no-wrap
msgid "images/pyvcp_label.png"
msgstr ""

#. type: Title ===
#: src/gui/pyvcp.adoc:382
#, no-wrap
msgid "Multi_Label"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:385
msgid "An extension of the text label."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:388
msgid ""
"Selectable text label, can display up to 6 label legends when associated bit "
"pin is activated."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:391
msgid ""
"Attach each legend pin to a signal and get a descriptive label when the "
"signal is TRUE."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:394
msgid ""
"If more than one legend pin is TRUE, the highest numbered 'TRUE' legend will "
"be displayed."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:397
msgid ""
"If a disable pin is created with '<disable_pin>True</disable_pin>' and that "
"pin is set to true the label changes to a grayed out state."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:405
#, no-wrap
msgid ""
"<multilabel>\n"
"    <legends>[\"Label1\", \"Label2\", \"Label3\", \"Label4\", \"Label5\", \"Label6\"]</legends>\n"
"    <font>(\"Helvetica\",20)</font>\n"
"    <disable_pin>True</disable_pin>\n"
"</multilabel>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:408
msgid "The above example would create the following pins."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:417
#, no-wrap
msgid ""
"pyvcp.multilabel.0.disable\n"
"pyvcp.multilabel.0.legend0\n"
"pyvcp.multilabel.0.legend1\n"
"pyvcp.multilabel.0.legend2\n"
"pyvcp.multilabel.0.legend3\n"
"pyvcp.multilabel.0.legend4\n"
"pyvcp.multilabel.0.legend5\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:421
msgid ""
"If you have more than one multilabel the pins created would increment the "
"number like this 'pyvcp.multilabel.1.legend1'."
msgstr ""

#. type: Title ===
#: src/gui/pyvcp.adoc:422
#, no-wrap
msgid "LEDs"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:426
msgid ""
"A LED is used to indicate the status of a 'bit' halpin. The LED color will "
"be on_color when the halpin is true, and off_color otherwise."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:428
msgid "'<led></led>' - makes a round LED"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:429
msgid "'<rectled></rectled>' - makes a rectangle LED"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:430
msgid ""
"'<halpin>__name__</halpin>' - _name_ of the pin, default is 'led.__n__', "
"where _n_ is an integer that is incremented for each LED."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:431
msgid ""
"'<size>__n__</size>' - _n_ is the size of the led in pixels, default is 20."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:433
msgid ""
"'<on_color>__color__</on_color>' - sets the color of the LED to _color_ when "
"the pin is true.  default is 'green'. See section on <<pyvcp:colors,colors>> "
"for more info."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:435
msgid ""
"'<off_color>__color__</off_color>' - sets the color of the LED to _color_ "
"when the pin is false. default is 'red'."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:436
msgid "'<height>__n__</height>' - sets the height of the LED in pixels."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:437
msgid "'<width>__n__</width>' - sets the width of the LED in pixels."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:438
msgid ""
"'<disable_pin>false</disable_pin>' - when true adds a disable pin to the led."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:439
msgid ""
"'<disabled_color>__color__</disabled_color>' - sets the color of the LED to "
"_color_ when the pin is disabled."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:440
#, no-wrap
msgid "Round LED"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:450
#, no-wrap
msgid ""
"<led>\n"
"    <halpin>\"my-led\"</halpin>\n"
"    <size>50</size>\n"
"    <on_color>\"green\"</on_color>\n"
"    <off_color>\"red\"</off_color>\n"
"</led>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:454
#, no-wrap
msgid "Round LED Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:455
#, no-wrap
msgid "images/pyvcp_led.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:457
#, no-wrap
msgid "Rectangle LED"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:460
msgid "This is a variant of the 'led' widget."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:474
#, no-wrap
msgid ""
"<vbox>\n"
"    <relief>RIDGE</relief>\n"
"    <bd>6</bd>\n"
"    <rectled>\n"
"        <halpin>\"my-led\"</halpin>\n"
"        <height>\"50\"</height>\n"
"        <width>\"100\"</width>\n"
"        <on_color>\"green\"</on_color>\n"
"        <off_color>\"red\"</off_color>\n"
"    </rectled>\n"
"</vbox>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:478
msgid ""
"The above code produced this example.  Also showing a vertical box with "
"relief."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:479
#, no-wrap
msgid "Simple Rectangle LED Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:480
#, no-wrap
msgid "images/pyvcp_rectled.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:487
msgid ""
"A button is used to control a BIT pin. The pin will be set True when the "
"button is pressed and held down, and will be set False when the button is "
"released. Buttons can use the following optional options."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:489
msgid ""
"'<padx>__n__</padx>' - where _n_ is the amount of extra horizontal extra "
"space."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:490
msgid ""
"'<pady>__n__</pady>' - where _n_ is the amount of extra vertical extra space."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:491
msgid ""
"'<activebackground>\"__color__\"</activebackground>' - the cursor over color "
"set to _color_."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:492
msgid "'<fg>\"__color__\"</fg>' - the foreground color set to _color_."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:493
msgid "'<bg>\"__color__\"</bg>' - the background color set to _color_."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:494
msgid "'<disable_pin>True</disable_pin>' - disable pin."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:495
#, no-wrap
msgid "Text Button"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:499
msgid ""
"A text button controls a 'bit' halpin. The halpin is false until the button "
"is pressed then it is true. The button is a momentary button."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:502
msgid ""
"The text button has an optional disable pin that is created when you add "
"<disable_pin>True</disable_pin>."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:513
#, no-wrap
msgid ""
"<button>\n"
"    <halpin>\"ok-button\"</halpin>\n"
"    <text>\"OK\"</text>\n"
"</button>\n"
"<button>\n"
"    <halpin>\"abort-button\"</halpin>\n"
"    <text>\"Abort\"</text>\n"
"</button>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:517
#, no-wrap
msgid "Simple Buttons Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:518
#, no-wrap
msgid "images/pyvcp_button.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:520
#, no-wrap
msgid "Checkbutton"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:528
msgid ""
"A checkbutton controls a bit halpin. The halpin will be set True when the "
"button is checked, and false when the button is unchecked. The checkbutton "
"is a toggle type button. The checkbuttons may be set initially as TRUE or "
"FALSE the initval field A pin called changepin is also created "
"automatically, which can toggle the Checkbutton via HAL, if the value linked "
"is changed, to update the display remotely."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:529
#, no-wrap
msgid "Unchecked button"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:530
#, no-wrap
msgid "images/pyvcp_checkbutton1.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:532
#, no-wrap
msgid "Checked button"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:533
#, no-wrap
msgid "images/pyvcp_checkbutton2.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:535
#, no-wrap
msgid "Checkbutton Code Example"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:548
#, no-wrap
msgid ""
"<checkbutton>\n"
"    <halpin>\"coolant-chkbtn\"</halpin>\n"
"    <text>\"Coolant\"</text>\n"
"    <initval>1</initval>\n"
"</checkbutton>\n"
"<checkbutton>\n"
"    <halpin>\"chip-chkbtn\"</halpin>\n"
"    <text>\"Chips    \"</text>\n"
"    <initval>0</initval>\n"
"</checkbutton>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:552
#, no-wrap
msgid "Simple Checkbutton Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:553
#, no-wrap
msgid "images/pyvcp_checkbutton.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:557
#, no-wrap
msgid ""
"The coolant checkbutton is checked.\n"
"Notice the extra spaces in the \"Chips\" text to keep the checkbuttons aligned."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:558
#, no-wrap
msgid "Radiobutton"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:564
msgid ""
"A radiobutton will set one of the halpins true. The other pins are set "
"false.  The initval field may be set to choose the default selection when "
"the panel displays. Only one radio button may be set to TRUE (1) or only the "
"highest number pin set TRUE will have that value."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:572
#, no-wrap
msgid ""
"<radiobutton>\n"
"    <choices>[\"one\",\"two\",\"three\"]</choices>\n"
"    <halpin>\"my-radio\"</halpin>\n"
"    <initval>0</initval>\n"
"</radiobutton>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:576
#, no-wrap
msgid "Simple Radiobutton Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:577
#, no-wrap
msgid "images/pyvcp_radiobutton.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:583
#, no-wrap
msgid ""
"Note that the HAL pins in the example above will be named my-radio.one, my-radio.two, and my-radio.three.\n"
"In the image above, 'one' is the selected value.\n"
"Use this tag `<orient>HORIZONTAL</orient>` to display horizontally."
msgstr ""

#. type: Title ===
#: src/gui/pyvcp.adoc:584
#, no-wrap
msgid "Number Displays"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:587
msgid "Number displays can use the following formatting options"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:589
msgid "`<font>(\"Font Name\",n)</font>`, where _n_ is the font size."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:590
msgid "`<width>_n_</width>`, where _n_ is the overall width of the space used."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:591
msgid ""
"`<justify>_pos_</justify>`, where _pos_ is LEFT, CENTER, or RIGHT (doesn't "
"work)."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:592
msgid ""
"`<padx>_n_</padx>`, where _n_ is the amount of extra horizontal extra space."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:593
msgid ""
"`<pady>_n_</pady>`, where _n_ is the amount of extra vertical extra space."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:594
#, no-wrap
msgid "Number"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:597
msgid "The number widget displays the value of a float signal."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:605
#, no-wrap
msgid ""
"<number>\n"
"    <halpin>\"my-number\"</halpin>\n"
"    <font>(\"Helvetica\",24)</font>\n"
"    <format>\"+4.4f\"</format>\n"
"</number>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:609
#, no-wrap
msgid "Simple Number Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:610
#, no-wrap
msgid "images/pyvcp_number.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:615
msgid ""
"_<font>_ - is a Tkinter font type and size specification. One font that will "
"show up to at least size 200 is 'courier 10 pitch', so for a really big "
"Number widget you could specify:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:619
#, no-wrap
msgid "<font>(\"courier 10 pitch\",100)</font>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:623
msgid ""
"_<format>_ - is a 'C-style' format specified that determines how the number "
"is displayed."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:624
#, no-wrap
msgid "s32 Number"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:628
msgid ""
"The s32 number widget displays the value of a s32 number. The syntax is the "
"same as 'number' except the name which is <s32>. Make sure the width is wide "
"enough to cover the largest number you expect to use."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:637
#, no-wrap
msgid ""
"<s32>\n"
"    <halpin>\"my-number\"</halpin>\n"
"    <font>(\"Helvetica\",24)</font>\n"
"    <format>\"6d\"</format>\n"
"    <width>6</width>\n"
"</s32>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:641
#, no-wrap
msgid "Simple s32 Number Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:642
#, no-wrap
msgid "images/pyvcp_s32.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:644
#, no-wrap
msgid "u32 Number"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:647
msgid ""
"The u32 number widget displays the value of a u32 number. The syntax is the "
"same as 'number' except the name which is <u32>."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:648
#, no-wrap
msgid "Bar"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:655
msgid ""
"A bar widget displays the value of a FLOAT signal both graphically using a "
"bar display and numerically.  The color of the bar can be set as one color "
"throughout its range (default using fillcolor) or set to change color "
"dependent upon the value of the halpin (range1, range2 range3 must all be "
"set, if you only want 2 ranges, set 2 of them to the same color)."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:657
msgid ""
"`<halpin>\"my-bar\"</halpin>` (text), derives and sets the pin name: `pyvcp."
"my-bar`."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:658
msgid "`<min_>0</min_>` (number), sets the minimum scale."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:659
msgid "`<max_>140</max_>` (number), sets the maximum scale."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:660
msgid ""
"`<format>\"3.1f\"</format>` (text), sets the number format using Python "
"number formatting."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:661
msgid "`<bgcolor>\"grey\"</bgcolor>` (text), sets the background color."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:662
msgid "`<fillcolor>\"red\"</fillcolor>` (text), sets the fill color."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:663
msgid ""
"`<range1>0,100,\"green\"</range1>` (number, number, text), sets the first "
"range and color."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:664
msgid ""
"`<range2>101,135,\"orange\"</range2>` (number, number, text), sets the first "
"range and color."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:665
msgid ""
"`<range3>136, 150,\"red\"</range3>` number, number, text), sets the first "
"range and color."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:666
msgid "`<canvas_width>200</canvas_width>` (number), sets the overall width."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:667
msgid "`<canvas_height>50</canvas_height>` (number), sets the overall height."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:668
msgid ""
"`<bar_height>30</bar_height>` (number), sets the bar height, must be less "
"than canvas_height."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:669
msgid ""
"`<bar_width>150</bar_width>` (number), sets the bar width, must be less than "
"canvas_width."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:687
#, no-wrap
msgid ""
"<bar>\n"
"    <halpin>\"my-bar\"</halpin>\n"
"    <min_>0</min_>\n"
"    <max_>123</max_>\n"
"    <format>\"3.1f\"</format>\n"
"    <bgcolor>\"grey\"</bgcolor>\n"
"    <fillcolor>\"red\"</fillcolor>\n"
"    <range1>0,100,\"green\"</range1>\n"
"    <range2>101,135,\"orange\"</range2>\n"
"    <range3>136, 150,\"red\"</range3>\n"
"    <canvas_width>200</canvas_width>\n"
"    <canvas_height>50</canvas_height>\n"
"    <bar_height>30</bar_height>\n"
"    <bar_width>150</bar_width>\n"
"</bar>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:691
#, no-wrap
msgid "Simple Bar Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:692
#, no-wrap
msgid "images/pyvcp_bar.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:696
msgid ""
"Meter displays the value of a FLOAT signal using a traditional dial "
"indicator."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:712
#, no-wrap
msgid ""
"<meter>\n"
"    <halpin>\"mymeter\"</halpin>\n"
"    <text>\"Battery\"</text>\n"
"    <subtext>\"Volts\"</subtext>\n"
"    <size>250</size>\n"
"    <min_>0</min_>\n"
"    <max_>15.5</max_>\n"
"    <majorscale>1</majorscale>\n"
"    <minorscale>0.2</minorscale>\n"
"    <region1>(14.5,15.5,\"yellow\")</region1>\n"
"    <region2>(12,14.5,\"green\")</region2>\n"
"    <region3>(0,12,\"red\")</region3>\n"
"</meter>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:716
#, no-wrap
msgid "Simple Meter Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:717
#, no-wrap
msgid "images/pyvcp_meter.png"
msgstr ""

#. type: Title ===
#: src/gui/pyvcp.adoc:719
#, no-wrap
msgid "Number Inputs"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:721
#, no-wrap
msgid "Spinbox"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:727
msgid ""
"A spinbox controls a FLOAT pin. You increase or decrease the value of the "
"pin by either pressing on the arrows, or pointing at the spinbox and rolling "
"your mouse-wheel. If the param_pin field is set TRUE(1), a pin will be "
"created that can be used to set the spinbox to an initial value and to "
"remotely alter its value without HID input."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:740
#, no-wrap
msgid ""
"<spinbox>\n"
"    <halpin>\"my-spinbox\"</halpin>\n"
"    <min_>-12</min_>\n"
"    <max_>33</max_>\n"
"    <initval>0</initval>\n"
"    <resolution>0.1</resolution>\n"
"    <format>\"2.3f\"</format>\n"
"    <font>(\"Arial\",30)</font>\n"
"    <param_pin>1</param_pin>\n"
"</spinbox>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:744
#, no-wrap
msgid "Simple Spinbox Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:745
#, no-wrap
msgid "images/pyvcp_spinbox.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:747 src/plasma/qtplasmac.adoc:2740
#, no-wrap
msgid "Scale"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:756
msgid ""
"A scale controls a float or a s32 pin. You increase or decrease the value of "
"the pin be either dragging the slider, or pointing at the scale and rolling "
"your mouse-wheel. The 'halpin' will have both '-f' and '-i' added to it to "
"form the float and s32 pins. Width is the width of the slider in vertical "
"and the height of the slider in horizontal orientation. If the param_pin "
"field is set TRUE(1), a pin will be created that can be used to set the "
"spinbox to an initial value and to remotely alter its value without HID "
"input."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:780
#, no-wrap
msgid ""
"<scale>\n"
"    <font>(\"Helvetica\",16)</font>\n"
"    <width>\"25\"</width>\n"
"    <halpin>\"my-hscale\"</halpin>\n"
"    <resolution>0.1</resolution>\n"
"    <orient>HORIZONTAL</orient>\n"
"    <initval>-15</initval>\n"
"    <min_>-33</min_>\n"
"    <max_>26</max_>\n"
"    <param_pin>1</param_pin>\n"
"</scale>\n"
"<scale>\n"
"    <font>(\"Helvetica\",16)</font>\n"
"    <width>\"50\"</width>\n"
"    <halpin>\"my-vscale\"</halpin>\n"
"    <resolution>1</resolution>\n"
"    <orient>VERTICAL</orient>\n"
"    <min_>100</min_>\n"
"    <max_>0</max_>\n"
"    <param_pin>1</param_pin>\n"
"</scale>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:784
#, no-wrap
msgid "Simple Scale Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:785
#, no-wrap
msgid "images/pyvcp_scale.png"
msgstr ""

#. type: delimited block =
#: src/gui/pyvcp.adoc:791
msgid ""
"Note that by default it is \"min\" which is displayed even if it is greater "
"than \"max\", unless \"min\" is negative."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:793
#, no-wrap
msgid "Dial"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:801
msgid ""
"The Dial outputs a HAL float and reacts to both mouse wheel and dragging. "
"Double left click to increase the resolution and double right click to "
"reduce the resolution by one digit. The output is capped by the min and max "
"values. The <cpr> is how many tick marks are on the outside of the ring "
"(beware of high numbers). If the param_pin field is set TRUE(1), a pin will "
"be created that can be used to set the spinbox to an initial value and to "
"remotely alter its value without HID input."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:818
#, no-wrap
msgid ""
"<dial>\n"
"    <size>200</size>\n"
"    <cpr>100</cpr>\n"
"    <min_>-15</min_>\n"
"    <max_>15</max_>\n"
"    <text>\"Dial\"</text>\n"
"    <initval>0</initval>\n"
"    <resolution>0.001</resolution>\n"
"    <halpin>\"anaout\"</halpin>\n"
"    <dialcolor>\"yellow\"</dialcolor>\n"
"    <edgecolor>\"green\"</edgecolor>\n"
"    <dotcolor>\"black\"</dotcolor>\n"
"    <param_pin>1</param_pin>\n"
"</dial>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:822
#, no-wrap
msgid "Simple Dial Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:823
#, no-wrap
msgid "images/pyvcp_dial.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:825
#, no-wrap
msgid "Jogwheel"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:830
msgid ""
"Jogwheel mimics a real jogwheel by outputting a FLOAT pin which counts up or "
"down as the wheel is turned, either by dragging in a circular motion, or by "
"rolling the mouse-wheel."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:832
msgid "Optional tags:"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:833
msgid "'<text>\"My Text\"</text>' displays text"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:834
msgid ""
"'<bgcolor>\"grey\"</bgcolor> <fillcolor>\"green\"</fillcolor>' background & "
"active colors"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:835
msgid ""
"'<scale_pin>1</scale_pin>' creates scale text and a FLOAT.scale pin to "
"display jog scale"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:837
msgid ""
"'<clear_pin>1</clear_pin>' creates DRO and a BIT.reset pin to reset DRO. "
"Needs scale_pin for scaled DRO. shift+click resets DRO also"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:845
#, no-wrap
msgid ""
"<jogwheel>\n"
"    <halpin>\"my-wheel\"</halpin>\n"
"    <cpr>45</cpr>\n"
"    <size>250</size>\n"
"</jogwheel>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:849
#, no-wrap
msgid "Simple Jogwheel Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:850
#, no-wrap
msgid "images/pyvcp_jogwheel.png"
msgstr ""

#. type: Title ===
#: src/gui/pyvcp.adoc:852
#, no-wrap
msgid "Images"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:858
msgid ""
"Image displays use only .gif image format. All of the images must be the "
"same size. The images must be in the same directory as your ini file (or in "
"the current directory if running from the command line with halrun/halcmd)."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:859
#, no-wrap
msgid "Image Bit"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:863
msgid ""
"The 'image_bit' toggles between two images by setting the halpin to true or "
"false."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:871
#, no-wrap
msgid ""
"<image name='fwd' file='fwd.gif'/>\n"
"<image name='rev' file='rev.gif'/>\n"
"<vbox>\n"
"    <image_bit halpin='selectimage' images='fwd rev'/>\n"
"</vbox>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:877
msgid ""
"This example was produced from the above code.  Using the two image files "
"fwd.gif and rev.gif.  FWD is displayed when 'selectimage' is false and REV "
"is displayed when 'selectimage' is true."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:878
#, no-wrap
msgid "Selectimage False Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:879 src/gui/pyvcp.adoc:908
#, no-wrap
msgid "images/pyvcp_image01.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:881
#, no-wrap
msgid "Selectimage True Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:882 src/gui/pyvcp.adoc:911
#, no-wrap
msgid "images/pyvcp_image02.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:884
#, no-wrap
msgid "Image u32"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:890
msgid ""
"The 'image_u32' is the same as 'image_bit' except you have essentially an "
"unlimited number of images and you 'select' the image by setting the halpin "
"to a integer value with 0 for the first image in the images list and 1 for "
"the second image etc."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:899
#, no-wrap
msgid ""
"<image name='stb' file='stb.gif'/>\n"
"<image name='fwd' file='fwd.gif'/>\n"
"<image name='rev' file='rev.gif'/>\n"
"<vbox>\n"
"    <image_u32 halpin='selectimage' images='stb fwd rev'/>\n"
"</vbox>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:903
msgid ""
"The above code produced the following example by adding the stb.gif image."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:904
#, no-wrap
msgid "Simple image_u32 Example with halpin=0"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:905
#, no-wrap
msgid "images/pyvcp_image_u32_01.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:907
#, no-wrap
msgid "Simple image_u32 Example withhalpin=1"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:910
#, no-wrap
msgid "Simple image_u32 Example withhalpin=2"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:915
msgid ""
"Notice that the default is the min even though it is set higher than max "
"unless there is a negative min."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:920
msgid ""
"Containers are widgets that contain other widgets. Containers are used to "
"group other widgets."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:921
#, no-wrap
msgid "Borders"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:926
msgid ""
"Container borders are specified with two tags used together. The <relief> "
"tag specifies the type of border and the <bd> specifies the width of the "
"border."
msgstr ""

#. type: Labeled list
#: src/gui/pyvcp.adoc:927
#, no-wrap
msgid "'<relief>_type_</relief>'"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:929
msgid "Where _type_ is FLAT, SUNKEN, RAISED, GROOVE, or RIDGE."
msgstr ""

#. type: Labeled list
#: src/gui/pyvcp.adoc:930
#, no-wrap
msgid "'<bd>_n_</bd>'"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:932
msgid "Where _n_ is the width of the border."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:962
#, no-wrap
msgid ""
"<hbox>\n"
"    <button>\n"
"        <relief>FLAT</relief>\n"
"        <text>\"FLAT\"</text>\n"
"        <bd>3</bd>\n"
"    </button>\n"
"    <button>\n"
"        <relief>SUNKEN</relief>\n"
"        <text>\"SUNKEN\"</text>\n"
"        <bd>3</bd>\n"
"    </button>\n"
"    <button>\n"
"        <relief>RAISED</relief>\n"
"        <text>\"RAISED\"</text>\n"
"        <bd>3</bd>\n"
"    </button>\n"
"    <button>\n"
"        <relief>GROOVE</relief>\n"
"        <text>\"GROOVE\"</text>\n"
"        <bd>3</bd>\n"
"    </button>\n"
"    <button>\n"
"        <relief>RIDGE</relief>\n"
"        <text>\"RIDGE\"</text>\n"
"        <bd>3</bd>\n"
"    </button>\n"
"</hbox>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:966
#, no-wrap
msgid "Containers Borders Showcase"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:967
#, no-wrap
msgid "images/pyvcp_borders.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:969
#, no-wrap
msgid "Fill"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:974
msgid ""
"Container fill are specified with the '<boxfill fill=\"\"/>' tag. Valid "
"entries are none, x, y and both. The x fill is a horizontal fill and the y "
"fill is a vertical fill"
msgstr ""

#. type: Labeled list
#: src/gui/pyvcp.adoc:975
#, no-wrap
msgid "`<boxfill fill =\"style\"/>`"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:977
msgid ""
"Where 'style' is none, x, y, or both. Default is x for Vbox and y for Hbox."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:978
#, no-wrap
msgid "Anchor"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:984
msgid ""
"Container anchors are specified with the <boxanchor anchor=\"\"/> tag. The "
"anchor specifies where to position each slave in its parcel. Valid entries "
"are center, n, s, e, w, for center, north, south, east and west. "
"Combinations like sw, se, nw and ne are also valid."
msgstr ""

#. type: Labeled list
#: src/gui/pyvcp.adoc:985
#, no-wrap
msgid "`<boxanchor anchor=\"position\"/>`"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:987
msgid ""
"Where 'position' is center, n, s, e, w, ne, nw, se or sw. Default is center."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:988
#, no-wrap
msgid "Expand"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:992
msgid ""
"Container expand is specified with the boolean <boxexpand expand=\"\"/> "
"tag.  Valid entries are yes, no."
msgstr ""

#. type: Labeled list
#: src/gui/pyvcp.adoc:993
#, no-wrap
msgid "`<boxexpand expand=\"boolean\"/>`"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:995
msgid "Where 'boolean' is either yes or no. Default is yes."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:996
#, no-wrap
msgid "Hbox"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:1000
msgid ""
"Use an Hbox when you want to stack widgets horizontally next to each other."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:1011
#, no-wrap
msgid ""
"<hbox>\n"
"    <relief>RIDGE</relief>\n"
"    <bd>6</bd>\n"
"    <label><text>\"a hbox:\"</text></label>\n"
"    <led></led>\n"
"    <number></number>\n"
"    <bar></bar>\n"
"</hbox>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:1015
#, no-wrap
msgid "Simple hbox Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:1016
#, no-wrap
msgid "images/pyvcp_hbox.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:1022
msgid ""
"Inside an Hbox, you can use the '<boxfill fill=\"\"/>', '<boxanchor anchor="
"\"\"/>', and '<boxexpand expand=\"\"/>' tags to choose how items in the box "
"behave when the window is re-sized.The default is 'fill=\"y\"', 'anchor="
"\"center\"', 'expand=\"yes\"' for a Hbox."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:1023
#, no-wrap
msgid "Vbox"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:1027
msgid ""
"Use a Vbox when you want to stack widgets vertically on top of each other."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:1038
#, no-wrap
msgid ""
"<vbox>\n"
"    <relief>RIDGE</relief>\n"
"    <bd>6</bd>\n"
"    <label><text>\"a vbox:\"</text></label>\n"
"    <led></led>\n"
"    <number></number>\n"
"    <bar></bar>\n"
"</vbox>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:1042
#, no-wrap
msgid "Simple vbox Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:1043
#, no-wrap
msgid "images/pyvcp_vbox.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:1049
msgid ""
"Inside a Vbox, you can use the '<boxfill fill=\"\"/>', '<boxanchor anchor="
"\"\"/>', jnd '<boxexpand expand=\"\"/>' tags to choose how items in the box "
"behave when the window is re-sized. The default is 'fill=\"x\"', 'anchor="
"\"center\"', 'expand=\"yes\"' for a Hbox."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:1050
#, no-wrap
msgid "Labelframe"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:1054
msgid ""
"A labelframe is a frame with a groove and a label at the upper-left corner."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:1057
#, no-wrap
msgid "<labelframe text=\"Label: Leds groupées\">\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:1068
#, no-wrap
msgid ""
"<labelframe text=\"Group Title\">\n"
"    <font>(\"Helvetica\",16)</font>\n"
"    <hbox>\n"
"    <led/>\n"
"    <led/>\n"
"    </hbox>\n"
"</labelframe>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:1072
#, no-wrap
msgid "Simple labelframe Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:1073
#, no-wrap
msgid "images/pyvcp_labelframe.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:1075
#, no-wrap
msgid "Table"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:1083
msgid ""
"A table is a container that allows layout in a grid of rows and columns. "
"Each row is started by a '<tablerow/>' tag. A contained widget may span rows "
"or columns through the use of the '<tablespan rows= cols=/>' tag. The sides "
"of the cells to which the contained widgets \"stick\" may be set through the "
"use of the '<tablesticky sticky=/>' tag. A table expands on its flexible "
"rows and columns."
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:1084
#, no-wrap
msgid "Table Code Example"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:1111
#, no-wrap
msgid ""
"<table flexible_rows=\"[2]\" flexible_columns=\"[1,4]\">\n"
"<tablesticky sticky=\"new\"/>\n"
"<tablerow/>\n"
"    <label>\n"
"        <text>\" A (cell 1,1) \"</text>\n"
"        <relief>RIDGE</relief>\n"
"        <bd>3</bd>\n"
"    </label>\n"
"    <label text=\"B (cell 1,2)\"/>\n"
"    <tablespan columns=\"2\"/>\n"
"    <label text=\"C, D (cells 1,3 and 1,4)\"/>\n"
"<tablerow/>\n"
"    <label text=\"E (cell 2,1)\"/>\n"
"    <tablesticky sticky=\"nsew\"/>\n"
"    <tablespan rows=\"2\"/>\n"
"    <label text=\"'spans\\n2 rows'\"/>\n"
"    <tablesticky sticky=\"new\"/>\n"
"    <label text=\"G (cell 2,3)\"/>\n"
"    <label text=\"H (cell 2,4)\"/>\n"
"<tablerow/>\n"
"    <label text=\"J (cell 3,1)\"/>\n"
"    <label text=\"K (cell 3,2)\"/>\n"
"    <u32 halpin=\"test\"/>\n"
"</table>\n"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:1115
#, no-wrap
msgid "Table Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:1116
#, no-wrap
msgid "images/pyvcp_table.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:1118
#, no-wrap
msgid "Tabs"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:1121
msgid "A tabbed interface can save quite a bit of space."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp.adoc:1149
#, no-wrap
msgid ""
"<tabs>\n"
"    <names> [\"spindle\",\"green eggs\"]</names>\n"
"</tabs>\n"
"<tabs>\n"
"    <names>[\"Spindle\", \"Green Eggs\", \"Ham\"]</names>\n"
"    <vbox>\n"
"        <label>\n"
"            <text>\"Spindle speed:\"</text>\n"
"        </label>\n"
"        <bar>\n"
"            <halpin>\"spindle-speed\"</halpin>\n"
"            <max_>5000</max_>\n"
"        </bar>\n"
"    </vbox>\n"
"    <vbox>\n"
"        <label>\n"
"            <text>\"(this is the green eggs tab)\"</text>\n"
"        </label>\n"
"    </vbox>\n"
"    <vbox>\n"
"        <label>\n"
"            <text>\"(this tab has nothing on it)\"</text>\n"
"        </label>\n"
"    </vbox>\n"
"</tabs>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp.adoc:1152
msgid "The above code produced this example showing each tab selected."
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:1153
#, no-wrap
msgid "images/pyvcp_tabs1.png"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:1155
#, no-wrap
msgid "images/pyvcp_tabs2.png"
msgstr ""

#. type: Block title
#: src/gui/pyvcp.adoc:1157
#, no-wrap
msgid "Simple Tabs Example"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp.adoc:1158
#, no-wrap
msgid "images/pyvcp_tabs3.png"
msgstr ""

#. type: Title =
#: src/gui/pyvcp-examples.adoc:4
#, no-wrap
msgid "PyVCP Examples"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:17
msgid ""
"To create a PyVCP panel to use with the AXIS interface that is attached to "
"the right of AXIS you need to do the following basic things."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:20 src/gui/pyvcp-examples.adoc:33
msgid ""
"Create an XML file that contains your panel description and put it in your "
"config directory."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:21
msgid ""
"Add the PyVCP entry to the [DISPLAY] section of the INI file with your XML "
"file name."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:23
msgid ""
"Add the POSTGUI_HALFILE entry to the [HAL] section of the INI file with the "
"name of your postgui HAL file name."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:25 src/gui/pyvcp-examples.adoc:36
msgid ""
"Add the links to HAL pins for your panel in the postgui.hal file to "
"'connect' your PyVCP panel to LinuxCNC."
msgstr ""

#. type: Title ==
#: src/gui/pyvcp-examples.adoc:26
#, no-wrap
msgid "Floating Panels"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:30
msgid ""
"To create floating PyVCP panels that can be used with any interface you need "
"to do the following basic things."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:34
msgid "Add a loadusr line to your HAL file to load each panel."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:39
msgid ""
"The following is an example of a loadusr command to load two PyVCP panels "
"and name each one so the connection names in HAL will be known."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:44
#, no-wrap
msgid ""
"loadusr -Wn btnpanel pyvcp -c btnpanel panel1.xml\n"
"loadusr -Wn sppanel pyvcp -c sppanel panel2.xml\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:47
msgid "The -Wn makes HAL 'Wait for name' to be loaded before proceeding."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:49
msgid "The pyvcp -c makes PyVCP name the panel."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:51
msgid "The HAL pins from panel1.xml will be named btnpanel.<_pin name_>."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:53
msgid "The HAL pins from panel2.xml will be named sppanel.<_pin name_>."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:56
msgid ""
"Make sure the loadusr line is before any nets that make use of the PyVCP "
"pins."
msgstr ""

#. type: Title ==
#: src/gui/pyvcp-examples.adoc:57
#, no-wrap
msgid "Jog Buttons Example"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:67
msgid ""
"In this example we will create a PyVCP panel with jog buttons for X, Y, and "
"Z.  This configuration will be built upon a Stepconf Wizard generated "
"configuration. First we run the Stepconf Wizard and configure our machine, "
"then on the Advanced Configuration Options page we make a couple of "
"selections to add a blank PyVCP panel as shown in the following figure. For "
"this example we named the configuration 'pyvcp_xyz' on the Basic Machine "
"Information page of the Stepconf Wizard."
msgstr ""

#. type: Block title
#: src/gui/pyvcp-examples.adoc:69
#, no-wrap
msgid "XYZ Wizard Configuration"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/pyvcp-examples.adoc:70
#, no-wrap
msgid "PyVCP XYZ Wizard Configuration"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp-examples.adoc:70
#, no-wrap
msgid "images/xyz_ACO.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:75
msgid ""
"The Stepconf Wizard will create several files and place them in the linuxcnc/"
"configs/pyvcp_xyz directory. If you left the create link checked you will "
"have a link to those files on your desktop."
msgstr ""

#. type: Title ===
#: src/gui/pyvcp-examples.adoc:76
#, no-wrap
msgid "Create the Widgets"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:81
msgid ""
"Open up the custompanel.xml file by right clicking on it and selecting 'open "
"with text editor'. Between the <pyvcp></pyvcp> tags we will add the widgets "
"for our panel."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:84
msgid ""
"Look in the PyVCP Widgets Reference section of the manual for more detailed "
"information on each widget <<sec:pyvcp:widgets,documentation des widgets>>."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:87
msgid ""
"In your custompanel.xml file we will add the description of the widgets."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:92
#, no-wrap
msgid ""
"<pyvcp>\n"
"  <labelframe text=\"Jog Buttons\">\n"
"    <font>(\"Helvetica\",16)</font>\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:110
#, no-wrap
msgid ""
"      <!-- the X jog buttons -->\n"
"      <hbox>\n"
"      <relief>RAISED</relief>\n"
"      <bd>3</bd>\n"
"      <button>\n"
"        <font>(\"Helvetica\",20)</font>\n"
"        <width>3</width>\n"
"        <halpin>\"x-plus\"</halpin>\n"
"        <text>\"X+\"</text>\n"
"      </button>\n"
"      <button>\n"
"        <font>(\"Helvetica\",20)</font>\n"
"        <width>3</width>\n"
"        <halpin>\"x-minus\"</halpin>\n"
"        <text>\"X-\"</text>\n"
"      </button>\n"
"      </hbox>\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:128
#, no-wrap
msgid ""
"      <!-- the Y jog buttons -->\n"
"      <hbox>\n"
"      <relief>RAISED</relief>\n"
"      <bd>3</bd>\n"
"      <button>\n"
"        <font>(\"Helvetica\",20)</font>\n"
"        <width>3</width>\n"
"        <halpin>\"y-plus\"</halpin>\n"
"        <text>\"Y+\"</text>\n"
"      </button>\n"
"      <button>\n"
"        <font>(\"Helvetica\",20)</font>\n"
"        <width>3</width>\n"
"        <halpin>\"y-minus\"</halpin>\n"
"        <text>\"Y-\"</text>\n"
"      </button>\n"
"      </hbox>\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:146
#, no-wrap
msgid ""
"      <!-- the Z jog buttons -->\n"
"      <hbox>\n"
"      <relief>RAISED</relief>\n"
"      <bd>3</bd>\n"
"      <button>\n"
"        <font>(\"Helvetica\",20)</font>\n"
"        <width>3</width>\n"
"        <halpin>\"z-plus\"</halpin>\n"
"        <text>\"Z+\"</text>\n"
"      </button>\n"
"      <button>\n"
"        <font>(\"Helvetica\",20)</font>\n"
"        <width>3</width>\n"
"        <halpin>\"z-minus\"</halpin>\n"
"        <text>\"Z-\"</text>\n"
"      </button>\n"
"      </hbox>\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:166
#, no-wrap
msgid ""
"      <!-- the jog speed slider -->\n"
"      <vbox>\n"
"      <relief>RAISED</relief>\n"
"      <bd>3</bd>\n"
"      <label>\n"
"        <text>\"Jog Speed\"</text>\n"
"        <font>(\"Helvetica\",16)</font>\n"
"      </label>\n"
"      <scale>\n"
"        <font>(\"Helvetica\",14)</font>\n"
"        <halpin>\"jog-speed\"</halpin>\n"
"        <resolution>1</resolution>\n"
"        <orient>HORIZONTAL</orient>\n"
"        <min_>0</min_>\n"
"        <max_>80</max_>\n"
"      </scale>\n"
"      </vbox>\n"
"  </labelframe>\n"
"</pyvcp>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:174
msgid ""
"After adding the above you now will have a PyVCP panel that looks like the "
"following attached to the right side of AXIS. It looks nice but it does not "
"do anything until you 'connect' the buttons to halui. If you get an error "
"when you try and run scroll down to the bottom of the pop up window and "
"usually the error is a spelling or syntax error and it will be there."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/pyvcp-examples.adoc:175
#, no-wrap
msgid "Jog Buttons Image"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp-examples.adoc:175
#, no-wrap
msgid "images/xyz_buttons.png"
msgstr ""

#. type: Title ===
#: src/gui/pyvcp-examples.adoc:177
#, no-wrap
msgid "Make Connections"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:181
msgid ""
"To make the connections needed open up your custom_postgui.hal file and add "
"the following."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:187
#, no-wrap
msgid ""
"# connect the X PyVCP buttons\n"
"net my-jogxminus halui.axis.x.minus <= pyvcp.x-minus\n"
"net my-jogxplus halui.axis.x.plus <= pyvcp.x-plus\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:191
#, no-wrap
msgid ""
"# connect the Y PyVCP buttons\n"
"net my-jogyminus halui.axis.y.minus <= pyvcp.y-minus\n"
"net my-jogyplus halui.axis.y.plus <= pyvcp.y-plus\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:195
#, no-wrap
msgid ""
"# connect the Z PyVCP buttons\n"
"net my-jogzminus halui.axis.z.minus <= pyvcp.z-minus\n"
"net my-jogzplus halui.axis.z.plus <= pyvcp.z-plus\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:198
#, no-wrap
msgid ""
"# connect the PyVCP jog speed slider\n"
"net my-jogspeed halui.axis.jog-speed <= pyvcp.jog-speed-f\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:204
msgid ""
"After resetting the E-Stop and putting it into jog mode and moving the jog "
"speed slider in the PyVCP panel to a value greater than zero the PyVCP jog "
"buttons should work. You can not jog when running a G-code file or while "
"paused or while the MDI tab is selected."
msgstr ""

#. type: Title ==
#: src/gui/pyvcp-examples.adoc:205
#, no-wrap
msgid "Port Tester"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:209
msgid ""
"This example shows you how to make a simple parallel port tester using PyVCP "
"and HAL."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:212
msgid ""
"First create the ptest.xml file with the following code to create the panel "
"description."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:273
#, no-wrap
msgid ""
"<!-- Test panel for the parallel port cfg for out -->\n"
"<pyvcp>\n"
"  <hbox>\n"
"    <relief>RIDGE</relief>\n"
"    <bd>2</bd>\n"
"    <button>\n"
"      <halpin>\"btn01\"</halpin>\n"
"      <text>\"Pin 01\"</text>\n"
"    </button>\n"
"    <led>\n"
"      <halpin>\"led-01\"</halpin>\n"
"      <size>25</size>\n"
"      <on_color>\"green\"</on_color>\n"
"      <off_color>\"red\"</off_color>\n"
"    </led>\n"
"  </hbox>\n"
"  <hbox>\n"
"    <relief>RIDGE</relief>\n"
"    <bd>2</bd>\n"
"    <button>\n"
"      <halpin>\"btn02\"</halpin>\n"
"      <text>\"Pin 02\"</text>\n"
"    </button>\n"
"    <led>\n"
"      <halpin>\"led-02\"</halpin>\n"
"      <size>25</size>\n"
"      <on_color>\"green\"</on_color>\n"
"      <off_color>\"red\"</off_color>\n"
"    </led>\n"
"  </hbox>\n"
"  <hbox>\n"
"    <relief>RIDGE</relief>\n"
"    <bd>2</bd>\n"
"    <label>\n"
"      <text>\"Pin 10\"</text>\n"
"      <font>(\"Helvetica\",14)</font>\n"
"    </label>\n"
"    <led>\n"
"      <halpin>\"led-10\"</halpin>\n"
"      <size>25</size>\n"
"      <on_color>\"green\"</on_color>\n"
"      <off_color>\"red\"</off_color>\n"
"    </led>\n"
"  </hbox>\n"
"  <hbox>\n"
"    <relief>RIDGE</relief>\n"
"    <bd>2</bd>\n"
"    <label>\n"
"      <text>\"Pin 11\"</text>\n"
"      <font>(\"Helvetica\",14)</font>\n"
"    </label>\n"
"    <led>\n"
"      <halpin>\"led-11\"</halpin>\n"
"      <size>25</size>\n"
"      <on_color>\"green\"</on_color>\n"
"      <off_color>\"red\"</off_color>\n"
"    </led>\n"
"  </hbox>\n"
"</pyvcp>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:277
msgid ""
"This will create the following floating panel which contains a couple of in "
"pins and a couple of out pins."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/pyvcp-examples.adoc:278
#, no-wrap
msgid "Port Tester Panel"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp-examples.adoc:278
#, no-wrap
msgid "images/ptest.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:282
msgid ""
"To run the HAL commands that we need to get everything up and running we put "
"the following in our ptest.hal file."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:295
#, no-wrap
msgid ""
"loadrt hal_parport cfg=\"0x378 out\"\n"
"loadusr -Wn ptest pyvcp -c ptest ptest.xml\n"
"loadrt threads name1=porttest period1=1000000\n"
"addf parport.0.read porttest\n"
"addf parport.0.write porttest\n"
"net pin01 ptest.btn01 parport.0.pin-01-out ptest.led-01\n"
"net pin02 ptest.btn02 parport.0.pin-02-out ptest.led-02\n"
"net pin10 parport.0.pin-10-in ptest.led-10\n"
"net pin11 parport.0.pin-11-in ptest.led-11\n"
"start\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:298
msgid ""
"To run the HAL file we use the following command from a terminal window."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:301
#, no-wrap
msgid "~$ halrun -I -f ptest.hal\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:304
msgid "The following figure shows what a complete panel might look like."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/pyvcp-examples.adoc:305
#, no-wrap
msgid "Port Tester Complete Image"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp-examples.adoc:305
#, no-wrap
msgid "images/ptest-final.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:308
msgid ""
"To add the rest of the parallel port pins just modify the XML and HAL files."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:311
msgid ""
"To show the pins after running the HAL script use the following command at "
"the halcmd prompt:"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:344
#, no-wrap
msgid ""
"halcmd: show pin\n"
"Component Pins:\n"
"Owner Type  Dir Value  Name\n"
"    2 bit   IN  FALSE  parport.0.pin-01-out <== pin01\n"
"    2 bit   IN  FALSE  parport.0.pin-02-out <== pin02\n"
"    2 bit   IN  FALSE  parport.0.pin-03-out\n"
"    2 bit   IN  FALSE  parport.0.pin-04-out\n"
"    2 bit   IN  FALSE  parport.0.pin-05-out\n"
"    2 bit   IN  FALSE  parport.0.pin-06-out\n"
"    2 bit   IN  FALSE  parport.0.pin-07-out\n"
"    2 bit   IN  FALSE  parport.0.pin-08-out\n"
"    2 bit   IN  FALSE  parport.0.pin-09-out\n"
"    2 bit   OUT TRUE   parport.0.pin-10-in ==> pin10\n"
"    2 bit   OUT FALSE  parport.0.pin-10-in-not\n"
"    2 bit   OUT TRUE   parport.0.pin-11-in ==> pin11\n"
"    2 bit   OUT FALSE  parport.0.pin-11-in-not\n"
"    2 bit   OUT TRUE   parport.0.pin-12-in\n"
"    2 bit   OUT FALSE  parport.0.pin-12-in-not\n"
"    2 bit   OUT TRUE   parport.0.pin-13-in\n"
"    2 bit   OUT FALSE  parport.0.pin-13-in-not\n"
"    2 bit   IN  FALSE  parport.0.pin-14-out\n"
"    2 bit   OUT TRUE   parport.0.pin-15-in\n"
"    2 bit   OUT FALSE  parport.0.pin-15-in-not\n"
"    2 bit   IN  FALSE  parport.0.pin-16-out\n"
"    2 bit   IN  FALSE  parport.0.pin-17-out\n"
"    4 bit   OUT FALSE  ptest.btn01 ==> pin01\n"
"    4 bit   OUT FALSE  ptest.btn02 ==> pin02\n"
"    4 bit   IN  FALSE  ptest.led-01 <== pin01\n"
"    4 bit   IN  FALSE  ptest.led-02 <== pin02\n"
"    4 bit   IN  TRUE   ptest.led-10 <== pin10\n"
"    4 bit   IN  TRUE   ptest.led-11 <== pin11\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:348
msgid ""
"This will show you what pins are IN and what pins are OUT as well as any "
"connections."
msgstr ""

#. type: Title ==
#: src/gui/pyvcp-examples.adoc:350
#, no-wrap
msgid "GS2 RPM Meter"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:355
msgid ""
"The following example uses the Automation Direct GS2 VDF driver and displays "
"the RPM and other info in a PyVCP panel. This example is based on the GS2 "
"example in the Hardware Examples section this manual."
msgstr ""

#. type: Title ===
#: src/gui/pyvcp-examples.adoc:356
#, no-wrap
msgid "The Panel"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:359
msgid "To create the panel we add the following to the XML file."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:362
#, no-wrap
msgid "<pyvcp>\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:379
#, no-wrap
msgid ""
"  <!-- the RPM meter -->\n"
"  <hbox>\n"
"    <relief>RAISED</relief>\n"
"    <bd>3</bd>\n"
"    <meter>\n"
"      <halpin>\"spindle_rpm\"</halpin>\n"
"      <text>\"Spindle\"</text>\n"
"      <subtext>\"RPM\"</subtext>\n"
"      <size>200</size>\n"
"      <min_>0</min_>\n"
"      <max_>3000</max_>\n"
"      <majorscale>500</majorscale>\n"
"      <minorscale>100</minorscale>\n"
"      <region1>0,10,\"yellow\"</region1>\n"
"    </meter>\n"
"  </hbox>\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:403
#, no-wrap
msgid ""
"  <!-- the On Led -->\n"
"  <hbox>\n"
"  <relief>RAISED</relief>\n"
"  <bd>3</bd>\n"
"  <vbox>\n"
"  <relief>RAISED</relief>\n"
"  <bd>2</bd>\n"
"  <label>\n"
"  <text>\"On\"</text>\n"
"  <font>(\"Helvetica\",18)</font>\n"
"  </label>\n"
"  <width>5</width>\n"
"   <hbox>\n"
"  <label width=\"2\"/> <!-- used to center the led -->\n"
"  <rectled>\n"
"  <halpin>\"on-led\"</halpin>\n"
"  <height>\"30\"</height>\n"
"  <width>\"30\"</width>\n"
"  <on_color>\"green\"</on_color>\n"
"  <off_color>\"red\"</off_color>\n"
"  </rectled>\n"
"  </hbox>\n"
"  </vbox>\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:422
#, no-wrap
msgid ""
"  <!-- the FWD Led -->\n"
"  <vbox>\n"
"    <relief>RAISED</relief>\n"
"    <bd>2</bd>\n"
"    <label>\n"
"      <text>\"FWD\"</text>\n"
"      <font>(\"Helvetica\",18)</font>\n"
"      <width>5</width>\n"
"    </label>\n"
"   <label width=\"2\"/>\n"
"    <rectled>\n"
"      <halpin>\"fwd-led\"</halpin>\n"
"      <height>\"30\"</height>\n"
"      <width>\"30\"</width>\n"
"      <on_color>\"green\"</on_color>\n"
"      <off_color>\"red\"</off_color>\n"
"    </rectled>\n"
"  </vbox>\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:443
#, no-wrap
msgid ""
"  <!-- the REV Led -->\n"
"  <vbox>\n"
"  <relief>RAISED</relief>\n"
"  <bd>2</bd>\n"
"    <label>\n"
"      <text>\"REV\"</text>\n"
"      <font>(\"Helvetica\",18)</font>\n"
"       <width>5</width>\n"
"    </label>\n"
"    <label width=\"2\"/>\n"
"    <rectled>\n"
"      <halpin>\"rev-led\"</halpin>\n"
"      <height>\"30\"</height>\n"
"      <width>\"30\"</width>\n"
"      <on_color>\"red\"</on_color>\n"
"      <off_color>\"green\"</off_color>\n"
"    </rectled>\n"
"  </vbox>\n"
"  </hbox>\n"
"</pyvcp>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:446
msgid "The above gives us a PyVCP panel that looks like the following."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/pyvcp-examples.adoc:447
#, no-wrap
msgid "GS2 Panel"
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp-examples.adoc:447
#, no-wrap
msgid "images/gs2_panel.png"
msgstr ""

#. type: Title ===
#: src/gui/pyvcp-examples.adoc:449
#, no-wrap
msgid "The Connections"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:453
msgid ""
"To make it work we add the following code to the custom_postgui.hal file."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:462
#, no-wrap
msgid ""
"# display the rpm based on freq * rpm per hz\n"
"loadrt mult2\n"
"addf mult2.0 servo-thread\n"
"setp mult2.0.in1 28.75\n"
"net cypher_speed mult2.0.in0 <= spindle-vfd.frequency-out\n"
"net speed_out pyvcp.spindle_rpm <= mult2.0.out\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:465
#, no-wrap
msgid ""
"# run led\n"
"net gs2-run => pyvcp.on-led\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:468
#, no-wrap
msgid ""
"# fwd led\n"
"net gs2-fwd => pyvcp.fwd-led\n"
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:471
#, no-wrap
msgid ""
"# rev led\n"
"net running-rev spindle-vfd.spindle-rev => pyvcp.rev-led\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:477
msgid ""
"Some of the lines might need some explanations. The fwd led line uses the "
"signal created in the custom.hal file whereas the rev led needs to use the "
"spindle-rev bit. You can't link the spindle-fwd bit twice so you use the "
"signal that it was linked to."
msgstr ""

#. type: Title ==
#: src/gui/pyvcp-examples.adoc:478
#, no-wrap
msgid "Rapid to Home Button"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:483
msgid ""
"This example creates a button on the PyVCP side panel when pressed will send "
"all the axis back to the home position. This example assumes you don't have "
"a PyVCP panel."
msgstr ""

#. type: Target for macro image
#: src/gui/pyvcp-examples.adoc:484
#, no-wrap
msgid "images/pyvcp-rth.png"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:488
msgid ""
"In your configuration directory create the XML file. In this example it's "
"named 'rth.xml'. In the 'rth.xml' file add the following code to create the "
"button."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:497
#, no-wrap
msgid ""
"<pyvcp>\n"
"<!-- rapid to home button example -->\n"
"<button>\n"
"<halpin>\"rth-button\"</halpin>\n"
"<text>\"Rapid to Home\"</text>\n"
"</button>\n"
"</pyvcp>\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:501
msgid ""
"Open your INI file with a text editor and in the [DISPLAY] section add the "
"following line. This is what loads the PyVCP panel."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:505
#, no-wrap
msgid "PYVCP = rth.xml\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:509
msgid ""
"If you don't have a [HALUI] section in the INI file create it and add the "
"following MDI command."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:513
#, no-wrap
msgid "MDI_COMMAND = G53 G0 X0 Y0 Z0\n"
msgstr ""

#. type: delimited block =
#: src/gui/pyvcp-examples.adoc:518
msgid "Information about <<gcode:g53,G53>> and <<gcode:g0,G0>> G-codes."
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:522
msgid ""
"In the [HAL] section if you don't have a post gui file add the following and "
"create a file called 'postgui.hal'."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:526
#, no-wrap
msgid "POSTGUI_HALFILE = postgui.hal\n"
msgstr ""

#. type: Plain text
#: src/gui/pyvcp-examples.adoc:530
msgid ""
"In the 'postgui.hal' file add the following code to link the PyVCP button to "
"the MDI command."
msgstr ""

#. type: delimited block -
#: src/gui/pyvcp-examples.adoc:534
#, no-wrap
msgid "net rth halui.mdi-command-00 <= pyvcp.rth-button\n"
msgstr ""

#. type: delimited block =
#: src/gui/pyvcp-examples.adoc:539
msgid "Information about the <<sub:hal-net, net>> command"
msgstr ""

#. type: Title =
#: src/gui/qtdragon.adoc:5
#, no-wrap
msgid "QtDragon GUI(((QtDragon)))"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:24
msgid ""
"QtDragon and QtDragon_hd are built with the QtVCP framework.  It is the "
"creative vision of forum personality Persei8.  Much of it is based on the "
"excellent work of others in the LinuxCNC community.  LinuxCNC's version is "
"adapted from Persei8's Github versions.  It is primarily meant for 3/4 axes "
"machines such as mills or routers.  It works well with a touchscreen and/or "
"mouse.  QtDragon supports multiple ways to touch off tools and probing work "
"pieces.  You can use LinuxCNC's external offsets capability to automatically "
"raise the spindle during a pause.  If you the VersaProbe option and remap "
"code you can add auto tool length probing at tool changes."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:29
msgid ""
"QtDragon and QtVCP are relatively new programs added into LinuxCNC.  Bugs "
"and oddities are possible. Please test carefully when using a dangerous "
"machine. Please forward reports to the forum or maillist."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:30
#, no-wrap
msgid "QtDragon"
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:32
#, no-wrap
msgid "QtDragon - 3 or 4 Axes Sample (1440x860) in silver theme"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtdragon.adoc:33 src/gui/qtvcp.adoc:29
#, no-wrap
msgid "QtDragon Router"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:38
msgid ""
"QtDragon is resizable from a resolution of 1280x768 to 1680x1200.  It will "
"work in window mode on any monitor with higher resolution but not on "
"monitors with lower resolution."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtdragon.adoc:39 src/gui/qtdragon.adoc:42
#, no-wrap
msgid "QtDragon_hd"
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:41
#, no-wrap
msgid "QtDragon_hd - 3 or 4 Axis Sample for larger monitors (1920x1056) in dark theme"
msgstr ""

#. type: Target for macro image
#: src/gui/qtdragon.adoc:42
#, no-wrap
msgid "images/qtdragon_hd.png"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:47
msgid ""
"QtDragon_hd is a similar design as QtDragon but modified to utilize the "
"extra space of modern larger monitors.  There are some small differences in "
"layout and utility."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:51
msgid ""
"QtDragon_hd has a resolution of 1920x1056 and is not realizable.  It will "
"work in window mode on any monitor with higher resolution but not on "
"monitors with lower resolution."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:58
msgid ""
"If your configuration is not currently set up to use QtDragon, you can "
"change it by editing the INI file [DISPLAY] section.  For an exhaustive list "
"of options, see the <<sub:ini:sec:display,display section>> of INI file "
"documentation."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:59
#, no-wrap
msgid "Display"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:62
msgid "In the section '[DISPLAY]' change the 'DISPLAY' line to read:"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:64
msgid "`qtdragon` for a small version"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:65
msgid "`qtdradon_hd` for the large version."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:67
msgid "You can add `-d` or `-v` for debug output to the terminal."
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:72
#, no-wrap
msgid ""
"[DISPLAY]\n"
"DISPLAY = qtvcp qtdragon\n"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:74 src/gui/touchy.adoc:89
#, no-wrap
msgid "Preferences"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:80
msgid ""
"To keep track of preferences, QtDragon looks for a preference text file.  "
"add the following entry under the '[DISPLAY]' heading.  This example will "
"save the file in the config folder of the launch screen.  (other options are "
"possible see the QtVCP's screenoption widget docs.)"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:85
#, no-wrap
msgid ""
"[DISPLAY]\n"
"PREFERENCE_FILE_PATH = WORKINGFOLDER/qtdragon.pref\n"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:87
#, no-wrap
msgid "Logging"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:91
msgid ""
"You can specify where to save history/logs.  In the section `[DISPLAY]` add:"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:98
#, no-wrap
msgid ""
"[DISPLAY]\n"
"MDI_HISTORY_FILE = mdi_history.dat\n"
"MACHINE_LOG_PATH = machine_log.dat\n"
"LOG_FILE = qtdragon.log\n"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:100
#, no-wrap
msgid "Override controls"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:103
msgid "set override controls (1.0 = 100 percent):"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:110
#, no-wrap
msgid ""
"[DISPLAY]\n"
"MAX_SPINDLE_0_OVERRIDE = 1.5\n"
"MIN_SPINDLE_0_OVERRIDE = .5\n"
"MAX_FEED_OVERRIDE       = 1.2\n"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:112
#, no-wrap
msgid "Spindle controls"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:115
msgid "Spindle control settings (in rpm and watts):"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:124
#, no-wrap
msgid ""
"[DISPLAY]\n"
"DEFAULT_SPINDLE_0_SPEED = 500\n"
"SPINDLE_INCREMENT = 200\n"
"MIN_SPINDLE_0_SPEED = 100\n"
"MAX_SPINDLE_0_SPEED = 2500\n"
"MAX_SPINDLE_POWER = 1500\n"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:126
#, no-wrap
msgid "Jogging increments"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:129
msgid "Set selectable jogging increments"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:135
#, no-wrap
msgid ""
"[DISPLAY]\n"
"INCREMENTS = Continuous, .001 mm, .01 mm, .1 mm, 1 mm, 1.0 inch, 0.1 inch, 0.01 inch\n"
"ANGULAR_INCREMENTS = 1, 5, 10, 30, 45, 90, 180, 360\n"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:137
#, no-wrap
msgid "Jog speed"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:140
msgid "Set jog speed controls (in units per minute)"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:147
#, no-wrap
msgid ""
"[DISPLAY]\n"
"MIN_LINEAR_VELOCITY     = 0\n"
"MAX_LINEAR_VELOCITY     = 60.00\n"
"DEFAULT_LINEAR_VELOCITY = 50.0\n"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:149
#, no-wrap
msgid "User message dialog system"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:155
#, no-wrap
msgid ""
"Optional popup custom message dialogs, controlled by HAL pins.\n"
"MESSAGE_TYPE can be 'okdialog' or 'yesnodialog'.\n"
"See qtvcp/library/messages for more information\n"
"This example shows how to make a dialog that requires the user to select\n"
" 'ok' to acknowledge and hide.\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:164
#, no-wrap
msgid ""
"[DISPLAY]\n"
"MESSAGE_BOLDTEXT = This is the short text\n"
"MESSAGE_TEXT = This is the longer text of the both type test. It can be longer than the status bar text\n"
"MESSAGE_DETAILS = BOTH DETAILS\n"
"MESSAGE_TYPE = okdialog\n"
"MESSAGE_PINNAME = oktest\n"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:166
#, no-wrap
msgid "Embed Custom VCP Panels"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:173
#, no-wrap
msgid ""
"You can embed QtVCP Virtual Control Panels into the QtDragon or QtDragon_hd screen.\n"
"These panels can be either user built or builtin <<cha:qtvcp:panels,QtVCP Panels>>.\n"
"The `TAB_NAME` entry will used as the title for the new tab.\n"
"Tab `TAB_LOCATION` options include: `tabWidget_utilities` and `tabWidget_setup`. See QtVCP/VCP panels for other available builtin panels."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:175
msgid ""
"This sample adds a builtin panel; a graphical animated machine using the "
"vismach library."
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:182
#, no-wrap
msgid ""
"[DISPLAY]\n"
"EMBED_TAB_NAME = Vismach demo\n"
"EMBED_TAB_COMMAND = qtvcp vismach_mill_xyz\n"
"EMBED_TAB_LOCATION = tabWidget_utilities\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:190
#, no-wrap
msgid ""
"Magic comments can be used to control the G-code preview.\n"
"On very large programs the preview can take a long time to load. You can control what is shown and what is hidden the the graphics screen by adding the appropriate comments from this list into your G-code:"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:195
#, no-wrap
msgid ""
"(PREVIEW,stop)\n"
"(PREVIEW,hide)\n"
"(PREVIEW,show)\n"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:197
#, no-wrap
msgid "Program Extensions/Filters"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:204
msgid ""
"You can control what programs are displayed in the filemanager window with "
"program extensions: Create a line with the . endings you wish to use "
"separated by commas, then a space and the description.  You can add multiple "
"lines for different selections in the combo box."
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:209
#, no-wrap
msgid ""
"[FILTER]\n"
"PROGRAM_EXTENSION = .ngc,.nc,.tap G-Code File (*.ngc,*.nc,*.tap)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:216
msgid ""
"QtDragon has the ability to send loaded files through a 'filter program'.  "
"This filter can do any desired task: Something as simple as making sure the "
"file ends with 'M2', or something as complicated as generating G-Code from "
"an image.  See <<cha:filter,Filter Programs>> for more information."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:226
msgid ""
"The '[FILTER]' section of the INI file controls how filters work.  First, "
"for each type of file, write a 'PROGRAM_EXTENSION' line.  Then, specify the "
"program to execute for each type of file.  This program is given the name of "
"the input file as its first argument, and must write rs274ngc code to "
"standard output. This output is what will be displayed in the text area, "
"previewed in the display area, and executed by LinuxCNC when 'Run'. The "
"following lines add support for the `image-to-gcode` converter included with "
"LinuxCNC and running Python based filter programs:"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:236
#, no-wrap
msgid ""
"[FILTER]\n"
"PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image\n"
"PROGRAM_EXTENSION = .py Python Script\n"
"png = image-to-gcode\n"
"gif = image-to-gcode\n"
"jpg = image-to-gcode\n"
"py = python\n"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:238
#, no-wrap
msgid "Probe/Touchplate/Laser Settings"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:241
msgid "QtDragon has custom INI entries for required setup."
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:249
#, no-wrap
msgid ""
"[TOOLSENSOR]\n"
"MAXPROBE = 40\n"
"SEARCH_VEL = 200\n"
"PROBE_VEL = 50\n"
"TOUCH = 29.7\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:253
#, no-wrap
msgid ""
"[LASER]\n"
"X = 106.9\n"
"Y = -16.85\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:257
msgid ""
"QtDragon has two optional probing tab screens available.  Comment/uncomment "
"which ever you prefer."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:262
msgid ""
"'Versa probe' is a Qtvcp ported version of a popular Gladevcp probing "
"panel.  'Basic Probe' is a Qtvcp ported version based on the third party "
"basic probe screen.  Both do similar probing routines."
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:268 src/gui/qtdragon.adoc:771
#, no-wrap
msgid ""
"[PROBE]\n"
"#USE_PROBE = versaprobe\n"
"USE_PROBE = basicprobe\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:281
msgid ""
"QtDragon has up to ten convenience macro buttons.  In the sample "
"configurations they are labelled for moving between current user system "
"origin (zero point) and Machine system origin.  User origin is the first MDI "
"command in the INI list, machine origin is the second.  These could also "
"call OWord routines if desired.  This example shows how to move Z axis up "
"first. The commands are separated by the ';' The label is set after the "
"comma. The symbols '\\n' adds a line break."
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:288
#, no-wrap
msgid ""
"[MDI_COMMAND_LIST]\n"
"# for macro buttons\n"
"MDI_COMMAND = G0 Z25;X0 Y0;Z0, Goto\\nUser\\nZero\n"
"MDI_COMMAND = G53 G0 Z0;G53 G0 X0 Y0,Goto\\nMachn\\nZero\n"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:290
#, no-wrap
msgid "Builtin Sample Configurations"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:295
#, no-wrap
msgid ""
"The sample configurations 'sim/qtvcp_screens/qtdragon/qtdragon_xyza.ini' is already configured to use QtDragon as its front-end.\n"
"There are several others, to demonstrate different machine configurations."
msgstr ""

#. type: Title ==
#: src/gui/qtdragon.adoc:296
#, no-wrap
msgid "Key Bindings"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:302
msgid ""
"QtDragon is not intended to primarily use a keyboard for machine control.  "
"It lacks many keyboard short cuts that for instance AXIS has - but you can "
"use a mouse.  There are several key presses that will control the machine "
"for convenience."
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:310
#, no-wrap
msgid ""
"F1 - Estop on/off\n"
"F2 - Machine on/off\n"
"F12 - Style Editor\n"
"Home - Home All Joint of the Machine\n"
"Escape - Abort Movement\n"
"Pause - Pause Machine Movement\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:316
#, no-wrap
msgid ""
"Buttons that are checkable will change their text colour when checked.\n"
"This is controlled by the stylesheet/theme +"
msgstr ""

#. type: Title ==
#: src/gui/qtdragon.adoc:317 src/gui/qtvcp-libraries.adoc:1006
#, no-wrap
msgid "Virtual Keyboard"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:325
#, no-wrap
msgid ""
"QtDragon includes a virtual keyboard for use with touchscreens.\n"
"To enable the keyboard, check the Use Virtual Keyboard checkbox in the Settings page.\n"
"Clicking on any input field, such as probe parameters or tool table entries, will show the keyboard.\n"
"To hide the keyboard, do one of the following:"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:327
msgid "click the MAIN page button"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:328
msgid "The curently selected page button."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:329
msgid "go into AUTO mode"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:332
msgid ""
"It should be noted that keyboard jogging is disabled when using the virtual "
"keyboard."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:337
msgid ""
"These pins are specific to the QtDragon screen, There are of course are many "
"more HAL pins that must be connected for LinuxCNC to function."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:339
msgid ""
"If you need a manual tool change prompt, add these lines in your postgui "
"file."
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:345 src/gui/qtdragon.adoc:446
#, no-wrap
msgid ""
"net tool-change      hal_manualtoolchange.change   <=  iocontrol.0.tool-change\n"
"net tool-changed     hal_manualtoolchange.changed  <=  iocontrol.0.tool-changed\n"
"net tool-prep-number hal_manualtoolchange.number   <=  iocontrol.0.tool-prep-number\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:348
msgid "This input pin should be connected to indicate probe state:"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:352
#, no-wrap
msgid "qtdragon.led-probe\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:357
msgid ""
"These pins are inputs related to spindle VFD indicating: The volt and amp "
"pins are used to calculate spindle power.  (You must also set the "
"MAX_SPINDLE_POWER in the INI)"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:364
#, no-wrap
msgid ""
"qtdragon.spindle-modbus-errors\n"
"qtdragon.spindle-amps\n"
"qtdragon.spindle-fault\n"
"qtdragon.spindle-volts\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:368
msgid ""
"This bit pin is an output to the spindle control to pause it: You would "
"connect it to spindle.0.inhibit."
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:372
#, no-wrap
msgid "qtdragon.spindle-inhibit\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:375
msgid "This bit output pin can be connected to turn on a laser:"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:379
#, no-wrap
msgid "qtdragon.btn-laser-on\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:382
msgid "This float output pin indicates the camera rotation in degrees:"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:386
#, no-wrap
msgid "qtdragon.cam-rotation\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:389
msgid "These bit/s32 pins are related to external offsets if they are used:"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:396
#, no-wrap
msgid ""
"qtdragon.eoffset-clear\n"
"qtdragon.eoffset-count\n"
"qtdragon.eoffset-enable\n"
"qtdragon.eoffset-value\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:399
msgid ""
"These float output pins reflect the current slider jograte (in machine "
"units):"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:404
#, no-wrap
msgid ""
"qtdragon.slider-jogspeed-linear\n"
"qtdragon.slider-jogspeed-angular\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:407
msgid "These float output pins reflect the current slider override rates:"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:414
#, no-wrap
msgid ""
"qtdragon.slider-override-feed\n"
"qtdragon.slider-override-maxv\n"
"qtdragon.slider-override-rapid\n"
"qtdragon.slider-override-spindle\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:419
msgid ""
"These pins are available when setting the Versa Probe INI option.  They can "
"be used for auto-tool-length-probe at tool change - with added remap code."
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:426
#, no-wrap
msgid ""
"qtdragon.versaprobe-blockheight\n"
"qtdragon.versaprobe-probeheight\n"
"qtdragon.versaprobe-probevel\n"
"qtdragon.versaprobe-searchvel\n"
msgstr ""

#. type: Title ==
#: src/gui/qtdragon.adoc:428
#, no-wrap
msgid "HAL files"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:433
msgid ""
"The HAL files supplied are for simulation only. A real machine needs its own "
"custom HAL files. The QtDragon screen works with 3 or 4 axes with one joint "
"per axis or 3 or 4 axes in a gantry configuration (2 joints on 1 axis)."
msgstr ""

#. type: Title ==
#: src/gui/qtdragon.adoc:434
#, no-wrap
msgid "Manual Tool Changes"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:440
msgid ""
"If your machine requires manual tool changes, QtDragon can pop a message box "
"to direct you.  You must connect the proper HAL pin in the postgui HAL "
"file.  For example:"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:454
msgid ""
"The screen is intended to interface to a VFD, but will still work without "
"it.  There are a number of VFD drivers included in the LinuxCNC "
"distribution. It is up to the end user to supply the appropriate driver and "
"HAL file connections according to his own machine setup."
msgstr ""

#. type: Title ==
#: src/gui/qtdragon.adoc:455
#, no-wrap
msgid "Auto Raise Z Axis on Spindle Pause"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:465
msgid ""
"QtDragon can be set up to automatically raise and lower the Z axis when the "
"spindle is paused.  When a program is paused, then you press the 'Spindle "
"Pause' button to stop the spindle and raise it in Z.  Press the button again "
"to start spindle and lower it, then unpause program.  The amount to raise "
"and lower is set in the 'Settings' tab under the heading 'Z Ext Offset'.  "
"This requires additions to the INI and the qtdragon_post_gui file."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:467
msgid "In the INI, under the AXIS_Z heading."
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:472
#, no-wrap
msgid ""
"[AXIS_Z]\n"
"OFFSET_AV_RATIO  = 0.2\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:475
msgid "In the qtdragon_postgui.hal file add:"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:482
#, no-wrap
msgid ""
"# Set up Z axis external offsets\n"
"net eoffset_clear    qtdragon.eoffset-clear => axis.z.eoffset-clear\n"
"net eoffset_count    qtdragon.eoffset-count => axis.z.eoffset-counts\n"
"net eoffset          qtdragon.eoffset-value <= axis.z.eoffset\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:485
#, no-wrap
msgid ""
"# uncomment for dragon_hd\n"
"#net limited          qtdragon.led-limits-tripped <= motion.eoffset-limited\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:488
#, no-wrap
msgid ""
"setp axis.z.eoffset-enable 1\n"
"setp axis.z.eoffset-scale 1.0\n"
msgstr ""

#. type: Title ==
#: src/gui/qtdragon.adoc:490
#, no-wrap
msgid "Z level compensation"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:494
msgid ""
"QtDragon_hd can be set up to probe and compensate for Z level height changes "
"by utilizing the external program 'G-code Ripper'."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:497 src/gui/qtdragon.adoc:702
msgid "This is only available in the QtDragon_hd version."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:505
msgid ""
"Z level compensation is a bed levelling/distortion correction function "
"typically used in 3D printing or engraving. It uses a HAL user space "
"component which utilizes the external offsets feature of LinuxCNC. The "
"component has a HAL pin that specifies an interpolation type, which must be "
"one of cubic, linear or nearest (0,1,2 respectively). If none is specified "
"or if an invalid number is specified, the default is assumed to be cubic."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:511
msgid ""
"When Z LEVEL COMP is enabled, the compensation component reads a probe data "
"file, which must be called 'probe_points.txt'. The file can be modified or "
"updated at any time while compensation is disabled. When next enabled, the "
"file will be reread and the compensation map is recalculated. This file is "
"expected to be in the configuration directory."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:516
msgid ""
"The probe data file is generated by a probing program which itself is "
"generated by an external python program called gcode_ripper, which can be "
"launched from the file manager tab using the 'G-code Ripper' button."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:517
#, no-wrap
msgid "Using G-code Ripper for Z level Compensation"
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:519
#, no-wrap
msgid "QtDragon_hd showing G-code Ripper"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtdragon.adoc:520
#, no-wrap
msgid "QtDragon G-code Ripper"
msgstr ""

#. type: Target for macro image
#: src/gui/qtdragon.adoc:520
#, no-wrap
msgid "images/qtdragon_hd_gcoderipper.png"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:525
msgid ""
"G-code Ripper offers many functions that we will not go in to here.  This is "
"only available in the QtDragon_hd version."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:527
msgid ""
"In Qtdragon_hd switch to the file tab and press the load G-code Ripper "
"button."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:528
msgid "set origin to match the origin of the gcode file to be probed"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:529
msgid "under G-Code Operations, check Auto Probe"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:530
msgid "File -> Open G-Code File (The file you will run after compensation)"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:531
msgid "if necessary, make adjustments and press Recalculate"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:532
msgid "press Save G-Code File - Probe Only"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:533
msgid "save the generated file to the nc_files folder"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:534
msgid "exit gcode_ripper"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:535
msgid ""
"There should now be a file in the nc_files folder called {something}-probe-"
"only.ngc. Set the file filter to G-Code Files, navigate to the nc_files "
"directory and load this file."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:536
msgid ""
"Without changing the offsets, run this program. Make sure the probe tool is "
"installed. When complete, there will be a file in the config directory "
"called 'probe_points.txt'."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:540
msgid ""
"In Qtdragon_hd press the 'Enable Z Comp' button to enable compensation.  "
"Look at the status line for indication of success or failure.  Active "
"compensation will be displayed beside the label: 'Z Level Comp' While "
"jogging that display should change based on the compensation component."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:544
msgid ""
"If you use auto raise Z to lift the spindle on pause, you must combine the "
"two with a HAL component and feed that to LinuxCNC's motion component."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:546
msgid ""
"sample postgui HAL file for combined spindle raise and Z Level compensation"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:550
#, no-wrap
msgid ""
"# load components\n"
"########################################################################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:554
#, no-wrap
msgid ""
"# load a summing component for adding spindle lift and Z compensation\n"
"loadrt scaled_s32_sums\n"
"addf scaled-s32-sums.0 servo-thread\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:559
#, no-wrap
msgid ""
"loadusr -Wn z_level_compensation z_level_compensation\n"
"# method parameter must be one of nearest(2), linear(1), cubic (0)\n"
"setp z_level_compensation.method 1\n"
"setp z_level_compensation.fade-height 0.0\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:562
#, no-wrap
msgid ""
"# connect signals to LinuxCNC's motion component\n"
"########################################################################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:568
#, no-wrap
msgid ""
"net eoffset-clear    axis.z.eoffset-clear\n"
"net eoffset-counts   axis.z.eoffset-counts\n"
"setp axis.z.eoffset-scale .001\n"
"net eoffset-total          axis.z.eoffset\n"
"setp axis.z.eoffset-enable True\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:572
#, no-wrap
msgid ""
"# external offsets for spindle pause function\n"
"########################################################################\n"
"net eoffset-spindle-count   <= qtdragon.eoffset-spindle-count    \n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:580
#, no-wrap
msgid ""
"# Z level compensation\n"
"########################################################################\n"
"net xpos-cmd                z_level_compensation.x-pos      <= axis.x.pos-cmd\n"
"net ypos-cmd                z_level_compensation.y-pos      <= axis.y.pos-cmd\n"
"net zpos-cmd                z_level_compensation.z-pos      <= axis.z.pos-cmd\n"
"net z_compensation_on       z_level_compensation.enable-in  <= qtdragon.comp-on\n"
"net eoffset-zlevel-count    z_level_compensation.counts     => qtdragon.eoffset-zlevel-count\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:587
#, no-wrap
msgid ""
"# set up scaled sum component\n"
"########################################################################\n"
"net eoffset-spindle-count   scaled-s32-sums.0.in0\n"
"net eoffset-zlevel-count    scaled-s32-sums.0.in1       qtdragon.eoffset-value\n"
"setp scaled-s32-sums.0.scale0 1000\n"
"net eoffset-counts          scaled-s32-sums.0.out-s\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:598
msgid ""
"The probe screen has been through basic testing but there could still be "
"some minor bugs.  When running probing routines, use extreme caution until "
"you are familiar with how everything works.  Probe routines run without "
"blocking the main GUI. This gives the operator the opportunity to watch the "
"DROs and stop the routine at any time."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:601
msgid ""
"Probing is very unforgiving to mistakes; be sure to check settings before "
"using."
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:602
#, no-wrap
msgid "QtDragon - Basic Probe Option"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtdragon.adoc:603 src/gui/qtdragon.adoc:606
#, no-wrap
msgid "QtDragon Probe"
msgstr ""

#. type: Target for macro image
#: src/gui/qtdragon.adoc:603
#, no-wrap
msgid "images/silverdragon_probe.png"
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:605
#, no-wrap
msgid "QtDragon - Versa Probe Option"
msgstr ""

#. type: Target for macro image
#: src/gui/qtdragon.adoc:606
#, no-wrap
msgid "images/qtdragon_versaprobe.png"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:612
msgid ""
"QtDragon has 2 methods for setting Z0. The first is a touchplate, where a "
"metal plate of known thickness is placed on top of the workpiece and then "
"the tool is lowered until it touches the plate, triggering the probe signal. "
"Z0 is set to probe height - plate thickness."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:619
msgid ""
"The second method uses a tool setter in a fixed position and a known height "
"above the table where the probe signal will be triggered. In order to set Z0 "
"to the top of the workpiece, it has to know how far above the table the "
"probe trigger point is (tool setter height) and how far above the table the "
"top of the workpiece is. This operation has to be done every time the tool "
"is changed as the tool length is not saved."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:624
msgid ""
"For touching off with a touch probe, whether you use the touchplate "
"operation with thickness set to 0 or use a probing routine, the height from "
"table to top of workpiece parameter is not taken into account and can be "
"ignored. It is only for the tool setter."
msgstr ""

#. type: Title ==
#: src/gui/qtdragon.adoc:625
#, no-wrap
msgid "Touch plate"
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:627
#, no-wrap
msgid "QtDragon - Touch Plate"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtdragon.adoc:628
#, no-wrap
msgid "QtDragon Touch Plate"
msgstr ""

#. type: Target for macro image
#: src/gui/qtdragon.adoc:628
#, no-wrap
msgid "images/qtdragon_touchplate.png"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:635
msgid ""
"You can use a conductive touch plate or equivalent to auto touch off (zero "
"the user coordinate) for the Z position of a tool.  There must be a tool "
"loaded prior to probing.  In the tool tab or settings tab, set the touch "
"plate height, search and probe velocity and Max probing distance."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:643
msgid ""
"When using a conductive plate the search and probe velocity should be the "
"same and slow.  If using a tool setter that has spring loaded travel then "
"you can set search velocity faster.  LinuxCNC ramps speed down at the "
"maximum acceleration rate, so there can be travel after the probe trip if "
"the speed is set to high."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:652
msgid ""
"Place the plate on top of the surface you wish to zero Z on.  Connect the "
"probe input wire to the tool (if using a conductive plate)  There is a LED "
"to confirm the probe connection is reliable prior to probing.  Move the tool "
"manually within the max probe distance.  Press the 'Touch Plate' button.  "
"The machine will probe down twice and the current user offset (G5X) will be "
"zeroed at the bottom of the plate by calculation from the touchplate height "
"setting."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:659
msgid ""
"QtDragon can be setup to do integrated auto tool measurement using the Versa "
"Probe widget and remap code.  To use this feature, you will need to do some "
"additional settings and you may want to use the offered HAL pin to get "
"values in your own ngc remap procedure."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:663
msgid ""
"Before starting the first test, do not forget to enter the probe height and "
"probe velocities on the versa probe settings page."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:665
msgid "Tool Measurement in QtDragon is done with the following steps:"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:667
msgid "Touch of you workpiece in X and Y."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:670
msgid "In the Versa probe tab, enter the measured value for block height."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:671
msgid ""
"Make sure the use tool measurement button in the Vesa probe tab is enabled."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:677
msgid ""
"When fist setting up auto tool measurement, please use caution until you "
"confirm tool change and probe locations - it's easy to break a tool/probe. "
"Abort will be honoured while the probe is in motion."
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:678
#, no-wrap
msgid "Auto tool measurement"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:684
msgid ""
"With the first given tool change the tool will be measured and the offset "
"will be set automatically to fit the block height.  The advantage of this "
"way is, that you do not need a reference tool."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:692
msgid ""
"Your program must contain a tool change at the beginning.  The tool will be "
"measured, even it has been used before, so there is no danger if the block "
"height has changed.  There are several videos on you tube that demonstrate "
"the technique using GMOCCAPY.  The GMOCCAPY screen pioneered the technique."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:693
#, no-wrap
msgid "Work Piece Height Probing"
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:695
#, no-wrap
msgid "QtDragon_hd - Work piece Height probing"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtdragon.adoc:696
#, no-wrap
msgid "QtDragon_hd height probing"
msgstr ""

#. type: Target for macro image
#: src/gui/qtdragon.adoc:696
#, no-wrap
msgid "images/qtdragon_hd_workpiece_probe.png"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:699
msgid ""
"This program probes 2 user specified locations in the Z axis and calculates "
"the difference in heights."
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:703
#, no-wrap
msgid "Enable Probe Position Set Buttons"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:705
msgid "Wwhen checked, the SET buttons are enabled."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:706
msgid ""
"This allows the user to automatically fill in the X, Y and Z parameters with "
"the current position as displayed on the DROs."
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:707
#, no-wrap
msgid "Autofill Workpiece Height on Main Screen"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:709
msgid ""
"When checked, the calculated height is automatically transferred to the "
"Workpiece Height field in the main screen."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:710
msgid "Otherwise, the main screen is not affected."
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:711
#, no-wrap
msgid "Workpiece Probe At"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:713
msgid ""
"the X, Y and Z coordinates specify where the first probing routine should "
"start, in current WCS"
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:714
#, no-wrap
msgid "Machine Probe At"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:716
msgid ""
"the X, Y and Z coordinates specify where the second probing routine should "
"start, in current WCS"
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:717
#, no-wrap
msgid "Z Safe Travel Height"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:719
msgid ""
"The machine is raised to the Z safe travel height before jogging to the X "
"and Y coordinates."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:720
msgid "The spindle then lowers to the specified Z coordinate."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:721
msgid ""
"It should be selected so that the tool clears all obstructions while jogging."
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:722
#, no-wrap
msgid "START button"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:724
msgid "The machine will jog to the first location and then probe down."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:725
msgid "The machine then jogs to the second location and probes down again."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:726
msgid ""
"The difference in probed values is reported as Calculated Workpiece Height."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:727
msgid ""
"The parameters for search velocity, probe velocity, maximum probe distance "
"and return distance are read from the main GUI Settings page."
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:728
#, no-wrap
msgid "ABORT button"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:730
msgid "causes all jog and probe routines currently executing to stop"
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:731
#, no-wrap
msgid "HELP button"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:733
msgid "displays this help file"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:736
msgid "Any 2 points within the machine operating volume can be specified."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:737
msgid ""
"If the first point is higher than the second, the calculated height will be "
"a positive number."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:738
msgid ""
"If the first point is lower than the second, the calculated height will be a "
"negative number."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:739
msgid ""
"Units are irrelevant in this program. The probed values are not saved and "
"only the difference is reported."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:742
msgid ""
"Setting incorrect values can lead to crashes into fixtures on the machine "
"work surface. Initial testing with no tool and safe heights is recommended."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:748
msgid ""
"Versaprobe offers 5 pins for tool measurement purpose. The pins are used to "
"be read from a remap G-code subroutine, so the code can react to different "
"values."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:750
msgid "`qtversaprobe.toolmeasurement` (HAL_BIT) enable or not tool measurement"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:752
msgid ""
"`qtversaprobe.blockheight` (HAL_FLOAT) the measured value of the top face of "
"the workpiece"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:753
msgid "`qtversaprobe.probeheight` (HAL_FLOAT) the probe switch height"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:755
msgid ""
"`qtversaprobe.searchvel` (HAL_FLOAT) the velocity to search for the tool "
"probe switch"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:756
msgid "`qtversaprobe.probevel` (HAL_FLOAT) the velocity to probe tool length"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:760
msgid "Modify your INI File to include the following:"
msgstr ""

#. type: Title ====
#: src/gui/qtdragon.adoc:761
#, no-wrap
msgid "The PROBE section"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:765
msgid ""
"QtDragon allows you to select one of two styles of touch probe routines.  "
"Versa probe works with a M6 remap to add auto tool probing."
msgstr ""

#. type: Title ====
#: src/gui/qtdragon.adoc:773
#, no-wrap
msgid "The RS274NGC section"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:778 src/lathe/lathe-user.adoc:41
#, no-wrap
msgid "[RS274NGC]\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:782
#, no-wrap
msgid ""
"# adjust this paths to point to folders with stdglu.py and qt_auto_tool_probe.ngc\n"
"# or similarly coded custom remap files\n"
"SUBROUTINE_PATH = ~/linuxcnc/nc_files/remap-subroutines:~/linuxcnc/nc_files/remap_lib\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:785
#, no-wrap
msgid ""
"# is the sub, with is called when a error during tool change happens.\n"
"ON_ABORT_COMMAND=O <on_abort> call\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:788
#, no-wrap
msgid ""
"# The remap code for QtVCP's versaprobe's automatic tool probe of Z\n"
"REMAP=M6  modalgroup=6 prolog=change_prolog ngc=qt_auto_probe_tool epilog=change_epilog\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:791
msgid ""
"The abort command file should be in the configuration folder and look "
"something like this:"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:794 src/remap/remap.adoc:1160
#, no-wrap
msgid "o<on_abort> sub\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:806
#, no-wrap
msgid ""
"o100 if [#1 eq 5]\n"
"    (machine on)\n"
"o100 elseif [#1 eq 6]\n"
"    (machine off)\n"
"o100 elseif [#1 eq 7]\n"
"    (estopped)\n"
"o100 elseif [#1 eq 8]\n"
"    (msg,Process Aborted)\n"
"o100 else\n"
"    (DEBUG,Abort Parameter is %d[#1])\n"
"o100 endif\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:809 src/remap/remap.adoc:1185
#, no-wrap
msgid ""
"o<on_abort> endsub\n"
"m2\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:817
msgid ""
"The position of the tool sensor and the start position of the probing "
"movement, all values are absolute (G53) coordinates, except MAXPROBE, what "
"must be given in relative movement.  All values are in machine native units."
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:825
#, no-wrap
msgid ""
"[TOOLSENSOR]\n"
"X = 10\n"
"Y = 10\n"
"Z = -20\n"
"MAXPROBE =  -20\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:833
msgid ""
"This is not named TOOL_CHANGE_POSITION on purpose - *canon uses that name "
"and will interfere otherwise.* The position to move the machine before "
"giving the change tool command. All values are in absolute coordinates.  All "
"values are in machine native units."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:846
msgid ""
"The Python section sets up what files LinuxCNC's Python interpreter looks "
"for.  ie. 'toplevel.py' file in the 'python' folder in the configuration "
"directory:"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:859
msgid "You must copy the following files to your config directory"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:861
msgid ""
"First create a folder named 'python' in your machine's configuration folder."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:865
#, no-wrap
msgid ""
"If using a compiled RIP version of LinuxCNC:\n"
"From 'YOUR-LINUXCNC-DIRECTORY/configs/sim/QtDragon/python', copy 'toplevel.py' and 'remap.py' to your configuration's new 'python' folder."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:869
#, no-wrap
msgid ""
"if using an installed version of LinuxCNC:\n"
"from '/usr/share/doc/linuxcnc/examples/sample-configs/sim/qtvcp_screens/qtdragon/python/' , copy 'toplevel.py' and 'remap.py' to your configuration's new 'python' folder."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:872
msgid ""
"Alternately, you can make new files in your 'python' folder that you made in "
"your configuration folder, with a text editor."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:874
msgid "One named 'remap.py' saved with this text:"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:877
#, no-wrap
msgid "from stdglue import *\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:880
msgid "One named 'toplevel.py' saved with this text:"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:883
#, no-wrap
msgid "import remap\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:887
msgid ""
"Make a symbolic link or copy the following files into the 'python' folder "
"described above."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:889
msgid "In '~/linuxcnc/nc_files/examples/remap_subroutine/' folder"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:891
msgid "In '~/linuxcnc/nc_files/examples/remap_lib/python_stdglue/' folder"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:901
msgid ""
"These file names and location could be different depending on installed "
"verses development (RIP) version of LinuxCNC.  For instance '&ndash;/"
"linuxcnc/nc_files/macros' is '&ndash;/linuxcnc/nc_files/examples/macros' in "
"installed versions of LinuxCNC.  You could use customized versions of the "
"same files or name them differently.  The entries in the '[RS274NGC]' "
"section dictate to LinuxCNC what and where to look.  The names and location "
"quoted should be available in either system by default."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:907
msgid ""
"Make sure to connect the tool probe input in your HAL file: If connected "
"properly, you should be able to toggle the probe LED in QtDragon if you "
"press the probe stylus."
msgstr ""

#. type: Title ==
#: src/gui/qtdragon.adoc:913
#, no-wrap
msgid "Run from Line"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:923
msgid ""
"A G-code program can be started at any line by clicking on the desired line "
"in the G-code display while in AUTO mode.  It is the operator's "
"responsibility to ensure the machine is in the desired operational mode.  A "
"dialog will be shown allowing the spindle direction and speed to be preset.  "
"The start line is indicated in the box labelled LINE, next to the CYCLE "
"START button.  The run from line feature can be disabled in the settings "
"page."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:929
msgid ""
"LinuxCNC's run-from-line is not very user friendly. E.g., it does not start "
"the spindle or confirm the proper tool.  Also, it does not handle "
"subroutines well. If used it is best to start on a rapid move."
msgstr ""

#. type: Title ==
#: src/gui/qtdragon.adoc:930
#, no-wrap
msgid "Laser buttons"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:938
msgid ""
"The LASER ON/OFF button in intended to turn an output on or off which is "
"connected to a small laser crosshair projector.  When the crosshair is "
"positioned over a desired reference point on the workpiece, the REF LASER "
"button can be pushed which then sets the X and Y offsets to the values "
"indicated by the LASER OFFSET fields in the Settings page and the INI file."
msgstr ""

#. type: Title ==
#: src/gui/qtdragon.adoc:939
#, no-wrap
msgid "Tabs Description"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:946
#, no-wrap
msgid ""
"Tabs allow the user to select the most appropriate info/control on the top three panels.\n"
"If the on screen keyboard is showing and the user wishes to hide it but keep the current tab,\n"
"they can do that by pressing the current show tab."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:947
#, no-wrap
msgid "Main tab"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:951
#, no-wrap
msgid ""
"This tab displays the graphical representation of the current program.\n"
"The side buttons will control the display."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:953
msgid "'User View': Select/restore a user set view of the current program"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:954
msgid "'P','X','Y','Z': Set standard views"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:955
msgid "'D': Toggle display of dimensions"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:956
msgid "'+', '-': Zoom controls"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:957
msgid "'C': Clear graphics of tool movement lines"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:960
#, no-wrap
msgid ""
"In QtDragon_hd there are also macro buttons available on the right side.\n"
"Up to tens buttons can be defined in the INI."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:961
#, no-wrap
msgid "File Tab"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:966
#, no-wrap
msgid ""
"You can use this tab to load or transfer programs.\n"
"Editing of G-code programs can be selected from this tab. With qtdragon_hd, this is where you can load 'Gcode Ripper'"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:967
#, no-wrap
msgid "Offsets Tab"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:972
msgid ""
"You can monitor/modify system offsets from this tab.  there are convenience "
"buttons for zeroing the rotation.G92 and current G5x user offset."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:973
#, no-wrap
msgid "Tool Tab"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:977
#, no-wrap
msgid ""
"You can monitor/modify tool offsets from this tab.\n"
"Adding and deleting tools from the tool file can also be done from this tab."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:978
#, no-wrap
msgid "Status Tab"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:983
#, no-wrap
msgid ""
"A time-stamped log of important machine or system events will be shown here.\n"
"Machine events would be more suited to an operator, where the system events may help in debugging problems."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:984
#, no-wrap
msgid "Probe Tab"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:990
#, no-wrap
msgid ""
"Probing routines options are displayed on this tab. Depending on INI options, this could be\n"
"VersaProbe or BasicProbe style. They are functionally similar.\n"
"QtDragon_hd will also show a smaller graphics display window."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:991
#, no-wrap
msgid "Camview Tab"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:998
#, no-wrap
msgid ""
"If the recognized webcam is connected, this tab will display the video image overlayed with a cross-hair\n"
", circle and degree readout. This can be adjusted to suit a part feature for such things as touchoff.\n"
"The underlying library uses openCV Python module to connect to the webcam."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:999
#, no-wrap
msgid "G-codes Tab"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:1003
#, no-wrap
msgid ""
"This tab will display a list of LinuxCNC's G-code.\n"
"if you click on a line, a description of the code will be displayed."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:1004
#, no-wrap
msgid "Setup Tab"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:1015
msgid ""
"It's possible to load HTML or PDF file (.html / .pdf ending) with setup "
"notes.  HTML/PDF docs will be displayed in the setup tab.  Some program, "
"such as Fusion 360 and Aspire will create these files for you.  If you load "
"a G-code program and there is an HTML/PDF file of the same name, it will "
"load automatically.  You can also write your own HTML docs with the included "
"SetUp Writer button."
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:1016
#, no-wrap
msgid "QtDragon - Setup Tab Sample"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtdragon.adoc:1017
#, no-wrap
msgid "QtDragon Setup Tab"
msgstr ""

#. type: Target for macro image
#: src/gui/qtdragon.adoc:1017
#, no-wrap
msgid "images/silverdragon_setup.png"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:1019
#, no-wrap
msgid "Settings Tab"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:1023
msgid ""
"The settings tab is used to set running options, probing/touchplate/laser/"
"camera offsets and load debugging external programs."
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:1024
#, no-wrap
msgid "Utilities Tab"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:1027
msgid ""
"This tabs will display another stab election of G-code utility programs. +"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:1030
msgid ""
"'Facing': allows quick face milling of a definable area at angles of 0,45 "
"and 90 degrees"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:1032
msgid ""
"'Hole Circle': allows quick setting of a program to drill a bolt circle of "
"definable diameter and number of holes."
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:1033
msgid ""
"'NGCGUI': is a QtVCP version of the popular G-code subroutine builder/"
"selector."
msgstr ""

#. type: Title ==
#: src/gui/qtdragon.adoc:1034
#, no-wrap
msgid "Styles"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:1041
msgid ""
"Nearly all aspects of the GUI appearance are configurable via the QtDragon."
"qss stylesheet file. The file can be edited manually or through the "
"stylesheet dialog widget in the GUI. To call up the dialog, press F12 on the "
"main window. New styles can be applied temporarily and then saved to a new "
"qss file, or overwrite the current qss file."
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:1042
#, no-wrap
msgid "QtDragon - Two Style Examples"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtdragon.adoc:1043
#, no-wrap
msgid "QtDragon styles"
msgstr ""

#. type: Target for macro image
#: src/gui/qtdragon.adoc:1043
#, no-wrap
msgid "images/style-comparison.png"
msgstr ""

#. type: Title ==
#: src/gui/qtdragon.adoc:1045
#, no-wrap
msgid "Customization"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:1047
#, no-wrap
msgid "Stylesheets"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:1054
msgid ""
"Stylesheets can be leveraged to do a fair amount of customization, but you "
"usually need to know a bit about the widget names.  Pressing F12 will "
"display a stylesheet editor dialog to load/test/save modification.  For "
"instance:"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:1056
msgid "To change the DRO font (look for this entry and change the font name):"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:1065
#, no-wrap
msgid ""
"DROLabel,\n"
"StatusLabel#status_rpm {\n"
"    border: 1px solid black;\n"
"    border-radius: 4px;\n"
"    font: 20pt \"Noto Mono\";\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:1068
msgid "To change the text of the mist button to 'air' (add these lines)"
msgstr ""

#. type: delimited block -
#: src/gui/qtdragon.adoc:1075
#, no-wrap
msgid ""
"#action_mist{\n"
"qproperty-true_state_string: \"Air\\\\nOn\";\n"
"qproperty-false_state_string: \"Air\\\\nOff\";\n"
"}\n"
msgstr ""

#. type: Title ===
#: src/gui/qtdragon.adoc:1077
#, no-wrap
msgid "Qt Designer and Python code"
msgstr ""

#. type: Plain text
#: src/gui/qtdragon.adoc:1087
msgid ""
"All aspects of the GUI are fully customization through Qt Designer and/or "
"Python code.  This capability is included with the QtVCP development "
"environment.  The extensive use of QtVCP widgets keeps the amount of "
"required Python code to a minimum, allowing relatively easy modifications.  "
"The LinuxCNC website has extensive documentation on the installation and use "
"of QtVCP libraries.  <<cha:qtvcp,QtVCP Overview>> for more information"
msgstr ""

#. type: Block title
#: src/gui/qtdragon.adoc:1088
#, no-wrap
msgid "QtDragon - Customized QtDragon"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtdragon.adoc:1089
#, no-wrap
msgid "QtDragon customized"
msgstr ""

#. type: Target for macro image
#: src/gui/qtdragon.adoc:1089
#, no-wrap
msgid "images/silverdragon_custom.png"
msgstr ""

#. type: Title =
#: src/gui/qtvcp.adoc:5
#, no-wrap
msgid "QtVCP"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:16
msgid ""
"QtVCP is an *infrastructure to build custom CNC screens or control panels "
"for LinuxCNC*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:20
msgid ""
"It displays a _`.ui` file built with Qt Designer_ screen editor and combines "
"this with _Python programming_ to create a GUI screen for running a CNC "
"machine."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:23
msgid ""
"QtVCP is completely _customizable_: you can add different buttons and status "
"LEDs etc. or add python code for even finer grain customization."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp.adoc:24
#, no-wrap
msgid "Showcase"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:27
msgid "Few examples of QtVCP built screens and virtual control panels:"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:28
#, no-wrap
msgid "QtDragon - 3/4-Axis Sample"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:31
#, no-wrap
msgid "QtDefault - 3-Axis Sample"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp.adoc:32
#, no-wrap
msgid "Qtscreen Mill"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp.adoc:32
#, no-wrap
msgid "images/qt_cnc.png"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:34
#, no-wrap
msgid "QtAxis - Self Adjusting Axis Sample"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp.adoc:35
#, no-wrap
msgid "Qtscreen QtAxis"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp.adoc:35
#, no-wrap
msgid "images/qtaxis.png"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:37
#, no-wrap
msgid "Blender - 4-Axis Sample"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp.adoc:38
#, no-wrap
msgid "Qtscreen Blender"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp.adoc:38
#, no-wrap
msgid "images/blender.png"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:40
#, no-wrap
msgid "X1mill - 4-Axis Sample"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp.adoc:41 src/gui/qtvcp.adoc:44
#, no-wrap
msgid "Qtscreen x1mill"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp.adoc:41
#, no-wrap
msgid "images/x1mill.png"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:43
#, no-wrap
msgid "cam_align - Camera Alignment VCP"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp.adoc:44 src/gui/qtvcp-vcp-panels.adoc:126
#, no-wrap
msgid "images/qtvcp-cam-align.png"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:46
#, no-wrap
msgid "test_panel - Test Panel VCP"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp.adoc:47
#, no-wrap
msgid "Test Panel"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp.adoc:47 src/gui/qtvcp-vcp-panels.adoc:118
#, no-wrap
msgid "images/test_panel.png"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp.adoc:50
#, no-wrap
msgid "Overview(((QtVCP Overview)))"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:54
msgid ""
"_Two files are used, individually or in combination_, to add customizations:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:56
msgid ""
"A *UI file* that is a _XML_ file made with _Qt Designer_ graphical editor."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:57
msgid "A *handler file* which is a _Python_ code text file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:62
#, no-wrap
msgid ""
"Normally QtVCP uses the stock UI and handler file, but you can specify QtVCP to use 'local' UI and handler files.\n"
"A *'local' file* is one that is in the _configuration folder_ that defines the rest of the machine's requirements."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:66
msgid ""
"One is not restricted to adding a custom panel on the right or a custom tab "
"as QtVCP leverages _Qt Designer_ (the editor) and _PyQT5_ (the widget "
"toolkit)."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:71
#, no-wrap
msgid ""
"QtVCP has some added *special LinuxCNC widgets and actions*.\n"
"There are special widgets to bridge third party widgets to HAL pins.\n"
"It's possible to create widget responses by connecting signals to Python code in the handler file."
msgstr ""

#. type: Title =
#: src/gui/qtvcp.adoc:72 src/gui/qtvcp-widgets.adoc:5
#, no-wrap
msgid "QtVCP Widgets"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:75
msgid "QtVCP uses the *PyQt5 toolkit's widgets* for LinuxCNC integration."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:78
#, no-wrap
msgid ""
"*Widget* is the _general name for user interface objects_ such as buttons\n"
"and labels in PyQT5.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:81
msgid ""
"You are free to use any available *default widgets* in the Qt Designer "
"editor."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:85
#, no-wrap
msgid ""
"There are also *special widgets* made for LinuxCNC that make integration easier.\n"
"These are split in three heading on the left side of the editor:"
msgstr ""

#. TODO Add links to sections of QtVCP Widgets chapter
#. type: Plain text
#: src/gui/qtvcp.adoc:88
msgid "One is for _HAL only widgets_;"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:89
msgid "One is for _CNC control widgets_;"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:90
msgid "One is for _Dialog widgets_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:92 src/gui/qtvcp-widgets.adoc:28
msgid "You are free to mix them in any way on your panel."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:96
msgid ""
"A very important widget for CNC control is the *`ScreenOptions` widget*: it "
"does not add anything visually to the screen but, allows important details "
"to be selected rather then be coded in the handler file."
msgstr ""

#. FIXME unclear
#. type: Plain text
#: src/gui/qtvcp.adoc:102
msgid ""
"If you are using QtVCP to make a CNC control screen, in the INI file, in the "
"`[DISPLAY]` section, add a line with the following pattern:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:106
#, no-wrap
msgid "DISPLAY = qtvcp <options> <screen_name>\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:110
msgid "All `<options>` must appear before `<screen_name>`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:114
msgid "`-d` Debugging on"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:115
msgid "`-a` Set window always on top"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:116
msgid "`-c` HAL component name. Default is to use the UI file name."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:118
msgid ""
"`-g` Geometry: WIDTHxHEIGHT+XOFFSET+YOFFSET. Example: `-g 200x400+0+100`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:119
msgid "`-m` Maximize window"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:120
msgid "`-f` Fullscreen the window"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:121
msgid "`-t` Theme. Default is system theme"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:122
msgid "`-x` Embed into a X11 window that doesn't support embedding."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:124
msgid ""
"`--push_xid` Send QtVCP's X11 window id number to standard output; for "
"embedding."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:125
msgid "`-u` File path of a substitute handler file"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:127
msgid ""
"`-o` Pass a string to QtVCP's handler file under `self.w.USEROPTIONS_` list "
"variable. can be multiple -o"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:128
#, no-wrap
msgid "<screen_name>"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:131
#, no-wrap
msgid ""
"`<screen_name>` is the _base name of the .ui and _handler.py files_.\n"
"If `<screen_name>` is missing, the default screen will be loaded."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:133
msgid ""
"QtVCP assumes the UI file and the handler file use the *same base name*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:137
msgid ""
"QtVCP will first search the LinuxCNC configuration directory that was "
"launched for the files, then in the system skin folder holding standard "
"screens."
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:138
#, no-wrap
msgid "Cycle Times"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:146
#, no-wrap
msgid ""
"[DISPLAY]\n"
"CYCLE_TIME = 100\n"
"GRAPHICS_CYCLE_TIME = 100\n"
"HALPIN_CYCLE = 100\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:150
#, no-wrap
msgid ""
"Adjusts the response rate of the GUI updates in milliseconds.\n"
"Defaults to 100, useable range 50 - 200."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:152
msgid "The widgets, graphics and HAL pin update can be set separately."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:155
msgid ""
"If the update time is not set right the screen can become unresponsive or "
"very jerky."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:156
#, no-wrap
msgid "Qt Designer UI File"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:160
msgid ""
"A Qt Designer file is a text file organized in the _XML_ standard that "
"describes the *layout and widgets* of the screen."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:162
msgid "_PyQt5_ uses this file to build the display and react to those widgets."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:165
msgid ""
"The Qt Designer editor makes it relatively easy to build and edit this file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:170
msgid ""
"A handler file is a file containing _Python_ code, which *adds to QtVCP "
"default routines*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:174
msgid ""
"A handler file allows one to _modify defaults_, or _add logic_ to a QtVCP "
"screen without having to modify QtVCP's core code. In this way you can have "
"*custom behaviors*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:177
#, no-wrap
msgid ""
"If present a handler file will be loaded.\n"
"*Only one file* is allowed."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:178
#, no-wrap
msgid "Libraries Modules"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:183
msgid ""
"QtVCP, as built, does little more than display the screen and react to "
"widgets. For more *prebuilt behaviors* there are available libraries (found "
"in `lib/python/qtvcp/lib` in RIP LinuxCNC install)."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:188
#, no-wrap
msgid ""
"*Libraries* are prebuilt _Python modules_ that *add features* to QtVCP.\n"
"In this way you can select what features you want - yet don't have to\n"
"build common ones yourself. +\n"
"Such libraries include:\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:190
msgid "`audio_player`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:191
msgid "`aux_program_loader`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:192
msgid "`keybindings`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:193
msgid "`message`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:194
msgid "`preferences`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:195
msgid "`notify`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:196
msgid "`virtual_keyboard`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:197
msgid "`machine_log`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:202
msgid ""
"Themes are a way to modify the *look and feel* of the widgets on the screen."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:205
msgid ""
"For instance the _color_ or _size_ of buttons and sliders can be changed "
"using themes."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:208
#, no-wrap
msgid ""
"The _Windows theme_ is default for screens.\n"
"The _System theme_ is default for panels."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:211
msgid ""
"To see available themes, they can be loaded by running the following command "
"in a terminal:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:214
#, no-wrap
msgid "qtvcp -d -t <theme_name>\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:217
msgid "QtVCP can also be customized with _Qt stylesheets (QSS)_ using CSS."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:218
#, no-wrap
msgid "Local Files"
msgstr ""

#. FIXME Does that applies to .ui files only or handler.py and qss too ?
#. FIXME How does overriding/inheritance actually works ?
#. type: Plain text
#: src/gui/qtvcp.adoc:225
msgid ""
"If present, local UI files in the configuration folder will be loaded "
"instead of the stock UI files."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:228
msgid ""
"Local UI files allow you to use your customized designs rather than the "
"default screens."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:231
msgid ""
"QtVCP will look for a folder named <screen_name> (in the launched "
"configuration folder that holds the INI file)."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:233
msgid "In that folder, QtVCP will load any of the available following files:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:235
msgid "`<screen_name>.ui`,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:236
msgid "`<screen_name>_handler.py`, and"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:237
msgid "`<screen_name>.qss`."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:238
#, no-wrap
msgid "Modifying Stock Screens"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:241
msgid "There are _three ways_ to customize a screen/panel."
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:242
#, no-wrap
msgid "Minor StyleSheet Changes"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:246
#, no-wrap
msgid ""
"Stylesheets can be used to *set Qt properties*.\n"
"If a widget uses properties they usually can be modified by stylesheets.\n"
"ie:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:254
#, no-wrap
msgid ""
"State_LED #name_of_led{\n"
"  qproperty-color: red;\n"
"  qproperty-diameter: 20;\n"
"  qproperty-flashRate: 150;\n"
"  }\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:256
#, no-wrap
msgid "Minor Python Code Changes"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:259
msgid ""
"Another Python file can be used to *add commands* to the screen, after the "
"handler file is parsed."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:262
msgid ""
"In the _INI file_ under the `[DISPLAY]` heading add *`USER_COMMAND_FILE = "
"_PATH_`* +"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:267
#, no-wrap
msgid ""
"_PATH_ can be any valid path. It can use `~` for home directory or `WORKINGDIRECTORY` or `CONFIGDIRECTORY` to represent QtVCP's idea of those directories.\n"
"ie:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:272
#, no-wrap
msgid ""
"[DISPLAY]\n"
"USER_COMMAND_FILE = CONFIGDIRECTORY/<screen_name_added_commands>\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:277
#, no-wrap
msgid ""
"If no entry is found in the _INI_, QtVCP will look in the *default path*.\n"
"The default path is in the configuration directory as a hidden file using the screen basename and rc, ie: *`CONFIGDIRECTORY/.<screen_name>rc`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:280
msgid ""
"This file will be read and executed as Python code in the *handler file "
"context*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:284
#, no-wrap
msgid ""
"*Only local functions and local attributes* can be referenced. +\n"
"Global libraries can not be referenced. (usualy seen as all capital\n"
"words with no preceding self.) +\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:286
msgid "What can be used can vary by screen and development cycle."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:288
msgid "For a valid example:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:292
#, no-wrap
msgid "self.w.setWindowTitle('My Title Test')\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:294
#, no-wrap
msgid "Full Creative Control"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:297
msgid ""
"If you wish to *modify a stock screen* with full control, _copy it's UI and "
"handler file to your configuration folder_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:299
msgid "There is a QtVCP panel to help with this:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:301
msgid "Open a terminal and run the following command:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:304
#, no-wrap
msgid "qtvcp copy_dialog\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:307
msgid "Select the screen and destination folder in the dialog"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:309
msgid ""
"If you wish to *name your screen* differently than the builtin screen's "
"default name, change the _basename_ in the edit box."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:310
msgid "Validate to copy all the files"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:312
msgid ""
"Delete the files you don't wish to modifyso that the original files will be "
"used."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp.adoc:314
#, no-wrap
msgid "VCP Panels"
msgstr ""

#. FIXME Duplicate with qtvcp-vcp-panels.adoc content
#.   @silopolis thinks: remove from here as this file should be split anyway
#. type: Plain text
#: src/gui/qtvcp.adoc:319
msgid "QtVCP can be used to create control panels that interface with *HAL*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:320
#, no-wrap
msgid "Builtin Panels"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:323 src/gui/qtvcp-vcp-panels.adoc:19
msgid "There are several *builtin HAL panels* available."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:325
msgid "In a terminal type `qtvcp <return>` to see a list:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:326
#, no-wrap
msgid "*`test_panel`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:329
msgid ""
"Collection of useful widgets for testing HAL components, including speech of "
"LED state."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp.adoc:330 src/gui/qtvcp.adoc:331
#, no-wrap
msgid "QtVCP HAL Test Builtin Panel"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp.adoc:331
#, no-wrap
msgid "images/qtvcp_test_panel.png"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:333
#, no-wrap
msgid "*`cam_align`*"
msgstr ""

#. FIXME Add cam_align VCP capture
#. type: Plain text
#: src/gui/qtvcp.adoc:335
msgid "A camera display widget for rotational alignment."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:336
#, no-wrap
msgid "*`sim_panel`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:339
#, no-wrap
msgid ""
"A small control panel to simulate MPG jogging controls etc.\n"
"For simulated configurations."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp.adoc:340 src/gui/qtvcp.adoc:341
#, no-wrap
msgid "QtVCP Sim Builtin Panel"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp.adoc:341 src/gui/qtvcp-vcp-panels.adoc:140
#, no-wrap
msgid "images/qtvcp_sim_panel.png"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:343
#, no-wrap
msgid "*`vismach_mill_xyz`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:345
msgid "3D openGL view of a 3-Axis milling machine."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp.adoc:346 src/gui/qtvcp.adoc:347
#, no-wrap
msgid "QtVismach - 3-Axis Mill Builtin Panel"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp.adoc:347 src/gui/qtvcp-vcp-panels.adoc:179
#: src/gui/qtvcp-vismach.adoc:19
#, no-wrap
msgid "images/qtvismach.png"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:353 src/gui/qtvcp-vcp-panels.adoc:115
#, no-wrap
msgid "loadusr qtvcp test_panel\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:355
#, no-wrap
msgid "Custom Panels"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:358 src/gui/qtvcp-vcp-panels.adoc:234
msgid "You can of course *make your own panel and load it*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:361 src/gui/qtvcp-vcp-panels.adoc:237
msgid ""
"If you made a UI file named `my_panel.ui` and a HAL file named `my_panel."
"hal`, you would then load this from a terminal with:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:364 src/gui/qtvcp-vcp-panels.adoc:240
#, no-wrap
msgid "halrun -I -f my_panel.hal\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:366 src/gui/qtvcp-vcp-panels.adoc:242
#, no-wrap
msgid "Example HAL file loading a QtVCP panel"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:372 src/gui/qtvcp-vcp-panels.adoc:248
#, no-wrap
msgid ""
"# load realtime components\n"
"loadrt threads\n"
"loadrt classicladder_rt\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:376 src/gui/qtvcp-vcp-panels.adoc:252
#, no-wrap
msgid ""
"# load user space programs\n"
"loadusr classicladder\n"
"loadusr -Wn my_panel qtvcp my_panel.ui  # <1>\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:379 src/gui/qtvcp-vcp-panels.adoc:255
#, no-wrap
msgid ""
"# add components to thread\n"
"addf classicladder.0.refresh thread1\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:384 src/gui/qtvcp-vcp-panels.adoc:260
#, no-wrap
msgid ""
"# connect pins\n"
"net bit-input1     test_panel.checkbox_1        classicladder.0.in-00\n"
"net bit-hide       test_panel.checkbox_4        classicladder.0.hide_gui\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:386 src/gui/qtvcp-vcp-panels.adoc:262
#, no-wrap
msgid "net bit-output1    test_panel.led_1             classicladder.0.out-00\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:388 src/gui/qtvcp-vcp-panels.adoc:264
#, no-wrap
msgid "net s32-in1        test_panel.doublescale_1-s   classicladder.0.s32in-00\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:391 src/gui/qtvcp-vcp-panels.adoc:267
#, no-wrap
msgid ""
"# start thread\n"
"start\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:397 src/gui/qtvcp-vcp-panels.adoc:273
#, no-wrap
msgid ""
"In this case we load `qtvcp` using *`-Wn`* which waits for the panel to finish loading before continuing to run the next HAL command.\n"
"This is to _ensure that the panel created HAL pins are actually done_ in case they are used in the rest of the file."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp.adoc:398
#, no-wrap
msgid "Build A Simple Clean-sheet Custom Screen"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp.adoc:400 src/gui/qtvcp.adoc:401
#, no-wrap
msgid "QtVCP Ugly custom screen"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp.adoc:401
#, no-wrap
msgid "images/qtvcp_tester.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:406
msgid "To build a panel or screen:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:409
msgid ""
"Use Qt Designer to build a design you like and save it to your configuration "
"folder with a name of your choice, ending with `.ui`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:411
msgid ""
"Modify the configuration INI file to load QtVCP using your new `.ui` file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:412
msgid "Then connect any required HAL pins in a HAL file."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:413
#, no-wrap
msgid "Get Qt Designer To Include LinuxCNC Widgets"
msgstr ""

#. TODO Create a Qt Designer install section, or chapter (maybe in docs/src/code)
#. TODO Convert https://github.com/LinuxCNC/linuxcnc/blob/master/lib/python/qtvcp/designer/README.txt to AsciiDoc and include it directly in install section/chapter
#. TODO Upgrade install to document use of https://github.com/LinuxCNC/linuxcnc/blob/master/lib/python/qtvcp/designer/install_script
#. type: Block title
#: src/gui/qtvcp.adoc:419
#, no-wrap
msgid "Install Qt Designer"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:423
#, no-wrap
msgid ""
"First you must have the *Qt Designer installed*.\n"
"The following commands should add it to your system, or use your package manager to do the same:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:426
#, no-wrap
msgid "sudo apt-get install qttools5-dev-tools qttools5-dev libpython3-dev\n"
msgstr ""

#
#
#
#. FIXME Do we need to keep this ?
#. Luego necesita agregar la biblioteca de carga del módulo python.
#. QtVCP usa QT5 con python2. Esta combinación normalmente no está
#. disponible desde repositorios. Puede compilarlo usted mismo, o hay
#. versiones precompiladas disponible para sistemas comunes.
#. En 'lib/python/qtvcp/designer' hay carpetas basadas en arquitecturas de
#. sistema y luego la versión QT.
#. Debe elegir la carpeta de arquitectura de la CPU y luego elegir la
#. serie; 5.5, 5.7 o 5.9 de Qt.
#. Actualmente el estiramiento de Debian usa 5.7, Mint 12 usa 5.5, Mint 19
#. usa 5.9.
#. En caso de duda, verifique la versión de QT5 en el sistema.
#. Debe descomprimir el archivo y luego copiar esa versión adecuada de
#. 'libpyqt5_py2.so' a esta carpeta
#. '/usr/lib/x86_64-linux-gnu/qt5/plugins/designer'.
#. (x86_64-linux-gnu podría llamarse algo ligeramente diferente en
#. diferentes sistemas)
#. Necesitará privilegios de superusuario para copiar el archivo en la
#. carpeta.
#. type: Block title
#: src/gui/qtvcp.adoc:453
#, no-wrap
msgid "Add `qtvcp_plugin.py` link to the Qt Designer Search Path"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:456
msgid ""
"Then you must add a link to the `qtvcp_plugin.py` in one of the folders that "
"Qt Designer will search into."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:458
msgid "In a _RIP_ version of LinuxCNC `qtvcp_plugin.py` will be:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:460
#, no-wrap
msgid "  '~/LINUXCNC_PROJECT_NAME/lib/python/qtvcp/plugins/qtvcp_plugin.py'\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:462
msgid "For a _Package installed_ version it should be:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:465
#, no-wrap
msgid ""
"  'usr/lib/python2.7/qtvcp/plugins/qtvcp_plugin.py' or\n"
"  'usr/lib/python2.7/dist-packages/qtvcp/plugins/qtvcp_plugin.py'\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:468
msgid ""
"Make a symbolic link to the above file and move it to one of the places Qt "
"Designer searches in."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:470
msgid "Qt Designer searches in these two place for links (pick one):"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:473
#, no-wrap
msgid ""
"  '/usr/lib/x86_64-linux-gnu/qt5/plugins/designer/python' or\n"
"  '~/.designer/plugins/python'\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:475
msgid "You may need to create the `plugins/python` folder."
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:476
#, no-wrap
msgid "Start Qt Designer:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:481
#, no-wrap
msgid ""
"For a _RIP install_:\n"
"Open a terminal, set the environment for LinuxCNC <1>, then load Qt Designer <2> with :"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:485
#, no-wrap
msgid ""
". scripts/rip-environment   <1>\n"
"designer -qt=5              <2>\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:489
#, no-wrap
msgid ""
"For a _package install_:\n"
"Open a terminal and type:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:492
#, no-wrap
msgid "designer -qt=5\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:496
msgid ""
"If all goes right, Qt Designer will launch and you will see the selectable "
"LinuxCNC widgets on the left hand side."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:497
#, no-wrap
msgid "Build The Screen `.ui` File"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:499
#, no-wrap
msgid "Create `MainWindow` Widget"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:504
#, no-wrap
msgid ""
"When Qt Designer is first started there is a _'New Form' dialog_ displayed.\n"
"Pick _'Main Window'_ and press the _'Create'_ button.\n"
"A _`MainWindow` widget_ is displayed."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:507
#, no-wrap
msgid ""
"*Do not rename this window !* +\n"
"  QtVCP requires the name to be `MainWindow`.\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:508
#, no-wrap
msgid "Set `MainWindow` Minimum and Maximum Size"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:511
msgid ""
"Grab the corner of the window and resize to an appropriate size, say "
"1000x600. +"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:512
msgid "Right click on the window and click set _minimum size_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:513
msgid "Do it again and set _maximum size_."
msgstr ""

#. FIXME Is that mandatory ?
#. type: Plain text
#: src/gui/qtvcp.adoc:516
msgid "Our sample widget will now not be resizable."
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:517
#, no-wrap
msgid "Add the `ScreenOptions` Widget"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:519
msgid "Drag and drop the `ScreenOptions` widget anywhere onto the main window."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:522
msgid ""
"This widget doesn't add anything visually but sets up some *common options*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:524
msgid "It's recommended to always _add this widget before any other_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:527
msgid ""
"Right click on the main window, not the `ScreenOptions` widget, and set the "
"_layout_ as vertical to make the `ScreenOptions` fullsized."
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:528
#, no-wrap
msgid "Add Panel Content"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:531
msgid ""
"On the right hand side there is a panel with tabs for a _Property editor_ "
"and an _Object inspector_."
msgstr ""

#. TODO Explain what this FileDialo_option does
#. type: Plain text
#: src/gui/qtvcp.adoc:535
#, no-wrap
msgid ""
"On the Object inspector click on the _ScreenOptions_.\n"
"Then switch to the Property Editor and, under the _ScreenOptions_ heading, toggle *`filedialog_option`*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:540
#, no-wrap
msgid ""
"Drag and drop a *`GCodeGraphics`* _widget_ and a *`GcodeEditor`* _widget_.\n"
"Place and resize them as you see fit leaving some room for buttons."
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:541
#, no-wrap
msgid "Add Action Buttons"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:543
msgid "Add 7 action buttons on to the main window."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:547
#, no-wrap
msgid ""
"If you double click the button, you can add text.\n"
"Edit the button labels for 'Estop', 'Machine On', 'Home', 'Load', 'Run', 'Pause' and 'stop'."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:550
msgid ""
"Action buttons _default to no action_ so we must change the properties for "
"defined functions. You can edit the properties:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:552
msgid "directly in the _property editor_ on the right side of Qt Designer, or"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:555
msgid ""
"conveniently, left double clicking on the button to launch a _properties "
"dialog_ that allows selecting actions while only displaying relevant data to "
"the action."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:557
msgid "We will describe the convenient way first:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:559
msgid "Right click the 'Machine On' button and select _Set Actions_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:561
msgid ""
"When the dialog displays, use the combobox to navigate to `MACHINE CONTROLS "
"- Machine On`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:562
msgid "In this case there is no option for this action so select 'OK'. +"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:564
msgid "Now the button will turn the machine on when pressed."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:566
msgid "And now the direct way with Qt Designer's property editor:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:568
msgid "Select the 'Machine On' button."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:569
msgid "Go to the Property Editor on the right side of Qt Designer."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:570
msgid "Scroll down until you find the _ActionButton_ heading."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:572
msgid ""
"Click the `machine_on` action checkbox you will see in the list of "
"properties and values."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:574
msgid "The button will now control machine on/off."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:576
msgid "Do the same for all the other button with the addition of:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:581
#, no-wrap
msgid ""
"With the 'Home' button we must also change the `joint_number` property to `-1`.\n"
"This tells the controller to _home all the axes_ rather then a specific axis."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:582
msgid "With the 'Pause' button:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:583
msgid "Under the `Indicated_PushButton` heading check the `indicator_option`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:584
msgid "Under the `QAbstactButton` heading check `checkable`."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp.adoc:585 src/gui/qtvcp.adoc:586
#, no-wrap
msgid "Qt Designer: Selecting Pause Button's Properties"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp.adoc:586
#, no-wrap
msgid "images/designer_button_property.png"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:588
#, no-wrap
msgid "Save The `.ui` File"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:591
msgid ""
"We then need to save this design as `tester.ui` in the `sim/qtvcp` folder."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:594
msgid ""
"We are saving it as _tester_ as that is a file name that qtvcp recognizes "
"and will use a built in handler file to display it."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:595
#, no-wrap
msgid "Handler file"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:598
msgid "A handler file is *required*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:600
msgid "It allows customizations to be written in Python."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:603
msgid ""
"For instance, _keyboard controls_ are usually written in the handler file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:607
msgid ""
"In this example, the built in file `tester_handler.py` is automatically "
"used: it does the minimum required to display the `tester.ui` defined screen "
"and do basic keyboard jogging."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:608
#, no-wrap
msgid "INI Configuration"
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:610
#, no-wrap
msgid "[DISPLAY] Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:614
msgid ""
"If you are using QtVCP to make a CNC control screen, under the _INI file_ "
"`[DISPLAY]` heading, set:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:618
#, no-wrap
msgid "DISPLAY = qtvcp <screen_name>\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:621
msgid ""
"`<screen_name>` is the _base name_ of the `.ui` and `_handler.py` files."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:624
msgid ""
"In our example there is already a sim configuration called tester, that we "
"will use to display our test screen."
msgstr ""

#. type: Block title
#: src/gui/qtvcp.adoc:625
#, no-wrap
msgid "[HAL] Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:629
msgid ""
"If your screen used _widgets with HAL pins_, then you must *connect them in "
"a HAL file*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:632
msgid ""
"QtVCP looks in the _INI file_, under the `[HAL]` heading for the entries "
"below:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:633
#, no-wrap
msgid "*`POSTGUI_HALFILE=<filename>`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:640
#, no-wrap
msgid ""
"Typically `<filename>` would be `+<screen_name>_postgui.hal+`, but can be any legal filename.\n"
"You can have _multiple `POSTGUI_HALFILE` lines_ in the INI: each will be run one after the other in the order they appear.\n"
"These commands are _executed after the screen is built_, guaranteeing the widget HAL pins are available."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:641
#, no-wrap
msgid "*`POSTGUI_HALCMD=<command>`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:647
#, no-wrap
msgid ""
"`<command>` would be _any valid HAL command_.\n"
"You can have _multiple `POSTGUI_HALCMD` lines_ in the INI: each will be run one after the other in the order they appear.\n"
"To guaranty the widget HAL pins are available, these commands are executed:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:648
msgid "_after the screen is built_,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:649
msgid "_after all the POSTGUI_HALFILEs are run_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:651
msgid "In our example there are no HAL pins to connect."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp.adoc:652
#, no-wrap
msgid "Handler File In Detail"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:655
msgid "Handler files are used to _create custom controls using Python_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:659
msgid "Here is a sample handler file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:661
msgid "It's broken up in sections for ease of discussion."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:671
#, no-wrap
msgid ""
"############################\n"
"# **** IMPORT SECTION **** #\n"
"############################\n"
"import sys\n"
"import os\n"
"import linuxcnc\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:673
#, no-wrap
msgid "from PyQt5 import QtCore, QtWidgets\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:678
#, no-wrap
msgid ""
"from qtvcp.widgets.mdi_line import MDILine as MDI_WIDGET\n"
"from qtvcp.widgets.gcode_editor import GcodeEditor as GCODE\n"
"from qtvcp.lib.keybindings import Keylookup\n"
"from qtvcp.core import Status, Action\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:682
#, no-wrap
msgid ""
"# Set up logging\n"
"from qtvcp import logger\n"
"LOG = logger.getLogger(__name__)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:685
#, no-wrap
msgid ""
"# Set the log level for this module\n"
"#LOG.setLevel(logger.INFO) # One of DEBUG, INFO, WARNING, ERROR, CRITICAL\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:696
#, no-wrap
msgid ""
"KEYBIND = Keylookup()\n"
"STATUS = Status()\n"
"ACTION = Action()\n"
"###################################\n"
"# **** HANDLER CLASS SECTION **** #\n"
"###################################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:708
#, no-wrap
msgid ""
"    ########################\n"
"    # **** INITIALIZE **** #\n"
"    ########################\n"
"    # widgets allows access to  widgets from the QtVCP files\n"
"    # at this point the widgets and hal pins are not instantiated\n"
"    def __init__(self, halcomp,widgets,paths):\n"
"        self.hal = halcomp\n"
"        self.w = widgets\n"
"        self.PATHS = paths\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:712
#, no-wrap
msgid ""
"    ##########################################\n"
"    # SPECIAL FUNCTIONS SECTION              #\n"
"    ##########################################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:719
#, no-wrap
msgid ""
"    # at this point:\n"
"    # the widgets are instantiated.\n"
"    # the HAL pins are built but HAL is not set ready\n"
"    # This is where you make HAL pins or initialize state of widgets etc\n"
"    def initialized__(self):\n"
"        pass\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:726
#, no-wrap
msgid ""
"    def processed_key_event__(self,receiver,event,is_pressed,key,code,shift,cntrl):\n"
"        # when typing in MDI, we don't want keybinding to call functions\n"
"        # so we catch and process the events directly.\n"
"        # We do want ESC, F1 and F2 to call keybinding functions though\n"
"        if code not in(QtCore.Qt.Key_Escape,QtCore.Qt.Key_F1 ,QtCore.Qt.Key_F2,\n"
"                    QtCore.Qt.Key_F3,QtCore.Qt.Key_F5,QtCore.Qt.Key_F5):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:742
#, no-wrap
msgid ""
"            # search for the top widget of whatever widget received the event\n"
"            # then check if it's one we want the keypress events to go to\n"
"            flag = False\n"
"            receiver2 = receiver\n"
"            while receiver2 is not None and not flag:\n"
"                if isinstance(receiver2, QtWidgets.QDialog):\n"
"                    flag = True\n"
"                    break\n"
"                if isinstance(receiver2, MDI_WIDGET):\n"
"                    flag = True\n"
"                    break\n"
"                if isinstance(receiver2, GCODE):\n"
"                    flag = True\n"
"                    break\n"
"                receiver2 = receiver2.parent()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:759
#, no-wrap
msgid ""
"            if flag:\n"
"                if isinstance(receiver2, GCODE):\n"
"                    # if in manual do our keybindings - otherwise\n"
"                    # send events to G-code widget\n"
"                    if STATUS.is_man_mode() == False:\n"
"                        if is_pressed:\n"
"                            receiver.keyPressEvent(event)\n"
"                            event.accept()\n"
"                        return True\n"
"                elif is_pressed:\n"
"                    receiver.keyPressEvent(event)\n"
"                    event.accept()\n"
"                    return True\n"
"                else:\n"
"                    event.accept()\n"
"                    return True\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:761
#, no-wrap
msgid "        if event.isAutoRepeat():return True\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:771
#, no-wrap
msgid ""
"        # ok if we got here then try keybindings\n"
"        try:\n"
"            return KEYBIND.call(self,event,is_pressed,shift,cntrl)\n"
"        except NameError as e:\n"
"            LOG.debug('Exception in KEYBINDING: {}'.format (e))\n"
"        except Exception as e:\n"
"            LOG.debug('Exception in KEYBINDING:', exc_info=e)\n"
"            print('Error in, or no function for: %s in handler file for-%s'%(KEYBIND.convert(event),key))\n"
"            return False\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:775
#, no-wrap
msgid ""
"    ########################\n"
"    # CALLBACKS FROM STATUS #\n"
"    ########################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:779
#, no-wrap
msgid ""
"    #######################\n"
"    # CALLBACKS FROM FORM #\n"
"    #######################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:783
#, no-wrap
msgid ""
"    #####################\n"
"    # GENERAL FUNCTIONS #\n"
"    #####################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:801
#, no-wrap
msgid ""
"    # keyboard jogging from key binding calls\n"
"    # double the rate if fast is true \n"
"    def kb_jog(self, state, joint, direction, fast = False, linear = True):\n"
"        if not STATUS.is_man_mode() or not STATUS.machine_is_on():\n"
"            return\n"
"        if linear:\n"
"            distance = STATUS.get_jog_increment()\n"
"            rate = STATUS.get_jograte()/60\n"
"        else:\n"
"            distance = STATUS.get_jog_increment_angular()\n"
"            rate = STATUS.get_jograte_angular()/60\n"
"        if state:\n"
"            if fast:\n"
"                rate = rate * 2\n"
"            ACTION.JOG(joint, direction, rate, distance)\n"
"        else:\n"
"            ACTION.JOG(joint, 0, 0, 0)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:805
#, no-wrap
msgid ""
"    #####################\n"
"    # KEY BINDING CALLS #\n"
"    #####################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:825
#, no-wrap
msgid ""
"    # Machine control\n"
"    def on_keycall_ESTOP(self,event,state,shift,cntrl):\n"
"        if state:\n"
"            ACTION.SET_ESTOP_STATE(STATUS.estop_is_clear())\n"
"    def on_keycall_POWER(self,event,state,shift,cntrl):\n"
"        if state:\n"
"            ACTION.SET_MACHINE_STATE(not STATUS.machine_is_on())\n"
"    def on_keycall_HOME(self,event,state,shift,cntrl):\n"
"        if state:\n"
"            if STATUS.is_all_homed():\n"
"                ACTION.SET_MACHINE_UNHOMED(-1)\n"
"            else:\n"
"                ACTION.SET_MACHINE_HOMING(-1)\n"
"    def on_keycall_ABORT(self,event,state,shift,cntrl):\n"
"        if state:\n"
"            if STATUS.stat.interp_state == linuxcnc.INTERP_IDLE:\n"
"                self.w.close()\n"
"            else:\n"
"                self.cmnd.abort()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:829
#, no-wrap
msgid ""
"    # Linear Jogging\n"
"    def on_keycall_XPOS(self,event,state,shift,cntrl):\n"
"        self.kb_jog(state, 0, 1, shift)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:832
#, no-wrap
msgid ""
"    def on_keycall_XNEG(self,event,state,shift,cntrl):\n"
"        self.kb_jog(state, 0, -1, shift)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:835
#, no-wrap
msgid ""
"    def on_keycall_YPOS(self,event,state,shift,cntrl):\n"
"        self.kb_jog(state, 1, 1, shift)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:838
#, no-wrap
msgid ""
"    def on_keycall_YNEG(self,event,state,shift,cntrl):\n"
"        self.kb_jog(state, 1, -1, shift)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:841
#, no-wrap
msgid ""
"    def on_keycall_ZPOS(self,event,state,shift,cntrl):\n"
"        self.kb_jog(state, 2, 1, shift)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:844
#, no-wrap
msgid ""
"    def on_keycall_ZNEG(self,event,state,shift,cntrl):\n"
"        self.kb_jog(state, 2, -1, shift)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:848
#, no-wrap
msgid ""
"    def on_keycall_APOS(self,event,state,shift,cntrl):\n"
"        pass\n"
"        #self.kb_jog(state, 3, 1, shift, False)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:852
#, no-wrap
msgid ""
"    def on_keycall_ANEG(self,event,state,shift,cntrl):\n"
"        pass\n"
"        #self.kb_jog(state, 3, -1, shift, linear=False)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:856
#, no-wrap
msgid ""
"    ###########################\n"
"    # **** closing event **** #\n"
"    ###########################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:860 src/gui/qtvcp-custom-widgets.adoc:582
#, no-wrap
msgid ""
"    ##############################\n"
"    # required class boiler code #\n"
"    ##############################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:865 src/gui/qtvcp-custom-widgets.adoc:587
#, no-wrap
msgid ""
"    def __getitem__(self, item):\n"
"        return getattr(self, item)\n"
"    def __setitem__(self, item, value):\n"
"        return setattr(self, item, value)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:869
#, no-wrap
msgid ""
"################################\n"
"# required handler boiler code #\n"
"################################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:872
#, no-wrap
msgid ""
"def get_handlers(halcomp,widgets,paths):\n"
"     return [HandlerClass(halcomp,widgets,paths)]\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:874
#, no-wrap
msgid "IMPORT Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:877
msgid ""
"This section is for *importing required library modules* for your screen."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:880
msgid ""
"It would be typical to import QtVCP's _keybinding_, _Status_ and _Action_ "
"libraries."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:881
#, no-wrap
msgid "INSTANTIATE LIBRARIES Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:884
msgid "By instantiating the libraries here we *create global reference*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:887
msgid ""
"You can note this by the commands that don't have `self.` in front of them."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:889
msgid ""
"By convention we _capitalize the names of globaly referenced libraries_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:890
#, no-wrap
msgid "HANDLER CLASS Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:893
msgid "The *custom code* is placed _in a class so QtVCP can utilize it_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:895
msgid "This is the definitions of the handler class."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:896
#, no-wrap
msgid "INITIALIZE Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:900
msgid ""
"Like all Python libraries the *`+__init__+` function* is called when the "
"library is _first instantiated_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:903
msgid ""
"This is where you would set up _defaults_, as well as _reference variables_ "
"and _global variables_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:905
msgid "The widget references are not available at this point."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:908
msgid ""
"The variables `halcomp`, `widgets` and `paths` give access to QtVCP's HAL "
"component, widgets, and path info respectively."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:909
#, no-wrap
msgid "SPECIAL FUNCTIONS Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:913
msgid ""
"There are several _special functions_ that QtVCP looks for in the handler "
"file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:916
msgid ""
"If QtVCP finds these it will call them, if not it will silently ignore them."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:917
#, no-wrap
msgid "*`initialized__(self):`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:921
#, no-wrap
msgid ""
"This function is _called after the widgets and HAL pins are built_.\n"
"You can manipulate the widgets and HAL pins or add more HAL pins here.\n"
"Typically there can be"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:922
msgid "preferences checked and set,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:923
msgid "styles applied to widgets,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:924
msgid "status of LinuxCNC connected to functions."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:925
msgid "keybindings would be added."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:926
#, no-wrap
msgid "*`class_patch__(self):`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:933
#, no-wrap
msgid ""
"_Class patching_, also known as _monkey patching_, allows to *override function calls in an imported module*.\n"
"Class patching must be done _before the module is instantiated_, and it _modifies all instances_ made after that.\n"
"An example might be patching button calls from the G-code editor to call functions in the handler file instead. +"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:934
#, no-wrap
msgid "*`processed_key_event__(self,receiver,event,is_pressed,key,code,shift,cntrl):`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:938
#, no-wrap
msgid ""
"This function is called to facilitate _keyboard jogging_ etc.\n"
"By using the _`keybinding` library_ this can be used to easily add functions bound to keypresses."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:939
#, no-wrap
msgid "*`keypress_event__(self,receiver, event):`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:942
#, no-wrap
msgid ""
"This function gives *raw key press events*.\n"
"It takes _precedence over_ the `processed_key_event`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:943
#, no-wrap
msgid "*`keyrelease_event__(receiver, event):`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:946
#, no-wrap
msgid ""
"This function gives *raw key release events*.\n"
"It takes _precedence over_ the `processed_key_event`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:947
#, no-wrap
msgid "*`before_loop__(self):`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:951
msgid ""
"This function is _called just before the Qt event loop is entered_.  At that "
"point, all widgets/libraries/initialization code has completed and the "
"screen is already displayed."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:952
#, no-wrap
msgid "*`system_shutdown_request__(self):`*"
msgstr ""

#. TODO Example(s) of good practice cleaning
#. type: Plain text
#: src/gui/qtvcp.adoc:956
#, no-wrap
msgid ""
"If present, this function *overrides the normal function called for total system shutdown*.\n"
"It could be used to do _pre-shutdown housekeeping_. +"
msgstr ""

#. FIXME The following two sentences feel contradictory ?!
#. type: Plain text
#: src/gui/qtvcp.adoc:962
#, no-wrap
msgid ""
"The _system will not shutdown if using this function_, you will have to do that yourself.\n"
"QtVCP/LinuxCNC will shutdown without a prompt after this function returns."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp.adoc:963
#, no-wrap
msgid "*`closing_cleanup__(self):`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:966
msgid ""
"This function is _called just before the screen closes_.  It can be used to "
"do cleanup before closing."
msgstr ""

#. TODO Are there/what are relations b/w system_shutdown_request__() and clocing_cleanup__()
#. type: Title ===
#: src/gui/qtvcp.adoc:969
#, no-wrap
msgid "STATUS CALLBACKS Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:973
msgid ""
"By convention this is where you would put functions that are *callbacks from "
"STATUS definitions*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:974
#, no-wrap
msgid "CALLBACKS FROM FORM Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:979
msgid ""
"By convention this is where you would put functions that are *callbacks from "
"the widgets connected to the MainWindow* in the Qt Designer editor."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:980
#, no-wrap
msgid "GENERAL FUNCTIONS Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:983
msgid "By convention this is where you put your *general functions*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:984
#, no-wrap
msgid "KEY BINDING Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:988
msgid ""
"If you are _using the `keybinding` library_ this is where you place your "
"*custom key call routines*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:990
msgid "The function signature is:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:996
#, no-wrap
msgid ""
"def on_keycall_KEY(self,event,state,shift,cntrl):\n"
"    if state:\n"
"        self.do_something_function()\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:999
msgid ""
"`KEY` being the code (from the keybindings library) for the desired key."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:1000
#, no-wrap
msgid "CLOSING EVENT Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1003
msgid "Putting the *`closeEvent` function here will catch closing events*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1005
msgid "This _replaces any predefined `closeEvent`_ function from QtVCP."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:1011
#, no-wrap
msgid ""
"def closeEvent(self, event):\n"
"    self.do_something()\n"
"    event.accept()\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1015
#, no-wrap
msgid ""
"It is usually better to use the special `closing_cleanup__`\n"
"  function.\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp.adoc:1016
#, no-wrap
msgid "Connecting Widgets to Python Code"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1019
msgid ""
"It is possible to connect widgets to Python code using *signals and slots*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1021
msgid "In this way you can:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1023
msgid "_Give new functions to LinuxCNC widgets_, or"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1024
msgid "_Utilize standard Qt widgets to control LinuxCNC_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1028
#, no-wrap
msgid "*In the Qt Designer editor*:\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1030
msgid "You _create user function slots_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1031
msgid "You _connect the slots to widgets using signals_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1033
#, no-wrap
msgid "*In the handler file*:\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1035
msgid "You _create the slot's functions_ defined in Qt Designer."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:1037
#, no-wrap
msgid "Using Qt Designer to add Slots"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1043
#, no-wrap
msgid ""
"When you have loaded your screen into Qt Designer, add a plain `PushButton` to the screen.\n"
"You could change the name of the button to something interesting like 'test_button'."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1045
msgid "There are two ways to edit connections - This is the graphical way."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1049
msgid ""
"There is a button in the top tool bar of Qt Designer for editing signals.  "
"After pushing it, if you click-and-hold on the button it will show an arrow "
"(looks like a ground signal from electrical schematic)."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1051
msgid ""
"Slide this arrow to a part of the main window that does not have widgets on "
"it."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1052
msgid "A 'Configure Connections' dialog will pop up."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1053
msgid "The list on the left are the available signals from the widget."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1055
msgid ""
"The list on the right are the available slots on the main window and you can "
"add to it."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1056
msgid "Pick the signal `clicked()` - this makes the slots side available."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1057
msgid "Click 'Edit' on the slots list."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1058
msgid "A 'Slots/Signals of MainWindow' dialog will pop up."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1059
msgid "On the slots list at the top there is a '+' icon - click it."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1060
msgid "You can now edit a new slot name."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1061
msgid "Erase the default name `slot()` and change it to `test_button()`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1062
msgid "Press the 'OK' button."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1063
msgid "You'll be back to the 'Configure Connections' dialog."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1064
msgid "Now you can select your new slot in the slot list."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1065
msgid "Then press 'OK' and save the file."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp.adoc:1066 src/gui/qtvcp.adoc:1067
#, no-wrap
msgid "Qt Designer Signal/Slot Selection"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp.adoc:1067
#, no-wrap
msgid "images/designer_slots.png"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp.adoc:1069
#, no-wrap
msgid "Python Handler Changes"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1072
msgid "Now you must *add the function to the handler file*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1074
msgid "The function signature is *`def slot_name(self):`*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1076
msgid "For our example, we will add some code to print the widget name:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:1082
#, no-wrap
msgid ""
"def test_button(self):\n"
"    name = self.w.sender().text()\n"
"    print(name)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1085
msgid "Add this code under the section named:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp.adoc:1091
#, no-wrap
msgid ""
"#######################\n"
"# callbacks from form #\n"
"#######################\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1095
msgid ""
"In fact it doesn't matter where in the handler class you put the commands "
"but by convention this is where to put it."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1097
msgid "Save the handler file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1100
msgid ""
"Now when you load your screen and press the button it should print the name "
"of the button in the terminal."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp.adoc:1101
#, no-wrap
msgid "More Informations"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1104
msgid "<<cha:qtvcp:panels,QtVCP Builtin Virtual Control Panels>>"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1106
msgid "<<cha:qtvcp:widgets,QtVCP Widgets>>"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1108
msgid "<<cha:qtvcp:libraries,QtVCP Libraries>>"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1110
msgid "<<cha:qtvcp:vismach,Qt Vismach>>"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1112
msgid "<<cha:qtvcp:code,QtVCP Handler File Code Snippets>>"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1114
msgid "<<cha:qtvcp:devel,QtVCP Development>>"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp.adoc:1116
msgid "<<cha:qtvcp:custom-widgets,QtVCP Custom Qt Designer Widgets>>"
msgstr ""

#. type: Title =
#: src/gui/qtvcp-code-snippets.adoc:5
#, no-wrap
msgid "QtVCP Handler File Code Snippets"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:7
#, no-wrap
msgid "Preference File Loading/Saving"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:10
msgid "Here is how to *load and save preferences at launch and closing time*."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:11
#, no-wrap
msgid "Prerequisites"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:14
msgid "_Preference file option must be set_ in the `ScreenOptions` widget."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:15
msgid "_Preference file path must be set_ in the `INI` configuration."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:16
#, no-wrap
msgid "Reading preferences at launch time"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:18 src/gui/qtvcp-code-snippets.adoc:61
msgid "Under the *`def initialized__(self):`* function add:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:25
#, no-wrap
msgid ""
"if self.w.PREFS_:\n"
"    # variable name (entry name, default value, type, section name)\n"
"    self.int_value = self.w.PREFS_.getpref('Integer_value', 75, int, 'CUSTOM_FORM_ENTRIES')\n"
"    self.string_value = self.w.PREFS_.getpref('String_value', 'on', str, 'CUSTOM_FORM_ENTRIES')\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:27
#, no-wrap
msgid "Writing preferences at close time"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:29
msgid "In the *`closing_cleanup__()`* function, add:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:36
#, no-wrap
msgid ""
"if self.w.PREFS_:\n"
"    # variable name (entry name, variable name, type, section name)\n"
"    self.w.PREFS_.putpref('Integer_value', self.integer_value, int, 'CUSTOM_FORM_ENTRIES')\n"
"    self.w.PREFS_.putpref('String_value', self.string_value, str, 'CUSTOM_FORM_ENTRIES')\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:38
#, no-wrap
msgid "Use `QSettings` To Read/Save Variables"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:42
msgid ""
"Here is how to *load and save variables using PyQt's `QSettings`* functions:"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:43
#, no-wrap
msgid "Good practices"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:46
msgid "_Use `Group` to keep names organized and unique_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:48
msgid ""
"_Account for `none` value_ returned when reading a setting which has no "
"entry."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:50
msgid ""
"_Set defaults to cover the first time it is run_ using the `or "
"_<default_value>_` syntax."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:52
msgid "The file is actually saved in `~/.config/QtVcp`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:55
msgid "In this example:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:57
msgid "We add `or 20` and `or 2.5` as defaults."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:59
msgid ""
"The names `MyGroupName`, `int_value`, `float_value`, `myInteger`, and "
"`myFloat` are user defined."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:69
#, no-wrap
msgid ""
"# set recorded columns sort settings\n"
"self.SETTINGS_.beginGroup(\"MyGroupName\")\n"
"self.int_value = self.SETTINGS_.value('myInteger', type = int) or 20\n"
"self.float_value = self.SETTINGS_.value('myFloat', type = float) or 2.5\n"
"self.SETTINGS_.endGroup()\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:72
msgid "Under the *`def closing_cleanup__(self):`* function add:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:80
#, no-wrap
msgid ""
"# save values with QSettings\n"
"self.SETTINGS_.beginGroup(\"MyGroupName\")\n"
"self.SETTINGS_.setValue('myInteger', self.int_value)\n"
"self.SETTINGS_.setValue('myFloat', self.float_value)\n"
"self.SETTINGS_.endGroup()\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:82
#, no-wrap
msgid "Add A Basic Style Editor"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:85
msgid "Being able to *edit a style on a running screen* is convenient."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:86
#, no-wrap
msgid "Import `StyleSheetEditor` module in the `IMPORT SECTION`:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:90
#, no-wrap
msgid "from qtvcp.widgets.stylesheeteditor import StyleSheetEditor as SSE\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:92
#, no-wrap
msgid "Instantiate `StyleSheetEditor` module in the `INSTANTIATE SECTION`:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:96
#, no-wrap
msgid "STYLEEDITOR = SSE()\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:98
#, no-wrap
msgid "Create a `keybinding` in the `INITIALIZE SECTION`:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:100
msgid "Under the `+__init__.(self, halcomp, widgets, paths):+` function add:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:104
#, no-wrap
msgid "KEYBIND.add_call('Key_F12','on_keycall_F12')\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:106
#, no-wrap
msgid "Create the key bound function in the `KEYBINDING SECTION`:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:112
#, no-wrap
msgid ""
"def on_keycall_F12(self,event,state,shift,cntrl):\n"
"    if state:\n"
"        STYLEEDITOR.load_dialog()\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:114
#, no-wrap
msgid "Request Dialog Entry"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:117
msgid ""
"QtVCP uses `STATUS` messages to *pop up and return information from dialogs*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:120
msgid ""
"Prebuilt dialogs keep track of their last position and include options for "
"focus shading and sound."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:123
msgid ""
"To _get information back from the dialog_ requires using a `STATUS` "
"*`general`* message."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:124
#, no-wrap
msgid "Import and Instantiate the `Status` module in the `IMPORT SECTION`"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:129 src/gui/qtvcp-code-snippets.adoc:195
#, no-wrap
msgid ""
"from qtvcp.core import Status\n"
"STATUS = Status()\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:132
msgid "This loads and initializes the `Status` library."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:133
#, no-wrap
msgid "Register function for `STATUS general` messages in the 'INITIALIZE SECTION'"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:135
msgid "Under the `+__init__.(self, halcomp, widgets, paths)+` function:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:139 src/gui/qtvcp-widgets.adoc:2388
#, no-wrap
msgid "STATUS.connect('general',self.return_value)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:143
msgid ""
"This registers `STATUS` to call the function `self.return_value` when a "
"general message is sent."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:144
#, no-wrap
msgid "Add entry dialog request function in the `GENERAL FUNCTIONS SECTION`"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:150
#, no-wrap
msgid ""
"def request_number(self):\n"
"    mess = {'NAME':'ENTRY','ID':'FORM__NUMBER', 'TITLE':'Set Tool Offset'}\n"
"    STATUS.emit('dialog-request', mess)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:153
msgid "The function:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:155
msgid "Creates a Python `dict` with:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:156
#, no-wrap
msgid "*`NAME`* - needs to be set to the _dialogs unique launch name_. +\n"
msgstr ""

#. FIXME Is that a user defined unique name or a dialog type ?
#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:158
#, no-wrap
msgid ""
"`NAME` sets which dialog to request. +\n"
"`ENTRY` or `CALCULATOR` allows entering numbers.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:160
#, no-wrap
msgid "*`ID`* - needs to be set to a _unique name that the function supplies_. +\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:161
#, no-wrap
msgid "`ID` should be a unique key.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:162
#, no-wrap
msgid "*`TITLE`* sets the dialog title.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:163
#, no-wrap
msgid "*Arbitrary data* can be added to the `dict`. +\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:164
#, no-wrap
msgid "The dialog will ignore them but send them back to the return code.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:165
#, no-wrap
msgid "Sends the `dict` as a *`dialog-request`* `STATUS` message\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:166
#, no-wrap
msgid "Add message data processing function in the `CALLBACKS FROM STATUS SECTION`"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:176
#, no-wrap
msgid ""
"# Process the STATUS return message from set-tool-offset\n"
"def return_value(self, w, message):\n"
"    num = message.get('RETURN')\n"
"    id_code = bool(message.get('ID') == 'FORM__NUMBER')\n"
"    name = bool(message.get('NAME') == 'ENTRY')\n"
"    if id_code and name and num is not None:\n"
"        print('The {} number from {} was: {}'.format(name, id_code, num))\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:180
msgid ""
"This catches all general messages so it must _check the dialog type and id "
"code_ to confirm it's our dialog."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:183
msgid ""
"In this case we had requested an `ENTRY` dialog and our unique id was "
"`FORM_NUMBER`, so now we know the message is for us."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:185
msgid "`ENTRY` or `CALCULATOR` dialogs return a float number."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:186
#, no-wrap
msgid "Speak a Startup Greeting"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:189
msgid "This requires the `espeak` library installed on the system."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:190
#, no-wrap
msgid "Import and Instantiate the `Status` in the `IMPORT SECTION`"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:197
#, no-wrap
msgid "Emit spoken message in the `INITIALIZE SECTION`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:199
msgid "Under the '+__init__.(self, halcomp, widgets, paths)+' function:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:203
#, no-wrap
msgid "STATUS.emit('play-alert','SPEAK Please remember to oil the ways.')\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:206
#, no-wrap
msgid "*`SPEAK`* is a keyword: _everything after it will be pronounced_.\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:207
#, no-wrap
msgid "ToolBar Functions"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:211
msgid ""
"Toolbar buttons and submenus are added in Qt Designer but the code to make "
"them do something is added in the handler file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:213
msgid "To *add a submenus* in Qt Designer:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:216
msgid ""
"Add a `Qaction` by typing in the toolbar column then clicking the '+' icon "
"on the right."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:217
msgid "This will add a sub column that you need to type a name into."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:218
msgid "Now the original `Qaction` will be a `Qmenu` instead."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:220
msgid ""
"Now erase the `Qaction` you added to that `Qmenu`, the menu will stay as a "
"menu."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:223
msgid ""
"In this example we assume you added a toolbar with one submenu and three "
"actions. These actions will be configured to create:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:225
msgid "a recent file selection menu,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:226
msgid "an about pop up dialog action,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:227
msgid "a quit program action, and"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:228
msgid "a user defined function action."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:231
msgid ""
"The `objectName` of the toolbar button is used to identify the button when "
"configuring it - _descriptive names help_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:234
#, no-wrap
msgid ""
"Using the action editor menu, right click and select edit.\n"
"Edit the object name, text, and button type for an appropriate action."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:236
msgid "In this example the:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:238
msgid "submenu name must be `menuRecent`,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:239
msgid "actions names must be `actionAbout`, `actionQuit`, `actionMyFunction`"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:240
#, no-wrap
msgid "Loads the `toolbar_actions` library in the `IMPORT SECTION`"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:244 src/gui/qtvcp-libraries.adoc:1095
#, no-wrap
msgid "from qtvcp.lib.toolbar_actions import ToolBarActions\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:246
#, no-wrap
msgid "Instantiate `ToolBarActions` module in the `INSTANTIATE LIBRARY SECTION`"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:250 src/gui/qtvcp-libraries.adoc:1101
#, no-wrap
msgid "TOOLBAR = ToolBarActions()\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:252
#, no-wrap
msgid "Configure submenus and actions in the `SPECIAL FUNCTIONS SECTION`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:254
msgid "Under the `def initialized__(self)` function add:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:261
#, no-wrap
msgid ""
"TOOLBAR.configure_submenu(self.w.menuRecent, 'recent_submenu')\n"
"TOOLBAR.configure_action(self.w.actionAbout, 'about')\n"
"TOOLBAR.configure_action(self.w.actionQuit, 'Quit', lambda d:self.w.close())\n"
"TOOLBAR.configure_action(self.w.actionMyFunction, 'My Function', self.my_function)\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:263
#, no-wrap
msgid "Define the user function in the `GENERAL FUNCTIONS SECTION`"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:268 src/gui/qtvcp-libraries.adoc:1135
#, no-wrap
msgid ""
"def my_function(self, widget, state):\n"
"    print('My function State = ()'.format(state))\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:271
msgid ""
"The function to be called if the action \"My Function\" button is pressed."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:272
#, no-wrap
msgid "Add HAL Pins That Call Functions"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:275
msgid "In this way you _don't need to poll the state of input pins_."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:276
#, no-wrap
msgid "Loads the `Qhal` library in the `IMPORT SECTION`"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:280 src/gui/qtvcp-code-snippets.adoc:735
#, no-wrap
msgid "from qtvcp.core import Qhal\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:283
msgid "This is to allow access to *QtVCP's HAL component*."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:284
#, no-wrap
msgid "Instantiate `Qhal` in the `INSTANTIATE LIBRARY SECTION`"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:288 src/gui/qtvcp-code-snippets.adoc:743
#, no-wrap
msgid "QHAL = Qhal()\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:290
#, no-wrap
msgid "Add a function that gets called when the pin state changes"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:292
msgid ""
"Under the `initialised__` function, make sure there is an entry similar to "
"this:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:298 src/gui/qtvcp-code-snippets.adoc:519
#: src/gui/qtvcp-libraries.adoc:753 src/gui/qtvcp-libraries.adoc:1112
#, no-wrap
msgid ""
"##########################################\n"
"# Special Functions called from QtVCP\n"
"##########################################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:305
#, no-wrap
msgid ""
"# at this point:\n"
"# the widgets are instantiated.\n"
"# the HAL pins are built but HAL is not set ready\n"
"def initialized__(self):\n"
"    self.pin_cycle_start_in = QHAL.newpin('cycle-start-in',QHAL.HAL_BIT, QHAL.HAL_IN)\n"
"    self.pin_cycle_start_in.value_changed.connect(lambda s: self.cycleStart(s))\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:307
#, no-wrap
msgid "Define the function called by pin state change in the `GENERAL FUNCTIONS SECTION`"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:313 src/gui/qtvcp-code-snippets.adoc:644
#: src/gui/qtvcp-code-snippets.adoc:1028
#, no-wrap
msgid ""
"#####################\n"
"# general functions #\n"
"#####################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:323
#, no-wrap
msgid ""
"def cycleStart(self, state):\n"
"    if state:\n"
"        tab = self.w.mainTab.currentWidget()\n"
"        if  tab in( self.w.tab_auto,  self.w.tab_graphics):\n"
"            ACTION.RUN(line=0)\n"
"        elif tab == self.w.tab_files:\n"
"                self.w.filemanager.load()\n"
"        elif tab == self.w.tab_mdi:\n"
"            self.w.mditouchy.run_command()\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:328
msgid ""
"This function assumes there is a Tab widget, named `mainTab`, that has tabs "
"with the names `tab_auto`, `tab_graphics`, `tab_filemanager` and `tab_mdi`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:331
msgid ""
"In this way the cycle start button works differently depending on what tab "
"is shown."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:333
msgid ""
"This is simplified - _checking state and error trapping might be helpful_."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:334
#, no-wrap
msgid "Add A Special Max Velocity Slider Based On Percent"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:337
msgid "Some times you want to *build a widget to do something not built in*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:340
msgid ""
"The built in Max velocity slider acts on units per minute, here we show how "
"to do on percent."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:343
msgid ""
"The *`STATUS`* command makes sure the slider adjusts if LinuxCNC changes the "
"current max velocity."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:345
#, no-wrap
msgid "*`valueChanged.connect()`* _calls a function when the slider is moved_.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:348
msgid ""
"In Qt Designer add a *`QSlider`* widget called `mvPercent`, then add the "
"following code to the handler file:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:354
#, no-wrap
msgid ""
"#############################\n"
"# SPECIAL FUNCTIONS SECTION #\n"
"#############################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:363
#, no-wrap
msgid ""
"def initialized__(self):\n"
"    self.w.mvPercent.setMaximum(100)\n"
"    STATUS.connect('max-velocity-override-changed', \\\n"
"        lambda w, data: self.w.mvPercent.setValue( \\\n"
"            (data / INFO.MAX_TRAJ_VELOCITY)*100 \\\n"
"            )\n"
"        )\n"
"    self.w.mvPercent.valueChanged.connect(self.setMVPercentValue)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:367 src/gui/qtvcp-code-snippets.adoc:416
#: src/gui/qtvcp-code-snippets.adoc:494 src/gui/qtvcp-code-snippets.adoc:529
#: src/gui/qtvcp-libraries.adoc:1132
#, no-wrap
msgid ""
"#####################\n"
"# GENERAL FUNCTIONS #\n"
"#####################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:370
#, no-wrap
msgid ""
"def setMVPercentValue(self, value):\n"
"    ACTION.SET_MAX_VELOCITY_RATE(INFO.MAX_TRAJ_VELOCITY * (value/100.0))\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:372
#, no-wrap
msgid "Toggle Continuous Jog On and Off"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:376
msgid ""
"Generally selecting continuous jogging is a momentary button, that requires "
"you to select the previous jog increment after."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:379
msgid ""
"We will build a button that toggles between continuous jog and whatever "
"increment that was already selected."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:381
msgid "In Qt Designer:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:383
msgid "Add an `ActionButton` with no action"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:384
msgid "Call it `btn_toggle_continuous`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:385
msgid "Set the `AbstractButton` property `checkable` to `True`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:387
msgid ""
"Set the `ActionButton` properties `incr_imperial_number` and "
"`incr_mm_number` to `0`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:391
#, no-wrap
msgid ""
"Use Qt Designer's slot editor to use the button signal `clicked(bool)` to call form's handler function `toggle_continuous_clicked()`.\n"
"See <<sub:qtvcp:designer-slots,Using Qt Designer To Add Slots>> section for more informations."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:394
msgid ""
"Then add this code snippets to the handler file under the `initialized__` "
"function:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:407
#, no-wrap
msgid ""
"# at this point:\n"
"# the widgets are instantiated.\n"
"# the HAL pins are built but HAL is not set ready\n"
"def initialized__(self):\n"
"    STATUS.connect('jogincrement-changed', \\\n"
"        lambda w, d, t: self.record_jog_incr(d,t) \\\n"
"        )\n"
"    # set a default increment to toggle back to\n"
"    self.L_incr = 0.01\n"
"    self.L_text = \"0.01in\"\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:410
msgid "In the `GENERAL FUNCTIONS SECTION` add:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:424
#, no-wrap
msgid ""
"# if it isn't continuous, record the latest jog increment\n"
"# and untoggle the continuous button\n"
"def record_jog_incr(self,d, t):\n"
"    if d != 0:\n"
"        self.L_incr = d\n"
"        self.L_text = t\n"
"        self.w.btn_toggle_continuous.safecheck(False)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:427
msgid "In the `CALLBACKS FROM FORM SECTION` add:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:433
#, no-wrap
msgid ""
"#######################\n"
"# CALLBACKS FROM FORM #\n"
"#######################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:441
#, no-wrap
msgid ""
"def toggle_continuous_clicked(self, state):\n"
"    if state:\n"
"        # set continuous (call the actionbutton's function)\n"
"        self.w.btn_toggle_continuous.incr_action()\n"
"    else:\n"
"        # reset previously recorded increment\n"
"        ACTION.SET_JOG_INCR(self.L_incr, self.L_text)\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:443
#, no-wrap
msgid "Class Patch The File Manager Widget"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:448
msgid ""
"Class patching (monkey patching) is a little like _black magic_ - so use it "
"_only if needed_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:451
msgid ""
"The File manager widget is designed to load a selected program in LinuxCNC. "
"But maybe you want to print the file name first."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:453
msgid "We can \"class patch\" the library to _redirect the function call_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:455 src/gui/qtvcp-code-snippets.adoc:731
msgid "In the `IMPORT SECTION` add:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:459
#, no-wrap
msgid "from qtvcp.widgets.file_manager import FileManager as FM\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:462
msgid "Here we are going to:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:465
msgid "_Keep a reference to the original function_ (1) so we can still call it"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:467
msgid ""
"_Redirect the class to call our custom function_ (2) in the handler file "
"instead."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:473
#, no-wrap
msgid ""
"##########################################\n"
"# Special Functions called from QtVCP    #\n"
"##########################################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:479
#, no-wrap
msgid ""
"# For changing functions in widgets we can 'class patch'.\n"
"# class patching must be done before the class is instantiated.\n"
"def class_patch__(self):\n"
"    self.old_load = FM.load # keep a reference of the old function <1>\n"
"    FM.load = self.our_load # redirect function to our handle file function <2>\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:488
#, no-wrap
msgid ""
"_Write a custom function to replace the original_:\n"
"This function must have the *same signature as the original function*.\n"
"In this example we are still going to call the original function by using the reference to it we recorded earlier.\n"
"It _requires the first argument to be the widget instance_, which in this case is `self.w.filemanager` (the name given in the Qt Designer editor)."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:498
#, no-wrap
msgid ""
"def our_load(self,fname):\n"
"    print(fname)\n"
"    self.old_load(self.w.filemanager,fname)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:503
#, no-wrap
msgid ""
"Now our custom function will print the file path to the terminal before loading the file.\n"
"Obviously boring but shows the principle."
msgstr ""

#. type: delimited block =
#: src/gui/qtvcp-code-snippets.adoc:513
#, no-wrap
msgid ""
"There is another slightly different way to do this that can have advantages: you can _store the reference to the original function in the original class_.\n"
"The trick here is to make sure the function name you use to store it is not already used in the class.\n"
"`super__` added to the function name would be a good choice.\n"
"We won't use that in built in QtVCP widgets."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:525
#, no-wrap
msgid ""
"# For changing functions in widgets we can 'class patch'.\n"
"# class patching must be done before the class is instantiated.\n"
"def class_patch__(self):\n"
"    FM.super__load = FM.load # keep a reference of the old function in the original class\n"
"    FM.load = self.our_load # redirect function to our handle file function\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:533
#, no-wrap
msgid ""
"def our_load(self,fname):\n"
"    print(fname)\n"
"    self.w.filemanager.super__load(fname)\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:537
#, no-wrap
msgid "Adding Widgets Programmatically"
msgstr ""

#. type: delimited block =
#: src/gui/qtvcp-code-snippets.adoc:541
msgid ""
"In some situation it is only possible to *add widgets with Python code* "
"rather then using the Qt Designer editor."
msgstr ""

#. type: delimited block =
#: src/gui/qtvcp-code-snippets.adoc:544
msgid ""
"When adding QtVCP widgets programmatically, sometimes there are _extra "
"steps_ to be taken."
msgstr ""

#. type: delimited block =
#: src/gui/qtvcp-code-snippets.adoc:548
#, no-wrap
msgid ""
"Here we are going to add a spindle speed indicator bar and up-to-speed LED to a tab widget corner.\n"
"Qt Designer does not support adding corner widgets to tabs but PyQt does."
msgstr ""

#. type: delimited block =
#: src/gui/qtvcp-code-snippets.adoc:550
msgid "This is a cut down example from QtAxis screen's handler file."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:551
#, no-wrap
msgid "Import required libraries"
msgstr ""

#. type: delimited block =
#: src/gui/qtvcp-code-snippets.adoc:554
msgid ""
"First we must import the libraries we need, if they're not already imported "
"in the handler file:"
msgstr ""

#. type: delimited block =
#: src/gui/qtvcp-code-snippets.adoc:556
msgid "`QtWidgets` gives us access to the `QProgressBar`,"
msgstr ""

#. type: delimited block =
#: src/gui/qtvcp-code-snippets.adoc:557
msgid "`QColor` is for the _LED color_,"
msgstr ""

#. type: delimited block =
#: src/gui/qtvcp-code-snippets.adoc:558
msgid ""
"`StateLED` is the QtVCP library used to _create the spindle-at-speed LED_,"
msgstr ""

#. type: delimited block =
#: src/gui/qtvcp-code-snippets.adoc:559
msgid "`Status` is used to _catch LinuxCNC status information_,"
msgstr ""

#. type: delimited block =
#: src/gui/qtvcp-code-snippets.adoc:560
msgid "`Info` gives us _information about the machine configuration_."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:571
#, no-wrap
msgid ""
"from PyQt5 import QtWidgets\n"
"from PyQt5.QtGui import QColor\n"
"from qtvcp.widgets.state_led import StateLED as LED\n"
"from qtvcp.core import Status, Info\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:573
#, no-wrap
msgid "Instantiate `Status` and `Info` channels"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:576
msgid ""
"`STATUS` and `INFO` are initialized outside the handler class so as to be "
"_global references_ (no self. in front):"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:582
#, no-wrap
msgid ""
"##########################################\n"
"# **** instantiate libraries section **** #\n"
"###########################################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:585
#, no-wrap
msgid ""
"STATUS = Status()\n"
"INFO = Info()\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:587
#, no-wrap
msgid "Register `STATUS` monitoring function"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:591
#, no-wrap
msgid ""
"For the spindle speed indicator we need to know the current spindle speed.\n"
"For this we _register_ with `STATUS` to:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:593
msgid "_Catch_ the `actual-spindle-speed-changed` _signal_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:594
msgid "_Call_ the `self.update_spindle()` _function_"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:606
#, no-wrap
msgid ""
"########################\n"
"# **** INITIALIZE **** #\n"
"########################\n"
"# widgets allows access to  widgets from the QtVCP files\n"
"# at this point the widgets and hal pins are not instantiated\n"
"def __init__(self,halcomp,widgets,paths):\n"
"    self.hal = halcomp\n"
"    self.w = widgets\n"
"    self.PATHS = paths\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:609
#, no-wrap
msgid ""
"    STATUS.connect('actual-spindle-speed-changed', \\\n"
"        lambda w,speed: self.update_spindle(speed))\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:611
#, no-wrap
msgid "Add the widgets to the tab"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:617
#, no-wrap
msgid ""
"We need to _make sure the Qt Designer widgets are already built_ before we try to add to them.\n"
"For this, we add a call to `self.make_corner_widgets()` function to build our extra widgets at the right time, i.e. under the `initialized__()` function:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:623
#, no-wrap
msgid ""
"##########################################\n"
"# Special Functions called from QtScreen #\n"
"##########################################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:629
#, no-wrap
msgid ""
"# at this point:\n"
"# the widgets are instantiated.\n"
"# the HAL pins are built but HAL is not set ready\n"
"def initialized__(self):\n"
"    self.make_corner_widgets()\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:631
#, no-wrap
msgid "Create the widgets building functions"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:635
#, no-wrap
msgid ""
"Ok let's code the function to build the widgets and add them in the tab widget.\n"
"We are assuming there is a tab widget built with Designer called 'rightTab'."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:638
msgid ""
"We are assuming there is a tab widget built with Qt Designer called "
"`rightTab`."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:651
#, no-wrap
msgid ""
"def make_corner_widgets(self):\n"
"    # make a spindle-at-speed green LED\n"
"    self.w.led = LED()                                        # <1>\n"
"    self.w.led.setProperty('is_spindle_at_speed_status',True) # <2>\n"
"    self.w.led.setProperty('color',QColor(0,255,0,255))       # <3>\n"
"    self.w.led.hal_init(HAL_NAME = 'spindle_is_at_speed')     # <4>\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:655
#, no-wrap
msgid ""
"    # make a spindle speed bar\n"
"    self.w.rpm_bar = QtWidgets.QProgressBar()                 # <5>\n"
"    self.w.rpm_bar.setRange(0, INFO.MAX_SPINDLE_SPEED)        # <6>\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:660
#, no-wrap
msgid ""
"    # container\n"
"    w = QtWidgets.QWidget()                                   # <7>\n"
"    w.setContentsMargins(0,0,0,6)\n"
"    w.setMinimumHeight(40)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:666
#, no-wrap
msgid ""
"    # layout\n"
"    hbox = QtWidgets.QHBoxLayout()                            # <8>\n"
"    hbox.addWidget(self.w.rpm_bar)                            # <9>\n"
"    hbox.addWidget(self.w.led)                                # <9>\n"
"    w.setLayout(hbox)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:669
#, no-wrap
msgid ""
"    # add the container to the corner of the right tab widget\n"
"    self.w.rightTab.setCornerWidget(w)                        # <10>\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:673
msgid ""
"This initializes the basic StateLed widget and uses `self.w.led` as the "
"reference from then on."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:675
msgid ""
"Since the state LED can be used for many indications, we must set the "
"property that designates it as a spindle-at-speed LED."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:676
msgid "This sets it as green when on."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:680
#, no-wrap
msgid ""
"This is the extra function call required with some QtVCP widgets.\n"
"If `HAL_NAME` is omitted it will use the widget's `objectName` if there is one.\n"
"It gives the special widgets reference to:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-code-snippets.adoc:681 src/gui/qtvcp-custom-widgets.adoc:79
#: src/gui/qtvcp-custom-widgets.adoc:363 src/gui/qtvcp-development.adoc:173
#, no-wrap
msgid "*`self.HAL_GCOMP`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:682 src/gui/qtvcp-custom-widgets.adoc:364
#: src/gui/qtvcp-development.adoc:174
msgid "the _HAL component_ instance"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-code-snippets.adoc:682 src/gui/qtvcp-custom-widgets.adoc:80
#: src/gui/qtvcp-custom-widgets.adoc:364 src/gui/qtvcp-development.adoc:174
#, no-wrap
msgid "*`self.HAL_NAME`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:683 src/gui/qtvcp-custom-widgets.adoc:81
#: src/gui/qtvcp-custom-widgets.adoc:365 src/gui/qtvcp-development.adoc:175
msgid "This _widget's name_ as a string"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-code-snippets.adoc:683 src/gui/qtvcp-custom-widgets.adoc:81
#: src/gui/qtvcp-custom-widgets.adoc:365 src/gui/qtvcp-development.adoc:175
#, no-wrap
msgid "*`self.QT_OBJECT_`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:684 src/gui/qtvcp-custom-widgets.adoc:366
#: src/gui/qtvcp-development.adoc:176
msgid "This _widget's PyQt object instance_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-code-snippets.adoc:684 src/gui/qtvcp-custom-widgets.adoc:82
#: src/gui/qtvcp-custom-widgets.adoc:366 src/gui/qtvcp-development.adoc:176
#, no-wrap
msgid "*`self.QTVCP_INSTANCE_`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:685 src/gui/qtvcp-custom-widgets.adoc:83
#: src/gui/qtvcp-custom-widgets.adoc:367 src/gui/qtvcp-development.adoc:177
msgid "The _very top level parent_ of the screen"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-code-snippets.adoc:685 src/gui/qtvcp-custom-widgets.adoc:83
#: src/gui/qtvcp-custom-widgets.adoc:367 src/gui/qtvcp-development.adoc:177
#, no-wrap
msgid "*`self.PATHS_`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:686 src/gui/qtvcp-custom-widgets.adoc:368
#: src/gui/qtvcp-development.adoc:178
msgid "The _instance of QtVCP's path_ library"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-code-snippets.adoc:686 src/gui/qtvcp-custom-widgets.adoc:84
#: src/gui/qtvcp-custom-widgets.adoc:368 src/gui/qtvcp-development.adoc:178
#, no-wrap
msgid "*`self.PREFS_`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:687 src/gui/qtvcp-custom-widgets.adoc:369
#: src/gui/qtvcp-development.adoc:179
msgid "the _instance of an optional preference file_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-code-snippets.adoc:687 src/gui/qtvcp-custom-widgets.adoc:85
#: src/gui/qtvcp-custom-widgets.adoc:369 src/gui/qtvcp-development.adoc:179
#, no-wrap
msgid "*`self.SETTINGS_`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:688 src/gui/qtvcp-custom-widgets.adoc:370
#: src/gui/qtvcp-development.adoc:180
msgid "the `Qsettings` _object_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:690
msgid "Initializes a PyQt5 `QProgressBar`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:692
msgid ""
"Sets the max range of the progress bar to the max specified in the `INI`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:695
#, no-wrap
msgid ""
"We create a QWidget\n"
"Since you can only add one widget to the tab corner and we want two there, we must add both into a *container*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:696
msgid "add a QHBoxLayout to the QWidget. +"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:697
msgid "Then we add our QProgress bar and LED to the layout."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:699
msgid ""
"Finally we add the QWidget (with our QProgress bar and LED in it) to the tab "
"widget's corner."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:700
#, no-wrap
msgid "Create the `STATUS` monitoring function"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:703
msgid ""
"Now we build the function to actually update out the `QProgressBar` when "
"`STATUS` updates the spindle speed:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:713
#, no-wrap
msgid ""
"########################\n"
"# callbacks from STATUS #\n"
"########################\n"
"def update_spindle(self, data):\n"
"    self.w.rpm_bar.setInvertedAppearance(bool(data<0))       # <1>\n"
"    self.w.rpm_bar.setFormat('{0:d} RPM'.format(int(data)))  # <2>\n"
"    self.w.rpm_bar.setValue(abs(data))                       # <3>\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:717
msgid ""
"In this case we chose to display left-to-right or right-to-left, depending "
"if we are turning clockwise or anticlockwise."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:718
msgid "This formats the writing in the bar."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:719
msgid "This sets the length of the colored bar."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:720
#, no-wrap
msgid "Update/Read Objects Periodically"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:724
msgid ""
"Sometimes you need to *update a widget or read a value regularly* that isn't "
"covered by normal libraries."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:726
msgid "Here we update an LED based on a watched HAL pin every 100ms."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:728
msgid "We assume there is an LED named `led` in the Qt Designer UI file."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:729
#, no-wrap
msgid "Load the `Qhal` library for access to QtVCP's HAL component"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:737
#, no-wrap
msgid "Instantiate `Qhal`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:739
msgid "In the `INSTANTIATE LIBRARY SECTION` add:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:746
msgid "Now add/modify these sections to include code that is similar to this:"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:747
#, no-wrap
msgid "Register a function to be called at `CYCLE_TIME` period"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:749
msgid "This is usually every 100ms"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:761
#, no-wrap
msgid ""
"########################\n"
"# **** INITIALIZE **** #\n"
"########################\n"
"# widgets allows access to widgets from the QtVCP files\n"
"# at this point the widgets and hal pins are not instantiated\n"
"def __init__(self,halcomp,widgets,paths):\n"
"    self.hal = halcomp\n"
"    self.w = widgets\n"
"    self.PATHS = paths\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:764
#, no-wrap
msgid ""
"    # register a function to be called at CYCLE_TIME period (usually every 100ms)\n"
"    STATUS.connect('periodic', lambda w: self.update_periodic())\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:766
#, no-wrap
msgid "Create the custom function to be called periodically"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:775
#, no-wrap
msgid ""
"#####################\n"
"# general functions #\n"
"#####################\n"
"def update_periodic(self):\n"
"    data = QHAL.getvalue('spindle.0.is-oriented')\n"
"    self.w.led.setState(data)\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:777
#, no-wrap
msgid "External Control With ZMQ"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:781
msgid ""
"_QtVCP can automatically set up_ *ZMQ messaging* _to send and/or receive "
"remote messages from external programs_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:783
msgid "It uses ZMQ's *publish/subscribe messaging pattern*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:786
msgid ""
"As always, consider *security* before letting programs interface though "
"messaging."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-code-snippets.adoc:787
#, no-wrap
msgid "ZMQ Messages Reading"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:790
msgid "Sometimes you want to *control the screen with a separate program*."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:791
#, no-wrap
msgid "Enable reception of ZMQ messages"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:796
#, no-wrap
msgid ""
"In the `ScreenOptions` widget, you can select the property *`use_receive_zmq_option`*.\n"
"You can also set this property directly _in the handler file_, as in this sample."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:799
msgid ""
"We assume the `ScreenOptions` widget is called `screen_options` in Qt "
"Designer:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:810
#, no-wrap
msgid ""
"########################\n"
"# **** INITIALIZE **** #\n"
"########################\n"
"# widgets allows access to widgets from the QtVCP files\n"
"# at this point the widgets and hal pins are not instantiated\n"
"def __init__(self,halcomp,widgets,paths):\n"
"    # directly select ZMQ message receiving\n"
"    self.w.screen_options.setProperty('use_receive_zmq_option',True)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:813
msgid ""
"This *allows an external program to call functions in the handler file*."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:814
#, no-wrap
msgid "Add a function to be called on ZMQ message reception"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:817
#, no-wrap
msgid ""
"Let's add a specific function for testing.\n"
"You will need to run LinuxCNC from a terminal to see the printed text."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:825
#, no-wrap
msgid ""
"#####################\n"
"# general functions #\n"
"#####################\n"
"def test_zmq_function(self, arg1, arg2):\n"
"    print('zmq_test_function called: ', arg1, arg2)\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:827
#, no-wrap
msgid "Create an external program sending ZMQ messages that will trigger function call"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:831
#, no-wrap
msgid ""
"Here is a sample external program to call a function.\n"
"It alternates between two data sets every second.\n"
"Run this in a separate terminal from LinuxCNC to see the sent messages."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:836
#, no-wrap
msgid ""
"#!/usr/bin/env python3\n"
"from time import sleep\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:844
#, no-wrap
msgid ""
"context = zmq.Context()\n"
"socket = context.socket(zmq.PUB)\n"
"socket.bind(\"tcp://127.0.0.1:5690\")\n"
"topic = b'QtVCP'\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:853
#, no-wrap
msgid ""
"# prebuilt message 1\n"
"# makes a dict of function to call plus any arguments\n"
"x = {                               # <1>\n"
"  \"FUNCTION\": \"test_zmq_function\",\n"
"  \"ARGS\": [True,200]\n"
"}\n"
"# convert to json object\n"
"m1 = json.dumps(x)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:861
#, no-wrap
msgid ""
"# prebuild message 2\n"
"x = {                               # <1>\n"
"  \"FUNCTION\": \"test_zmq_function\",\n"
"  \"ARGS\": [False,0],\n"
"}\n"
"# convert to json object\n"
"m2 = json.dumps(x)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:867
#, no-wrap
msgid ""
"if __name__ == '__main__':\n"
"    while True:\n"
"        print('send message 1')\n"
"        socket.send_multipart([topic, bytes((m1).encode('utf-8'))])\n"
"        sleep(ms(1000))\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:871
#, no-wrap
msgid ""
"        print('send message 2')\n"
"        socket.send_multipart([topic, bytes((m2).encode('utf-8'))])\n"
"        sleep(ms(1000))\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:874
msgid ""
"Set the *function to call* and the *arguments to send* to that function."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:880
#, no-wrap
msgid ""
"You will need to know the _signature_ of the function you wish to call.\n"
"Also note that the _message is converted to a json object_.\n"
"This is because ZMQ sends byte messages not Python objects.\n"
"`json` converts Python objects to bytes and will be converted back when received."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-code-snippets.adoc:881
#, no-wrap
msgid "ZMQ Messages Writing"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:884
msgid ""
"You may also want to *communicate with an external program from the screen*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:889
#, no-wrap
msgid ""
"In the `ScreenOptions` widget, you can select the property *`use_send_zmq_message`*.\n"
"You can also set this property directly _in the handler file_, as in this sample."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:892
msgid ""
"We assume the `ScreenOptions` widget is called `screen_options` in Qt "
"Designer: +"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:893
#, no-wrap
msgid "Enable sending of ZMQ messages"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:904
#, no-wrap
msgid ""
"########################\n"
"# **** INITIALIZE **** #\n"
"########################\n"
"# widgets allows access to  widgets from the QtVCP files\n"
"# at this point the widgets and hal pins are not instantiated\n"
"def __init__(self, halcomp,widgets,paths):\n"
"    # directly select ZMQ message sending\n"
"    self.w.screen_options.setProperty('use_send_zmq_option',True)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:908
#, no-wrap
msgid ""
"This allows sending messages to a separate program.\n"
"The message sent will depend on what the external program is expecting."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:909
#, no-wrap
msgid "Create a function to send ZMQ messages"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:914
#, no-wrap
msgid ""
"Let's add a specific function for testing.\n"
"You will need to run LinuxCNC from a terminal to see the printed text.\n"
"Also, something needs to be added to call this function, such as a button click."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:924
#, no-wrap
msgid ""
"#####################\n"
"# general functions #\n"
"#####################\n"
"def send_zmq_message(self):\n"
"    # This could be any Python object json can convert\n"
"    message = {\"name\": \"John\", \"age\": 30}\n"
"    self.w.screen_options.send_zmq_message(message)\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:926
#, no-wrap
msgid "Use or create a program that will receive ZMQ messages"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:929
msgid ""
"Here is a sample program that will receive the message and print it to the "
"terminal:"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:952
#, no-wrap
msgid "Sending Messages To Status Bar Or Desktop Notify Dialogs"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:955
msgid "There are several ways to *report information to the user*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:957
msgid "A *status bar* is used for _short information_ to show the user. +"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:959
msgid "Not all screens have a status bar."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:960
#, no-wrap
msgid "Status bar usage example"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:964
#, no-wrap
msgid "self.w.statusbar.showMessage(message, timeout * 1000)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:968
msgid ""
"`timeout` is in seconds and we assume `statusbar` is the Qt Designer set "
"name of the widget."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:972
msgid ""
"You can also use the `Status` library to send a message to the `notify` "
"library if it is enabled (usually set in `ScreenOptions` widget): this will "
"send the message to the statusbar and the *desktop notify dialog*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:975
#, no-wrap
msgid ""
"The messages are also recorded until the user erases them using controls.\n"
"The users can recall any recorded messages."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:977
msgid "There are several options:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-code-snippets.adoc:979
#, no-wrap
msgid "*`STATUS.TEMPORARY_MESSAGE`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:981
msgid "Show the message for a short time only."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-code-snippets.adoc:981
#, no-wrap
msgid "*`STATUS.OPERATOR_ERROR`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-code-snippets.adoc:982
#, no-wrap
msgid "*`STATUS.OPERATOR_TEXT`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-code-snippets.adoc:983
#, no-wrap
msgid "*`STATUS.NML_ERROR`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-code-snippets.adoc:984
#, no-wrap
msgid "*`STATUS.NML_TEXT`*"
msgstr ""

#.  end definition list
#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:987
#, no-wrap
msgid "Example of sending an operator message:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:991
#, no-wrap
msgid "STATUS.emit('error', STATUS.OPERATOR_ERROR, 'message')\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:996
#, no-wrap
msgid ""
"You can send messages thru LinuxCNC's operator message functions.\n"
"These are usually caught by the notify system, so are equal to above.\n"
"They would be printed to the terminal as well."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:1001
#, no-wrap
msgid ""
"ACTION.SET_DISPLAY_MESSAGE('MESSAGE')\n"
"ACTION.SET_ERROR_MESSAGE('MESSAGE')\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-code-snippets.adoc:1003
#, no-wrap
msgid "Catch Focus Changes"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:1007
msgid ""
"Focus is used to *direct user action* such as keyboard entry to the proper "
"widget."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:1008
#, no-wrap
msgid "Get currently focused widget"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:1014
#, no-wrap
msgid ""
"fwidget = QtWidgets.QApplication.focusWidget()\n"
"if fwidget is not None:\n"
"    print(\"focus widget class: {} name: {} \".format(fwidget, fwidget.objectName()))\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-code-snippets.adoc:1016
#, no-wrap
msgid "Get focused widget when focus changes"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:1024
#, no-wrap
msgid ""
"# at this point:\n"
"# the widgets are instantiated.\n"
"# the HAL pins are built but HAL is not set ready\n"
"def initialized__(self):\n"
"    QtWidgets.QApplication.instance().event_filter.focusIn.connect(self.focusInChanged)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-code-snippets.adoc:1036
#, no-wrap
msgid ""
"def focusInChanged(self, widget):\n"
"    if isinstance(widget.parent(),type(self.w.gcode_editor.editor)):\n"
"        print('G-code Editor')\n"
"    elif isinstance(widget,type(self.w.gcodegraphics)):\n"
"        print('G-code Display')\n"
"    elif isinstance(widget.parent(),type(self.w.mdihistory) ):\n"
"        print('MDI History')\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:1039
msgid ""
"Notice we sometimes compare to `widget`, sometimes to `widget.parent()`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:1043
msgid ""
"This is because _some QtVCP widgets are built from multiple_ *_sub-widgets_* "
"and the latter actually get the focus; so we need to *check the parent* of "
"those sub-widgets."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-code-snippets.adoc:1048
msgid ""
"Other times the main widget is what gets the focus; ie G-code display widget "
"can be set to accept focus and in that case there are no sub-widgets in it "
"so comparing to the `widget.parent()` would get you the container that holds "
"the G-code widget."
msgstr ""

#. type: Title =
#: src/gui/qtvcp-custom-widgets.adoc:5
#, no-wrap
msgid "QtVCP: Building Custom Widgets"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:11
msgid ""
"Building custom widgets allows one to *use the Qt Designer editor to place a "
"custom widget* _rather than doing it manually in a handler file_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:14
msgid ""
"A useful custom widgets would be a great way to contribute back to LinuxCNC."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-custom-widgets.adoc:15
#, no-wrap
msgid "Widgets"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:19
#, no-wrap
msgid ""
"*Widget* is the _general name for the UI objects_ such as buttons and\n"
"labels in PyQt.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:22
msgid ""
"There are also *special widgets made for LinuxCNC* that make integration "
"easier."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:25
msgid ""
"All these widgets can be _placed with Qt Designer editor_ - allowing one to "
"_see the result_ before actually loading the panel in LinuxCNC."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:26 src/gui/qtvcp-widgets.adoc:1672
#, no-wrap
msgid "Qt Designer"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:30
#, no-wrap
msgid ""
"*Qt Designer* is a _WYSIWYG (What You See is What You Get) editor for\n"
"placing PyQt widgets_.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:33
#, no-wrap
msgid ""
"It's original intend was for building the graphic widgets for programs.\n"
"We leverage it to *build screens and panels for LinuxCNC*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:36
msgid ""
"In Qt Designer, on the left side of the editor, you find *three categories "
"of LinuxCNC widgets*:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:38
msgid "_HAL only widgets_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:39
msgid "_LinuxCNC controller widgets_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:40
msgid "_dialog widgets_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:43
msgid ""
"For Qt Designer to _add custom widgets_ to it's editor it must have a "
"*plugin* added to the right folder."
msgstr ""

#. FIXME Aren't the following two sub-sections duplicates of the 'startup
#.   to shutdown section in qtvcp-development.adoc ?
#.   Shouldn't they be merged in one place, and linked in others when
#.   needed
#. type: Title ===
#: src/gui/qtvcp-custom-widgets.adoc:49
#, no-wrap
msgid "Initialization Process"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:53
msgid ""
"QtVCP does _extra setup_ for *widgets subclassed from `_HALWidgetBase`*, aka "
"\"HAL-ified\" widgets."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:55
msgid "This includes:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:57
msgid "Injecting _important variables_,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:58
msgid "Calling an _extra setup function_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:59
msgid "Calling a _closing cleanup function_ at shutdown."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:62
msgid ""
"These functions are not called when the Qt Designer editor displays the "
"widgets."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:64
msgid "When QtVCP builds a screen from the `.ui` file:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:66
msgid "It searches for all the HAL-ified widgets."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:68
msgid ""
"It finds the `ScreenOptions` widget, to collect information it needs to "
"inject into the other widgets"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:71
#, no-wrap
msgid ""
"It instantiates each widget and if it is a HAL-ified widget, calls the `hal_init()` function.\n"
"*`hal_init()`* is defined in the base class and it:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:72
msgid "Adds variables such as the preference file to every HAL-ified widget."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:75
#, no-wrap
msgid ""
"Call `+_hal_init()+` on the widget.\n"
"`+_hal_init()+` allows the widget designer to do setup that requires access to the extra variables."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:78
msgid ""
"Here is a description of the extra variables injected into \"HAL-ified\" "
"widgets:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:80
msgid "The _HAL component instance_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:82
msgid "This _widget's object instance_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:84
msgid "The _QtVCP's path library instance_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:85
msgid "The _optional preference file instance_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:86
msgid "The `Qsettings` _object instance_"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-custom-widgets.adoc:87
#, no-wrap
msgid "cleanup process"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:91
msgid ""
"When QtVCP closes, it calls the *`+_hal_cleanup()+`* function _on all HAL-"
"ified widgets_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:94
msgid ""
"The base class creates an empty `+_hal_cleanup()+` function, which can be "
"redefined in the custom widget subclass."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:96
msgid "This can be used to do such things as record preferences, etc."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:99
msgid ""
"This function is not called when the Qt Designer editor displays the widgets."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-custom-widgets.adoc:100
#, no-wrap
msgid "Custom HAL Widgets"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:104
#, no-wrap
msgid ""
"HAL widgets are the simplest to show example of.\n"
"`qtvcp/widgets/simple_widgets.py` holds many HAL only widgets."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:106
msgid "Lets look at a snippet of `simple_widgets.py`:"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-custom-widgets.adoc:107
#, no-wrap
msgid "In the 'Imports' section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:109 src/gui/qtvcp-custom-widgets.adoc:264
msgid "This is where we import libraries that our widget class needs."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:121
#, no-wrap
msgid ""
"###############################\n"
"# Imports\n"
"###############################\n"
"from PyQt5 import QtWidgets                     # <1>\n"
"from qtvcp.widgets.widget_baseclass \\\n"
"    import _HalWidgetBase, _HalSensitiveBase    # <2>\n"
"import hal                                      # <3>\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:124
msgid "In this case we need access to:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:126
msgid "PyQt's QtWidgets library,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:127
msgid "LinuxCNC's HAL library, and"
msgstr ""

#. TODO explain `_HalToggleBase` and `_HalScaleBase` too
#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:132
#, no-wrap
msgid ""
"QtVCP's widget `baseclass` 's *`_HalSensitiveBase`* for _automatic HAL pin setup_ and to _disable/enable the widget_ (also known as input sensitivity).\n"
"There is also `_HalToggleBase`, and `_HalScaleBase` functions available in the library.`_HalToggleBase`, and `_HalScaleBase`"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-custom-widgets.adoc:134
#, no-wrap
msgid "In the 'WIDGET' section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:136
msgid "Here is a _custom widget_ based on PyQt's *`QGridLayout`* widget."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:138
msgid "`QGridLayout` allows one to:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:140
msgid "_Place objects in a grid_ fashion."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:141
msgid "_Enable/disable all widgets inside it_ based on a *HAL pin state*."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:147
#, no-wrap
msgid ""
"######################\n"
"# WIDGET\n"
"######################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:151
#, no-wrap
msgid ""
"class Lcnc_GridLayout(QtWidgets.QWidget, _HalSensitiveBase):    # <1>\n"
"    def __init__(self, parent = None):                          # <2>\n"
"        super(GridLayout, self).__init__(parent)                # <3>\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:154
msgid "Line by Line:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:163
#, no-wrap
msgid ""
"This defines the _class name_ and the _libraries it inherits from_.\n"
"This class, named `Lcnc_GridLayout`, inherits the functions of `QWidget` and `+_HalSensitiveBase+`.\n"
"`+_HalSensitiveBase+` is 'subclass' of *`+_HalWidgetBase+`*, the _base class of most QtVCP widgets_, meaning it has all the functions of `+_HalWidgetBase+` plus the functions of `+_HalSensitiveBase+`.\n"
"It adds the function to make the widget be enabled or disabled based on a HAL input BIT pin."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:165
msgid ""
"This is the function _called when the widget is first made_ (said "
"instantiated) - this is pretty standard."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:169
#, no-wrap
msgid ""
"This function initializes our widget's *`Super` classes*.\n"
"`Super` just means the _inherited baseclasses_, that is `QWidget` and `_HalSensitiveBase`.\n"
"Pretty standard other than the widget name will change."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-custom-widgets.adoc:170
#, no-wrap
msgid "Custom Controller Widgets Using `STATUS`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:174
msgid ""
"Widget that interact with LinuxCNC's controller are only a little more "
"complicated and they require some _extra libraries_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:177
msgid ""
"In this cut down example we will add properties that can be changed in Qt "
"Designer."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:180
msgid ""
"This LED indicator widget will respond to selectable LinuxCNC controller "
"states."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:194
#, no-wrap
msgid ""
"###############################\n"
"# Imports\n"
"###############################\n"
"from PyQt5.QtCore import pyqtProperty\n"
"from qtvcp.widgets.led_widget import LED\n"
"from qtvcp.core import Status\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:199 src/gui/qtvcp-custom-widgets.adoc:293
#, no-wrap
msgid ""
"###########################################\n"
"# **** instantiate libraries section **** #\n"
"###########################################\n"
"STATUS = Status()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:211
#, no-wrap
msgid ""
"##########################################\n"
"# custom widget class definition\n"
"##########################################\n"
"class StateLED(LED):\n"
"    def __init__(self, parent=None):\n"
"        super(StateLED, self).__init__(parent)\n"
"        self.has_hal_pins = False\n"
"        self.setState(False)\n"
"        self.is_estopped = False\n"
"        self.is_on = False\n"
"        self.invert_state = False\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:219 src/gui/qtvcp-custom-widgets.adoc:344
#, no-wrap
msgid ""
"    def _hal_init(self):\n"
"        if self.is_estopped:\n"
"            STATUS.connect('state-estop', lambda w:self._flip_state(True))\n"
"            STATUS.connect('state-estop-reset', lambda w:self._flip_state(False))\n"
"        elif self.is_on:\n"
"            STATUS.connect('state-on', lambda w:self._flip_state(True))\n"
"            STATUS.connect('state-off', lambda w:self._flip_state(False))\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:224 src/gui/qtvcp-custom-widgets.adoc:401
#, no-wrap
msgid ""
"    def _flip_state(self, data):\n"
"            if self.invert_state:\n"
"                data = not data\n"
"            self.change_state(data)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:228 src/gui/qtvcp-custom-widgets.adoc:427
#, no-wrap
msgid ""
"    #########################################################################\n"
"    # Qt Designer properties setter/getters/resetters\n"
"    ########################################################################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:236 src/gui/qtvcp-custom-widgets.adoc:435
#, no-wrap
msgid ""
"    # invert status\n"
"    def set_invert_state(self, data):\n"
"        self.invert_state = data\n"
"    def get_invert_state(self):\n"
"        return self.invert_state\n"
"    def reset_invert_state(self):\n"
"        self.invert_state = False\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:244 src/gui/qtvcp-custom-widgets.adoc:443
#, no-wrap
msgid ""
"    # machine is estopped status\n"
"    def set_is_estopped(self, data):\n"
"        self.is_estopped = data\n"
"    def get_is_estopped(self):\n"
"        return self.is_estopped\n"
"    def reset_is_estopped(self):\n"
"        self.is_estopped = False\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:252 src/gui/qtvcp-custom-widgets.adoc:451
#, no-wrap
msgid ""
"    # machine is on status\n"
"    def set_is_on(self, data):\n"
"        self.is_on = data\n"
"    def get_is_on(self):\n"
"        return self.is_on\n"
"    def reset_is_on(self):\n"
"        self.is_on = False\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:259 src/gui/qtvcp-custom-widgets.adoc:466
#, no-wrap
msgid ""
"    #######################################\n"
"    # Qt Designer properties\n"
"    #######################################\n"
"    invert_state_status = pyqtProperty(bool, get_invert_state, set_invert_state, reset_invert_state)\n"
"    is_estopped_status = pyqtProperty(bool, get_is_estopped, set_is_estopped, reset_is_estopped)\n"
"    is_on_status = pyqtProperty(bool, get_is_on, set_is_on, reset_is_on)\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-custom-widgets.adoc:261
#, no-wrap
msgid "In The 'Imports' Section"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:275
#, no-wrap
msgid ""
"###############################\n"
"# Imports\n"
"###############################\n"
"from PyQt5.QtCore import pyqtProperty       # <1>\n"
"from qtvcp.widgets.led_widget import LED    # <2>\n"
"from qtvcp.core import Status               # <3>\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:278
msgid "We import"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:280
msgid "`pyqtProperty` so we can interact with the Qt Designer editor,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:281
msgid "`LED` because our custom widget is based on it,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:282
msgid "`Status` because it gives us status messages from LinuxCNC. +"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-custom-widgets.adoc:283
#, no-wrap
msgid "In The 'Instantiate Libraries' Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:286
msgid "Here we create the `Status` library instance:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:298
msgid ""
"Typically we instantiated the library _outside of the widget class_ so that "
"the reference to it is *global* - meaning you don't need to use `self.` in "
"front of it."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:301
msgid ""
"By convention we use _all capital_ letters in the name for global references."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-custom-widgets.adoc:302
#, no-wrap
msgid "In The 'Custom Widget Class Definition' Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:305
msgid "This is the meat and potatoes of our custom widget."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-custom-widgets.adoc:306
#, no-wrap
msgid "Class definition and instance initialization function"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:317
#, no-wrap
msgid ""
"class StateLed(LED):                            # <1>\n"
"    def __init__(self, parent=None):            # <2>\n"
"        super(StateLed, self).__init__(parent)  # <3>\n"
"        self.has_hal_pins = False               # <4>\n"
"        self.setState(False)                    # <5>\n"
"        self.is_estopped = False\n"
"        self.is_on = False\n"
"        self.invert_state = False\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:323
#, no-wrap
msgid ""
"Defines the *name* _of our custom widget_ and what other _class it inherits from_.\n"
"In this case we inherit `LED` - a QtVCP widget that represents a status light."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:324
msgid "Typical of most widgets - called when the widget is first made."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:326
msgid ""
"Typical of most widgets - calls the parent (super) widget initialization "
"code."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:328
msgid "Then we set some attributes:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:330
msgid "Inherited from `Lcnc_Led` - we set it here so no HAL pin is made."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:331
msgid "Inherited from `Lcnc_led` - we set it to make sure the LED is off."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:333
msgid "The other attributes are for the selectable options of our widget."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-custom-widgets.adoc:334
#, no-wrap
msgid "Widget's HAL initialization function"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:349
msgid ""
"This function connects `STATUS` (LinuxCNC status message library) to our "
"widget so that the LED will on or off based on the selected state of the "
"controller."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:353
#, no-wrap
msgid ""
"We have two states we can choose from `is_estopped` or `is_on`.\n"
"Depending on which is active our widget get connected to the appropriate STATUS messages."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:359
#, no-wrap
msgid ""
"*`+_hal_init()+`* is _called on each widget that inherits_ `+_HalWidgetBase+`,\n"
"when QtVCP first builds the screen. +\n"
"You might wonder why it's called on this widget since we didn't have\n"
"`+_HalWidgetBase+` in our class definition (`class Lcnc_State_Led(Lcnc_Led):`) -\n"
"it's called because `Lcnc_Led` inherits `+_HalWidgetBase+`.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:362
msgid ""
"In this function you have access to some extra information (though we don't "
"use them in this example):"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:373
msgid ""
"We could use this information to create HAL pins or look up image paths etc."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:377
#, no-wrap
msgid "            STATUS.connect('state-estop', lambda w:self._flip_state(True))\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:380
msgid "Lets look at this line more closely:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:385
#, no-wrap
msgid ""
"`STATUS` is very common theme is widget building.\n"
"`STATUS` uses `GObject` message system to send messages to widgets that register to it.\n"
"This line is the registering process."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:387
msgid ""
"`state-estop` is the message we wish to listen for and act on. There are "
"many messages available."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:394
#, no-wrap
msgid ""
"`lambda w:self._flip_state(True)` is what happens when the message is caught.\n"
"The lambda function accepts the widget instance (`w`) that GObject sends it and then calls the function `self._flip_state(True)`.\n"
"Lambda was used to strip the (`w`) object before calling the `self._flip_state` function.\n"
"It also allowed use to send `self._flip_state()` the True state."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:405
#, no-wrap
msgid ""
"This is the function that actually flips the state of the LED.\n"
"It is what gets called when the appropriate STATUS message is accepted."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:409
#, no-wrap
msgid "STATUS.connect('current-feed-rate', self._set_feedrate_text)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:412
msgid "The function called looks like this:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:416
#, no-wrap
msgid "    def _set_feedrate_text(self, widget, data):\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:419
msgid "in which the widget and any data must be accepted by the function."
msgstr ""

#. type: Title ====
#: src/gui/qtvcp-custom-widgets.adoc:420
#, no-wrap
msgid "In the 'Designer Properties Setter/Getters/Resetters' Section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:455
#, no-wrap
msgid ""
"This is _how Qt Designer sets the attributes of the widget_.\n"
"This _can also be called directly_ in the widget."
msgstr ""

#. type: Title ====
#: src/gui/qtvcp-custom-widgets.adoc:456
#, no-wrap
msgid "In the 'Designer properties' section"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:469
msgid "This is the *registering of properties in Qt Designer*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:471
msgid "The *property name*:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:473
msgid "is the _text used in Qt Designer_,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:474
msgid "_cannot be the same as the attributes_ they represent."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:476
msgid "These properties show in Qt Designer in the order they appear here."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-custom-widgets.adoc:477
#, no-wrap
msgid "Custom Controller Widgets with Actions"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:480
msgid "Here is an example of a widget that sets the user reference system."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:482
msgid "It changes:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:484
msgid "the machine controller state using the `ACTION` library,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:485
msgid "whether the button can be clicked or not using the `STATUS` library."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:490
#, no-wrap
msgid ""
"import os\n"
"import hal\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:494
#, no-wrap
msgid ""
"from PyQt5.QtWidgets import QWidget, QToolButton, QMenu, QAction\n"
"from PyQt5.QtCore import Qt, QEvent, pyqtProperty, QBasicTimer, pyqtSignal\n"
"from PyQt5.QtGui import QIcon\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:498
#, no-wrap
msgid ""
"from qtvcp.widgets.widget_baseclass import _HalWidgetBase\n"
"from qtvcp.widgets.dialog_widget import EntryDialog\n"
"from qtvcp.core import Status, Action, Info\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:506
#, no-wrap
msgid ""
"# Instantiate the libraries with global reference\n"
"# STATUS gives us status messages from LinuxCNC\n"
"# INFO holds INI details\n"
"# ACTION gives commands to LinuxCNC\n"
"STATUS = Status()\n"
"INFO = Info()\n"
"ACTION = Action()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:516
#, no-wrap
msgid ""
"class SystemToolButton(QToolButton, _HalWidgetBase):\n"
"    def __init__(self, parent=None):\n"
"        super(SystemToolButton, self).__init__(parent)\n"
"        self._joint = 0\n"
"        self._last = 0\n"
"        self._block_signal = False\n"
"        self._auto_label_flag = True\n"
"        SettingMenu = QMenu()\n"
"        for system in('G54', 'G55', 'G56', 'G57', 'G58', 'G59', 'G59.1', 'G59.2', 'G59.3'):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:520
#, no-wrap
msgid ""
"            Button = QAction(QIcon('exit24.png'), system, self)\n"
"            Button.triggered.connect(self[system.replace('.','_')])\n"
"            SettingMenu.addAction(Button)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:523
#, no-wrap
msgid ""
"        self.setMenu(SettingMenu)\n"
"        self.dialog = EntryDialog()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:530
#, no-wrap
msgid ""
"    def _hal_init(self):\n"
"        if not self.text() == '':\n"
"            self._auto_label_flag = False\n"
"        def homed_on_test():\n"
"            return (STATUS.machine_is_on()\n"
"                    and (STATUS.is_all_homed() or INFO.NO_HOME_REQUIRED))\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:539
#, no-wrap
msgid ""
"        STATUS.connect('state-off', lambda w: self.setEnabled(False))\n"
"        STATUS.connect('state-estop', lambda w: self.setEnabled(False))\n"
"        STATUS.connect('interp-idle', lambda w: self.setEnabled(homed_on_test()))\n"
"        STATUS.connect('interp-run', lambda w: self.setEnabled(False))\n"
"        STATUS.connect('all-homed', lambda w: self.setEnabled(True))\n"
"        STATUS.connect('not-all-homed', lambda w, data: self.setEnabled(False))\n"
"        STATUS.connect('interp-paused', lambda w: self.setEnabled(True))\n"
"        STATUS.connect('user-system-changed', self._set_user_system_text)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:542
#, no-wrap
msgid ""
"    def G54(self):\n"
"        ACTION.SET_USER_SYSTEM('54')\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:545
#, no-wrap
msgid ""
"    def G55(self):\n"
"        ACTION.SET_USER_SYSTEM('55')\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:548
#, no-wrap
msgid ""
"    def G56(self):\n"
"        ACTION.SET_USER_SYSTEM('56')\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:551
#, no-wrap
msgid ""
"    def G57(self):\n"
"        ACTION.SET_USER_SYSTEM('57')\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:554
#, no-wrap
msgid ""
"    def G58(self):\n"
"        ACTION.SET_USER_SYSTEM('58')\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:557
#, no-wrap
msgid ""
"    def G59(self):\n"
"        ACTION.SET_USER_SYSTEM('59')\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:560
#, no-wrap
msgid ""
"    def G59_1(self):\n"
"        ACTION.SET_USER_SYSTEM('59.1')\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:563
#, no-wrap
msgid ""
"    def G59_2(self):\n"
"        ACTION.SET_USER_SYSTEM('59.2')\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:566
#, no-wrap
msgid ""
"    def G59_3(self):\n"
"        ACTION.SET_USER_SYSTEM('59.3')\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:571
#, no-wrap
msgid ""
"    def _set_user_system_text(self, w, data):\n"
"        convert = { 1:\"G54\", 2:\"G55\", 3:\"G56\", 4:\"G57\", 5:\"G58\", 6:\"G59\", 7:\"G59.1\", 8:\"G59.2\", 9:\"G59.3\"}\n"
"        if self._auto_label_flag:\n"
"            self.setText(convert[int(data)])\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:578
#, no-wrap
msgid ""
"    def ChangeState(self, joint):\n"
"        if int(joint) != self._joint:\n"
"            self._block_signal = True\n"
"            self.setChecked(False)\n"
"            self._block_signal = False\n"
"            self.hal_pin.set(False)\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-custom-widgets.adoc:589
#, no-wrap
msgid "Stylesheet Property Changes Based On Events"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:592
msgid "It's possible to *have widgets restyled when events change*."
msgstr ""

#. FIXME What does "polish" really mean ?
#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:596
#, no-wrap
msgid ""
"You must explicitly _\"polish\" the widget_ to have PyQt redo the style.\n"
"This is a relatively expensive function so should be used sparingly."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:599
msgid ""
"This example sets an `isHomed` property based on LinuxCNC's homed state and "
"in turn uses it to change stylesheet properties:"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-custom-widgets.adoc:600
#, no-wrap
msgid "This example will set the property isHomed based on LinuxCNC's homed state."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:609
#, no-wrap
msgid ""
"class HomeLabel(QLabel, _HalWidgetBase):\n"
"    def __init__(self, parent=None):\n"
"        super(HomeLabel, self).__init__(parent)\n"
"        self.joint_number = 0\n"
"        # for stylesheet reading\n"
"        self._isHomed = False\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:614
#, no-wrap
msgid ""
"    def _hal_init(self):\n"
"        super(HomeLabel, self)._hal_init()\n"
"        STATUS.connect('homed', lambda w,d: self._home_status_polish(int(d), True))\n"
"        STATUS.connect('unhomed', lambda w,d: self._home_status_polish(int(d), False))\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:623
#, no-wrap
msgid ""
"    # update ishomed property\n"
"    # polish widget so stylesheet sees the property change\n"
"    # some stylesheets color the text on home/unhome\n"
"    def _home_status_polish(self, d, state):\n"
"        if self.joint_number = d:\n"
"            self.setProperty('isHomed', state)\n"
"            self.style().unpolish(self)\n"
"            self.style().polish(self)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:629
#, no-wrap
msgid ""
"    # Qproperty getter and setter\n"
"    def getisHomed(self):\n"
"        return self._isHomed\n"
"    def setisHomed(self, data):\n"
"        self._isHomed = data\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:632
#, no-wrap
msgid ""
"    # Qproperty\n"
"    isHomed = QtCore.pyqtProperty(bool, getisHomed, setisHomed)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:635
msgid "Here is a sample stylesheet to change text color based on home state."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:640
#, no-wrap
msgid ""
"In this case any widget based on the HomeLabel widget above will change text color.\n"
"You would usually pick specific widgets using `HomeLabel #specific_widget_name[homed=true]`:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:649
#, no-wrap
msgid ""
"HomeLabel[homed=true] {\n"
"    color: green;\n"
"}\n"
"HomeLabel[homed=false] {\n"
"    color: red;\n"
"}\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-custom-widgets.adoc:651
#, no-wrap
msgid "Use Stylesheets To Change Custom Widget Properties"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:659
#, no-wrap
msgid ""
"class Label(QLabel):\n"
"    def __init__(self, parent=None):\n"
"        super(Label, self).__init__(parent)\n"
"        alternateFont0 = self.font\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:667
#, no-wrap
msgid ""
"    # Qproperty getter and setter\n"
"    def getFont0(self):\n"
"        return self.aleternateFont0\n"
"    def setFont0(self, value):\n"
"        self.alternateFont0(value)\n"
"    # Qproperty\n"
"    styleFont0 = pyqtProperty(QFont, getFont0, setFont0)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:670
msgid "Sample stylesheet that sets a custom widget property."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:676
#, no-wrap
msgid ""
"Label{\n"
"    qproperty-styleFont0: \"Times,12,-1,0,90,0,0,0,0,0\";\n"
"}\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-custom-widgets.adoc:678
#, no-wrap
msgid "Widget Plugins"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:681
msgid "We must _register our custom widget_ for Qt Designer to use them. +"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:686
#, no-wrap
msgid ""
"Here are a typical samples.\n"
"They would need to be added to `qtvcp/plugins/`\n"
"Then `qtvcp/plugins/qtvcp_plugin.py` would need to be adjusted to _import_ them."
msgstr ""

#. FIXME split samples bellow in independent py files and simply link them
#.       as they're not documented, or possibly include them if we really
#.       want to have them here in full text
#. type: Title ===
#: src/gui/qtvcp-custom-widgets.adoc:691
#, no-wrap
msgid "Gridlayout Example"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:702
#, no-wrap
msgid ""
"from PyQt5 import QtCore, QtGui\n"
"from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin\n"
"from qtvcp.widgets.simple_widgets import Lcnc_GridLayout\n"
"from qtvcp.widgets.qtvcp_icons import Icon\n"
"ICON = Icon()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:734
#, no-wrap
msgid ""
"####################################\n"
"# GridLayout\n"
"####################################\n"
"class LcncGridLayoutPlugin(QPyDesignerCustomWidgetPlugin):\n"
"    def __init__(self, parent = None):\n"
"        QPyDesignerCustomWidgetPlugin.__init__(self)\n"
"        self.initialized = False\n"
"    def initialize(self, formEditor):\n"
"        if self.initialized:\n"
"            return\n"
"        self.initialized = True\n"
"    def isInitialized(self):\n"
"        return self.initialized\n"
"    def createWidget(self, parent):\n"
"        return Lcnc_GridLayout(parent)\n"
"    def name(self):\n"
"        return \"Lcnc_GridLayout\"\n"
"    def group(self):\n"
"        return \"LinuxCNC - HAL\"\n"
"    def icon(self):\n"
"        return QtGui.QIcon(QtGui.QPixmap(ICON.get_path('lcnc_gridlayout')))\n"
"    def toolTip(self):\n"
"        return \"HAL enable/disable GridLayout widget\"\n"
"    def whatsThis(self):\n"
"        return \"\"\n"
"    def isContainer(self):\n"
"        return True\n"
"    def domXml(self):\n"
"        return '<widget class=\"Lcnc_GridLayout\" name=\"lcnc_gridlayout\" />\\n'\n"
"    def includeFile(self):\n"
"        return \"qtvcp.widgets.simple_widgets\"\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-custom-widgets.adoc:736
#, no-wrap
msgid "SystemToolbutton Example"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:747
#, no-wrap
msgid ""
"from PyQt5 import QtCore, QtGui\n"
"from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin\n"
"from qtvcp.widgets.system_tool_button import SystemToolButton\n"
"from qtvcp.widgets.qtvcp_icons import Icon\n"
"ICON = Icon()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:779
#, no-wrap
msgid ""
"####################################\n"
"# SystemToolButton\n"
"####################################\n"
"class SystemToolButtonPlugin(QPyDesignerCustomWidgetPlugin):\n"
"    def __init__(self, parent = None):\n"
"        super(SystemToolButtonPlugin, self).__init__(parent)\n"
"        self.initialized = False\n"
"    def initialize(self, formEditor):\n"
"        if self.initialized:\n"
"            return\n"
"        self.initialized = True\n"
"    def isInitialized(self):\n"
"        return self.initialized\n"
"    def createWidget(self, parent):\n"
"        return SystemToolButton(parent)\n"
"    def name(self):\n"
"        return \"SystemToolButton\"\n"
"    def group(self):\n"
"        return \"LinuxCNC - Controller\"\n"
"    def icon(self):\n"
"        return QtGui.QIcon(QtGui.QPixmap(ICON.get_path('systemtoolbutton')))\n"
"    def toolTip(self):\n"
"        return \"Button for selecting a User Coordinate System\"\n"
"    def whatsThis(self):\n"
"        return \"\"\n"
"    def isContainer(self):\n"
"        return False\n"
"    def domXml(self):\n"
"        return '<widget class=\"SystemToolButton\" name=\"systemtoolbutton\" />\\n'\n"
"    def includeFile(self):\n"
"        return \"qtvcp.widgets.system_tool_button\"\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-custom-widgets.adoc:781
#, no-wrap
msgid "Making a plugin with a MenuEntry dialog box"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:785
msgid ""
"It possible to add an entry to the dialog that pops up when you right click "
"the widget in the layout."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:787
msgid "This can do things such as selecting options in a more convenient way."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-custom-widgets.adoc:789
msgid "This is the plugin used for _action buttons_."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:802
#, no-wrap
msgid ""
"import sip\n"
"from PyQt5 import QtCore, QtGui, QtWidgets\n"
"from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin, \\\n"
"                QPyDesignerTaskMenuExtension, QExtensionFactory, \\\n"
"                QDesignerFormWindowInterface, QPyDesignerMemberSheetExtension\n"
"from qtvcp.widgets.action_button import ActionButton\n"
"from qtvcp.widgets.qtvcp_icons import Icon\n"
"ICON = Icon()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:809
#, no-wrap
msgid ""
"Q_TYPEID = {\n"
"    'QDesignerContainerExtension':     'org.qt-project.Qt.Designer.Container',\n"
"    'QDesignerPropertySheetExtension': 'org.qt-project.Qt.Designer.PropertySheet',\n"
"    'QDesignerTaskMenuExtension': 'org.qt-project.Qt.Designer.TaskMenu',\n"
"    'QDesignerMemberSheetExtension': 'org.qt-project.Qt.Designer.MemberSheet'\n"
"}\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:814
#, no-wrap
msgid ""
"####################################\n"
"# ActionBUTTON\n"
"####################################\n"
"class ActionButtonPlugin(QPyDesignerCustomWidgetPlugin):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:820
#, no-wrap
msgid ""
"    # The __init__() method is only used to set up the plugin and define its\n"
"    # initialized variable.\n"
"    def __init__(self, parent=None):\n"
"        super(ActionButtonPlugin, self).__init__(parent)\n"
"        self.initialized = False\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:825
#, no-wrap
msgid ""
"    # The initialize() and isInitialized() methods allow the plugin to set up\n"
"    # any required resources, ensuring that this can only happen once for each\n"
"    # plugin.\n"
"    def initialize(self, formEditor):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:833
#, no-wrap
msgid ""
"        if self.initialized:\n"
"            return\n"
"        manager = formEditor.extensionManager()\n"
"        if manager:\n"
"            self.factory = ActionButtonTaskMenuFactory(manager)\n"
"            manager.registerExtensions(self.factory, Q_TYPEID['QDesignerTaskMenuExtension'])\n"
"        self.initialized = True\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:836
#, no-wrap
msgid ""
"    def isInitialized(self):\n"
"        return self.initialized\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:840
#, no-wrap
msgid ""
"    # This factory method creates new instances of our custom widget\n"
"    def createWidget(self, parent):\n"
"        return ActionButton(parent)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:844
#, no-wrap
msgid ""
"    # This method returns the name of the custom widget class\n"
"    def name(self):\n"
"        return \"ActionButton\"\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:848
#, no-wrap
msgid ""
"    # Returns the name of the group in Qt Designer's widget box\n"
"    def group(self):\n"
"        return \"LinuxCNC - Controller\"\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:852
#, no-wrap
msgid ""
"    # Returns the icon\n"
"    def icon(self):\n"
"        return QtGui.QIcon(QtGui.QPixmap(ICON.get_path('actionbutton')))\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:856
#, no-wrap
msgid ""
"    # Returns a tool tip short description\n"
"    def toolTip(self):\n"
"        return \"Action button widget\"\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:861
#, no-wrap
msgid ""
"    # Returns a short description of the custom widget for use in a \"What's\n"
"    # This?\" help message for the widget.\n"
"    def whatsThis(self):\n"
"        return \"\"\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:865
#, no-wrap
msgid ""
"    # Returns True if the custom widget acts as a container for other widgets;\n"
"    def isContainer(self):\n"
"        return False\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:870
#, no-wrap
msgid ""
"    # Returns an XML description of a custom widget instance that describes\n"
"    # default values for its properties.\n"
"    def domXml(self):\n"
"        return '<widget class=\"ActionButton\" name=\"actionbutton\" />\\n'\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:875
#, no-wrap
msgid ""
"    # Returns the module containing the custom widget class. It may include\n"
"    # a module path.\n"
"    def includeFile(self):\n"
"        return \"qtvcp.widgets.action_button\"\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:878
#, no-wrap
msgid "class ActionButtonDialog(QtWidgets.QDialog):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:880
#, no-wrap
msgid "   def __init__(self, widget, parent = None):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:882
#, no-wrap
msgid "      QtWidgets.QDialog.__init__(self, parent)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:884
#, no-wrap
msgid "      self.widget = widget\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:886
#, no-wrap
msgid "      self.previewWidget = ActionButton()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:890
#, no-wrap
msgid ""
"      buttonBox = QtWidgets.QDialogButtonBox()\n"
"      okButton = buttonBox.addButton(buttonBox.Ok)\n"
"      cancelButton = buttonBox.addButton(buttonBox.Cancel)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:893
#, no-wrap
msgid ""
"      okButton.clicked.connect(self.updateWidget)\n"
"      cancelButton.clicked.connect(self.reject)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:898
#, no-wrap
msgid ""
"      layout = QtWidgets.QGridLayout()\n"
"      self.c_estop = QtWidgets.QCheckBox(\"Estop Action\")\n"
"      self.c_estop.setChecked(widget.estop )\n"
"      layout.addWidget(self.c_estop)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:901
#, no-wrap
msgid ""
"      layout.addWidget(buttonBox, 5, 0, 1, 2)\n"
"      self.setLayout(layout)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:903
#, no-wrap
msgid "      self.setWindowTitle(self.tr(\"Set Options\"))\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:905
#, no-wrap
msgid "   def updateWidget(self):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:911
#, no-wrap
msgid ""
"      formWindow = QDesignerFormWindowInterface.findFormWindow(self.widget)\n"
"      if formWindow:\n"
"          formWindow.cursor().setProperty(\"estop_action\",\n"
"              QtCore.QVariant(self.c_estop.isChecked()))\n"
"      self.accept()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:913
#, no-wrap
msgid "class ActionButtonMenuEntry(QPyDesignerTaskMenuExtension):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:920
#, no-wrap
msgid ""
"    def __init__(self, widget, parent):\n"
"        super(QPyDesignerTaskMenuExtension, self).__init__(parent)\n"
"        self.widget = widget\n"
"        self.editStateAction = QtWidgets.QAction(\n"
"          self.tr(\"Set Options...\"), self)\n"
"        self.editStateAction.triggered.connect(self.updateOptions)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:923
#, no-wrap
msgid ""
"    def preferredEditAction(self):\n"
"        return self.editStateAction\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:926
#, no-wrap
msgid ""
"    def taskActions(self):\n"
"        return [self.editStateAction]\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:930
#, no-wrap
msgid ""
"    def updateOptions(self):\n"
"        dialog = ActionButtonDialog(self.widget)\n"
"        dialog.exec_()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:934
#, no-wrap
msgid ""
"class ActionButtonTaskMenuFactory(QExtensionFactory):\n"
"    def __init__(self, parent = None):\n"
"        QExtensionFactory.__init__(self, parent)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:936
#, no-wrap
msgid "    def createExtension(self, obj, iid, parent):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-custom-widgets.adoc:944
#, no-wrap
msgid ""
"        if not isinstance(obj, ActionButton):\n"
"            return None\n"
"        if iid == Q_TYPEID['QDesignerTaskMenuExtension']:\n"
"            return ActionButtonMenuEntry(obj, parent)\n"
"        elif iid == Q_TYPEID['QDesignerMemberSheetExtension']:\n"
"            return ActionButtonMemberSheet(obj, parent)\n"
"        return None\n"
msgstr ""

#. type: Title =
#: src/gui/qtvcp-development.adoc:5
#, no-wrap
msgid "QtVCP Development"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:11
msgid ""
"The intention of QtVCP is to *supply an infrastructure to support screen and "
"VCP panel building for LinuxCNC*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:15
msgid ""
"By providing a _diverse widget_ set and supporting _custom coding_, QtVCP "
"hopes that development energy will be expended in _one toolkit_ rather than "
"continuous re-invention."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:19
msgid ""
"By using the same toolkit across many screens/panels users should have an "
"easier time customizing/creating these, and developers should find it easier "
"to help trouble shoot with less effort."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:23
msgid ""
"QtVCP uses a *Qt Designer built `.ui` file* and a *Python handler file* to "
"*load and control a screen/panel that displays Qt widgets* to *control "
"LinuxCNC's motion controller or HAL pins*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:26
msgid ""
"There are _builtin screens and panels_, easily loaded by a user, or users "
"can build/modify one of their own."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:30
msgid ""
"QtVCP uses *libraries and custom widgets* to hide some of the complexity of "
"interfacing to LinuxCNC. By using QtVCP's library rather than LinuxCNC's, we "
"can mitigate minor LinuxCNC code changes."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-development.adoc:31
#, no-wrap
msgid "Builtin Locations"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:34
msgid "Builtin screens and panels are stored in separate folders:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:36
msgid "_Screens_ in `share/qtvcp/screens`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:37
msgid "_Panels_ in `share/qtvcp/panels`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:38
msgid "_Stock images_ in `share/qtvcp/images`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:41
msgid ""
"Screens and panels are sorted by their folder name, which is also the name "
"used to load them."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:43
msgid "Inside the folder would be:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:45
msgid "the `.ui` _file_,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:46
msgid "the _handler file_, and"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:47
msgid "possibly the `.qss` _theme file_."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-development.adoc:48
#, no-wrap
msgid "QtVCP Startup To Shutdown"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:52
#, no-wrap
msgid ""
"*QtVCP source* is located in `+src/emc/usr_intf/qtvcp+` folder of\n"
"LinuxCNC source tree.\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-development.adoc:53
#, no-wrap
msgid "QtVCP Startup"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:56
msgid "When QtVCP first starts:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:58
msgid "It must decide if this object is a screen or a panel."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:60
msgid ""
"It searches for and collects information about paths of required files and "
"useful folders."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:61
msgid "It then:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:62
msgid "Builds the HAL component,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:63
msgid "Loads the window instance,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:64
msgid "Adds handler extensions,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:65
msgid "Installs an event filter."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:69
#, no-wrap
msgid ""
"Now the window/widgets are instantiated, the HAL pins are built.\n"
"This also initiates the `+_init_hal()+` function of the widgets."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:70
msgid "The `+initialized__()+` handler function is called"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:71
msgid "The `STATUS` library is forced to update."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:72
msgid "HAL component is set ready at this point."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:74
msgid ""
"A variety of optional switch arguments are set, including calling a "
"`POSTGUI` HAL file (if a screen)."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:75
msgid "Terminate signals are trapped and QtVCP now polls for events."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-development.adoc:76
#, no-wrap
msgid "QtVCP Shutdown"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:79
msgid "Finally when QtVCP is asked to shutdown:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:81
msgid "It calls shutdown functions in the handler file,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:82
msgid "`STATUS` monitoring is shut down"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:83
msgid "HAL component gets killed"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-development.adoc:84
#, no-wrap
msgid "Path Information"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:87
msgid "When QtVCP loads it collects paths informations."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:90
msgid ""
"This is available in the handler file's `+__init__()+` function as *`path`*:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-development.adoc:91
#, no-wrap
msgid "*`IMAGEDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:92
msgid "Path of builtin images"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-development.adoc:92
#, no-wrap
msgid "*`SCREENDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:93
msgid "Path of builtin motion controller screens"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-development.adoc:93
#, no-wrap
msgid "*`PANELDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:94
msgid "Path of builtin accessory panels"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-development.adoc:94
#, no-wrap
msgid "*`WORKINGDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:95
msgid "Path of where QtVCP was launched from"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-development.adoc:95
#, no-wrap
msgid "*`CONFIGPATH`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:96
msgid "Path of the launched configuration"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-development.adoc:96
#, no-wrap
msgid "*`BASEDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:97
msgid "general path, used to derive all paths"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-development.adoc:97
#, no-wrap
msgid "*`BASENAME`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:98
msgid "Generic name used to derive all paths"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-development.adoc:98
#, no-wrap
msgid "*`LIBDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:99
msgid "Path of QtVCP's Python library"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-development.adoc:99
#, no-wrap
msgid "*`HANDLER`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:100
msgid "Path of handler file"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-development.adoc:100
#, no-wrap
msgid "*`XML`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:101
msgid "Path of .ui file"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-development.adoc:101
#, no-wrap
msgid "*`DOMAIN`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:102
msgid "Path of translation"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-development.adoc:102
#, no-wrap
msgid "*`IS_SCREEN`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:103
msgid "screen/panel switch"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-development.adoc:104
#, no-wrap
msgid "Idiosyncrasies"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:107
msgid "These try to cover non-obvious situations."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-development.adoc:108
#, no-wrap
msgid "Error Code Collecting"
msgstr ""

#. FIXME which place ?
#. type: Plain text
#: src/gui/qtvcp-development.adoc:111
#, no-wrap
msgid "*LinuxCNC's error code collecting can only be read from one place*.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:114
msgid "When read, it is *'consumed'*, i.e. _no other object can read it_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:117
msgid ""
"In QtVCP screens, it is recommended to _use the_ `ScreenOptions` _widget to "
"set up error reading_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:119
msgid "_Errors are then *sent to other objects* via_ *`STATUS`* _signals_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-development.adoc:120
#, no-wrap
msgid "Jog Rate"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:124
#, no-wrap
msgid ""
"*LinuxCNC has no internal record of jog rate*: _you must specify it at\n"
"the time of jogging_.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:127
msgid ""
"QtVCP uses the `STATUS` library to _keep track of the latest linear and "
"angular jog rates_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:137
#, no-wrap
msgid ""
"It is *always specified in machine units per minute* and _must be converted when in non-machine units mode_.\n"
"So, if your machine is imperial based but you are in metric mode, changes to jog rate sent to `ACTION` functions must be converted to imperial.\n"
"In the same manner, if the machine is metric based and you are in imperial mode, changes to jog rate must be sent to `ACTION` functions in metric units.\n"
"_For angular jog rates the units don't change in metric/imperial mode_ so you can send them to `ACTION` functions without conversion."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:142
msgid ""
"While you are free to ignore this jogging record while building screens, "
"anyone modifying your screen and using the builtin jog rate widgets would "
"not get the desired results as the `ACTION` library's *`DO_JOG`* function "
"gets it's jog rate from the `STATUS` library."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-development.adoc:143
#, no-wrap
msgid "Keybinding"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:147
#, no-wrap
msgid ""
"Keybinding is always a _difficult-to-get-right-in-all-cases_\n"
"  affair.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:149
msgid "Custom keybinding functions are to be _defined in the handler file_."
msgstr ""

#. TODO Elaborate ?
#. type: Plain text
#: src/gui/qtvcp-development.adoc:152
msgid ""
"Most importantly widgets that require regular key input and not jogging, "
"should be checked for in the `processed_key_event__` function."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-development.adoc:154
#, no-wrap
msgid "Preference File"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:158
msgid ""
"Some QtVCP widgets use the preference file to record important informations."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:162
#, no-wrap
msgid ""
"This _requires the preference file to be set up early_ in the widget initialization process.\n"
"The easiest way to do this is to *use the `ScreenOptions` widget*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-development.adoc:163
#, no-wrap
msgid "Widget Special Setup Functions"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:167
msgid ""
"QtVCP looks for and calls the `+_hal_init()+` function _when the widget is "
"first loaded_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:169
msgid "It is not called when using Qt Designer editor."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:172
msgid ""
"After this function is called the widget has access to some special "
"variables:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:183
msgid ""
"When making a custom widget, _import and sub class _the *`+_HalWidgetBase+`* "
"class for this behavior."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-development.adoc:184
#, no-wrap
msgid "Dialogs"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:188
msgid ""
"Dialogs (AKA \"pop up windows\") are _best loaded with the_ `ScreenOptions` "
"_widget_, but they can be placed on the screen in Qt Designer."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:191
msgid ""
"It doesn't matter where on the layout but _to make them hidden_, cycle the "
"`state` property to true then false."
msgstr ""

#. TODO How ?
#. type: Plain text
#: src/gui/qtvcp-development.adoc:196
#, no-wrap
msgid ""
"By default, if there is a preference file, the dialogs will remember their last size/placement.\n"
"It is possible to override this so they open in the same location each time."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-development.adoc:198
#, no-wrap
msgid "Styles (Themes)"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:203
msgid ""
"While it is possible to set styles _in Qt Designer_, it is more convenient "
"to change them later if they are all set in a *_separate_ `.qss` _file_*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-development.adoc:205
msgid "The file should be put in the _same location as the handler file_."
msgstr ""

#. type: Title =
#: src/gui/qtvcp-libraries.adoc:5
#, no-wrap
msgid "QtVCP Libraries modules"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:16
#, no-wrap
msgid ""
"Libraries are *prebuilt Python modules that give added features to QtVCP*.\n"
"In this way you can select what features you want - yet don't have to build common ones yourself. +"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:17
#, no-wrap
msgid "`Status`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:22
#, no-wrap
msgid ""
"*`Status`* is a library that *sends GObject messages based on LinuxCNC's\n"
"current state*. +\n"
"It is an _extension of GladeVCP's <<cha:gstat,GStat>> object_.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:25
msgid ""
"It also has some functions to report status on such things as internal jog "
"rate."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:29
msgid ""
"You _connect a function_ call to the `STATUS` message you are interested in, "
"and QtVCP will call this function when the message is sent from `STATUS`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:34
#, no-wrap
msgid ""
"*Import `Status` modules* +\n"
"Add this Python code to your import section:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:42
#, no-wrap
msgid "from qtvcp.core import Status\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:46
#, no-wrap
msgid ""
"*Instantiate `Status` module* +\n"
"Add this Python code to your instantiate section:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:50
#, no-wrap
msgid "STATUS = Status()\n"
msgstr ""

#. FIXME explicit GObject syntax
#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:54
#, no-wrap
msgid ""
"*Connect to `STATUS` messages* +\n"
"Use _GObject syntax_.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:59
msgid "For example, you can catch machine on and off messages."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:68
#, no-wrap
msgid ""
"The example below shows the _two common ways of connecting signals_, one of them _using lambda_.\n"
"*`lambda`* is _used to strip off or manipulate arguments_ from the status message before calling the function.\n"
"You can see the difference in the called function signature: the one that uses lambda does not accept the status object - lambda did not pass it to the function."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:71
msgid ""
"Place these commands into the `[INITIALIZE]` section of the Python handler "
"file:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:76
#, no-wrap
msgid ""
"STATUS.connect('state-on', self.on_state_on)\n"
"STATUS.connect('state-off', lambda: w, self.on_state_off())\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:82
#, no-wrap
msgid ""
"In this example code, when LinuxCNC is in _\"machine on\" state_ the function `self.on_state_on` will be called.\n"
"When LinuxCNC is in _\"machine off\" state_ the function `self.on_state_off` will be called. +"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:84
msgid "These would call functions that looks like these:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:91
#, no-wrap
msgid ""
"def on_state_on(self, status_object):\n"
"    print('LinuxCNC machine is on')\n"
"def on_state_off(self):\n"
"    print('LinuxCNC machine is off')\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:93
#, no-wrap
msgid "`Info`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:96
#, no-wrap
msgid "*`Info`* is a library to *collect and filter data from the INI file*. +\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-libraries.adoc:97
#, no-wrap
msgid "Available data and defaults"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-libraries.adoc:161
#, no-wrap
msgid "User message dialog info"
msgstr ""

#. TODO convert to definition list ?
#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:172
#, no-wrap
msgid ""
"USRMESS_BOLDTEXT = self.INI.findall(\"DISPLAY\", \"MESSAGE_BOLDTEXT\")\n"
"USRMESS_TEXT = self.INI.findall(\"DISPLAY\", \"MESSAGE_TEXT\")\n"
"USRMESS_TYPE = self.INI.findall(\"DISPLAY\", \"MESSAGE_TYPE\")\n"
"USRMESS_PINNAME = self.INI.findall(\"DISPLAY\", \"MESSAGE_PINNAME\")\n"
"USRMESS_DETAILS = self.INI.findall(\"DISPLAY\", \"MESSAGE_DETAILS\")\n"
"USRMESS_ICON = self.INI.findall(\"DISPLAY\", \"MESSAGE_ICON\")\n"
"ZIPPED_USRMESS =\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-libraries.adoc:176
#, no-wrap
msgid "Embedded program info"
msgstr ""

#. TODO convert to definition list ?
#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:184
#, no-wrap
msgid ""
"TAB_NAMES = (self.INI.findall(\"DISPLAY\", \"EMBED_TAB_NAME\")) or None\n"
"TAB_LOCATION = (self.INI.findall(\"DISPLAY\", \"EMBED_TAB_LOCATION\")) or []\n"
"TAB_CMD = (self.INI.findall(\"DISPLAY\", \"EMBED_TAB_COMMAND\")) or None\n"
"ZIPPED_TABS =\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-libraries.adoc:190 src/gui/qtvcp-libraries.adoc:250
#: src/gui/qtvcp-libraries.adoc:407 src/gui/qtvcp-libraries.adoc:523
#: src/gui/qtvcp-libraries.adoc:600
#, no-wrap
msgid "Helpers"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:193
msgid "There are some _helper functions_ - mostly used for widget support:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:194
#, no-wrap
msgid "*`get_error_safe_setting(_self_, _heading_, _detail_, default=_None_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:195
#, no-wrap
msgid "*`convert_metric_to_machine(_data_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:196
#, no-wrap
msgid "*`convert_imperial_to_machine(_data_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:197
#, no-wrap
msgid "*`convert_9_metric_to_machine(_data_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:198
#, no-wrap
msgid "*`convert_9_imperial_to_machine(_data_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:199
#, no-wrap
msgid "*`convert_units(_data_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:200
#, no-wrap
msgid "*`convert_units_9(_data_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:201
#, no-wrap
msgid "*`get_filter_program(_fname_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:202
#, no-wrap
msgid "*`get_qt_filter_extensions()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:204
msgid "Get filter extensions in Qt format."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:209
#, no-wrap
msgid ""
"*Import `Info` module* +\n"
"Add this Python code to your import section:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:217
#, no-wrap
msgid "from qtvcp.core import Info\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:221
#, no-wrap
msgid ""
"*Instantiate `Info` module* +\n"
"Add this Python code to your instantiate section:\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:233
#, no-wrap
msgid ""
"*Access `INFO` data*\n"
"Use this general syntax:\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:241
#, no-wrap
msgid "`Action`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:244
#, no-wrap
msgid "*`Action`* library is used to *command LinuxCNC's motion controller*.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:247
msgid ""
"It tries to hide incidental details and add convenience methods for "
"developers."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:254
msgid ""
"There are some *helper functions*, mostly used for this library's support:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:255
#, no-wrap
msgid "*`get_jog_info (_num_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:256
#, no-wrap
msgid "*`jnum_check(_num_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:257
#, no-wrap
msgid "*`ensure_mode(_modes_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:258
#, no-wrap
msgid "*`open_filter_program(_filename_, _filter_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:260
msgid "Open G-code filter program."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:265
#, no-wrap
msgid ""
"*Import `Action` module* +\n"
"Add this Python code to your import section:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:273
#, no-wrap
msgid "from qtvcp.core import Action\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:277
#, no-wrap
msgid ""
"*Instantiate `Action` module* +\n"
"Add this Python code to your instantiate section:\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:289
#, no-wrap
msgid ""
"*Access `ACTION` commands* +\n"
"Use general syntax such as these:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:376
#, no-wrap
msgid "ACTION.CALL_DIALOG(command):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:378
#, no-wrap
msgid "ACTION.HIDE_POINTER(state):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:387
#, no-wrap
msgid ""
"ACTION.PLAY_SOUND(path):\n"
"ACTION.PLAY_ERROR():\n"
"ACTION.PLAY_DONE():\n"
"ACTION.PLAY_READY():\n"
"ACTION.PLAY_ATTENTION():\n"
"ACTION.PLAY_LOGIN():\n"
"ACTION.PLAY_LOGOUT():\n"
"ACTION.SPEAK(speech):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:391
#, no-wrap
msgid ""
"ACTION.BEEP():\n"
"ACTION.BEEP_RING():\n"
"ACTION.BEEP_START():\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:396
#, no-wrap
msgid "`Tool`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:399
msgid "This library *handles tool offset file changes*."
msgstr ""

#. TODO Tool: Usage
#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:404
#, no-wrap
msgid ""
"*LinuxCNC doesn't handle third party manipulation of the tool\n"
"  file well.*\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:409
#, no-wrap
msgid "*`GET_TOOL_INFO(_toolnumber_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:411
msgid ""
"This will return a Python *list of information on the requested tool "
"number*. +"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:412
#, no-wrap
msgid "*`GET_TOOL_ARRAY()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:414
msgid "This return a single Python *list of Python lists of tool information*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:416
msgid "This is a raw list formed _from the system tool file_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:417
#, no-wrap
msgid "*`ADD_TOOL(_newtool_ = [_-99, 0,'0','0','0','0','0','0','0','0','0','0','0','0', 0,'New Tool'_])`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:420
msgid ""
"This will return a Python *tuple of two Python lists of Python lists of tool "
"information*:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:422
#, no-wrap
msgid "*`[0]`* will be _real tools informations_\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:424
#, no-wrap
msgid ""
"*`[1]`* will be _wear tools informations_ (tool numbers will be over\n"
"10000; Fanuc style tool wear)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:428
#, no-wrap
msgid ""
"By default, adds a blanck tool entry with tool number -99.\n"
"You can preload the `newtool` array with tool information."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:429
#, no-wrap
msgid "*`DELETE_TOOLS(_toolnumber_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:431
#, no-wrap
msgid "*Delete the numbered tool*.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:432
#, no-wrap
msgid "*`SAVE_TOOLFILE(_toolarray_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:435
msgid ""
"This will *parse the `toolarray` and save it to the tool file* specified in "
"the _INI file_ as the tool path."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:437
msgid "This tool _array must contain all the available tools information_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:440
msgid ""
"This array is expected to use the LinuxCNC _raw tool array_, i.e.  doesn't "
"have tool wear entries."
msgstr ""

#. FIXME Really ??
#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:443
msgid "It will return True if there was an error."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:444
#, no-wrap
msgid "*`CONVERT_TO_WEAR_TYPE(_toolarray_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:446
msgid ""
"This function *converts a LinuxCNC raw tool array to a QtVCP tool array*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:448
msgid "_QtVCP's tool array includes entries for X and Z axis tool wear_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:451 src/gui/qtvcp-libraries.adoc:462
msgid ""
"_LinuxCNC supports tool wear_ by adding *tool wear information into tool "
"entries above 10000*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:454
#, no-wrap
msgid ""
"This also *requires remap code to add the wear offsets at tool\n"
"  change time*.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:455
#, no-wrap
msgid "*`CONVERT_TO_STANDARD_TYPE(_toolarray_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:457
msgid ""
"This function *converts QtVCP's tool array into a LinuxCNC raw tool array*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:459
msgid "_QtVCP's array includes entries for X and Z axis tool wear_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:465
#, no-wrap
msgid ""
"This also *requires remap code to add the wear offsets t tool\n"
"  change time*.\n"
msgstr ""

#. TODO Tools: Usage
#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:468
#, no-wrap
msgid "`Path`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:471
#, no-wrap
msgid "*`Path`* module gives *reference to important files paths*.\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-libraries.adoc:472
#, no-wrap
msgid "Referenced Paths"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:474
#, no-wrap
msgid "*`PATH.PREFS_FILENAME`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:476
msgid "The preference file path."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:476
#, no-wrap
msgid "*`PATH.WORKINGDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:478
msgid "The directory QtVCP was launched from."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:478
#, no-wrap
msgid "*`PATH.IS_SCREEN`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:480
msgid "Is this a screen or a VCP ?"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:480
#, no-wrap
msgid "*`PATH.CONFIGPATH`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:482
msgid "Launched configuration folder."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:482
#, no-wrap
msgid "*`PATH.RIPCONFIGDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:484
msgid "The Run-in-place config folder for QtVCP screens."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:484
#, no-wrap
msgid "*`PATH.BASEDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:486
msgid "Base folder for LinuxCNC."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:486
#, no-wrap
msgid "*`PATH.BASENAME`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:488
msgid "The Qt Designer files name (no ending)."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:488
#, no-wrap
msgid "*`PATH.IMAGEDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:490
msgid "The QtVCP image folder."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:490
#, no-wrap
msgid "*`PATH.SCREENDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:492
msgid "The QtVCP builtin Screen folder."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:492
#, no-wrap
msgid "*`PATH.PANELDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:494
msgid "The QtVCP builtin VCP folder."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:494
#, no-wrap
msgid "*`PATH.HANDLER`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:496
msgid "Handler file Path."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:496 src/gui/qtvcp-libraries.adoc:501
#, no-wrap
msgid "*`PATH.HANDLERDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:498
msgid "Directory where the Python handler file was found."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:498
#, no-wrap
msgid "*`PATH.XML`*"
msgstr ""

#. FIXME PATH.HANDLERDIR for both handler and ui files ?
#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:500
msgid "QtVCP UI file path."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:503
msgid "Directory where the UI file was found."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:503
#, no-wrap
msgid "*`PATH.QSS`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:505
msgid "QtVCP QSS file path."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:505
#, no-wrap
msgid "*`PATH.PYDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:507
msgid "LinuxCNC's Python library."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:507
#, no-wrap
msgid "*`PATH.LIBDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:509
msgid "The QtVCP library folder."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:509
#, no-wrap
msgid "*`PATH.WIDGET`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:511
msgid "The QtVCP widget folder."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:511
#, no-wrap
msgid "*`PATH.PLUGIN`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:513
msgid "The QtVCP widget plugin folder."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:513
#, no-wrap
msgid "*`PATH.VISMACHDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:515
msgid "Directory where prebuilt Vismach files are found."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:517
msgid "Not currently used:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:518
#, no-wrap
msgid "*`PATH.LOCALEDIR`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:520
msgid "Locale translation folder."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:520
#, no-wrap
msgid "*`PATH.DOMAIN`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:522
msgid "Translation domain."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:526
msgid "There are some helper functions available:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:532
#, no-wrap
msgid ""
"file_list = PATH.find_vismach_files()\n"
"directory_list = PATH.find_screen_dirs()\n"
"directory_list = PATH.find_panel_dirs()\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:538
#, no-wrap
msgid ""
"*Import `Path` module* +\n"
"Add this Python code to your import section:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:546
#, no-wrap
msgid "from qtvcp.core import Path\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:550
#, no-wrap
msgid ""
"*Instantiate `Path` module* +\n"
"Add this Python code to your instantiate section:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:558
#, no-wrap
msgid "PATH = Path()\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:560
#, no-wrap
msgid "`VCPWindow`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:563
#, no-wrap
msgid "*`VCPWindow`* module gives *reference to the `MainWindow` and widgets*.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:567
msgid ""
"Typically this would be used for a library (eg, toolbar library uses it) as "
"the widgets get a reference to the `MainWindow` from the `_hal_init()` "
"function."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:572
#, no-wrap
msgid ""
"*Import `VCPWindow` module* +\n"
"Add this Python code to your import section:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:580
#, no-wrap
msgid "from qtvcp.qt_makegui import VCPWindow\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:584
#, no-wrap
msgid ""
"*Instantiate `VCPWindow` module*+\n"
"Add this Python code to your instantiate section:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:592
#, no-wrap
msgid "WIDGETS = VCPWindow()\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:594
#, no-wrap
msgid "`Aux_program_loader`"
msgstr ""

#. FIXME Aux_program_loader: load (into QtVCP) or launch ?
#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:599
#, no-wrap
msgid ""
"*`Aux_program_loader`* module allows an easy way to\n"
"*load auxiliary programs LinuxCNC often uses*.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:602
#, no-wrap
msgid "*`load_halmeter()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:605
#, no-wrap
msgid ""
"_Halmeter_ is used to *display one HAL pin data*.\n"
"Load a `halmeter` with:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:609
#, no-wrap
msgid "AUX_PRGM.load_halmeter()\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:611
#, no-wrap
msgid "*`load_ladder()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:613
msgid "Load _ClassicLadder_ PLC program:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:617
#, no-wrap
msgid "AUX_PRGM.load_ladder()\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:619
#, no-wrap
msgid "*`load_status()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:621
msgid "Load LinuxCNC `status` program:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:625
#, no-wrap
msgid "AUX_PRGM.load_status()\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:627
#, no-wrap
msgid "*`load_halshow()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:629
msgid "Load _HALshow_, configure display program:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:633
#, no-wrap
msgid "AUX_PRGM.load_halshow()\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:635
#, no-wrap
msgid "*`load_halscope()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:637
msgid "Load _HALscope_ program:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:641
#, no-wrap
msgid "AUX_PRGM.load_halscope()\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:643
#, no-wrap
msgid "*`load_tooledit()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:645
msgid "Load _Tooledit_ program:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:649
#, no-wrap
msgid "AUX_PRGM.load_tooledit(<TOOLEFILE_PATH>)\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:651
#, no-wrap
msgid "*`load_calibration()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:653
msgid "Load _Calibration_ program:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:657
#, no-wrap
msgid "AUX_PRGM.load_calibration()\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:659
#, no-wrap
msgid "*`keyboard_onboard()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:661
msgid "Load _onboard/Matchbox keyboard_"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:665
#, no-wrap
msgid "AUX_PRGM.keyboard_onboard(<ARGS>)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:671
#, no-wrap
msgid ""
"*Import `Aux_program_loader` module* +\n"
"Add this Python code to your import section:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:679
#, no-wrap
msgid "from qtvcp.lib.aux_program_loader import Aux_program_loader\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:683
#, no-wrap
msgid ""
"*Instantiate `Aux_program_loader` module* +\n"
"Add this Python code to your instantiate section:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:691
#, no-wrap
msgid "AUX_PRGM = Aux_program_loader()\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:693
#, no-wrap
msgid "`Keylookup`"
msgstr ""

#. FIXME Shouldn't it be Keylookup ?!
#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:699
#, no-wrap
msgid ""
"*`Keylookup`* module is used to *allow keypresses to control behaviors*\n"
"such as jogging.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:702
msgid ""
"It's used inside the handler file to facilitate creation of *key bindings* "
"such as keyboard jogging etc."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-libraries.adoc:705
#, no-wrap
msgid "Import `Keylookup` module"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:716
#, no-wrap
msgid "from qtvcp.lib.keybindings import Keylookup\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-libraries.adoc:718
#, no-wrap
msgid "Instantiate `Keylookup` module"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:722
msgid ""
"To instantiate `Keylookup` module* so you can use it, add this Python code "
"to your instantiate section:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:730
#, no-wrap
msgid "KEYBIND = Keylookup()\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-libraries.adoc:732
#, no-wrap
msgid "Add Key Bindings"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:737
#, no-wrap
msgid ""
"`Keylookup` requires code under the `processed_key_event` function\n"
"  to call `KEYBIND.call()`. +\n"
"  Most handler files already have this code.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:740
msgid ""
"In the handler file, under the _initialized function_ use this general "
"syntax to *create keybindings*:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:744
#, no-wrap
msgid "KEYBIND.add_call(\"DEFINED_KEY\",\"FUNCTION TO CALL\", USER DATA)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:747
msgid "Here we add a keybinding for `F10`, `F11` and `F12`:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:761
#, no-wrap
msgid ""
"# at this point:\n"
"# the widgets are instantiated.\n"
"# the HAL pins are built but HAL is not set ready\n"
"def initialized__(self):\n"
"    KEYBIND.add_call('Key_F10','on_keycall_F10',None)\n"
"    KEYBIND.add_call('Key_F11','on_keycall_override',10)\n"
"    KEYBIND.add_call('Key_F12','on_keycall_override',20)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:765
#, no-wrap
msgid ""
"And then we need to *add the functions that get called*.\n"
"In the handler file, under the `KEY BINDING CALLS` section, add this:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:771
#, no-wrap
msgid ""
"#####################\n"
"# KEY BINDING CALLS #\n"
"#####################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:775
#, no-wrap
msgid ""
"def on_keycall_F12(self,event,state,shift,cntrl,value):\n"
"    if state:\n"
"        print('F12 pressed')\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:779
#, no-wrap
msgid ""
"def on_keycall_override(self,event,state,shift,cntrl,value):\n"
"    if state:\n"
"        print('value = {}'.format(value))\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:781
#, no-wrap
msgid "`Messages`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:784
#, no-wrap
msgid "*`Messages`* module is used to *display pop up dialog messages on the screen*.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:786
msgid "These messages are:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:788
msgid "_defined in the INI file under the `[DISPLAY]` heading_, and"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:789
msgid "_controlled by HAL pins_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:792
#, no-wrap
msgid "*`_BOLDTEXT`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:794
msgid "Generally is a title."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:794
#, no-wrap
msgid "*`_TEXT`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:796
msgid "Text below title, and usually longer."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:796
#, no-wrap
msgid "*`_DETAIL`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:798
msgid "Text hidden unless clicked on."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:798
#, no-wrap
msgid "*`_PINNAME`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:800
msgid "Basename of the HAL pin(s)."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:800
#, no-wrap
msgid "*`_TYPE`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:802
msgid "Specifies whether it is a:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:804
#, no-wrap
msgid ""
"*Status message* - shown in the _status bar and the notify dialog_. +\n"
"Requires no user intervention.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:806
#, no-wrap
msgid ""
"*OK message* - _requiring the user to click OK to close the dialog_. +\n"
"OK messages have _two HAL pins_:\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:807
#, no-wrap
msgid "One HAL pin to launch the dialog, and\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:808
#, no-wrap
msgid "One to signify it's waiting for response.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:811
#, no-wrap
msgid ""
"*Yes/No message* - _requiring the user to select yes or no buttons to close\n"
"the dialog_. +\n"
"Yes/No messages have _three hal pins_:\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:812
#, no-wrap
msgid "One to show the dialog,\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:813
#, no-wrap
msgid "One for waiting, and\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:814
#, no-wrap
msgid "one for the answer.\n"
msgstr ""

#. FIXME Messages: means STATUS messages will be generated each
#.   time a focus_overlay is called or an alert sound emitted ?
#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:819
msgid ""
"By default it will send `STATUS` messages for `focus_overlay` and alert "
"sound. +"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:826
msgid ""
"Here are sample INI message definition code blocks that would be found under "
"the `[DISPLAY]` heading:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:828
msgid "Status bar and desktop notify pop up message:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:836
#, no-wrap
msgid ""
"MESSAGE_BOLDTEXT = NONE\n"
"MESSAGE_TEXT = This is a statusbar test\n"
"MESSAGE_DETAILS = STATUS DETAILS\n"
"MESSAGE_TYPE = status\n"
"MESSAGE_PINNAME = statustest\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:839
msgid "Pop up dialog asking a Yes/No question:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:847
#, no-wrap
msgid ""
"MESSAGE_BOLDTEXT = NONE\n"
"MESSAGE_TEXT = This is a yes no dialog test\n"
"MESSAGE_DETAILS = Y/N DETAILS\n"
"MESSAGE_TYPE = yesnodialog\n"
"MESSAGE_PINNAME = yndialogtest\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:850
msgid ""
"Pop up dialog asking an OK answer + Status bar and desktop notification:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:858
#, no-wrap
msgid ""
"MESSAGE_BOLDTEXT = This is the short text\n"
"MESSAGE_TEXT = This is the longer text of the both type test. It can be longer then the status bar text\n"
"MESSAGE_DETAILS = BOTH DETAILS\n"
"MESSAGE_TYPE = okdialog status\n"
"MESSAGE_PINNAME = bothtest\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:861
msgid "The `ScreenOptions` widget can automatically set up the message system."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:862
#, no-wrap
msgid "`Notify`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:866
#, no-wrap
msgid ""
"*`Notify`* module is used to *send messages that are integrated into the\n"
"desktop*.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:868
msgid "It uses the `pynotify` library."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:874
#, no-wrap
msgid ""
"Ubuntu/Mint does not follow the standard so you can't set how long the message stays up for.\n"
"I suggest fixing this with the `notify-osd` package available from https://launchpad.net/~leolik/+archive/leolik?field.series_filter=lucid[this PPA] (DISCONTINUED due to move of Ubuntu to Gnome)."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:879
#, no-wrap
msgid ""
"Notify _keeps a list of all the alarm messages since starting_ in *`self.alarmpage`*.\n"
"If you click _'Show all messages'_ in the notify popup, it will print them to the terminal."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:881
msgid "The `ScreenOptions` widget can automatically set up the notify system."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:883
msgid "Typically `STATUS` _messages_ are used to sent notify messages. +"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:887
msgid "You can set the:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:888
#, no-wrap
msgid "*`title`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:890
msgid "Notification message title text."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:890
#, no-wrap
msgid "*`message`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:892
msgid "Notification message content text."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:892
#, no-wrap
msgid "*`icon`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:894
msgid "Notification message icon."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:894
#, no-wrap
msgid "*`timeout`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:896
msgid "How long the message stays up for."
msgstr ""

#. TODO Notify: Usage
#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:899
#, no-wrap
msgid "`Preferences`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:903
#, no-wrap
msgid ""
"*`Preferences`* module allows one to *load and save preference data\n"
"permanently to storage media*.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:905
msgid ""
"The `ScreenOptions` widget can automatically set up the preference system."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:912
#, no-wrap
msgid ""
"QtVCP searches for the `ScreenOptions` widget first and, if found, calls *`+_pref_init()+`*.\n"
"This will _create the preferences object_ and return it to QtVCP to pass to all the widgets and add it to the window object attributes.\n"
"In this case the preferences object would be accessable from the handler file's `initialized_` method as *`self.w.PREFS_`*."
msgstr ""

#. FIXME Global or per widget prefs file ?
#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:916
msgid ""
"Also all widgets can have access to a specific preferences file at "
"initialization time."
msgstr ""

#.  FIXME Preference file vs preference system ?
#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:919
msgid ""
"The `ScreenOptions` widget can automatically set up the preference file."
msgstr ""

#. FIXME So ScreenOptions set prefs are automatically saved and loaded to/from prefs file(s) ?
#. TODO: Preferences: Usage
#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:924
#, no-wrap
msgid "`Player`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:927
msgid "This module *allows playing sounds using Gstreamer, beep and Espeak*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:929
msgid "It can:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:931
#, no-wrap
msgid "*play sound/music files* using _Gstreamer_ (non blocking),\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:932
#, no-wrap
msgid "*play sounds* using the `beep` library (currently blocks while beeping),\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:933
#, no-wrap
msgid "*speak words* using the `espeak` library (non blocking while speaking).\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:935
msgid ""
"There are _default alert sounds_ using Mint or FreeDesktop default sounds."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:937
msgid "You can play arbitrary sounds or even songs by specifying the path."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:939
msgid "`STATUS` has _messages to control `Player` module_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:941
msgid "The `ScreenOptions` widget can automatically set up the audio system."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-libraries.adoc:942
#, no-wrap
msgid "Sounds"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-libraries.adoc:944
#, no-wrap
msgid "Alerts"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:946
msgid "There are default *alerts* to choose from:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:948 src/gui/qtvcp-widgets.adoc:1599
msgid "`ERROR`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:949 src/gui/qtvcp-widgets.adoc:1600
msgid "`READY`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:950 src/gui/qtvcp-widgets.adoc:1602
msgid "`ATTENTION`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:951 src/gui/qtvcp-widgets.adoc:1603
msgid "`RING`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:952 src/gui/qtvcp-widgets.adoc:1601
msgid "`DONE`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:953 src/gui/qtvcp-widgets.adoc:1604
msgid "`LOGIN`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:954 src/gui/qtvcp-widgets.adoc:1605
msgid "`LOGOUT`"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-libraries.adoc:955
#, no-wrap
msgid "Beeps"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:957
msgid "There are three *beeps*:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:959 src/gui/qtvcp-widgets.adoc:1620
msgid "`BEEP_RING`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:960 src/gui/qtvcp-widgets.adoc:1621
msgid "`BEEP_START`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:961 src/gui/qtvcp-widgets.adoc:1619
msgid "`BEEP`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:966
#, no-wrap
msgid ""
"*Import `Player` module* +\n"
"Add this Python code to your import section:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:974
#, no-wrap
msgid "from qtvcp.lib.audio_player import Player\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:978
#, no-wrap
msgid ""
"*Instantiate `Player` module* +\n"
"Add this Python code to your instantiated section:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:987
#, no-wrap
msgid ""
"SOUND = Player()\n"
"SOUND._register_messages()\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:992
#, no-wrap
msgid ""
"*`_register_messages()`* function connects the audio player to the\n"
"`STATUS` library so sounds can be played with the `STATUS` message\n"
"system.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:997
msgid "To play sounds uppon `STATUS` messages, use these general syntaxes:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:1004
#, no-wrap
msgid ""
"STATUS.emit('play-alert','LOGOUT')\n"
"STATUS.emit('play-alert','BEEP')\n"
"STATUS.emit('play-alert','SPEAK This is a test screen for Q t V C P')\n"
"STATUS.emit('play-sound', 'PATH TO SOUND')\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1009
msgid ""
"This library allows you to *use `STATUS` messages to launch a virtual "
"keyboard*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1013
msgid ""
"It uses https://launchpad.net/onboard[`Onboard`] or https://git.yoctoproject."
"org/matchbox-keyboard/[`Matchbox`] libraries for the keyboard."
msgstr ""

#. TODO Virtual Keyboard: usage
#. TODO Virtual Keyboard: What about other VKB alternatives like:
#.   * kvkbd https://github.com/KDE/kvkbd
#.   * Florence http://florence.sourceforge.net/
#.   * Maliit https://maliit.github.io/, https://github.com/maliit/keyboard
#.     which seems to have interesting contextual features.
#. TODO VKB: Usage
#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:1024
#, no-wrap
msgid "Toolbar Actions"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1028
msgid ""
"This library supplies *prebuilt submenus and actions for toolbar menus and "
"toolbar buttons*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1030
msgid "Toolbuttons, menu and toolbar menus are:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1032
msgid "_built in Qt Designer_, and"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1033
msgid "_assigned actions/submenus in the handler file_."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-libraries.adoc:1034 src/gui/qtvcp-widgets.adoc:506
#, no-wrap
msgid "Actions"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1036
#, no-wrap
msgid "*`estop`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1037
#, no-wrap
msgid "*`power`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1038
#, no-wrap
msgid "*`load`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1039
#, no-wrap
msgid "*`reload`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1040
#, no-wrap
msgid "*`gcode_properties`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1041 src/gui/qtvcp-widgets.adoc:515
#, no-wrap
msgid "*`run`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1042 src/gui/qtvcp-widgets.adoc:521
#, no-wrap
msgid "*`pause`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1043 src/gui/qtvcp-widgets.adoc:520
#, no-wrap
msgid "*`abort`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1044
#, no-wrap
msgid "*`block_delete`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1045
#, no-wrap
msgid "*`optional_stop`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1046
#, no-wrap
msgid "*`touchoffworkplace`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1047
#, no-wrap
msgid "*`touchofffixture`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1048
#, no-wrap
msgid "*`runfromline`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1049
#, no-wrap
msgid "*`load_calibration`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1050
#, no-wrap
msgid "*`load_halmeter`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1051
#, no-wrap
msgid "*`load_halshow`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1052
#, no-wrap
msgid "*`load_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1053
#, no-wrap
msgid "*`load_halscope`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1054
#, no-wrap
msgid "*`about`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1055
#, no-wrap
msgid "*`zoom_in`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1056
#, no-wrap
msgid "*`zoom_out`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1057
#, no-wrap
msgid "*`view_x`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1058
#, no-wrap
msgid "*`view_y`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1059
#, no-wrap
msgid "*`view_y2`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1060
#, no-wrap
msgid "*`view_z`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1061
#, no-wrap
msgid "*`view_z2`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1062
#, no-wrap
msgid "*`view_p`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1063
#, no-wrap
msgid "*`view_clear`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1064
#, no-wrap
msgid "*`show_offsets`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1065
#, no-wrap
msgid "*`quit`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1066
#, no-wrap
msgid "*`system_shutdown`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1067
#, no-wrap
msgid "*`tooloffsetdialog`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1068
#, no-wrap
msgid "*`originoffsetdialog`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1069
#, no-wrap
msgid "*`calculatordialog`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1070
#, no-wrap
msgid "*`alphamode`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1071
#, no-wrap
msgid "*`inhibit_selection`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1072
#, no-wrap
msgid "*`show_dimensions`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1074
msgid "Toggles dimensions display."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-libraries.adoc:1075
#, no-wrap
msgid "Submenus"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1077
#, no-wrap
msgid "*`recent_submenu`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1078
#, no-wrap
msgid "*`home_submenu`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1079
#, no-wrap
msgid "*`unhome_submenu`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1080
#, no-wrap
msgid "*`zero_systems_submenu`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1081
#, no-wrap
msgid "*`grid_size_submenu`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1083
msgid "Menu to set graphic grid size"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1087
msgid ""
"Here is the typical code to add to the relevant _handler file_ sections:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:1099
#, no-wrap
msgid ""
"###########################################\n"
"# **** instantiate libraries section **** #\n"
"###########################################\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1106
msgid "Assigning Tool Actions To Toolbar Buttons"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:1123
#, no-wrap
msgid ""
"# At this point:\n"
"#   * the widgets are instantiated,\n"
"#   * the HAL pins are built but HAL is not set ready.\n"
"def initialized__(self):\n"
"    TOOLBAR.configure_submenu(self.w.menuHoming, 'home_submenu')\n"
"    TOOLBAR.configure_action(self.w.actionEstop, 'estop')\n"
"    TOOLBAR.configure_action(self.w.actionQuit, 'quit', lambda d:self.w.close())\n"
"    TOOLBAR.configure_action(self.w.actionEdit, 'edit', self.edit)\n"
"    # Add a custom function\n"
"    TOOLBAR.configure_action(self.w.actionMyFunction, 'my_Function', self.my_function)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1126
msgid "Add a custom toolbar function:"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-libraries.adoc:1137
#, no-wrap
msgid "Qt Vismach Machine Graphics library"
msgstr ""

#. FIXME Remove from here and merge in qtvcp-vismach.adoc
#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1143
#, no-wrap
msgid ""
"*`Qt_vismach`* is a _set of Python functions_ that can be\n"
"*used to create and animate models of machines*.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1145
msgid "_Vismach_:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1147
msgid "_displays the model_ in a *3D viewport*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1148
msgid "_animates the model parts_ as the values of associated HAL pins change."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1151
msgid ""
"This is the _Qt based version_ of the library, there is also a tkinter "
"version available in LinuxCNC."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1153
msgid "The Qt version _allows embedding the simulation in other screens_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-libraries.adoc:1154
#, no-wrap
msgid "Builtin Samples"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1157
msgid "There are included _sample panels_ in QtVCP for:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1159
msgid "a 3-Axis XYZ mill,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1160
msgid "a 5-Axis gantry mill,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1161
msgid "a 3-Axis mill with an A axis/spindle, and"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1162
msgid "a scara mill."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1166
#, no-wrap
msgid ""
"Most of these samples, if loaded after a running LinuxCNC configuration (including non-QtVCP based screens), will react to machine movement.\n"
"Some require HAL pins to be connected for movement."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1168
msgid "From a terminal (pick one):"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:1174
#, no-wrap
msgid ""
"qtvcp vismach_mill_xyz\n"
"qtvcp vismach_scara\n"
"qtvcp vismach_millturn\n"
"qtvcp vismach_5axis_gantry\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-libraries.adoc:1176
#, no-wrap
msgid "Primitives Library"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1179
msgid "Provides the *basic building blocks of a simulated machine*."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1180
#, no-wrap
msgid "*`Collection`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1182
msgid "A `collection` is an *object of individual machine parts*."
msgstr ""

#. TODO Can't a collection hold other collections ?
#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1185
msgid ""
"This holds a *hierarchical list* of primitive shapes or _STL objects_ that "
"operations can be applied to."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1187
#, no-wrap
msgid "*`Translate`*"
msgstr ""

#. TODO Not on primitives ?
#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1190
msgid ""
"This object will perform an *OpenGL translation* calculation _on a "
"Collection object_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1194
msgid ""
"Translation refers to _moving an object in straight line_ to a different "
"position on screen."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1195
#, no-wrap
msgid "*`Scale`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1197
msgid ""
"This object will perform an *OpenGL scale* function _on a collection object_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1198
#, no-wrap
msgid "*`HalTranslate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1201
msgid ""
"This object will perform an *OpenGL translation* calculation _on a "
"Collection object_, *offset by the HAL pin value*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1204
msgid ""
"Translation refers to moving an object in straight line to a different "
"position on screen."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1206 src/gui/qtvcp-libraries.adoc:1220
msgid "You can either:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1208
msgid "_read a pin from a component owned by the Vismach object_, or"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1210 src/gui/qtvcp-libraries.adoc:1224
msgid ""
"_read a HAL system pin directly_ if the component argument is set to `None`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1211
#, no-wrap
msgid "*`Rotate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1214
msgid ""
"This object will perform an *OpenGL rotation* calculation _on a Collection "
"object_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1215
#, no-wrap
msgid "*`HalRotate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1218
msgid ""
"This object will perform an *OpenGL rotation* calculation _on a Collection "
"object_, *offset by the HAL pin value*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1222
msgid "_read a pin from a component owned by the vismach_ object, or"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1225
#, no-wrap
msgid "*`HalToolCylinder`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1228
msgid ""
"This object will build a _CylinderZ object_ that will *change size and "
"length based on loaded tool dimensition* (from the tool table) +"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1230
msgid ""
"It reads the `halui.tool.diameter` and `motion.tooloffset.z` _HAL pins_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1232
msgid "Example from mill_xyz sample:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:1241
#, no-wrap
msgid ""
"toolshape = CylinderZ(0)\n"
"toolshape = Color([1, .5, .5, .5], [toolshape])\n"
"tool = Collection([\n"
"    Translate([HalTranslate([tooltip], None, \"motion.tooloffset.z\", 0, 0, -MODEL_SCALING)], 0, 0, 0),\n"
"    HalToolCylinder(toolshape)\n"
"])\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1243
#, no-wrap
msgid "*`Track`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1246
#, no-wrap
msgid ""
"*Move and rotate an object to point from one `capture()` 'd coordinate\n"
"system to another*.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1248
msgid "Base object to _hold coordinates for primitive shapes_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1249
#, no-wrap
msgid "*`CylinderX`, `CylinderY`, `CylinderZ`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1252
#, no-wrap
msgid ""
"*Build a cylinder on the X, Y or Z axis* by giving _endpoint_ (X, Y, or Z)\n"
"and _radii_ coordinates.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1253
#, no-wrap
msgid "*`Sphere`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1255
#, no-wrap
msgid "*Build a sphere* from _center_ and _radius_ coordinates.\n"
msgstr ""

#. FIXME Vismach: Triangle: Don't coordinates need 2 axes and not be limited to Z !?
#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1257
#, no-wrap
msgid "*`TriangleXY`, `TriangleXZ`, `TriangleYZ`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1260
#, no-wrap
msgid ""
"*Build a triangle* in the _specified plane_ by giving the\n"
"_corners Z coordinates_ for each side\n"
msgstr ""

#. FIXME Vismach: Arc: how to specify ?
#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1262
#, no-wrap
msgid "*`ArcX`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1264
#, no-wrap
msgid "*Build an arc* by specifying\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1265
#, no-wrap
msgid "*`Box`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1267
#, no-wrap
msgid "*Build a box* specified by the _6 vertex coordinates_.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1268
#, no-wrap
msgid "*`BoxCentered`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1271
#, no-wrap
msgid ""
"*Build a box centered on origin* by specifying the _width in X and Y_,\n"
"and the _height in Z_.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1272
#, no-wrap
msgid "*`BoxCenteredXY`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1276
#, no-wrap
msgid ""
"*Build a box centered in X and Y, and running from Z=0*, by specifying\n"
"the _width in X and Y_, and running up or down to the specified\n"
"_height in Z_.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1277
#, no-wrap
msgid "*`Capture`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1279
#, no-wrap
msgid "*Capture current transformation matrix of a collection*.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1282
#, no-wrap
msgid ""
"This _transforms from the current coordinate system to the\n"
"  viewport system_, NOT to the world system.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1283
#, no-wrap
msgid "*`Hud`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1285
#, no-wrap
msgid "*Heads up display* draws a _semi-transparent text box_.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1287
msgid "Use:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1289
msgid "`HUD.strs` for things that must be _updated constantly_,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1290
msgid "`HUD.show(\"stuff\")` for one-shot things like error messages."
msgstr ""

#. FIXME: Vismach: Color: can it be applied to a primitive ?
#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1292
#, no-wrap
msgid "*`Color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1294
#, no-wrap
msgid "*Applies a color* to the _parts of a collection_.\n"
msgstr ""

#. FIXME: Vismach: Ascii(STL|OJ): is a "part" a collection ?
#. type: Labeled list
#: src/gui/qtvcp-libraries.adoc:1296
#, no-wrap
msgid "*`AsciiSTL`, `AsciiOBJ`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1298
#, no-wrap
msgid "*Loads a STL or OBJ data file* as a _Vismach part_.\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-libraries.adoc:1301
#, no-wrap
msgid "Import a simulation"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1304
msgid ""
"Here is how one might import the XYZ_mill simulation in a QtVCP panel or "
"screen handler file."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:1312
#, no-wrap
msgid "import mill_xyz as MILL\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-libraries.adoc:1314
#, no-wrap
msgid "Instantiate and use the simulation widget"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1317
msgid ""
"Instantiate the simulation widget and add it to the screen's main layout:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:1323
#, no-wrap
msgid ""
"    ##########################################\n"
"    # Special Functions called from QtVCP\n"
"    ##########################################\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-libraries.adoc:1330
#, no-wrap
msgid ""
"    # At this point:\n"
"    #   * the widgets are instantiated,\n"
"    #   * the HAL pins are built but HAL is not set ready.\n"
"    def initialized__(self):\n"
"        machine = MILL.Window()\n"
"        self.w.mainLayout.addWidget(machine)\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-libraries.adoc:1332
#, no-wrap
msgid "More Information"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-libraries.adoc:1336
msgid ""
"More information on how to build a custom machine simulation in the <<cha:"
"qtvcp:vismach,Qt Vismach>> chapter."
msgstr ""

#. type: Title =
#: src/gui/qtvcp-vcp-panels.adoc:5
#, no-wrap
msgid "QtVCP Virtual Control Panels"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:14
msgid "QtVCP can be used to *create control panels* that interface with _HAL_."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vcp-panels.adoc:16
#, no-wrap
msgid "Builtin Virtual Control Panels"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:21
msgid "In a terminal type `qtvcp list` to see a list."
msgstr ""

#. TODO Add list output
#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:25
#, no-wrap
msgid "`copy`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:29
msgid ""
"Used for *copying QtVCP's builtin Screens/VCP Panels/QtVismach code to a "
"folder* so one can _customize_ it."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:31
msgid "In a terminal run:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vcp-panels.adoc:35
#, no-wrap
msgid "qtvcp copy\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:37
#, no-wrap
msgid "QtVCP `copy` Dialog - Screen, VCP Panel or QtVismach Code Copy Panel"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:38
#, no-wrap
msgid "QtVCP copy Dialog - Screen, Panel or Vismach Code Copy Panel"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-vcp-panels.adoc:38
#, no-wrap
msgid "images/qtvcp_copy_dialog.png"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:41
#, no-wrap
msgid "`test_dial`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:44
msgid "This panel has a *dial that adjusts S32 and Float HAL output pins*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:45
msgid "The dial's range can be adjusted from a drop down menu."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:46
msgid "The output can be scaled with the `spinbox`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:48
msgid ""
"A `combobox` can be used to automatically select and connect to a signal."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vcp-panels.adoc:52
#, no-wrap
msgid "loadusr qtvcp test_dial\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:54
#, no-wrap
msgid "QtVCP `test_dial` Panel - Test Dial VCP"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:55
#, no-wrap
msgid "QtVCP test_dial Panel - Test Dial VCP"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-vcp-panels.adoc:55
#, no-wrap
msgid "images/qtvcp_test_dial.png"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:57
#, no-wrap
msgid "test_button"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:60
msgid "This panel has a *button that will set a HAL pin*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:61
msgid "The button can be selected as a _momentary_ or a _toggle_ button."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:62
msgid "The button's _indicator color_ can be adjusted from a drop down menu."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:63
msgid "You can add more buttons from the drop down menu."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:64
msgid "You can load a Halmeter from the drop down menu."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:65
msgid "You can load a test LED from the drop down menu."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:66
msgid "The button can be detached from the main windows."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:68
msgid "Here is how to load `test_button` from a HAL script:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vcp-panels.adoc:73
#, no-wrap
msgid ""
"loadusr qtvcp test_button\n"
"loadusr qtvcp -o 4 test_button\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:77
#, no-wrap
msgid ""
"The `-o` switch sets how many buttons the panel starts with.\n"
"If loading directly from a terminal omit the `loadusr`."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:78
#, no-wrap
msgid "QtVCP `test_button` - Test Button VCP"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:79
#, no-wrap
msgid "QtVCP test_button - Test Button VCP"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-vcp-panels.adoc:79
#, no-wrap
msgid "images/qtvcp_test_button.png"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:82
#, no-wrap
msgid "`test_led`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:85
msgid ""
"This panel has an *LED that can selected to watch HAL bit pins/signals*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:86
msgid "The LED's color can be adjusted from a drop down menu."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:87
msgid "The text box and state can be output as speech if sound is selected."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:89
msgid ""
"A `combobox` can be used to automatically select and connect to a pin/signal."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:90
msgid "You can add more LEDs from the drop down menu."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:91
msgid "The LED can be detached from the main windows."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:93
msgid "Here is how to load `test_led` from a HAL script:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vcp-panels.adoc:98
#, no-wrap
msgid ""
"loadusr qtvcp test_led\n"
"loadusr qtvcp -o 4 test_led\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:102
#, no-wrap
msgid ""
"The `-o` switch sets how many LEDs the panel starts with.\n"
"If loading directly from a terminal omit the 'loadusr'."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:103
#, no-wrap
msgid "QtVCP `test_dial` Panel - Test LED VCP"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:104
#, no-wrap
msgid "QtVCP test_dial Panel - Test LED VCP"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-vcp-panels.adoc:104
#, no-wrap
msgid "images/qtvcp_test_led.png"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:107
#, no-wrap
msgid "`test_panel`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:111
#, no-wrap
msgid ""
"*Collection of useful widgets for testing HAL component*, including\n"
"speech of LED state.\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:117
#, no-wrap
msgid "QtVCP `test_panel` - HAL Component Testing Panel"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:118
#, no-wrap
msgid "QtVCP test_panel - HAL Component Testing Panel"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:121
#, no-wrap
msgid "`cam_align`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:124
msgid "A *camera display widget for rotational alignment*."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:125
#, no-wrap
msgid "QtVCP `cam_align` Panel - Camera Based Alignment Panel"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:126
#, no-wrap
msgid "QtVCP cam_align Panel - Camera Based Alignment Panel"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:129
#, no-wrap
msgid "`sim_panel`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:133
#, no-wrap
msgid ""
"Small control panel to *simulate MPG jogging controls etc*.\n"
"For simulated configurations"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vcp-panels.adoc:137
#, no-wrap
msgid "loadusr qtvcp sim_panel\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:139
#, no-wrap
msgid "QtVCP `sim_panel` - Simulated Controls Panel For Screen Testing."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:140
#, no-wrap
msgid "QtVCP sim_panel - Simulated Controls Panel For Screen Testing"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:143
#, no-wrap
msgid "`tool_dialog`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:146
#, no-wrap
msgid "*Manual tool change dialog* that gives tool description.\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vcp-panels.adoc:150
#, no-wrap
msgid "loadusr -Wn tool_dialog qtvcp -o speak_on -o audio_on tool_dialog\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:153 src/hal/tools.adoc:243
#, no-wrap
msgid "Options:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:156
msgid ""
"`-o notify_on` - _use desktop notify_ dialogs instead of QtVCP native ones."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:157
msgid "`-o audio_on` - _play sound on tool change_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:158
msgid "`-o speak_on` - _speak announcement of tool change_"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:159
#, no-wrap
msgid "QtVCP `tool_dialog` - Manual Tool Change Dialog"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:160
#, no-wrap
msgid "QtVCP tool_dialog - Manual Tool Change Dialog"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-vcp-panels.adoc:160 src/gui/qtvcp-widgets.adoc:2476
#, no-wrap
msgid "images/qtvcp_toolChange.png"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vcp-panels.adoc:164
#, no-wrap
msgid "`vismach` 3D Simulation Panels"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:166
msgid "These panels are prebuilt simulation of common machine types."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:168
msgid "These are also embed-able in other screens such as AXIS or GMOCCAPY."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:169
#, no-wrap
msgid "QtVCP `vismach_mill_xyz`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:172
msgid "3D OpenGL view of a _3-Axis milling machine_."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vcp-panels.adoc:176
#, no-wrap
msgid "loadusr qtvcp vismach_mill_xyz\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:178
#, no-wrap
msgid "QtVCP `vismach_mill_xyz` - 3-Axis Mill 3D View Panel"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:179
#, no-wrap
msgid "QtVCP vismach_mill_xyz - 3-Axis Mill 3D View Panel"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:181
#, no-wrap
msgid "QtVCP `vismach_scara`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:184
msgid "3D OpenGL view of a _SCARA based milling machine_."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vcp-panels.adoc:188
#, no-wrap
msgid "loadusr qtvcp vismach_scara\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:190
#, no-wrap
msgid "QtVCP `vismach_scara` - SCARA Mill 3D View Panel"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:191
#, no-wrap
msgid "QtVCP vismach_scara - SCARA Mill 3D View Panel"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-vcp-panels.adoc:191
#, no-wrap
msgid "images/qtvismach_scara.png"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:193
#, no-wrap
msgid "QtVCP `vismach_millturn`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:196
msgid "3D OpenGL view of a _3-Axis milling machine with an A axis/spindle_."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vcp-panels.adoc:200
#, no-wrap
msgid "loadusr qtvcp vismach_millturn\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:202
#, no-wrap
msgid "QtVCP `vismach_millturn` - 4 Axis MillTurn 3D View Panel"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:203
#, no-wrap
msgid "QtVCP vismach_millturn - 4 Axis MillTurn 3D View Panel"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-vcp-panels.adoc:203
#, no-wrap
msgid "images/qtvismach_millturn.png"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:205
#, no-wrap
msgid "QtVCP `vismach_mill_5axis_gantry`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:208
msgid "3D OpenGL view of a _5-Axis gantry type milling machine_."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vcp-panels.adoc:212
#, no-wrap
msgid "loadusr qtvcp vismach_mill_5axis_gantry\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:214
#, no-wrap
msgid "QtVCP `vismach_mill_5axis_gantry` - 5-AxIs Gantry Mill 3D View Panel"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:215
#, no-wrap
msgid "QtVCP vismach_mill_5axis_gantry - 5-Axis Gantry Mill 3D View Panel"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-vcp-panels.adoc:215
#, no-wrap
msgid "images/qtvismach_5axis_gantry.png"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vcp-panels.adoc:217
#, no-wrap
msgid "QtVCP `vismach_fanuc_200f`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vcp-panels.adoc:220
msgid "3D openGL view of a _6 joint robotic arm_."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vcp-panels.adoc:224
#, no-wrap
msgid "loadusr qtvcp vismach_fanuc_200f\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-vcp-panels.adoc:226
#, no-wrap
msgid "QtVCP `vismach_fanuc_200f` - 6 Joint Robotic Arm"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vcp-panels.adoc:227
#, no-wrap
msgid "QtVCP vismach_fanuc_200f - 6 Joint Robotic Arm"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-vcp-panels.adoc:227
#, no-wrap
msgid "images/qtvismach_fanuc_200f.png"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vcp-panels.adoc:231
#, no-wrap
msgid "Custom Virtual Control Panels"
msgstr ""

#. type: Title =
#: src/gui/qtvcp-vismach.adoc:5
#, no-wrap
msgid "QtVismach"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:9
#, no-wrap
msgid ""
"*Vismach* is a set of *Python functions that can be used to create and\n"
"animate models of machines*.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:11
msgid ""
"This chapter is about the Qt embedded version of <<cha:vismach,Vismach>>."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:17
msgid ""
"Vismach displays the model in a *3D viewport* and the *model parts are "
"animated as the values of associated HAL pins change*."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-vismach.adoc:18 src/gui/qtvcp-vismach.adoc:19
#, no-wrap
msgid "QtVismach 3D Viewport"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:22
msgid "The Vismach 3D viewport view can be manipulated as follows:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:24
#, no-wrap
msgid "*zoom* by _scroll wheel_\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:25
#, no-wrap
msgid "*pan* by _middle button drag_\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:26
#, no-wrap
msgid "*rotate* by _right-button drag_\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:27
#, no-wrap
msgid "*tilt* by _left button drag_\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:30
msgid ""
"A *Vismach model* takes the form of a _Python script_ and can use standard "
"Python syntax."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:34
msgid ""
"This means that there is more than one way to lay out the script, but in the "
"examples given in this document the simplest and most basic of them will be "
"used."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:36
msgid "The basic sequence in creating the Vismach model is:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:38
msgid "Create the parts"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:39
msgid "Define how they move"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:40
msgid "Assemble into movement groups"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vismach.adoc:42
#, no-wrap
msgid "Hierarchy of Machine Design"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:45
msgid "The model follows *logical tree design*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:49
msgid ""
"Picture the tree, with root/trunk, branches and smaller branches off it.  If "
"you move the larger branch, smaller branches will move with it, but if you "
"move smaller branch larger will not."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:51
msgid "_Machine design follows that conceptual design_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:53
msgid "Taking the mill shown in the 3D Viewport picture above for example:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:55
msgid "if you move X, it can move on its own,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:57
msgid ""
"but if you move Y, it will also move X assembly, as it is attached to Y "
"assembly."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:59
msgid "So for this machine, tree looks like this:"
msgstr ""

#. FIXME Shouldn't yassembly be a branch of base and zassembly a branch of column ?
#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:99
#, no-wrap
msgid ""
"model\n"
"  |\n"
"  |---frame\n"
"  |     |\n"
"  |     |---base\n"
"  |     |\n"
"  |     |---column\n"
"  |     |\n"
"  |     |---top\n"
"  |\n"
"  |---yassembly\n"
"  |      |\n"
"  |      |---xassembly\n"
"  |      |      |\n"
"  |      |      |---xbase\n"
"  |      |      |\n"
"  |      |      |---work\n"
"  |      |\n"
"  |      |---ybase\n"
"  |\n"
"  |---zassembly\n"
"          |\n"
"          |---zframe\n"
"          |     |\n"
"          |     |---zbody\n"
"          |     |\n"
"          |     |---spindle\n"
"          |\n"
"          |---toolassembly\n"
"                    |\n"
"                    |---cat30\n"
"                    |\n"
"                    |---tool\n"
"                         |\n"
"                         |---tooltip\n"
"                         |\n"
"                         |---(tool cylinder function)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:105
msgid ""
"As you can see, _lowest parts must exist first before it can be grouped with "
"others into assembly_.  So you _build upwards_ from lowest point in tree and "
"assemble them together."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:109
msgid ""
"Same is applicable for any design of machine: look at machine arm example "
"and you will see that it starts with tip and adds to larger part of arm then "
"it finally groups with base."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vismach.adoc:112 src/gui/vismach.adoc:32
#, no-wrap
msgid "Start the script"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:116
msgid ""
"It is useful for testing to include the `#!/usr/bin/env python3` shebang to "
"_allow the file to be run as a script_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:118
msgid "The first thing to do is to _import the required libraries_."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:126
#, no-wrap
msgid ""
"import hal\n"
"import math\n"
"import sys\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:128
#, no-wrap
msgid "from qtvcp.lib.qt_vismach.qt_vismach import *\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vismach.adoc:131
#, no-wrap
msgid "HAL pins."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:135
msgid ""
"Originally the vismach library required creating a component and connecting "
"HAL pins to control the simulation."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:138
msgid ""
"`qt_vismach` can read the HAL system pins directly or if you wish, to use "
"separate HAL pins that you must define in a HAL component:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:145 src/gui/vismach.adoc:64
#, no-wrap
msgid ""
"c = hal.component(\"samplegui\")\n"
"c.newpin(\"joint0\", hal.HAL_FLOAT, hal.HAL_IN)\n"
"c.newpin(\"joint1\", hal.HAL_FLOAT, hal.HAL_IN)\n"
"c.ready()\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vismach.adoc:148 src/gui/vismach.adoc:70
#, no-wrap
msgid "Creating Parts"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vismach.adoc:151
#, no-wrap
msgid "Import STL or OBJ Files"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:154
msgid "It is probably easiest to:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:156
msgid "_create geometry in a CAD package_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:158
msgid ""
"_import into the model script using the `AsciiSTL()` or `AsciiOBJ()` "
"functions_."
msgstr ""

#. FIXME Ascii(STL|OBJ): what's the second arg ?
#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:162
msgid ""
"Both functions can take one of two named arguments, either a _filename_ or "
"_raw data_:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:169
#, no-wrap
msgid ""
"part = AsciiSTL(filename=\"path/to/file.stl\")\n"
"part = AsciiSTL(data=\"solid part1 facet normal ...\")\n"
"part = AsciiOBJ(filename=\"path/to/file.obj\")\n"
"part = AsciiOBJ(data=\"v 0.123 0.234 0.345 1.0 ...\")\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:174
msgid ""
"The parts will be created in the Vismach space in the _same locations as "
"they occupy in the STL or OBJ space_, meaning it may be possible to assemble "
"the model in the CAD package."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vismach.adoc:176
#, no-wrap
msgid "Build from Geometric Primitives"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:180
msgid ""
"Alternatively parts can be _created inside the model script from a range of "
"shape primitives_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:183
msgid ""
"Many shapes are _created at the origin_ and need to be _moved to the "
"required location_ after creation."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:184
#, no-wrap
msgid "*`cylinder = CylinderX(x1, r1, x2, r2)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:185
#, no-wrap
msgid "*`cylinder = CylinderY(y1, r1, y2, r2)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:186
#, no-wrap
msgid "*`cylinder = CylinderZ(z1, r1, z2, r2)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:189
msgid ""
"Creates a _(optionally tapered) cylinder on the given axis_ with the given "
"radii at the given points on the axis."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:189
#, no-wrap
msgid "*`sphere = Sphere(x, y, z, r)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:191
msgid "Creates a _sphere of radius r at (x,y,z)_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:191
#, no-wrap
msgid "*`triangle = TriangleXY(x1, y1, x2, y2, x3, y3, z1, z2)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:192
#, no-wrap
msgid "*`triangle = TriangleXZ(x1, z1, x2, z2, x3, z3, y1, y2)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:193
#, no-wrap
msgid "*`triangle = TriangleYZ(y1, z1, y2, z2, y3, z3, x1, x2)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:197
msgid ""
"Creates a _triangular plate between planes_ defined by the last two values "
"parallel to the specified plane, with vertices given by the three coordinate "
"pairs."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:197
#, no-wrap
msgid "*`arc = ArcX(x1, x2, r1, r2, a1, a2)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:199
msgid "Create an _arc shape_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:199
#, no-wrap
msgid "*`box = Box(x1, y1, z1, x2, y2, z2)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:202
msgid ""
"Creates a _rectangular prism with opposite corners_ at the specified "
"positions and edges parallel to the XYZ axes."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:202
#, no-wrap
msgid "*`box = BoxCentered(xw, yw, zw)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:204
msgid "Creates an xw by yw by zw _box centred on the origin_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:204
#, no-wrap
msgid "*`box = BoxCenteredXY(xw, yw, z)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:206
msgid "Creates a _box ground on WY plane_ of width xw / yw and height z."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:209
msgid ""
"Composite parts may be created by assembling these primitives either at "
"creation time or subsequently:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:216 src/gui/vismach.adoc:121
#, no-wrap
msgid ""
"part1 = Collection([Sphere(100,100,100,50), CylinderX(100,40,150,30)])\n"
"part2 = Box(50,40,75,100,75,100)\n"
"part3 = Collection([part2, TriangleXY(10,10,20,10,15,20,100,101)])\n"
"part4 = Collection([part1, part2])\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vismach.adoc:219
#, no-wrap
msgid "Moving Model Parts"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:222
msgid "Parts may need to be moved in the Vismach space to assemble the model."
msgstr ""

#. FIXME unclear
#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:226
msgid ""
"They may also need to be moved to create the animation as the animation "
"rotation axis is created at the origin (but moves with the Part)."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vismach.adoc:228
#, no-wrap
msgid "Translating Model parts"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:230
#, no-wrap
msgid "*`part1 = Translate([part1], x, y, z)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:232
msgid "Move part1 the specified distances in x, y and z."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vismach.adoc:234
#, no-wrap
msgid "Rotating Model Parts"
msgstr ""

#. FIXME angle unit ?
#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:237
#, no-wrap
msgid "*`part1 = Rotate([part1], theta, x, y, z)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:240
msgid ""
"Rotate the part by angle theta about an axis between the origin and x, y, z."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vismach.adoc:242 src/gui/vismach.adoc:135
#, no-wrap
msgid "Animating Parts"
msgstr ""

#. FIXME 2 or 3 functions ? HalToolCylinder not documented here ?
#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:247
msgid ""
"To *animate the model controlled by the values of HAL pins* there are two "
"functions `HalTranslate`, `HalRotate` and `HalToolCylinder`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:250
msgid ""
"_For parts to move inside an assembly they need to have their HAL motions "
"defined before being assembled with the \"Collection\" command_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:252
msgid "The *rotation axis and translation vector move with the part*:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:254
msgid "as it is moved by the Vismach script during model assembly, or"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:255
msgid "as it moves in response to the HAL pins as the model is animated."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vismach.adoc:257
#, no-wrap
msgid "`HalTranslate`"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:259
#, no-wrap
msgid "*`part = HalTranslate([part], hal_comp, hal_pin, xs, ys, zs)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:260
#, no-wrap
msgid "`part`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:263
#, no-wrap
msgid ""
"A _collection or part_.\n"
"It can be pre-created earlier in the script, or could be created at this point if preferred eg +"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:267
#, no-wrap
msgid "`part1 = HalTranslate([Box(....)], ...)`. +\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:268
#, no-wrap
msgid "`hal_comp`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:271
#, no-wrap
msgid ""
"The _HAL component_ is the next argument.\n"
"In QtVCP if you are reading _system pins_ directly then the component argument is set to `None`. +"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:271
#, no-wrap
msgid "`hal_pin`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:274
#, no-wrap
msgid ""
"The _name of the HAL pin_ that will animate the motion.\n"
"This needs to match an existing HAL pin that describes the joint position such as:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:278
#, no-wrap
msgid "\"joint.2.pos-fb\"\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:282
msgid ""
"Otherwise the component instance would be specified and the pin name of that "
"component would be specified."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:282
#, no-wrap
msgid "`xs, ys, zs`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:288
#, no-wrap
msgid ""
"The _X, Y, Z scales_.\n"
"For a Cartesian machine created at 1:1 scale this would typically be `1,0,0` for a motion in the positive X direction.\n"
"However if the STL file happened to be in cm and the machine was in inches, this could be fixed at this point by using 0.3937 (1cm /2.54in) as the scale."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-vismach.adoc:290
#, no-wrap
msgid "`HalRotate`"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:292
#, no-wrap
msgid "*`part = HalRotate([part], hal_comp, hal_pin, angle_scale, x, y, z)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:296
msgid ""
"This command is similar in its operation to `HalTranslate` except that it is "
"typically necessary to move the part to the origin first to define the axis. "
"+"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:296
#, no-wrap
msgid "`x, y, z`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:301
#, no-wrap
msgid ""
"Defines the _axis of rotation_ from the origin the point of coordinates (x,y,z).\n"
"When the part is moved back away from the origin to its correct location the axis of rotation can be considered to remain \"embedded\" in the part."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:301
#, no-wrap
msgid "`angle_scale`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:303 src/gui/vismach.adoc:172
msgid ""
"_Rotation angles_ are in degrees, so for a rotary joint with a 0-1 scaling "
"you would need to use an angle scale of 360."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vismach.adoc:305
#, no-wrap
msgid "Assembling the model"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:309
msgid ""
"In order for parts to move together they need to be assembled with the "
"*`Collection()` command*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:312
msgid ""
"It is important to *assemble the parts and define their motions in the "
"correct sequence*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:315
msgid ""
"For example to create a moving head milling machine with a rotating spindle "
"and an animated draw bar you would:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:317 src/gui/vismach.adoc:182
msgid "Create the head main body."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:318 src/gui/vismach.adoc:183
msgid "Create the spindle at the origin."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:319 src/gui/vismach.adoc:184
msgid "Define the rotation."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:320 src/gui/vismach.adoc:185
msgid "Move the head to the spindle or spindle to the head."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:321
msgid "Create the draw bar"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:322
msgid "Define the motion of the draw bar"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:323
msgid "Assemble the three parts into a head assembly"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:324 src/gui/vismach.adoc:189
msgid "Define the motion of the head assembly."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:327 src/gui/vismach.adoc:192
msgid ""
"In this example the spindle rotation is indicated by rotation of a set of "
"drive dogs:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:335 src/gui/vismach.adoc:200
#, no-wrap
msgid ""
"#Drive dogs\n"
"dogs = Box(-6,-3,94,6,3,100)\n"
"dogs = Color([1,1,1,1],[dogs])\n"
"dogs = HalRotate([dogs],c,\"spindle\",360,0,0,1)\n"
"dogs = Translate([dogs],-1,49,0)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:341 src/gui/vismach.adoc:206
#, no-wrap
msgid ""
"#Drawbar\n"
"draw = CylinderZ(120,3,125,3)\n"
"draw = Color([1,0,.5,1],[draw])\n"
"draw = Translate([draw],-1,49,0)\n"
"draw = HalTranslate([draw],c,\"drawbar\",0,0,1)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:348 src/gui/vismach.adoc:213
#, no-wrap
msgid ""
"# head/spindle\n"
"head = AsciiSTL(filename=\"./head.stl\")\n"
"head = Color([0.3,0.3,0.3,1],[head])\n"
"head = Translate([head],0,0,4)\n"
"head = Collection([head, tool, dogs, draw])\n"
"head = HalTranslate([head],c,\"Z\",0,0,0.1)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:354 src/gui/vismach.adoc:219
#, no-wrap
msgid ""
"# base\n"
"base = AsciiSTL(filename=\"./base.stl\")\n"
"base = Color([0.5,0.5,0.5,1],[base]) \n"
"# mount head on it\n"
"base = Collection([head, base])\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:358
msgid ""
"Finally a *single collection of all the machine parts, floor and work* (if "
"any) needs to be created."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:361 src/gui/vismach.adoc:226
msgid ""
"For a _serial machine_ each new part will be added to the collection of the "
"previous part."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:363 src/gui/vismach.adoc:227
msgid "For a _parallel machine_ there may be several \"base\" parts."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:366
msgid ""
"Thus, for example, in `scaragui.py` link3 is added to link2, link2 to link1 "
"and link1 to link0, so the final model is created by:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:370 src/gui/vismach.adoc:234
#, no-wrap
msgid "model = Collection([link0, floor, table])\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:373
msgid "Whereas a VMC model with separate parts moving on the base might have"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:377 src/gui/vismach.adoc:241
#, no-wrap
msgid "model = Collection([base, saddle, head, carousel])\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vismach.adoc:380 src/gui/vismach.adoc:243
#, no-wrap
msgid "Other functions"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:382
#, no-wrap
msgid "*`part = Color([_colorspec_], [_part_])`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:386
#, no-wrap
msgid ""
"Sets the _display color of the part_.\n"
"Note that unlike the other functions, the part definition comes second in this case. +"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:386
#, no-wrap
msgid "`_colorspec_`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:388
#, no-wrap
msgid ""
"Three RGB values and opacity.\n"
"For example [1,0,0,0.5] for a 50% opacity red."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:389
#, no-wrap
msgid "*`myhud = Hud()`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:390
#, no-wrap
msgid "*`myhud.show(\"_Mill_XYZ_\")`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:393
msgid ""
"Creates a _heads-up display_ in the Vismach GUI to display items such as "
"axis positions, titles, or messages."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:394
#, no-wrap
msgid "*`part = Capture()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:396
msgid "This sets the current position in the model."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:397
#, no-wrap
msgid "*`main(model, tooltip, work, size=10, hud=myhud, rotation_vectors=None, lat=0, lon=0)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:402
#, no-wrap
msgid ""
"This is the command that makes it all happen, creates the display etc. if invoked directly from Python.\n"
"Usually this file is imported by QtVCP and the `window()` object is instantiated and embedded into another screen."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:402
#, no-wrap
msgid "`_model_`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:403
msgid "Should be a collection that contains all the machine parts."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:403
#, no-wrap
msgid "`_tooltip_` and `_work_`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:407
#, no-wrap
msgid ""
"Need to be created by `Capture()` to visualize their motion in the backplot.\n"
"See `mill_xyz.py` for an example of how to connect the tool tip to a tool and the tool to the model."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:407
#, no-wrap
msgid "`_size_`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:410
#, no-wrap
msgid ""
"Sets the extent of the volume visualized in the initial view.\n"
"hud refers to a head-up display of axis positions."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-vismach.adoc:410
#, no-wrap
msgid "`_rotation_vectors_` or `_lat, lon_`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:414
#, no-wrap
msgid ""
"Can be used to set the original viewpoint.\n"
"It is advisable to do as the default initial viewpoint is rather unhelpfully from immediately overhead."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vismach.adoc:416
#, no-wrap
msgid "Basic structure of a `QtVismach` script"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:423
#, no-wrap
msgid ""
"# imports\n"
"import hal\n"
"from qtvcp.lib.qt_vismach.qt_vismach import *\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:427
#, no-wrap
msgid ""
"# create HAL pins here if needed\n"
"#c = hal.component(\"samplegui\")\n"
"#c.newpin(\"joint0\", hal.HAL_FLOAT, hal.HAL_IN)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:432
#, no-wrap
msgid ""
"# create the floor, tool and work\n"
"floor = Box(-50, -50, -3, 50, 50, 0)\n"
"work = Capture()\n"
"tooltip = Capture()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:438
#, no-wrap
msgid ""
"# Build and assemble the model\n"
"part1 = Collection([Box(-6,-3,94,6,3,100)])\n"
"part1 = Color([1,1,1,1],[part1])\n"
"part1 = HalRotate([part1],None,\"joint.0.pos-fb\",360,0,0,1)\n"
"part1 = Translate([dogs],-1,49,0)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:441
#, no-wrap
msgid ""
"# create a top-level model\n"
"model = Collection([base, saddle, head, carousel])\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:444
#, no-wrap
msgid ""
"# we want to either embed into qtvcp or display directly with PyQt5\n"
"# so build a window to display the model\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:446
#, no-wrap
msgid "class Window(QWidget):\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:452
#, no-wrap
msgid ""
"    def __init__(self):\n"
"        super(Window, self).__init__()\n"
"        self.glWidget = GLWidget()\n"
"        v = self.glWidget\n"
"        v.set_latitudelimits(-180, 180)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:454
#, no-wrap
msgid "        world = Capture()\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:459
#, no-wrap
msgid ""
"        # uncomment if there is a HUD\n"
"        # HUD needs to know where to draw\n"
"        #v.hud = myhud\n"
"        #v.hud.app = v\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:468
#, no-wrap
msgid ""
"        v.model = Collection([model, world])\n"
"        size = 600\n"
"        v.distance = size * 3\n"
"        v.near = size * 0.01\n"
"        v.far = size * 10.0\n"
"        v.tool2view = tooltip\n"
"        v.world2view = world\n"
"        v.work2view = work\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:472
#, no-wrap
msgid ""
"        mainLayout = QHBoxLayout()\n"
"        mainLayout.addWidget(self.glWidget)\n"
"        self.setLayout(mainLayout)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:475
#, no-wrap
msgid ""
"# if you call this file directly from python3, it will display a PyQt5 window\n"
"# good for confirming the parts of the assembly.\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-vismach.adoc:478
#, no-wrap
msgid ""
"if __name__ == '__main__':\n"
"    main(model, tooltip, work, size=600, hud=None, lat=-75, lon=215)\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-vismach.adoc:481
#, no-wrap
msgid "Builtin Vismach Sample Panels"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-vismach.adoc:484
msgid "<<sub:qtvcp:panels:vismach,QtVCP builtin Vismach Panels>>"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:15
#, no-wrap
msgid "*`Qtscreen`* uses _QtVCP widgets_ for LinuxCNC integration.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:18
#, no-wrap
msgid ""
"*Widget* is the general name for the _UI objects_ such as buttons and\n"
"labels in PyQt.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:20
msgid ""
"You are free to use any available *default widgets* in the _Qt Designer_ "
"editor."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:23
msgid ""
"There are also *special widgets* made for LinuxCNC that make integration "
"easier. These are split in two, heading on the right side of the editor:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:25
msgid "One is for *HAL only widgets*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:26
msgid "The other is for *CNC control widgets*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:35
msgid ""
"This description of widget properties can easily be out of date due to "
"further development and lack of people to write docs (a good way to give "
"back to the project).  The definitive descriptions are found by looking in "
"the https://github.com/LinuxCNC/linuxcnc/tree/master/lib/python/qtvcp/"
"widgets[source code]."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-widgets.adoc:38
#, no-wrap
msgid "HAL Only Widgets"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:41
msgid ""
"These widgets usually have _HAL pins_ and *don't react to the machine "
"controller*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:43
#, no-wrap
msgid "`XEmbed` - Program Embedding Widget"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:46
msgid "Allows one to *embed a program into the widget*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:48
msgid "Only programs that utilize the `xembed` protocol will work such as:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:50
msgid "GladeVCP virtual control panels"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:51
msgid "Onboard virtual keyboard"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:52
msgid "QtVCP virtual control panels"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:53
msgid "mplayer video player"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:55
#, no-wrap
msgid "`Slider` - HAL Pin Value Adjusting Widget"
msgstr ""

#. TODO QtVCP slider widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:60
msgid "Allows one to *adjust a HAL pin value using a sliding pointer*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:62
#, no-wrap
msgid "`LED` - Indicator Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:64
#, no-wrap
msgid "QtVCP `LED`: LED Indicator Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:65
#, no-wrap
msgid "QtVCP LED: LED Indicator Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:65
#, no-wrap
msgid "images/qtvcp_ledWidget.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:68
msgid "A *LED like indicator* that optionally follows a HAL pin's logic."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:69 src/gui/qtvcp-widgets.adoc:134
#: src/gui/qtvcp-widgets.adoc:1647 src/gui/qtvcp-widgets.adoc:1734
#, no-wrap
msgid "*`halpin_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:71
msgid "Selects if the LED follows an input HAL pin or program state."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:71 src/gui/qtvcp-widgets.adoc:1738
#, no-wrap
msgid "*`diameter`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:73
msgid "Diameter of the LED"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:73 src/gui/qtvcp-widgets.adoc:1740
#, no-wrap
msgid "*`color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:75 src/gui/qtvcp-widgets.adoc:1742
msgid "Color of the LED when on."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:75 src/gui/qtvcp-widgets.adoc:1742
#: src/gui/qtvcp-widgets.adoc:2888
#, no-wrap
msgid "*`off_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:77 src/gui/qtvcp-widgets.adoc:1744
msgid "Color of the LED when off."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:77 src/gui/qtvcp-widgets.adoc:1744
#, no-wrap
msgid "*`alignment`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:79
msgid "Qt alignment hint."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:79 src/gui/qtvcp-widgets.adoc:1746
#, no-wrap
msgid "*`state`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:81
msgid "Current state of LED"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:81 src/gui/qtvcp-widgets.adoc:1748
#, no-wrap
msgid "*`flashing`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:83 src/gui/qtvcp-widgets.adoc:1750
msgid "Turns flashing option on and off."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:83 src/gui/qtvcp-widgets.adoc:1750
#, no-wrap
msgid "*`flashRate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:85 src/gui/qtvcp-widgets.adoc:1752
msgid "Sets the flash rate."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:89
msgid ""
"The `LED` properties can be defined in a _stylesheet_ with the following "
"code added to the `.qss` file, `name_of_led` being the widget name defined "
"in Qt Designer's editor:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:97
#, no-wrap
msgid ""
"LED #name_0f_led{\n"
"  qproperty-color: red;\n"
"  qproperty-diameter: 20;\n"
"  qproperty-flashRate: 150;\n"
"}\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:100
#, no-wrap
msgid "`CheckBox` Widget"
msgstr ""

#. TODO QtVCP checkbox widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:105
msgid ""
"This widget allows the user to *check a box to set a HAL pin true or false*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:107
msgid "It is based on PyQt's _QCheckButton_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:109
#, no-wrap
msgid "`RadioButton` Widget"
msgstr ""

#. TODO QtVCP radio button widget capture
#. FIXME Is that one HAL pin per button ?
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:115
msgid ""
"This widget allows a user to *set HAL pins true or false*.  Only one "
"`RadioButton` widget of a group can be true at a time."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:117
msgid "It is based on PyQt's _QRadioButton_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:119
#, no-wrap
msgid "`Gauge` - Round Dial Gauge Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:121 src/gui/qtvcp-widgets.adoc:122
#, no-wrap
msgid "QtVCP `Gauge`: Round Dial Gauge Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:122
#, no-wrap
msgid "images/qtvcp_round_gauge.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:126
msgid ""
"Round Gauge can be used in a LinuxCNC GUI to *display an input parameter* on "
"the dial face."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:127
#, no-wrap
msgid "Customizable Parameters"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:130
msgid ""
"There are several properties that are user settable in order to customize "
"the _appearance of the gauge_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:133
msgid ""
"The following parameters can be set either programmatically or via the Qt "
"Designer property editor."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:136
msgid "Setting this to `True` will _create 2 HAL pins_:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:137
msgid "One is for setting the `value` input"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:138
msgid "The other is for setting the `setpoint`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:142
msgid ""
"If this option is not set, then `value` and `setpoint` must be connected "
"programmatically, ie., in the handler file."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:142
#, no-wrap
msgid "*`max_reading`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:144
msgid "This value determines the _highest number displayed_ on the gauge face."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:144
#, no-wrap
msgid "*`max_value`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:147
#, no-wrap
msgid ""
"This is the _maximum expected value of the value input signal_.\n"
"In other words, it is the full scale input."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:147
#, no-wrap
msgid "*`num_ticks`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:152
#, no-wrap
msgid ""
"This is the _number of ticks/gauge readings_ on the gauge face.\n"
"It should be set to a number that ensures the text readings around the gauge face are readable.\n"
"The minimum allowed value is 2."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:152
#, no-wrap
msgid "*`zone1_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:155
#, no-wrap
msgid ""
"Zone1 extends _from the maximum reading to the threshold point_.\n"
"It can be set to any RGB color."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:155
#, no-wrap
msgid "*`zone2_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:159
#, no-wrap
msgid ""
"Zone2 extends _from the threshold point to the minimum reading_, which is 0.\n"
"It can be set to any RGB color."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:159
#, no-wrap
msgid "*`bezel_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:161
msgid "This is the color of the _outer ring of the gauge_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:161
#, no-wrap
msgid "*`threshold`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:166
#, no-wrap
msgid ""
"The threshold is the _transition point between the zones_.\n"
"It should be set to a value between 0 and the maximum value.\n"
"The maximum allowed value is set to the gauge's `max_value` and minimum value is 0."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:166
#, no-wrap
msgid "*`gauge_label`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:170
#, no-wrap
msgid ""
"This is the _text below the value readout_, near the bottom of the gauge.\n"
"The function of the gauge is then easily visible."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:171
#, no-wrap
msgid "Non Customizable Parameters"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:174
msgid ""
"There are 2 inputs that are not customizable. They can be set via HAL pins, "
"programmatically or via signals from other widgets:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:175
#, no-wrap
msgid "*`value`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:179
#, no-wrap
msgid ""
"This is the _actual input value_ that will be displayed with the gauge needle and in the digital readout.\n"
"It must be set to a value between 0 and `max_value` maximum value."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:179
#, no-wrap
msgid "*`setpoint`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:183
msgid ""
"This is a value that determines the location of a small _marker on the gauge "
"face_.  It must be set to a value between 0 and the maximum value."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:185
#, no-wrap
msgid "`HALPad` - HAL Buttons Joypad"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:187
#, no-wrap
msgid "QtVCP `HALPad`: HAL Buttons Joypad"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:188
#, no-wrap
msgid "QtVCP HALPad: HAL Buttons Joypad "
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:188
#, no-wrap
msgid "images/qtvcp_HALPad.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:191
msgid "This widget looks and acts like a *5 buttons D-pad*, with an LED ring."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:193
msgid "Each button has an selectable type (Bit, S32 or Float) output HAL pin."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:196
msgid ""
"The LED center ring has selectable colors for off and on and is controlled "
"by a Bit HAL pin."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:197
#, no-wrap
msgid "`HALPad` `ENUMS`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:199
msgid "There are _enumerated constants_ used:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:201
msgid "To reference *indicator positions*:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:202 src/gui/qtvcp-widgets.adoc:212
#: src/gui/qtvcp-widgets.adoc:233
msgid "`NONE`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:203
msgid "`LEFT`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:204
msgid "`RIGHT`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:205
msgid "`CENTER`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:206
msgid "`TOP`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:207
msgid "`BOTTOM`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:208
msgid "`LEFTRIGHT`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:209
msgid "`TOPBOTTOM`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:211
msgid "For *HAL pins type*:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:213 src/gui/qtvcp-widgets.adoc:234
msgid "`BIT`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:214 src/gui/qtvcp-widgets.adoc:235
msgid "`S32`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:215
msgid "`FLOAT`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:217
msgid "You use the widget name in Qt Designer plus the reference constant:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:221
#, no-wrap
msgid "self.w.halpadname.set_highlight(self.w.halpadname.LEFTRIGHT)\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:223
#, no-wrap
msgid "`HALPad` Properties"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:224 src/gui/qtvcp-widgets.adoc:383
#, no-wrap
msgid "*`pin_name`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:227
#, no-wrap
msgid ""
"Optional name to use for the _HAL pins basename_.\n"
"If left blank, the Qt Designer widget name will be used."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:227
#, no-wrap
msgid "*`pin_type`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:231
msgid ""
"Select the _HAL output pin type_.  This property is only used at startup.  "
"Selection can be set in Qt Designer:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:236
msgid "`FlOAT`"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:239 src/gui/qtvcp-widgets.adoc:2803
#, no-wrap
msgid "*`left_image_path`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:240 src/gui/qtvcp-widgets.adoc:2804
#, no-wrap
msgid "*`right_image_path`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:241 src/gui/qtvcp-widgets.adoc:2805
#, no-wrap
msgid "*`center_image_path`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:242 src/gui/qtvcp-widgets.adoc:2806
#, no-wrap
msgid "*`top_image_path`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:243 src/gui/qtvcp-widgets.adoc:2807
#, no-wrap
msgid "*`bottom_image_path`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:248
#, no-wrap
msgid ""
"File or resource path to an image to display in the described button location.\n"
"If the reset button is pressed in the Qt Designer editor property, the image will not be displayed. (allowing optional text)"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:248 src/gui/qtvcp-widgets.adoc:2812
#, no-wrap
msgid "*`left_text`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:249 src/gui/qtvcp-widgets.adoc:2813
#, no-wrap
msgid "*`right_text`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:250 src/gui/qtvcp-widgets.adoc:2814
#, no-wrap
msgid "*`center_text`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:251 src/gui/qtvcp-widgets.adoc:2815
#, no-wrap
msgid "*`top_text`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:252 src/gui/qtvcp-widgets.adoc:2816
#, no-wrap
msgid "*`bottom_text`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:255 src/gui/qtvcp-widgets.adoc:2819
#, no-wrap
msgid ""
"A text string to be displayed in the described button location.\n"
"If left blank an image can be designated to be displayed."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:255 src/gui/qtvcp-widgets.adoc:2819
#, no-wrap
msgid "*`true_color`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:256 src/gui/qtvcp-widgets.adoc:2820
#, no-wrap
msgid "*`false_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:259
msgid ""
"Color selection for the center LED ring to be displayed when the `<BASENAME>."
"light.center` HAL pin is `True` or `False`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:259 src/gui/qtvcp-widgets.adoc:2823
#, no-wrap
msgid "*`text_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:261 src/gui/qtvcp-widgets.adoc:2825
msgid "Color selection for the button text."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:261
#, no-wrap
msgid "*`text_font`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:263 src/gui/qtvcp-widgets.adoc:2827
msgid "Font selection for the button text."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:264
#, no-wrap
msgid "`HALPad` Styles"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:266
msgid "The above properties could be set in _styles sheets_."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:273
#, no-wrap
msgid ""
"HALPad{\n"
"    qproperty-on_color: #000;\n"
"    qproperty-off_color: #444;\n"
"}\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:276
#, no-wrap
msgid "`PushButton` - HAL Pin Toggle Widget"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:280
msgid ""
"This widget allows a user to *set a HAL pin true or false* with the push of "
"a button."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:282
msgid "As an option it can be a _toggle button_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:286
msgid ""
"For a _LED Indicator Option_, see <<sub:qtvcp:widgets:"
"indicatedpushbutton>>[IndicatedPushButton] below for more info."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:288
msgid "It also has other options."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:290
msgid "It is based on PyQt's _QPushButton_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:292
#, no-wrap
msgid "`focusOverlay` - Focus Overlay Widget"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:296
msgid ""
"This widget places a *colored overlay over the screen*, usually while a "
"dialog is showing."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:297
#, no-wrap
msgid "Focus overlay example for confirm close prompt"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:298
#, no-wrap
msgid "QtVCP focus overlay"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:298
#, no-wrap
msgid "images/qtvcp_focusOverlay.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:302
msgid ""
"Used to create a 'focused' feel and to draw attention to critical "
"information."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:305
#, no-wrap
msgid ""
"It can also show a translucent image.\n"
"It can also display message text and buttons."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:307
msgid "This widget _can be controlled with `STATUS` messages_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:309
#, no-wrap
msgid "`gridLayout` - Grid Layout Widget"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:312
msgid ""
"This widget *controls if the widgets inside it are enabled or disabled*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:315
msgid ""
"Disabled widgets typically have a different color and do not respond to "
"actions."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:317
msgid "It is based on PyQt's `QGridLayout`."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:319
#, no-wrap
msgid "`hal_label` - HAL Label Widget"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:322
msgid "This widget *displays values sent to it*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:324
msgid "Values can be sent from:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:327
#, no-wrap
msgid ""
"_HAL pins_\n"
"The input pin can be selected as Bit, S32, Float or no pin selected"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:328
msgid "_Programmatically_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:329
msgid "_A `QtSignal`_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:333
#, no-wrap
msgid ""
"There is a `textTemplate` property to set the rich text and/or to format the text.\n"
"Basic formatting might be:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:335
msgid "`%r` for booleans"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:336
msgid "`%d` for integers"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:337
msgid "`%0.4f` for floats."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:339
msgid "A rich text example might be:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:351
#, no-wrap
msgid ""
"self.w.my_hal_label.setProperty(textTemplate,\"\"\"\n"
"<html>\n"
"<head/>\n"
"<body>\n"
"  <p><span style=\"font-size:12pt;font-weight:600;color:#f40c11;\">%0.4f</span></p>\n"
"</body>\n"
"</html>\n"
"\"\"\"\n"
")\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:355
msgid ""
"The `setDisplay` slot can be connected to an integer, a float or a bool "
"signal."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:357
msgid "If the property `pin_name` is not set the widget name will be used."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:359
msgid "There are function calls to display values:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:360
#, no-wrap
msgid "*`[HALLabelName].setDisplay(some_value)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:362
msgid "Can be used to set the display if no HAL pin is selected."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:362
#, no-wrap
msgid "*`[HALLabelName].setProperty(textTemplate,\"%d\")`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:364
msgid "Sets the template of the display."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:366 src/gui/qtvcp-widgets.adoc:797
#: src/gui/qtvcp-widgets.adoc:1166 src/gui/qtvcp-widgets.adoc:1282
msgid "It is based on PyQt's _QLabel_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:368
#, no-wrap
msgid "`LCDNumber` - LCD Style Number Readout Widget"
msgstr ""

#. TODO MCDNumber widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:373
msgid "This widget _displays HAL float/s32/bit values in a LCD looking way_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:376
msgid ""
"It can display numbers in decimal, hexadecimal, binary and octal formats by "
"setting the *`mode`* property."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:378
msgid "When using floats you can set a formatting string."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:381
msgid ""
"You must set the *`digitCount`* property to an appropriate setting to "
"display the largest number."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:386
#, no-wrap
msgid ""
"Option string to be used as the HAL pin name.\n"
"If set to an empty string the widget name will be used."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:386
#, no-wrap
msgid "*`bit_pin_type`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:388
msgid "Selects the input pin as type BIT."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:388
#, no-wrap
msgid "*`s32_pin_type`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:390
msgid "Selects the input pin as type S32."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:390
#, no-wrap
msgid "*`float_pin_type`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:392
msgid "Select the input pin as type `FLOAT`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:392
#, no-wrap
msgid "*`floatTemplate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:399
#, no-wrap
msgid ""
"A string that will be used as a Python3 format template to tailor the LCD display.\n"
"Only used when a `FLOAT` pin is selected.\n"
"eg `{:.2f}` will display a float rounded to 2 numbers after the decimal.\n"
"A blank setting will allow the decimal to move as required."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:401
msgid "It is based on PyQt's _QLCDNumber_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:403
#, no-wrap
msgid "`DoubleScale` - Spin Button Entry Widget"
msgstr ""

#. TODO DoubleScale widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:409
msgid ""
"This widget is a *spin button entry* widget used for _setting a s32 and "
"float HAL pin_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:412
msgid ""
"It has an internal _scale factor_, set to a default of 1, that can be set "
"programmatically or using a QtSignal."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:414
msgid "The `setInput` slot can be connected to a integer, or float signal."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:415
#, no-wrap
msgid "*`[HALLabelName].setInput(some_value)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:417
msgid "This is a function call to change the internal scaling factor."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:420
msgid ""
"The HAL pins will be set to the value of the _internal scale times the "
"widget displayed value_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:422
#, no-wrap
msgid "`GeneralHALInput` - General Signals/Slots Input Connection Widget"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:426 src/gui/qtvcp-widgets.adoc:434
msgid ""
"This widget is used to *connect an arbitrary Qt widget to HAL using signals/"
"slots*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:428
msgid "It is used _for widgets that should *respond* to HAL pin changes_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:430
#, no-wrap
msgid "`GeneralHALOutput` - General Signals/Slots Output Connection Widget"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:436
msgid "It is used _for widgets that should *control* HAL pins_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:438
#, no-wrap
msgid "`WidgetSwitcher` - Multi-widget Layout View Switcher Widget"
msgstr ""

#. TODO WidgetSwitcher widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:445
msgid ""
"This is used to switch the view of a multi-widget layout to show just one "
"widget, ie to *flip between a large view of a widget and a smaller multi "
"widget view*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:449
msgid ""
"It is _different from a stacked widget_ as it can pull a widget from "
"anywhere in the screen and place it in it's page with a different layout "
"than it originally had."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:451
msgid "The _original widget must be in a layout_ for switcher to put it back."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:453
msgid "In Qt Designer you will:"
msgstr ""

#. FIXME Add an entry about widget numbering
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:456
msgid "Add the `WidgetSwitcher` widget on screen."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:457
msgid "Right click the `WidgetSwitcher` and add a page."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:458
msgid "Populate it with the widgets/layouts you wish to see in a default form."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:459
msgid "Add as many pages as there are views to switch to."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:462
#, no-wrap
msgid ""
"On each page, add a layout widget.\n"
"After adding the layout you must right click the widget switcher again and set the layout option."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:464
msgid ""
"Click on the `WidgetSwitcher` widget and then scroll to the bottom of the "
"property editor."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:466
msgid ""
"Look for the dynamic property `widget_list` and double click to the right of "
"it."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:468
msgid ""
"A dialog pops up allowing you to add the names of the widgets to move to the "
"pages you added to the `WidgetSwitcher`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:472
#, no-wrap
msgid ""
"There are _function calls_ to display specific widgets.\n"
"By calling one of these functions, you control what widget is currently displayed:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:473
#, no-wrap
msgid "*`[_WidgetSwitcherName_].show_id_widget(_number_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:474
#, no-wrap
msgid "*`[_WidgetSwitcherName_].show_named_widget(_widget_name_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:475
#, no-wrap
msgid "*`[_WidgetSwitcherName_].show_default()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:478
msgid ""
"This shows the `page 0` layout, and puts all other widgets back to where "
"they were as initially built in Qt Designer."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:478
#, no-wrap
msgid "*`[_WidgetSwitcherName_].show_next()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:480
msgid "Show next widget."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:482
msgid "It is based on the _QStack_ widget."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-widgets.adoc:485
#, no-wrap
msgid "Machine Controller Widgets"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:488
msgid "These widgets *interact with the Machine Controller state*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:490
#, no-wrap
msgid "`ActionButton` - Machine Controller Action Control Widget"
msgstr ""

#. TODO ActionButton widget captures/examples
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:495
msgid "These buttons are used for *control actions on the machine controller*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:498
msgid ""
"They are built on top of `IndicatedPushButton` so can have LEDs overlaid."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:505
#, no-wrap
msgid ""
"If you left double click on this widget you can launch a dialog to set any of these actions.\n"
"The dialogs will help to set the right related data to the selected action.\n"
"You can also change these properties directly in the property editor."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:508
msgid "You can select one of these:"
msgstr ""

#. FIXME are capitalization and "underscoring" OK ?
#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:510
#, no-wrap
msgid "*`Estop`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:511
#, no-wrap
msgid "*`Machine On`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:512
#, no-wrap
msgid "*`Auto`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:513
#, no-wrap
msgid "*`mdi`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:514
#, no-wrap
msgid "*`manual`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:516
#, no-wrap
msgid "*`run_from_line status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:518
msgid "Gets line number from `STATUS` message `gcode-line-selected`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:518
#, no-wrap
msgid "*`run_from_line slot`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:520
msgid "Gets line number from Qt Designer int/str slot `setRunFromLine`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:522
#, no-wrap
msgid "*`load dialog`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:524
msgid "Requires a dialog widget present."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:524
#, no-wrap
msgid "*`Camview dialog`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:526
msgid "Requires `camview` dialog widget present."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:526
#, no-wrap
msgid "*`origin offset dialog`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:528
msgid "Requires origin offset dialog widget present."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:528
#, no-wrap
msgid "*`macro dialog`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:530
msgid "Requires macro dialog widget present."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:530
#, no-wrap
msgid "*`Launch Halmeter`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:531
#, no-wrap
msgid "*`Launch Status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:532
#, no-wrap
msgid "*`Launch Halshow`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:533
#, no-wrap
msgid "*`Home`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:535
msgid "Set the joint number to -1 for `all-home`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:535
#, no-wrap
msgid "*`Unhome`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:537
msgid "Set the joint number to -1 for `all-unhome`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:537
#, no-wrap
msgid "*`Home Selected`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:539
msgid "Homes the joint/axis selected by `STATUS`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:539
#, no-wrap
msgid "*`Unhome Selected`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:541
msgid "Unhomes the joint/axis selected by `STATUS`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:541
#, no-wrap
msgid "*`zero axis`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:542
#, no-wrap
msgid "*`zero G5X`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:544
msgid "Zeros the current user coordinate system offsets."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:544
#, no-wrap
msgid "*`zero G92`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:546
msgid "Zeros the optional `G92` offsets."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:546
#, no-wrap
msgid "*`zero Z rotational`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:548
msgid "Zeros the rotation offset."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:548
#, no-wrap
msgid "*`jog joint positive`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:550 src/gui/qtvcp-widgets.adoc:552
msgid "Set the joint number."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:550
#, no-wrap
msgid "*`jog joint negative`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:552
#, no-wrap
msgid "*`jog selected positive`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:554 src/gui/qtvcp-widgets.adoc:556
msgid "Selected with a different widget or `STATUS`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:554
#, no-wrap
msgid "*`jog selected negative`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:556
#, no-wrap
msgid "*`jog increment`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:558
msgid "Set metric/imperial/angular numbers."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:558
#, no-wrap
msgid "*`jog rate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:560 src/gui/qtvcp-widgets.adoc:562
#: src/gui/qtvcp-widgets.adoc:564 src/gui/qtvcp-widgets.adoc:566
msgid "Set the float/alt float number."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:560
#, no-wrap
msgid "*`feed override`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:562
#, no-wrap
msgid "*`rapid override`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:564
#, no-wrap
msgid "*`spindle override`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:566
#, no-wrap
msgid "*`spindle fwd`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:567
#, no-wrap
msgid "*`spindle backward`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:568
#, no-wrap
msgid "*`spindle stop`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:569
#, no-wrap
msgid "*`spindle up`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:570
#, no-wrap
msgid "*`spindle down`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:571
#, no-wrap
msgid "*`view change`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:573
msgid "Set `view_type_string`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:573
#, no-wrap
msgid "*`limits override`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:574
#, no-wrap
msgid "*`flood`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:575
#, no-wrap
msgid "*`mist`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:576
#, no-wrap
msgid "*`block delete`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:577
#, no-wrap
msgid "*`optional stop`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:578
#, no-wrap
msgid "*`mdi command`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:580
msgid "Set `command_string`, ie calls a hard coded MDI command"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:580
#, no-wrap
msgid "*`INI mdi number`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:582
msgid "Set `ini_mdi_number`, ie calls an INI based MDI command"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:582
#, no-wrap
msgid "*`dro absolute`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:583
#, no-wrap
msgid "*`dro relative`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:584
#, no-wrap
msgid "*`dro dtg`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:585
#, no-wrap
msgid "*`exit screen`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:587
msgid "Closes down LinuxCNC"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:587
#, no-wrap
msgid "*`Override limits`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:589
msgid "Temporarily override hard limits"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:589
#, no-wrap
msgid "*`launch dialogs`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:591
msgid "Pops up dialogs if they are included in ui file."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:591
#, no-wrap
msgid "*`set DRO to relative`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:592
#, no-wrap
msgid "*`set DRO to absolute`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:593
#, no-wrap
msgid "*`set DRO to distance-to-go`*"
msgstr ""

#.  end definition list
#. type: Block title
#: src/gui/qtvcp-widgets.adoc:596
#, no-wrap
msgid "Attributes"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:599
msgid ""
"These set _attributes_ of the selected action (availability depends on the "
"widget):"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:600
#, no-wrap
msgid "*`toggle float option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:602
msgid "Allows jog rate and overrides to toggle between two rates."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:602
#, no-wrap
msgid "*`joint number`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:604
msgid "Selects the joint/axis that the button controls."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:604
#, no-wrap
msgid "*`incr imperial number`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:606
msgid "Sets the imperial jog increment (set negative to ignore)."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:606
#, no-wrap
msgid "*`incr mm number`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:608
msgid "Sets the metric jog increment (set negative to ignore)."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:608
#, no-wrap
msgid "*`incr angular number`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:610
msgid "Sets the angular jog increment (set negative to ignore)."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:610
#, no-wrap
msgid "*`float number`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:612
msgid "Used for `jograte` and overrides."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:612
#, no-wrap
msgid "*`float alternate number`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:614
msgid "For `jograte` and overrides that can toggle between two float numbers."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:614
#, no-wrap
msgid "*`view type string`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:616
msgid "Can be:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:617
msgid "`p`,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:618
msgid "`x`, `y`, `y2`, `z`, `z2`,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:619
msgid "`zoom-in`, `zoom-out`,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:620
msgid "`pan-up`, `pan-down`, `pan-left`, `pan-right`,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:621
msgid "`rotate-up`, `rotate-down`, `rotate-cw`, `rotate-ccw`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:622
msgid "`clear`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:622
#, no-wrap
msgid "*`command string`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:625
msgid ""
"MDI command string that will be invoked if the MDI command action is "
"selected."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:625
#, no-wrap
msgid "*`ini_mdi_number`*"
msgstr ""

#. FIXME Space after comma or not ?
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:633
#, no-wrap
msgid ""
"A reference to the _INI file_ `[MDI_COMMAND_LIST]` section.\n"
"Set an integer of select one line under the INI`s `[MDI_COMMAND]` line starting at 0.\n"
"Then in the INI file, under the heading `[MDI_COMMAND_LIST]` add appropriate lines.\n"
"The commands are separated by the `;`.\n"
"The `label` is set after the comma, and `\\n` symbol adds a line break."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:640
#, no-wrap
msgid ""
"[MDI_COMMAND_LIST]\n"
"MDI_COMMAND = G0 Z25;X0 Y0;Z0, Goto\\nUser\\nZero\n"
"MDI_COMMAND = G53 G0 Z0;G53 G0 X0 Y0, Goto\\nMachn\\nZero\n"
msgstr ""

#. FIXME add link to Indicated_PushButton section
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:646
#, no-wrap
msgid ""
"Action buttons are subclassed from <<sub:qtvcp:widgets:indicatedpushbutton>>[`IndicatedPushButton`].\n"
"See the following sections for more informations about:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:648
msgid "<<sub:qtvcp:widgets:indicatedpushbutton:led,LED Indicator option>>"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:649
msgid ""
"<<sub:qtvcp:widgets:indicatedpushbutton:state-enabled,Enabled on State>>"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:650
msgid ""
"<<sub:qtvcp:widgets:indicatedpushbutton:state-text,Text Changes On State>>"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:651
msgid ""
"<<sub:qtvcp:widgets:indicatedpushbutton:python-command,Call Python Command "
"On State>>"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:653
#, no-wrap
msgid "`ActionToolButton` - Optional Actions Menu Button Widget"
msgstr ""

#. TODO ActionToolButton widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:660
#, no-wrap
msgid ""
"*`ActionToolButton`* buttons are similar in concept to action buttons,\n"
"but they use _QToolButtons_ to allow for *optional actions* to be\n"
"selected by pushing and holding the button till the option menu pops up.\n"
msgstr ""

#. FIXME meaning only one ActionToolButton, right ?
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:663
msgid "Currently there is only one option: `userView`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:665 src/gui/qtvcp-widgets.adoc:724
#: src/gui/qtvcp-widgets.adoc:1802
msgid "It is based on PyQt's _QToolButton_."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:667
#, no-wrap
msgid "`userView` Record and Set User View Widget"
msgstr ""

#. TODO userView widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:673
msgid ""
"User View tool button allows to *record and return to an arbitrary graphics "
"view*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:676
msgid ""
"Press and hold the button to have the menu pop up and press _record view_ to "
"record the currently displayed graphics view."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:678
msgid "Click the button normally to return to the last recorded position."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:681
msgid ""
"The recorded position will be remembered at shutdown if a preference file "
"option is set up."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:689
#, no-wrap
msgid ""
"Due to programming limitations, the recorded position may not show exactly the same. Particularly, if you pan zoomed out and pan zoomed in again while setting the desired view.\n"
"_Best practice_ is to select a main view, modify as desired, record, then immediately click the button to switch to the recorded position. If it is not as you like, modify it's existing position and re-record."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:691
#, no-wrap
msgid "`RoundButton` - Round Shapped `ActionButton` Widget"
msgstr ""

#. TODO RoundButton widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:697
msgid ""
"Round buttons work the same as _ActionButtons_ other than the button is "
"cropped round."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:699
msgid "They are intended only to be visually different."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:701
msgid ""
"They have _two path properties_ for displaying *images on true and false*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:703
#, no-wrap
msgid "`AxisToolButton` - Select and Set Axis Widget"
msgstr ""

#. TODO AxisToolButton widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:708
msgid "This allows one to *select and set an axis*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:710
msgid ""
"If the button is set checkable, it will indicate which axis is selected."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:712
msgid ""
"If you press and hold the button a pop up menu will show allowing one to:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:714
msgid "Zero the axis"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:715
msgid "Divide the axis by 2"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:716
msgid "Set the axis arbitrarily"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:717
msgid "Reset the axis to the last number recorded"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:719
msgid "You select the axis by setting the joint number."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:722
msgid ""
"You can select a `halpin` option that is set true when the axis is selected."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:726
#, no-wrap
msgid "`CamView` - Workpiece Alignment and Origin Setting Widget"
msgstr ""

#. TODO CamView widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:731
msgid "This widget *displays a image from a web camera*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:733
msgid ""
"It _overlays an adjustable circular and cross hair target_ over the image."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:735
msgid "CamView was built with precise visual positioning in mind."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:737
msgid ""
"This is used to *align the work piece or zero part features using a webcam*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:739
msgid "It uses _OpenCV_ vision library."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:741
#, no-wrap
msgid "`DROLabel` - Axis Position Display Widget"
msgstr ""

#. TODO DROLabel widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:746
msgid "This will *display the current position of an axis*."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:747
#, no-wrap
msgid "*`Qjoint_number`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:749
msgid "Joint number of offset to display (10 will specify rotational offset)."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:749
#, no-wrap
msgid "*`Qreference_type`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:751
msgid "Actual, relative or distance to go (0,1,2)."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:751 src/gui/qtvcp-widgets.adoc:2148
#: src/gui/qtvcp-widgets.adoc:2305
#, no-wrap
msgid "*`metric_template`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:753
msgid "Format of display ie `%10.3f`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:753 src/gui/qtvcp-widgets.adoc:2150
#: src/gui/qtvcp-widgets.adoc:2307
#, no-wrap
msgid "*`imperial_template`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:755
msgid "format of display ie `%9.4f`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:755
#, no-wrap
msgid "*`angular_template `*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:757
msgid "Format of display ie `%Rotational: 10.1f`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:761
msgid ""
"The `DROLabel` widget holds a property *`isHomed`* that can be used with a "
"stylesheet to change the _color of the `DRO_Label` based on homing state of "
"the joint_ number in LinuxCNC."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:763
msgid "Here is a sample stylesheet entry that:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:765
msgid "Sets the font of all `DRO_Label` widgets,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:766
msgid "Sets the text template (to set resolution) of the DRO,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:767
msgid "Then sets the text color based on the Qt `isHomed` property."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:776
#, no-wrap
msgid ""
"DROLabel {\n"
"    font: 25pt \"Lato Heavy\";\n"
"    qproperty-imperial_template: '%9.4f';\n"
"    qproperty-metric_template: '%10.3f';\n"
"    qproperty-angular_template: '%11.2f';\n"
"}\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:780
#, no-wrap
msgid ""
"DROLabel[isHomed=false] {\n"
"    color: red;\n"
"}\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:784
#, no-wrap
msgid ""
"DROLabel[isHomed=true] {\n"
"    color: green;\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:788
msgid ""
"Here is how you specify a particular widget by it's `objectName` in Qt "
"Designer."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:794
#, no-wrap
msgid ""
"DROLabel #dr0_x_axis [isHomed=false] {\n"
"    color: yellow;\n"
"}\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:799
#, no-wrap
msgid "`GcodeDisplay` - G-code Text Display Widget"
msgstr ""

#. TODO GcodeDisplay capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:805
msgid ""
"This *displays G-code in text form*, highlighting the currently running line."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:807
msgid "This can also display:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:809
#, no-wrap
msgid "*MDI history* when LinuxCNC is in `MDI` mode.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:810
#, no-wrap
msgid "*Log entries* when LinuxCNC is in `MANUAL` mode.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:811
#, no-wrap
msgid "*Preference file entries* if you enter `PREFERENCE` in capitals into the `MDILine` widget.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:814
msgid ""
"It has a _signal_ *`percentDone(int)`* that can be connected to a slot (such "
"as a `progressBar` to display percent run)."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:815
#, no-wrap
msgid "*`auto_show_mdi_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:817
msgid "Set true to have the widget switch to MDI history when in MDI mode."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:817
#, no-wrap
msgid "*`auto_show_manual_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:819
msgid "Set true to have the widget switch to machine log when in Manual mode."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:822
msgid ""
"The `GcodeDisplay` properties can be set in a stylesheet with the following "
"code added to the .qss file."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:841
#, no-wrap
msgid ""
"EditorBase{\n"
"    qproperty-styleColorBackground: lightblue;\n"
"    qproperty-styleColor0: black;\n"
"    qproperty-styleColor1: #000000; /* black */\n"
"    qproperty-styleColor2: red;\n"
"    qproperty-styleColor3: black;\n"
"    qproperty-styleColor4: yellow;\n"
"    qproperty-styleColorMarginText: White;\n"
"    qproperty-styleColorMarginBackground: blue;\n"
"    qproperty-styleFont0: \"Times,12,-1,0,90,0,0,0,0,0\";\n"
"    qproperty-styleFont1: \"Times,18,-1,0,90,1,0,0,0,0\";\n"
"    qproperty-styleFont2: \"Times,12,-1,0,90,0,0,0,0,0\";\n"
"    qproperty-styleFont3: \"Times,12,-1,0,90,0,0,0,0,0\";\n"
"    qproperty-styleFont4: \"Times,12,-1,0,90,0,0,0,0,0\";\n"
"    qproperty-styleFontMargin: \"Times,14,-1,0,90,0,0,0,0,0\";\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:844
msgid "For `GcodeDisplay` widget's _default G-code lexer_:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:846
#, no-wrap
msgid "*styleColor0 = Default*: digit characters\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:847
#, no-wrap
msgid "*styleColor1 = Comments*: characters inside of 'msg()'\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:848
#, no-wrap
msgid "*styleColor2 = Key*: alphabetic characters\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:849
#, no-wrap
msgid "*styleColor3 = Assignment*: ('%', '<', '>', '#', '=')\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:850
#, no-wrap
msgid "*styleColor4 = Value*: ('[', ']')\n"
msgstr ""

#. FIXME Explain/explicit
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:853
msgid "_Font definitions_:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:856
#, no-wrap
msgid ""
"  \"style name, size, -1, 0, bold setting (0-99), italics (0-1),\n"
"  underline (0-1),0,0,0\"\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:858
msgid "It is based on PyQt's _QsciScintilla_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:860
#, no-wrap
msgid "`GcodeEditor` - G-code Program Editor Widget"
msgstr ""

#. TODO GcodeEditor widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:866
msgid ""
"This is an extension of the `GcodeDisplay` widget that *adds editing "
"convenience*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:868
msgid ""
"It is based on PyQt's _QWidget_ which incorporates `GcodeDisplay` widget."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:870
#, no-wrap
msgid "`GCodeGraphics` - G-code Graphic Backplot Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:873 src/gui/qtvcp-widgets.adoc:874
#, no-wrap
msgid "QtVCP GcodeGraphics: G-code Graphic Backplot Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:874
#, no-wrap
msgid "images/qtvcp_gcodeGraphics.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:877
msgid "This *displays the current G-code in a graphical form*."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:878
#, no-wrap
msgid "Stylesheets Properties"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:880
#, no-wrap
msgid "*`+_view+`* _(string)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:885
#, no-wrap
msgid ""
"Sets the _default view orientation_ on GUI load.\n"
"Valid choices for a lathe are p, y, y2. For other screens, valid choices are p, x, y, z, z2.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:891
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-_view: z;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:893
#, no-wrap
msgid "*`+_dro+`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:896
#, no-wrap
msgid ""
"Determines whether or not to _show the DRO_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:902
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-_dro: False;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:904
#, no-wrap
msgid "*`+_dtg+`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:907
#, no-wrap
msgid ""
"Determine whether or not to _show the Distance To Go_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:913
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-_dtg: False;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:915
#, no-wrap
msgid "*`+_metric+`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:918
#, no-wrap
msgid ""
"Determines whether or not to _show the units in metric by default_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:924
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-_metric: False;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:926
#, no-wrap
msgid "*`+_overlay+`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:929
#, no-wrap
msgid ""
"Determines whether or not to _show the overlay by default_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:935
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-_overlay: False;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:937
#, no-wrap
msgid "*`+_offsets+`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:940
#, no-wrap
msgid ""
"Determines whether or not to _show the offsets by default_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:946
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-_offsets: False;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:948
#, no-wrap
msgid "*`+_small_origin+`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:951
#, no-wrap
msgid ""
"Determines whether or not to _show the small origin by default_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:957
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-_small_origin: False;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:959
#, no-wrap
msgid "*`overlay_color`* _(primary, secondary, or RGBA formatted color)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:962
#, no-wrap
msgid ""
"Sets the _default overlay color_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:968
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-overlay_color: blue;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:970
#, no-wrap
msgid "*`background_color`* _(primary, secondary, or RGBA formatted color)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:973
#, no-wrap
msgid ""
"Sets the _default background color_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:979
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-background_color: blue;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:981
#, no-wrap
msgid "*`+_use_gradient_background+`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:984
#, no-wrap
msgid ""
"Determines whether or not _use a gradient background by default_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:990
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-_use_gradient_background: False;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:992
#, no-wrap
msgid "*`jog_color`* _(primary, secondary, or RGBA formatted color)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:995
#, no-wrap
msgid ""
"Sets the _default jog color_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1001
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-jog_color: red;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1003
#, no-wrap
msgid "*`Feed_color`* _(primary, secondary, or RGBA formatted color)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1006
#, no-wrap
msgid ""
"Sets the _default feed color_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1012
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-Feed_color: green;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1014
#, no-wrap
msgid "*`Rapid_color`* _(primary, secondary, or RGBA formatted color)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1017
#, no-wrap
msgid ""
"Sets the _default rapid color_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1023
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-Rapid_color: rgba(0, 0, 255, .5);\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1025
#, no-wrap
msgid "*`InhibitControls`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1028
#, no-wrap
msgid ""
"Determines whether or not to _inhibit external controls by default_.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1034
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-InhibitControls:True;\n"
"}\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1036
#, no-wrap
msgid "*`MouseButtonMode`* _(int)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1040
#, no-wrap
msgid ""
"Changes the _mouse button behavior_ to rotate, move or zoom within the preview.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1046
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-MouseButtonMode: 1;\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1049
msgid "There are 12 valid modes:"
msgstr ""

#. type: Table
#: src/gui/qtvcp-widgets.adoc:1052 src/gui/qtvcp-widgets.adoc:1066
#: src/plasma/qtplasmac.adoc:90
#, no-wrap
msgid "*Mode"
msgstr ""

#. type: Table
#: src/gui/qtvcp-widgets.adoc:1052 src/gui/qtvcp-widgets.adoc:1066
#, no-wrap
msgid "*Move"
msgstr ""

#. type: Table
#: src/gui/qtvcp-widgets.adoc:1052
#, no-wrap
msgid "*Zoom"
msgstr ""

#. type: Table
#: src/gui/qtvcp-widgets.adoc:1053
#, no-wrap
msgid "*Rotate*"
msgstr ""

#. type: Table
#: src/gui/qtvcp-widgets.adoc:1053 src/gui/qtvcp-widgets.adoc:1055
#: src/gui/qtvcp-widgets.adoc:1056 src/gui/qtvcp-widgets.adoc:1057
#: src/gui/qtvcp-widgets.adoc:1059 src/gui/qtvcp-widgets.adoc:1067
#: src/gui/qtvcp-widgets.adoc:1069 src/gui/qtvcp-widgets.adoc:1070
#, no-wrap
msgid "Left"
msgstr ""

#. type: Table
#: src/gui/qtvcp-widgets.adoc:1053 src/gui/qtvcp-widgets.adoc:1054
#: src/gui/qtvcp-widgets.adoc:1055 src/gui/qtvcp-widgets.adoc:1058
#: src/gui/qtvcp-widgets.adoc:1068 src/gui/qtvcp-widgets.adoc:1071
#, no-wrap
msgid "Middl"
msgstr ""

#. type: Table
#: src/gui/qtvcp-widgets.adoc:1054 src/gui/qtvcp-widgets.adoc:1056
#: src/gui/qtvcp-widgets.adoc:1057 src/gui/qtvcp-widgets.adoc:1058
#: src/gui/qtvcp-widgets.adoc:1069 src/gui/qtvcp-widgets.adoc:1071
#: src/gui/qtvcp-widgets.adoc:1072
#, no-wrap
msgid "Right"
msgstr ""

#. type: Table
#: src/gui/qtvcp-widgets.adoc:1057 src/gui/qtvcp-widgets.adoc:1058
#: src/gui/qtvcp-widgets.adoc:1068 src/gui/qtvcp-widgets.adoc:1073
#, no-wrap
msgid "Middle"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1063
msgid ""
"Modes 6-11 are intended for machines that only require a 2D preview such as "
"plasma or some Lathes and have no rotate button assigned."
msgstr ""

#. type: Table
#: src/gui/qtvcp-widgets.adoc:1067
#, no-wrap
msgid "*Zoom*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1075
#, no-wrap
msgid "*`MouseWheelInvertZoom`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1079
#, no-wrap
msgid ""
"Determines wether or not to _invert the zoom direction_ when zooming with the mouse wheel.\n"
"The following shows an example of how to set this property:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1085
#, no-wrap
msgid ""
"#gcodegraphics{\n"
"    qproperty-MouseWheelInvertZoom:True;\n"
"}\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1087
#, no-wrap
msgid "`ACTION` functions"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1090
msgid "The `ACTION` library can control the G-code graphics widget."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1091
#, no-wrap
msgid "*`ACTION.RELOAD_DISPLAY()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1093
msgid "Reload the current program which recalculates the origin/offsets."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1093
#, no-wrap
msgid "*`ACTION.SET_GRAPHICS_VIEW(_view_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1095
msgid "The following `view` commands can be sent:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1096
msgid "`clear`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1097
msgid "`zoom-in`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1098
msgid "`zoom-out`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1099
msgid "`pan-up`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1100
msgid "`pan-down`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1101
msgid "`pan-right`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1102
msgid "`pan-left`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1103
msgid "`rotate-cw`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1104
msgid "`rotate-ccw`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1105
msgid "`rotate-up`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1106
msgid "`rotate-down`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1107
msgid "`overlay-dro-on`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1108
msgid "`overlay-dro-off`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1109
msgid "`overlay-offsets-on`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1110
msgid "`overlay-offsets-off`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1111
msgid "`alpha-mode-on`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1112
msgid "`alpha-mode-off`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1113
msgid "`inhibit-selection-on`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1114
msgid "`inhibit-selection-off`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1115
msgid "`dimensions-on`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1116
msgid "`dimensions-off`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1117
msgid "`grid-size`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1118
msgid "`record-view`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1119
msgid "`set-recorded-view`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1120
msgid "`P`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1121
msgid "`X`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1122
msgid "`Y`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1123
msgid "`Y2`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1124
msgid "`Z`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1125
msgid "`Z2`"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1125
#, no-wrap
msgid "*`ACTION.ADJUST_PAN(_X,Y_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1127
msgid "Directly set the relative pan of view in x and y direction."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1127
#, no-wrap
msgid "*`ACTION.ADJUST_ROTATE(_X,Y_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1129
msgid "Directly set the relative rotation of view in x and y direction."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1131
msgid "It is based on PyQt's _OpenGL_ widget."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1133
#, no-wrap
msgid "`StateLabel` - Controller Modes State Label Display Widget"
msgstr ""

#. TODO StateLabel widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1138
msgid ""
"This will *display a label based on the machine controller modes true/false "
"states*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1140
msgid "You can select between different texts based on true or false."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1141
#, no-wrap
msgid "States Selection Properties"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1143
msgid "The states are selectable via these properties:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1144
#, no-wrap
msgid "*`css_mode_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1146
msgid "`True` when machine is in `G96` _Constant Surface Speed Mode_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1146
#, no-wrap
msgid "*`diameter_mode_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1148
msgid "`True` when machine is in `G7` _Lathe Diameter Mode_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1148
#, no-wrap
msgid "*`fpr_mode_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1150
msgid "`True` when machine is in `G95` _Feed per revolution Mode_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1150
#, no-wrap
msgid "*`metric_mode_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1152
msgid "`True` when machine is in `G21` _Metric Mode_."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1153
#, no-wrap
msgid "Text templates properties"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1155
#, no-wrap
msgid "*`true_textTemplate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1159
#, no-wrap
msgid ""
"This will be the text set when the option is `True`.\n"
"You can use _Qt rich text_ code for different fonts/colors etc.\n"
"Typical template for metric mode in true state, might be: _Metric Mode_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1159
#, no-wrap
msgid "*`false_textTemplate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1164
#, no-wrap
msgid ""
"This will be the text set when the option is `False`.\n"
"You can use _Qt rich text_ code for different fonts/colors etc.\n"
"Typical template for metric mode in false state, might be: _Imperial Mode_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1168
#, no-wrap
msgid "`StatusLabel` - Controller Variables State Label Display Widget"
msgstr ""

#. TODO StatusLabel widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1173
msgid ""
"This will *display a label based on variable status of the machine "
"controller*."
msgstr ""

#. FIXME Clarify "substituting": what ? where ?
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1176
msgid "You can change how the state will be displayed by substituting."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1178
msgid "You can use rich text for different fonts/colors etc."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1179
#, no-wrap
msgid "Selectable States"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1181
msgid "These states are selectable:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1182
#, no-wrap
msgid "*`actual_spindle_speed_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1187
#, no-wrap
msgid ""
"Used to display the actual spindle speed as _reported from the HAL pin_ `spindle.0.speed-i`.\n"
"It's converted to _RPM_.\n"
"A `textTemplate` of `%d` would typically be used."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1187
#, no-wrap
msgid "*`actual_surface_speed_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1193
#, no-wrap
msgid ""
"Used to display the actual cutting surface speed on a lathe based on X axis and spindle speed.\n"
"It's converted to distance per minute.\n"
"A `textTemplate` of `%4.1f` (feet per minute) and `altTextTemplate` of `%d` (meters per minute) would typically be used."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1193
#, no-wrap
msgid "*`blendcode_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1195
msgid "Shows the current `G64` setting."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1195
#, no-wrap
msgid "*`current_feedrate_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1197
msgid "Shows the current actual feedrate."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1197
#, no-wrap
msgid "*`current_FPU_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1199
msgid "Shows the current actual feed per unit."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1199
#, no-wrap
msgid "*`fcode_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1201
msgid "Shows the current programmed `F` code setting."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1201
#, no-wrap
msgid "*`feed_override_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1203
msgid "Shows the current feed override setting in percent."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1203
#, no-wrap
msgid "*`filename_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1205
msgid "Shows the last loaded file name."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1205
#, no-wrap
msgid "*`filepath_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1207
msgid "Shows the last loaded full file path name."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1207
#, no-wrap
msgid "*`gcode_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1209
msgid "Shows all active G-codes."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1209
#, no-wrap
msgid "*`gcode_selected_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1211
msgid "Show the current selected G-code line."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1211
#, no-wrap
msgid "*`halpin_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1213
msgid "Shows the HAL pin output of a selected HAL pin."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1213
#, no-wrap
msgid "*`jograte_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1215
msgid "Shows the current QtVCP based Jog Rate."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1215
#, no-wrap
msgid "*`jograte_angular_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1217
msgid "Shows the current QtVCP based Angular Jog Rate."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1217
#, no-wrap
msgid "*`jogincr_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1219
msgid "Shows the current QtVCP based Jog increment."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1219
#, no-wrap
msgid "*`jogincr_angular_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1221
msgid "Shows the current QtVCP based Angular Jog increment."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1221
#, no-wrap
msgid "*`machine_state_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1225
#, no-wrap
msgid ""
"Shows the current _machine interpreter state_ using the text described from the state_list.\n"
"The interpreter states are:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1226
msgid "`Estopped`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1227
msgid "`Running`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1228
msgid "`Stopped`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1229
msgid "`Paused`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1230
msgid "`Waiting`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1231
msgid "`Reading`"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1231
#, no-wrap
msgid "*`max_velocity_override_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1233
msgid "Shows the current max axis velocity override setting."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1233
#, no-wrap
msgid "*`mcode_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1235
msgid "Shows _all active M-codes_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1235
#, no-wrap
msgid "*`requested_spindle_speed_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1237
msgid "Shows the requested spindle speed - actual may be different."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1237
#, no-wrap
msgid "*`rapid_override_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1239
msgid "Shows the current rapid override setting in (0-100) percent."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1239
#, no-wrap
msgid "*`spindle_override_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1241
msgid "Shows the current spindle override setting in percent."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1241
#, no-wrap
msgid "*`timestamp_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1245
#, no-wrap
msgid ""
"Shows the time based on the system settings.\n"
"An example of a useful `textTemplate` setting: `%I:%M:%S %p`.\n"
"See the Python time module for more info"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1245
#, no-wrap
msgid "*`tool comment_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1247
msgid "Returns the comment text from the current loaded tool."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1247
#, no-wrap
msgid "*`tool diameter_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1249
msgid "Returns the diameter from the current loaded tool."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1249
#, no-wrap
msgid "*`tool_number_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1251
msgid "Returns the tool number of the current loaded tool."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1251
#, no-wrap
msgid "*`tool_offset_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1254
msgid ""
"Returns the offset of the current loaded tool, indexed by `index_number` to "
"select axis (0=x,1=y,etc)"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1254
#, no-wrap
msgid "*`user_system_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1256
msgid "Shows the _active user coordinate system_ (`G5x` setting)."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1257
#, no-wrap
msgid "Other Properties"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1259
#, no-wrap
msgid "*`index_number`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1261
msgid "Integer that specifies the tool status index to display."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1261
#, no-wrap
msgid "*`state_label_list`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1263
msgid "List of labels used for different machine states."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1263
#, no-wrap
msgid "*`halpin_names`*"
msgstr ""

#. FIXME Single or several ?
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1266
msgid "Name of the halpin to monitor (including HAL component basename)."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1266
#, no-wrap
msgid "*`textTemplate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1275
#, no-wrap
msgid ""
"This is usually used for *imperial (`G20`) or angular numerical settings*, though not every option has imperial/metric conversion.\n"
"This uses _Python formatting rules_ to set the text output.\n"
"One can use `%s` for no conversion, `%d` for integer conversion, `%f` for float conversion, etc.\n"
"You can also use _Qt rich text_ code.\n"
"Typical template used for formatting imperial float numbers to text would be `%9.4f` or `%9.4f inch`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1275
#, no-wrap
msgid "*`alt_textTemplate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1280
#, no-wrap
msgid ""
"This is usually used for *metric (`G21`) numerical settings*.\n"
"This uses _Python formatting rules_ to set the text output.\n"
"Typical template used for formatting metric float to text would be `%10.3f` or `%10.3f mm`."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1284
#, no-wrap
msgid "`StatusImageSwitcher` - Controller Status Image Switcher"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1287
msgid ""
"Status image switcher will *switch between images based on LinuxCNC states*."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1288
#, no-wrap
msgid "*`watch_spindle`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1290
msgid "Toggles between _3 images_: `stop`, `fwd`, `revs`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1290
#, no-wrap
msgid "*`watch_axis_homed`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1292
msgid "Toggles between _2 images_: `axis not homed`, `axis homed`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1292
#, no-wrap
msgid "*`watch_all_homed`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1294
msgid "Would toggle between _2 images_: `not all homed`, `all homed`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1294
#, no-wrap
msgid "*`watch_hard_limits`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1296
msgid "Would toggle between _2 images or one per joint_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1298
msgid ""
"Here is an example of using it to display an icon of Z axis homing state:"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1299
#, no-wrap
msgid "QtVCP `StatusImageSwitcher`: Controller Status Image Switcher"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:1300
#, no-wrap
msgid "QtVCP StatusImageSwitcher: Controller Status Image Switcher"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:1300
#, no-wrap
msgid "images/statusImageSwitcher.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1303
msgid "In the properties section notice that:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1305
msgid "`watch_axis_homed` is checked"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1306
msgid "`axis_letter` is set to Z"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1309
msgid ""
"If you double click the `image_list` a dialog will show and allow you to add "
"image paths to."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1312
msgid ""
"If you have one image as an icon and one _clear image_ then that will look "
"like it shows and _hides the icon_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1315
msgid ""
"Selecting image paths can be done by selecting the `pixmap` property and "
"selecting an image."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1318
msgid ""
"The `pixmap` setting is for test display only and will be ignored outside of "
"Qt Designer."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1320
msgid "Right click the image name and you should see 'Copy path'"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1321
msgid "Click 'Copy path'"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1322
msgid "Now double click the 'image list' property so the dialog shows."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1323
msgid "Click the 'New' button"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1324
msgid "Paste the image path in the entry box"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1327
#, no-wrap
msgid ""
"Do that again for the next image.\n"
"_Use a clear image to represent a hidden icon._"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1331
#, no-wrap
msgid ""
"You can _test the images display_ from the image list by changing the `image number`. In this case `0` is unhomed and `1` would be homed.\n"
"This is for test display only and will be ignored outside of Qt Designer."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1333
#, no-wrap
msgid "`StatusStacked` - Mode Status Display Switching Widget"
msgstr ""

#. TODO StatusStacked widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1338
msgid "This widget *displays one of three panels based on LinuxCNC's mode*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1341
msgid ""
"This allows you to automatically display different widgets on _Manual_, "
"_MDI_ and _Auto_ modes."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1346
msgid "It is based on PyQt's _QStacked_ widget."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1348
#, no-wrap
msgid "`JogIncrements` - Jog Increments Value Selection Widget"
msgstr ""

#. TODO JogIncrements widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1353
msgid ""
"This widget allows the user to *select jog increment values for jogging*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1355
msgid "The jogging values come from the _INI file_ under:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1357
msgid "`[DISPLAY]INCREMENTS`, or"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1358
msgid "`[DISPLAY]ANGULAR_INCREMENTS`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1360
msgid "This will be _available to all widgets_ through `STATUS`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1363
msgid ""
"You can select linear or angular increments by the property "
"*`linear_option`* in Qt Designer property editor."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1365
msgid "It is based on PyQt's _ComboBox_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1367
#, no-wrap
msgid "`ScreenOption` - General Options Setting widget"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1371
msgid ""
"This widget doesn't add anything visually to a screen but *sets up important "
"options*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1373
msgid "This is the _preferred way to use these options_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1377
msgid ""
"These properties can be set in Qt Designer, in Python handler code or (if "
"appropriate) in stylesheets."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1379
msgid "These include:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1380
#, no-wrap
msgid "*`halCompBaseName`*"
msgstr ""

#. FIXME Does handler set basename also overrides CLI option ? Else, it's better be placed the line above it
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1387
#, no-wrap
msgid ""
"If left empty QtVCP will use the screen's name as the HAL component's basename.\n"
"If set, QtVCP will use this string as the HAL component's basename.\n"
"If the `-c` command line option is used when loading QtVCP, it will use the name specified on the command line - it overrides all above options. +"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1391
#, no-wrap
msgid ""
"If you programmatically set the basename in the `handlerfile` - it will override all above options.\n"
"This option cannot be set in stylesheets."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1391
#, no-wrap
msgid "*`notify_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1393
msgid "Hooking into the desktop notification bubbles for error and messages."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1393
#, no-wrap
msgid "*`notify_max_messages`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1395
msgid "Number of messages shown on screen at one time."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1395
#, no-wrap
msgid "*`catch_close_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1397
msgid "Catching the close event to pop up a _'are you sure' prompt_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1397
#, no-wrap
msgid "*`close_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1399
msgid "Color of transparent layer shown when quitting."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1399
#, no-wrap
msgid "*`catch_error_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1403
#, no-wrap
msgid ""
"_Monitoring of the LinuxCNC error channel_.\n"
"This also sends the message through `STATUS` to anything that registers."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1403
#, no-wrap
msgid "*`play_sounds_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1405
msgid "Playing sounds using `beep`, `espeak` and the system sound."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1405
#, no-wrap
msgid "*`use_pref_file_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1410
#, no-wrap
msgid ""
"Setting up a _preferences file path_.\n"
"Using the magic word `WORKINGFOLDER` in the preference file path will be replaced with the launched configuration path, ie. `WORKINFOLDER/my_preferences`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1410
#, no-wrap
msgid "*`use_send_zmq_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1412
msgid "Used to initiate _ZMQ based outgoing messages_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1412
#, no-wrap
msgid "*`use_receive_zmq_messages`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1417
#, no-wrap
msgid ""
"Used to initiate _ZMQ based in coming messages_.\n"
"These messages _can be used to call functions in the handler file_, allowing *external programs to integrate tightly with QtVCP* based screens."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1417
#, no-wrap
msgid "*`embedded_program_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1419
msgid "Embed programs defined in the _INI_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1419
#, no-wrap
msgid "*`default_embed_tab`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1422
#, no-wrap
msgid ""
"This is the property for a _default location to embed external programs_.\n"
"It should be set to name of a tab page widget in Qt Designer."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1422
#, no-wrap
msgid "*`focusOverlay_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1426
msgid ""
"Focus_overlay will put a transparent image or colored panel over the main "
"screen to emphasize focus to an external event - typically a dialog."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1426
#, no-wrap
msgid "*`messageDialog_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1428
msgid "Sets up the message dialog - used for general messages."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1428
#, no-wrap
msgid "*`message_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1430
msgid "Color of transparent layer shown when the message dialog is shown."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1430
#, no-wrap
msgid "*`closeDialog_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1432
msgid "Sets up the standard close screen prompt dialog."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1432
#, no-wrap
msgid "*`entryDialog_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1434
msgid "Sets up the numerical entry dialog."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1434
#, no-wrap
msgid "*`entryDialogSoftKey_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1436
msgid "Sets up a floating software keyboard when entry dialog is focused."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1436
#, no-wrap
msgid "*`entry_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1438
msgid "Color of transparent layer shown when the entry dialog is shown."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1438
#, no-wrap
msgid "*`toolDialog_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1440
msgid "Sets up the manual tool change dialog, including HAL pin."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1440
#, no-wrap
msgid "*`tool_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1442
msgid "Color of transparent layer shown when the tool dialog is shown."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1442
#, no-wrap
msgid "*`ToolUseDesktopNotify`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1444
msgid "Option to use desktop notify dialogs for manual tool change dialog."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1444
#, no-wrap
msgid "*`ToolFrameless`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1446
msgid "Frameless dialogs can not be easily moved by users."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1446
#, no-wrap
msgid "*`fileDialog_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1448
msgid "Sets up the file choosing dialog."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1448
#, no-wrap
msgid "*`file_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1450
msgid "Color of transparent layer shown when the file dialog is shown."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1450
#, no-wrap
msgid "*`keyboardDialog_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1452
msgid "Sets up a keyboard entry widget."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1452
#, no-wrap
msgid "*`keyboard_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1454
msgid "Color of transparent layer shown when the keyboard dialog is shown."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1454
#, no-wrap
msgid "*`vesaProbe_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1456
msgid "Sets up the Versa style probe dialog."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1456
#, no-wrap
msgid "*`versaProbe_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1458
msgid "Color of transparent layer shown when the `versaProbe` dialog is shown."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1458
#, no-wrap
msgid "*`macroTabDialog_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1460
msgid "Sets up the macro selection dialog."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1460
#, no-wrap
msgid "*`macroTab_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1462
msgid "Color of transparent layer shown when the `macroTab` dialog is shown."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1462
#, no-wrap
msgid "*`camViewDialog_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1464
msgid "Sets up the camera alignment dialog."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1464
#, no-wrap
msgid "*`camView_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1466
msgid "Color of transparent layer shown when the `camView` dialog is shown."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1466
#, no-wrap
msgid "*`toolOffset_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1468
msgid "Sets up the tool offset display/editor dialog."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1468
#, no-wrap
msgid "*`toolOffset_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1470
msgid "Color of transparent layer shown when the `toolOffset` dialog is shown."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1470
#, no-wrap
msgid "*`originOffset_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1472
msgid "Sets up the origin display/editor dialog."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1472
#, no-wrap
msgid "*`originOffset_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1475
msgid ""
"Color of transparent layer shown when the `originOffset` dialog is shown."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1475
#, no-wrap
msgid "*`calculatorDialog_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1477
msgid "Sets up the calculator entry dialog."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1477
#, no-wrap
msgid "*`calculator_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1479
msgid "Color of transparent layer shown when the calculator dialog is shown."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1479
#, no-wrap
msgid "*`machineLogDialog_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1481
msgid "Sets up a dialog to display logs from the machine and QtVCP."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1481
#, no-wrap
msgid "*`machineLog_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1483
msgid "Color of transparent layer shown when the `machineLog` dialog is shown."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1483
#, no-wrap
msgid "*`runFromLineDialog_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1486
msgid ""
"Sets up a dialog to display starting options when starting machine execution "
"from a arbitrary line."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1486
#, no-wrap
msgid "*`runFromLine_overlay_color`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1488
msgid ""
"Color of transparent layer shown when the `runFromLine` dialog is shown."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1489
#, no-wrap
msgid "Setting Properties Programmatically"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1492
msgid ""
"The screen designer chooses the *default settings of the `screenOptions` "
"widget*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1495
msgid ""
"Once chosen, most won't ever need to be changed. But if needed, some can be "
"changed in the handler file or in stylesheets."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1498
#, no-wrap
msgid ""
"*In the handler file*: +\n"
"Here we reference the widget by the Qt Designer user defined name:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1505
#, no-wrap
msgid ""
"# red,green,blue,alpha 0-255\n"
"color = QtGui.QColor(0, 255, 0, 191)\n"
"self.w.screen_options.setProperty('close_overlay_color', color)\n"
"self.w.screen_options.setProperty('play_sounds_option',False)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1510
#, no-wrap
msgid ""
"*In style sheets*: +\n"
"Here we can reference the widget by Qt Designer user defined name\n"
"or by widget class name.\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1519
#, no-wrap
msgid ""
"/* red, green, blue 0-255, alpha 0-100% or 0.0 to 1.0 */\n"
"/* the # sign is used to refer to Qt Designer defined widget name */\n"
"/* matches/applied to only this named widget */\n"
"#screen_options {\n"
"  qproperty-close_overlay_color: rgba(0, 255, 0, 0.75)\n"
"}\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1529
#, no-wrap
msgid ""
"/* red, green, blue 0-255, alpha 0-100% or 0.0 to 1.0 */\n"
"/* use widget class name */\n"
"/* matches/applied to all widgets of this class */\n"
"ScreenOptions {\n"
"  qproperty-close_overlay_color: rgba(0, 255, 0, 0.75)\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1534
#, no-wrap
msgid ""
"*Some settings are only checked on startup* so will not cause changes\n"
"after startup. In these cases you would need to _make the changes in Qt\n"
"Designer only_.\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1535
#, no-wrap
msgid "Preference File Entries"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1539
msgid ""
"If the _preference file option is selected_, `screenOption` widget will make "
"an *INI based preference file*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1542
msgid ""
"While _other QtVCP widgets will add to this list_, the `screenOptions` "
"widget will add these entries under the following headings:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1543
#, no-wrap
msgid "*`[SCREEN_OPTIONS]`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1544
#, no-wrap
msgid "*`catch_errors`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1545
#, no-wrap
msgid "*`desktop_notify`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1548
#, no-wrap
msgid ""
"Whether to display errors/messages in the system's notification\n"
"mechanism.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1548
#, no-wrap
msgid "*`notify_max_msgs`* _(int)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1550
#, no-wrap
msgid "Number of displayed errors at one time.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1550
#, no-wrap
msgid "*`shutdown_check`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1552
#, no-wrap
msgid "Whether to pop a confirmation dialog.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1552
#, no-wrap
msgid "*`sound_player_on`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1554
#, no-wrap
msgid "Turns all sounds on or off.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1554
#, no-wrap
msgid "*`[MCH_MSG_OPTIONS]`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1555
#, no-wrap
msgid "*`mchnMsg_play_sound`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1557 src/gui/qtvcp-widgets.adoc:1566
#, no-wrap
msgid "To play alert sound when dialog pops.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1557
#, no-wrap
msgid "*`mchnMsg_speak_errors`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1559
#, no-wrap
msgid "To use Espeak to speak error messages.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1559
#, no-wrap
msgid "*`mchnMsg_speak_text`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1561
#, no-wrap
msgid "To use Espeak to speak all other messages.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1561
#, no-wrap
msgid "*`mchnMsg_sound_type`* _(str)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1563 src/gui/qtvcp-widgets.adoc:1573
#: src/gui/qtvcp-widgets.adoc:1575
#, no-wrap
msgid "Sound to play when messages displayed. See notes below.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1563
#, no-wrap
msgid "*`[USER_MSG_OPTIONS]`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1564
#, no-wrap
msgid "*`usermsg_play_sound`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1566
#, no-wrap
msgid "*`userMsg_sound_type`* _(str)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1568
#, no-wrap
msgid "Sound to play when user messages displayed. See notes below.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1568
#, no-wrap
msgid "*`userMsg_use_focusOverlay`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1569
#, no-wrap
msgid "*`[SHUTDOWN_OPTIONS]`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1570
#, no-wrap
msgid "*`shutdown_play_sound`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1571
#, no-wrap
msgid "*`shutdown_alert_sound_type`* _(str)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1573
#, no-wrap
msgid "*`shutdown_exit_sound_type`* _(str)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1575
#, no-wrap
msgid "*`shutdown_msg_title`* _(str)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1577
#, no-wrap
msgid "Short title string to display in dialog.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1577
#, no-wrap
msgid "*`shutdown_msg_focus_text`* _(str)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1579
#, no-wrap
msgid "Large text string to superimpose in focus layer.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1579
#, no-wrap
msgid "*`shutdown_msg_detail`* _(str)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1581
#, no-wrap
msgid "Longer descriptive string to display in dialog\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1581
#, no-wrap
msgid "*`NOTIFY_OPTIONS`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1582
#, no-wrap
msgid "*`notify_start_greeting`* _(bool)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1584
#, no-wrap
msgid "Whether to display a greeting dialog on start up.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1584
#, no-wrap
msgid "*`notify_start_title`* _(str)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1587
#, no-wrap
msgid ""
"Short Title string. +\n"
"If the speak option is also selected it will be spoken with Espeak.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1587
#, no-wrap
msgid "*`notify_start_detail`* _(str)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1589
#, no-wrap
msgid "Longer description string.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1589
#, no-wrap
msgid "*`notify_start_timeout`* _(int)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1591
#, no-wrap
msgid "Time in seconds to display before closing.\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1592
#, no-wrap
msgid "`*_sound_type` entries"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1597
#, no-wrap
msgid ""
"*System Sounds* +\n"
"In Debian/Ubuntu/Mint based installations these _system sounds_ should\n"
"be available as sound-type entries above:\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1606
msgid "`BELL`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1609
msgid "These Sound options require `python3-gst1.0` installed."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1613
#, no-wrap
msgid ""
"*Audio Files* +\n"
"You can also specify a _file path to an arbitrary audio file_. +\n"
"You can use `~` in path to substitute for the user home file path.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1617
#, no-wrap
msgid ""
"*Kernel Beeps* +\n"
"If the `beep` _kernel module_ is installed and it is not disabled, these\n"
"sound-type entries are available:\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1625
#, no-wrap
msgid ""
"*Text-To-Speech* +\n"
"If the _Espeak_ module (`python3-espeak`) is installed, you can use the\n"
"`SPEAK` entry to pronounce text:\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1627
#, no-wrap
msgid "*`SPEAK '_my message_'`*\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1629
#, no-wrap
msgid "`StatusSlider` - Controller Setting Adjustment Slider Widget"
msgstr ""

#. TODO StatusSlider widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1634
msgid "This widget allow the user to *adjust a LinuxCNC setting via a slider*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1636 src/gui/qtvcp-widgets.adoc:1780
msgid "The widget can adjust:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1638 src/gui/qtvcp-widgets.adoc:1782
msgid "Jog rate"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1639 src/gui/qtvcp-widgets.adoc:1783
msgid "Angular jog rate"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1641 src/gui/qtvcp-widgets.adoc:1785
msgid "Spindle override rate"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1642 src/gui/qtvcp-widgets.adoc:1786
msgid "Rapid override rate"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1646
msgid "`StatusSlider` has the following properties:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1649
msgid "Sets option to make a HAL float pin that reflects current value."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1649
#, no-wrap
msgid "*`rapid_rate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1651
msgid "Selects a rapid override rate slider."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1651
#, no-wrap
msgid "*`feed_rate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1653
msgid "Selects a feed override rate slider."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1653
#, no-wrap
msgid "*`spindle_rate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1655
msgid "Selects a spindle override rate slider."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1655
#, no-wrap
msgid "*`jograte_rate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1657
msgid "Selects a linear jograte slider."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1657
#, no-wrap
msgid "*`jograte_angular_rate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1659
msgid "Selects a angular jograte slider."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1659
#, no-wrap
msgid "*`max_velocity_rate`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1661
msgid "Selects a maximum velocity rate slider."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1661
#, no-wrap
msgid "*`alertState`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1664
msgid ""
"String to define style change: `read-only`, `under`, `over` and `normal`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1664
#, no-wrap
msgid "*`alertUnder`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1666
msgid "Sets the float value that signals the stylesheet for 'under' warning."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1666
#, no-wrap
msgid "*`alertOver`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1668
msgid "Sets the float value that signals the stylesheet for 'over' warning."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1670 src/gui/qtvcp-widgets.adoc:2156
msgid "These can be set in:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1673
msgid "Python handler code,"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1679
#, no-wrap
msgid ""
"self.w.status_slider.setProperty('spindle_rate',True)\n"
"self.w.status_slider.setProperty('alertUnder',35)\n"
"self.w.status_slider.setProperty('alertOver',100)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1682
msgid "Or (if appropriate) in stylesheets."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1687
#, no-wrap
msgid ""
"/* warning colors for overrides if out of normal range*/\n"
"/* widget object name is slider_spindle_ovr */\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1694
#, no-wrap
msgid ""
"#slider_spindle_ovr[alertState='over'] {\n"
"    background: red;\n"
"}\n"
"#slider_spindle_ovr[alertState='under'] {\n"
"    background: yellow;\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1697
msgid "It is based on PyQt's _QSlider_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1699
#, no-wrap
msgid "`StateLED` - Controller State LED Widget"
msgstr ""

#. TODO StateLED widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1704
msgid "This widget gives *status on the selected LinuxCNC state*."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1705
#, no-wrap
msgid "States"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1707
msgid "The state options are:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1708
#, no-wrap
msgid "*`is_paused_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1709
#, no-wrap
msgid "*`is_estopped_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1710
#, no-wrap
msgid "*`is_on_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1711
#, no-wrap
msgid "*`is_idle_status_`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1712
#, no-wrap
msgid "*`is_homed_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1713
#, no-wrap
msgid "*`is_flood_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1714
#, no-wrap
msgid "*`is_mist_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1715
#, no-wrap
msgid "*`is_block_delete_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1716
#, no-wrap
msgid "*`is_optional_stop_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1717
#, no-wrap
msgid "*`is_joint_homed_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1718
#, no-wrap
msgid "*`is_limits_overridden_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1719
#, no-wrap
msgid "*`is_manual_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1720
#, no-wrap
msgid "*`is_mdi_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1721
#, no-wrap
msgid "*`is_auto_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1722
#, no-wrap
msgid "*`is_spindle_stopped_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1723
#, no-wrap
msgid "*`is_spindle_fwd_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1724
#, no-wrap
msgid "*`is_spindle_rev_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1725
#, no-wrap
msgid "*`is_spindle_at_speed_status`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1726
#, no-wrap
msgid "*`is_neg_limit_tripped`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1727
#, no-wrap
msgid "*`is_pos_limit_tripped`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1728
#, no-wrap
msgid "*`is_limits_tripped`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1733
msgid "There are properties that can be changed:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1736
msgid "Adds an output pin that reflects selected state."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1736
#, no-wrap
msgid "*`invert_state_status`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1738
msgid "Invert the LED state compared to the LinuxCNC state."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1740
msgid "Diameter of the LED."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1746
msgid "Qt Alignment hint."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1748
msgid "Current state of LED (for testing in Qt Designer)."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1755
msgid ""
"The LED properties can be defined in a stylesheet with the following code "
"added to the `.qss` file. +"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1763
#, no-wrap
msgid ""
"State_LED #name_of_led{       <1>\n"
"  qproperty-color: red;\n"
"  qproperty-diameter: 20;\n"
"  qproperty-flashRate: 150;\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1766
msgid "`name_of_led` would be the name defined in Qt Designer's editor."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1768
msgid "It is based on the _LED_ widget."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1770
#, no-wrap
msgid "`StatusAdjustmentBar` - Controller Value Setting Widget"
msgstr ""

#. TODO StatusAdjustmentBar widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1775
msgid ""
"This widget allows *setting values using buttons while displaying a bar*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1778
msgid ""
"It also has an _optional hi/low toggle button_ that can be held down to set "
"the *levels*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1788
msgid "It is based on PyQt's _QProgressBar_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1790
#, no-wrap
msgid "`SystemToolButton` - User System Selection Widget"
msgstr ""

#. TODO SystemToolButton widget capture/example
#. FIXME what/which "user system" ?
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1797
msgid ""
"This widget allows you to *manually select a user system by pressing and "
"holding*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1800
msgid ""
"If you don't set the button text it will automatically update to the current "
"system."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1804
#, no-wrap
msgid "`MacroTab` - Special Macros Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1806
#, no-wrap
msgid "QtVCP `MacroTab`: Special Macros Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:1807
#, no-wrap
msgid "QtVCP MacroTab: Special Macros Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:1807
#, no-wrap
msgid "images/qtvcp_macro.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1811
msgid ""
"This widget allows a user to *select and adjust special macro programs* for "
"doing small jobs."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1813
msgid ""
"It uses _images for visual representation_ of the macro and for an icon."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1815
msgid "It searches for special macros using the _INI definition_:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1820
#, no-wrap
msgid ""
"[RS274NGC]\n"
"SUBROUTINE_PATH =\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1826
msgid ""
"The macros are *`O-word` subroutines with special comments* to work with the "
"launcher.  The first three lines _must_ have the keywords below, the fourth "
"is optional."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1828
msgid "Here is a sample for the first four lines in an _O-word file_:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1835
#, no-wrap
msgid ""
"; MACROCOMMAND = Entry1,Entry2\n"
"; MACRODEFAULTS = 0,true\n"
"; MACROIMAGE = my_image.svg,Icon layer number,Macro layer number\n"
"; MACROOPTIONS = load:yes,save:yes,default:default.txt,path:~/macros\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1837
#, no-wrap
msgid "`MACROCOMMAND`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1840
msgid "This is the _first line_ in the O-word file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1843
#, no-wrap
msgid ""
"It is a *comma separated list of text to display above an entry*.\n"
"There will be *one for every variable required* in the O-word function."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1845
msgid "If the macro does not require variables, leave it empty:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1849
#, no-wrap
msgid "; MACROCOMMAND=\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1851
#, no-wrap
msgid "`MACRODEFAULTS`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1854
msgid "This must be the _second line_ in the O-word file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1857
msgid ""
"It is a *comma separated list of the default values for each variable* in "
"the O-word function."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1860
msgid ""
"If you use the word `true` or `false` in the list, a `*checkbutton*` will be "
"shown."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1861
#, no-wrap
msgid "`MACROIMAGE`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1864
msgid "This must be the _third line_ in the O-word file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1867
#, no-wrap
msgid ""
"*SVG Images* +\n"
"If using SVG image files, they must end with the `.svg` extension. +\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1870
msgid ""
"The images must be added to _SVG layers_ which are used to define the "
"different images for macro and icon."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1872
msgid "Value is comma separated list of three ordered fields:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1876
#, no-wrap
msgid "; MACROIMAGE=filename.svg,macro_layer_name[,icon_layer_name]\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1879 src/gui/qtvcp-widgets.adoc:1899
msgid "With:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1880
#, no-wrap
msgid "*`_filename_.svg`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1883
#, no-wrap
msgid ""
"SVG image file name as first field.\n"
"It is assumed to be in the same folder as the O-word file."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1883
#, no-wrap
msgid "*`*macro_layer_name`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1885
msgid "Macro image layer name as second field."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1885
#, no-wrap
msgid "*`icon_layer_name`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1889
msgid ""
"Icon image layer name as optional third field.  If the third entry is "
"missing, the same image will be used for macro and icon."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1892
#, no-wrap
msgid ""
"*PNG/JPG Images*: +\n"
"Value remains a comma separated list:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:1896
#, no-wrap
msgid "; MACROIMAGE=macro_image.(png|jpg)[,icon_image.(png|jpg)]\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1900
#, no-wrap
msgid "*`_macro_image_.(png|jpg)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1904
#, no-wrap
msgid ""
"Macro image file name as first field.\n"
"It is assumed that the image file are in the same folder than the macro."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1904
#, no-wrap
msgid "*`_icon_image_.(png|jpg)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1908
#, no-wrap
msgid ""
"*Icon image file name* as optional second field. +\n"
"If the second entry is missing the same image will be used for macro\n"
"and image.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1911
msgid ""
"If the keyword is present but the entries are missing, no images will be "
"used."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1912
#, no-wrap
msgid "`MACROOPTIONS`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1915
msgid "This _optional line must be the fourth_ line in the O-word file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1917
msgid "It is a comma separated list of keyword and data:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1918
#, no-wrap
msgid "*`LOAD:yes`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1920
msgid "Shows a load button."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1920
#, no-wrap
msgid "*`SAVE:yes`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1922
#, no-wrap
msgid "Shows a save button.\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1924
#, no-wrap
msgid "`MDILine` - MDI Commands Line Entry Widget"
msgstr ""

#. TODO MDILine widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1929
msgid "One can *enter MDI commands* here."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1931
msgid "A popup keyboard is available."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:1932
#, no-wrap
msgid "Embedded Commands"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1934
msgid "There are also *embedded commands* available from this Widget."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1937
msgid ""
"Enter any of these _case sensitive_ commands to load the respective program "
"or access the feature:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1938
#, no-wrap
msgid "*`HALMETER`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1941
msgid ""
"Starts LinuxCNC link:../hal/tools.html#sec:halmeter[`halmeter`] utility."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1941
#, no-wrap
msgid "*`HALSHOW`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1944
msgid ""
"Starts LinuxCNC link:../hal/halshow.html#cha:halshow[`halshow`] utility."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1944
#, no-wrap
msgid "*`HALSCOPE`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1947
msgid ""
"Starts LinuxCNC link:../hal/tutorial.html#sec:tutorial-halscope[`halscope`] "
"utility."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1947
#, no-wrap
msgid "*`STATUS`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1950
msgid "Starts LinuxCNC link:../man/man1/linuxcnctop.1.html[`status`] utility."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1950
#, no-wrap
msgid "*`CALIBRATION`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1954
msgid ""
"Starts LinuxCNC link:../getting-started/updating-linuxcnc."
"html#_calibration_emccalib_tcl[calibration] utility."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1954
#, no-wrap
msgid "*`CLASSICLADDER`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1959
msgid ""
"Starts the link:../ladder/classic-ladder.html[ClassicLadder GUI] if the "
"_ClassicLadder realtime HAL component_ was loaded by the machine's config "
"files."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1959
#, no-wrap
msgid "*`PREFERENCE`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1961
msgid "_Loads the preference file_ into the `GcodeEditor`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1961
#, no-wrap
msgid "*`CLEAR HISTORY`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1963
msgid "_Clears the MDI History_."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1963
#, no-wrap
msgid "*`net`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1966
#, no-wrap
msgid ""
"See link:../man/man1/halcmd.1.html#COMMANDS[`halcmd net` commands].\n"
"An error will result if the command is unsuccessful."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1967
msgid "_Syntax_: `net <signal name> <pin name>`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1968
msgid "__Example__: `net plasmac:jog-inhibit motion.jog-stop`"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1968
#, no-wrap
msgid "*`setp`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1973
#, no-wrap
msgid ""
"_Sets the value of a pin or a parameter_.\n"
"Valid values depend on the object type of the pin or parameter.\n"
"It results in an error if the data types do not match or the pin is connected to a signal."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1974
msgid "_Syntax_: `setp <pin/parameter-name> <value>`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1975
msgid "_Example_: `setp plasmac.resolution 100`"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:1975
#, no-wrap
msgid "*`unlinkp`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1980
#, no-wrap
msgid ""
"_Disconnects a pin from a signal_.\n"
"An error will result if the pin does not exist.\n"
"Running LinuxCNC from terminal may help determine the root cause as error messages from `hal_lib.c` will be displayed there."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1981
msgid "_Syntax_: `unlinkp <pin name>`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1982
msgid "__Example__: `unlinkp motion.jog-stop`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1986
msgid ""
"The `MDILine` function *`spindle_inhibit`* can be used by a GUI's handler "
"file to inhibit `M3`, `M4`, and `M5` spindle commands if necessary."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1988
msgid "It is based on PyQt's _QLineEdit_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:1990
#, no-wrap
msgid "`MDIHistory` - MDI Commands History Widget"
msgstr ""

#. TODO MDIHistory widget capture
#. TODO Merge MDILine and MDIHistory sections ?
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1996
msgid "Displays a *scrollable list of past MDI command*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:1998
msgid "An edit line is embedded for MDI commands."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2000
msgid "The same MDILine embedded commands may be accessed from this widget."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2003
msgid ""
"The history is _recorded on a file defined in the INI_ under the heading "
"`[DISPLAY]` (this shows the default):"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2007
#, no-wrap
msgid "MDI_HISTORY_FILE = '~/.axis_mdi_history'\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2010
#, no-wrap
msgid "`MDITouchy` - Touch Screen MDI Entry Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2012
#, no-wrap
msgid "QtVCP `MDITouchy`: Touch Screen MDI Entry Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2013
#, no-wrap
msgid "QtVCP MDITouchy: Touch Screen MDI Entry Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2013
#, no-wrap
msgid "images/qtvcp_mdiTouchy.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2017
msgid ""
"This widget displays *buttons and entry lines to use for entering MDI "
"commands*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2020
msgid ""
"Based on LinuxCNC's Touchy screen's MDI entry process, its large buttons are "
"most useful for touch screens."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2022
msgid "To use `MDITouchy`:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2025
msgid ""
"First press one of the `G/XY`, `G/RO`, `M` or `T` button.  On the left will "
"show the entry fields that can be filled out,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2026
msgid "Then press `Next` and `Back` to navigate between fields."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2027
msgid "`Calc` will pop up a calculator dialog."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2028
msgid "`Clear` clears the ecurrent entry."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2029
msgid "`Set Tool` FIXME"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2030
msgid "`Set Origin` FIXME"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2031
msgid "`Macro` FIXME"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2034
msgid ""
"The widget _requires an explicit call to MDITouchy Python code to actually "
"run the MDI command_:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2038
#, no-wrap
msgid ""
"*For handler file code* +\n"
"If the widget was named 'mditouchy' in Qt Designer, the command below\n"
"would run the displayed MDI command:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2042
#, no-wrap
msgid "self.w.mditouchy.run_command()\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2047
#, no-wrap
msgid ""
"*For action button use* +\n"
"If the widget was named 'mditouchy' in Qt Designer, use the action\n"
"button's 'Call Python commands' option and enter:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2051
#, no-wrap
msgid "INSTANCE.mditouchy.run_command()\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2054
msgid ""
"The macro button _cycles though macros defined in the INI [DISPLAY] heading_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2056
msgid "Add one or more `MACRO` lines of the following format:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2060
#, no-wrap
msgid "MACRO = macro_name [param1] [... paramN]\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2064
msgid ""
"In the example below, `increment` is the name of the macro, and it accepts "
"two parameters, named `xinc` and `yinc`."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2068
#, no-wrap
msgid "MACRO = incerment xinc yinc\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2073
msgid ""
"Now, place the macro in a file named `macro_name.ngc`, in the "
"`PROGRAM_PREFIX` directory, or any directory in the `SUBROUTINE_PATH` "
"specified in the INI file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2076
msgid ""
"Keeping on with the example above, it would be named `increment.ngc` and its "
"content could look like:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2083 src/gui/touchy.adoc:127
#, no-wrap
msgid ""
"O<increment> sub\n"
"G91 G0 X#1 Y#2\n"
"G90\n"
"O<increment> endsub\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2087
msgid ""
"Notice the _name of the sub matches the file name and macro name exactly_, "
"including case."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2093
#, no-wrap
msgid ""
"When you invoke the macro by pressing the Macro button you can enter values for parameters (`xinc` and `yinc` in our example).\n"
"These are passed to the macro as positional parameters: `#1`, `#2`... `#N` respectively.\n"
"Parameters you leave empty are passed as value `0`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2096 src/gui/touchy.adoc:139
msgid ""
"If there are several different macros, press the Macro button repeatedly to "
"cycle through them."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2100
msgid ""
"In this simple example, if you enter -1 for xinc and invoke the running of "
"the MDI cycle, a rapid 'G0' move will be invoked, moving one unit to the "
"left."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2105 src/gui/touchy.adoc:148
msgid ""
"This macro capability is useful for edge/hole probing and other setup tasks, "
"as well as perhaps hole milling or other simple operations that can be done "
"from the panel without requiring specially-written G-code programs."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2107
#, no-wrap
msgid "`OriginOffsetView` - Origins View and Setting Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2109
#, no-wrap
msgid "QtVCP `OriginOffsetsView`: Origins View and Setting Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2110
#, no-wrap
msgid "QtVCP OriginOffsetsView: Origins View and Setting Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2110
#, no-wrap
msgid "images/qtvcp_originoffsetview.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2114
msgid ""
"This widget allows one to *visualize and modify User System Origin offsets* "
"directly."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2116
msgid "It will _update LinuxCNC's Parameter file_ for changes made or found."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2119
msgid ""
"The settings can only be changed in LinuxCNC after homing and when the "
"motion controller is idle."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2122
msgid ""
"The display and entry will change between metric and imperial based on "
"LinuxCNC's _current_ `G20` / `G21` setting."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2124
msgid "The current in-use user system will be highlighted."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2129
#, no-wrap
msgid ""
"Extra actions can be integrated to manipulate settings.\n"
"These actions depend on extra code added either to a combined widget, like `originoffsetview` dialog, or the screens handler code.\n"
"Typical actions might be 'Clear Current User offsets' or 'Zero X'."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2131 src/gui/qtvcp-widgets.adoc:2281
msgid "Clicking on the columns and rows allows one to adjust the settings."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2133 src/gui/qtvcp-widgets.adoc:2283
msgid "A dialog can be made to popup for data or text entry."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2135
msgid "The comments section will be recorded in the preference file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2140 src/gui/qtvcp-widgets.adoc:2296
#, no-wrap
msgid ""
"It is based on PyQt's _QTableView_, _QAbstractTableModel_, and _ItemEditorFactory_.\n"
"Properties, functions and styles of the PyQt base objects are always available."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2143
msgid "`OriginOffsetView` has the following properties:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2144 src/gui/qtvcp-widgets.adoc:2301
#, no-wrap
msgid "*`dialog_code_string`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2146 src/gui/qtvcp-widgets.adoc:2303
msgid "Sets which dialog will pop up with numerical entry."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2146 src/gui/qtvcp-widgets.adoc:2303
#, no-wrap
msgid "*`test_dialog_code_string`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2148 src/gui/qtvcp-widgets.adoc:2305
msgid "Sets which dialog will pop up with text entry."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2150 src/gui/qtvcp-widgets.adoc:2307
msgid "Metric numerical data format."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2152 src/gui/qtvcp-widgets.adoc:2309
msgid "Imperial numerical data format."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2152 src/gui/qtvcp-widgets.adoc:2309
#, no-wrap
msgid "*`styleCodeHighlight`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2154
msgid "Current in-use user system highlight color."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2158
msgid "Qt Designer, in"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2159
msgid "Python handler code"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2164
#, no-wrap
msgid ""
"self.w.originoffsetview.setProperty('dialog_code','CALCULATOR')\n"
"self.w.originoffsetview.setProperty('metric_template','%10.3f')\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2166
msgid "Or (if appropriate) in stylesheets"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2172
#, no-wrap
msgid ""
"OriginOffsetView{\n"
"  qproperty-styleColorHighlist: lightblue;\n"
"}\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2175
#, no-wrap
msgid "`StateEnableGridlayout` - Controller State Enabled Container Widget"
msgstr ""

#. TODO StateEnableGridlayout widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2181
#, no-wrap
msgid ""
" _disable the widgets inside it depending on\n"
"LinuxCNC's current state_.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2183
msgid "This is a *container that other widgets can be placed in*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2186
msgid ""
"Embedded widgets are be greyed-out when the `StateEnableGridlayout` is "
"disabled."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2188
msgid "It can selectably react to:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2190
msgid "Machine on"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2191
msgid "Interpreter idle"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2192
msgid "Estop off"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2193
msgid "All-homed"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2195
msgid "It is based on PyQt's _QGridLayout_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2197
#, no-wrap
msgid "`MachineLog` - Machine Events Journal Display Widget"
msgstr ""

#. TODO MachineLog widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2201
msgid "FIXME MachineLog documentation"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2203
#, no-wrap
msgid "`JointEnableWidget` - FIXME"
msgstr ""

#. TODO JointEnableWidget widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2207
msgid "FIXME JointEnableWidget documentation"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2209
#, no-wrap
msgid "`StatusImageSwitcher` - Controller Status Image Switching Widget"
msgstr ""

#. TODO StatusImageSwitcher widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2214
msgid "This widget will *display images based on LinuxCNC status*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2216
msgid "You can watch:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2218
msgid "the state of the spindle,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2219
msgid "the state of all homed,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2220
msgid "the state of a certain axis homed,"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2221
msgid "the state of hard limits."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2223 src/gui/qtvcp-widgets.adoc:2249
msgid "It is based on PyQt's FIXME"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2225
#, no-wrap
msgid "`FileManager` - File Loading Selector Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2227
#, no-wrap
msgid "QtVCP `FileManager`: File Loading Selector Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2228
#, no-wrap
msgid "QtVCP FileManager: File Loading Selector Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2228
#, no-wrap
msgid "images/qtvcp_fileManager.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2231
msgid "This widget is used to *select files to load*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2233
msgid "It has a the ability to scroll the names with hardware such as a MPG."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2236
msgid ""
"One can class patch the function `load(self,fname)` to customize file "
"loading."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2239
msgid ""
"The function `getCurrentSelected()` will return a Python tuple, containing "
"the file path and whether it's a file."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2246
#, no-wrap
msgid ""
"temp = FILEMANAGER.getCurrentSelected()\n"
"print('filepath={}'.format(temp[0]))\n"
"if temp[1]:\n"
"    print('Is a file')\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2251
#, no-wrap
msgid "`RadioAxisSelector` - FIXME"
msgstr ""

#. TODO RadioAxisSelector widget capture/example
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2255
msgid "FIXME RadioAxisSelector documentation"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2257
#, no-wrap
msgid "`ToolOffsetView` - Tools Offsets View And Edit Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2259
#, no-wrap
msgid "QtVCP `ToolOffsetView`: Tools Offsets View And Edit Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2260
#, no-wrap
msgid "QtVCP ToolOffsetView: Tools Offsets View And Edit Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2260
#, no-wrap
msgid "images/qtvcp_tooloffsetview.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2263
msgid "This widget *displays and allows one to modify tools offsets*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2265
msgid "It will _update LinuxCNC's tool table_ for changes made or found."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2268
msgid ""
"The tool settings can only be changed in LinuxCNC after homing and when the "
"motion controller is idle."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2271
msgid ""
"The display and entry will change between metric and imperial based on "
"LinuxCNC's _current_ `G20`/`G21` setting."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2274
msgid ""
"The current in-use tool will be highlighted, and the current selected tool "
"will be highlighted in a different color."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2279
#, no-wrap
msgid ""
"The checkbox beside each tool can be used to select too for an _action_ that depends on extra code added either to a combined widget like the `toolOffsetView` dialog or the screens handler code.\n"
"Typical actions are 'load selected tool', 'delete selected tools', etc."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2286
msgid ""
"The comments section will typically be displayed in the manual tool change "
"dialog."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2288
msgid ""
"If using a _lathe configuration_, there can be columns for X and Z wear."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2291
msgid ""
"To use these columns to adjust the _tool wear_, it requires a remapped tool "
"change routine."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2300
msgid ""
"`ToolOffsetView` has properties that can be set in Qt Designer, in Python "
"handler code or (if appropriate) in stylesheets:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2311
msgid "Current tool-in-use highlight color."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2311
#, no-wrap
msgid "*`styleCodeSelected`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2313
msgid "Selected highlight color."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2315
msgid "In a handler file:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2320
#, no-wrap
msgid ""
"self.w.tooloffsetview.setProperty('dialog_code','CALCULATOR')\n"
"self.w.tooloffsetview.setProperty('metric_template','%10.3f')\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2323
msgid "and in style sheets:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2330
#, no-wrap
msgid ""
"ToolOffsetView{\n"
"  qproperty-styleColorHighlist: lightblue;\n"
"  qproperty-styleColorSelected: #444;\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2335
msgid ""
"`ToolOffsetView` has some functions useful for screen builders to add "
"actions:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2336
#, no-wrap
msgid "*`add_tool()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2338
msgid "Adds a blank dummy tool (99) that the user can edit to suit."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2338
#, no-wrap
msgid "*`delete_tools()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2340
msgid "Deletes the currently checkbox selected tools."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2340
#, no-wrap
msgid "*`get_checked_list()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2342
msgid "Returns a list of tools selected by checkboxs."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2342
#, no-wrap
msgid "*`set_all_unchecked()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2344
msgid "Uncheck all selected tools."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2345
#, no-wrap
msgid "Example for handler file executing aformentioned functions."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2352
#, no-wrap
msgid ""
"self.w.tooloffsetview.add_tool()\n"
"self.w.tooloffsetview.delete_tools()\n"
"toolList = self.w.tooloffsetview.get_checked_list()\n"
"self.w.tooloffsetview.set_all_unchecked()\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2355
#, no-wrap
msgid "`BasicProbe` - Simple Mill Probing Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2357
#, no-wrap
msgid "QtVCP `BasicProbe`: Simple Mill Probing Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2358
#, no-wrap
msgid "QtVCP BasicProbe: Simple Mill Probing Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2358
#, no-wrap
msgid "images/qtvcp_basicProbe.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2362
msgid "Widget for *probing on a mill*.  Used by the _QtDragon_ screen."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-widgets.adoc:2365
#, no-wrap
msgid "Dialog Widgets"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2369
msgid ""
"Dialogs are used to *present or request immediately required information* in "
"a focused way."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2371
msgid ""
"The typical used dialogs can be loaded using the `ScreenOptions` _widget_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2375
msgid ""
"You can also add them directly to the _UI_ - but each dialog must have a "
"unique launch name or you will see multiple dialogs displayed, one after "
"another."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2376
#, no-wrap
msgid "Use dialogs from Python Code"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2380
msgid ""
"You can show dialogs directly with _Python code_ but a safer way is to *use "
"`STATUS` messages* to request the dialog to launch and to return the "
"gathered information."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2384
#, no-wrap
msgid ""
"*Register to `STATUS` channel*: +\n"
"To set this up, first register to catch the `general` message from\n"
"`STATUS`:\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2396
#, no-wrap
msgid ""
"*Add a function to call a dialog*: +\n"
"This function must _build a message `dict` to send to the dialog_. +\n"
"This message will be passed back in the general message with the\n"
"addition of the _`return` variable_. +\n"
"It is possible to add _extra user information_ to the message. The\n"
"dialog will ignore these and pass them back.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2396
#, no-wrap
msgid "`NAME`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2398
#, no-wrap
msgid "Launches code name of dialog to show.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2398
#, no-wrap
msgid "`ID`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2400
#, no-wrap
msgid "A unique id so we process only a dialog that we requested.\n"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2400
#, no-wrap
msgid "`TITLE`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2402
#, no-wrap
msgid "The title to use on the dialog.\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2410
#, no-wrap
msgid ""
"def show_dialog(self):\n"
"    mess = {'NAME':'ENTRY','ID':'__test1__',\n"
"            'TITLE':'Test Entry'}\n"
"    ACTION.CALL_DIALOG, mess)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2417
#, no-wrap
msgid ""
"*Add a callback function that processes the general message*: +\n"
"Keep in mind this function will _get all general messages_ so the\n"
"`dict` keynames are not guaranteed to be there. +\n"
"Using the `.get()` function and/or using `try`/`except` is advisable. +\n"
"This function should:\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2418
#, no-wrap
msgid "check the name and id is the same as we sent,\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2419
#, no-wrap
msgid "then extract the return value and any user variables.\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2430
#, no-wrap
msgid ""
"# process the STATUS return message\n"
"def return_value(self, w, message):\n"
"    rtn = message.get('RETURN')\n"
"    code = bool(message.get('ID') == '__test1__')\n"
"    name = bool(message.get('NAME') == 'ENTRY')\n"
"    if code and name and not rtn is None:\n"
"        print('Entry return value from {} = {}'.format(code, rtn))\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2433
#, no-wrap
msgid "`LcncDialog` - General Message Dialog Widget"
msgstr ""

#. TODO LcncDialog widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2438
msgid "This is a *general message dialog widget*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2440
msgid ""
"If there is a Focus Overlay widget present, it can signal it to display."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2442
msgid "If the sound library is set up it can _play sounds_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2445
msgid ""
"There are _options_ that can be set when requesting a dialog, these would be "
"added to the message `dict`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2446
#, no-wrap
msgid "*`TITLE`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2448
msgid "Title of the dialog window."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2448
#, no-wrap
msgid "*`MESSAGE`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2450
msgid "Title message text in bold."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2450
#, no-wrap
msgid "*`MORE`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2452
msgid "Standard text under the heading."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2452
#, no-wrap
msgid "*`DETAILS`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2454
msgid "Initial hidden text."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2454
#, no-wrap
msgid "*`TYPE`* _(`OK`|`YESNO`|`OKCANCEL`)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2455
#, no-wrap
msgid "*`ICON`* (`QUESTION`|`INFO`|`CRITICAL`|`WARNING`)"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2456
#, no-wrap
msgid "*`PINNAME`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2458
msgid "Not implemented yet."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2458
#, no-wrap
msgid "*`FOCUSTEXT`* _(overlay text|`None`)_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2461
msgid "Text to display if focus overlay is used.  Use `None` for no text."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2461
#, no-wrap
msgid "*`FOCUSCOLOR`* (`QColor(_R, G, B, A_)`)"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2463
msgid "Color to use if focus overlay is used."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2463
#, no-wrap
msgid "*`PLAYALERT`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2466
msgid "Sound to play if sound is available, i.e., `SPEAK` _<spoken_message>_ ."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2469
msgid ""
"When using `STATUS` 's `request-dialog` function, the _default launch name_ "
"is *`MESSAGE`*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2471 src/gui/qtvcp-widgets.adoc:2489
#: src/gui/qtvcp-widgets.adoc:2536
msgid "It is based on PyQt's _QMessagebox_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2473
#, no-wrap
msgid "`ToolDialog` - Manual Tool Change Dialog Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2475
#, no-wrap
msgid "QtVCP `ToolDialog`: Manual Tool Change Dialog"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2476
#, no-wrap
msgid "QtVCP ToolDialog: Manual Tool Change Dialog"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2479
msgid "This is used as a *manual tool change prompt*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2483
msgid ""
"It has _HAL pins to connect to the machine controller_.  The pins are named "
"the same as the original AXIS manual tool prompt and works the same."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2485
msgid "The tool change dialog _can only be launched by HAL pins_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2487 src/gui/qtvcp-widgets.adoc:2499
#: src/gui/qtvcp-widgets.adoc:2580
msgid ""
"If there is a Focus Overlay widget present, it will signal it to display."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2491
#, no-wrap
msgid "`FileDialog` - Load and Save File Chooser Dialog Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2493
#, no-wrap
msgid "QtVCP `FileDialog`: Load and Save File Chooser Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2494
#, no-wrap
msgid "QtVCP FileDialog: Load and Save File Chooser Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2494
#, no-wrap
msgid "images/qtvcp_fileDialog.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2497
msgid "This is used to *load G-code files*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2502
msgid ""
"When using `STATUS` 's `request-dialog` function, the default launch names "
"are *`LOAD`* or *`SAVE`*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2505
msgid ""
"There are _options_ that can be set when requesting a dialog, these would be "
"added to the message dict:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2506
#, no-wrap
msgid "*`EXTENSIONS`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2507
#, no-wrap
msgid "*`FILENAME`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2508
#, no-wrap
msgid "*`DIRECTORY`*"
msgstr ""

#.  end definition list
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2512
msgid "An example Python call, for a _load dialog_:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2521
#, no-wrap
msgid ""
"mess = {'NAME':'LOAD','ID':'_MY_DIALOG_',\n"
"            'TITLE':'Load Some text File',\n"
"            'FILENAME':'~/linuxcnc/nc_files/someprogram.txt',\n"
"            'EXTENSIONS':'Text Files (*.txt);;ALL Files (*.*)'\n"
"            }\n"
"ACTION.CALL_DIALOG(mess)\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2524
msgid "And for a _save dialog_"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2533
#, no-wrap
msgid ""
"mess = {'NAME':'SAVE','ID':'_MY_DIALOG_',\n"
"            'TITLE':'Save Some text File',\n"
"            'FILENAME':'~/linuxcnc/nc_files/someprogram.txt',\n"
"            'EXTENSIONS':'Text Files (*.txt);;ALL Files (*.*)'\n"
"            }\n"
"ACTION.CALL_DIALOG(mess)\n"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2538
#, no-wrap
msgid "`OriginOffsetDialog` - Origin Offset Setting Dialog Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2540
#, no-wrap
msgid "QtVCP `OriginOffsetDialog`: Origin Offset Setting Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2541
#, no-wrap
msgid "QtVCP OriginOffsetDialog: Origin Offset Setting Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2541
#, no-wrap
msgid "images/qtvcp_offsetpage.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2545
msgid ""
"This widget allows one to *modify User System origin offsets directly* in a "
"dialog form."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2548 src/gui/qtvcp-widgets.adoc:2564
msgid ""
"If there is an Focus Overlay widget present, it will signal it to display."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2551
msgid ""
"When using `STATUS` 's `request-dialog` function, the default launch name is "
"*`ORIGINOFFSET`*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2553 src/gui/qtvcp-widgets.adoc:2569
#: src/gui/qtvcp-widgets.adoc:2585 src/gui/qtvcp-widgets.adoc:2597
#: src/gui/qtvcp-widgets.adoc:2615 src/gui/qtvcp-widgets.adoc:2634
#: src/gui/qtvcp-widgets.adoc:2645 src/gui/qtvcp-widgets.adoc:2655
#: src/gui/qtvcp-widgets.adoc:2665 src/gui/qtvcp-widgets.adoc:2683
msgid "It is based on PyQt's _QDialog_."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2555
#, no-wrap
msgid "`ToolOffsetDialog` - Tool Offset Setting Dialog Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2557
#, no-wrap
msgid "QtVCP `ToolOffsetDialog`: Tool Offset Setting Dialog Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2558
#, no-wrap
msgid "QtVCP ToolOffsetDialog: Tool Offset Setting Dialog Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2558
#, no-wrap
msgid "images/qtvcp_toolOffset.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2562
msgid ""
"This widget allows one to *modify Tool offsets directly* in a dialog form."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2567
msgid ""
"When using `STATUS` 's `request-dialog` function, the default launch name is "
"*`TOOLOFFSET`*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2571
#, no-wrap
msgid "`MacroTabDialog` - Macro Launch Dialog Widget"
msgstr ""

#. TODO MacroTab dialog capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2576
msgid "This is a dialog to *display the macrotab widget*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2578
msgid "`MacroTab` displays a _choice of macro programs to run using icons_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2583
msgid ""
"When using ``STATUS``'s `request-dialog` function, the default launch name "
"is *`MACROTAB`*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2587
#, no-wrap
msgid "`CamViewDialog` - WebCam Part Alignment Dialog Widget"
msgstr ""

#. TODO CamView dialog capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2592
msgid ""
"This is a dialog to *display the CamView widget for Webcam part alignment*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2595
msgid ""
"When using ``STATUS``'s `request-dialog` function, the default launch name "
"is *`CAMVIEW`*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2599
#, no-wrap
msgid "`EntryDialog` - Edit Line Dialog Widget"
msgstr ""

#. TODO EntryDialog dialog capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2605
msgid ""
"This is a dialog to *display an edit line for information entry*, such as "
"origin offset."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2607 src/gui/qtvcp-widgets.adoc:2626
msgid "It returns the entry via `STATUS` messages using a Python `DICT`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2610 src/gui/qtvcp-widgets.adoc:2629
msgid ""
"The `DICT` contains at minimum, the name of the dialog requested and an id "
"code."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2613
msgid ""
"When using ``STATUS``'s `request-dialog` function, the default launch name "
"is *`ENTRY`*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2617
#, no-wrap
msgid "`CalculatorDialog` - Calculator Dialog Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2619
#, no-wrap
msgid "QtVCP `CalculatorDialog`: Calculator Dialog Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2620
#, no-wrap
msgid "QtVCP CalculatorDialog: Calculator Dialog Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2620
#, no-wrap
msgid "images/qtvcp_calculator.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2624
msgid ""
"This is a dialog to *display a calculator for numeric entry*, such as origin "
"offset."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2632
msgid ""
"When using ``STATUS``'s `request-dialog` function, the default launch name "
"is *`CALCULATOR`*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2636
#, no-wrap
msgid "`RunFromLine` - Run-From-Line Dialog Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2638
#, no-wrap
msgid "QtVCP `RunFromLine`: Run-From-Line Dialog Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2639
#, no-wrap
msgid "QtVCP RunFromLine: Run-From-Line Dialog Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2639
#, no-wrap
msgid "images/qtvcp_runFromLine.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2643
msgid ""
"Dialog to *preset spindle settings before running a program from a specific "
"line*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2647
#, no-wrap
msgid "`VersaProbeDialog` - Part Touch Probing Dialog Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2649
#, no-wrap
msgid "QtVCP `VersaProbeDialog`: Part Touch Probing Dialog Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2650
#, no-wrap
msgid "QtVCP VersaProbeDialog: Part Touch Probing Dialog Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2650
#, no-wrap
msgid "images/qtvcp_versaProbe.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2653
msgid ""
"This is a dialog to display a *part probing screen based on Versa Probe*."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2657
#, no-wrap
msgid "`MachineLogDialog` - Machine and Debugging Logs Dialog Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2659
#, no-wrap
msgid "QtVCP `MachineLogDialog`: Machine and Debugging Logs Dialog Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2660
#, no-wrap
msgid "QtVCP MachineLogDialog: Machine and Debugging Logs Dialog Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2660
#, no-wrap
msgid "images/qtvcp_machineLog.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2663
msgid ""
"This is a dialog to *display the machine log and QtVCP's debugging log*."
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-widgets.adoc:2667
#, no-wrap
msgid "Other Widgets"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2670
msgid "Other available widgets:"
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2672
#, no-wrap
msgid "`NurbsEditor` - NURBS Editing Widget"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2674
#, no-wrap
msgid "QtVCP `NurbsEditor`: NURBS Editing Widget"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2675
#, no-wrap
msgid "QtVCP NurbsEditor: NURBS Editing Widget"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2675
#, no-wrap
msgid "images/qtvcp_nurbsEditor.png"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2679
msgid ""
"The Nurbs editor allows you to *manipulate a NURBS based geometry* on screen "
"and then *convert NURBS to G-code*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2681
msgid "You can edit the G-code on screen and then send it to LinuxCNC."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2685
#, no-wrap
msgid "`JoyPad` - 5 button D-pad Widget"
msgstr ""

#. TODO JoyPad widget capture
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2690
msgid "It is the base class for the `HALPad` widget."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2693
msgid ""
"This widget looks and acts like a *5 button D-pad, with a LED like "
"indicators in a ring*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2695
msgid "You can put text or icons in each of the button positions."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2697
msgid "You can _connect to output signals_ when the buttons are pressed."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2699
msgid "There are also _input slots_ to change the color of the indicator(s)."
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2700
#, no-wrap
msgid "ENUMS"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2703
#, no-wrap
msgid ""
"There are *enumerated constants used to reference indicator positions*.\n"
"They are used in Qt Designer editor's property editor or in Python code."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2704
#, no-wrap
msgid "*`NONE`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2705
#, no-wrap
msgid "*`LEFT`, `L`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2706
#, no-wrap
msgid "*`RIGHT`, `R`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2707
#, no-wrap
msgid "*`CENTER`, `C`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2708
#, no-wrap
msgid "*`TOP`, `T`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2709
#, no-wrap
msgid "*`BOTTOM`, `B`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2710
#, no-wrap
msgid "*`LEFTRIGHT`, `X`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2711
#, no-wrap
msgid "*`TOPBOTTOM`, `A`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2715
msgid ""
"For Python handler code, you use the widget name in Qt Designer plus the "
"reference constant:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2719
#, no-wrap
msgid "self.w.joypadname.set_highlight(self.w.joypadname.LEFT)\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2721
#, no-wrap
msgid "Useful Override-able Functions"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2724
msgid "As coded they _issue signals for the button pressed or released_."
msgstr ""

#. FIXME Is this really clear ?
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2728
msgid ""
"On signal outputs a string code for the button, one signal outputs a bool "
"value."
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2734
#, no-wrap
msgid ""
"def _pressedOutput(self, btncode):\n"
"    self.joy_btn_pressed.emit(btncode)\n"
"    self['joy_{}_pressed'.format(btncode.lower())].emit(True)\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2738
#, no-wrap
msgid ""
"def _releasedOutput(self, btncode):\n"
"    self.joy_btn_released.emit(btncode)\n"
"    self['joy_{}_pressed'.format(btncode.lower())].emit(False)\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2740
#, no-wrap
msgid "Callable Functions"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2741
#, no-wrap
msgid "*`reset_highlight()`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2743
msgid "Clears the highlight indicator."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2743
#, no-wrap
msgid "*`set_highlight(_button_, state=_True_)`*"
msgstr ""

#. FIXME Document "strings letters"
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2745
msgid "Set the highlight indicator in position `button` to state `state`. +"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2748
msgid ""
"You can use _strings letters_ (`LRCTBXA`) or _position_ `ENUMS` for the "
"button argument."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2748
#, no-wrap
msgid "*`set_button_icon(_button_, _pixmap_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2750
msgid "Sets the button's icon pixmap."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2750
#, no-wrap
msgid "*`set_button_text(_button_, _text_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2752
msgid "Sets the button's icon text."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2752
#, no-wrap
msgid "*`set_tooltip(_button_, _text_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2754
msgid "Sets the buttons pop-up tooltip descriptive text."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2754
#, no-wrap
msgid "*`setLight(_state_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2758
#, no-wrap
msgid ""
"Sets the highlight indicator to the `True` color or `False` color.\n"
"The `set_highlight()` function must be used prior to set the indicator to use."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2761
msgid "These signals will be *sent when buttons are pressed*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2763
msgid "They can be connected to in Qt Designer editor or Python code."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2765
msgid "The first two output a string that indicates the button pressed:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2766
#, no-wrap
msgid "*`joy_btn_pressed`* _(string)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2767
#, no-wrap
msgid "*`joy_btn_released`* _(string)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2768
#, no-wrap
msgid "*`joy_l_pressed`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2769
#, no-wrap
msgid "*`joy_l_released`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2770
#, no-wrap
msgid "*`joy_r_pressed`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2771
#, no-wrap
msgid "*`joy_r_released`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2772
#, no-wrap
msgid "*`joy_c_pressed`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2773
#, no-wrap
msgid "*`joy_c_released`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2774
#, no-wrap
msgid "*`joy_t_pressed`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2775
#, no-wrap
msgid "*`joy_t_released`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2776
#, no-wrap
msgid "*`joy_b_pressed`* _(bool)_"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2777
#, no-wrap
msgid "*`joy_b_released`* _(bool)_"
msgstr ""

#.  end definition list
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2781
msgid "They are based on PyQt's _Signal_ (`QtCore.pyqtSignal()`)"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2782
#, no-wrap
msgid "Slots"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2784
msgid "Slots can be connected to in Qt Designer editor or Python code:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2785
#, no-wrap
msgid "*`set_colorStateTrue()`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2786
#, no-wrap
msgid "*`set_colorStateFalse()`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2787
#, no-wrap
msgid "*`set_colorState(_bool_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2789
#, no-wrap
msgid "*`set_true_color(_str_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2790
#, no-wrap
msgid "*`set_true_color(_qcolor_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2792
#, no-wrap
msgid "*`set_false_color(_str_)`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2793
#, no-wrap
msgid "*`set_false_color(_qcolor_)`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2798
msgid "These can be set in stylesheets or Python code:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2799
#, no-wrap
msgid "*`highlightPosition`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2801
msgid "Set the indicator position."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2801
#, no-wrap
msgid "*`setColorState`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2803
msgid "Select the color state of the indicator."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2812
#, no-wrap
msgid ""
"A file path or resource path to an image to display in the described button location.\n"
"If the reset button is pressed in Qt Designer editor property, the image will not be displayed (allowing optionally text)."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2823
msgid ""
"Color selection for the center LED ring to be displayed when the `BASENAME."
"light.center` _HAL pin_ is `True` or `False`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2825
#, no-wrap
msgid "*`button_font`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2829
msgid "The above properties could be set in:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2834
#, no-wrap
msgid ""
"*Stylesheets*: +\n"
"You would usually use the Qt Designer widget name with `#` _prefix_ to\n"
"set individual widget properties, otherwise you would use the `JoyPad`\n"
"_class name_ to set all `JoyPad` widgets the same:\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2841
#, no-wrap
msgid ""
"#joypadname{\n"
"  qproperty-true_color: #000;\n"
"  qproperty-false_color: #444;\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2844
#, no-wrap
msgid "*In Python handler code*: +\n"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2849
#, no-wrap
msgid ""
"self.w.joypadename.setProperty('true_color','green')\n"
"self.w.joypadename.setProperty('false_color','red')\n"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-widgets.adoc:2852
#, no-wrap
msgid "BaseClass/Mixin Widgets"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2855
msgid ""
"These widgets are used *combine different properties and behaviours into "
"other widgets*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2858
msgid ""
"You will see them as a collapsible header in the Qt Designer properties "
"column."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:2860
#, no-wrap
msgid "`IndicatedPushButtons`"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2863
msgid "This class *modifies `QPushButton` behaviour*."
msgstr ""

#. type: Title ====
#: src/gui/qtvcp-widgets.adoc:2865
#, no-wrap
msgid "Indicator Option"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2868
#, no-wrap
msgid "*`indicator_option`* _puts a 'LED' on the top of the button_.\n"
msgstr ""

#. type: Block title
#: src/gui/qtvcp-widgets.adoc:2869
#, no-wrap
msgid "QtVCP `PushButton`: Indicated Action Button, LED Indicator Option"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/qtvcp-widgets.adoc:2870
#, no-wrap
msgid "QtVCP PushButton: Indicated Action Button, LED Indicator Option"
msgstr ""

#. type: Target for macro image
#: src/gui/qtvcp-widgets.adoc:2870
#, no-wrap
msgid "images/qtvcp_actionButton.png"
msgstr ""

#. FIXME Better document IndicatedPushButton
#.  https://github.com/LinuxCNC/linuxcnc/blob/master/lib/python/qtvcp/widgets/simple_widgets.py#L317
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2876
#, no-wrap
msgid ""
"It can be a _triangle_, _circle_, _top bar_, or _side bar_.\n"
"The _size_ and _position_ can be adjusted."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2878
msgid "It will indicate:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2880
msgid "the *current state of the button*, or"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2881
msgid "the *state of a HAL pin*, or"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2882
#, no-wrap
msgid "*LinuxCNC status*.\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2886
msgid ""
"These properties are available to customize the indicator (not all are "
"applicable to every LED shape):"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2887
#, no-wrap
msgid "*`on_color`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2889
#, no-wrap
msgid "*`indicator_size`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2890
#, no-wrap
msgid "*`circle_diameter`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2891
#, no-wrap
msgid "*`shape_option`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2892
#, no-wrap
msgid "*`right_edge_offset`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2893
#, no-wrap
msgid "*`top_edge_offset`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2894
#, no-wrap
msgid "*`height_fraction`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2895
#, no-wrap
msgid "*`width_fraction`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2896
#, no-wrap
msgid "*`corner_radius`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2898
msgid "Indicator corner radius."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2901
msgid ""
"The LED indicator color can be defined in a _stylesheet_ with the following "
"code added to the `.qss` file:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2908
#, no-wrap
msgid ""
"Indicated_PushButton{\n"
"  qproperty-on_color: #000;\n"
"  qproperty-off_color: #444;\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2911
msgid "Or for a particular button:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2918
#, no-wrap
msgid ""
"Indicated_PushButton #button_estop{\n"
"  qproperty-on_color: black;\n"
"  qproperty-off_color: yellow;\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2922
msgid "`IndicatedPushButton` have *exclusive options*:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2923
#, no-wrap
msgid "*`indicator_HAL_pin_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2926
msgid ""
"Adds a `halpin`, named `<buttonname>-led` that controls the button indicator "
"state."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2926
#, no-wrap
msgid "*`indicator_status_option`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2928
msgid "Makes the LED indicate the state of these selectable LinuxCNC status:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2930
msgid "_Is Estopped_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2931
msgid "_Is On_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2932
msgid "_All Homed_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2933
msgid "_Is Joint Homed_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2934
msgid "_Idle_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2935
msgid "_Paused_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2936
msgid "_Flood_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2937
msgid "_Mist_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2938
msgid "_Block Delete_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2939
msgid "_Optional Stop_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2940
msgid "_Manual_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2941
msgid "_MDI_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2942
msgid "_Auto_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2943
msgid "_Spindle Stopped_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2944
msgid "_Spindle Forward_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2945
msgid "_Spindle Reverse_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2946
msgid "_On Limits_"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2952
#, no-wrap
msgid ""
"Some `indicator_status_options` holds a property that can be used with a _stylesheet_ to change the color of the button based on the state of the property in LinuxCNC.\n"
"Currently these status properties can be used to auto style buttons:"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2954
msgid "`is_estopped_status` will toggle the `isEstop` property"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2955
msgid "`is_on_status` will toggle the `isStateOn` property"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2957
msgid ""
"`is_manual_status`, `is_mdi_status`, `is_auto_status` will toggle the "
"`isManual`, `isMDI`, `isAuto` properties."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2958
msgid "`is_homed_status` will toggle the 'isAllHomed' property"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2961
msgid ""
"Here is a sample stylesheet entry setting the background of mode button "
"widgets when LinuxCNC is in that mode:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2973
#, no-wrap
msgid ""
"ActionButton[isManual=true] {\n"
"    background: red;\n"
"}\n"
"ActionButton[isMdi=true] {\n"
"    background: blue;\n"
"}\n"
"ActionButton[isAuto=true] {\n"
"    background: green;\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2977
msgid ""
"Here is how you specify a particular widget by it's objectName in Qt "
"Designer:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:2983
#, no-wrap
msgid ""
"ActionButton #estop button [isEstopped=false] {\n"
"    color: yellow;\n"
"}\n"
msgstr ""

#. type: Title ====
#: src/gui/qtvcp-widgets.adoc:2986
#, no-wrap
msgid "Enabled by LinuxCNC State"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2990
msgid ""
"Often, having the button disabled and enabled based on the state of "
"LinuxCNC's motion controller is necessary."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:2992
msgid "There are several properties that can be selected to aid with this:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2993
#, no-wrap
msgid "*`isAllHomedSentive`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2994
#, no-wrap
msgid "*`isOnSensitive`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2995
#, no-wrap
msgid "*`isIdleSensitive`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2996
#, no-wrap
msgid "*`isRunSensitive`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2997
#, no-wrap
msgid "*`isManSensitive`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2998
#, no-wrap
msgid "*`isMDISensitive`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:2999
#, no-wrap
msgid "*`isAitoSensitive`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3002
msgid "You can select multiple properties for combined requirements."
msgstr ""

#. type: Title ====
#: src/gui/qtvcp-widgets.adoc:3004
#, no-wrap
msgid "Text Changes On State"
msgstr ""

#. FIXME What is a 'checkable' button ? A checkbox ?
#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3009
msgid ""
"Choosing the *`checked_state_text_option`* allows a 'checkable' button to "
"_change the text based on it's checked state_."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3011
msgid "It uses the following properties to specify the text for each state:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:3012
#, no-wrap
msgid "*`true_state_string`*"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:3013
#, no-wrap
msgid "*`false_state_string`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3016
msgid "`\\\\n` will be converted to a newline."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3018
msgid "You can set/change these in stylesheets:"
msgstr ""

#. type: delimited block -
#: src/gui/qtvcp-widgets.adoc:3025
#, no-wrap
msgid ""
"ActionButton #action_aux{\n"
"  qproperty-true_state_string: \"Air\\\\nOn\";\n"
"  qproperty-false_state_string: \"Air\\\\nOff\";\n"
"}\n"
msgstr ""

#. type: Title ====
#: src/gui/qtvcp-widgets.adoc:3028
#, no-wrap
msgid "Call Python Commands On State"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3033
msgid ""
"The *`python_command_option`* allow small snippets of Python code to be run "
"from the push of a button, without having to edit the handler file.  Though, "
"it can call functions in the handler file."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3035
msgid "When using the `command_string` properties."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:3036
#, no-wrap
msgid "*`true_python_cmd_string`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3038
msgid "A Python command that will be called when the button is toggled `True`."
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:3038
#, no-wrap
msgid "*`false_python_cmd_string`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3040
msgid ""
"A Python command that will be called when the button is toggled `False`."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3042
msgid "_Special capitalized words_ will give access to the following:"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:3043
#, no-wrap
msgid "*`INSTANCE`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3046
#, no-wrap
msgid ""
"Will give access to the widgets instances and handler functions.\n"
"E.g., `INSTANCE.my_handler_function_call(True)`"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:3046
#, no-wrap
msgid "*`ACTION`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3049
#, no-wrap
msgid ""
"Will give access to QtVCP's `ACTION` library.\n"
"E.g., `ACTION.TOGGLE_FLOOD()`"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:3049
#, no-wrap
msgid "*`PROGRAM_LOADER`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3052
#, no-wrap
msgid ""
"Will give access to QtVCP's `PROGRAM_LOADER` library.\n"
"E.g., `PROGRAM_LOADER.load_halshow()`"
msgstr ""

#. type: Labeled list
#: src/gui/qtvcp-widgets.adoc:3052
#, no-wrap
msgid "*`HAL`*"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3055
#, no-wrap
msgid ""
"Will give access to HAL's Python module.\n"
"E.g., `HAL.set_p('motion.probe-input','1')`"
msgstr ""

#. type: Title ==
#: src/gui/qtvcp-widgets.adoc:3057
#, no-wrap
msgid "Import Only Widgets"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3060
msgid ""
"These widgets are usually the *base class widget for other QtVCP widgets*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3063
msgid ""
"They are _not available directly from the Qt Designer editor_ but could be "
"*imported and manually inserted*."
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3065
msgid ""
"They could also be *subclassed* to make a similar widget with new features."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:3067
#, no-wrap
msgid "Auto Height"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3071
#, no-wrap
msgid ""
"Widget for measuring two heights with a probe.\n"
"For setup."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:3073
#, no-wrap
msgid "G-code Utility"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3076
msgid "Widgets for preforming common machining processes."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:3078
#, no-wrap
msgid "Facing"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3081
msgid "Slab or face a definable area with different strategies."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:3083
#, no-wrap
msgid "Hole Circle"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3086
msgid "Drill multiple holes on a bolt hole circle."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:3088
#, no-wrap
msgid "Qt NGCGUI"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3091
msgid "QtVCP's version of NGC subroutine selector."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:3093
#, no-wrap
msgid "Qt PDF"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3096
msgid "Allows adding loadable PDFs to a screen."
msgstr ""

#. type: Title ===
#: src/gui/qtvcp-widgets.adoc:3098
#, no-wrap
msgid "Qt Vismach"
msgstr ""

#. type: Plain text
#: src/gui/qtvcp-widgets.adoc:3101
msgid "Use this to build/add OpenGl simulated machines."
msgstr ""

#. type: Title =
#: src/gui/tklinuxcnc.adoc:5
#, no-wrap
msgid "TkLinuxCNC GUI"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:21
msgid ""
"TkLinuxCNC is one of the first graphical front-ends for LinuxCNC. It is "
"written in Tcl and uses the Tk toolkit for the display. Being written in Tcl "
"makes it very portable (it runs on a multitude of platforms). A separate "
"backplot window can be displayed as shown."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/tklinuxcnc.adoc:23 src/gui/tklinuxcnc.adoc:24
#, no-wrap
msgid "TkLinuxCNC Window"
msgstr ""

#. type: Target for macro image
#: src/gui/tklinuxcnc.adoc:24
#, no-wrap
msgid "images/tkemc.png"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:30
msgid ""
"To select TkLinuxCNC as the front-end for LinuxCNC, edit the INI file.  In "
"the section '[DISPLAY]' change the 'DISPLAY' line to read"
msgstr ""

#. type: delimited block -
#: src/gui/tklinuxcnc.adoc:34
#, no-wrap
msgid "DISPLAY = tklinuxcnc\n"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:39
msgid ""
"Then, start LinuxCNC and select that INI file. The sample configuration 'sim/"
"tklinuxcnc/tklinuxcnc.ini' is already configured to use TkLinuxCNC as its "
"front-end."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:42
msgid ""
"When LinuxCNC is launched the <<cap:tklinuxcnc-display,TKLinuxCNC window>> "
"is opened."
msgstr ""

#. type: Title ===
#: src/gui/tklinuxcnc.adoc:43
#, no-wrap
msgid "A typical session with TkLinuxCNC"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:46
msgid "Start LinuxCNC and select a configuration file."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:48
msgid ""
"Clear the 'E-STOP' condition and turn the machine on (by pressing F1 then "
"F2)."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:49
msgid "'Home' each axis."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:50
msgid "Load the file to be milled."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:51
msgid "Put the stock to be milled on the table."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:55
msgid ""
"Set the proper offsets for each axis by jogging and either homing again or "
"right-clicking an axis name and entering an offset value.  footnote:[For "
"some of these actions it might be necessary to change the mode LinuxCNC is "
"currently running in.]"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:58
msgid ""
"To mill the same file again, return to step 6. To mill a different file, "
"return to step 4. When you're done, exit LinuxCNC."
msgstr ""

#. type: Title ==
#: src/gui/tklinuxcnc.adoc:59
#, no-wrap
msgid "Elements of the TkLinuxCNC window"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:62
msgid "The TkLinuxCNC window contains the following elements:"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:64
msgid "A menubar that allows you to perform various actions"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:66
msgid ""
"A set of buttons that allow you to change the current working mode, start/"
"stop spindle and other relevant I/O"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:67
msgid "Status bar for various offset related displays"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:68
msgid "Coordinate display area"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:71
msgid ""
"A set of sliders which control 'Jogging speed', 'Feed Override', and "
"'Spindle speed Override' which allow you to increase or decrease those "
"settings"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:72
msgid "Manual data input text box 'MDI'"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:73
msgid "Status bar display with active G-codes, M-codes, F- and S-words"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:74
msgid "Interpreter related buttons"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:75
msgid "A text display area that shows the G-code source of the loaded file"
msgstr ""

#. type: Title ===
#: src/gui/tklinuxcnc.adoc:76
#, no-wrap
msgid "Main buttons"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:79
msgid "From left to right, the buttons are:"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:81
msgid "Machine enable: 'ESTOP' > 'ESTOP RESET' > 'ON'"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:82
msgid "Toggle mist coolant"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:83
msgid "Decrease spindle speed"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:84
msgid ""
"Set spindle direction 'SPINDLE OFF' > 'SPINDLE FORWARD' . 'SPINDLE REVERSE'"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:85
msgid "Increase spindle speed"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:88
msgid "then on the second line:"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:90
msgid "Operation mode: 'MANUAL' > 'MDI' > 'AUTO'"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:91
msgid "Toggle flood coolant"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:92
msgid "Toggle spindle brake control"
msgstr ""

#. type: Title ===
#: src/gui/tklinuxcnc.adoc:93
#, no-wrap
msgid "Offset display status bar"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:98
msgid ""
"The Offset display status bar displays the currently selected tool (selected "
"with Txx M6), the tool length offset (if active), and the work offsets (set "
"by right-clicking the coordinates)."
msgstr ""

#. type: Title ===
#: src/gui/tklinuxcnc.adoc:99
#, no-wrap
msgid "Coordinate Display Area"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:107
msgid ""
"The main part of the display shows the current position of the tool.  The "
"color of the position readout depends on the state of the axis. If the axis "
"is unhomed the axis will be displayed in yellow letters. Once homed it will "
"be displayed in green letters. If there is an error with the current axis "
"TkLinuxCNC will use red letter to show that. (for example if an hardware "
"limit switch is tripped)."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:120
msgid ""
"To properly interpret these numbers, refer to the radio boxes on the right. "
"If the position is 'Machine', then the displayed number is in the machine "
"coordinate system. If it is 'Relative', then the displayed number is in the "
"offset coordinate system. Further down the choices can be 'actual' or "
"'commanded'. Actual refers to the feedback coming from encoders (if you have "
"a servo machine), and the 'commanded' refers to the position command send "
"out to the motors. These values can differ for several reasons: Following "
"error, deadband, encoder resolution, or step size. For instance, if you "
"command a movement to X 0.0033 on your mill, but one step of your stepper "
"motor is 0.00125, then the 'Commanded' position will be 0.0033 but the "
"'Actual' position will be 0.0025 (2 steps) or 0.00375 (3 steps)."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:126
msgid ""
"Another set of radio buttons allows you to choose between 'joint' and "
"'world' view. These make little sense on a normal type of machine (e.g.  "
"trivial kinematics), but help on machines with non-trivial kinematics like "
"robots or stewart platforms. (you can read more about kinematics in the "
"Integrator Manual)."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:130
msgid ""
"When the machine moves, it leaves a trail called the backplot. You can start "
"the backplot window by selecting View→Backplot."
msgstr ""

#. type: Title ===
#: src/gui/tklinuxcnc.adoc:132
#, no-wrap
msgid "TkLinuxCNC Interpreter / Automatic Program Control(((TkLinuxCNC Interpreter)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/tklinuxcnc.adoc:134
#, no-wrap
msgid "TkLinuxCNC Interpreter / program control"
msgstr ""

#. type: Target for macro image
#: src/gui/tklinuxcnc.adoc:134
#, no-wrap
msgid "images/tkemc-interp.png"
msgstr ""

#. type: Block title
#: src/gui/tklinuxcnc.adoc:136
#, no-wrap
msgid "Control Buttons"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:139
msgid ""
"The buttons in the lower part of TkLinuxCNC are used to control the "
"execution of a program:"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:141
msgid "'Open' to load a program,"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:142
msgid "'Verify' to check it for errors,"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:143
msgid "'Run' to start the actual cutting,"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:144
msgid "'Pause' to stop it while running,"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:145
msgid "'Resume' to resume an already paused program,"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:146
msgid "'Step' to advance one line in the program and"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:148
msgid ""
"'Optional Stop' to toggle the optional stop switch (if the button is green "
"the program execution will be stopped on any M1 encountered)."
msgstr ""

#. type: Block title
#: src/gui/tklinuxcnc.adoc:149
#, no-wrap
msgid "Text Program Display Area"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:153
msgid ""
"When the program is running, the line currently being executed is "
"highlighted in white. The text display will automatically scroll to show the "
"current line."
msgstr ""

#. type: Block title
#: src/gui/tklinuxcnc.adoc:156
#, no-wrap
msgid "Implicit keys"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:162
msgid ""
"TkLinuxCNC allows you to manually move the machine. This action is known as "
"'jogging'. First, select the axis to be moved by clicking it. Then, click "
"and hold the '+' or '-' button depending on the desired direction of motion. "
"The first four axes can also be moved by the keyboard arrow keys (X and Y), "
"the PAGE UP and PAGE DOWN keys (Z) and the '[' and ']' keys (A/4th)."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:167
msgid ""
"If 'Continuous' is selected, the motion will continue as long as the button "
"or key is pressed. If another value is selected, the machine will move "
"exactly the displayed distance each time the button is clicked or the key is "
"pressed. The available values are:"
msgstr ""

#. type: delimited block -
#: src/gui/tklinuxcnc.adoc:170
#, no-wrap
msgid "1.0000, 0.1000, 0.0100, 0.0010, 0.0001\n"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:177
msgid ""
"By pressing 'Home' or the HOME key, the selected axis will be homed.  "
"Depending on your configuration, this may just set the axis value to be the "
"absolute position 0.0, or it may make the machine move to a specific home "
"location through use of 'home switches'. See the <<cha:homing-configuration,"
"Homing Chapter>> for more information."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:182
msgid ""
"By pressing 'Override Limits', the machine will temporarily be permitted to "
"jog outside the limits defined in the INI file. (Note: if 'Override Limits' "
"is active the button will be displayed using a red color)."
msgstr ""

#. type: Block title
#: src/gui/tklinuxcnc.adoc:184
#, no-wrap
msgid "TkLinuxCNC Override Limits & Jogging increments example"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/tklinuxcnc.adoc:185
#, no-wrap
msgid "TkLinuxCNC Override Limits and Jogging increments example"
msgstr ""

#. type: Target for macro image
#: src/gui/tklinuxcnc.adoc:185
#, no-wrap
msgid "images/tkemc-override-limits.png"
msgstr ""

#. type: Block title
#: src/gui/tklinuxcnc.adoc:187
#, no-wrap
msgid "The Spindle group(((spindle)))"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:194
msgid ""
"The button on the first row selects the direction for the spindle to rotate: "
"Counterclockwise, Stopped, Clockwise. The buttons next to it allow the user "
"to increase or decrease the rotation speed. The button on the second row "
"allows the spindle brake to be engaged or released.  Depending on your "
"machine configuration, not all the items in this group may have an effect."
msgstr ""

#. type: Block title
#: src/gui/tklinuxcnc.adoc:195
#, no-wrap
msgid "The Coolant group(((Coolant)))"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:199
msgid ""
"The two buttons allow the 'Mist' and 'Flood' coolants to be turned on and "
"off. Depending on your machine configuration, not all the items in this "
"group may appear."
msgstr ""

#. type: Title ===
#: src/gui/tklinuxcnc.adoc:200
#, no-wrap
msgid "Code Entry"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:205
msgid ""
"Manual Data Input (also called MDI), allows G-code programs to be entered "
"manually, one line at a time. When the machine is not turned on, and not set "
"to MDI mode, the code entry controls are unavailable."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/tklinuxcnc.adoc:206
#, no-wrap
msgid "The Code Entry tab"
msgstr ""

#. type: Target for macro image
#: src/gui/tklinuxcnc.adoc:206
#, no-wrap
msgid "images/tkemc-mdi.png"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:210
msgid ""
"This allows you to enter a G-code command to be executed. Execute the "
"command by pressing Enter."
msgstr ""

#. type: Block title
#: src/gui/tklinuxcnc.adoc:211
#, no-wrap
msgid "Active G-Codes"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:215
msgid ""
"This shows the 'modal codes' that are active in the interpreter. For "
"instance, 'G54' indicates that the 'G54 offset' is applied to all "
"coordinates that are entered."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:222
msgid ""
"By moving this slider, the speed of jogs can be modified. The numbers above "
"refer to axis units / second. The text box with the number is clickable. "
"Once clicked a popup window will appear, allowing for a number to be entered."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:230
msgid ""
"By moving this slider, the programmed feed rate can be modified. For "
"instance, if a program requests 'F60' and the slider is set to 120%, then "
"the resulting feed rate will be 72.  The text box with the number is "
"clickable. Once clicked a popup window will appear, allowing for a number to "
"be entered."
msgstr ""

#. type: Title ===
#: src/gui/tklinuxcnc.adoc:231
#, no-wrap
msgid "Spindle speed Override"
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:241
msgid ""
"The spindle speed override slider works exactly like the feed override "
"slider, but it controls to the spindle speed. If a program requested S500 "
"(spindle speed 500 RPM), and the slider is set to 80%, then the resulting "
"spindle speed will be 400 RPM. This slider has a minimum and maximum value "
"defined in the INI file. If those are missing the slider is stuck at 100%. "
"The text box with the number is clickable. Once clicked a popup window will "
"appear, allowing for a number to be entered."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:246
msgid ""
"Almost all actions in TkLinuxCNC can be accomplished with the keyboard.  "
"Many of the shortcuts are unavailable when in MDI mode."
msgstr ""

#. type: Plain text
#: src/gui/tklinuxcnc.adoc:249
msgid ""
"The most frequently used keyboard shortcuts are shown in the following table."
msgstr ""

#. type: Block title
#: src/gui/tklinuxcnc.adoc:251
#, no-wrap
msgid "Most Common Keyboard Shortcuts(((TkLinuxCNC Common Keyboard Shortcuts)))"
msgstr ""

#. type: Table
#: src/gui/tklinuxcnc.adoc:263
#, no-wrap
msgid "Send active axis Home"
msgstr ""

#. type: Title =
#: src/gui/tooledit.adoc:5
#, no-wrap
msgid "Tool Edit GUI"
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:19
msgid ""
"The tooledit elements described here are available in version 2.5.1 and "
"later. In version 2.5.0, the graphical interface interface does not allow "
"these adjustments."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/tooledit.adoc:20 src/gui/tooledit.adoc:21
#, no-wrap
msgid "Tool Edit GUI - Overview"
msgstr ""

#. type: Target for macro image
#: src/gui/tooledit.adoc:21
#, no-wrap
msgid "images/tooledit.png"
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:30
msgid ""
"The 'tooledit' program can update the tool table file with edited changes by "
"using the SaveFile button.  The SaveFile button updates the system file but "
"a separate action is required to update the tool table data used by a "
"running LinuxCNC instance.  With the AXIS GUI, both the file and the current "
"tool table data used by LinuxCNC can be updated with the ReloadTable "
"button.  This button is enabled only when the machine is ON and IDLE."
msgstr ""

#. type: Title ==
#: src/gui/tooledit.adoc:31
#, no-wrap
msgid "Column Sorting"
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:37
msgid ""
"The tool table display can be sorted on any column in ascending order by "
"clicking on the column header.  A second click sorts in descending order.  "
"Column sorting requires that the machine is configured with the default Tcl "
"version >= 8.5."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/tooledit.adoc:38 src/gui/tooledit.adoc:39
#, no-wrap
msgid "Tool Edit GUI - Column Sorting"
msgstr ""

#. type: Target for macro image
#: src/gui/tooledit.adoc:39
#, no-wrap
msgid "images/tooledit-sort.png"
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:43
msgid ""
"In Ubuntu Lucid 10.04 Tcl/Tk8.4 it is installed by default.  The "
"installation is performed as follows:"
msgstr ""

#. type: delimited block -
#: src/gui/tooledit.adoc:46
#, no-wrap
msgid "sudo apt-get install tcl8.5 tk8.5\n"
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:50
msgid ""
"Depending upon other applications installed on the system, it may be "
"necessary to enable Tcl/Tk8.5 with the commands:"
msgstr ""

#. type: delimited block -
#: src/gui/tooledit.adoc:54
#, no-wrap
msgid ""
"sudo update-alternatives --config tclsh  ;# select the option for tclsh8.5\n"
"sudo update-alternatives --config wish   ;# select the option for wish8.5\n"
msgstr ""

#. type: Title ==
#: src/gui/tooledit.adoc:56
#, no-wrap
msgid "Columns Selection"
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:62
msgid ""
"By default, the 'tooledit' program will display all possible tool table "
"parameter columns. Since few machines use all parameters, the columns "
"displayed can be limited with the following INI file setting:"
msgstr ""

#. type: Block title
#: src/gui/tooledit.adoc:63
#, no-wrap
msgid "Syntax of INI file"
msgstr ""

#. type: delimited block -
#: src/gui/tooledit.adoc:68
#, no-wrap
msgid ""
"[DISPLAY]\n"
"TOOL_EDITOR = tooledit column_name column_name ...\n"
msgstr ""

#. type: Block title
#: src/gui/tooledit.adoc:70
#, no-wrap
msgid "Example for Z and DIAM columns"
msgstr ""

#. type: delimited block -
#: src/gui/tooledit.adoc:75
#, no-wrap
msgid ""
"[DISPLAY]\n"
"TOOL_EDITOR = tooledit Z DIAM\n"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/tooledit.adoc:77 src/gui/tooledit.adoc:78
#, no-wrap
msgid "Tool Edit GUI - Columns Selection Example"
msgstr ""

#. type: Target for macro image
#: src/gui/tooledit.adoc:78
#, no-wrap
msgid "images/tooledit-columns.png"
msgstr ""

#. type: Title ==
#: src/gui/tooledit.adoc:80
#, no-wrap
msgid "Stand Alone Use"
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:85
msgid ""
"The 'tooledit' program can also be invoked as a standalone program. For "
"example, if the program is in the user PATH, typing 'tooledit' will show the "
"usage syntax:"
msgstr ""

#. type: delimited block -
#: src/gui/tooledit.adoc:92
#, no-wrap
msgid ""
"tooledit\n"
"Usage:\n"
"       tooledit filename\n"
"       tooledit [column_1 ... column_n] filename\n"
msgstr ""

#. type: delimited block -
#: src/gui/tooledit.adoc:94
#, no-wrap
msgid "Valid column names are: x y z a b c u v w diam front back orien\n"
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:99
msgid ""
"To synchronize a standalone 'tooledit' with a running LinuxCNC application, "
"the filename must resolve to the same [EMCIO]TOOL_TABLE filename specified "
"in the LinuxCNC INI file."
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:104
msgid ""
"When using the program 'tooledit' while LinuxCNC is running, G-code command "
"execution or other programs may alter tool table data and the tool table "
"file.  File changes are detected by 'tooledit' and a message is displayed:"
msgstr ""

#. type: delimited block -
#: src/gui/tooledit.adoc:107
#, no-wrap
msgid "Warning: File changed by another process\n"
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:111
msgid ""
"The 'tooledit' tool table display can be updated to read the modified file "
"with the ReRead button."
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:113
msgid "The tool table is specified in the INI file with an entry:"
msgstr ""

#. type: delimited block -
#: src/gui/tooledit.adoc:117
#, no-wrap
msgid "[EMCIO]TOOL_TABLE = tool_table_filename\n"
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:121
msgid ""
"The tool table file can be edited with any simple text editor (not a word "
"processor)."
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:124
msgid ""
"The AXIS GUI can optionally use an INI file setting to specify the tool "
"editor program:"
msgstr ""

#. type: delimited block -
#: src/gui/tooledit.adoc:128
#, no-wrap
msgid "[DISPLAY]TOOL_EDITOR = path_to_editor_program\n"
msgstr ""

#. type: Plain text
#: src/gui/tooledit.adoc:134
msgid ""
"By default, the program named 'tooledit' is used. This editor supports all "
"tool table parameters, allows addition and deletion of tool entries, and "
"performs a number of validity checks on parameter values."
msgstr ""

#. type: Title =
#: src/gui/touchy.adoc:5
#, no-wrap
msgid "The Touchy Graphical User Interface(((touchygui)))"
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:13
msgid ""
"Touchy is a user interface for LinuxCNC meant for use on machine control "
"panels, and therefore does not require keyboard or mouse."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:16
msgid ""
"It is meant to be used with a touch screen, and works in combination with a "
"wheel/MPG and a few buttons and switches."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:21
msgid ""
"The 'Handwheel' tab has radio buttons to select between 'Feed Override', "
"'Spindle Override', 'Maximum Velocity' and 'Jogging' functions for the wheel/"
"MPG input. Radio buttons for axis selection and increment for jogging are "
"also provided."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/touchy.adoc:22
#, no-wrap
msgid "Touchy GUI"
msgstr ""

#. type: Target for macro image
#: src/gui/touchy.adoc:22
#, no-wrap
msgid "images/touchy.png"
msgstr ""

#. type: Title ==
#: src/gui/touchy.adoc:24
#, no-wrap
msgid "Panel Configuration"
msgstr ""

#. type: Title ===
#: src/gui/touchy.adoc:26
#, no-wrap
msgid "HAL connections"
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:34
msgid ""
"Touchy looks in the INI file, under the heading '[HAL]' for entries of "
"'POSTGUI_HALFILE=<filename>'.  Typically '<filename>' would be "
"'touchy_postgui.hal', but can be any legal filename.  These commands are "
"executed after the screen is built, guaranteeing the widget HAL pins are "
"available.  You can have multiple line of 'POSTGUI_HALFILE=<filename>' in "
"the INI.  Each will be run one after the other in the order they appear in "
"the INI file."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:39
msgid ""
"Touchy used to require that you create a file named 'touchy.hal' in your "
"configuration directory (the directory your INI file is in). For legacy "
"reasons this will continue to work, but INI based postgui files are "
"preferred."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:42
msgid ""
"For more information on HAL files and the net command see the <<cha:basic-"
"hal-reference,HAL Basics>>."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:45
msgid ""
"Touchy has several output pins that are meant to be connected to the motion "
"controller to control wheel jogging:"
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:47
msgid ""
"'touchy.jog.wheel.increment', which is to be connected to the 'axis._N_.jog-"
"scale' pin of each axis _N_."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:48
msgid ""
"'touchy.jog.wheel._N_', which is to be connected to 'axis._N_.jog-enable' "
"for each axis _N_."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:51
msgid "'N' represents the axis number 0-8."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:56
msgid ""
"In addition to being connected to 'touchy.wheel-counts', the wheel counts "
"should also be connected to 'axis._N_.jog-counts' for each axis _N_.  If you "
"use HAL component 'ilowpass' to smooth wheel jogging, be sure to smooth only "
"'axis._N_.jog-counts' and not 'touchy.wheel-counts'."
msgstr ""

#. type: Block title
#: src/gui/touchy.adoc:57
#, no-wrap
msgid "Required controls"
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:60
msgid ""
"Abort button (momentary contact) connected to the HAL pin 'touchy.abort'."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:61
msgid ""
"Cycle start button (momentary contact) connected to 'touchy.cycle-start'."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:62
msgid ""
"Wheel/MPG, connected to 'touchy.wheel-counts' and motion pins as described "
"above."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:63
msgid "Single block (toggle switch) connected to 'touchy.single-block'."
msgstr ""

#. type: Block title
#: src/gui/touchy.adoc:64
#, no-wrap
msgid "Optional controls"
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:69
msgid ""
"For continuous jog, one center-off bidirectional momentary toggle (or two "
"momentary buttons) for each axis, hooked to 'touchy.jog.continuous.x."
"negative', 'touchy.jog.continuous.x.positive', etc."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:71
msgid ""
"If a quill up button is wanted (to jog Z to the top of travel at top speed), "
"a momentary button connected to 'touchy.quill-up'."
msgstr ""

#. type: Block title
#: src/gui/touchy.adoc:72
#, no-wrap
msgid "Optional panel lamps"
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:75
msgid "'touchy.jog.active' shows when the panel jogging controls are live."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:77
msgid ""
"'touchy.status-indicator' is on when the machine is executing G-code, and "
"flashes when the machine is executing but is in pause/feedhold."
msgstr ""

#. type: Title ===
#: src/gui/touchy.adoc:78
#, no-wrap
msgid "Recommended for any setup"
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:81
msgid "Estop button hardwired in the estop chain"
msgstr ""

#. type: Title ===
#: src/gui/touchy.adoc:84
#, no-wrap
msgid "Enabling Touchy"
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:88
msgid ""
"To use Touchy, in the '[DISPLAY]' section of your INI file change the "
"display selector line to 'DISPLAY = touchy'."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:94
msgid ""
"When you start Touchy the first time, check the Preferences tab.  If using a "
"touchscreen, choose the option to hide the pointer for best results."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:99
msgid ""
"The Status Window is a fixed height, set by the size of a fixed font.  This "
"can be affected by the Gnome DPI, configured in System / Preferences / "
"Appearance / Fonts / Details. If the bottom of the screen is cut off, reduce "
"the DPI setting."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:101
msgid "All other font sizes can be changed on the Preferences tab."
msgstr ""

#. type: Title ===
#: src/gui/touchy.adoc:102
#, no-wrap
msgid "Macros"
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:107
msgid ""
"Touchy can invoke O-word macros using the MDI interface.  To configure this, "
"in the '[TOUCHY]' section of the INI file, add one or more 'MACRO' lines.  "
"Each should be of the following format:"
msgstr ""

#. type: delimited block -
#: src/gui/touchy.adoc:111
#, no-wrap
msgid "MACRO=increment xinc yinc\n"
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:115
msgid ""
"In this example, increment is the name of the macro, and it accepts two "
"parameters, named xinc and yinc."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:118
msgid ""
"Now, place the macro in a file named 'increment.ngc', in the "
"'PROGRAM_PREFIX' directory or any directory in the 'SUBROUTINE_PATH'."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:120
msgid "It should look like:"
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:131
msgid ""
"Notice the name of the sub matches the file name and macro name exactly, "
"including case."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:136
msgid ""
"When you invoke the macro by pressing the Macro button on the MDI tab in "
"Touchy, you can enter values for xinc and yinc.  These are passed to the "
"macro as '#1' and '#2' respectively.  Parameters you leave empty are passed "
"as value 0."
msgstr ""

#. type: Plain text
#: src/gui/touchy.adoc:143
msgid ""
"In this simple example, if you enter -1 for xinc and press cycle start, a "
"rapid 'G0' move will be invoked, moving one unit to the left."
msgstr ""

#. type: Title =
#: src/gui/vismach.adoc:5
#, no-wrap
msgid "Vismach"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:11
msgid ""
"Vismach is a set of Python functions that can be used to create and animate "
"models of machines. Vismach displays the model in a 3D viewport and the "
"model parts are animated as the values of associated HAL pins change."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/gui/vismach.adoc:12
#, no-wrap
msgid "Vismach displays the model in a 3D viewport"
msgstr ""

#. type: Target for macro image
#: src/gui/vismach.adoc:12
#, no-wrap
msgid "images/vismach.png"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:15
msgid "The Vismach viewport view can be manipulated as follows:"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:17
#, no-wrap
msgid "*zoom* by scroll wheel or right button drag,\n"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:18
#, no-wrap
msgid "*pan* by left button drag,\n"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:19
#, no-wrap
msgid "*rotate* by middle-button drag or shift-drag.\n"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:24
msgid ""
"A Vismach model takes the form of a Python script and can use standard "
"Python syntax. This means that there is more than one way to lay out the "
"script, but in the examples given in this document I will use the simplest "
"and most basic of them."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:26
msgid "The basic sequence in creating the Vismach model is"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:28
msgid "Create the HAL pins that control the motion."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:29
msgid "Create the parts."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:30
msgid "Define how they move."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:31
msgid "Assemble into movement groups."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:37
msgid ""
"It is useful for testing to include the '#!/usr/bin/env python3' to allow "
"the file to be run as a script. The first thing to do is to import the "
"required libraries."
msgstr ""

#. type: delimited block -
#: src/gui/vismach.adoc:46
#, no-wrap
msgid ""
"from vismach import *\n"
"import hal\n"
"import math\n"
"import sys\n"
msgstr ""

#. type: Title ==
#: src/gui/vismach.adoc:48
#, no-wrap
msgid "Create the HAL pins."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:57
msgid ""
"HAL pins are created with the normal Python \"hal\" library, and are not "
"specific to Vismach. Further details can be found in the <<cha:halmodule,"
"Creating Userspace Components in Python>> section.  A component should be "
"created with a name that matches the script file name and then the HAL pins "
"are added to that component. They will be referenced by their component "
"handle and short name when used to animate the Vismach model."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:69
msgid ""
"Will create HAL pins 'samplegui.joint0' and 'samplegui.joint1'. When loading "
"the Vismach model with 'loadusr -W samplegui' the 'c.ready()' function tells "
"loadusr it's ready."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:76
msgid ""
"It is probably easiest to create geometry in a CAD package and *import* into "
"the model script with the `AsciiSTL()` or `AsciiOBJ()` functions.  Both "
"functions can take one of two named arguments, either a filename or raw data:"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:84
#, no-wrap
msgid ""
"`part = AsciiSTL(filename=\"path/to/file.stl\")\n"
"part = AsciiSTL(data=\"solid part1 facet normal ....\")\n"
"part = AsciiOBJ(filename=\"path/to/file.obj\")\n"
"part = AsciiOBJ(data=\"v 0.123 0.234 0.345 1.0 ...\")`\n"
"The parts will be created in the Vismach space in the same locations as they occupy in the STL or OBJ space. This means that it may be possible to assemble the model in the CAD package."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:88
msgid ""
"Alternatively parts can be created inside the model script from a range of "
"*shape primitives*. Many shapes are created at the origin and need to be "
"moved to the required location after creation:"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:94
#, no-wrap
msgid ""
"`cylinder = CylinderX(x1, r1, x2, r2)\n"
"cylinder = CylinderY(y1, r1, y2, r2)\n"
"cylinder = CylinderZ(z1, r1, z2, r2)`\n"
"Creates a (optionally tapered) cylinder on the given axis with the given radii at the given points on the axis."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:96
#, no-wrap
msgid ""
"`sphere = Sphere(x, y, z, r)`\n"
"Creates a sphere of radius r at (x,y,z)"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:102
#, no-wrap
msgid ""
"`triangle = TriangleXY(x1, y1, x2, y2, x3, y3, z1, z2)\n"
"triangle = TriangleXZ(x1, z1, x2, z2, x3, z3, y1, y2)\n"
"triangle = TriangleYZ(y1, z1, y2, z2, y3, z3, x1, x2)`\n"
"Creates a triangular plate between planes defined by the last two values parallel to the specified plane, with vertices given by the three coordinate pairs."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:104
#, no-wrap
msgid ""
"`arc = ArcX(x1, x2, r1, r2, a1, a2)`\n"
"Create an arc shape."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:107
#, no-wrap
msgid ""
"`box = Box(x1, y1, z1, x2, y2, z2)`\n"
"Creates a rectangular prism with opposite corners at the specified positions and edges parallel to the XYZ axes."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:109
#, no-wrap
msgid ""
"`box = BoxCentered(xw, yw, zw)`\n"
"Creates an xw by yw by zw box centred on the origin."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:111
#, no-wrap
msgid ""
"`box = BoxCenteredXY(xw, yw, z)`\n"
"Creates a box of width xw / yw and height z."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:114
msgid ""
"Composite parts may be created by *assembling* these primitives either at "
"creation time or subsequently using `Collection()`:"
msgstr ""

#. type: Title ==
#: src/gui/vismach.adoc:123
#, no-wrap
msgid "Moving Parts"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:128
msgid ""
"Parts may need to be moved in the Vismach space to assemble the model.  They "
"may also need to be moved to create the animation as the animation rotation "
"axis is created at the origin (but moves with the Part):"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:131
#, no-wrap
msgid ""
"`part1 = Translate([part1], x, y, z)`\n"
"Move part1 the specified distances in x, y and z."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:134
#, no-wrap
msgid ""
"`part1 = Rotate([part1], theta, x, y, z)`\n"
"Rotate the part by angle theta about an axis between the origin and x, y, z."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:144
msgid ""
"To animate the model (controlled by the values of HAL pins) there are two "
"functions 'HalTranslate' and 'HalRotate'. For parts to move inside an "
"assembly they need to have their HAL motions defined before being assembled "
"with the \"Collection\" command. The rotation axis and translation vector "
"move with the part as it is moved by the vismach script during model "
"assembly, or as it moves in response to the HAL pins as the model is "
"animated:"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:147
#, no-wrap
msgid ""
"`part = HalTranslate([part], comp, \"hal_pin\", xs, ys, zs)`\n"
"The function arguments are:"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:150
msgid ""
"first a _collection/part_ which can be pre-created earlier in the script, or "
"could be created at this point if preferred eg `part1 = "
"HalTranslate([Box(....)], ...)`."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:155
msgid ""
"The _HAL component_ is the next argument, ie the object returned by the "
"`comp = hal.component(...)` command. After that is the name of the HAL in "
"that will animate the motion, this needs to match an existing HAL pin that "
"is part of the HAL component created earlier in the script."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:161
#, no-wrap
msgid ""
"Then follow the _X, Y, Z scales_.\n"
"For a Cartesian machine created at 1:1 scale this would typically be 1,0,0 for a motion in the positive X direction.\n"
"However if the STL file happened to be in cm and the machine was in inches, this could be fixed at this point by using 0.3937 (1cm /2.54in) as the scale."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:165
#, no-wrap
msgid ""
"`part = HalRotate([part], comp, \"hal_pin\", angle_scale, x, y, z)`\n"
"This command is similar in its operation to HalTranslate except that it is typically necessary to move the part to the origin first to define the axis."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:170
#, no-wrap
msgid ""
"The _axis of rotation_ is from the origin point to the point defined by (x,y,z).\n"
"When the part is moved back away from the origin to its correct location the axis of rotation can be considered to remain \"embedded\" in the part."
msgstr ""

#. type: Title ==
#: src/gui/vismach.adoc:173
#, no-wrap
msgid "Assembling the model."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:180
msgid ""
"In order for parts to move together they need to be assembled with the "
"Collection() command. It is important to assemble the parts and define their "
"motions in the correct sequence. For example to create a moving head milling "
"machine with a rotating spindle and an animated draw bar you would:"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:186
msgid "Create the draw bar."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:187
msgid "Define the motion of the draw bar."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:188
msgid "Assemble the three parts into a head assembly."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:223
msgid ""
"Finally a single collection of all the machine parts, floor and work (if "
"any) needs to be created:"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:230
msgid ""
"Thus, for example, in scaragui.py link3 is added to link2, link2 to link1 "
"and link1 to link0, so the final model is created by:"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:237
msgid "Whereas a VMC model with separate parts moving on the base might have:"
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:250
#, no-wrap
msgid ""
"`part = Color([colorspec], [part])`\n"
"Sets the display color of the part. Note that unlike the other functions the part definition comes second in this case.\n"
"The colorspec consists of the three RGB values and an opacity. For example [1,0,0,0.5] for a 50% opacity red."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:253
#, no-wrap
msgid ""
"`myhud = Hud()`\n"
"Creates a heads-up display in the Vismach GUI to display such items as axis positions."
msgstr ""

#. Need to play around with this to see how it works.
#. type: Plain text
#: src/gui/vismach.adoc:259
#, no-wrap
msgid ""
"`part = Capture()`\n"
"I have no idea what this does ! But it seems to be important for tool tip visualization..."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:262
#, no-wrap
msgid ""
"`main(model, tooltip, work, size=10, hud=0, rotation_vectors=None, lat=0, lon=0)`\n"
"This is the command that makes it all happen, creates the display etc."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:263
msgid "_model_ should be a collection that contains all the machine parts."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:267
#, no-wrap
msgid ""
"_tooltip_ and _work_ need to be created by `Capture()` to visualize their motion in the back plot.\n"
"See `scaragui.py` for an example of how to connect the tool tip to a tool and the tool to the model."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:270
msgid ""
"Either _rotation_vectors_ or _latitude/longitude_ can be used to set the "
"original viewpoint and it is advisable to do as the default initial "
"viewpoint is rather unhelpfully from immediately overhead."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:271
msgid "_size_ sets the extent of the volume visualized in the initial view."
msgstr ""

#. type: Plain text
#: src/gui/vismach.adoc:272
msgid "_hud_ refers to a head-up display of axis positions."
msgstr ""

#. type: Title ==
#: src/gui/vismach.adoc:273
#, no-wrap
msgid "Basic structure of a Vismach script."
msgstr ""

#. type: delimited block -
#: src/gui/vismach.adoc:299
#, no-wrap
msgid ""
"#imports\n"
"from vismach import *\n"
"import hal\n"
"#create the HAL component and pins\n"
"comp = hal.component(\"compname\")\n"
"comp.newpin(\"pin_name\", hal.HAL_FLOAT, hal.HAL_IN)\n"
"...\n"
"#create the floor, tool and work\n"
"floor = Box(-50, -50, -3, 50, 50, 0)\n"
"work = Capture()\n"
"tooltip = Capture()\n"
"...\n"
"#Build and assemble the model\n"
"part1 = Collection([Box(-6,-3,94,6,3,100)])\n"
"part1 = Color([1,1,1,1],[part1])\n"
"part1 = HalRotate([part1],comp,\"pin_name\",360,0,0,1)\n"
"part1 = Translate([dogs],-1,49,0)\n"
"...\n"
"#create a top-level model\n"
"model = Collection([base, saddle, head, carousel])\n"
"#Start the visualization\n"
"main(model, tooltip, work, 100, lat=-75, lon=215)\n"
msgstr ""

#. type: Title =
#: src/hal/basic-hal.adoc:5
#, no-wrap
msgid "HAL Basics(((HAL Basics)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:14
msgid "This document provides a reference to the basics of HAL."
msgstr ""

#. type: Title ==
#: src/hal/basic-hal.adoc:16
#, no-wrap
msgid "HAL Commands(((HAL Commands)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:20
msgid ""
"More detailed information can be found in the man page for halcmd: run 'man "
"halcmd' in a terminal window."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:25
msgid ""
"To see the HAL configuration and check the status of pins and parameters use "
"the HAL Configuration window on the Machine menu in AXIS. To watch a pin "
"status open the Watch tab and click on each pin you wish to watch and it "
"will be added to the watch window."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:26
#, no-wrap
msgid "HAL Configuration Window"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/basic-hal.adoc:27
#, no-wrap
msgid "The HAL Configuration Window"
msgstr ""

#. type: Target for macro image
#: src/hal/basic-hal.adoc:27
#, no-wrap
msgid "images/HAL_Configuration.png"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:30
#, no-wrap
msgid "loadrt(((HAL loadrt,loadrt)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:36
msgid ""
"The command 'loadrt' loads a real time HAL component. Real time component "
"functions need to be added to a thread to be updated at the rate of the "
"thread. You cannot load a user space component into the real time space."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:37
#, no-wrap
msgid "loadrt Syntax and Example"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:42
#, no-wrap
msgid ""
"loadrt <component> <options>\n"
"loadrt mux4 count=1\n"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:45
#, no-wrap
msgid "addf(((HAL addf,addf)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:50
msgid ""
"The `addf` command adds a function to a real-time thread. If the StepConf "
"wizard was used to create the configuration, two threads have been created "
"(``base-thread`` and ``servo-thread``)."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:56
msgid ""
"`addf` adds function 'functname' to thread 'threadname'. Default is to add "
"the function in the order they are in the file. If 'position' is specified, "
"adds the function to that spot in the thread. Negative 'position' means "
"position with respect to the end of the thread. For example '1' is start of "
"thread, '-1' is the end of the thread, '-3' is third from the end."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:61
msgid ""
"For some functions it is important to load them in a certain order, like the "
"parport read and write functions. The function name is usually the component "
"name plus a number. In the following example the component 'or2' is loaded "
"and 'show function' shows the name of the or2 function"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:69
#, no-wrap
msgid ""
"$ halrun\n"
"halcmd: loadrt or2\n"
"halcmd: show function\n"
"Exported Functions:\n"
"Owner   CodeAddr  Arg       FP   Users  Name\n"
" 00004  f8bc5000  f8f950c8  NO       0   or2.0\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:73
msgid ""
"You have to add a function from a HAL real time component to a thread to get "
"the function to update at the rate of the thread."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:77
msgid ""
"Usually there are two threads as shown in this example. Some components use "
"floating point math and must be added to a thread that supports floating "
"point math. The 'FP' indicates if floating point math is supported in that "
"thread."
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:86
#, no-wrap
msgid ""
"$ halrun\n"
"halcmd: loadrt motmod base_period_nsec=55555 servo_period_nsec=1000000 num_joints=3\n"
"halcmd: show thread\n"
"Realtime Threads:\n"
"     Period  FP     Name               (     Time, Max-Time )\n"
"     995976  YES          servo-thread (        0,        0 )\n"
"      55332  NO            base-thread (        0,        0 )\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:91
msgid ""
"base-thread (the high-speed thread): this thread handles items that need a "
"fast response, like making step pulses, and reading and writing the parallel "
"port. Does not support floating point math."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:94
msgid ""
"servo-thread (the slow-speed thread): this thread handles items that can "
"tolerate a slower response, like the motion controller, ClassicLadder, and "
"the motion command handler and supports floating point math."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:95
#, no-wrap
msgid "addf Syntax and Example"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:100
#, no-wrap
msgid ""
"addf <function> <thread>\n"
"addf mux4.0 servo-thread\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:104
msgid ""
"If the component requires a floating point thread that is usually the slower "
"servo-thread."
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:106
#, no-wrap
msgid "loadusr(((HAL loadusr,loadusr)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:112
msgid ""
"The command 'loadusr' loads a user space HAL component. User space programs "
"are their own separate processes, which optionally talk to other HAL "
"components via pins and parameters. You cannot load real time components "
"into user space."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:114
msgid "Flags may be one or more of the following:"
msgstr ""

#. type: Labeled list
#: src/hal/basic-hal.adoc:116
#, no-wrap
msgid "-W"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:118
msgid ""
"to wait for the component to become ready. The component is assumed to have "
"the same name as the first argument of the command."
msgstr ""

#. type: Labeled list
#: src/hal/basic-hal.adoc:119
#, no-wrap
msgid "-Wn <name>"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:121
msgid ""
"to wait for the component, which will have the given <name>.  This only "
"applies if the component has a name option."
msgstr ""

#. type: Labeled list
#: src/hal/basic-hal.adoc:122
#, no-wrap
msgid "-w"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:123
msgid "to wait for the program to exit"
msgstr ""

#. type: Labeled list
#: src/hal/basic-hal.adoc:124
#, no-wrap
msgid "-i"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:125
msgid "to ignore the program return value (with -w)"
msgstr ""

#. type: Labeled list
#: src/hal/basic-hal.adoc:126
#, no-wrap
msgid "-n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:127
msgid "name a component when it is a valid option for that component."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:128
#, no-wrap
msgid "loadusr Syntax and Examples"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:134
#, no-wrap
msgid ""
"loadusr <component> <options>\n"
"loadusr halui\n"
"loadusr -Wn spindle gs2_vfd -n spindle\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:137
msgid ""
"In English it means 'loadusr wait for name spindle component gs2_vfd name "
"spindle'."
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:139
#, no-wrap
msgid "net(((HAL net,net)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:147
msgid ""
"The command 'net' creates a 'connection' between a signal and one or more "
"pins. If the signal does not exist net creates the new signal.  This "
"replaces the need to use the command newsig. The optional direction arrows "
"'<=', '=>' and '<=>' make it easier to follow the logic when reading a 'net' "
"command line and are not used by the net command. The direction arrows must "
"be separated by a space from the pin names."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:148
#, no-wrap
msgid "net Syntax and Example"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:153
#, no-wrap
msgid ""
"net signal-name pin-name <optional arrow> <optional second pin-name>\n"
"net home-x joint.0.home-sw-in <= parport.0.pin-11-in\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:160
msgid ""
"In the above example 'home-x' is the signal name, 'joint.0.home-sw-in' is a "
"'Direction IN' pin, '<=' is the optional direction arrow, and 'parport.0."
"pin-11-in' is a 'Direction OUT' pin. This may seem confusing but the in and "
"out labels for a parallel port pin indicates the physical way the pin works "
"not how it is handled in HAL."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:162
msgid "A pin can be connected to a signal if it obeys the following rules:"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:164
msgid "An IN pin can always be connected to a signal."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:165
msgid "An IO pin can be connected unless there's an OUT pin on the signal."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:167
msgid ""
"An OUT pin can be connected only if there are no other OUT or IO pins on the "
"signal."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:170
msgid ""
"The same 'signal-name' can be used in multiple net commands to connect "
"additional pins, as long as the rules above are obeyed."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/basic-hal.adoc:172 src/hal/basic-hal.adoc:173
#, no-wrap
msgid "Signal Direction"
msgstr ""

#. type: Target for macro image
#: src/hal/basic-hal.adoc:173
#, no-wrap
msgid "images/signal-direction.png"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:180
msgid ""
"This example shows the signal xStep with the source being stepgen.0.out and "
"with two readers, parport.0.pin-02-out and parport.0.pin-08-out. Basically "
"the value of stepgen.0.out is sent to the signal xStep and that value is "
"then sent to parport.0.pin-02-out and parport.0.pin-08-out."
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:185
#, no-wrap
msgid ""
"#   signal    source            destination          destination\n"
"net xStep stepgen.0.out => parport.0.pin-02-out parport.0.pin-08-out\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:191
msgid ""
"Since the signal xStep contains the value of stepgen.0.out (the source) you "
"can use the same signal again to send the value to another reader. To do "
"this just use the signal with the readers on another line."
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:196
#, no-wrap
msgid ""
"#   signal       destination2\n"
"net xStep => parport.0.pin-06-out\n"
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:198
#, no-wrap
msgid "I/O pins"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:200
msgid ""
"An I/O pin like encoder.N.index-enable can be read or set as allowed by the "
"component."
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:202
#, no-wrap
msgid "setp(((HAL setp,setp)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:207
msgid ""
"The command 'setp' sets the value of a pin or parameter. The valid values "
"will depend on the type of the pin or parameter. It is an error if the data "
"types do not match."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:211
msgid ""
"Some components have parameters that need to be set before use.  Parameters "
"can be set before use or while running as needed. You cannot use setp on a "
"pin that is connected to a signal."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:212
#, no-wrap
msgid "setp Syntax and Example"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:217
#, no-wrap
msgid ""
"setp <pin/parameter-name> <value>\n"
"setp parport.0.pin-08-out TRUE\n"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:220
#, no-wrap
msgid "sets(((HAL sets,sets)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:223
msgid "The command 'sets' sets the value of a signal."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:224
#, no-wrap
msgid "sets Syntax and Example:"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:230
#, no-wrap
msgid ""
"sets <signal-name> <value>\n"
"net mysignal and2.0.in0 pyvcp.my-led\n"
"sets mysignal 1\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:235
msgid "The signal-name does not exist"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:236
msgid "If the signal already has a writer"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:237
msgid "If value is not the correct type for the signal"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:239
#, no-wrap
msgid "unlinkp(((HAL unlinkp,unlinkp)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:244
msgid ""
"The command 'unlinkp' unlinks a pin from the connected signal. If no signal "
"was connected to the pin prior running the command, nothing happens. The "
"'unlinkp' command is useful for trouble shooting."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:245
#, no-wrap
msgid "unlinkp syntax and Example"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:250
#, no-wrap
msgid ""
"unlinkp <pin-name>\n"
"unlinkp parport.0.pin-02-out\n"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:252
#, no-wrap
msgid "Obsolete Commands"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:257
msgid ""
"The following commands are depreciated and may be removed from future "
"versions. Any new configuration should use the <<sub:hal-net,'net'>> "
"command.  These commands are included so older configurations will still "
"work."
msgstr ""

#. type: Title ====
#: src/hal/basic-hal.adoc:258
#, no-wrap
msgid "linksp"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:262
msgid ""
"The command 'linksp' creates a 'connection' between a signal and one pin."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:263
#, no-wrap
msgid "linksp Syntax and Example"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:268
#, no-wrap
msgid ""
"linksp <signal-name> <pin-name>\n"
"linksp X-step parport.0.pin-02-out\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:271
msgid "The 'linksp' command has been superseded by the 'net' command."
msgstr ""

#. type: Title ====
#: src/hal/basic-hal.adoc:272
#, no-wrap
msgid "linkps"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:276
msgid ""
"The command 'linkps' creates a 'connection' between one pin and one signal. "
"It is the same as linksp but the arguments are reversed."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:277
#, no-wrap
msgid "linkps Syntax and Example"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:282
#, no-wrap
msgid ""
"linkps <pin-name> <signal-name>\n"
"linkps parport.0.pin-02-out X-Step\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:285
msgid "The 'linkps' command has been superseded by the 'net' command."
msgstr ""

#. type: Title ====
#: src/hal/basic-hal.adoc:286
#, no-wrap
msgid "newsig"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:291
msgid ""
"the command 'newsig' creates a new HAL signal by the name <signame> and the "
"data type of <type>. Type must be 'bit', 's32', 'u32' or 'float'. Error if "
"<signame> all ready exists."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:292
#, no-wrap
msgid "newsig Syntax and Example"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:297
#, no-wrap
msgid ""
"newsig <signame> <type>\n"
"newsig Xstep bit\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:301
msgid ""
"More information can be found in the HAL manual or the man pages for "
"`halrun`."
msgstr ""

#. type: Title ==
#: src/hal/basic-hal.adoc:303
#, no-wrap
msgid "HAL Data(((HAL Data)))"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:306
#, no-wrap
msgid "Bit(((HAL Bit,bit)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:309
msgid "A bit value is an on or off."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:311
msgid "bit values = true or 1 and false or 0 (True, TRUE, true are all valid)"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:313
#, no-wrap
msgid "Float(((HAL Float,float)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:317
msgid ""
"A 'float' is a floating point number. In other words the decimal point can "
"move as needed."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:320
msgid ""
"float values = a 64 bit floating point value, with approximately 53 bits of "
"resolution and over 2^10^ (~ 1000) bits of dynamic range."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:322
msgid "For more information on floating point numbers see:"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:324
msgid ""
"http://en.wikipedia.org/wiki/Floating_point[http://en.wikipedia.org/wiki/"
"Floating_point]"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:326
#, no-wrap
msgid "s32(((HAL s32,s32)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:330
msgid ""
"An 's32' number is a whole number that can have a negative or positive value."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:332
msgid "s32 values = integer numbers from -2147483648 to 2147483647"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:334
#, no-wrap
msgid "u32(((HAL u32,u32)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:337
msgid "A 'u32' number is a whole number that is positive only."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:339
msgid "u32 values = integer numbers from 0 to 4294967295"
msgstr ""

#. type: Title ==
#: src/hal/basic-hal.adoc:341
#, no-wrap
msgid "HAL Files(((HAL Files)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:345
msgid ""
"If you used the Stepper Config Wizard to generate your config you will have "
"up to three HAL files in your config directory."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:348
msgid ""
"'my-mill.hal' (if your config is named 'my-mill') This file is loaded first "
"and should not be changed if you used the Stepper Config Wizard."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:351
msgid ""
"'custom.hal' This file is loaded next and before the GUI loads. This is "
"where you put your custom HAL commands that you want loaded before the GUI "
"is loaded."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:355
msgid ""
"'custom_postgui.hal' This file is loaded after the GUI loads. This is where "
"you put your custom HAL commands that you want loaded after the GUI is "
"loaded. Any HAL commands that use PyVCP widgets need to be placed here."
msgstr ""

#. type: Title ==
#: src/hal/basic-hal.adoc:357
#, no-wrap
msgid "HAL Parameter(((HAL Parameters)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:362
msgid ""
"Two parameters are automatically added to each HAL component when it is "
"created. These parameters allow you to scope the execution time of a "
"component."
msgstr ""

#. type: Labeled list
#: src/hal/basic-hal.adoc:364
#, no-wrap
msgid "`.time`(((HAL time)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:365
msgid "Time is the number of CPU cycles it took to execute the function."
msgstr ""

#. type: Labeled list
#: src/hal/basic-hal.adoc:365
#, no-wrap
msgid "`.tmax`(((HAL tmax)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:367
msgid ""
"Tmax is the maximum number of CPU cycles it took to execute the function."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:371
msgid ""
"`tmax` is a read/write parameter so the user can set it to 0 to get rid of "
"the first time initialization on the function's execution time."
msgstr ""

#. type: Title ==
#: src/hal/basic-hal.adoc:373
#, no-wrap
msgid "Basic Logic Components(((HAL Logic Components)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:379
msgid ""
"HAL contains several real time logic components. Logic components follow a "
"'Truth Table' that states what the output is for any given input. Typically "
"these are bit manipulators and follow electrical logic gate truth tables."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:382
msgid ""
"For further components see <<sec:hal-components,HAL Components List>> or the "
"man pages."
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:384
#, no-wrap
msgid "and2(((HAL and2,and2)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:388
msgid ""
"The 'and2' component is a two input 'and' gate. The truth table below shows "
"the output based on each combination of input."
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:392
#, no-wrap
msgid "and2 [count=N] | [names=name1[,name2...]]\n"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:397
#, no-wrap
msgid "and2.n\n"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:404
#, no-wrap
msgid ""
"and2.N.in0 (bit, in)\n"
"and2.N.in1 (bit, in)\n"
"and2.N.out (bit, out)\n"
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:406
#, no-wrap
msgid "and2 Truth Table"
msgstr ""

#. type: Table
#: src/hal/basic-hal.adoc:409 src/hal/basic-hal.adoc:471
#: src/hal/basic-hal.adoc:503
#, no-wrap
msgid "in0"
msgstr ""

#. type: Table
#: src/hal/basic-hal.adoc:409 src/hal/basic-hal.adoc:471
#: src/hal/basic-hal.adoc:503
#, no-wrap
msgid "in1"
msgstr ""

#. type: Table
#: src/hal/basic-hal.adoc:410 src/hal/basic-hal.adoc:442
#: src/hal/basic-hal.adoc:472 src/hal/basic-hal.adoc:504
#: src/hal/parallel-port.adoc:128 src/hal/parallel-port.adoc:129
#: src/hal/parallel-port.adoc:130 src/hal/parallel-port.adoc:131
#: src/hal/parallel-port.adoc:132 src/hal/parallel-port.adoc:133
#: src/hal/parallel-port.adoc:134 src/hal/parallel-port.adoc:135
#: src/hal/parallel-port.adoc:136 src/hal/parallel-port.adoc:137
#: src/hal/parallel-port.adoc:141 src/hal/parallel-port.adoc:143
#: src/hal/parallel-port.adoc:144
#, no-wrap
msgid "out"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:417
#, no-wrap
msgid "not(((HAL not,not)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:420
msgid "The 'not' component is a bit inverter."
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:424
#, no-wrap
msgid "not [count=n] | [names=name1[,name2...]]\n"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:430
#, no-wrap
msgid ""
"not.all\n"
"not.n\n"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:436
#, no-wrap
msgid ""
"not.n.in (bit, in)\n"
"not.n.out (bit, out)\n"
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:438
#, no-wrap
msgid "not Truth Table"
msgstr ""

#. type: Table
#: src/hal/basic-hal.adoc:441 src/hal/parallel-port.adoc:127
#: src/hal/parallel-port.adoc:129 src/hal/parallel-port.adoc:130
#: src/hal/parallel-port.adoc:131 src/hal/parallel-port.adoc:132
#: src/hal/parallel-port.adoc:133 src/hal/parallel-port.adoc:134
#: src/hal/parallel-port.adoc:135 src/hal/parallel-port.adoc:136
#: src/hal/parallel-port.adoc:137 src/hal/parallel-port.adoc:138
#: src/hal/parallel-port.adoc:139 src/hal/parallel-port.adoc:140
#: src/hal/parallel-port.adoc:141 src/hal/parallel-port.adoc:142
#: src/hal/parallel-port.adoc:143 src/hal/parallel-port.adoc:144
#: src/hal/parallel-port.adoc:145
#, no-wrap
msgid "in"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:447
#, no-wrap
msgid "or2(((HAL or2,or2)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:450
msgid "The 'or2' component is a two input OR gate."
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:454
#, no-wrap
msgid "or2[count=n] | [names=name1[,name2...]]\n"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:459
#, no-wrap
msgid "or2.n\n"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:466
#, no-wrap
msgid ""
"or2.n.in0 (bit, in)\n"
"or2.n.in1 (bit, in)\n"
"or2.n.out (bit, out)\n"
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:468
#, no-wrap
msgid "or2 Truth Table"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:479
#, no-wrap
msgid "xor2(((HAL xor2,xor2)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:482
msgid "The 'xor2' component is a two input XOR (exclusive OR) gate."
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:486
#, no-wrap
msgid "xor2[count=n] | [names=name1[,name2...]]\n"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:491
#, no-wrap
msgid "xor2.n\n"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:498
#, no-wrap
msgid ""
"xor2.n.in0 (bit, in)\n"
"xor2.n.in1 (bit, in)\n"
"xor2.n.out (bit, out)\n"
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:500
#, no-wrap
msgid "xor2 Truth Table"
msgstr ""

#. type: Title ==
#: src/hal/basic-hal.adoc:511
#, no-wrap
msgid "Logic Examples(((HAL Logic Examples)))"
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:513
#, no-wrap
msgid "`and2` example connecting two inputs to one output"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:521
#, no-wrap
msgid ""
"loadrt and2 count=1\n"
"addf and2.0 servo-thread\n"
"net my-sigin1 and2.0.in0 <= parport.0.pin-11-in\n"
"net my-sigin2 and2.0.in1 <= parport.0.pin-12-in\n"
"net both-on parport.0.pin-14-out <= and2.0.out\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:529
msgid ""
"In the above example one copy of `and2` is loaded into real time space and "
"added to the servo thread. Next `pin-11` of the parallel port is connected "
"to the `in0` bit of the and gate. Next `pin-12` is connected to the `in1` "
"bit of the and gate. Last we connect the `and2` out bit to the parallel port "
"`pin-14`. So following the truth table for `and2` if pin 11 and pin 12 are "
"on then the output pin 14 will be on."
msgstr ""

#. type: Title ==
#: src/hal/basic-hal.adoc:531
#, no-wrap
msgid "Conversion Components(((HAL Conversion Components)))"
msgstr ""

#. type: Title ===
#: src/hal/basic-hal.adoc:534
#, no-wrap
msgid "weighted_sum(((HAL weighted_sum,weighted_sum)))"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:540
msgid ""
"The weighted sum converts a group of bits into an integer. The conversion is "
"the sum of the 'weights' of the bits present plus any offset. It's similar "
"to 'binary coded decimal' but with more options. The 'hold' bit interrupts "
"the input processing, so that the 'sum' value no longer changes."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:541
#, no-wrap
msgid "weighted_sum component loading syntax"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:545
#, no-wrap
msgid "loadrt weighted_sum wsum_sizes=size[,size,...]\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:548
msgid ""
"Creates groups of `weighted_sum`s, each with the given number of input bits "
"(size)."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:550
msgid ""
"To update the `weighted_sum`, the `process_wsums` must be attached to a "
"thread."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:551
#, no-wrap
msgid "add `process_wsums` function"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:555
#, no-wrap
msgid "addf process_wsums servo-thread\n"
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:558
msgid "Which updates the `weighted_sum` component."
msgstr ""

#. type: Plain text
#: src/hal/basic-hal.adoc:562
msgid ""
"In the following example, a copy of the AXIS HAL configuration window, bits "
"'0' and '2' are TRUE, they have no offset. The weight ('weight') of bit 0 is "
"1, that of bit 2 is 4, so the sum is 5."
msgstr ""

#. type: Block title
#: src/hal/basic-hal.adoc:563
#, no-wrap
msgid "`weighted_sum` Example"
msgstr ""

#. type: delimited block -
#: src/hal/basic-hal.adoc:578
#, no-wrap
msgid ""
"Component Pins:\n"
"Owner   Type  Dir         Value  Name\n"
"    10  bit   In           TRUE  wsum.0.bit.0.in\n"
"    10  s32   I/O             1  wsum.0.bit.0.weight\n"
"    10  bit   In          FALSE  wsum.0.bit.1.in\n"
"    10  s32   I/O             2  wsum.0.bit.1.weight\n"
"    10  bit   In           TRUE  wsum.0.bit.2.in\n"
"    10  s32   I/O             4  wsum.0.bit.2.weight\n"
"    10  bit   In          FALSE  wsum.0.bit.3.in\n"
"    10  s32   I/O             8  wsum.0.bit.3.weight\n"
"    10  bit   In          FALSE  wsum.0.hold\n"
"    10  s32   I/O             0  wsum.0.offset\n"
"    10  s32   Out             5  wsum.0.sum\n"
msgstr ""

#. type: Title =
#: src/hal/canonical-devices.adoc:5
#, no-wrap
msgid "Canonical Device Interfaces(((HAL Canonical Device Interfaces)))"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:12
msgid ""
"The following sections show the pins, parameters, and functions that are "
"supplied by \"canonical devices\". All HAL device drivers should supply the "
"same pins and parameters, and implement the same behavior."
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:17
msgid ""
"Note that only the `<io-type>` and `<specific-name>` fields are defined for "
"a canonical device. The `<device-name>`, `<device-num>`, and `<chan-num>` "
"fields are set based on the characteristics of the real device."
msgstr ""

#. type: Title ==
#: src/hal/canonical-devices.adoc:19
#, no-wrap
msgid "Digital Input(((HAL Digital Input)))"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:22
msgid "The canonical digital input (I/O type field: `digin`) is quite simple."
msgstr ""

#. type: Title ===
#: src/hal/canonical-devices.adoc:24
#, no-wrap
msgid "Pins(((HAL Digital Input Pins)))"
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:26
#, no-wrap
msgid "(bit) *in*"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:27
msgid "State of the hardware input."
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:27
#, no-wrap
msgid "(bit) *in-not*"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:28
msgid "Inverted state of the input."
msgstr ""

#. type: Title ===
#: src/hal/canonical-devices.adoc:30
#, no-wrap
msgid "Parameters(((HAL Digital Input Parameters)))"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:33 man/man3/rtapi_app_exit.3rtapi:14
#: man/man3/rtapi_app_main.3rtapi:14 man/man3/rtapi_task_wait.3rtapi:19
#: man/man9/hal_bb_gpio.9:60 man/man9/setsserial.9:16 man/man9/setsserial.9:19
#: man/man9/siggen.9:95 man/man9/threads.9:35 man/man9/threads.9:39
#: man/man9/threads.9:43
#, no-wrap
msgid "None"
msgstr ""

#. type: Title ===
#: src/hal/canonical-devices.adoc:35
#, no-wrap
msgid "Functions(((HAL Digital Input Functions)))"
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:37 src/hal/canonical-devices.adoc:89
#, no-wrap
msgid "(funct) *read*"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:38
msgid "Read hardware and set `in` and `in-not` HAL pins."
msgstr ""

#. type: Title ==
#: src/hal/canonical-devices.adoc:40
#, no-wrap
msgid "Digital Output(((HAL Digital Output)))"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:44
msgid ""
"The canonical digital output (I/O type field: `digout`) is also very simple."
msgstr ""

#. type: Title ===
#: src/hal/canonical-devices.adoc:46
#, no-wrap
msgid "Pins(((HAL Digital Output Pins)))"
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:48
#, no-wrap
msgid "(bit) *out*"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:49
msgid "Value to be written (possibly inverted) to the hardware output."
msgstr ""

#. type: Title ===
#: src/hal/canonical-devices.adoc:51
#, no-wrap
msgid "Parameters(((HAL Digital Output Parameters)))"
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:53
#, no-wrap
msgid "(bit) *invert*"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:54
msgid "If TRUE, *out* is inverted before writing to the hardware."
msgstr ""

#. type: Title ===
#: src/hal/canonical-devices.adoc:56
#, no-wrap
msgid "Functions(((HAL Digital Output Functions)))"
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:58 src/hal/canonical-devices.adoc:128
#, no-wrap
msgid "(funct) *write*"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:59
msgid "Read *out* and *invert*, and set hardware output accordingly."
msgstr ""

#. type: Title ==
#: src/hal/canonical-devices.adoc:61
#, no-wrap
msgid "Analog Input(((HAL Analog Input)))"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:66
msgid ""
"The canonical analog input (I/O type: `adcin`). This is expected to be used "
"for analog to digital converters, which convert e.g. voltage to a continuous "
"range of values."
msgstr ""

#. type: Title ===
#: src/hal/canonical-devices.adoc:68
#, no-wrap
msgid "Pins(((HAL Analog Input Pins)))"
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:70 src/hal/canonical-devices.adoc:102
#, no-wrap
msgid "(float) *value*"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:73
#, no-wrap
msgid ""
"The hardware reading, scaled according to the *scale* and *offset* parameters.\n"
"*value* = ((input reading, in hardware-dependent units) * *scale*) - *offset*"
msgstr ""

#. type: Title ===
#: src/hal/canonical-devices.adoc:75
#, no-wrap
msgid "Parameters(((HAL Analog Input Parameters)))"
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:77 src/hal/canonical-devices.adoc:112
#, no-wrap
msgid "(float) *scale*"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:79
msgid ""
"The input voltage (or current) will be multiplied by *scale* before being "
"output to *value*."
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:79 src/hal/canonical-devices.adoc:110
#, no-wrap
msgid "(float) *offset*"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:81
msgid ""
"This will be subtracted from the hardware input voltage (or current) after "
"the scale multiplier has been applied."
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:81
#, no-wrap
msgid "(float) *bit_weight*"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:83
msgid ""
"The value of one least significant bit (LSB).  This is effectively the "
"granularity of the input reading."
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:83
#, no-wrap
msgid "(float) *hw_offset*"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:85
msgid ""
"The value present on the input when 0 volts is applied to the input pin(s)."
msgstr ""

#. type: Title ===
#: src/hal/canonical-devices.adoc:87
#, no-wrap
msgid "Functions(((HAL Analog Input Functions)))"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:91
msgid ""
"Read the values of this analog input channel.  This may be used for "
"individual channel reads, or it may cause all channels to be read"
msgstr ""

#. type: Title ==
#: src/hal/canonical-devices.adoc:93
#, no-wrap
msgid "Analog Output(((HAL Analog Output)))"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:98
msgid ""
"The canonical analog output (I/O Type: *adcout*). This is intended for any "
"kind of hardware that can output a more-or-less continuous range of values. "
"Examples are digital to analog converters or PWM generators."
msgstr ""

#. type: Title ===
#: src/hal/canonical-devices.adoc:100
#, no-wrap
msgid "Pins(((HAL Analog Output Pins)))"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:104
msgid ""
"The value to be written. The actual value output to the hardware will depend "
"on the scale and offset parameters."
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:104
#, no-wrap
msgid "(bit) *enable*"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:106
msgid "If false, then output 0 to the hardware, regardless of the *value* pin."
msgstr ""

#. type: Title ===
#: src/hal/canonical-devices.adoc:108
#, no-wrap
msgid "Parameters(((HAL Analog Output Parameters)))"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:112
msgid "This will be added to the *value* before the hardware is updated."
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:114
msgid ""
"This should be set so that an input of 1 on the *value* pin will cause the "
"analog output pin to read 1 volt."
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:114
#, no-wrap
msgid "(float) *high_limit* (optional)"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:117
msgid ""
"When calculating the value to output to the hardware, if *value* + *offset* "
"is greater than *high_limit*, then *high_limit* will be used instead."
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:117
#, no-wrap
msgid "(float) *low_limit* (optional)"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:120
msgid ""
"When calculating the value to output to the hardware, if *value* + *offset* "
"is less than *low_limit*, then *low_limit* will be used instead."
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:120
#, no-wrap
msgid "(float) *bit_weight* (optional)"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:122
msgid ""
"The value of one least significant bit (LSB), in volts (or mA, for current "
"outputs)."
msgstr ""

#. type: Labeled list
#: src/hal/canonical-devices.adoc:122
#, no-wrap
msgid "(float) *hw_offset*  (optional)"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:124
msgid ""
"The actual voltage (or current)  that will be output if 0 is written to the "
"hardware."
msgstr ""

#. type: Title ===
#: src/hal/canonical-devices.adoc:126
#, no-wrap
msgid "Functions(((HAL Analog Output Functions)))"
msgstr ""

#. type: Plain text
#: src/hal/canonical-devices.adoc:137
msgid ""
"This causes the calculated value to be output to the hardware. If enable is "
"false, then the output will be 0, regardless of *value*, *scale*, and "
"*offset*.  The meaning of \"0\" is dependent on the hardware. For example, a "
"bipolar 12-bit A/D may need to write 0x1FF (mid scale) to the D/A get 0 "
"volts from the hardware pin. If enable is true, read scale, offset and value "
"and output to the adc (*scale* * *value*) + *offset*. If enable is false, "
"then output 0."
msgstr ""

#. type: Title =
#: src/hal/comp.adoc:5
#, no-wrap
msgid "HAL Component Generator(((HAL Component Generator)))"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:18
msgid ""
"Writing a HAL component can be a tedious process, most of it in setup calls "
"to 'rtapi_' and 'hal_' functions and associated error checking.  "
"'halcompile' will write all this code for you, automatically."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:21
msgid ""
"Compiling a HAL component is also much easier when using 'halcompile', "
"whether the component is part of the LinuxCNC source tree, or outside it."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:25
msgid ""
"For instance, when coded in C, a simple component such as \"ddt\" is around "
"80 lines of code. The equivalent component is very short when written using "
"the 'halcompile' preprocessor:"
msgstr ""

#. type: Block title
#: src/hal/comp.adoc:27
#, no-wrap
msgid "Simple Component Example"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:39
#, no-wrap
msgid ""
"component ddt \"Compute the derivative of the input function\";\n"
"pin in float in;\n"
"pin out float out;\n"
"variable double old;\n"
"function _;\n"
"license \"GPL\"; // indicates GPL v2 or later\n"
";;\n"
"float tmp = in;\n"
"out = (tmp - old) / fperiod;\n"
"old = tmp;\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:46
msgid ""
"To compile a component, if a packaged version of LinuxCNC is used, "
"development packages have to be installed using either Synaptic from the "
"main menu 'System -> Administration -> Synaptic package manager' or running "
"one of the following commands in a terminal window:"
msgstr ""

#. type: Block title
#: src/hal/comp.adoc:47
#, no-wrap
msgid "Development packages installation"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:52
#, no-wrap
msgid ""
"sudo apt install linuxcnc-dev\n"
"# or\n"
"sudo apt install linuxcnc-uspace-dev\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:57
msgid ""
"Another method is using the Synaptic package manager, from the Applications "
"menu, to install the `linuxcnc-dev` or `linuxcnc-uspace-dev` packages."
msgstr ""

#. type: Title ==
#: src/hal/comp.adoc:58
#, no-wrap
msgid "Using a Component"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:61
msgid ""
"Components need to be loaded and added to a thread before it can be used."
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:67
#, no-wrap
msgid ""
"loadrt threads name1=servo-thread period1=1000000\n"
"loadrt ddt\n"
"addf ddt.0 servo-thread\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:71
msgid ""
"More information on 'loadrt' and 'addf' can be found in the <<cha:basic-hal-"
"reference,HAL Basics>>."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:74
msgid ""
"To test your component you can follow the examples in the <<cha:hal-tutorial,"
"HAL Tutorial>>."
msgstr ""

#. type: Title ==
#: src/hal/comp.adoc:75
#, no-wrap
msgid "Definitions"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:80
msgid ""
"'component' - A component is a single real-time module, which is loaded with "
"'halcmd loadrt'. One '.comp' file specifies one component. The component "
"name and file name must match."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:85
msgid ""
"'instance' - A component can have zero or more instances. Each instance of a "
"component is created equal (they all have the same pins, parameters, "
"functions, and data) but behave independently when their pins, parameters, "
"and data have different values."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:93
msgid ""
"'singleton' - It is possible for a component to be a \"singleton\", in which "
"case exactly one instance is created. It seldom makes sense to write a "
"'singleton' component, unless there can literally only be a single object of "
"that kind in the system (for instance, a component whose purpose is to "
"provide a pin with the current UNIX time, or a hardware driver for the "
"internal PC speaker)"
msgstr ""

#. type: Title ==
#: src/hal/comp.adoc:94
#, no-wrap
msgid "Instance creation"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:98
msgid ""
"For a singleton, the one instance is created when the component is loaded."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:104
msgid ""
"For a non-singleton, the 'count' module parameter determines how many "
"numbered instances are created.  If 'count' is not specified, the 'names' "
"module parameter determines how many named instances are created.  If "
"neither 'count' nor 'names' is specified, a single numbered instance is "
"created."
msgstr ""

#. type: Title ==
#: src/hal/comp.adoc:105
#, no-wrap
msgid "Implicit Parameters"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:112
msgid ""
"Functions are implicitly passed the 'period' parameter which is the time in "
"nanoseconds of the last period to execute the component.  Functions which "
"use floating-point can also refer to 'fperiod' which is the floating-point "
"time in seconds, or (period*1e-9).  This can be useful in components that "
"need the timing information."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:118
msgid ""
"A '.comp' file consists of a number of declarations, followed by ';;' on a "
"line of its own, followed by C code implementing the module's functions."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:120
msgid "Declarations include:"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:122
msgid "'component HALNAME (DOC);'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:123
msgid ""
"'pin PINDIRECTION TYPE HALNAME ([SIZE]|[MAXSIZE: CONDSIZE]) (if CONDITION) "
"(= STARTVALUE) (DOC) ;'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:124
msgid ""
"'param PARAMDIRECTION TYPE HALNAME ([SIZE]|[MAXSIZE: CONDSIZE]) (if "
"CONDITION) (= STARTVALUE) (DOC) ;'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:125
msgid "'function HALNAME (fp | nofp) (DOC);'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:126
msgid "'option OPT (VALUE);'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:127
msgid "'variable CTYPE STARREDNAME ([SIZE]);'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:128
msgid "'description DOC;'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:129
msgid "'examples DOC;'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:130
msgid "'notes DOC;'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:131
msgid "'see_also DOC;'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:132
msgid "'license LICENSE;'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:133
msgid "'author AUTHOR;'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:134
msgid "'include HEADERFILE;'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:137
msgid ""
"Parentheses indicate optional items. A vertical bar indicates alternatives. "
"Words in 'CAPITALS' indicate variable text, as follows:"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:139
msgid "'NAME' - A standard C identifier"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:143
msgid ""
"'STARREDNAME' - A C identifier with zero or more * before it.  This syntax "
"can be used to declare instance variables that are pointers.  Note that "
"because of the grammar, there may not be whitespace between the * and the "
"variable name."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:150
msgid ""
"'HALNAME' - An extended identifier.  When used to create a HAL identifier, "
"any underscores are replaced with dashes, and any trailing dash or period is "
"removed, so that \"this_name_\" will be turned into \"this-name\", and if "
"the name is \"_\", then a trailing period is removed as well, so that "
"\"function _\" gives a HAL function name like \"component.<num>\" instead of "
"\"component.<num>.\""
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:153
msgid ""
"If present, the prefix 'hal_' is removed from the beginning of the component "
"name when creating pins, parameters and functions."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:158
msgid ""
"In the HAL identifier for a pin or parameter, # denotes an array item, and "
"must be used in conjunction with a '[SIZE]' declaration. The hash marks are "
"replaced with a 0-padded number with the same length as the number of # "
"characters."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:161
msgid ""
"When used to create a C identifier, the following changes are applied to the "
"HALNAME:"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:164
msgid ""
"Any \"#\" characters, and any \".\", \"_\" or \"-\" characters immediately "
"before them, are removed."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:165
msgid "Any remaining \".\" and \"-\" characters are replaced with \"_\"."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:166
msgid "Repeated \"\\_\" characters are changed to a single \"\\_\" character."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:169
msgid ""
"A trailing \"_\" is retained, so that HAL identifiers which would otherwise "
"collide with reserved names or keywords (e.g., 'min') can be used."
msgstr ""

#. type: Table
#: src/hal/comp.adoc:172
#, no-wrap
msgid "HALNAME"
msgstr ""

#. type: Table
#: src/hal/comp.adoc:172
#, no-wrap
msgid "C Identifier"
msgstr ""

#. type: Table
#: src/hal/comp.adoc:173
#, no-wrap
msgid "HAL Identifier"
msgstr ""

#. type: Table
#: src/hal/comp.adoc:173 src/hal/comp.adoc:174
#, no-wrap
msgid "x_y_z"
msgstr ""

#. type: Table
#: src/hal/comp.adoc:174 src/hal/comp.adoc:176
#, no-wrap
msgid "x-y-z"
msgstr ""

#. type: Table
#: src/hal/comp.adoc:174 src/hal/comp.adoc:175
#, no-wrap
msgid "x-y.z"
msgstr ""

#. type: Table
#: src/hal/comp.adoc:175
#, no-wrap
msgid "x_y_z_"
msgstr ""

#. type: Table
#: src/hal/comp.adoc:176
#, no-wrap
msgid "x.##.y"
msgstr ""

#. type: Table
#: src/hal/comp.adoc:176
#, no-wrap
msgid "x_y(MM)"
msgstr ""

#. type: Table
#: src/hal/comp.adoc:177
#, no-wrap
msgid "x.MM.z"
msgstr ""

#. type: Table
#: src/hal/comp.adoc:177
#, no-wrap
msgid "x.##"
msgstr ""

#. type: Table
#: src/hal/comp.adoc:177
#, no-wrap
msgid "x(MM)"
msgstr ""

#. type: Table
#: src/hal/comp.adoc:178
#, no-wrap
msgid "x.MM"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:182
msgid ""
"'if CONDITION' - An expression involving the variable 'personality' which is "
"nonzero when the pin or parameter should be created"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:185
msgid ""
"'SIZE' - A number that gives the size of an array. The array items are "
"numbered from 0 to 'SIZE'-1."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:190
msgid ""
"'MAXSIZE : CONDSIZE' - A number that gives the maximum size of the array "
"followed by an expression involving the variable 'personality' and which "
"always evaluates to less than 'MAXSIZE'. When the array is created its size "
"will be 'CONDSIZE'."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:193
msgid ""
"'DOC' - A string that documents the item. String can be a C-style \"double "
"quoted\" string, like:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:196
#, no-wrap
msgid "\"Selects the desired edge: TRUE means falling, FALSE means rising\"\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:200
msgid ""
"or a Python-style \"triple quoted\" string, which may include embedded "
"newlines and quote characters, such as:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:204
#, no-wrap
msgid ""
"\"\"\"The effect of this parameter, also known as \"the orb of zot\",\n"
"will require at least two paragraphs to explain.\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:207
#, no-wrap
msgid ""
"Hopefully these paragraphs have allowed you to understand \"zot\"\n"
"better.\"\"\"\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:211
msgid ""
"Or a string may be preceded by the literal character 'r', in which case the "
"string is interpreted like a Python raw-string."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:216
msgid ""
"The documentation string is in \"groff -man\" format. For more information "
"on this markup format, see 'groff_man(7)'. Remember that 'halcompile' "
"interprets backslash escapes in strings, so for instance to set the italic "
"font for the word 'example', write:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:219
#, no-wrap
msgid "\"\\\\fIexample\\\\fB\"\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:223
msgid ""
"In this case, r-strings are particularly useful, because the backslashes in "
"an r-string need not be doubled:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:226
#, no-wrap
msgid "r\"\\fIexample\\fB\"\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:231
msgid ""
"'TYPE' - One of the HAL types: 'bit', 'signed', 'unsigned', or 'float'. The "
"old names 's32' and 'u32' may also be used, but 'signed' and 'unsigned' are "
"preferred."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:235
msgid ""
"'PINDIRECTION' - One of the following: 'in', 'out', or 'io'. A component "
"sets a value for an 'out' pin, it reads a value from an 'in' pin, and it may "
"read or set the value of an 'io' pin."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:238
msgid ""
"'PARAMDIRECTION' - One of the following: 'r' or 'rw'. A component sets a "
"value for a 'r' parameter, and it may read or set the value of a 'rw' "
"parameter."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:242
msgid ""
"'STARTVALUE' - Specifies the initial value of a pin or parameter. If it is "
"not specified, then the default is '0' or 'FALSE', depending on the type of "
"the item."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:248
msgid ""
"'HEADERFILE' - The name of a header file, either in double-quotes (`include "
"\"myfile.h\";`) or in angle brackets (`include <systemfile.h>;`).  The "
"header file will be included (using C's #include) at the top of the file, "
"before pin and parameter declarations."
msgstr ""

#. type: Title ===
#: src/hal/comp.adoc:249
#, no-wrap
msgid "HAL functions"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:252
msgid ""
"'fp' - Indicates that the function performs floating-point calculations."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:257
msgid ""
"'nofp' - Indicates that it only performs integer calculations. If neither is "
"specified, 'fp' is assumed. Neither 'halcompile' nor gcc can detect the use "
"of floating-point calculations in functions that are tagged 'nofp', but use "
"of such operations results in undefined behavior."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:261
msgid "The currently defined options are:"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:267
msgid ""
"'option singleton yes' - (default: no)  Do not create a 'count' module "
"parameter, and always create a single instance. With 'singleton', items are "
"named 'component-name.item-name' and without 'singleton', items for numbered "
"instances are named 'component-name.<num>.item-name'."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:271
msgid ""
"'option default_count number' - (default: 1)  Normally, the module parameter "
"'count' defaults to 1. If specified, the 'count' will default to this value "
"instead."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:277
msgid ""
"'option count_function yes' - (default: no)  Normally, the number of "
"instances to create is specified in the module parameter 'count'; if "
"'count_function' is specified, the value returned by the function 'int "
"get_count(void)' is used instead, and the 'count' module parameter is not "
"defined."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:282
msgid ""
"'option rtapi_app no' - (default: yes)  Normally, the functions "
"`rtapi_app_main()` and `rtapi_app_exit()` are automatically defined. With "
"'option rtapi_app no', they are not, and must be provided in the C code.  "
"Use the following prototypes:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:285
#, no-wrap
msgid "`int rtapi_app_main(void);`\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:287
#, no-wrap
msgid "`void rtapi_app_exit(void);`\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:292
msgid ""
"When implementing your own `rtapi_app_main()`, call the function `int "
"export(char *prefix, long extra_arg)` to register the pins, parameters, and "
"functions for `prefix`."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:298
msgid ""
"'option data TYPE' - (default: none) *deprecated* If specified, each "
"instance of the component will have an associated data block of type "
"'TYPE' (which can be a simple type like 'float' or the name of a type "
"created with 'typedef').  In new components, 'variable' should be used "
"instead."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:303
msgid ""
"'option extra_setup yes' - (default: no)  If specified, call the function "
"defined by 'EXTRA_SETUP' for each instance. If using the automatically "
"defined 'rtapi_app_main', 'extra_arg' is the number of this instance."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:308
msgid ""
"'option extra_cleanup yes' - (default: no)  If specified, call the function "
"defined by 'EXTRA_CLEANUP' from the automatically defined 'rtapi_app_exit', "
"or if an error is detected in the automatically defined 'rtapi_app_main'."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:319
msgid ""
"'option userspace yes' - (default: no)  If specified, this file describes a "
"userspace (i.e., non-realtime) component, rather than a regular (i.e., "
"realtime) one. A userspace component may not have functions defined by the "
"'function' directive. Instead, after all the instances are constructed, the "
"C function `void user_mainloop(void);` is called. When this function "
"returns, the component exits.  Typically, 'user_mainloop()' will use "
"'FOR_ALL_INSTS()' to perform the update action for each instance, then sleep "
"for a short time. Another common action in 'user_mainloop()' may be to call "
"the event handler loop of a GUI toolkit."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:328
msgid ""
"'option userinit yes' - (default: no)  This option is ignored if the option "
"'userspace' (see above) is set to 'no'.  If 'userinit' is specified, the "
"function 'userinit(argc,argv)' is called before 'rtapi_app_main()' (and thus "
"before the call to 'hal_init()' ). This function may process the commandline "
"arguments or take other actions. Its return type is 'void'; it may call "
"'exit()' if it wishes to terminate rather than create a HAL component (for "
"instance, because the commandline arguments were invalid)."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:335
msgid ""
"'option extra_link_args \"...\"' - (default: \"\")  This option is ignored "
"if the option 'userspace' (see above) is set to 'no'.  When linking a "
"userspace component, the arguments given are inserted in the link line.  "
"Note that because compilation takes place in a temporary directory, \"-L.\" "
"refers to the temporary directory and not the directory where the .comp "
"source file resides."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:340
msgid ""
"'option extra_compile_args \"...\"' - (default: \"\")  This option is "
"ignored if the option 'userspace' (see above) is set to 'no'.  When "
"compiling a userspace component, the arguments given are inserted in the "
"compiler command line."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:343
msgid ""
"'option homemod yes' - (default: no)  Module is a custom Homing module "
"loaded using [EMCMOT]HOMEMOD=modulename"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:346
msgid ""
"'option tpmod yes' - (default: no)  Module is a custom Trajectory Planning "
"(tp) module loaded using [TRAJ]TPMOD=modulename"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:351
#, no-wrap
msgid ""
"If an option's VALUE is not specified, then it is equivalent to specifying 'option … yes'.\n"
"The result of assigning an inappropriate value to an option is undefined.\n"
"The result of using any other option is undefined. +"
msgstr ""

#. type: Title ===
#: src/hal/comp.adoc:352
#, no-wrap
msgid "License and Authorship"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:357
msgid ""
"'LICENSE' - Specify the license of the module for the documentation and for "
"the MODULE_LICENSE() module declaration. For example, to specify that the "
"module's license is GPL v2 or later:"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:359
#, no-wrap
msgid "license \"GPL\"; // indicates GPL v2 or later\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:363
msgid ""
"For additional information on the meaning of MODULE_LICENSE() and additional "
"license identifiers, see '<linux/module.h>' or the manual page "
"'rtapi_module_param(3)'."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:365
msgid "This declaration is *required*."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:367
msgid "'AUTHOR' - Specify the author of the module for the documentation."
msgstr ""

#. type: Title ===
#: src/hal/comp.adoc:368
#, no-wrap
msgid "Per-instance data storage"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:374
#, no-wrap
msgid ""
"`variable CTYPE STARREDNAME;\n"
"variable CTYPE STARREDNAME[SIZE];\n"
"variable CTYPE STARREDNAME = DEFAULT;\n"
"variable CTYPE STARREDNAME[SIZE] = DEFAULT;`"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:382
#, no-wrap
msgid ""
"Declare a per-instance variable 'STARREDNAME' of type 'CTYPE', optionally as an array of 'SIZE' items, and optionally with a default value 'DEFAULT'.\n"
"Items with no 'DEFAULT' are initialized to all-bits-zero.\n"
"'CTYPE' is a simple one-word C type, such as 'float', 'u32', 's32', int, etc.\n"
"Access to array variables uses square brackets."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:386
#, no-wrap
msgid ""
"If a variable is to be of a pointer type, there may not be any space between the \"*\" and the variable name.\n"
"Therefore, the following is acceptable:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:389
#, no-wrap
msgid "variable int *example;\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:392
msgid "But the following are not:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:396
#, no-wrap
msgid ""
"variable int* badexample;\n"
"variable int * badexample;\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:403
msgid ""
"C++-style one-line comments (`//...`) and C-style multi-line comments (`/"
"* ... */`)  are both supported in the declaration section."
msgstr ""

#. type: Title ==
#: src/hal/comp.adoc:404
#, no-wrap
msgid "Restrictions"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:408
msgid ""
"Though HAL permits a pin, a parameter, and a function to have the same name, "
"'halcompile' does not."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:411
msgid ""
"Variable and function names that can not be used or are likely to cause "
"problems include:"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:413
msgid "Anything beginning with '__comp_'."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:414
msgid "'comp_id'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:415
msgid "'fperiod'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:416
msgid "'rtapi_app_main'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:417
msgid "'rtapi_app_exit'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:418
msgid "'extra_setup'"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:419
msgid "'extra_cleanup'"
msgstr ""

#. type: Title ==
#: src/hal/comp.adoc:420
#, no-wrap
msgid "Convenience Macros"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:428
msgid ""
"Based on the items in the declaration section, 'halcompile' creates a C "
"structure called `struct __comp_state`. However, instead of referring to the "
"members of this structure (e.g., `*(inst->name)`), they will generally be "
"referred to using the macros below. The details of `struct __comp_state` and "
"these macros may change from one version of 'halcompile' to the next."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:434
msgid ""
"'FUNCTION(name)' - Use this macro to begin the definition of a realtime "
"function which was previously declared with 'function NAME'. The function "
"includes a parameter 'period' which is the integer number of nanoseconds "
"between calls to the function."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:439
msgid ""
"'EXTRA_SETUP()' - Use this macro to begin the definition of the function "
"called to perform extra setup of this instance. Return a negative Unix "
"'errno' value to indicate failure (e.g., 'return -EBUSY' on failure to "
"reserve an I/O port), or 0 to indicate success."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:444
msgid ""
"'EXTRA_CLEANUP()' - Use this macro to begin the definition of the function "
"called to perform extra cleanup of the component. Note that this function "
"must clean up all instances of the component, not just one. The \"pin_name"
"\", \"parameter_name\", and \"data\" macros may not be used here."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:452
msgid ""
"'pin_name' or 'parameter_name' - For each pin 'pin_name' or param "
"'parameter_name' there is a macro which allows the name to be used on its "
"own to refer to the pin or parameter.  When 'pin_name' or 'parameter_name' "
"is an array, the macro is of the form 'pin_name(idx)' or 'param_name(idx)' "
"where 'idx' is the index into the pin array. When the array is a variable-"
"sized array, it is only legal to refer to items up to its 'condsize'."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:455
msgid ""
"When the item is a conditional item, it is only legal to refer to it when "
"its 'condition' evaluated to a nonzero value."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:460
msgid ""
"'variable_name' - For each variable 'variable_name' there is a macro which "
"allows the name to be used on its own to refer to the variable. When "
"'variable_name' is an array, the normal C-style subscript is used: "
"'variable_name[idx]'."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:463
msgid ""
"'data' - If \"option data\" is specified, this macro allows access to the "
"instance data."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:466
msgid ""
"'fperiod' - The floating-point number of seconds between calls to this "
"realtime function."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:472
msgid ""
"'FOR_ALL_INSTS() {...}' - For userspace components. This macro iterates over "
"all the defined instances. Inside the body of the loop, the 'pin_name', "
"'parameter_name', and 'data' macros work as they do in realtime functions."
msgstr ""

#. type: Title ==
#: src/hal/comp.adoc:473
#, no-wrap
msgid "Components with one function"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:479
msgid ""
"If a component has only one function and the string \"FUNCTION\" does not "
"appear anywhere after ';;', then the portion after ';;' is all taken to be "
"the body of the component's single function. See the <<code:simple-comp-"
"example,Simple Comp>> for and example of this."
msgstr ""

#. type: Title ==
#: src/hal/comp.adoc:480
#, no-wrap
msgid "Component Personality"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:490
msgid ""
"If a component has any pins or parameters with an \"if condition\" or "
"\"[maxsize : condsize]\", it is called a component with 'personality'.  The "
"'personality' of each instance is specified when the module is loaded. "
"'Personality' can be used to create pins only when needed.  For instance, "
"personality is used in the 'logic' component, to allow for a variable number "
"of input pins to each logic gate and to allow for a selection of any of the "
"basic boolean logic functions 'and', 'or', and 'xor'."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:495
msgid ""
"The default number of allowed 'personality' items is a compile-time setting "
"(64).  The default applies to numerous components included in the "
"distribution that are built using halcompile."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:499
msgid ""
"To alter the allowed number of personality items for user-built components, "
"use the '--personality' option with halcompile.  For example, to allow up to "
"128 personality times:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:502
#, no-wrap
msgid "  [sudo] halcompile --personality=128 --install ...\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:507
msgid ""
"When using components with personality, normal usage is to specify a "
"personality item for *each* specified component instance.  Example for 3 "
"instances of the logic component:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:511
#, no-wrap
msgid "loadrt logic names=and4,or3,nand5, personality=0x104,0x203,0x805\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:520
msgid ""
"If a loadrt line specifies more instances than personalities, the instances "
"with unspecified personalities are assigned a personality of 0.  If the "
"requested number of instances exceeds the number of allowed personalities, "
"personalities are assigned by indexing modulo the number of allowed "
"personalities.  A message is printed denoting such assignments."
msgstr ""

#. type: Title ==
#: src/hal/comp.adoc:521
#, no-wrap
msgid "Compiling"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:526
msgid ""
"Place the '.comp' file in the source directory 'linuxcnc/src/hal/components' "
"and re-run 'make'.  'Comp' files are automatically detected by the build "
"system."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:530
msgid ""
"If a '.comp' file is a driver for hardware, it may be placed in 'linuxcnc/"
"src/hal/drivers' and will be built unless LinuxCNC is configured as a "
"userspace simulator."
msgstr ""

#. type: Title ==
#: src/hal/comp.adoc:531
#, no-wrap
msgid "Compiling realtime components outside the source tree"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:536
msgid ""
"'halcompile' can process, compile, and install a realtime component in a "
"single step, placing 'rtexample.ko' in the LinuxCNC realtime module "
"directory:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:539
#, no-wrap
msgid "[sudo] halcompile --install rtexample.comp\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:545
msgid ""
"sudo (for root permission) is needed when using LinuxCNC from a deb package "
"install.  When using a Run-In-Place (RIP) build, root privileges should not "
"be needed."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:548
msgid ""
"Or, it can process and compile in one step, leaving 'example.ko' (or "
"'example.so' for the simulator) in the current directory:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:551
#, no-wrap
msgid "halcompile --compile rtexample.comp\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:554
msgid "Or it can simply process, leaving 'example.c' in the current directory:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:557
#, no-wrap
msgid "halcompile rtexample.comp\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:561
msgid ""
"'halcompile' can also compile and install a component written in C, using "
"the '--install' and '--compile' options shown above:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:564
#, no-wrap
msgid "[sudo] halcompile --install rtexample2.c\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:568
msgid ""
"man-format documentation can also be created from the information in the "
"declaration section:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:571
#, no-wrap
msgid "halcompile --document rtexample.comp\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:574
msgid "The resulting manpage, 'example.9' can be viewed with"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:577
#, no-wrap
msgid "man ./example.9\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:580
msgid "or copied to a standard location for manual pages."
msgstr ""

#. type: Title ==
#: src/hal/comp.adoc:581
#, no-wrap
msgid "Compiling userspace components outside the source tree"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:584
msgid ""
"'halcompile' can process, compile, install, and document userspace "
"components:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:590
#, no-wrap
msgid ""
"halcompile usrexample.comp\n"
"halcompile --compile usrexample.comp\n"
"[sudo] halcompile --install usrexample.comp\n"
"halcompile --document usrexample.comp\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:593
msgid "This only works for '.comp' files, not for '.c' files."
msgstr ""

#. type: Title ===
#: src/hal/comp.adoc:596
#, no-wrap
msgid "constant"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:600
msgid ""
"Note that the declaration \"function _\" creates functions named "
"\"constant.0\", etc.  The file name must match the component name."
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:610
#, no-wrap
msgid ""
"component constant;\n"
"pin out float out;\n"
"param r float value = 1.0;\n"
"function _;\n"
"license \"GPL\"; // indicates GPL v2 or later\n"
";;\n"
"FUNCTION(_) { out = value; }\n"
msgstr ""

#. type: Title ===
#: src/hal/comp.adoc:612
#, no-wrap
msgid "sincos"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:618
msgid ""
"This component computes the sine and cosine of an input angle in radians. It "
"has different capabilities than the \"sine\" and \"cosine\" outputs of "
"siggen, because the input is an angle, rather than running freely based on a "
"\"frequency\" parameter."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:622
msgid ""
"The pins are declared with the names 'sin_' and 'cos_' in the source code so "
"that they do not interfere with the functions 'sin()' and 'cos()'. The HAL "
"pins are still called 'sincos.<num>.sin'."
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:634
#, no-wrap
msgid ""
"component sincos;\n"
"pin out float sin_;\n"
"pin out float cos_;\n"
"pin in float theta;\n"
"function _;\n"
"license \"GPL\"; // indicates GPL v2 or later\n"
";;\n"
"#include <rtapi_math.h>\n"
"FUNCTION(_) { sin_ = sin(theta); cos_ = cos(theta); }\n"
msgstr ""

#. type: Title ===
#: src/hal/comp.adoc:636
#, no-wrap
msgid "out8"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:646
msgid ""
"This component is a driver for a 'fictional' card called \"out8\", which has "
"8 pins of digital output which are treated as a single 8-bit value. There "
"can be a varying number of such cards in the system, and they can be at "
"various addresses. The pin is called 'out_' because 'out' is an identifier "
"used in '<asm/io.h>'. It illustrates the use of 'EXTRA_SETUP' and "
"'EXTRA_CLEANUP' to request an I/O region and then free it in case of error "
"or when the module is unloaded."
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:652
#, no-wrap
msgid ""
"component out8;\n"
"pin out unsigned out_ \"Output value; only low 8 bits are used\";\n"
"param r unsigned ioaddr;\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:654
#, no-wrap
msgid "function _;\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:659
#, no-wrap
msgid ""
"option count_function;\n"
"option extra_setup;\n"
"option extra_cleanup;\n"
"option constructable no;\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:663
#, no-wrap
msgid ""
"license \"GPL\"; // indicates GPL v2 or later\n"
";;\n"
"#include <asm/io.h>\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:667
#, no-wrap
msgid ""
"#define MAX 8\n"
"int io[MAX] = {0,};\n"
"RTAPI_MP_ARRAY_INT(io, MAX, \"I/O addresses of out8 boards\");\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:673
#, no-wrap
msgid ""
"int get_count(void) {\n"
"    int i = 0;\n"
"    for(i=0; i<MAX && io[i]; i++) { /* Nothing */ }\n"
"    return i;\n"
"}\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:684
#, no-wrap
msgid ""
"EXTRA_SETUP() {\n"
"    if(!rtapi_request_region(io[extra_arg], 1, \"out8\")) {\n"
"        // set this I/O port to 0 so that EXTRA_CLEANUP does not release the IO\n"
"        // ports that were never requested.\n"
"        io[extra_arg] = 0;\n"
"        return -EBUSY;\n"
"    }\n"
"    ioaddr = io[extra_arg];\n"
"    return 0;\n"
"}\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:691
#, no-wrap
msgid ""
"EXTRA_CLEANUP() {\n"
"    int i;\n"
"    for(i=0; i < MAX && io[i]; i++) {\n"
"        rtapi_release_region(io[i], 1);\n"
"    }\n"
"}\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:693
#, no-wrap
msgid "FUNCTION(_) { outb(out_, ioaddr); }\n"
msgstr ""

#. type: Title ===
#: src/hal/comp.adoc:695
#, no-wrap
msgid "hal_loop"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:701
#, no-wrap
msgid ""
"component hal_loop;\n"
"pin out float example;\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:707
msgid ""
"This fragment of a component illustrates the use of the 'hal_' prefix in a "
"component name. 'loop' is the name of a standard Linux kernel module, so a "
"'loop' component might not successfully load if the Linux 'loop' module was "
"also present on the system."
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:711
msgid ""
"When loaded, 'halcmd show comp' will show a component called 'hal_loop'. "
"However, the pin shown by 'halcmd show pin' will be 'loop.0.example', not "
"'hal-loop.0.example'."
msgstr ""

#. type: Title ===
#: src/hal/comp.adoc:712
#, no-wrap
msgid "arraydemo"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:715
msgid "This realtime component illustrates use of fixed-size arrays:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:727
#, no-wrap
msgid ""
"component arraydemo \"4-bit Shift register\";\n"
"pin in bit in;\n"
"pin out bit out-# [4];\n"
"function _ nofp;\n"
"license \"GPL\"; // indicates GPL v2 or later\n"
";;\n"
"int i;\n"
"for(i=3; i>0; i--) out(i) = out(i-1);\n"
"out(0) = in;\n"
msgstr ""

#. type: Title ===
#: src/hal/comp.adoc:729
#, no-wrap
msgid "rand"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:733
msgid ""
"This userspace component changes the value on its output pin to a new random "
"value in the range (0,1) about once every 1ms."
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:738
#, no-wrap
msgid ""
"component rand;\n"
"option userspace;\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:743
#, no-wrap
msgid ""
"pin out float out;\n"
"license \"GPL\"; // indicates GPL v2 or later\n"
";;\n"
"#include <unistd.h>\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:750
#, no-wrap
msgid ""
"void user_mainloop(void) {\n"
"    while(1) {\n"
"        usleep(1000);\n"
"        FOR_ALL_INSTS() out = drand48();\n"
"    }\n"
"}\n"
msgstr ""

#. type: Title ===
#: src/hal/comp.adoc:752
#, no-wrap
msgid "logic"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:756
msgid ""
"This realtime component shows how to use \"personality\" to create variable-"
"size arrays and optional pins."
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:789
#, no-wrap
msgid ""
"component logic \"LinuxCNC HAL component providing experimental logic functions\";\n"
"pin in bit in-##[16 : personality & 0xff];\n"
"pin out bit and if personality & 0x100;\n"
"pin out bit or if personality & 0x200;\n"
"pin out bit xor if personality & 0x400;\n"
"function _ nofp;\n"
"description \"\"\"\n"
"Experimental general 'logic function' component.  Can perform 'and', 'or'\n"
"and 'xor' of up to 16 inputs.  Determine the proper value for 'personality'\n"
"by adding:\n"
".IP \\\\(bu 4\n"
"The number of input pins, usually from 2 to 16\n"
".IP \\\\(bu\n"
"256 (0x100)  if the 'and' output is desired\n"
".IP \\\\(bu\n"
"512 (0x200)  if the 'or' output is desired\n"
".IP \\\\(bu\n"
"1024 (0x400)  if the 'xor' (exclusive or) output is desired\"\"\";\n"
"license \"GPL\"; // indicates GPL v2 or later\n"
";;\n"
"FUNCTION(_) {\n"
"    int i, a=1, o=0, x=0;\n"
"    for(i=0; i < (personality & 0xff); i++) {\n"
"        if(in(i)) { o = 1; x = !x; }\n"
"        else { a = 0; }\n"
"    }\n"
"    if(personality & 0x100) and = a;\n"
"    if(personality & 0x200) or = o;\n"
"    if(personality & 0x400) xor = x;\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:792
msgid "A typical load line for this component might be"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:796
#, no-wrap
msgid "loadrt logic count=3 personality=0x102,0x305,0x503\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:799
msgid "which creates the following pins:"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:801
msgid "A 2-input AND gate: logic.0.and, logic.0.in-00, logic.0.in-01"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:803
msgid ""
"5-input AND and OR gates: logic.1.and, logic.1.or, logic.1.in-00, logic.1."
"in-01, logic.1.in-02, logic.1.in-03, logic.1.in-04,"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:805
msgid ""
"3-input AND and XOR gates: logic.2.and, logic.2.xor, logic.2.in-00, logic.2."
"in-01, logic.2.in-02"
msgstr ""

#. type: Title ===
#: src/hal/comp.adoc:806
#, no-wrap
msgid "General Functions"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:810
msgid ""
"This example shows how to call functions from the main function.  It also "
"shows how to pass reference of HAL pins to those functions."
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:817
#, no-wrap
msgid ""
"component example;\n"
"pin in s32 in;\n"
"pin out bit out1;\n"
"pin out bit out2;\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:821
#, no-wrap
msgid ""
"function _;\n"
"license \"GPL\";\n"
";;\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:826
#, no-wrap
msgid ""
"// general pin set true function\n"
"void set(hal_bit_t *p){\n"
"    *p = 1;\n"
"}\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:831
#, no-wrap
msgid ""
"// general pin set false function\n"
"void unset(hal_bit_t *p){\n"
"    *p = 0;\n"
"}\n"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:845
#, no-wrap
msgid ""
"//main function\n"
"FUNCTION(_) {\n"
"    if (in < 0){\n"
"        set(&out1);\n"
"        unset(&out2);\n"
"    }else if (in >0){\n"
"        unset(&out2);\n"
"        set(&out2);\n"
"    }else{\n"
"        unset(&out1);\n"
"        unset(&out2);\n"
"    }\n"
"}\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:848
msgid ""
"This component uses two general function to manipulate a HAL bit pin "
"referenced to it."
msgstr ""

#. type: Title ==
#: src/hal/comp.adoc:849
#, no-wrap
msgid "Command Line Usage"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:852
msgid "The halcompile man page gives details for invoking halcompile."
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:855
#, no-wrap
msgid "$ man halcompile\n"
msgstr ""

#. type: Plain text
#: src/hal/comp.adoc:858
msgid "A brief summary of halcompile usage is given by:"
msgstr ""

#. type: delimited block -
#: src/hal/comp.adoc:861
#, no-wrap
msgid "$ halcompile --help\n"
msgstr ""

#. type: Title =
#: src/hal/components.adoc:5
#, no-wrap
msgid "HAL Component List(((\"HAL Component List\")))"
msgstr ""

#.  < explanation of the difference between a real-time and a userspace component >
#. type: Plain text
#: src/hal/components.adoc:16
msgid ""
"Most of the commands in the following list have man pages.  Some will have "
"expanded descriptions, some will have limited descriptions.  From this list "
"you know what components exist, and you can use 'man name' to get additional "
"information.  To view the information in the man page, in a terminal window "
"type:"
msgstr ""

#. type: delimited block -
#: src/hal/components.adoc:19
#, no-wrap
msgid "man axis (or perhaps 'man <n> axis' if your system requires it. n = 1 for userspace and 9 for realtime components)\n"
msgstr ""

#. type: Plain text
#: src/hal/components.adoc:24
msgid ""
"See also the 'Man Pages' section of the link:../index.html[docs main page] "
"or the link:../man/[directory listing]."
msgstr ""

#. type: Title ===
#: src/hal/components.adoc:26
#, no-wrap
msgid "User Interfaces (Userspace)"
msgstr ""

#. type: Title ====
#: src/hal/components.adoc:27
#, no-wrap
msgid "Machine Control"
msgstr ""

#. type: Table
#: src/hal/components.adoc:30
#, no-wrap
msgid "link:../man/man1/axis.1.html[axis]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:30
#, no-wrap
msgid "AXIS LinuxCNC (The Enhanced Machine Controller) GUI"
msgstr ""

#. type: Table
#: src/hal/components.adoc:31
#, no-wrap
msgid "link:../man/man1/axis-remote.1.html[axis-remote]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:31
#, no-wrap
msgid "AXIS Remote Interface"
msgstr ""

#. type: Table
#: src/hal/components.adoc:32
#, no-wrap
msgid "link:../man/man1/gmoccapy.1.html[gmoccapy]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:32 src/hal/components.adoc:33
#, no-wrap
msgid "Touchy LinuxCNC Graphical User Interface"
msgstr ""

#. type: Table
#: src/hal/components.adoc:33
#, no-wrap
msgid "link:../man/man1/gscreen.1.html[gscreen]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:34
#, no-wrap
msgid "link:../man/man1/halui.1.html[halui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:34
#, no-wrap
msgid "Observe HAL pins and command LinuxCNC through NML"
msgstr ""

#. type: Table
#: src/hal/components.adoc:35
#, no-wrap
msgid "link:../man/man1/mdro.1.html[mdro]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:35
#, no-wrap
msgid "manual only Digital Read Out (DRO)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:36
#, no-wrap
msgid "link:../man/man1/ngcgui.1.html[ngcgui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:36
#, no-wrap
msgid "Framework for conversational G-code generation on the controller"
msgstr ""

#. type: Table
#: src/hal/components.adoc:37
#, no-wrap
msgid "link:../man/man1/panelui.1.html[panelui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:37 src/hal/components.adoc:138
#: src/hal/components.adoc:140
#, no-wrap
msgid "Short description"
msgstr ""

#. type: Table
#: src/hal/components.adoc:38
#, no-wrap
msgid "link:../man/man1/pyngcgui.1.html[pyngcgui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:38
#, no-wrap
msgid "Python implementation of NGCGUI"
msgstr ""

#. type: Table
#: src/hal/components.adoc:39
#, no-wrap
msgid "link:../man/man1/touchy.1.html[touchy]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:39
#, no-wrap
msgid "AXIS - TOUCHY LinuxCNC Graphical User Interface"
msgstr ""

#. type: Title ====
#: src/hal/components.adoc:42
#, no-wrap
msgid "Virtual Control Panels (VCP)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:45
#, no-wrap
msgid "link:../man/man1/gladevcp.1.html[gladevcp]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:45
#, no-wrap
msgid "Virtual Control Panel for LinuxCNC based on Glade, Gtk and HAL widgets"
msgstr ""

#. type: Table
#: src/hal/components.adoc:46
#, no-wrap
msgid "link:../man/man1/gladevcp_demo.1.html[gladevcp_demo]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:46
#, no-wrap
msgid "GladeVCP - used by sample configs to deonstrate Glade Virtual_demo"
msgstr ""

#. type: Table
#: src/hal/components.adoc:47
#, no-wrap
msgid "link:../man/man1/gremlin_view.1.html[gremlin_view]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:47
#, no-wrap
msgid "G-code graphical preview"
msgstr ""

#. type: Table
#: src/hal/components.adoc:48
#, no-wrap
msgid "link:../man/man1/moveoff_gui.1.html[moveoff_gui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:48
#, no-wrap
msgid "GUI for the moveoff component"
msgstr ""

#. type: Table
#: src/hal/components.adoc:49
#, no-wrap
msgid "link:../man/man1/pyui.1.html[pyui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:49
#, no-wrap
msgid "Utility for panelui"
msgstr ""

#. type: Table
#: src/hal/components.adoc:50
#, no-wrap
msgid "link:../man/man1/pyvcp.1.html[pyvcp]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:50
#, no-wrap
msgid "Virtual Control Panel for LinuxCNC"
msgstr ""

#. type: Table
#: src/hal/components.adoc:51
#, no-wrap
msgid "link:../man/man1/pyvcp_demo.1.html[pyvcp_demo]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:51
#, no-wrap
msgid "Python Virtual Control Panel demonstration component"
msgstr ""

#. type: Table
#: src/hal/components.adoc:52
#, no-wrap
msgid "link:../man/man1/qtvcp.1.html[qtvcp]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:52
#, no-wrap
msgid "Qt based virtual control panel"
msgstr ""

#. type: Title ====
#: src/hal/components.adoc:55
#, no-wrap
msgid "Vismach Virtual Machines"
msgstr ""

#. type: Table
#: src/hal/components.adoc:58
#, no-wrap
msgid "link:../man/man1/5axisgui.1.html[5axisgui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:58 src/hal/components.adoc:59
#: src/hal/components.adoc:60 src/hal/components.adoc:61
#: src/hal/components.adoc:65 src/hal/components.adoc:66
#: src/hal/components.adoc:67 src/hal/components.adoc:68
#: src/hal/components.adoc:69
#, no-wrap
msgid "Vismach Virtual Machine GUI"
msgstr ""

#. type: Table
#: src/hal/components.adoc:59
#, no-wrap
msgid "link:../man/man1/hbmgui.1.html[hbmgui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:60
#, no-wrap
msgid "link:../man/man1/hexagui.1.html[hexagui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:61
#, no-wrap
msgid "link:../man/man1/lineardelta.1.html[lineardelta]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:62
#, no-wrap
msgid "link:../man/man1/maho600gui.1.html[maho600gui]"
msgstr ""

#. type: Plain text
#: src/hal/components.adoc:62 src/hal/components.adoc:63 man/man1/hexagui.1:28
#: man/man1/maho600gui.1:28 man/man1/max5gui.1:28
#, no-wrap
msgid "hexagui - Vismach Virtual Machine GUI"
msgstr ""

#. type: Table
#: src/hal/components.adoc:63
#, no-wrap
msgid "link:../man/man1/max5gui.1.html[max5gui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:64
#, no-wrap
msgid "link:../man/man1/puma560gui.1.html[puma560gui]"
msgstr ""

#. type: Plain text
#: src/hal/components.adoc:64 man/man1/puma560gui.1:28
#, no-wrap
msgid "puma560agui - Vismach Virtual Machine GUI"
msgstr ""

#. type: Table
#: src/hal/components.adoc:65
#, no-wrap
msgid "link:../man/man1/pumagui.1.html[pumagui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:66
#, no-wrap
msgid "link:../man/man1/rotarydelta.1.html[rotarydelta]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:67
#, no-wrap
msgid "link:../man/man1/scaragui.1.html[scaragui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:68
#, no-wrap
msgid "link:../man/man1/xyzac-trt-gui.1.html[xyzac-trt-gui]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:69
#, no-wrap
msgid "link:../man/man1/xyzbc-trt-gui.1.html[xyzbc-trt-gui]"
msgstr ""

#. type: Title ===
#: src/hal/components.adoc:72
#, no-wrap
msgid "Motion (Userspace)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:75
#, no-wrap
msgid "link:../man/man1/io.1.html[io]"
msgstr ""

#. type: Plain text
#: src/hal/components.adoc:75 man/man1/io.1:5 man/man1/iocontrol.1:5
#, no-wrap
msgid "iocontrol - interacts with HAL or G-code in userspace"
msgstr ""

#. type: Table
#: src/hal/components.adoc:76
#, no-wrap
msgid "link:../man/man1/iocontrol.1.html[iocontrol]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:76 src/hal/components.adoc:77
#, no-wrap
msgid "Interacts with HAL or G-code in userspace"
msgstr ""

#. type: Table
#: src/hal/components.adoc:77
#, no-wrap
msgid "link:../man/man1/iov2.1.html[iov2]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:78
#, no-wrap
msgid "link:../man/man1/mdi.1.html[mdi]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:78
#, no-wrap
msgid "Send G-code commands from the terminal to the running LinuxCNC instance"
msgstr ""

#. type: Table
#: src/hal/components.adoc:79
#, no-wrap
msgid "link:../man/man1/milltask.1.html[milltask]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:79
#, no-wrap
msgid "Userspace task controller for LinuxCNC"
msgstr ""

#. type: Table
#: src/hal/components.adoc:80
#, no-wrap
msgid "link:../man/man9/motion.9.html[motion]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:80
#, no-wrap
msgid "Accepts NML motion commands, interacts with HAL in realtime"
msgstr ""

#. type: Title ====
#: src/hal/components.adoc:84
#, no-wrap
msgid "VFD & Communication Interfaces (Userspace)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:87
#, no-wrap
msgid "link:../man/man1/elbpcom.1.html[elbpcom]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:87
#, no-wrap
msgid "Communicate with Mesa ethernet cards"
msgstr ""

#. type: Table
#: src/hal/components.adoc:88
#, no-wrap
msgid "link:../man/man1/gs2_vfd.1.html[gs2_vfd]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:88
#, no-wrap
msgid "HAL userspace component for Automation Direct GS2 VFDs"
msgstr ""

#. type: Table
#: src/hal/components.adoc:89
#, no-wrap
msgid "link:../man/man1/hal_parport.1.html[hal_parport]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:89
#, no-wrap
msgid "Realtime HAL component to communicate with one or more pc parallel ports"
msgstr ""

#. type: Table
#: src/hal/components.adoc:90
#, no-wrap
msgid "link:../man/man1/hy_gt_vfd.1.html[hy_gt_vfd]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:90
#, no-wrap
msgid "HAL userspace component for Huanyang GT-series VFDs"
msgstr ""

#. type: Table
#: src/hal/components.adoc:91
#, no-wrap
msgid "link:../man/man1/hy_vfd.1.html[hy_vfd]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:91
#, no-wrap
msgid "HAL userspace component for Huanyang VFDs"
msgstr ""

#. type: Table
#: src/hal/components.adoc:92
#, no-wrap
msgid "link:../man/man1/mb2hal.1.html[mb2hal]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:92
#, no-wrap
msgid "MB2HAL is a generic userspace HAL component to communicate with one or more Modbus devices. Modbus RTU and Modbus TCP are supported."
msgstr ""

#. type: Table
#: src/hal/components.adoc:93
#, no-wrap
msgid "link:../man/man1/mitsub_vfd.1.html[mitsub_vfd]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:93
#, no-wrap
msgid "HAL userspace component for Mitsubishi A500 F500 E500 A500 D700 E700 F700-series VFDs (others may work)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:94
#, no-wrap
msgid "link:../man/man1/monitor-xhc-hb04.1.html[monitor-xhc-hb04]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:94
#, no-wrap
msgid "Monitors the XHC-HB04 pendant and warns of disconnection"
msgstr ""

#. type: Table
#: src/hal/components.adoc:95
#, no-wrap
msgid "link:../man/man1/pi500_vfd.1.html[pi500_vfd]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:95
#, no-wrap
msgid "Powtran PI500 modbus driver"
msgstr ""

#. type: Table
#: src/hal/components.adoc:96
#, no-wrap
msgid "link:../man/man1/pmx485.1.html[pmx485]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:96
#, no-wrap
msgid "Modbus communications with a Powermax Plasma Cutter"
msgstr ""

#. type: Table
#: src/hal/components.adoc:97
#, no-wrap
msgid "link:../man/man1/pmx485-test.1.html[pmx485-test]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:97
#, no-wrap
msgid "Modbus communications testing with a Powermax Plasma Cutter"
msgstr ""

#. type: Table
#: src/hal/components.adoc:98
#, no-wrap
msgid "link:../man/man1/shuttle.1.html[shuttle]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:98
#, no-wrap
msgid "control HAL pins with the ShuttleXpress, ShuttlePRO, and ShuttlePRO2 device made by Contour Design"
msgstr ""

#. type: Table
#: src/hal/components.adoc:99
#, no-wrap
msgid "link:../man/man1/svd-ps_vfd.1.html[svd-ps_vfd]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:99
#, no-wrap
msgid "HAL userspace component for SVD-P(S) VFDs"
msgstr ""

#. type: Table
#: src/hal/components.adoc:100
#, no-wrap
msgid "link:../man/man1/vfdb_vfd.1.html[vfdb_vfd]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:100
#, no-wrap
msgid "HAL userspace component for Delta VFD-B Variable Frequency Drives"
msgstr ""

#. type: Table
#: src/hal/components.adoc:101
#, no-wrap
msgid "link:../man/man1/vfs11_vfd.1.html[vfs11_vfd]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:101
#, no-wrap
msgid "HAL userspace component for Toshiba-Schneider VF-S11 Variable Frequency Drives"
msgstr ""

#. type: Table
#: src/hal/components.adoc:102
#, no-wrap
msgid "link:../man/man1/wj200_vfd.1.html[wj200_vfd]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:102
#, no-wrap
msgid "Hitachi wj200 modbus driver"
msgstr ""

#. type: Table
#: src/hal/components.adoc:103
#, no-wrap
msgid "link:../man/man1/xhc-hb04.1.html[xhc-hb04]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:103
#, no-wrap
msgid "User-space HAL component for the xhc-hb04 pendant"
msgstr ""

#. type: Table
#: src/hal/components.adoc:104
#, no-wrap
msgid "link:../man/man1/xhc-hb04-accels.1.html[xhc-hb04-accels]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:104
#, no-wrap
msgid "Obsolete script for jogging wheel"
msgstr ""

#. type: Table
#: src/hal/components.adoc:105
#, no-wrap
msgid "link:../man/man1/xhc-whb04b-6.1.html[xhc-whb04b-6]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:105
#, no-wrap
msgid "Userspace jog dial HAL component for the wireless XHC WHB04B-6 USB device"
msgstr ""

#. type: Title ===
#: src/hal/components.adoc:108
#, no-wrap
msgid "Mesa and other I/O Cards (Realtime)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:111
#, no-wrap
msgid "hal_ppmc"
msgstr ""

#. type: Table
#: src/hal/components.adoc:111
#, no-wrap
msgid "Pico Systems <<cha:pico-drivers,driver>> for analog servo, PWM and Stepper controller"
msgstr ""

#. type: Table
#: src/hal/components.adoc:112
#, no-wrap
msgid "link:../man/man9/hal_bb_gpio.9.html[hal_bb_gpio]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:112
#, no-wrap
msgid "Driver for beaglebone GPIO pins"
msgstr ""

#. type: Table
#: src/hal/components.adoc:113
#, no-wrap
msgid "link:../man/man9/hm2_7i43.9.html[hm2_7i43]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:113
#, no-wrap
msgid "Mesa Electronics driver for the 7i43 EPP Anything IO board with HostMot2. (See the man page for more information)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:114
#, no-wrap
msgid "link:../man/man9/hm2_7i90.9.html[hm2_7i90]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:114
#, no-wrap
msgid "LinuxCNC HAL driver for the Mesa Electronics 7i90 EPP Anything IO board with HostMot2 firmware"
msgstr ""

#. type: Table
#: src/hal/components.adoc:115
#, no-wrap
msgid "link:../man/man9/hm2_eth.9.html[hm2_eth]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:115
#, no-wrap
msgid "LinuxCNC HAL driver for the Mesa Electronics Ethernet Anything IO boards, with HostMot2 firmware"
msgstr ""

#. type: Table
#: src/hal/components.adoc:116
#, no-wrap
msgid "link:../man/man9/hm2_pci.9.html[hm2_pci]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:116
#, no-wrap
msgid "Mesa Electronics driver for the 5i20, 5i22, 5i23, 4i65, and 4i68 Anything I/O boards, with HostMot2 firmware. (See the man page for more information)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:117
#, no-wrap
msgid "link:../man/man9/hm2_rpspi.9.html[hm2_rpspi]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:117 src/hal/components.adoc:118
#, no-wrap
msgid "LinuxCNC HAL driver for the Mesa Electronics SPI Anything IO boards, with HostMot2 firmware"
msgstr ""

#. type: Table
#: src/hal/components.adoc:118
#, no-wrap
msgid "link:../man/man9/hm2_spi.9.html[hm2_spi]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:119
#, no-wrap
msgid "link:../man/man9/hostmot2.9.html[hostmot2]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:119
#, no-wrap
msgid "Mesa Electronics <<cha:mesa-hostmot2-driver,driver>> for the HostMot2 firmware."
msgstr ""

#. type: Table
#: src/hal/components.adoc:120
#, no-wrap
msgid "link:../man/man9/max31855.9.html[max31855]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:120
#, no-wrap
msgid "Support for the MAX31855 Thermocouple-to-Digital converter using bitbanged SPI"
msgstr ""

#. type: Table
#: src/hal/components.adoc:121
#, no-wrap
msgid "link:../man/man9/mesa_7i65.9.html[mesa_7i65]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:121
#, no-wrap
msgid "Mesa Electronics driver for the 7i65 eight-axis servo card. (See the man page for more information)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:122
#, no-wrap
msgid "link:../man/man9/mesa_pktgyro_test.9.html[mesa_pktgyro_test]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:122
#, no-wrap
msgid "PktUART simple test with Microstrain 3DM-GX3-15 gyro"
msgstr ""

#. type: Table
#: src/hal/components.adoc:123
#, no-wrap
msgid "link:../man/man9/opto_ac5.9.html[opto_ac5]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:123
#, no-wrap
msgid "Realtime driver for opto22 PCI-AC5 cards"
msgstr ""

#. type: Table
#: src/hal/components.adoc:124
#, no-wrap
msgid "pluto_servo"
msgstr ""

#. type: Table
#: src/hal/components.adoc:124
#, no-wrap
msgid "Pluto-P <<cha:pluto-p-driver,driver>> and firmware for the parallel port FPGA, for servos"
msgstr ""

#. type: Table
#: src/hal/components.adoc:125
#, no-wrap
msgid "pluto_step"
msgstr ""

#. type: Table
#: src/hal/components.adoc:125
#, no-wrap
msgid "Pluto-P <<cha:pluto-p-driver,driver>> for the parallel port FPGA, for steppers"
msgstr ""

#. type: Table
#: src/hal/components.adoc:126
#, no-wrap
msgid "link:../man/man9/serport.9.html[serport]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:126
#, no-wrap
msgid "Hardware driver for the digital I/O bits of the 8250 and 16550 serial port"
msgstr ""

#. type: Table
#: src/hal/components.adoc:127
#, no-wrap
msgid "link:../man/man9/sserial.9.html[sserial]"
msgstr ""

#. type: Plain text
#: src/hal/components.adoc:127 man/man9/sserial.9:8
#, no-wrap
msgid "hostmot2 - Smart Serial LinuxCNC HAL driver for the Mesa Electronics HostMot2 Smart-Serial remote cards"
msgstr ""

#. type: Table
#: src/hal/components.adoc:128
#, no-wrap
msgid "link:../man/man9/thc.9.html[thc]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:128
#, no-wrap
msgid "Torch Height Control using a Mesa THC card or any analog to velocity input"
msgstr ""

#. type: Title ===
#: src/hal/components.adoc:131
#, no-wrap
msgid "Utilities (Userspace)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:134
#, no-wrap
msgid "link:../man/man1/hal-histogram.1.html[hal-histogram]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:134
#, no-wrap
msgid "Plots the value of a HAL pin as a histogram"
msgstr ""

#. type: Table
#: src/hal/components.adoc:135
#, no-wrap
msgid "link:../man/man1/halcompile.1.html[halcompile]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:135
#, no-wrap
msgid "Build, compile and install LinuxCNC HAL components"
msgstr ""

#. type: Table
#: src/hal/components.adoc:136
#, no-wrap
msgid "link:../man/man1/halmeter.1.html[halmeter]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:136
#, no-wrap
msgid "Observe HAL pins, signals, and parameters"
msgstr ""

#. type: Table
#: src/hal/components.adoc:137
#, no-wrap
msgid "link:../man/man1/halcmd.1.html[halcmd]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:137 src/hal/components.adoc:141
#, no-wrap
msgid "Manipulate the LinuxCNC HAL from the command line"
msgstr ""

#. type: Table
#: src/hal/components.adoc:138
#, no-wrap
msgid "link:../man/man1/halcmd_twopass.1.html[halcmd_twopass]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:139
#, no-wrap
msgid "link:../man/man1/halreport.1.html[halreport]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:139
#, no-wrap
msgid "Creates a report on the status of the HAL"
msgstr ""

#. type: Table
#: src/hal/components.adoc:140
#, no-wrap
msgid "link:../man/man1/halrmt.1.html[halrmt]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:141
#, no-wrap
msgid "link:../man/man1/halrun.1.html[halrun]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:142
#, no-wrap
msgid "link:../man/man1/halsampler.1.html[halsampler]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:142
#, no-wrap
msgid "Sample data from HAL in realtime"
msgstr ""

#. type: Table
#: src/hal/components.adoc:143
#, no-wrap
msgid "link:../man/man1/halscope.1.html[halscope]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:143
#, no-wrap
msgid "Software oscilloscope for viewing real time waveforms of HAL pins and signals"
msgstr ""

#. type: Table
#: src/hal/components.adoc:144
#, no-wrap
msgid "link:../man/man1/halshow.1.html[halshow]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:144
#, no-wrap
msgid "Show HAL parameters, pins and signals"
msgstr ""

#. type: Table
#: src/hal/components.adoc:145
#, no-wrap
msgid "link:../man/man1/halstreamer.1.html[halstreamer]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:145
#, no-wrap
msgid "Stream file data into HAL in real time"
msgstr ""

#. type: Table
#: src/hal/components.adoc:146
#, no-wrap
msgid "link:../man/man1/haltcl.1.html[haltcl]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:146
#, no-wrap
msgid "Manipulates the LinuxCNC HAL from the command line using Tcl"
msgstr ""

#. type: Table
#: src/hal/components.adoc:147
#, no-wrap
msgid "link:../man/man1/image-to-gcode.1.html[image-to-gcode]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:147
#, no-wrap
msgid "Converts bitmap images to G-code"
msgstr ""

#. type: Table
#: src/hal/components.adoc:148
#, no-wrap
msgid "link:../man/man1/latency-histogram.1.html[latency-histogram]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:148
#, no-wrap
msgid "Plots histogram of machine latency"
msgstr ""

#. type: Table
#: src/hal/components.adoc:149
#, no-wrap
msgid "link:../man/man1/latency-plot.1.html[latency-plot]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:149
#, no-wrap
msgid "Another way to view latency numbers"
msgstr ""

#. type: Table
#: src/hal/components.adoc:150
#, no-wrap
msgid "link:../man/man1/latency-test.1.html[latency-test]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:150
#, no-wrap
msgid "Tests the realtime system latency"
msgstr ""

#. type: Table
#: src/hal/components.adoc:151
#, no-wrap
msgid "link:../man/man1/pncconf.1.html[pncconf]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:151
#, no-wrap
msgid "Configuration wizard for Mesa cards"
msgstr ""

#. type: Table
#: src/hal/components.adoc:152
#, no-wrap
msgid "link:../man/man9/setsserial.9.html[setsserial]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:154
#, no-wrap
msgid ""
"Utility for setting Smart Serial NVRAM parameters.\n"
"NOTE: This rather clunky utility is no longer needed except for flashing new smart-serial remote firmware.\n"
"Smart-serial remote parameters can now be set in the HAL file in the normal way."
msgstr ""

#. type: Table
#: src/hal/components.adoc:155
#, no-wrap
msgid "link:../man/man1/sim_pin.1.html[sim_pin]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:155
#, no-wrap
msgid "GUI for displaying and setting one or more HAL inputs"
msgstr ""

#. type: Table
#: src/hal/components.adoc:156
#, no-wrap
msgid "link:../man/man1/stepconf.1.html[stepconf]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:156
#, no-wrap
msgid "Configuration wizard for parallel-port based machines"
msgstr ""

#. type: Title ===
#: src/hal/components.adoc:159
#, no-wrap
msgid "Signal processing (Realtime)"
msgstr ""

#. type: Title ====
#: src/hal/components.adoc:160
#, no-wrap
msgid "Logic and Bitwise"
msgstr ""

#. type: Table
#: src/hal/components.adoc:163
#, no-wrap
msgid "link:../man/man9/and2.9.html[and2]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:163
#, no-wrap
msgid "Two-input AND gate. For out to be true both inputs must be true. (link:../man/man9/and2.9.html[and2])"
msgstr ""

#. type: Table
#: src/hal/components.adoc:164
#, no-wrap
msgid "link:../man/man9/bitwise.9.html[bitwise]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:164
#, no-wrap
msgid "Computes various bitwise operations on the two input values"
msgstr ""

#. type: Table
#: src/hal/components.adoc:165
#, no-wrap
msgid "link:../man/man9/dbounce.9.html[dbounce]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:165
#, no-wrap
msgid "Filter noisy digital inputs link:../man/man9/dbounce.9.html[Details]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:166
#, no-wrap
msgid "link:../man/man9/debounce.9.html[debounce]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:166
#, no-wrap
msgid "Filter noisy digital inputs link:../man/man9/debounce.9.html[Details] <<sec:debounce, Description>>"
msgstr ""

#. type: Table
#: src/hal/components.adoc:167
#, no-wrap
msgid "link:../man/man9/demux.9.html[demux]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:167
#, no-wrap
msgid "Select one of several output pins by integer and/or or individual bits"
msgstr ""

#. type: Table
#: src/hal/components.adoc:168
#, no-wrap
msgid "link:../man/man9/edge.9.html[edge]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:168
#, no-wrap
msgid "Edge detector"
msgstr ""

#. type: Table
#: src/hal/components.adoc:169
#, no-wrap
msgid "link:../man/man9/estop_latch.9.html[estop_latch]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:169
#, no-wrap
msgid "E-stop latch"
msgstr ""

#. type: Table
#: src/hal/components.adoc:170
#, no-wrap
msgid "link:../man/man9/flipflop.9.html[flipflop]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:170
#, no-wrap
msgid "D-type flip-flop"
msgstr ""

#. type: Table
#: src/hal/components.adoc:171
#, no-wrap
msgid "link:../man/man9/logic.9.html[logic]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:171
#, no-wrap
msgid "General logic function component"
msgstr ""

#. type: Table
#: src/hal/components.adoc:172
#, no-wrap
msgid "link:../man/man9/lut5.9.html[lut5]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:172
#, no-wrap
msgid "5-input logic function based on a look-up table <<sec:lut5,Description>>"
msgstr ""

#. type: Table
#: src/hal/components.adoc:173
#, no-wrap
msgid "link:../man/man9/match8.9.html[match8]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:173
#, no-wrap
msgid "8-bit binary match detector"
msgstr ""

#. type: Table
#: src/hal/components.adoc:174
#, no-wrap
msgid "link:../man/man9/multiclick.9.html[multiclick]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:174
#, no-wrap
msgid "Single-, double-, triple-, and quadruple-click detector"
msgstr ""

#. type: Table
#: src/hal/components.adoc:175
#, no-wrap
msgid "link:../man/man9/multiswitch.9.html[multiswitch]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:175
#, no-wrap
msgid "Toggles between a specified number of output bits"
msgstr ""

#. type: Table
#: src/hal/components.adoc:176
#, no-wrap
msgid "link:../man/man9/not.9.html[not]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:176
#, no-wrap
msgid "Inverter"
msgstr ""

#. type: Table
#: src/hal/components.adoc:177
#, no-wrap
msgid "link:../man/man9/oneshot.9.html[oneshot]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:177
#, no-wrap
msgid "One-shot pulse generator"
msgstr ""

#. type: Table
#: src/hal/components.adoc:178
#, no-wrap
msgid "link:../man/man9/or2.9.html[or2]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:178
#, no-wrap
msgid "Two-input OR gate"
msgstr ""

#. type: Table
#: src/hal/components.adoc:179
#, no-wrap
msgid "link:../man/man9/select8.9.html[select8]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:179
#, no-wrap
msgid "8-bit binary match detector."
msgstr ""

#. type: Table
#: src/hal/components.adoc:180
#, no-wrap
msgid "link:../man/man9/tof.9.html[tof]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:180
#, no-wrap
msgid "IEC TOF timer - delay falling edge on a signal"
msgstr ""

#. type: Table
#: src/hal/components.adoc:181
#, no-wrap
msgid "link:../man/man9/toggle.9.html[toggle]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:181
#, no-wrap
msgid "Push-on, push-off from momentary pushbuttons"
msgstr ""

#. type: Table
#: src/hal/components.adoc:182
#, no-wrap
msgid "link:../man/man9/toggle2nist.9.html[toggle2nist]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:182
#, no-wrap
msgid "Toggle button to nist logic"
msgstr ""

#. type: Table
#: src/hal/components.adoc:183
#, no-wrap
msgid "link:../man/man9/ton.9.html[ton]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:183
#, no-wrap
msgid "IEC TON timer - delay rising edge on a signal"
msgstr ""

#. type: Table
#: src/hal/components.adoc:184
#, no-wrap
msgid "link:../man/man9/timedelay.9.html[timedelay]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:184
#, no-wrap
msgid "Equivalent of a time-delay relay."
msgstr ""

#. type: Table
#: src/hal/components.adoc:185
#, no-wrap
msgid "link:../man/man9/tp.9.html[tp]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:185
#, no-wrap
msgid "IEC TP timer - generate a high pulse of defined duration on rising edge"
msgstr ""

#. type: Table
#: src/hal/components.adoc:186
#, no-wrap
msgid "link:../man/man9/tristate_bit.9.html[tristate_bit]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:186
#, no-wrap
msgid "Places signal on an I/O pin only when enabled, similar to a tristate buffer in electronics"
msgstr ""

#. type: Table
#: src/hal/components.adoc:187
#, no-wrap
msgid "link:../man/man9/tristate_float.9.html[tristate_float]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:187
#, no-wrap
msgid "Places signal on an I/O pin only when enabled, similar to a tristatebuffer in electronics"
msgstr ""

#. type: Table
#: src/hal/components.adoc:188
#, no-wrap
msgid "link:../man/man9/xor2.9.html[xor2]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:188
#, no-wrap
msgid "Two-input XOR (exclusive OR) gate"
msgstr ""

#. type: Title ====
#: src/hal/components.adoc:191
#, no-wrap
msgid "Arithmetic and float"
msgstr ""

#. type: Table
#: src/hal/components.adoc:194
#, no-wrap
msgid "link:../man/man9/abs_s32.9.html[abs_s32]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:194 src/hal/components.adoc:195
#, no-wrap
msgid "Computes the absolute value and sign of the input signal"
msgstr ""

#. type: Table
#: src/hal/components.adoc:195
#, no-wrap
msgid "link:../man/man9/abs.9.html[abs]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:196
#, no-wrap
msgid "link:../man/man9/biquad.9.html[biquad]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:196
#, no-wrap
msgid "Biquad IIR filter"
msgstr ""

#. type: Table
#: src/hal/components.adoc:197
#, no-wrap
msgid "link:../man/man9/blend.9.html[blend]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:197
#, no-wrap
msgid "Perform linear interpolation between two values"
msgstr ""

#. type: Table
#: src/hal/components.adoc:198 src/hal/components.adoc:297
#, no-wrap
msgid "link:../man/man9/comp.9.html[comp]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:198
#, no-wrap
msgid "Two input comparator with hysteresis"
msgstr ""

#. type: Table
#: src/hal/components.adoc:199
#, no-wrap
msgid "link:../man/man9/constant.9.html[constant]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:199
#, no-wrap
msgid "Uses parameter to set the value of a pin"
msgstr ""

#. type: Table
#: src/hal/components.adoc:200
#, no-wrap
msgid "link:../man/man9/counter.9.html[counter]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:200
#, no-wrap
msgid "Counts input pulses (deprecated). Use the <<sec:encoder, encoder>> component."
msgstr ""

#. type: Table
#: src/hal/components.adoc:201
#, no-wrap
msgid "link:../man/man9/ddt.9.html[ddt]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:201
#, no-wrap
msgid "Computes the derivative of the input function."
msgstr ""

#. type: Table
#: src/hal/components.adoc:202
#, no-wrap
msgid "link:../man/man9/deadzone.9.html[deadzone]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:202
#, no-wrap
msgid "Returns the center if within the threshold."
msgstr ""

#. type: Table
#: src/hal/components.adoc:203
#, no-wrap
msgid "link:../man/man9/hypot.9.html[hypot]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:203
#, no-wrap
msgid "Three-input hypotenuse (Euclidean distance) calculator."
msgstr ""

#. type: Table
#: src/hal/components.adoc:204
#, no-wrap
msgid "link:../man/man9/ilowpass.9.html[ilowpass]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:204
#, no-wrap
msgid "Low-pass filter with integer inputs and outputs"
msgstr ""

#. type: Table
#: src/hal/components.adoc:205
#, no-wrap
msgid "link:../man/man9/integ.9.html[integ]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:205
#, no-wrap
msgid "Integrator"
msgstr ""

#. type: Table
#: src/hal/components.adoc:206
#, no-wrap
msgid "link:../man/man9/invert.9.html[invert]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:206
#, no-wrap
msgid "Computes the inverse of the input signal."
msgstr ""

#. type: Table
#: src/hal/components.adoc:207
#, no-wrap
msgid "link:../man/man9/filter_kalman.9.html[filter_kalman]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:207
#, no-wrap
msgid "Unidimensional Kalman filter, also known as linear quadratic estimation (LQE)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:208
#, no-wrap
msgid "link:../man/man9/knob2float.9.html[knob2float]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:208
#, no-wrap
msgid "Converts counts (probably from an encoder) to a float value."
msgstr ""

#. type: Table
#: src/hal/components.adoc:209
#, no-wrap
msgid "link:../man/man9/lowpass.9.html[lowpass]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:209
#, no-wrap
msgid "Low-pass filter"
msgstr ""

#. type: Table
#: src/hal/components.adoc:210
#, no-wrap
msgid "link:../man/man9/limit1.9.html[limit1]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:210
#, no-wrap
msgid "Limits the output signal to fall between min and max. footnote:[When the input is a position, this means that the 'position' is limited.]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:211
#, no-wrap
msgid "link:../man/man9/limit2.9.html[limit2]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:212
#, no-wrap
msgid ""
"Limits the output signal to fall between min and max.  Limit its slew rate to less than maxv per second. \n"
"footnote:[When the input is a position, this means that 'position' and 'velocity' are limited.]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:213
#, no-wrap
msgid "link:../man/man9/limit3.9.html[limit3]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:215
#, no-wrap
msgid ""
"Limit the output signal to fall between min and max. \n"
"Limit its slew rate to less than maxv per second. Limit its second derivative to less than MaxA per second squared footnote:[When\n"
"the input is a position, this means that the 'position', 'velocity', and 'acceleration' are limited.]."
msgstr ""

#. type: Table
#: src/hal/components.adoc:216
#, no-wrap
msgid "link:../man/man9/lincurve.9.html[lincurve]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:216
#, no-wrap
msgid "One-dimensional lookup table"
msgstr ""

#. type: Table
#: src/hal/components.adoc:217
#, no-wrap
msgid "link:../man/man9/maj3.9.html[maj3]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:217
#, no-wrap
msgid "Compute the majority of 3 inputs"
msgstr ""

#. type: Table
#: src/hal/components.adoc:218
#, no-wrap
msgid "link:../man/man9/minmax.9.html[minmax]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:218
#, no-wrap
msgid "Tracks the minimum and maximum values of the input to the outputs."
msgstr ""

#. type: Table
#: src/hal/components.adoc:219
#, no-wrap
msgid "link:../man/man9/mult2.9.html[mult2]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:219
#, no-wrap
msgid "Product of two inputs."
msgstr ""

#. type: Table
#: src/hal/components.adoc:220
#, no-wrap
msgid "link:../man/man9/mux16.9.html[mux16]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:220
#, no-wrap
msgid "Select from one of 16 input values (multiplexer)."
msgstr ""

#. type: Table
#: src/hal/components.adoc:221
#, no-wrap
msgid "link:../man/man9/mux2.9.html[mux2]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:221
#, no-wrap
msgid "Select from one of two input values (multiplexer)."
msgstr ""

#. type: Table
#: src/hal/components.adoc:222
#, no-wrap
msgid "link:../man/man9/mux4.9.html[mux4]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:222
#, no-wrap
msgid "Select from one of four input values (multiplexer)."
msgstr ""

#. type: Table
#: src/hal/components.adoc:223
#, no-wrap
msgid "link:../man/man9/mux8.9.html[mux8]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:223
#, no-wrap
msgid "Select from one of eight input values (multiplexer)."
msgstr ""

#. type: Table
#: src/hal/components.adoc:224
#, no-wrap
msgid "link:../man/man9/mux_generic.9.html[mux_generic]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:224
#, no-wrap
msgid "Select one from several input values (multiplexer)."
msgstr ""

#. type: Table
#: src/hal/components.adoc:225
#, no-wrap
msgid "link:../man/man9/near.9.html[near]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:225
#, no-wrap
msgid "Determine whether two values are roughly equal."
msgstr ""

#. type: Table
#: src/hal/components.adoc:226
#, no-wrap
msgid "link:../man/man9/offset.9.html[offset]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:226
#, no-wrap
msgid "Adds an offset to an input, and subtracts it from the feedback value."
msgstr ""

#. type: Table
#: src/hal/components.adoc:227
#, no-wrap
msgid "link:../man/man9/sample_hold.9.html[sample_hold]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:227
#, no-wrap
msgid "Sample and Hold."
msgstr ""

#. type: Table
#: src/hal/components.adoc:228
#, no-wrap
msgid "link:../man/man9/scale.9.html[scale]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:228
#, no-wrap
msgid "Applies a scale and offset to its input."
msgstr ""

#. type: Table
#: src/hal/components.adoc:229
#, no-wrap
msgid "link:../man/man9/sum2.9.html[sum2]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:229
#, no-wrap
msgid "Sum of two inputs (each with a gain) and an offset."
msgstr ""

#. type: Table
#: src/hal/components.adoc:230
#, no-wrap
msgid "link:../man/man9/timedelta.9.html[timedelta]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:230
#, no-wrap
msgid "Component that measures thread scheduling timing behavior."
msgstr ""

#. type: Table
#: src/hal/components.adoc:231
#, no-wrap
msgid "link:../man/man9/updown.9.html[updown]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:231
#, no-wrap
msgid "Counts up or down, with optional limits and wraparound behavior."
msgstr ""

#. type: Table
#: src/hal/components.adoc:232
#, no-wrap
msgid "link:../man/man9/wcomp.9.html[wcomp]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:232
#, no-wrap
msgid "Window comparator."
msgstr ""

#. type: Table
#: src/hal/components.adoc:233
#, no-wrap
msgid "link:../man/man9/weighted_sum.9.html[weighted_sum]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:233
#, no-wrap
msgid "Convert a group of bits to an integer."
msgstr ""

#. type: Table
#: src/hal/components.adoc:234
#, no-wrap
msgid "link:../man/man9/xhc_hb04_util.9.html[xhc_hb04_util]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:234
#, no-wrap
msgid "xhc-hb04 convenience utility"
msgstr ""

#. type: Title ====
#: src/hal/components.adoc:237
#, no-wrap
msgid "Type conversion"
msgstr ""

#. type: Table
#: src/hal/components.adoc:240
#, no-wrap
msgid "link:../man/man9/bin2gray.9.html[bin2gray]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:240
#, no-wrap
msgid "Converts a number to the gray-code representation"
msgstr ""

#. type: Table
#: src/hal/components.adoc:241
#, no-wrap
msgid "link:../man/man9/bitslice.9.html[bitslice]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:241
#, no-wrap
msgid "Converts an unsigned-32 input into individual bits"
msgstr ""

#. type: Table
#: src/hal/components.adoc:242
#, no-wrap
msgid "link:../man/man9/conv_bit_float.9.html[conv_bit_float]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:242
#, no-wrap
msgid "Converts from bit to float"
msgstr ""

#. type: Table
#: src/hal/components.adoc:243
#, no-wrap
msgid "link:../man/man9/conv_bit_s32.9.html[conv_bit_s32]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:243
#, no-wrap
msgid "Converts from bit to s32"
msgstr ""

#. type: Table
#: src/hal/components.adoc:244
#, no-wrap
msgid "link:../man/man9/conv_bit_u32.9.html[conv_bit_u32]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:244
#, no-wrap
msgid "Converts from bit to u32"
msgstr ""

#. type: Table
#: src/hal/components.adoc:245
#, no-wrap
msgid "link:../man/man9/conv_float_s32.9.html[conv_float_s32]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:245
#, no-wrap
msgid "Converts from float to s32"
msgstr ""

#. type: Table
#: src/hal/components.adoc:246
#, no-wrap
msgid "link:../man/man9/conv_float_u32.9.html[conv_float_u32]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:246
#, no-wrap
msgid "Converts from float to u32"
msgstr ""

#. type: Table
#: src/hal/components.adoc:247
#, no-wrap
msgid "link:../man/man9/conv_s32_bit.9.html[conv_s32_bit]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:247
#, no-wrap
msgid "Converts from s32 to bit"
msgstr ""

#. type: Table
#: src/hal/components.adoc:248
#, no-wrap
msgid "link:../man/man9/conv_s32_float.9.html[conv_s32_float]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:248
#, no-wrap
msgid "Converts from s32 to float"
msgstr ""

#. type: Table
#: src/hal/components.adoc:249
#, no-wrap
msgid "link:../man/man9/conv_s32_u32.9.html[conv_s32_u32]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:249
#, no-wrap
msgid "Converts from s32 to u32"
msgstr ""

#. type: Table
#: src/hal/components.adoc:250
#, no-wrap
msgid "link:../man/man9/conv_u32_bit.9.html[conv_u32_bit]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:250
#, no-wrap
msgid "Converts from u32 to bit"
msgstr ""

#. type: Table
#: src/hal/components.adoc:251
#, no-wrap
msgid "link:../man/man9/conv_u32_float.9.html[conv_u32_float]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:251
#, no-wrap
msgid "Converts from u32 to float"
msgstr ""

#. type: Table
#: src/hal/components.adoc:252
#, no-wrap
msgid "link:../man/man9/conv_u32_s32.9.html[conv_u32_s32]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:252
#, no-wrap
msgid "Converts from u32 to s32"
msgstr ""

#. type: Table
#: src/hal/components.adoc:253
#, no-wrap
msgid "link:../man/man9/gray2bin.9.html[gray2bin]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:253
#, no-wrap
msgid "Converts gray-code input to binary"
msgstr ""

#. type: Title ===
#: src/hal/components.adoc:256
#, no-wrap
msgid "Kinematics (Realtime)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:259
#, no-wrap
msgid "link:../man/man9/corexy_by_hal.9.html[corexy_by_hal]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:259
#, no-wrap
msgid "CoreXY kinematics"
msgstr ""

#. type: Table
#: src/hal/components.adoc:260
#, no-wrap
msgid "link:../man/man9/differential.9.html[differential]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:260
#, no-wrap
msgid "Kinematics for a differential transmission"
msgstr ""

#. type: Table
#: src/hal/components.adoc:261
#, no-wrap
msgid "link:../man/man9/gantry.9.html[gantry]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:261
#, no-wrap
msgid "LinuxCNC HAL component for driving multiple joints from a single axis"
msgstr ""

#. type: Table
#: src/hal/components.adoc:262
#, no-wrap
msgid "link:../man/man9/gantrykins.9.html[gantrykins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:262
#, no-wrap
msgid "Kinematics module that maps one axis to multiple joints."
msgstr ""

#. type: Table
#: src/hal/components.adoc:263
#, no-wrap
msgid "link:../man/man9/genhexkins.9.html[genhexkins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:263
#, no-wrap
msgid "Gives six degrees of freedom in position and orientation (XYZABC). The location of the motors is defined at compile time."
msgstr ""

#. type: Table
#: src/hal/components.adoc:264
#, no-wrap
msgid "link:../man/man9/genserkins.9.html[genserkins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:264
#, no-wrap
msgid "Kinematics that can model a general serial-link manipulator with up to 6 angular joints."
msgstr ""

#. type: Table
#: src/hal/components.adoc:265
#, no-wrap
msgid "link:../man/man9/gentrivkins.9.html[gentrivkins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:265
#, no-wrap
msgid "See link:../man/man9/trivkins.9.html[trivkins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:266
#, no-wrap
msgid "link:../man/man9/kins.9.html[kins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:266
#, no-wrap
msgid "Kinematics definitions for LinuxCNC."
msgstr ""

#. type: Table
#: src/hal/components.adoc:267
#, no-wrap
msgid "link:../man/man9/lineardeltakins.9.html[lineardeltakins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:267
#, no-wrap
msgid "Kinematics for a linear delta robot"
msgstr ""

#. type: Table
#: src/hal/components.adoc:268
#, no-wrap
msgid "link:../man/man9/maxkins.9.html[maxkins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:268
#, no-wrap
msgid "Kinematics for a tabletop 5 axis mill named 'max' with tilting head (B axis) and horizontal rotary mounted to the table (C axis). Provides UVW motion in the rotated coordinate system. The source file, maxkins.c, may be a useful starting point for other 5-axis systems."
msgstr ""

#. type: Table
#: src/hal/components.adoc:269
#, no-wrap
msgid "link:../man/man9/millturn.9.html[millturn]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:269
#, no-wrap
msgid "Switchable kinematics for a mill-turn machine"
msgstr ""

#. type: Table
#: src/hal/components.adoc:270
#, no-wrap
msgid "link:../man/man9/pentakins.9.html[pentakins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:271
#, no-wrap
msgid "link:../man/man9/pumakins.9.html[pumakins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:271
#, no-wrap
msgid "Kinematics for PUMA-style robots."
msgstr ""

#. type: Table
#: src/hal/components.adoc:272
#, no-wrap
msgid "link:../man/man9/rosekins.9.html[rosekins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:272
#, no-wrap
msgid "Kinematics for a rose engine"
msgstr ""

#. type: Table
#: src/hal/components.adoc:273
#, no-wrap
msgid "link:../man/man9/rotatekins.9.html[rotatekins]"
msgstr ""

#. type: Plain text
#: src/hal/components.adoc:273 man/man9/kins.9:413
#, no-wrap
msgid "The X and Y axes are rotated 45 degrees compared to the joints 0 and 1."
msgstr ""

#. type: Table
#: src/hal/components.adoc:274
#, no-wrap
msgid "link:../man/man9/scarakins.9.html[scarakins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:274
#, no-wrap
msgid "Kinematics for SCARA-type robots."
msgstr ""

#. type: Table
#: src/hal/components.adoc:275
#, no-wrap
msgid "link:../man/man9/tripodkins.9.html[tripodkins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:275
#, no-wrap
msgid "The joints represent the distance of the controlled point from three predefined locations (the motors), giving three degrees of freedom in position (XYZ)."
msgstr ""

#. type: Table
#: src/hal/components.adoc:276
#, no-wrap
msgid "link:../man/man9/trivkins.9.html[trivkins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:276
#, no-wrap
msgid "1:1 correspondence between joints and axes. Most standard milling machines and lathes use the trivial kinematics module."
msgstr ""

#. type: Table
#: src/hal/components.adoc:277
#, no-wrap
msgid "link:../man/man9/userkins.9.html[userkins]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:277
#, no-wrap
msgid "Template for user-built kinematics"
msgstr ""

#. type: Title ===
#: src/hal/components.adoc:280
#, no-wrap
msgid "Motor control (Realtime)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:283
#, no-wrap
msgid "link:../man/man9/at_pid.9.html[at_pid]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:283
#, no-wrap
msgid "Proportional/integral/derivative controller with auto tuning."
msgstr ""

#. type: Table
#: src/hal/components.adoc:284
#, no-wrap
msgid "link:../man/man9/bldc.9.html[bldc]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:284
#, no-wrap
msgid "BLDC and AC-servo control component"
msgstr ""

#. type: Table
#: src/hal/components.adoc:285
#, no-wrap
msgid "link:../man/man9/clarke2.9.html[clarke2]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:285
#, no-wrap
msgid "Two input version of Clarke transform"
msgstr ""

#. type: Table
#: src/hal/components.adoc:286
#, no-wrap
msgid "link:../man/man9/clarke3.9.html[clarke3]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:286
#, no-wrap
msgid "Clarke (3 phase to cartesian) transform"
msgstr ""

#. type: Table
#: src/hal/components.adoc:287
#, no-wrap
msgid "link:../man/man9/clarkeinv.9.html[clarkeinv]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:287
#, no-wrap
msgid "Inverse Clarke transform"
msgstr ""

#. type: Table
#: src/hal/components.adoc:288
#, no-wrap
msgid "link:../man/man9/encoder.9.html[encoder]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:288
#, no-wrap
msgid "Software counting of quadrature encoder signals, see <<sec:encoder,Description>>."
msgstr ""

#. type: Table
#: src/hal/components.adoc:289
#, no-wrap
msgid "link:../man/man9/pid.9.html[pid]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:289
#, no-wrap
msgid "Proportional/integral/derivative controller, <<sec:pid,Description>>."
msgstr ""

#. type: Table
#: src/hal/components.adoc:290
#, no-wrap
msgid "link:../man/man9/pwmgen.9.html[pwmgen]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:290
#, no-wrap
msgid "Software PWM/PDM generation, see <<sec:pwmgen,Description>>."
msgstr ""

#. type: Table
#: src/hal/components.adoc:291
#, no-wrap
msgid "link:../man/man9/stepgen.9.html[stepgen]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:291
#, no-wrap
msgid "Software step pulse generation, see <<sec:stepgen,Description>>."
msgstr ""

#. type: Title ===
#: src/hal/components.adoc:294
#, no-wrap
msgid "Other (Realtime)"
msgstr ""

#. type: Table
#: src/hal/components.adoc:297
#, no-wrap
msgid "Build, compile and install LinuxCNC HAL components."
msgstr ""

#. type: Table
#: src/hal/components.adoc:298
#, no-wrap
msgid "link:../man/man9/classicladder.9.html[classicladder]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:298
#, no-wrap
msgid "Realtime software PLC based on ladder logic. See <<cha:classicladder,ClassicLadder>> chapter for more information."
msgstr ""

#. type: Table
#: src/hal/components.adoc:299
#, no-wrap
msgid "link:../man/man9/threads.9.html[threads]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:299
#, no-wrap
msgid "Creates hard realtime HAL threads."
msgstr ""

#. type: Table
#: src/hal/components.adoc:300
#, no-wrap
msgid "link:../man/man9/charge_pump.9.html[charge_pump]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:303
#, no-wrap
msgid ""
"Creates a square-wave for the 'charge pump' input of some controller boards.\n"
"The 'Charge Pump' should be added to the base thread function. When enabled the output is on for one period and off for one period. \n"
"To calculate the frequency of the output 1/(period time in seconds x 2) = Hz. For example if you have a base period of 100,000 ns that \n"
"is 0.0001 seconds and the formula would be 1/(0.0001 x 2) = 5,000 Hz or 5 kHz."
msgstr ""

#. type: Table
#: src/hal/components.adoc:304
#, no-wrap
msgid "link:../man/man9/encoder_ratio.9.html[encoder_ratio]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:304
#, no-wrap
msgid "Electronic gear to synchronize two axes."
msgstr ""

#. type: Table
#: src/hal/components.adoc:305
#, no-wrap
msgid "link:../man/man9/feedcomp.9.html[feedcomp]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:305
#, no-wrap
msgid "Multiply the input by the ratio of current velocity to the feed rate."
msgstr ""

#. type: Table
#: src/hal/components.adoc:306
#, no-wrap
msgid "link:../man/man9/gladevcp.9.html[gladevcp (Realtime)]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:306
#, no-wrap
msgid "displays Virtual control Panels built with GTK / GLADE"
msgstr ""

#. type: Table
#: src/hal/components.adoc:307
#, no-wrap
msgid "link:../man/man9/gearchange.9.html[gearchange]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:307
#, no-wrap
msgid "Select from one of two speed ranges."
msgstr ""

#. type: Table
#: src/hal/components.adoc:308
#, no-wrap
msgid "link:../man/man9/joyhandle.9.html[joyhandle]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:308
#, no-wrap
msgid "Sets nonlinear joypad movements, deadbands and scales."
msgstr ""

#. type: Table
#: src/hal/components.adoc:309
#, no-wrap
msgid "link:../man/man9/sampler.9.html[sampler]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:309
#, no-wrap
msgid "Sample data from HAL in real time."
msgstr ""

#. type: Table
#: src/hal/components.adoc:310
#, no-wrap
msgid "link:../man/man9/siggen.9.html[siggen]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:310
#, no-wrap
msgid "Signal generator, see <<sec:siggen,Description>>."
msgstr ""

#. type: Table
#: src/hal/components.adoc:311
#, no-wrap
msgid "link:../man/man9/sim_encoder.9.html[sim_encoder]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:311
#, no-wrap
msgid "Simulated quadrature encoder, see <<sec:simulated-encoder,Description>>."
msgstr ""

#. type: Table
#: src/hal/components.adoc:312
#, no-wrap
msgid "link:../man/man9/sphereprobe.9.html[sphereprobe]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:312
#, no-wrap
msgid "Probe a pretend hemisphere."
msgstr ""

#. type: Table
#: src/hal/components.adoc:313
#, no-wrap
msgid "link:../man/man9/steptest.9.html[steptest]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:313
#, no-wrap
msgid "Used by Stepconf to allow testing of acceleration and velocity values for an axis."
msgstr ""

#. type: Table
#: src/hal/components.adoc:314
#, no-wrap
msgid "link:../man/man9/streamer.9.html[streamer]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:314
#, no-wrap
msgid "Stream file data into HAL in real time."
msgstr ""

#. type: Table
#: src/hal/components.adoc:315
#, no-wrap
msgid "link:../man/man9/supply.9.html[supply]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:315
#, no-wrap
msgid "Set output pins with values from parameters (deprecated)."
msgstr ""

#. type: Table
#: src/hal/components.adoc:316
#, no-wrap
msgid "link:../man/man9/threadtest.9.html[threadtest]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:316
#, no-wrap
msgid "Component for testing thread behavior."
msgstr ""

#. type: Table
#: src/hal/components.adoc:317
#, no-wrap
msgid "link:../man/man9/time.9.html[time]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:317
#, no-wrap
msgid "Accumulated run-time timer counts HH:MM:SS of 'active' input."
msgstr ""

#. type: Table
#: src/hal/components.adoc:318
#, no-wrap
msgid "link:../man/man9/watchdog.9.html[watchdog]"
msgstr ""

#. type: Table
#: src/hal/components.adoc:318
#, no-wrap
msgid "Monitor one to thirty-two inputs for a 'heartbeat'."
msgstr ""

#. type: Title ==
#: src/hal/components.adoc:324
#, no-wrap
msgid "HAL API calls"
msgstr ""

#. type: delimited block .
#: src/hal/components.adoc:368
#, no-wrap
msgid ""
"hal_add_funct_to_thread.3hal\n"
"hal_bit_t.3hal\n"
"hal_create_thread.3hal\n"
"hal_del_funct_from_thread.3hal\n"
"hal_exit.3hal\n"
"hal_export_funct.3hal\n"
"hal_float_t.3hal\n"
"hal_get_lock.3hal\n"
"hal_init.3hal\n"
"hal_link.3hal\n"
"hal_malloc.3hal\n"
"hal_param_bit_new.3hal\n"
"hal_param_bit_newf.3hal\n"
"hal_param_float_new.3hal\n"
"hal_param_float_newf.3hal\n"
"hal_param_new.3hal\n"
"hal_param_s32_new.3hal\n"
"hal_param_s32_newf.3hal\n"
"hal_param_u32_new.3hal\n"
"hal_param_u32_newf.3hal\n"
"hal_parport.3hal\n"
"hal_pin_bit_new.3hal\n"
"hal_pin_bit_newf.3hal\n"
"hal_pin_float_new.3hal\n"
"hal_pin_float_newf.3hal\n"
"hal_pin_new.3hal\n"
"hal_pin_s32_new.3hal\n"
"hal_pin_s32_newf.3hal\n"
"hal_pin_u32_new.3hal\n"
"hal_pin_u32_newf.3hal\n"
"hal_ready.3hal\n"
"hal_s32_t.3hal\n"
"hal_set_constructor.3hal\n"
"hal_set_lock.3hal\n"
"hal_signal_delete.3hal\n"
"hal_signal_new.3hal\n"
"hal_start_threads.3hal\n"
"hal_type_t.3hal\n"
"hal_u32_t.3hal\n"
"hal_unlink.3hal\n"
"intro.3hal\n"
"undocumented.3hal\n"
msgstr ""

#. type: Title ==
#: src/hal/components.adoc:370
#, no-wrap
msgid "RTAPI calls"
msgstr ""

#. type: delimited block .
#: src/hal/components.adoc:424
#, no-wrap
msgid ""
"EXPORT_FUNCTION.3rtapi\n"
"MODULE_AUTHOR.3rtapi\n"
"MODULE_DESCRIPTION.3rtapi\n"
"MODULE_LICENSE.3rtapi\n"
"RTAPI_MP_ARRAY_INT.3rtapi\n"
"RTAPI_MP_ARRAY_LONG.3rtapi\n"
"RTAPI_MP_ARRAY_STRING.3rtapi\n"
"RTAPI_MP_INT.3rtapi\n"
"RTAPI_MP_LONG.3rtapi\n"
"RTAPI_MP_STRING.3rtapi\n"
"intro.3rtapi\n"
"rtapi_app_exit.3rtapi\n"
"rtapi_app_main.3rtapi\n"
"rtapi_clock_set_period.3rtapi\n"
"rtapi_delay.3rtapi\n"
"rtapi_delay_max.3rtapi\n"
"rtapi_exit.3rtapi\n"
"rtapi_get_clocks.3rtapi\n"
"rtapi_get_msg_level.3rtapi\n"
"rtapi_get_time.3rtapi\n"
"rtapi_inb.3rtapi\n"
"rtapi_init.3rtapi\n"
"rtapi_module_param.3rtapi\n"
"RTAPI_MP_ARRAY_INT.3rtapi\n"
"RTAPI_MP_ARRAY_LONG.3rtapi\n"
"RTAPI_MP_ARRAY_STRING.3rtapi\n"
"RTAPI_MP_INT.3rtapi\n"
"RTAPI_MP_LONG.3rtapi\n"
"RTAPI_MP_STRING.3rtapi\n"
"rtapi_mutex.3rtapi\n"
"rtapi_outb.3rtapi\n"
"rtapi_print.3rtap\n"
"rtapi_prio.3rtapi\n"
"rtapi_prio_highest.3rtapi\n"
"rtapi_prio_lowest.3rtapi\n"
"rtapi_prio_next_higher.3rtapi\n"
"rtapi_prio_next_lower.3rtapi\n"
"rtapi_region.3rtapi\n"
"rtapi_release_region.3rtapi\n"
"rtapi_request_region.3rtapi\n"
"rtapi_set_msg_level.3rtapi\n"
"rtapi_shmem.3rtapi\n"
"rtapi_shmem_delete.3rtapi\n"
"rtapi_shmem_getptr.3rtapi\n"
"rtapi_shmem_new.3rtapi\n"
"rtapi_snprintf.3rtapi\n"
"rtapi_task_delete.3rtpi\n"
"rtapi_task_new.3rtapi\n"
"rtapi_task_pause.3rtapi\n"
"rtapi_task_resume.3rtapi\n"
"rtapi_task_start.3rtapi\n"
"rtapi_task_wait.3rtapi\n"
msgstr ""

#. type: Title =
#: src/hal/general-ref.adoc:5
#, no-wrap
msgid "HAL General Reference(((HAL General Reference)))"
msgstr ""

#. type: Title ==
#: src/hal/general-ref.adoc:8
#, no-wrap
msgid "HAL Entity Names(((HAL Entity Names)))"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:16
msgid ""
"All HAL entities are accessible and manipulable by their names, so "
"documenting the names of pins, signals, parameters, etc., is very important. "
"Names in HAL have a maximum length of 41 characters (as defined by "
"HAL_NAME_LEN in hal.h). Many names will be presented in the general form, "
"with formatted text _<like-this>_ representing fields of various values."
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:21
msgid ""
"When pins, signals, or parameters are described for the first time, their "
"name will be preceded by their type in parentheses (_float_) and followed by "
"a brief description. Typical pins definitions look like these examples:"
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:22
#, no-wrap
msgid "(bit) parport.<portnum>.pin-<pinnum>-in"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:25
msgid ""
"The HAL pin associated with the physical input pin _<pinnum>_ of the db25 "
"connector."
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:26
#, no-wrap
msgid "(float) pid.<loopnum>.output"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:28
msgid "The PID loop output"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:32
msgid ""
"Occasionally, an abbreviated version of the name may be used, for example "
"the second pin above could be simply called with _.output_ when it can be "
"done without causing confusion."
msgstr ""

#. type: Title ==
#: src/hal/general-ref.adoc:34
#, no-wrap
msgid "HAL General Naming Conventions(((HAL General Naming Conventions)))"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:45
msgid ""
"Consistent naming conventions would make HAL much easier to use. For "
"example, if every encoder driver provided the same set of pins and named "
"them the same way it would be easy to change from one type of encoder driver "
"to another. Unfortunately, like many open-source projects, HAL is a "
"combination of things that were designed, and things that simply evolved. As "
"a result, there are many inconsistencies. This section attempts to address "
"that problem by defining some conventions, but it will probably be a while "
"before all the modules are converted to follow them."
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:57
msgid ""
"Halcmd and other low-level HAL utilities treat HAL names as single entities, "
"with no internal structure. However, most modules do have some implicit "
"structure. For example, a board provides several functional blocks, each "
"block might have several channels, and each channel has one or more pins. "
"This results in a structure that resembles a directory tree. Even though "
"halcmd doesn't recognize the tree structure, proper choice of naming "
"conventions will let it group related items together (since it sorts the "
"names). In addition, higher level tools can be designed to recognize such "
"structure, if the names provide the necessary information. To do that, all "
"HAL components should follow these rules:"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:60
msgid ""
"Dots (“.”) separate levels of the hierarchy.  This is analogous to the slash "
"(“/”) in a filename."
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:61
msgid ""
"Hyphens (“-”) separate words or fields in the same level of the hierarchy."
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:65
msgid ""
"HAL components should not use underscores or “MixedCase”.  footnote:"
"[Underlined characters have been removed, but there are still a few cases of "
"broken mixture, for example _pid.0.Pgain_ in place of _pid.0.p-gain_.]"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:66
msgid "Use only lowercase letters and numbers in names."
msgstr ""

#. type: Title ==
#: src/hal/general-ref.adoc:68
#, no-wrap
msgid "Hardware Driver Naming Conventions(((HAL Hardware Driver Naming Conventions)))"
msgstr ""

#. type: delimited block =
#: src/hal/general-ref.adoc:74
msgid ""
"Most drivers do not follow these conventions in version 2.0.  This chapter "
"is really a guide for future developments."
msgstr ""

#. type: Title ===
#: src/hal/general-ref.adoc:77
#, no-wrap
msgid "Pins/Parameters names(((HAL Hardware Driver Pins/Parameters Names)))"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:81
msgid ""
"Hardware drivers should use five fields (on three levels) to make up a pin "
"or parameter name, as follows:"
msgstr ""

#. type: delimited block -
#: src/hal/general-ref.adoc:84
#, no-wrap
msgid "<device-name>.<device-num>.<io-type>.<chan-num>.<specific-name>\n"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:87
msgid "The individual fields are:"
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:88 src/hal/general-ref.adoc:175
#, no-wrap
msgid "<device-name>"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:92
msgid ""
"The device that the driver is intended to work with. This is most often an "
"interface board of some type, but there are other possibilities."
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:93 src/hal/general-ref.adoc:178
#, no-wrap
msgid "<device-num>"
msgstr ""

#. FIXME Has this indeed been fixed and footnote should be removed
#. type: Plain text
#: src/hal/general-ref.adoc:104
msgid ""
"It is possible to install more than one servo board, parallel port, or other "
"hardware device in a computer. The device number identifies a specific "
"device. Device numbers start at 0 and increment. footnote:[Some hardwares "
"use jumpers or other devices to define a specific identification for each. "
"Ideally, the driver provides a way for the user to say, the _device-num 0 is "
"specific to the device that has ID XXX_, its subsets will all carry a number "
"starting with 0. But at present, some drivers use the ID directly as the "
"peripheral number. Which means it is possible to have a device number 2, "
"without having any in number 0. This is a bug that should disappear in "
"version 2.1.]"
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:106 src/hal/general-ref.adoc:181
#, no-wrap
msgid "<io-type>"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:118
msgid ""
"Most devices provide more than one type of I/O. Even the simple parallel "
"port has both digital inputs and digital outputs. More complex boards can "
"have digital inputs and outputs, encoder counters, pwm or step pulse "
"generators, analog-to-digital converters, digital-to-analog converters, or "
"other unique capabilities. The I/O type is used to identify the kind of I/O "
"that a pin or parameter is associated with.  Ideally, drivers that implement "
"the same I/O type, even if for very different devices, should provide a "
"consistent set of pins and parameters and identical behavior. For example, "
"all digital inputs should behave the same when seen from inside the HAL, "
"regardless of the device."
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:119
#, no-wrap
msgid "<chan-num>"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:138
msgid ""
"Virtually every I/O device has multiple channels, and the channel number "
"identifies one of them. Like device numbers, channel numbers start at zero "
"and increment.footnote:[One exception to the \"channel numbers start at zero"
"\" rule is the parallel port. Its HAL pins are numbered with the "
"corresponding pin number on the DB-25 connector. This is convenient for "
"wiring, but inconsistent with other drivers. There is some debate over "
"whether this is a bug or a feature.] If more than one device is installed, "
"the channel numbers on additional devices start over at zero. If it is "
"possible to have a channel number greater than 9, then channel numbers "
"should be two digits, with a leading zero on numbers less than 10 to "
"preserve sort ordering. Some modules have pins and/or parameters that affect "
"more than one channel. For example a PWM generator might have four channels "
"with four independent \"duty-cycle\" inputs, but one \"frequency\" parameter "
"that controls all four channels (due to hardware limitations). The frequency "
"parameter should use \"0-3\" as the channel number."
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:139
#, no-wrap
msgid "<specific-name>"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:149
msgid ""
"An individual I/O channel might have just a single HAL pin associated with "
"it, but most have more than one. For example, a digital input has two pins, "
"one is the state of the physical pin, the other is the same thing inverted. "
"That allows the configurator to choose between active high and active low "
"inputs. For most io-types, there is a standard set of pins and parameters, "
"(referred to as the \"canonical interface\") that the driver should "
"implement. The canonical interfaces are described in the <<cha:hal-canonical-"
"device-interfaces,Canonical Device Interfaces>> chapter."
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:152
#, no-wrap
msgid "motenc.0.encoder.2.position"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:155
msgid ""
"The position output of the third encoder channel on the first Motenc board."
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:156
#, no-wrap
msgid "stg.0.din.03.in"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:159
msgid "The state of the fourth digital input on the first Servo-to-Go board."
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:160
#, no-wrap
msgid "ppmc.0.pwm.00-03.frequency"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:163
msgid ""
"The carrier frequency used for PWM channels 0 through 3 on the first Pico "
"Systems ppmc board."
msgstr ""

#. type: Title ===
#: src/hal/general-ref.adoc:165
#, no-wrap
msgid "Function Names(((HAL Hardware Driver Function Names)))"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:170
msgid ""
"Hardware drivers usually only have two kinds of HAL functions, ones that "
"read the hardware and update HAL pins, and ones that write to the hardware "
"using data from HAL pins. They should be named as follows:"
msgstr ""

#. type: delimited block -
#: src/hal/general-ref.adoc:173
#, no-wrap
msgid "<device-name>-<device-num>.<io-type>-<chan-num-range>.read|write\n"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:177
msgid "The same as used for pins and parameters."
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:180
msgid "The specific device that the function will access."
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:193
msgid ""
"Optional. A function may access all of the I/O on a board, or it may access "
"only a certain type. For example, there may be independent functions for "
"reading encoder counters and reading digital I/O. If such independent "
"functions exist, the <io-type> field identifies the type of I/O they access. "
"If a single function reads all I/O provided by the board, <io-type> is not "
"used.  footnote:[Note to driver programmers: do NOT implement separate "
"functions for different I/O types unless they are interruptible and can work "
"in independent threads. If interrupting an encoder read, reading digital "
"inputs, and then resuming the encoder read will cause problems, then "
"implement a single function that does everything.]"
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:194
#, no-wrap
msgid "<chan-num-range>"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:197
msgid ""
"Optional. Used only if the <io-type> I/O is broken into groups and accessed "
"by different functions."
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:198
#, no-wrap
msgid "read|write"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:200
msgid "Indicates whether the function reads the hardware or writes to it."
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:203
#, no-wrap
msgid "motenc.0.encoder.read"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:205
msgid "Reads all encoders on the first motenc board."
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:206
#, no-wrap
msgid "generic8255.0.din.09-15.read"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:209
msgid ""
"Reads the second 8 bit port on the first generic 8255 based digital I/O "
"board."
msgstr ""

#. type: Labeled list
#: src/hal/general-ref.adoc:210
#, no-wrap
msgid "ppmc.0.write"
msgstr ""

#. type: Plain text
#: src/hal/general-ref.adoc:213
msgid ""
"Writes all outputs (step generators, pwm, DACs, and digital) on the first "
"Pico Systems ppmc board."
msgstr ""

#. type: Title =
#: src/hal/hal-examples.adoc:5
#, no-wrap
msgid "HAL Examples(((HAL Examples)))"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:19
msgid ""
"All of these examples assume you are starting with a stepconf based "
"configuration and have two threads 'base-thread' and 'servo-thread'. The "
"stepconf wizard will create an empty custom.hal and a custom_postgui.hal "
"file. The custom.hal file will be loaded after the configuration HAL file "
"and the custom_postgui.hal file is loaded after the GUI has been loaded."
msgstr ""

#. type: Title ==
#: src/hal/hal-examples.adoc:20
#, no-wrap
msgid "Connecting Two Outputs"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:25
msgid ""
"To connect two outputs to an input you can use the or2 component. The or2 "
"works like this, if either input to or2 is on then the or2 output is on. If "
"neither input to or2 is on the or2 output is off."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:27
msgid "For example to have two pyvcp buttons both connected to one led."
msgstr ""

#. type: Block title
#: src/hal/hal-examples.adoc:28
#, no-wrap
msgid "The .xml file"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:35
#, no-wrap
msgid ""
"<pyvcp>\n"
"  <button>\n"
"    <halpin>\"button-1\"</halpin>\n"
"    <text>\"Button 1\"</text>\n"
"  </button>\n"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:40
#, no-wrap
msgid ""
"  <button>\n"
"    <halpin>\"button-2\"</halpin>\n"
"    <text>\"Button 2\"</text>\n"
"  </button>\n"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:48
#, no-wrap
msgid ""
"  <led>\n"
"    <halpin>\"led-1\"</halpin>\n"
"    <size>50</size>\n"
"    <on_color>\"green\"</on_color>\n"
"    <off_color>\"red\"</off_color>\n"
"  </led>\n"
"</pyvcp>\n"
msgstr ""

#. type: Block title
#: src/hal/hal-examples.adoc:50
#, no-wrap
msgid "The postgui.hal file"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:57
#, no-wrap
msgid ""
"loadrt or2\n"
"addf or2.0 servo-thread\n"
"net button-1 or2.0.in0 <= pyvcp.button-1\n"
"net button-2 or2.0.in1 <= pyvcp.button-2\n"
"net led-1 pyvcp.led-1 <= or2.0.out\n"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:62
msgid ""
"When you run this example in an Axis simulator created with the Stepconf "
"Wizard you can open a terminal and see the pins created with 'loadrt or2' by "
"typing in 'halcmd show pin or2' in the terminal"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:70
#, no-wrap
msgid ""
"halcmd show pin or2\n"
"Component Pins:\n"
"Owner   Type  Dir         Value  Name\n"
"    22  bit   IN          FALSE  or2.0.in0 <== button-1\n"
"    22  bit   IN          FALSE  or2.0.in1 <== button-2\n"
"    22  bit   OUT         FALSE  or2.0.out ==> led-1\n"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:76
msgid ""
"You can see from the HAL command 'show pin or2' that the 'button-1' pin is "
"connected to the 'or2.0.in0' pin and from the direction arrow you can see "
"that the button is and output and the 'or2.0.in0' is an input. The output "
"from or2 goes to the input of the led."
msgstr ""

#. type: Title ==
#: src/hal/hal-examples.adoc:77
#, no-wrap
msgid "Manual Toolchange"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:89
msgid ""
"In this example it is assumed that you're 'rolling your own' configuration "
"and wish to add the HAL Manual Toolchange window. The HAL Manual Toolchange "
"is primarily useful if you have presettable tools and you store the offsets "
"in the tool table. If you need to touch off for each tool change then it is "
"best just to split up your G-code. To use the HAL Manual Toolchange window "
"you basically have to load the hal_manualtoolchange component then send the "
"iocontrol 'tool change' to the hal_manualtoolchange 'change' and send the "
"hal_manualtoolchange 'changed' back to the iocontrol 'tool changed'. A pin "
"is provided for an external input to indicate the tool change is complete."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:92
msgid ""
"This is an example of manual toolchange 'with' the HAL Manual Toolchange "
"component:"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:101
#, no-wrap
msgid ""
"loadusr -W hal_manualtoolchange\n"
"net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change\n"
"net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed\n"
"net external-tool-changed hal_manualtoolchange.change_button <= parport.0.pin-12-in\n"
"net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number\n"
"net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared\n"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:105
msgid ""
"This is an example of manual toolchange 'without' the HAL Manual Toolchange "
"component:"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:111
#, no-wrap
msgid ""
"net tool-number <= iocontrol.0.tool-prep-number\n"
"net tool-change-loopback iocontrol.0.tool-change => iocontrol.0.tool-changed\n"
"net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared\n"
msgstr ""

#. type: Title ==
#: src/hal/hal-examples.adoc:113
#, no-wrap
msgid "Compute Velocity"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:118
msgid ""
"This example uses 'ddt', 'mult2' and 'abs' to compute the velocity of a "
"single axis. For more information on the real time components see the man "
"pages or the HAL Components List (<<sec:hal-components>>)."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:125
msgid ""
"The first thing is to check your configuration to make sure you are not "
"using any of the real time components all ready. You can do this by opening "
"up the HAL Configuration window and look for the components in the pin "
"section. If you are then find the .hal file that they are being loaded in "
"and increase the counts and adjust the instance to the correct value. Add "
"the following to your custom.hal file."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:127
msgid "Load the realtime components."
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:133
#, no-wrap
msgid ""
"loadrt ddt count=1\n"
"loadrt mult2 count=1\n"
"loadrt abs count=1\n"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:136
msgid "Add the functions to a thread so it will get updated."
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:142
#, no-wrap
msgid ""
"addf ddt.0 servo-thread\n"
"addf mult2.0 servo-thread\n"
"addf abs.0 servo-thread\n"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:145
msgid "Make the connections."
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:153
#, no-wrap
msgid ""
"setp mult2.in1 60\n"
"net xpos-cmd ddt.0.in\n"
"net X-IPS mult2.0.in0 <= ddt.0.out\n"
"net X-ABS abs.0.in <= mult2.0.out\n"
"net X-IPM abs.0.out\n"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:157
msgid ""
"In this last section we are setting the mult2.0.in1 to 60 to convert the "
"inch per second to inch per minute that we get from the ddt.0.out."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:160
msgid ""
"The xpos-cmd sends the commanded position to the ddt.0.in. The ddt computes "
"the derivative of the change of the input."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:162
msgid "The ddt2.0.out is multiplied by 60 to give IPM."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:164
msgid "The mult2.0.out is sent to the abs to get the absolute value."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:168
msgid ""
"The following figure shows the result when the X axis is moving at 15 IPM in "
"the minus direction. Notice that we can get the absolute value from either "
"the abs.0.out pin or the X-IPM signal."
msgstr ""

#. type: Block title
#: src/hal/hal-examples.adoc:170
#, no-wrap
msgid "HAL: Velocity Example(((HAL:Velocity example)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/hal-examples.adoc:171
#, no-wrap
msgid "HAL: Velocity Example"
msgstr ""

#. type: Target for macro image
#: src/hal/hal-examples.adoc:171
#, no-wrap
msgid "images/velocity-01.png"
msgstr ""

#. type: Title ==
#: src/hal/hal-examples.adoc:173
#, no-wrap
msgid "Soft Start Details"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:177
msgid ""
"This example shows how the HAL components 'lowpass', 'limit2' or 'limit3' "
"can be used to limit how fast a signal changes."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:184
msgid ""
"In this example we have a servo motor driving a lathe spindle. If we just "
"used the commanded spindle speeds on the servo it will try to go from "
"present speed to commanded speed as fast as it can. This could cause a "
"problem or damage the drive. To slow the rate of change we can send the "
"spindle.N.speed-out through a limiter before the PID, so that the PID "
"command value changes to new settings more slowly."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:186
msgid "Three built-in components that limit a signal are:"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:188
msgid "'limit2' limits the range and first derivative of a signal."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:189
msgid "'limit3' limits the range, first and second derivatives of a signal."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:190
msgid ""
"'lowpass' uses an exponentially-weighted moving average to track an input "
"signal."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:192
msgid "To find more information on these HAL components check the man pages."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:195
msgid ""
"Place the following in a text file called softstart.hal. If you're not "
"familiar with Linux place the file in your home directory."
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:218
#, no-wrap
msgid ""
"loadrt threads period1=1000000 name1=thread\n"
"loadrt siggen\n"
"loadrt lowpass\n"
"loadrt limit2\n"
"loadrt limit3\n"
"net square siggen.0.square => lowpass.0.in limit2.0.in limit3.0.in\n"
"net lowpass <= lowpass.0.out\n"
"net limit2 <= limit2.0.out\n"
"net limit3 <= limit3.0.out\n"
"setp siggen.0.frequency .1\n"
"setp lowpass.0.gain .01\n"
"setp limit2.0.maxv 2\n"
"setp limit3.0.maxv 2\n"
"setp limit3.0.maxa 10\n"
"addf siggen.0.update thread\n"
"addf lowpass.0 thread\n"
"addf limit2.0 thread\n"
"addf limit3.0 thread\n"
"start\n"
"loadusr halscope\n"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:221
msgid "Open a terminal window and run the file with the following command."
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:224
#, no-wrap
msgid "halrun -I softstart.hal\n"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:228
msgid ""
"When the HAL Oscilloscope first starts up click 'OK' to accept the default "
"thread."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:232
msgid ""
"Next you have to add the signals to the channels. Click on channel 1 then "
"select 'square' from the Signals tab. Repeat for channels 2-4 and add "
"lowpass, limit2, and limit3."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:235
msgid ""
"Next to set up a trigger signal click on the Source None button and select "
"square. The button will change to Source Chan 1."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:238
msgid ""
"Next click on Single in the Run Mode radio buttons box. This will start a "
"run and when it finishes you will see your traces."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:241
msgid ""
"To separate the signals so you can see them better click on a channel then "
"use the Pos slider in the Vertical box to set the positions."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/hal-examples.adoc:243
#, no-wrap
msgid "Softstart screenshot"
msgstr ""

#. type: Target for macro image
#: src/hal/hal-examples.adoc:243
#, no-wrap
msgid "images/softstart-scope.png"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:249
msgid ""
"To see the effect of changing the set point values of any of the components "
"you can change them in the terminal window. To see what different gain "
"settings do for lowpass just type the following in the terminal window and "
"try different settings."
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:253
#, no-wrap
msgid "setp lowpass.0.gain *.01\n"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:256
msgid "After changing a setting run the oscilloscope again to see the change."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:261
msgid ""
"When you're finished type 'exit' in the terminal window to shut down halrun "
"and close the halscope. Don't close the terminal window with halrun running "
"as it might leave some things in memory that could prevent LinuxCNC from "
"loading."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:263
msgid "For more information on Halscope see the HAL manual and the tutorial."
msgstr ""

#. type: Title ==
#: src/hal/hal-examples.adoc:264
#, no-wrap
msgid "Stand Alone HAL"
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:270
msgid ""
"In some cases you might want to run a GladeVCP screen with just HAL. For "
"example say you had a stepper driven device that all you need is to run a "
"stepper motor. A simple 'Start/Stop' interface is all you need for your "
"application so no need to load up and configure a full blown CNC application."
msgstr ""

#. type: Plain text
#: src/hal/hal-examples.adoc:272
msgid ""
"In the following example we have created a simple GladeVCP panel with one "
"stepper."
msgstr ""

#. type: Block title
#: src/hal/hal-examples.adoc:273
#, no-wrap
msgid "Basic Syntax"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:277
#, no-wrap
msgid ""
"# load the winder.glade GUI and name it winder\n"
"loadusr -Wn winder gladevcp -c winder -u handler.py winder.glade\n"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:282
#, no-wrap
msgid ""
"# load realtime components\n"
"loadrt threads name1=fast period1=50000 fp1=0 name2=slow period2=1000000\n"
"loadrt stepgen step_type=0 ctrl_type=v\n"
"loadrt hal_parport cfg=\"0x378 out\"\n"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:289
#, no-wrap
msgid ""
"# add functions to threads\n"
"addf stepgen.make-pulses fast\n"
"addf stepgen.update-freq slow\n"
"addf stepgen.capture-position slow\n"
"addf parport.0.read fast\n"
"addf parport.0.write fast\n"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:294
#, no-wrap
msgid ""
"# make HAL connections\n"
"net winder-step parport.0.pin-02-out <= stepgen.0.step\n"
"net winder-dir parport.0.pin-03-out <= stepgen.0.dir\n"
"net run-stepgen stepgen.0.enable <= winder.start_button\n"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:297
#, no-wrap
msgid ""
"# start the threads\n"
"start\n"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:300
#, no-wrap
msgid ""
"# comment out the following lines while testing and use the interactive\n"
"# option halrun -I -f start.hal to be able to show pins etc.\n"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:303
#, no-wrap
msgid ""
"# wait until the GladeVCP GUI named winder terminates\n"
"waitusr winder\n"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:306
#, no-wrap
msgid ""
"# stop HAL threads\n"
"stop\n"
msgstr ""

#. type: delimited block -
#: src/hal/hal-examples.adoc:309
#, no-wrap
msgid ""
"# unload HAL all components before exiting\n"
"unloadrt all\n"
msgstr ""

#. type: Title =
#: src/hal/halmodule.adoc:5
#, no-wrap
msgid "Creating Userspace Python Components(((Creating Userspace Python Components)))"
msgstr ""

#. type: Title ==
#: src/hal/halmodule.adoc:7
#, no-wrap
msgid "Basic usage"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:14
msgid ""
"A userspace component begins by creating its pins and parameters, then "
"enters a loop which will periodically drive all the outputs from the inputs. "
"The following component copies the value seen on its input pin ('passthrough."
"in') to its output pin ('passthrough.out') approximately once per second."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:29
#, no-wrap
msgid ""
"#!/usr/bin/env python3\n"
"import hal, time\n"
"h = hal.component(\"passthrough\")\n"
"h.newpin(\"in\", hal.HAL_FLOAT, hal.HAL_IN)\n"
"h.newpin(\"out\", hal.HAL_FLOAT, hal.HAL_OUT)\n"
"h.ready()\n"
"try:\n"
"    while 1:\n"
"        time.sleep(1)\n"
"        h['out'] = h['in']\n"
"except KeyboardInterrupt:\n"
"    raise SystemExit\n"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:33
msgid ""
"Copy the above listing into a file named \"passthrough\", make it executable "
"('chmod +x'), and place it on your '$PATH'. Then try it out:"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:36
#, no-wrap
msgid "halrun\n"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:38
#, no-wrap
msgid "halcmd: loadusr passthrough\n"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:40 src/hal/halmodule.adoc:49
#: src/hal/tutorial.adoc:154 src/hal/tutorial.adoc:276
#: src/hal/tutorial.adoc:294 src/hal/tutorial.adoc:333
#: src/hal/tutorial.adoc:568
#, no-wrap
msgid "halcmd: show pin\n"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:45
#, no-wrap
msgid ""
"    Component Pins:\n"
"    Owner Type  Dir     Value  Name\n"
"     03   float IN          0  passthrough.in\n"
"     03   float OUT         0  passthrough.out\n"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:47
#, no-wrap
msgid "halcmd: setp passthrough.in 3.14\n"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:54
#, no-wrap
msgid ""
"    Component Pins:\n"
"    Owner Type  Dir     Value  Name\n"
"     03   float IN       3.14  passthrough.in\n"
"     03   float OUT      3.14  passthrough.out\n"
msgstr ""

#. type: Title ==
#: src/hal/halmodule.adoc:56
#, no-wrap
msgid "Userspace components and delays"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:65
msgid ""
"If you typed \"show pin\" quickly, you may see that 'passthrough.out' still "
"had its old value of 0. This is because of the call to 'time.sleep(1)', "
"which makes the assignment to the output pin occur at most once per second. "
"Because this is a userspace component, the actual delay between assignments "
"can be much longer if the memory used by the passthrough component is "
"swapped to disk, the assignment could be delayed until that memory is "
"swapped back in."
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:71
msgid ""
"Thus, userspace components are suitable for user-interactive elements such "
"as control panels (delays in the range of milliseconds are not noticed, and "
"longer delays are acceptable), but not for sending step pulses to a stepper "
"driver board (delays must always be in the range of microseconds, no matter "
"what)."
msgstr ""

#. type: Title ==
#: src/hal/halmodule.adoc:72
#, no-wrap
msgid "Create pins and parameters"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:76
#, no-wrap
msgid "h = hal.component(\"passthrough\")\n"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:82
msgid ""
"The component itself is created by a call to the constructor 'hal."
"component'.  The arguments are the HAL component name and (optionally) the "
"prefix used for pin and parameter names. If the prefix is not specified, the "
"component name is used."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:85
#, no-wrap
msgid "h.newpin(\"in\", hal.HAL_FLOAT, hal.HAL_IN)\n"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:91
msgid ""
"Then pins are created by calls to methods on the component object. The "
"arguments are: pin name suffix, pin type, and pin direction. For parameters, "
"the arguments are: parameter name suffix, parameter type, and parameter "
"direction."
msgstr ""

#. type: Block title
#: src/hal/halmodule.adoc:92
#, no-wrap
msgid "HAL Option Names"
msgstr ""

#. type: Table
#: src/hal/halmodule.adoc:95
#, no-wrap
msgid "Pin and Parameter Types:"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:95 src/hal/halmodule.adoc:365
#, no-wrap
msgid "HAL_BIT"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:95 src/hal/halmodule.adoc:366
#, no-wrap
msgid "HAL_FLOAT"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:95 src/hal/halmodule.adoc:367
#, no-wrap
msgid "HAL_S32"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:96 src/hal/halmodule.adoc:368
#, no-wrap
msgid "HAL_U32"
msgstr ""

#. type: Table
#: src/hal/halmodule.adoc:96
#, no-wrap
msgid "Pin Directions:"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:96 src/hal/halmodule.adoc:369
#, no-wrap
msgid "HAL_IN"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:96 src/hal/halmodule.adoc:370
#, no-wrap
msgid "HAL_OUT"
msgstr ""

#. type: Table
#: src/hal/halmodule.adoc:96
#, no-wrap
msgid "HAL_IO"
msgstr ""

#. type: Table
#: src/hal/halmodule.adoc:97
#, no-wrap
msgid "Parameter Directions:"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:97 src/hal/halmodule.adoc:371
#, no-wrap
msgid "HAL_RO"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:97 src/hal/halmodule.adoc:372
#, no-wrap
msgid "HAL_RW"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:103
msgid ""
"The full pin or parameter name is formed by joining the prefix and the "
"suffix with a \".\", so in the example the pin created is called "
"'passthrough.in'."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:106
#, no-wrap
msgid "h.ready()\n"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:110
msgid ""
"Once all the pins and parameters have been created, call the '.ready()' "
"method."
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:111
#, no-wrap
msgid "Changing the prefix"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:115
msgid ""
"The prefix can be changed by calling the '.setprefix()' method. The current "
"prefix can be retrieved by calling the '.getprefix()' method."
msgstr ""

#. type: Title ==
#: src/hal/halmodule.adoc:116
#, no-wrap
msgid "Reading and writing pins and parameters"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:120
msgid ""
"For pins and parameters which are also proper Python identifiers, the value "
"may be accessed or set using the attribute syntax:"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:123
#, no-wrap
msgid "h.out = h.in\n"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:127
msgid ""
"For all pins, whether or not they are also proper Python identifiers, the "
"value may be accessed or set using the subscript syntax:"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:130
#, no-wrap
msgid "h['out'] = h['in']\n"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:134
msgid ""
"To see all pins with their values, getpins returns all values in a "
"dictionary of that component."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:138
#, no-wrap
msgid ""
"h.getpins()\n"
">>>{'in': 0.0, 'out': 0.0}\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:140
#, no-wrap
msgid "Driving output (HAL_OUT) pins"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:148
msgid ""
"Periodically, usually in response to a timer, all HAL_OUT pins should be "
"\"driven\" by assigning them a new value. This should be done whether or not "
"the value is different than the last one assigned. When a pin is connected "
"to a signal, its old output value is not copied into the signal, so the "
"proper value will only appear on the signal once the component assigns a new "
"value."
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:149
#, no-wrap
msgid "Driving bidirectional (HAL_IO) pins"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:159
msgid ""
"The above rule does not apply to bidirectional pins. Instead, a "
"bidirectional pin should only be driven by the component when the component "
"wishes to change the value. For instance, in the canonical encoder "
"interface, the encoder component only sets the 'index-enable' pin to *FALSE* "
"(when an index pulse is seen and the old value is *TRUE*), but never sets it "
"to *TRUE*. Repeatedly driving the pin *FALSE* might cause the other "
"connected component to act as though another index pulse had been seen."
msgstr ""

#. type: Title ==
#: src/hal/halmodule.adoc:160
#, no-wrap
msgid "Exiting"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:168
msgid ""
"A 'halcmd unload' request for the component is delivered as a "
"'KeyboardInterrupt' exception. When an unload request arrives, the process "
"should either exit in a short time, or call the '.exit()' method on the "
"component if substantial work (such as reading or writing files) must be "
"done to complete the shutdown process."
msgstr ""

#. type: Title ==
#: src/hal/halmodule.adoc:169
#, no-wrap
msgid "Helpful Functions"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:171
#, no-wrap
msgid "ready"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:173
msgid ""
"Tells the HAL system the component is initialized. Locks out adding pins."
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:174
#, no-wrap
msgid "unready"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:177
msgid ""
"Allows a component to add pins after 'ready()' has been called.  One should "
"call 'ready()' on the component after."
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:178
#, no-wrap
msgid "component_exists"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:181
msgid "Does the specified component exist at this time."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:185
#, no-wrap
msgid "hal.component_exists(\"testpanel\")\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:187
#, no-wrap
msgid "component_is_ready"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:190
msgid "Is the specified component ready at this time."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:194
#, no-wrap
msgid "hal.component_is_ready(\"testpanel\")\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:196
#, no-wrap
msgid "get_msg_level"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:199
msgid "Get the current Realtime msg level."
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:200
#, no-wrap
msgid "set_msg_level"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:204
msgid "Set the current Realtime msg level.  used for debugging information."
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:205
#, no-wrap
msgid "connect"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:208
msgid "Connect a pin to a signal."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:212
#, no-wrap
msgid "hal.connect(\"pinname\",\"signal_name\")\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:214
#, no-wrap
msgid "disconnect"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:217
msgid "Disconnect a pin from a signal."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:221
#, no-wrap
msgid "hal.disconnect(\"pinname\")\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:223
#, no-wrap
msgid "get_value"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:226
msgid "Read a pin, param, or signal directly."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:230
#, no-wrap
msgid "value = hal.get_value(\"iocontrol.0.emc-enable-in\")\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:232
#, no-wrap
msgid "get_info_pins()"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:235
msgid "Returns a list of dicts of all system pins."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:243
#, no-wrap
msgid ""
"listOfDicts = hal.get_info_pins()\n"
"pinName1 = listOfDicts[0].get('NAME')\n"
"pinValue1 = listOfDicts[0].get('VALUE')\n"
"pinType1 = listOfDicts[0].get('TYPE')\n"
"pinDirection1 = listOfDicts[0].get('DIRECTION')\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:245
#, no-wrap
msgid "get_info_signals()"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:248
msgid "Returns a list of dicts of all system signals."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:255
#, no-wrap
msgid ""
"listOfDicts = hal.get_info_signals()\n"
"signalName1 = listOfDicts[0].get('NAME')\n"
"signalValue1 = listOfDicts[0].get('VALUE')\n"
"driverPin1 = listOfDicts[0].get('DRIVER')\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:257
#, no-wrap
msgid "get_info_params()"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:260
msgid "Returns a list of dicts of all system parameters."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:267
#, no-wrap
msgid ""
"listOfDicts = hal.get_info_params()\n"
"paramName1 = listOfDicts[0].get('NAME')\n"
"paramValue1 = listOfDicts[0].get('VALUE')\n"
"paramDirection1 = listOfDicts[0].get('DIRECTION')\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:269
#, no-wrap
msgid "new_sig"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:272
msgid "Create a new signal of the type specified."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:276
#, no-wrap
msgid "hal.new_sig(\"signalname\",hal.HAL_BIT)\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:278
#, no-wrap
msgid "pin_has_writer"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:282
#, no-wrap
msgid ""
"Does the specified pin have a driving pin connected.\n"
"Returns True or False."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:285
#, no-wrap
msgid "h.in.pin_has_writer()\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:287
#, no-wrap
msgid "get_name"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:291
#, no-wrap
msgid ""
"Get the HAL object name.\n"
"Return a string."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:294
#, no-wrap
msgid "h.in.get_name()\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:296
#, no-wrap
msgid "get_type"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:300
#, no-wrap
msgid ""
"Get the HAL object's type.\n"
"Returns an integer."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:303
#, no-wrap
msgid "h.in.get_type()\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:305
#, no-wrap
msgid "get_dir"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:309
#, no-wrap
msgid ""
"Get the HAL object direction type.\n"
"Returns an integer."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:312
#, no-wrap
msgid "h.in.get_dir()\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:314
#, no-wrap
msgid "get"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:317
msgid "Get the HAL object value."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:320
#, no-wrap
msgid "h.in.get()\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:322
#, no-wrap
msgid "set"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:325
msgid "Set the HAL object value."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:328
#, no-wrap
msgid "h.out.set(10)\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:330
#, no-wrap
msgid "is_pin"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:334
#, no-wrap
msgid ""
"Is the object a pin or parameter?\n"
"Returns True or False."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:337
#, no-wrap
msgid "h.in.is_pin()\n"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:339
#, no-wrap
msgid "sampler_base"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:343
#, no-wrap
msgid "stream_base"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:347
#, no-wrap
msgid "stream"
msgstr ""

#. type: Title ===
#: src/hal/halmodule.adoc:351
#, no-wrap
msgid "set_p"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:354
msgid "Set a pin value of any pin in the HAL system."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:358
#, no-wrap
msgid "hal.set_p(\"pinname\",\"10\")\n"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:363
msgid "Use these to specify details rather then the value they hold."
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:373
msgid "MSG_NONE"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:374
msgid "MSG_ALL"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:375
msgid "MSG_DBG"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:376
msgid "MSG_ERR"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:377
msgid "MSG_INFO"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:378
msgid "MSG_WARN"
msgstr ""

#. type: Title ==
#: src/hal/halmodule.adoc:379
#, no-wrap
msgid "System Information"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:382
msgid "Read these to acquire information about the realtime system."
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:384
msgid "is_kernelspace"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:385
msgid "is_rt"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:386
msgid "is_sim"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:387
msgid "is_userspace"
msgstr ""

#. type: Title ==
#: src/hal/halmodule.adoc:388
#, no-wrap
msgid "Use with hal_glib in GladeVCP Handler"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:392
#, no-wrap
msgid ""
"GladeVCP uses the hal_glib library, which can be used to connect a \"watcher\" signal on a HAL input pin.\n"
"This signal can be used to register a function to call when the HAL pin changes state. +"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:394
msgid "One must import the module and the hal module:"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:399
#, no-wrap
msgid ""
"import hal_glib\n"
"import hal\n"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:402
msgid ""
"Then make a pin and connect a 'value-changed' (the watcher) signal to a "
"function call:"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:409
#, no-wrap
msgid ""
"class HandlerClass:\n"
"    def __init__(self, halcomp,builder,useropts):\n"
"        self.example_trigger = hal_glib.GPin(halcomp.newpin('example-trigger', hal.HAL_BIT, hal.HAL_IN))\n"
"        self.example_trigger.connect('value-changed', self._on_example_trigger_change)\n"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:412
msgid "And have a function to be called:"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:419
#, no-wrap
msgid ""
"    def _on_example_trigger_change(self,pin,userdata=None):\n"
"        print(\"pin value changed to:\" % (pin.get()))\n"
"        print(\"pin name= %s\" % (pin.get_name()))\n"
"        print(\"pin type= %d\" % (pin.get_type()))\n"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:422
#, no-wrap
msgid ""
"        # this can be called outside the function\n"
"        self.example_trigger.get()\n"
msgstr ""

#. type: Title ==
#: src/hal/halmodule.adoc:424
#, no-wrap
msgid "Use with hal_glib in QtVCP Handler"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:428
#, no-wrap
msgid ""
"QtVCP uses the hal_glib library, which can be used to connect a \"watcher\" signal on a HAL input pin.\n"
"This signal can be used to register a function to call when the HAL pin changes state. +"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:430
msgid "One must import the hal module:"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:434
#, no-wrap
msgid "import hal\n"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:437
msgid ""
"Then make a pin and connect a 'value_changed' (the watcher) signal to a "
"function call:"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:449
#, no-wrap
msgid ""
"    ########################\n"
"    # **** INITIALIZE **** #\n"
"    ########################\n"
"    # widgets allows access to  widgets from the qtvcp files\n"
"    # at this point the widgets and HAL pins are not instantiated\n"
"    def __init__(self, halcomp,widgets,paths):\n"
"        self.hal = halcomp\n"
"        self.testPin = self.hal.newpin('test-pin', hal.HAL_BIT, hal.HAL_IN)\n"
"        self.testPin.value_changed.connect(lambda s: self.setTestPin(s))\n"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:453
msgid ""
"And have a function to be called.  This shows ways to get the pin value and "
"information."
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:464
#, no-wrap
msgid ""
"    #####################\n"
"    # general functions #\n"
"    #####################\n"
"    def setTestPin(self, data):\n"
"        print(\"Test pin value changed to:\" % (data))\n"
"        print('halpin object =', self.w.sender())\n"
"        print('halpin name: ',self.sender().text())\n"
"        print('halpin type: ',self.sender().get_type())\n"
msgstr ""

#. type: delimited block -
#: src/hal/halmodule.adoc:467
#, no-wrap
msgid ""
"        # this can be called outside the function\n"
"        print(self.testPin.get())\n"
msgstr ""

#. type: Title ==
#: src/hal/halmodule.adoc:469
#, no-wrap
msgid "Project ideas"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:477
msgid ""
"Create an external control panel with buttons, switches, and indicators. "
"Connect everything to a microcontroller, and connect the microcontroller to "
"the PC using a serial interface. Python has a very capable serial interface "
"module called https://pyserial.readthedocs.io/en/latest/[pyserial] (Ubuntu "
"package name \"python3-serial\", in the universe repository)"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:480
msgid ""
"Attach a http://lcdproc.omnipotent.net/[LCDProc]-compatible LCD module and "
"use it to display a digital readout with information of your choice (Ubuntu "
"package name \"lcdproc\", in the universe repository)"
msgstr ""

#. type: Plain text
#: src/hal/halmodule.adoc:482
msgid ""
"Create a virtual control panel using any GUI library supported by Python "
"(gtk, Qt, wxWindows, etc.)"
msgstr ""

#. type: Title =
#: src/hal/halshow.adoc:5
#, no-wrap
msgid "Halshow(((Halshow)))"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:19
msgid ""
"The script halshow can help you find your way around a running HAL.  This is "
"a very specialized system and it must connect to a working HAL.  It cannot "
"run standalone because it relies on the ability of HAL to report what it "
"knows of itself through the halcmd interface library. It is discovery based. "
"Each time halshow runs with a different LinuxCNC configuration it will be "
"different."
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:22
msgid ""
"As we will soon see, this ability of HAL to document itself is one key to "
"making an effective CNC system."
msgstr ""

#. type: Title ==
#: src/hal/halshow.adoc:23
#, no-wrap
msgid "Starting Halshow"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:26
msgid "Halshow is in the AXIS menu under Machine/Show HAL Configuration."
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:28
msgid "Halshow is in the TkLinuxCNC menu under Scripts/HAL Show."
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:32
msgid ""
"Halshow can be started from a terminal command line and specify formats for "
"integer and float items (pins or signals) and identify a saved watchlist "
"file to use:"
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:41
#, no-wrap
msgid ""
"$ halshow --help\n"
"Usage:\n"
"  halshow [Options] [watchfile]\n"
"  Options:\n"
"           --help    (this help)\n"
"           --fformat format_string_for_float\n"
"           --iformat format_string_for_int\n"
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:45
#, no-wrap
msgid ""
"Notes:\n"
"       Create watchfile in halshow using: 'File/Save Watch List'\n"
"       linuxcnc must be running for standalone usage\n"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:49
msgid ""
"Example to limit number of decimal points for floats and use a file named my."
"halshow in the current directory:"
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:52
#, no-wrap
msgid "$ halshow  --fformat \"%.5f\" ./my.halshow\n"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:55
msgid ""
"For more information regarding the format, please refer to https://www.tcl."
"tk/man/tcl/TclCmd/format.html"
msgstr ""

#. type: Title ==
#: src/hal/halshow.adoc:56
#, no-wrap
msgid "HAL Tree Area"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:61
msgid ""
"At the left of its display as shown in figure is a tree view, somewhat like "
"you might see with some file browsers. At the right is a tabbed notebook "
"with tabs for show and watch."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/halshow.adoc:63 src/hal/halshow.adoc:64
#, no-wrap
msgid "Halshow Layout"
msgstr ""

#. type: Target for macro image
#: src/hal/halshow.adoc:64
#, no-wrap
msgid "images/halshow-1.png"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:70
msgid ""
"The tree shows all of the major parts of a HAL. In front of each is a small "
"plus (+) or minus (-) sign in a box. Clicking the plus will expand that tree "
"node to display what is under it. If that box shows a minus sign, clicking "
"it will collapse that section of the tree."
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:76
msgid ""
"You can also expand or collapse the tree display using the Tree View menu at "
"the upper left edge of the display. Under Tree View you will find: Expand "
"Tree, Collapse Tree; Expand Pins, Expand Parameters, Expand Signals; and "
"Erase Watch. (Note that Erase Watch erases 'all' previously set watches, you "
"cannot erase just one watch.)"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/halshow.adoc:78 src/hal/halshow.adoc:79
#, no-wrap
msgid "Halshow: Show Tab"
msgstr ""

#. type: Target for macro image
#: src/hal/halshow.adoc:79
#, no-wrap
msgid "images/halshow-3.png"
msgstr ""

#. type: Title ==
#: src/hal/halshow.adoc:81
#, no-wrap
msgid "HAL Show Area"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:91
msgid ""
"Clicking on the node name, the word \"Components\" for example, will show "
"you (under the \"Show\" tab) all that HAL knows about the contents of that "
"node. Figure <<cap:halshow-layout>> shows a list exactly like you will see "
"if you click the \"Components\" name.  The information display is exactly "
"like those shown in traditional text based HAL analysis tools. The advantage "
"here is that we have mouse click access, access that can be as broad or as "
"focused as you need."
msgstr ""

#. type: Block title
#: src/hal/halshow.adoc:92 src/hal/halshow.adoc:265
#, no-wrap
msgid "[yellow-background]#New in 2.9#"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:94
msgid "Selected text from the Show tab can be copied by right-click or CTRL-C."
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:95
msgid ""
"The command entry provides now a BASH-like history (only for the session) "
"for executed commands."
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:103
msgid ""
"If we take a closer look at the tree display we can see that the six major "
"parts of a HAL can all be expanded at least one level. As these levels are "
"expanded you can get more focused with the reply when you click on the "
"rightmost tree node. You will find that there are some HAL pins and "
"parameters that show more than one reply. This is due to the nature of the "
"search routines in halcmd itself. If you search one pin you may get two, "
"like this:"
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:109
#, no-wrap
msgid ""
"Component Pins:\n"
"Owner  Type  Dir  Value  Name\n"
"06     bit    -W   TRUE  parport.0.pin-10-in\n"
"06     bit    -W  FALSE  parport.0.pin-10-in-not\n"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:112
msgid "The second pin's name contains the complete name of the first."
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:117
msgid ""
"Below the show area on the right is a set of widgets that will allow you to "
"play with the running HAL. The commands you enter here and the effect that "
"they have on the running HAL are not saved. They will persist as long as "
"LinuxCNC remains up but are gone as soon as LinuxCNC is."
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:120
msgid ""
"The entry box labeled \"Test HAL Command:\" will accept any of the commands "
"listed for halcmd. These include:"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:122
msgid "loadrt, unloadrt (load/unload real-time module)"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:123
msgid "loadusr, unloadusr (load/unload user-space component)"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:124
msgid "addf, delf (add/delete a function to/from a real-time thread)"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:125
msgid "net (create a connection between two or more items)"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:126
msgid "setp (set parameter (or pin) to a value)"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:133
msgid ""
"This little editor will enter a command any time you press <enter> or push "
"the execute button. An error message from halcmd will show below this entry "
"widget when these commands are not properly formed. If you are not certain "
"how to set up a proper command you'll need to read again the documentation "
"on halcmd and the specific modules that you are working with."
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:139
msgid ""
"Let's use this editor to add a differential module to a HAL and connect it "
"to axis position so that we could see the rate of change in position, i.e., "
"acceleration. We first need to load a HAL component named ddt, add it to the "
"servo thread, then connect it to the position pin of a joint. Once that is "
"done we can find the output of the differentiator in halscope. So let's go."
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:143
#, no-wrap
msgid "loadrt ddt\n"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:147
msgid ""
"Now look at the components node and you should see ddt in there someplace."
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:160
#, no-wrap
msgid ""
"Loaded HAL Components:\n"
"ID Type        Name\n"
"10 User halcmd29800\n"
"09 User halcmd29374\n"
"08   RT         ddt\n"
"06   RT hal_parport\n"
"05   RT    scope_rt\n"
"04   RT     stepgen\n"
"03   RT      motmod\n"
"02 User   iocontrol\n"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:164
msgid ""
"Sure enough there it is. Notice that its ID is 08. Next we need to find out "
"what functions are available with it so we look at functions:"
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:179
#, no-wrap
msgid ""
"Exported Functions:\n"
"Owner  CodeAddr      Arg  FP Users Name\n"
"  08   E0B97630 E0DC7674 YES     0 ddt.0\n"
"  03   E0DEF83C 00000000 YES     1 motion-command-handler\n"
"  03   E0DF0BF3 00000000 YES     1 motion-controller\n"
"  06   E0B541FE E0DC75B8  NO     1 parport.0.read\n"
"  06   E0B54270 E0DC75B8  NO     1 parport.0.write\n"
"  06   E0B54309 E0DC75B8  NO     0 parport.read-all\n"
"  06   E0B5433A E0DC75B8  NO     0 parport.write-all\n"
"  05   E0AD712D 00000000  NO     0 scope.sample\n"
"  04   E0B618C1 E0DC7448 YES     1 stepgen.capture-position\n"
"  04   E0B612F5 E0DC7448  NO     1 stepgen.make-pulses\n"
"  04   E0B614AD E0DC7448 YES     1 stepgen.update-freq\n"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:186
msgid ""
"Here we look for owner #08 and see a function named ddt.0. We should be able "
"to add ddt.0 to the servo thread and it will do its math each time the servo "
"thread is updated. Once again we look up the addf command and find that it "
"uses three arguments like this:"
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:190
#, no-wrap
msgid "addf <functname> <threadname> [<position>]\n"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:196
msgid ""
"We already know the functname=ddt.0 so let's get the thread name right by "
"expanding the thread node in the tree. Here we see two threads, servo-thread "
"and base-thread. The position of ddt.0 in the thread is not critical. So we "
"add the function ddt.0 to the servo-thread:"
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:200
#, no-wrap
msgid "addf ddt.0 servo-thread\n"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:205
msgid ""
"This is just for viewing, so we leave position blank and get the last "
"position in the thread. The following figure shows the state of halshow "
"after this command has been issued."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/halshow.adoc:207 src/hal/halshow.adoc:208
#, no-wrap
msgid "Addf command"
msgstr ""

#. type: Target for macro image
#: src/hal/halshow.adoc:208
#, no-wrap
msgid "images/halshow-2.png"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:213
msgid ""
"Next we need to connect ddt to something. But how do we know what pins are "
"available? The answer is to look under pins. There we find ddt and see this:"
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:219
#, no-wrap
msgid ""
"Component Pins:\n"
"Owner Type  Dir Value       Name\n"
"08    float R-  0.00000e+00 ddt.0.in\n"
"08    float -W  0.00000e+00 ddt.0.out\n"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:224
msgid ""
"That looks easy enough to understand, but what signal or pin do we want to "
"to connect to it? It could be an axis pin, a stepgen pin, or a signal.  We "
"see this when we look at joint.0:"
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:229
#, no-wrap
msgid ""
"Component Pins:\n"
"Owner Type  Dir Value       Name\n"
"03    float -W  0.00000e+00 joint.0.motor-pos-cmd ==> Xpos-cmd\n"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:233
msgid ""
"So it looks like Xpos-cmd should be a good signal to use.  Back to the "
"editor where we enter the following command:"
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:237
#, no-wrap
msgid "linksp Xpos-cmd ddt.0.in\n"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:241
msgid ""
"Now if we look at the Xpos-cmd signal using the tree node we'll see what "
"we've done:"
msgstr ""

#. type: delimited block -
#: src/hal/halshow.adoc:249
#, no-wrap
msgid ""
"Signals:\n"
"Type Value Name\n"
"float 0.00000e+00 Xpos-cmd\n"
"<== joint.0.motor-pos-cmd\n"
"==> ddt.0.in\n"
"==> stepgen.0.position-cmd\n"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:255
msgid ""
"We see that this signal comes from joint.o.motor-pos-cmd and goes to both "
"ddt.0.in and stepgen.0.position-cmd. By connecting our block to the signal "
"we have avoided any complications with the normal flow of this motion "
"command."
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:262
msgid ""
"The HAL Show Area uses halcmd to discover what is happening in a running "
"HAL. It gives you complete information about what it has discovered. It also "
"updates as you issue commands from the little editor panel to modify that "
"HAL. There are times when you want a different set of things displayed "
"without all of the information available in this area. That is where the HAL "
"Watch Area is of value."
msgstr ""

#. type: Title ==
#: src/hal/halshow.adoc:263
#, no-wrap
msgid "Watch Tab Area"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:267
msgid "Buttons for pin/signal/parameter manipulation"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:268
msgid "Right-click menu to"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:269
msgid "Copy name"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:270
msgid "Set value"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:271
msgid "Unlink pin"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:272
msgid "Remove from view"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:273
msgid "Menu entries for"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:274
msgid "Add signals/pins/parameters by name"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:275
msgid "Set watch interval"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:287
msgid ""
"Clicking the watch tab produces a blank canvas. You can add signals and pins "
"to this canvas and watch their values.footnote:[The refresh rate of the "
"watch display is much lower than Halmeter or Halscope. If you need good "
"resolution of the timing of signals use these tools or set the interval in "
"the Watch menu.] You can add signals or pins when the watch tab is displayed "
"by clicking on the name of it in the tree view.  The following figure shows "
"this canvas with several pins.  The pins and signals that are writable have "
"buttons for manipulation on the right side. Pins that are linked to a signal "
"have disabled buttons. To set these values, the corresponding pin has to be "
"unlinked from the signal. That can be done by right-click on the signal name "
"and select \"Unlink pin\", see <<cap:watch-tab-context-menu>>."
msgstr ""

#. type: Block title
#: src/hal/halshow.adoc:289
#, no-wrap
msgid "Halshow: Watch Tab(((Halshow: Watch Tab)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/halshow.adoc:290
#, no-wrap
msgid "Halshow: Watch Tab"
msgstr ""

#. type: Target for macro image
#: src/hal/halshow.adoc:290 src/hal/tools.adoc:121
#, no-wrap
msgid "images/halshow-4.png"
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:297
msgid ""
"Watch displays bit type (binary) values using colored circles representing "
"LEDs. They show as dark red when a bit signal or pin is false, and as light "
"yellow whenever that signal is true. If you select a pin or signal that is "
"not a bit type (binary) signal, watch will show it as a numerical value."
msgstr ""

#. type: Plain text
#: src/hal/halshow.adoc:304
msgid ""
"Watch will quickly allow you to test switches or see the effect of changes "
"that you make to LinuxCNC while using the graphical interface.  Watch's "
"refresh rate is a bit slow to see stepper pulses, but you can use it for "
"these if you move an axis very slowly or in very small increments of "
"distance. If you've used IO_Show in LinuxCNC, the watch page in halshow can "
"be set up to watch a parport much as IO_Show did."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/halshow.adoc:306 src/hal/halshow.adoc:307
#, no-wrap
msgid "Halshow: Watch Tab Context Menu"
msgstr ""

#. type: Target for macro image
#: src/hal/halshow.adoc:307
#, no-wrap
msgid "images/halshow-5.png"
msgstr ""

#. type: Title =
#: src/hal/haltcl.adoc:5
#, no-wrap
msgid "HALTCL Files"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:16
msgid ""
"The halcmd language excels in specifying components and connections but "
"offers no computational capabilities.  As a result, INI files are limited in "
"the clarity and brevity that is possible with higher level languages."
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:20
msgid ""
"The haltcl facility provides a means to use Tcl scripting and its features "
"for computation, looping, branching, procedures, etc. in INI files.  To use "
"this functionality, you use the Tcl language and the extension .tcl for HAL "
"files."
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:24
msgid ""
"The .tcl extension is understood by the main script (linuxcnc) that "
"processes INI files.  Haltcl files are identified in the the HAL section of "
"INI files (just like HAL files)."
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:31
#, no-wrap
msgid ""
"[HAL]\n"
"HALFILE = conventional_file.hal\n"
"HALFILE = tcl_based_file.tcl\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:34
msgid "With appropriate care, HAL and Tcl files can be intermixed."
msgstr ""

#. type: Title ==
#: src/hal/haltcl.adoc:35
#, no-wrap
msgid "Compatibility"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:39
msgid ""
"The halcmd language used in HAL files has a simple syntax that is actually a "
"subset of the more powerful general-purpose Tcl scripting language."
msgstr ""

#. type: Title ==
#: src/hal/haltcl.adoc:40
#, no-wrap
msgid "Haltcl Commands"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:45
msgid ""
"Haltcl files use the Tcl scripting language augmented with the specific "
"commands of the LinuxCNC hardware abstraction layer (HAL).  The HAL-specific "
"commands are:"
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:59
#, no-wrap
msgid ""
"addf, alias,\n"
"delf, delsig,\n"
"getp, gets\n"
"ptype,\n"
"stype,\n"
"help,\n"
"linkpp, linkps, linksp, list, loadrt, loadusr, lock,\n"
"net, newsig,\n"
"save, setp, sets, show, source, start, status, stop,\n"
"unalias, unlinkp, unload, unloadrt, unloadusr, unlock,\n"
"waitusr\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:64
msgid ""
"Two special cases occur for the 'gets' and 'list' commands due to conflicts "
"with Tcl builtin commands.  For haltcl, these commands must be preceded with "
"the keyword 'hal':"
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:70
#, no-wrap
msgid ""
"halcmd   haltcl\n"
"------   ------\n"
"gets     hal gets\n"
"list     hal list\n"
msgstr ""

#. type: Title ==
#: src/hal/haltcl.adoc:72
#, no-wrap
msgid "Haltcl INI-file variables"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:76
msgid ""
"INI file variables are accessible by both halcmd and haltcl but with "
"differing syntax."
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:79
msgid ""
"LinuxCNC INI files use SECTION and ITEM specifiers to identify configuration "
"items:"
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:88
#, no-wrap
msgid ""
"[SECTION_A]\n"
"ITEM1 = value_1\n"
"ITEM2 = value_2\n"
"...\n"
"[SECTION_B]\n"
"...\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:92
msgid ""
"The INI file values are accessible by text substitution in HAL files using "
"the form:"
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:96
#, no-wrap
msgid "[SECTION]ITEM\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:100
msgid ""
"The same INI file values are accessible in Tcl files using the form of a Tcl "
"global array variable:"
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:104
#, no-wrap
msgid "$::SECTION(ITEM)\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:107
msgid "For example, an INI file item like:"
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:112
#, no-wrap
msgid ""
"[JOINT_0]\n"
"MAX_VELOCITY = 4\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:116
#, no-wrap
msgid ""
"is expressed as   `[JOINT_0]MAX_VELOCITY`  in HAL files for halcmd +\n"
"and as            `$::JOINT_0(MAX_VELOCITY)` in Tcl files for haltcl.\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:119
msgid ""
"Because INI files can repeat the same ITEM in the same SECTION multiple "
"times, `$::SECTION(ITEM)` is actually a Tcl list of each individual value."
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:123
msgid ""
"When there is just one value and it is a simple value (all values that are "
"just letters and numbers without whitespace are in this group), then it is "
"possible to treat `$::SECTION(ITEM)` as though it is not a list."
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:128
msgid ""
"When the value could contain special characters--quote characters, curly-"
"brace characters, embedded whitespace, and other characters that have "
"special meaning in Tcl--it is necessary to distinguish between the list of "
"values and the initial (and possibly only) value in the list."
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:130
msgid "In Tcl, this is written `[lindex $::SECTION(ITEM) 0]`."
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:132
msgid "For example: given the following INI values"
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:140
#, no-wrap
msgid ""
"[HOSTMOT2]\n"
"DRIVER=hm2_eth\n"
"IPADDR=\"10.10.10.10\"\n"
"BOARD=7i92\n"
"CONFIG=\"num_encoders=0 num_pwmgens=0 num_stepgens=6\"\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:143
msgid "And this loadrt command:"
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:147
#, no-wrap
msgid "loadrt $::HOSTMOT2(DRIVER) board_ip=$::HOSTMOT2(IPADDR) config=$::HOSTMOT2(CONFIG)\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:150
msgid "Here is the actual command that is run:"
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:154
#, no-wrap
msgid "loadrt hm2_eth board_ip={\"10.10.10.10\"} config={\"num_encoders=0 num_pwmgens=0 num_stepgens=6\"}\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:157
msgid "This fails because loadrt does not recognize the braces."
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:159
msgid ""
"So to get the values just as entered in the INI file, re-write the loadrt "
"line like this:"
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:163
#, no-wrap
msgid "loadrt $::HOSTMOT2(DRIVER) board_ip=[lindex $::HOSTMOT2(IPADDR) 0] config=[lindex $::HOSTMOT2(CONFIG) 0]\n"
msgstr ""

#. type: Title ==
#: src/hal/haltcl.adoc:165
#, no-wrap
msgid "Converting HAL files to Tcl files"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:170
msgid ""
"Existing HAL files can be converted to Tcl files by hand editing to adapt to "
"the differences mentioned above.  The process can be automated with scripts "
"that convert using these substitutions."
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:175
#, no-wrap
msgid ""
"[SECTION]ITEM ---> $::SECTION(ITEM)\n"
"gets          ---> hal gets\n"
"list          ---> hal list\n"
msgstr ""

#. type: Title ==
#: src/hal/haltcl.adoc:177
#, no-wrap
msgid "Haltcl Notes"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:181
msgid ""
"In haltcl, the value argument for the 'sets' and 'setp' commands is "
"implicitly treated as an expression in the Tcl language."
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:187
#, no-wrap
msgid ""
"# set gain to convert deg/sec to units/min for JOINT_0 radius\n"
"setp scale.0.gain 6.28/360.0*$::JOINT_0(radius)*60.0\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:191
msgid "Whitespace in the bare expression is not allowed, use quotes for that:"
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:195
#, no-wrap
msgid "setp scale.0.gain \"6.28 / 360.0 * $::JOINT_0(radius) * 60.0\"\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:199
msgid ""
"In other contexts, such as 'loadrt', you must explicitly use the Tcl expr "
"command ([expr {}]) for computational expressions."
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:204
#, no-wrap
msgid "loadrt motion base_period=[expr {500000000/$::TRAJ(MAX_PULSE_RATE)}]\n"
msgstr ""

#. type: Title ==
#: src/hal/haltcl.adoc:206
#, no-wrap
msgid "Haltcl Examples"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:212
msgid ""
"Consider the topic of 'stepgen headroom'.  Software stepgen runs best with "
"an acceleration constraint that is \"a bit higher\" than the one used by the "
"motion planner.  So, when using halcmd files, we force INI files to have a "
"manually calculated value."
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:218
#, no-wrap
msgid ""
"[JOINT_0]\n"
"MAXACCEL = 10.0\n"
"STEPGEN_MAXACCEL = 10.5\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:222
msgid ""
"With haltcl, you can use Tcl commands to do the computation and eliminate "
"the STEPGEN_MAXACCEL INI file item altogether:"
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:226
#, no-wrap
msgid "setp stepgen.0.maxaccel $::JOINT_0(MAXACCEL)*1.05\n"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:232
msgid ""
"Another haltcl feature is looping and testing.  For example, many simulator "
"configurations use \"core_sim.hal\" or \"core_sim9.hal\" HAL files.  These "
"differ because of the requirement to connect more or fewer axes.  The "
"following haltcl code would work for any combination of axes in a trivkins "
"machine."
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:252
#, no-wrap
msgid ""
"# Create position, velocity and acceleration signals for each axis\n"
"set ddt 0\n"
"for {set jnum 0} {$jnum < $::KINS(JOINTS)} {incr jnum} {\n"
"  # 'list pin' returns an empty list if the pin doesn't exist\n"
"  if {[hal list pin joint.${jnum}.motor-pos-cmd] == {}} {\n"
"    continue\n"
"  }\n"
"  net ${jnum}pos joint.${jnum}.motor-pos-cmd => joint.$axno.motor-pos-fb \\\n"
"                                             => ddt.$ddt.in\n"
"  net ${axis}vel <= ddt.$ddt.out\n"
"  incr ddt\n"
"  net ${axis}vel => ddt.$ddt.in\n"
"  net ${axis}acc <= ddt.$ddt.out\n"
"  incr ddt\n"
"}\n"
"puts [show sig *vel]\n"
"puts [show sig *acc]\n"
msgstr ""

#. type: Title ==
#: src/hal/haltcl.adoc:254
#, no-wrap
msgid "Haltcl Interactive"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:259
msgid ""
"The halrun command recognizes haltcl files.  With the -T option, haltcl can "
"be run interaactively as a Tcl interpreter.  This capability is useful for "
"testing and for standalone HAL applications."
msgstr ""

#. type: delimited block -
#: src/hal/haltcl.adoc:263
#, no-wrap
msgid "$ halrun -T haltclfile.tcl\n"
msgstr ""

#. type: Title ==
#: src/hal/haltcl.adoc:265
#, no-wrap
msgid "Haltcl Distribution Examples (sim)"
msgstr ""

#. type: Plain text
#: src/hal/haltcl.adoc:271
msgid ""
"The configs/sim/axis/simtcl directory includes an INI file that uses a .tcl "
"file to demonstrate a haltcl configuration in conjunction with the usage of "
"twopass processing.  The example shows the use of Tcl procedures, looping, "
"the use of comments and output to the terminal."
msgstr ""

#. type: Title =
#: src/hal/halui-examples.adoc:5
#, no-wrap
msgid "Halui Examples(((Halui Examples)))"
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:15
msgid ""
"For any Halui examples to work you need to add the following line to the "
"[HAL] section of the ini file."
msgstr ""

#. type: delimited block -
#: src/hal/halui-examples.adoc:19 src/source-highlight/ini-demo.adoc:134
#, no-wrap
msgid "HALUI = halui\n"
msgstr ""

#. type: Title ==
#: src/hal/halui-examples.adoc:22
#, no-wrap
msgid "Remote Start"
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:34
msgid ""
"To connect a remote program start button to LinuxCNC you use the `halui."
"program.run` pin and the `halui.mode.auto` pin.  You have to insure that it "
"is OK to run first by using the `halui.mode.is-auto` pin. You do this with "
"an `and2` component. The following figure shows how this is done.  When the "
"Remote Run Button is pressed it is connected to both `halui.mode.auto` and "
"`and2.0.in0`. If it is OK for auto mode the pin `halui.mode.is-auto` will be "
"on.  If both the inputs to the `and2.0` component are on the `and2.0.out` "
"will be on and this will start the program."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/halui-examples.adoc:35 src/hal/halui-examples.adoc:36
#, no-wrap
msgid "Remote Start Example"
msgstr ""

#. type: Target for macro image
#: src/hal/halui-examples.adoc:36 src/hal/intro.adoc:123
#, no-wrap
msgid "images/remote-start.png"
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:39
msgid "The hal commands needed to accomplish the above are:"
msgstr ""

#. type: delimited block -
#: src/hal/halui-examples.adoc:45
#, no-wrap
msgid ""
"net program-start-btn halui.mode.auto and2.0.in0 <= <your input pin>\n"
"net program-run-ok and2.0.in1 <= halui.mode.is-auto\n"
"net remote-program-run halui.program.run <= and2.0.out\n"
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:49
msgid ""
"Notice on line one that there are two reader pins, this can also be split up "
"to two lines like this:"
msgstr ""

#. type: delimited block -
#: src/hal/halui-examples.adoc:54
#, no-wrap
msgid ""
"net program-start-btn halui.mode.auto <= <your input pin>\n"
"net program-start-btn and2.0.in0\n"
msgstr ""

#. type: Title ==
#: src/hal/halui-examples.adoc:56
#, no-wrap
msgid "Pause & Resume"
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:62
msgid ""
"This example was developed to allow LinuxCNC to move a rotary axis on a "
"signal from an external machine.  The coordination between the two systems "
"will be provided by two Halui components:"
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:64
msgid "halui.program.is-paused"
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:65
msgid "halui.program.resume"
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:70
msgid ""
"In your customized hal file, add the following two lines that will be "
"connected to your I/O to turn on the program pause or to resume when the "
"external system wants LinuxCNC to continue."
msgstr ""

#. type: delimited block -
#: src/hal/halui-examples.adoc:75
#, no-wrap
msgid ""
"net ispaused halui.program.is paused => \"your output pin\"\n"
"net resume halui.program.resume <= \"your input pin\"\n"
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:80
msgid ""
"Your input and output pins are connected to the pins wired to the other "
"controller. They may be parallel port pins or any other I/O pins that you "
"have access to."
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:85
msgid ""
"This system works in the following way. When an M0 is encountered in your G-"
"code, the `halui.program.is-paused` signal goes true. This turns on your "
"output pin so that the external controller knows that LinuxCNC is paused."
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:89
msgid ""
"To resume the LinuxCNC G-code program, when the external controller is ready "
"it will make its output true. This will signal LinuxCNC that it should "
"resume executing G-code."
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:91
msgid "Difficulties in timing"
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:95
msgid ""
"The \"resume\" input return signal should not be longer than the time "
"required to get the G-code running again."
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:97
msgid ""
"The \"is-paused\" output should no longer be active by the time the \"resume"
"\" signal ends."
msgstr ""

#. type: Plain text
#: src/hal/halui-examples.adoc:102
msgid ""
"These timing problems could be avoided by using ClassicLadder to activate "
"the \"is-paused\" output via a monostable timer to deliver one narrow output "
"pulse.  The \"resume\" pulse could also be received via a monostable timer."
msgstr ""

#. type: Title =
#: src/hal/intro.adoc:5
#, no-wrap
msgid "HAL Introduction(((HAL Introduction)))"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:20
msgid ""
"HAL(((HAL))) stands for Hardware Abstraction Layer. At the highest level, it "
"is simply a way to allow a number of 'building blocks' to be loaded and "
"interconnected to assemble a complex system. The 'Hardware' part is because "
"HAL was originally designed to make it easier to configure LinuxCNC for a "
"wide variety of hardware devices. Many of the building blocks are drivers "
"for hardware devices. However, HAL can do more than just configure hardware "
"drivers."
msgstr ""

#. type: Title ==
#: src/hal/intro.adoc:22
#, no-wrap
msgid "HAL System Design(((HAL System Design)))"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:25
msgid "HAL is based on traditional system design techniques."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:29
msgid ""
"HAL is based on the same principles that are used to design hardware "
"circuits and systems, so it is useful to examine those principles first."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:36
msgid ""
"Any system, including a CNC(((CNC))) machine, consists of interconnected "
"components. For the CNC machine, those components might be the main "
"controller, servo amps or stepper drives, motors, encoders, limit switches, "
"pushbutton pendants, perhaps a VFD for the spindle drive, a PLC to run a "
"toolchanger, etc. The machine builder must select, mount and wire these "
"pieces together to make a complete system."
msgstr ""

#. type: Block title
#: src/hal/intro.adoc:37
#, no-wrap
msgid "HAL Concept - Connecting like electrical circuits."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/intro.adoc:38
#, no-wrap
msgid "HAL Circuit Concept"
msgstr ""

#. type: Target for macro image
#: src/hal/intro.adoc:38
#, no-wrap
msgid "images/hal_circuit_concept.png"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:41
msgid "Figure one would be written in HAL code like this:"
msgstr ""

#. type: delimited block -
#: src/hal/intro.adoc:46
#, no-wrap
msgid ""
"net signal-blue    component.0.pin1-in      component.1.pin1-out\n"
"net signal-red     component.0.pin3-out     component.1.pin3-in     component.1.pin4-in\n"
msgstr ""

#. type: Title ===
#: src/hal/intro.adoc:49
#, no-wrap
msgid "Part Selection(((HAL Part selection)))"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:62
msgid ""
"The machine builder does not need to worry about how each individual part "
"works. He treats them as black boxes. During the design stage, he decides "
"which parts he is going to use - steppers or servos, which brand of servo "
"amp, what kind of limit switches and how many, etc. The integrator's "
"decisions about which specific components to use is based on what that "
"component does and the specifications supplied by the manufacturer of the "
"device. The size of a motor and the load it must drive will affect the "
"choice of amplifier needed to run it. The choice of amplifier may affect the "
"kinds of feedback needed by the amp and the velocity or position signals "
"that must be sent to the amp from a control."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:67
msgid ""
"In the HAL world, the integrator must decide what HAL components are needed. "
"Usually every interface card will require a driver. Additional components "
"may be needed for software generation of step pulses, PLC functionality, and "
"a wide variety of other tasks."
msgstr ""

#. type: Title ===
#: src/hal/intro.adoc:69
#, no-wrap
msgid "Interconnection Design(((HAL: Interconnections Design)))"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:78
msgid ""
"The designer of a hardware system not only selects the parts, he also "
"decides how those parts will be interconnected. Each black box has "
"terminals, perhaps only two for a simple switch, or dozens for a servo drive "
"or PLC. They need to be wired together. The motors connect to the servo "
"amps, the limit switches connect to the controller, and so on. As the "
"machine builder works on the design, he creates a large wiring diagram that "
"shows how all the parts should be interconnected."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:81
msgid ""
"When using HAL, components are interconnected by signals. The designer must "
"decide which signals are needed, and what they should connect."
msgstr ""

#. type: Title ===
#: src/hal/intro.adoc:83
#, no-wrap
msgid "Implementation(((HAL: Implementation)))"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:90
msgid ""
"Once the wiring diagram is complete it is time to build the machine.  The "
"pieces need to be acquired and mounted, and then they are interconnected "
"according to the wiring diagram. In a physical system, each interconnection "
"is a piece of wire that needs to be cut and connected to the appropriate "
"terminals."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:96
msgid ""
"HAL provides a number of tools to help 'build' a HAL system. Some of the "
"tools allow you to 'connect' (or disconnect) a single 'wire'. Other tools "
"allow you to save a complete list of all the parts, wires, and other "
"information about the system, so that it can be 'rebuilt' with a single "
"command."
msgstr ""

#. type: Title ===
#: src/hal/intro.adoc:98
#, no-wrap
msgid "Testing(((HAL: Testing)))"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:107
msgid ""
"Very few machines work right the first time. While testing, the builder may "
"use a meter to see whether a limit switch is working or to measure the DC "
"voltage going to a servo motor. He may hook up an oscilloscope to check the "
"tuning of a drive, or to look for electrical noise. He may find a problem "
"that requires the wiring diagram to be changed; perhaps a part needs to be "
"connected differently or replaced with something completely different."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:112
msgid ""
"HAL provides the software equivalents of a voltmeter, oscilloscope, signal "
"generator, and other tools needed for testing and tuning a system. The same "
"commands used to build the system can be used to make changes as needed."
msgstr ""

#. type: Title ===
#: src/hal/intro.adoc:114
#, no-wrap
msgid "Summary(((HAL Basics Summary)))"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:121
msgid ""
"This document is aimed at people who already know how to do this kind of "
"hardware system integration, but who do not know how to connect the hardware "
"to LinuxCNC. See the <<sec:halui-remote-start,Remote Start Example>> section "
"in the HAL UI Examples documentation."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/intro.adoc:122 src/hal/intro.adoc:123
#, no-wrap
msgid "Remote Start Example (Schema)"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:129
msgid ""
"The traditional hardware design as described above ends at the edge of the "
"main control. Outside the control are a bunch of relatively simple boxes, "
"connected together to do whatever is needed. Inside, the control is a big "
"mystery -- one huge black box that we hope works."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:138
msgid ""
"HAL extends this traditional hardware design method to the inside of the big "
"black box. It makes device drivers and even some internal parts of the "
"controller into smaller black boxes that can be interconnected and even "
"replaced just like the external hardware. It allows the 'system wiring "
"diagram' to show part of the internal controller, rather than just a big "
"black box. And most importantly, it allows the integrator to test and modify "
"the controller using the same methods he would use on the rest of the "
"hardware."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:148
msgid ""
"Terms like motors, amps, and encoders are familiar to most machine "
"integrators. When we talk about using extra flexible eight conductor "
"shielded cable to connect an encoder to the servo input board in the "
"computer, the reader immediately understands what it is and is led to the "
"question, 'what kinds of connectors will I need to make up each end.' The "
"same sort of thinking is essential for the HAL but the specific train of "
"thought may take a bit to get on track. Using HAL words may seem a bit "
"strange at first, but the concept of working from one connection to the next "
"is the same."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:153
msgid ""
"This idea of extending the wiring diagram to the inside of the controller is "
"what HAL is all about. If you are comfortable with the idea of "
"interconnecting hardware black boxes, you will probably have little trouble "
"using HAL to interconnect software black boxes."
msgstr ""

#. type: Title ==
#: src/hal/intro.adoc:155
#, no-wrap
msgid "HAL Concepts(((HAL Concepts)))"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:161
msgid ""
"This section is a glossary that defines key HAL terms but it is a bit "
"different than a traditional glossary because these terms are not arranged "
"in alphabetical order. They are arranged by their relationship or flow in "
"the HAL way of things."
msgstr ""

#. type: Labeled list
#: src/hal/intro.adoc:162
#, no-wrap
msgid "Component"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:170
msgid ""
"(((HAL Component)))  When we talked about hardware design, we referred to "
"the individual pieces as 'parts', 'building blocks', 'black boxes', etc. The "
"HAL equivalent is a 'component' or 'HAL component'. (This document uses 'HAL "
"component' when there is likely to be confusion with other kinds of "
"components, but normally just uses 'component'.) A HAL component is a piece "
"of software with well-defined inputs, outputs, and behavior, that can be "
"installed and interconnected as needed."
msgstr ""

#. type: delimited block =
#: src/hal/intro.adoc:182
msgid ""
"Many HAL Components model the behaviour of a tangible part of a machine, and "
"a *pin* may indeed be meant to be connected to a *physical pin* on the "
"device to communicate with it, hence the names. But most often this is not "
"the case.  Imagine a retrofit of a manual lathe/mill. What LinuxCNC "
"implements is how the machine presents itself to the outside world, and it "
"is secondary if the implementation how to draw a circle is implemented on "
"the machine already or provided from LinuxCNC. And it is common to add "
"buttons to the imaginary retrofit that *signal* an action, like an emergency "
"stop. LinuxCNC and the machine become one.  And that is through the HAL."
msgstr ""

#. type: Table
#: src/hal/intro.adoc:184 src/motion/pid-theory.adoc:154
#: src/plasma/qtplasmac.adoc:3018
#, no-wrap
msgid "Parameter"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:195
msgid ""
"(((HAL Parameter)))  Many hardware components have adjustments that are not "
"connected to any other components but still need to be accessed. For "
"example, servo amps often have trim pots to allow for tuning adjustments, "
"and test points where a meter or scope can be attached to view the tuning "
"results. HAL components also can have such items, which are referred to as "
"'parameters'. There are two types of parameters: Input parameters are "
"equivalent to trim pots - they are values that can be adjusted by the user, "
"and remain fixed once they are set. Output parameters cannot be adjusted by "
"the user - they are equivalent to test points that allow internal signals to "
"be monitored."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:202
msgid ""
"(((HAL Pin)))  Hardware components have terminals which are used to "
"interconnect them. The HAL equivalent is a 'pin' or 'HAL pin'. ('HAL pin' is "
"used when needed to avoid confusion.) All HAL pins are named, and the pin "
"names are used when interconnecting them. HAL pins are software entities "
"that exist only inside the computer."
msgstr ""

#. type: Labeled list
#: src/hal/intro.adoc:203
#, no-wrap
msgid "Physical_Pin"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:209
msgid ""
"(((HAL Physical Pin)))  Many I/O devices have real physical pins or "
"terminals that connect to external hardware, for example the pins of a "
"parallel port connector. To avoid confusion, these are referred to as "
"'physical pins'. These are the things that 'stick out' into the real world."
msgstr ""

#. type: delimited block =
#: src/hal/intro.adoc:215
msgid ""
"You may be wondering what relationship there is between the HAL_pins, "
"Physical_pins and external elements like encoders or a STG card: we are "
"dealing here with interfaces of data translation/conversion type."
msgstr ""

#. type: Labeled list
#: src/hal/intro.adoc:217
#, no-wrap
msgid "Signal"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:224
msgid ""
"(((HAL Signal)))  In a physical machine, the terminals of real hardware "
"components are interconnected by wires. The HAL equivalent of a wire is a "
"'signal' or 'HAL signal'. HAL signals connect HAL pins together as required "
"by the machine builder. HAL signals can be disconnected and reconnected at "
"will (even while the machine is running)."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:231
msgid ""
"(((HAL Type)))  When using real hardware, you would not connect a 24 volt "
"relay output to the +/-10V analog input of a servo amp. HAL pins have the "
"same restrictions, which are based upon their type. Both pins and signals "
"have types, and signals can only be connected to pins of the same type. "
"Currently there are 4 types, as follows:"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:233
msgid "bit - a single TRUE/FALSE or ON/OFF value"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:235
msgid ""
"float - a 64 bit floating point value, with approximately 53 bits of "
"resolution and over 1000 bits of dynamic range."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:236
msgid "u32 - a 32 bit unsigned integer, legal values are 0 to 4,294,967,295"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:238
msgid ""
"s32 - a 32 bit signed integer, legal values are -2,147,483,647 to "
"+2,147,483,647"
msgstr ""

#. type: Table
#: src/hal/intro.adoc:239 src/plasma/qtplasmac.adoc:595
#: src/plasma/qtplasmac.adoc:3566
#, no-wrap
msgid "Function"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:255
msgid ""
"(((HAL:Function)))  Real hardware components tend to act immediately on "
"their inputs. For example, if the input voltage to a servo amp changes, the "
"output also changes automatically. However software components cannot act "
"'automatically'. Each component has specific code that must be executed to "
"do whatever that component is supposed to do. In some cases, that code "
"simply runs as part of the component. However in most cases, especially in "
"realtime components, the code must run in a specific sequence and at "
"specific intervals. For example, inputs should be read before calculations "
"are performed on the input data, and outputs should not be written until the "
"calculations are done. In these cases, the code is made available to the "
"system in the form of one or more 'functions'. Each function is a block of "
"code that performs a specific action. The system integrator can use "
"'threads' to schedule a series of functions to be executed in a particular "
"order and at specific time intervals."
msgstr ""

#. type: Labeled list
#: src/hal/intro.adoc:256
#, no-wrap
msgid "Thread"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:262
msgid ""
"(((HAL:Thread)))  A 'thread' is a list of functions that runs at specific "
"intervals as part of a realtime task. When a thread is first created, it has "
"a specific time interval (period), but no functions. Functions can be added "
"to the thread, and will be executed in order every time the thread runs."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:274
msgid ""
"As an example, suppose we have a parport component named hal_parport.  That "
"component defines one or more HAL pins for each physical pin. The pins are "
"described in that component's doc section: their names, how each pin relates "
"to the physical pin, are they inverted, can you change polarity, etc. But "
"that alone doesn't get the data from the HAL pins to the physical pins. It "
"takes code to do that, and that is where functions come into the picture. "
"The parport component needs at least two functions: one to read the physical "
"input pins and update the HAL pins, the other to take data from the HAL pins "
"and write it to the physical output pins. Both of these functions are part "
"of the parport driver."
msgstr ""

#. type: Title ==
#: src/hal/intro.adoc:276
#, no-wrap
msgid "HAL components(((HAL Components)))"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:282
msgid ""
"Each HAL component is a piece of software with well-defined inputs, outputs, "
"and behavior, that can be installed and interconnected as needed. The "
"section <<sec:hal-components,HAL Components List>> lists all available "
"components and a brief description of what each does."
msgstr ""

#. type: Title ==
#: src/hal/intro.adoc:284
#, no-wrap
msgid "Timing Issues In HAL(((HAL Timing Issues)))"
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:289
msgid ""
"Unlike the physical wiring models between black boxes that we have said that "
"HAL is based upon, simply connecting two pins with a hal-signal falls far "
"short of the action of the physical case."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:298
msgid ""
"True relay logic consists of relays connected together, and when a contact "
"opens or closes, current flows (or stops) immediately. Other coils may "
"change state, etc, and it all just 'happens'. But in PLC style ladder logic, "
"it doesn't work that way. Usually in a single pass through the ladder, each "
"rung is evaluated in the order in which it appears, and only once per pass. "
"A perfect example is a single rung ladder, with a NC contact in series with "
"a coil. The contact and coil belong to the same relay."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:302
msgid ""
"If this were a conventional relay, as soon as the coil is energized, the "
"contacts begin to open and de-energize it. That means the contacts close "
"again, etc, etc. The relay becomes a buzzer."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:310
msgid ""
"With a PLC, if the coil is OFF and the contact is closed when the PLC begins "
"to evaluate the rung, then when it finishes that pass, the coil is ON. The "
"fact that turning on the coil opens the contact feeding it is ignored until "
"the next pass. On the next pass, the PLC sees that the contact is open, and "
"de-energizes the coil. So the relay still switches rapidly between on and "
"off, but at a rate determined by how often the PLC evaluates the rung."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:317
msgid ""
"In HAL, the function is the code that evaluates the rung(s). In fact, the "
"HAL-aware realtime version of ClassicLadder exports a function to do exactly "
"that. Meanwhile, a thread is the thing that runs the function at specific "
"time intervals. Just like you can choose to have a PLC evaluate all its "
"rungs every 10 ms, or every second, you can define HAL threads with "
"different periods."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:322
msgid ""
"What distinguishes one thread from another is 'not' what the thread does - "
"that is determined by which functions are connected to it. The real "
"distinction is simply how often a thread runs."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:326
msgid ""
"In LinuxCNC you might have a 50&thinsp;µs thread and a 1&thinsp;ms thread.  "
"These would be created based on BASE_PERIOD and SERVO_PERIOD, the actual "
"times depend on the values in your INI file."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:330
msgid ""
"The next step is to decide what each thread needs to do. Some of those "
"decisions are the same in (nearly) any LinuxCNC system. For instance, motion-"
"command-handler is always added to servo-thread."
msgstr ""

#. type: Plain text
#: src/hal/intro.adoc:335
msgid ""
"Other connections would be made by the integrator. These might include "
"hooking the STG driver's encoder read and DAC write functions to the servo "
"thread, or hooking stepgen's function to the base-thread, along with the "
"parport function(s) to write the steps to the port."
msgstr ""

#. type: Title =
#: src/hal/parallel-port.adoc:5
#, no-wrap
msgid "Parallel Port Driver"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:18
msgid ""
"The hal_parport component is a driver for the traditional PC parallel port.  "
"The port has a total of 17 physical pins. The original parallel port divided "
"those pins into three groups: data, control, and status. The data group "
"consists of 8 output pins, the control group consists of 4 pins, and the "
"status group consists of 5 input pins."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:24
msgid ""
"In the early 1990's, the bidirectional parallel port was introduced, which "
"allows the data group to be used for output or input. The HAL driver "
"supports the bidirectional port, and allows the user to set the data group "
"as either input or output. If configured as 'out', a port provides a total "
"of 12 outputs and 5 inputs. If configured as 'in', it provides 4 outputs and "
"13 inputs."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:28
msgid ""
"In some parallel ports, the control group pins are open collectors, which "
"may also be driven low by an external gate. On a board with open collector "
"control pins. If configured as 'x', it provides 8 outputs, and 9 inputs."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:31 man/man1/hal_parport.1:123
msgid ""
"In some parallel ports, the control group has push-pull drivers and cannot "
"be used as an input."
msgstr ""

#. type: Block title
#: src/hal/parallel-port.adoc:32
#, no-wrap
msgid "HAL and Open Collectors"
msgstr ""

#. type: delimited block =
#: src/hal/parallel-port.adoc:40
msgid ""
"HAL cannot automatically determine if the 'x' mode bidirectional pins are "
"actually open collectors (OC). If they are not, they cannot be used as "
"inputs, and attempting to drive them LOW from an external source can damage "
"the hardware."
msgstr ""

#. type: delimited block =
#: src/hal/parallel-port.adoc:47
msgid ""
"To determine whether your port has 'open collector' pins, load hal_parport "
"in 'x' mode. With no device attached, HAL should read the pin as TRUE. Next, "
"insert a 470 ohm resistor from one of the control pins to GND. If the "
"resulting voltage on the control pin is close to 0V, and HAL now reads the "
"pin as FALSE, then you have an OC port. If the resulting voltage is far from "
"0V, or HAL does not read the pin as FALSE, then your port cannot be used in "
"'x' mode."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:50 man/man1/hal_parport.1:135
msgid ""
"The external hardware that drives the control pins should also use open "
"collector gates (e.g., 74LS05)."
msgstr ""

#. type: delimited block =
#: src/hal/parallel-port.adoc:53
msgid ""
"On some computers, BIOS settings may affect whether 'x' mode can be used. "
"'SPP' mode is most likely to work."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:57 man/man1/hal_parport.1:139
msgid ""
"No other combinations are supported, and a port cannot be changed from input "
"to output once the driver is installed."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:60
msgid ""
"The parport driver can control up to 8 ports (defined by MAX_PORTS in "
"hal_parport.c). The ports are numbered starting at zero."
msgstr ""

#. type: Title ==
#: src/hal/parallel-port.adoc:61
#, no-wrap
msgid "Loading"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:67
msgid ""
"The hal_parport driver is a real time component so it must be loaded into "
"the real time thread with 'loadrt'. The configuration string describes the "
"parallel ports to be used, and (optionally) their types.  If the "
"configuration string does not describe at least one port, it is an error."
msgstr ""

#. type: delimited block -
#: src/hal/parallel-port.adoc:71
#, no-wrap
msgid "loadrt hal_parport cfg=\"port [type] [port [type] ...]\"\n"
msgstr ""

#. type: Block title
#: src/hal/parallel-port.adoc:73
#, no-wrap
msgid "Specifying the Port"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:79
msgid ""
"Numbers below 16 refer to parallel ports detected by the system. This is the "
"simplest way to configure the `hal_parport` driver and cooperates with the "
"Linux parport_pc driver if it is loaded. A port of 0 is the first parallel "
"port detected on the system, 1 is the next and so on."
msgstr ""

#. type: Block title
#: src/hal/parallel-port.adoc:80
#, no-wrap
msgid "Basic configuration"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:83 man/man1/hal_parport.1:160
msgid "This will use the first parallel port Linux detects:"
msgstr ""

#. type: delimited block -
#: src/hal/parallel-port.adoc:87
#, no-wrap
msgid "loadrt hal_parport cfg=\"0\"\n"
msgstr ""

#. type: Block title
#: src/hal/parallel-port.adoc:89
#, no-wrap
msgid "Using the Port Address"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:93
msgid ""
"Instead, the port address may be specified using the hex notation with the "
"'0x' prefix."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:99
msgid ""
"The config string represents the hexadecimal address of the port, optionally "
"followed by a direction, all repeated for each port.  The directions are "
"_in_, _out_, or _x_, and determine the direction of the physical pins 2 to 9 "
"of the D-Sub 25 connector. If the direction is not specified, the data group "
"will by default be configured as outputs. For example:"
msgstr ""

#. type: delimited block -
#: src/hal/parallel-port.adoc:103
#, no-wrap
msgid "loadrt hal_parport cfg=\"0x278 0x378 in 0x20A0 out\"\n"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:114
msgid ""
"This example installs the drivers for a port 0x0278, with pins 2 to 9 as "
"outputs (by default, since neither _in_ nor _out_ is specified), a port "
"0x0378, with pins 2 to 9 as inputs and a 0x20A0 port, with pins 2 to 9 "
"explicitly specified as outputs. Note that you must know the base address of "
"the parallel ports to configure the drivers correctly. For ISA bus ports, "
"this is usually not a problem, since the ports are almost always at a well-"
"known address, such as 0x278 or 0x378 which are typically configured in the "
"BIOS. The addresses of PCI bus cards are usually found with `lspci -v` in an "
"_I/O ports_ line, or in a kernel message after running `sudo modprobe -a "
"parport_pc`.  There is no default address, so if `<config-string>` does not "
"contain at least one address, it is an error."
msgstr ""

#. type: Block title
#: src/hal/parallel-port.adoc:116
#, no-wrap
msgid "Parport block diagram(((Parport block diag)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/parallel-port.adoc:117
#, no-wrap
msgid "Parport block diagram"
msgstr ""

#. type: Target for macro image
#: src/hal/parallel-port.adoc:117
#, no-wrap
msgid "images/parport-block-diag.png"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:123
msgid ""
"For each parallel port handled by the hal_parport driver, a 'type' can "
"optionally be specified.  The type is one of 'in', 'out', 'epp', or 'x'."
msgstr ""

#. type: Block title
#: src/hal/parallel-port.adoc:124
#, no-wrap
msgid "Parallel Port Direction"
msgstr ""

#. type: Table
#: src/hal/parallel-port.adoc:127
#, no-wrap
msgid "out/epp"
msgstr ""

#. type: Table
#: src/hal/parallel-port.adoc:128
#, no-wrap
msgid "x"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:148
msgid "If the type is not specified, the default is 'out'."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:155
msgid ""
"A type of 'epp' is the same as 'out', but the hal_parport driver requests "
"that the port switch into EPP mode.  The hal_parport driver does *not* use "
"the EPP bus protocol, but on some systems EPP mode changes the electrical "
"characteristics of the port in a way that may make some marginal hardware "
"work better.  The Gecko G540's charge pump is known to require this on some "
"parallel ports."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:157
msgid "See the Note above about mode 'x'."
msgstr ""

#. type: Block title
#: src/hal/parallel-port.adoc:158
#, no-wrap
msgid "Example with two parallel ports"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:162 man/man1/hal_parport.1:184
msgid ""
"This will enable two system-detected parallel ports, the first in output "
"mode and the second in input mode:"
msgstr ""

#. type: delimited block -
#: src/hal/parallel-port.adoc:166
#, no-wrap
msgid "loadrt hal_parport cfg=\"0 out 1 in\"\n"
msgstr ""

#. type: Block title
#: src/hal/parallel-port.adoc:168
#, no-wrap
msgid "Parport R/W Functions"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:171
msgid "You must also direct LinuxCNC to run the 'read' and 'write' functions."
msgstr ""

#. type: delimited block -
#: src/hal/parallel-port.adoc:176
#, no-wrap
msgid ""
"addf parport.0.read base-thread\n"
"addf parport.0.write base-thread\n"
msgstr ""

#. type: Title ==
#: src/hal/parallel-port.adoc:178
#, no-wrap
msgid "PCI Port Address"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:182
msgid ""
"One good PCI parport card is made with the Netmos 9815 chipset.  It has good "
"+5V signals, and can come in a single or dual ports."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:185
msgid ""
"To find the I/O addresses for PCI cards open a terminal window and use the "
"list pci command:"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:191
msgid "Look for the entry with \"Netmos\" in it. Example of a 2-port card:"
msgstr ""

#. type: delimited block -
#: src/hal/parallel-port.adoc:203
#, no-wrap
msgid ""
"0000:01:0a.0 Communication controller: \\\n"
"      Netmos Technology PCI 9815 Multi-I/O Controller (rev 01)\n"
"Subsystem: LSI Logic / Symbios Logic 2POS (2 port parallel adapter)\n"
"Flags: medium devsel, IRQ 5\n"
"I/O ports at b800 [size=8]\n"
"I/O ports at bc00 [size=8]\n"
"I/O ports at c000 [size=8]\n"
"I/O ports at c400 [size=8]\n"
"I/O ports at c800 [size=8]\n"
"I/O ports at cc00 [size=16]\n"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:210
msgid ""
"From experimentation, I've found the first port (the on-card port) uses the "
"third address listed (c000), and the second port (the one that attaches with "
"a ribbon cable) uses the first address listed (b800). The following example "
"shows the onboard parallel port and a PCI parallel port using the default "
"out direction."
msgstr ""

#. type: delimited block -
#: src/hal/parallel-port.adoc:214
#, no-wrap
msgid "loadrt hal_parport cfg=\"0x378 0xc000\"\n"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:221
msgid ""
"Please note that your values will differ. The Netmos cards are Plug-N-Play, "
"and might change their settings depending on which slot you put them into, "
"so if you like to \\'get under the hood' and re-arrange things, be sure to "
"check these values before you start LinuxCNC."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:225
msgid "'parport.<p>.pin-<n>-out' (bit) Drives a physical output pin."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:226
msgid "'parport.<p>.pin-<n>-in' (bit) Tracks a physical input pin."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:227
msgid ""
"'parport.<p>.pin-<n>-in-not' (bit) Tracks a physical input pin, but inverted."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:230
msgid ""
"For each pin, '<p>' is the port number, and '<n>' is the physical pin number "
"in the 25 pin D-shell connector."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:233
msgid ""
"For each physical output pin, the driver creates a single HAL pin, for "
"example: 'parport.0.pin-14-out'."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:236
msgid ""
"For each physical input pin, the driver creates two HAL pins, for example: "
"'parport.0.pin-12-in' and 'parport.0.pin-12-in-not'."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:240
msgid ""
"The '-in' HAL pin is TRUE if the physical pin is high, and FALSE if the "
"physical pin is low. The '-in-not' HAL pin is inverted and is FALSE if the "
"physical pin is high."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:244
msgid "'parport.<p>.pin-<n>-out-invert' (bit) Inverts an output pin."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:246
msgid ""
"'parport.<p>.pin-<n>-out-reset' (bit) (only for 'out' pins) TRUE if this pin "
"should be reset when the '-reset' function is executed."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:249
msgid ""
"parport.<p>.reset-time' (U32) The time (in nanoseconds)  between a pin is "
"set by 'write' and reset by the 'reset' function if it is enabled."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:255
msgid ""
"The '-invert' parameter determines whether an output pin is active high or "
"active low. If '-invert' is FALSE, setting the HAL '-out' pin TRUE drives "
"the physical pin high, and FALSE drives it low. If '-invert' is TRUE, then "
"setting the HAL '-out' pin TRUE will drive the physical pin low."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:261
msgid ""
"'parport.<p>.read' (funct) Reads physical input pins of port '<portnum>' and "
"updates HAL '-in' and '-in-not' pins."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:263
msgid ""
"'parport.read-all' (funct) Reads physical input pins of all ports and "
"updates HAL '-in' and '-in-not' pins."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:265
msgid ""
"'parport.<p>.write' (funct) Reads HAL '-out' pins of port '<p>' and updates "
"that port's physical output pins."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:267
msgid ""
"'parport.write-all' (funct) Reads HAL '-out' pins of all ports and updates "
"all physical output pins."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:275
msgid ""
"'parport.<p>.reset' (funct) Waits until 'reset-time' has elapsed since the "
"associated 'write', then resets pins to values indicated by '-out-invert' "
"and '-out-invert' settings. 'reset' must be later in the same thread as "
"'write. 'If '-reset' is TRUE, then the 'reset' function will set the pin to "
"the value of '-out-invert'. This can be used in conjunction with stepgen's "
"'doublefreq' to produce one step per period. The <<sec:stepgen,stepgen "
"stepspace>> for that pin must be set to 0 to enable doublefreq."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:281
msgid ""
"The individual functions are provided for situations where one port needs to "
"be updated in a very fast thread, but other ports can be updated in a slower "
"thread to save CPU time. It is probably not a good idea to use both an '-"
"all' function and an individual function at the same time."
msgstr ""

#. type: Title ==
#: src/hal/parallel-port.adoc:282
#, no-wrap
msgid "Common problems"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:285
msgid "If loading the module reports"
msgstr ""

#. type: delimited block -
#: src/hal/parallel-port.adoc:289
#, no-wrap
msgid ""
"insmod: error inserting '/home/jepler/emc2/rtlib/hal_parport.ko':\n"
"-1 Device or resource busy\n"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:296
msgid ""
"then ensure that the standard kernel module 'parport_pc' is not loaded "
"footnote:[In the LinuxCNC packages for Ubuntu, the file /etc/modprobe.d/emc2 "
"generally prevents 'parport_pc' from being automatically loaded.] and that "
"no other device in the system has claimed the I/O ports."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:299
msgid ""
"If the module loads but does not appear to function, then the port address "
"is incorrect."
msgstr ""

#. type: Title ==
#: src/hal/parallel-port.adoc:300
#, no-wrap
msgid "Using DoubleStep"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:307
msgid ""
"To setup DoubleStep on the parallel port you must add the function parport.n."
"reset after parport.n.write and configure stepspace to 0 and the reset time "
"wanted. So that step can be asserted on every period in HAL and then toggled "
"off by parport after being asserted for time specified by parport.n.reset-"
"time."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:309 src/hal/rtcomps.adoc:42
#: src/plasma/qtplasmac.adoc:463
msgid "For example:"
msgstr ""

#. type: delimited block -
#: src/hal/parallel-port.adoc:323
#, no-wrap
msgid ""
"loadrt hal_parport cfg=\"0x378 out\"\n"
"setp parport.0.reset-time 5000\n"
"loadrt stepgen step_type=0,0,0\n"
"addf parport.0.read base-thread\n"
"addf stepgen.make-pulses base-thread\n"
"addf parport.0.write base-thread\n"
"addf parport.0.reset base-thread\n"
"addf stepgen.capture-position servo-thread\n"
"...\n"
"setp stepgen.0.steplen 1\n"
"setp stepgen.0.stepspace 0\n"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:327
msgid ""
"More information on DoubleStep can be found on the http://wiki.linuxcnc.org/"
"cgi-bin/wiki.pl?TweakingSoftwareStepGeneration[wiki]."
msgstr ""

#. type: Title ==
#: src/hal/parallel-port.adoc:329
#, no-wrap
msgid "probe_parport"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:335
msgid ""
"In today's PCs, parallel ports may require a plug and play (PNP) "
"configuration before they can be used. The kernel module _probe_parport_ "
"configures all PNP ports present. It must be loaded before _hal_parport_. On "
"machines without a PNP port, it can be loaded but will have no effect."
msgstr ""

#. type: Title ===
#: src/hal/parallel-port.adoc:336
#, no-wrap
msgid "Installing probe_parport"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:339
msgid "If, when `parport_pc` kernel module is loaded with command:"
msgstr ""

#. type: delimited block -
#: src/hal/parallel-port.adoc:342
#, no-wrap
msgid "sudo modprobe -a parport_pc; sudo rmmod parport_pc\n"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:345
msgid "Linux kernel outputs a message similar to:"
msgstr ""

#. type: delimited block -
#: src/hal/parallel-port.adoc:348
#, no-wrap
msgid "parport: PnPBIOS parport detected.\n"
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:351
msgid "Then use of this module will probably be necessary."
msgstr ""

#. type: Plain text
#: src/hal/parallel-port.adoc:353
msgid "Finally, HAL parport components should be loaded:"
msgstr ""

#. type: delimited block -
#: src/hal/parallel-port.adoc:358
#, no-wrap
msgid ""
"loadrt probe_parport\n"
"loadrt hal_parport ...\n"
msgstr ""

#. type: Title =
#: src/hal/rtcomps.adoc:5
#, no-wrap
msgid "HAL Component Descriptions"
msgstr ""

#. type: Title ==
#: src/hal/rtcomps.adoc:8
#, no-wrap
msgid "Stepgen(((stepgen)))"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:23
msgid ""
"This component provides software based generation of step pulses in response "
"to position or velocity commands. In position mode, it has a built in pre-"
"tuned position loop, so PID tuning is not required. In velocity mode, it "
"drives a motor at the commanded speed, while obeying velocity and "
"acceleration limits. It is a realtime component only, and depending on CPU "
"speed, etc, is capable of maximum step rates of 10 kHz to perhaps 50 kHz. "
"The step pulse generator block diagram shows three block diagrams, each is a "
"single step pulse generator. The first diagram is for step type '0', (step "
"and direction). The second is for step type '1' (up/down, or pseudo-PWM), "
"and the third is for step types 2 through 14 (various stepping patterns). "
"The first two diagrams show position mode control, and the third one shows "
"velocity mode. Control mode and step type are set independently, and any "
"combination can be selected."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:25
#, no-wrap
msgid "Step Pulse Generator Block Diagram position mode(((Stepgen Block Diagram)))"
msgstr ""

#. type: Target for macro image
#: src/hal/rtcomps.adoc:26
#, no-wrap
msgid "images/stepgen-block-diag.png"
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:28
#, no-wrap
msgid "Loading `stepgen` component"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:31
#, no-wrap
msgid "halcmd: loadrt stepgen step_type=<type-array> [ctrl_type=<ctrl_array>]\n"
msgstr ""

#. type: Labeled list
#: src/hal/rtcomps.adoc:33
#, no-wrap
msgid "<type-array>"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:36
msgid ""
"is a series of comma separated decimal integers. Each number causes a single "
"step pulse generator to be loaded, the value of the number determines the "
"stepping type."
msgstr ""

#. type: Labeled list
#: src/hal/rtcomps.adoc:36
#, no-wrap
msgid "<ctrl_array>"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:38
msgid ""
"is a comma separated series of 'p' or 'v' characters, to specify position or "
"velocity mode."
msgstr ""

#. type: Labeled list
#: src/hal/rtcomps.adoc:38
#, no-wrap
msgid "ctrl_type"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:40
msgid ""
"is optional, if omitted, all of the step generators will be position mode."
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:45
#, no-wrap
msgid "halcmd: loadrt stepgen step_type=0,0,2 ctrl_type=p,p,v\n"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:56
msgid ""
"Will install three step generators. The first two use step type '0' (step "
"and direction) and run in position mode. The last one uses step type "
"'2' (quadrature) and runs in velocity mode. The default value for '<config-"
"array>' is '0,0,0' which will install three type '0' (step/dir) generators. "
"The maximum number of step generators is 8 (as defined by MAX_CHAN in "
"stepgen.c).  Each generator is independent, but all are updated by the same "
"function(s) at the same time. In the following descriptions, '<chan>' is the "
"number of a specific generator. The first generator is number 0."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:57
#, no-wrap
msgid "Unloading `stepgen` component"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:60
#, no-wrap
msgid "halcmd: unloadrt stepgen\n"
msgstr ""

#. type: Title ===
#: src/hal/rtcomps.adoc:63
#, no-wrap
msgid "Pins(((HAL stepgen pins)))"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:66
msgid "On the step type and control type selected."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:69
msgid ""
"'(float) stepgen._<chan>_.position-cmd' - Desired motor position, in "
"position units (position mode only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:71
msgid ""
"'(float) stepgen._<chan>_.velocity-cmd' - Desired motor velocity, in "
"position units per second (velocity mode only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:73
msgid ""
"'(s32) stepgen._<chan>_.counts' - Feedback position in counts, updated by "
"'capture_position()'."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:75
msgid ""
"'(float) stepgen._<chan>_.position-fb' - Feedback position in position "
"units, updated by 'capture_position()'."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:77
msgid ""
"'(bit) stepgen._<chan>_.enable' - Enables output steps - when false, no "
"steps are generated."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:78
msgid "'(bit) stepgen._<chan>_.step' - Step pulse output (step type 0 only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:79
msgid "'(bit) stepgen._<chan>_.dir' - Direction output (step type 0 only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:80
msgid "'(bit) stepgen._<chan>_.up' - UP pseudo-PWM output (step type 1 only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:81
msgid ""
"'(bit) stepgen._<chan>_.down' - DOWN pseudo-PWM output (step type 1 only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:82
msgid ""
"'(bit) stepgen._<chan>_.phase-A' - Phase A output (step types 2-14 only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:83
msgid ""
"'(bit) stepgen._<chan>_.phase-B' - Phase B output (step types 2-14 only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:84
msgid ""
"'(bit) stepgen._<chan>_.phase-C' - Phase C output (step types 3-14 only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:85
msgid ""
"'(bit) stepgen._<chan>_.phase-D' - Phase D output (step types 5-14 only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:86
msgid ""
"'(bit) stepgen._<chan>_.phase-E' - Phase E output (step types 11-14 only)."
msgstr ""

#. type: Title ===
#: src/hal/rtcomps.adoc:88
#, no-wrap
msgid "Parameters(((HAL stepgen parameters)))"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:92
msgid ""
"'(float) stepgen.<chan>.position-scale' - Steps per position unit.  This "
"parameter is used for both output and feedback."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:94
msgid ""
"'(float) stepgen.<chan>.maxvel' - Maximum velocity, in position units per "
"second. If 0.0, has no effect."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:97
msgid ""
"'(float) stepgen.<chan>.maxaccel' - Maximum accel/decel rate, in positions "
"units per second squared.  If 0.0, has no effect."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:99
msgid ""
"'(float) stepgen.<chan>.frequency' - The current step rate, in steps per "
"second."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:102
msgid ""
"'(float) stepgen.<chan>.steplen' - Length of a step pulse (step type 0 and "
"1) or minimum time in a given state (step types 2-14), in nano-seconds."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:106
msgid ""
"'(float) stepgen.<chan>.stepspace' - Minimum spacing between two step pulses "
"(step types 0 and 1 only), in nano-seconds. Set to 0 to enable the stepgen "
"'doublefreq' function. To use 'doublefreq' the <<sub:parport-functions,"
"parport reset function>> must be enabled."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:109
msgid ""
"'(float) stepgen.<chan>.dirsetup' - Minimum time from a direction change to "
"the beginning of the next step pulse (step type 0 only), in nanoseconds."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:112
msgid ""
"'(float) stepgen.<chan>.dirhold' - Minimum time from the end of a step pulse "
"to a direction change (step type 0 only), in nanoseconds."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:115
msgid ""
"'(float) stepgen.<chan>.dirdelay' - Minimum time any step to a step in the "
"opposite direction (step types 1-14 only), in nano-seconds."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:117
msgid ""
"'(s32) stepgen.<chan>.rawcounts' - The raw feedback count, updated by "
"'make_pulses()'."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:127
msgid ""
"In position mode, the values of maxvel and maxaccel are used by the internal "
"position loop to avoid generating step pulse trains that the motor cannot "
"follow. When set to values that are appropriate for the motor, even a large "
"instantaneous change in commanded position will result in a smooth "
"trapezoidal move to the new location. The algorithm works by measuring both "
"position error and velocity error, and calculating an acceleration that "
"attempts to reduce both to zero at the same time. For more details, "
"including the contents of the 'control equation' box, consult the code."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:133
msgid ""
"In velocity mode, maxvel is a simple limit that is applied to the commanded "
"velocity, and maxaccel is used to ramp the actual frequency if the commanded "
"velocity changes abruptly. As in position mode, proper values for these "
"parameters ensure that the motor can follow the generated pulse train."
msgstr ""

#. type: Title ===
#: src/hal/rtcomps.adoc:135
#, no-wrap
msgid "Step Types(((HAL stepgen Step Types)))"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:138
msgid "Step generator supports 15 different _step sequences_:"
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:139
#, no-wrap
msgid "Step Type 0"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:157
msgid ""
"Step type 0 is the standard step and direction type. When configured for "
"step type 0, there are four extra parameters that determine the exact timing "
"of the step and direction signals. In the following figure the meaning of "
"these parameters is shown. The parameters are in nanoseconds, but will be "
"rounded up to an integer multiple of the thread period for the threaed that "
"calls 'make_pulses()'. For example, if 'make_pulses()' is called every 16 "
"µs, and steplen is 20000, then the step pulses will be 2 x 16 = 32 µs long. "
"The default value for all four of the parameters is 1ns, but the automatic "
"rounding takes effect the first time the code runs. Since one step requires "
"'steplen' ns high and 'stepspace' ns low, the maximum frequency is "
"1,000,000,000 divided by '(steplen+stepspace)'. If 'maxfreq' is set higher "
"than that limit, it will be lowered automatically. If maxfreq is zero, it "
"will remain zero, but the output frequency will still be limited."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:161
msgid ""
"When using the parallel port driver the step frequency can be doubled using "
"the <<sub:parport-functions,parport reset>> function together with stepgen's "
"'doublefreq' setting."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:163
#, no-wrap
msgid "Step and Direction Timing"
msgstr ""

#. type: Target for macro image
#: src/hal/rtcomps.adoc:164
#, no-wrap
msgid "images/stepgen-type0.png"
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:166
#, no-wrap
msgid "Step Type 1"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:175
msgid ""
"Step type 1 has two outputs, up and down. Pulses appear on one or the other, "
"depending on the direction of travel. Each pulse is 'steplen' ns long, and "
"the pulses are separated by at least 'stepspace' ns. The maximum frequency "
"is the same as for step type 0. If 'maxfreq' is set higher than the limit it "
"will be lowered. If 'maxfreq' is zero, it will remain zero but the output "
"frequency will still be limited."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:179
msgid ""
"Do not use the parport reset function with step types 2 - 14. Unexpected "
"results can happen."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:180
#, no-wrap
msgid "Step Type 2 - 14"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:188
msgid ""
"Step types 2 through 14 are state based, and have from two to five outputs. "
"On each step, a state counter is incremented or decremented.  The Two-and-"
"Three-Phase, Four-Phase, and Five-Phase show the output patterns as a "
"function of the state counter. The maximum frequency is 1,000,000,000 "
"divided by 'steplen', and as in the other modes, 'maxfreq' will be lowered "
"if it is above the limit."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:189
#, no-wrap
msgid "Two-and-Three-Phase Step Types(((Two and Three Phase)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/rtcomps.adoc:190
#, no-wrap
msgid "Step Types: Two-and-Three-Phase"
msgstr ""

#. type: Target for macro image
#: src/hal/rtcomps.adoc:190
#, no-wrap
msgid "images/stepgen-type2-4.png"
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:192
#, no-wrap
msgid "Four-Phase Step Types(((Four Phase)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/rtcomps.adoc:193
#, no-wrap
msgid "Step Types: Four-Phase"
msgstr ""

#. type: Target for macro image
#: src/hal/rtcomps.adoc:193
#, no-wrap
msgid "images/stepgen-type5-10.png"
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:195
#, no-wrap
msgid "Five-Phase Step Types(((Five Phase)))"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/rtcomps.adoc:196
#, no-wrap
msgid "Step Types: Five-Phase"
msgstr ""

#. type: Target for macro image
#: src/hal/rtcomps.adoc:196
#, no-wrap
msgid "images/stepgen-type11-14.png"
msgstr ""

#. type: Title ===
#: src/hal/rtcomps.adoc:199
#, no-wrap
msgid "Functions(((Hal stepgen Functions)))"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:204
msgid ""
"The component exports three functions. Each function acts on all of the step "
"pulse generators - running different generators in different threads is not "
"supported."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:207
msgid ""
"'(funct) stepgen.make-pulses' - High speed function to generate and count "
"pulses (no floating point)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:209
msgid ""
"'(funct) stepgen.update-freq' - Low speed function does position to velocity "
"conversion, scaling and limiting."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:211
msgid ""
"'(funct) stepgen.capture-position' - Low speed function for feedback, "
"updates latches and scales position."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:220
msgid ""
"The high speed function 'stepgen.make-pulses' should be run in a very fast "
"thread, from 10 to 50 µs depending on the capabilities of the computer. That "
"thread's period determines the maximum step frequency, since 'steplen', "
"'stepspace', 'dirsetup', 'dirhold', and 'dirdelay' are all rounded up to a "
"integer multiple of the thread periond in nanoseconds. The other two "
"functions can be called at a much lower rate."
msgstr ""

#. type: Title ==
#: src/hal/rtcomps.adoc:222
#, no-wrap
msgid "PWMgen(((PWMgen)))"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:229
msgid ""
"This component provides software based generation of PWM (Pulse Width "
"Modulation) and PDM (Pulse Density Modulation) waveforms. It is a realtime "
"component only, and depending on CPU speed, etc, is capable of PWM "
"frequencies from a few hundred Hertz at pretty good resolution, to perhaps "
"10 kHz with limited resolution."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:230
#, no-wrap
msgid "Loading PWMgen"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:233
#, no-wrap
msgid "loadrt pwmgen output_type=<config-array>\n"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:244
msgid ""
"The '<config-array>' is a series of comma separated decimal integers. Each "
"number causes a single PWM generator to be loaded, the value of the number "
"determines the output type. The following example will install three PWM "
"generators. There is no default value, if '<config-array>' is not specified, "
"no PWM generators will be installed. The maximum number of frequency "
"generators is 8 (as defined by MAX_CHAN in pwmgen.c). Each generator is "
"independent, but all are updated by the same function(s) at the same time. "
"In the following descriptions, '<chan>' is the number of a specific "
"generator. The first generator is number 0."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:245
#, no-wrap
msgid "Loading PWMgen Example"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:248
#, no-wrap
msgid "loadrt pwmgen output_type=0,1,2\n"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:259
msgid ""
"Will install three PWM generators. The first will use an output of type _0_ "
"(PWM only), the next one will use a type 1 output (PWM and direction)  and "
"the third will use a type 2 output (UP and DOWN). There is no default value, "
"if _<config-array>_ is not not specified, no PWM generator will be "
"installed. The maximum number of frequency generators is 8 (as defined by "
"MAX_CHAN in pwmgen.c). Each generator is independent, but all are updated by "
"the same function(s), at the same time. In the descriptions that follow, "
"_<chan>_ is the number of specific generators. The numbering of PWM "
"generators starts at 0."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:260
#, no-wrap
msgid "Unloading PWMgen"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:263
#, no-wrap
msgid "unloadrt pwmgen\n"
msgstr ""

#. type: Title ===
#: src/hal/rtcomps.adoc:265
#, no-wrap
msgid "Output Types"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:268
msgid "The PWM generator supports three different 'output types'."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:272
msgid ""
"'Output type 0' - PWM output pin only. Only positive commands are accepted, "
"negative values are treated as zero (and will be affected by the parameter "
"'min-dc' if it is non-zero)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:277
msgid ""
"'Output type 1' - PWM/PDM and direction pins. Positive and negative inputs "
"will be output as positive and negative PWM. The direction pin is false for "
"positive commands, and true for negative commands. If your control needs "
"positive PWM for both CW and CCW use the link:../man/man9/abs.9.html[abs] "
"component to convert your PWM signal to positive value when a negative input "
"is input."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:281
msgid ""
"'Output type 2' - UP and DOWN pins. For positive commands, the PWM signal "
"appears on the up output, and the down output remains false. For negative "
"commands, the PWM signal appears on the down output, and the up output "
"remains false. Output type 2 is suitable for driving most H-bridges."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:285
msgid "Each PWM generator will have the following pins:"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:288
msgid ""
"'(float) pwmgen.<chan>.value' - Command value, in arbitrary units.  Will be "
"scaled by the 'scale' parameter (see below)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:290
msgid ""
"'(bit) pwmgen.<chan>.enable' - Enables or disables the PWM generator outputs."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:293
msgid ""
"Each PWM generator will also have some of these pins, depending on the "
"output type selected:"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:296
msgid ""
"'(bit) pwmgen.<chan>.pwm' - PWM (or PDM) output, (output types 0 and 1 only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:297
msgid "'(bit) pwmgen.<chan>.dir' - Direction output (output type 1 only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:299
msgid ""
"'(bit) pwmgen.<chan>.up' - PWM/PDM output for positive input value (output "
"type 2 only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:301
msgid ""
"'(bit) pwmgen.<chan>.down' - PWM/PDM output for negative input value (output "
"type 2 only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:309
msgid ""
"'(float) pwmgen.<chan>.scale' - Scaling factor to convert 'value' from "
"arbitrary units to duty cycle. For example if scale is set to 4000 and the "
"input value passed to the pwmgen.<chan>.value is 4000 then it will be 100% "
"duty-cycle (always on). If the value is 2000 then it will be a 50% 25 Hz "
"square wave."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:314
msgid ""
"'(float) pwmgen.<chan>.pwm-freq' - Desired PWM frequency, in Hz.  If 0.0, "
"generates PDM instead of PWM. If set higher than internal limits, next call "
"of 'update_freq()' will set it to the internal limit. If non-zero, and "
"'dither' is false, next call of 'update_freq()' will set it to the nearest "
"integer multiple of the 'make_pulses()' function period."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:319
msgid ""
"'(bit) pwmgen.<chan>.dither-pwm' - If true, enables dithering to achieve "
"average PWM frequencies or duty cycles that are unobtainable with pure PWM. "
"If false, both the PWM frequency and the duty cycle will be rounded to "
"values that can be achieved exactly."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:322
msgid ""
"'(float) pwmgen.<chan>.min-dc' - Minimum duty cycle, between 0.0 and 1.0 "
"(duty cycle will go to zero when disabled, regardless of this setting)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:324
msgid ""
"'(float) pwmgen.<chan>.max-dc' - Maximum duty cycle, between 0.0 and 1.0."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:326
msgid ""
"'(float) pwmgen.<chan>.curr-dc' - Current duty cycle - after all limiting "
"and rounding (read only)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:332
msgid ""
"The component exports two functions. Each function acts on all of the PWM "
"generators - running different generators in different threads is not "
"supported."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:343
msgid ""
"'(funct) pwmgen.make-pulses' - High speed function to generate PWM waveforms "
"(no floating point). The high speed function 'pwmgen.make-pulses' should be "
"run in the base (fastest) thread, from 10 to 50 µs depending on the "
"capabilities of the computer. That thread's period determines the maximum "
"PWM carrier frequency, as well as the resolution of the PWM or PDM signals. "
"If the base thread is 50,000nS then every 50uS the module decides if it is "
"time to change the state of the output. At 50% duty cycle and 25 Hz PWM "
"frequency this means that the output changes state every (1 / 25) seconds / "
"50uS * 50% = 400 iterations. This also means that you have a 800 possible "
"duty cycle values (without dithering)"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:347
msgid ""
"'(funct) pwmgen.update' - Low speed function to scale and limit value and "
"handle other parameters. This is the function of the module that does the "
"more complicated mathematics to work out how many base-periods the output "
"should be high for, and how many it should be low for."
msgstr ""

#. type: Title ==
#: src/hal/rtcomps.adoc:349
#, no-wrap
msgid "Encoder(((encoder)))"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:355
msgid ""
"This component provides software based counting of signals from quadrature "
"(or single-pulse) encoders. It is a realtime component only, and depending "
"on CPU speed, latency, etc, is capable of maximum count rates of 10 kHz to "
"perhaps up to 50 kHz."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:362
msgid ""
"The base thread should be 1/2 count speed to allow for noise and timing "
"variation. For example if you have a 100 pulse per revolution encoder on the "
"spindle and your maximum RPM is 3000 the maximum base thread should be 25 "
"µs.  A 100 pulse per revolution encoder will have 400 counts. The spindle "
"speed of 3000 RPM = 50 RPS (revolutions per second). 400 * 50 = 20,000 "
"counts per second or 50 µs between counts."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:365
msgid ""
"The Encoder Counter Block Diagram is a block diagram of one channel of an "
"encoder counter."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:367
#, no-wrap
msgid "Encoder Counter Block Diagram(((Encoder Block Diagram)))"
msgstr ""

#. type: Target for macro image
#: src/hal/rtcomps.adoc:368
#, no-wrap
msgid "images/encoder-block-diag.png"
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:370
#, no-wrap
msgid "Loading Encoder"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:373
#, no-wrap
msgid "halcmd: loadrt encoder [num_chan=<counters>]\n"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:382
msgid ""
"'<counters>' is the number of encoder counters that you want to install. If "
"'numchan' is not specified, three counters will be installed. The maximum "
"number of counters is 8 (as defined by MAX_CHAN in encoder.c). Each counter "
"is independent, but all are updated by the same function(s) at the same "
"time. In the following descriptions, '<chan>' is the number of a specific "
"counter. The first counter is number 0."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:383
#, no-wrap
msgid "Unloading Encoder"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:386
#, no-wrap
msgid "halcmd: unloadrt encoder\n"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:396
msgid ""
"'encoder.<chan>.counter-mode' (bit, I/O) (default: FALSE) - Enables counter "
"mode. When true, the counter counts each rising edge of the phase-A input, "
"ignoring the value on phase-B. This is useful for counting the output of a "
"single channel (non-quadrature) sensor. When false, it counts in quadrature "
"mode."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:404
msgid ""
"'encoder.<chan>.missing-teeth' (s32, In) (default: 0) - Enables the use of "
"missing-tooth index. This allows a single IO pin to provide both position "
"and index information. If the encoder wheel has 58 teeth with two missing, "
"spaced as if there were 60(common for automotive crank sensors) then the "
"position-scale should be set to 60 and missing-teeth to 2. To use this mode "
"counter-mode should be set true. This mode will work for lathe threading but "
"not for rigid tapping."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:405
msgid "'encoder.<chan>.counts' (s32, Out) - Position in encoder counts."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:406
msgid "'encoder.<chan>.counts-latched' (s32, Out) - Not used at this time."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:415
#, no-wrap
msgid ""
"'encoder.<chan>.index-enable' (bit, I/O) - When True, 'counts' and 'position are' reset to zero on next rising edge of Phase Z.\n"
"At the same time, 'index-enable' is reset to zero to indicate that the rising edge has occurred. The 'index-enable' pin is bi-directional. If 'index-enable' is False, the Phase Z channel of the encoder will be ignored, and the counter will count normally. The encoder driver will never set 'index-enable' True. However, some other component may do so."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:417
msgid ""
"'encoder.<chan>.latch-falling' (bit, In) (default: TRUE) - Not used at this "
"time."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:419
msgid ""
"'encoder.<chan>.latch-input' (bit, In) (default: TRUE) - Not used at this "
"time."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:420
msgid "'encoder.<chan>.latch-rising' (bit, In) - Not used at this time."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:428
msgid ""
"'encoder.<chan>.min-speed-estimate' (float, in) - Determine the minimum true "
"velocity magnitude at which velocity will be estimated as nonzero and "
"position-interpolated will be interpolated. The units of 'min-speed-"
"estimate' are the same as the units of 'velocity' . Scale factor, in counts "
"per length unit. Setting this parameter too low will cause it to take a long "
"time for velocity to go to 0 after encoder pulses have stopped arriving."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:429
msgid ""
"'encoder.<chan>.phase-A' (bit, In) - Phase A of the quadrature encoder "
"signal."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:430
msgid ""
"'encoder.<chan>.phase-B' (bit, In) - Phase B of the quadrature encoder "
"signal."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:431
msgid ""
"'encoder.<chan>.phase-Z' (bit, In) - Phase Z (index pulse) of the quadrature "
"encoder signal."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:432
msgid ""
"'encoder.<chan>.position' (float, Out) - Position in scaled units (see "
"'position-scale')."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:443
#, no-wrap
msgid ""
"'encoder.<chan>.position-interpolated' (float, Out) - Position in scaled units, interpolated between encoder counts.\n"
"The 'position-interpolated' attempts to interpolate between encoder counts, based on the most recently measured velocity. Only valid when velocity is approximately constant and above 'min-speed-estimate'. Do not use for position control, since its value is incorrect at low speeds, during direction reversals, and during speed changes.\n"
"However, it allows a low ppr encoder (including a one pulse per revolution 'encoder') to be used for lathe threading, and may have other uses as well."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:444
msgid "'encoder.<chan>.position-latched (float, Out)' - Not used at this time."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:448
msgid ""
"'encoder.<chan>.position-scale (float, I/O)' - Scale factor, in counts per "
"length unit. For example, if position-scale is 500, then 1000 counts of the "
"encoder will be reported as a position of 2.0 units."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:452
msgid ""
"'encoder.<chan>.rawcounts (s32, In)' - The raw count, as determined by "
"update-counters. This value is updated more frequently than counts and "
"position. It is also unaffected by reset or the index pulse."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:454
msgid ""
"'encoder.<chan>.reset' (bit, In) - When True, force 'counts' and 'position' "
"to zero immediately."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:460
msgid ""
"'encoder.<chan>.velocity' (float, Out) - Velocity in scaled units per "
"second. 'encoder' uses an algorithm that greatly reduces quantization noise "
"as compared to simply differentiating the 'position' output. When the "
"magnitude of the true velocity is below min-speed-estimate, the velocity "
"output is 0."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:465
msgid ""
"'encoder.<chan>.x4-mode (bit, I/O) (default: TRUE)' - Enables times-4 mode. "
"When true, the counter counts each edge of the quadrature waveform (four "
"counts per full cycle). When false, it only counts once per full cycle. In "
"counter-mode, this parameter is ignored. The 1x mode is useful for some "
"jogwheels."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:469
msgid "'encoder.<chan>.capture-position.time (s32, RO)'"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:470
msgid "'encoder.<chan>.capture-position.tmax (s32, RW)'"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:471
msgid "'encoder.<chan>.update-counters.time (s32, RO)'"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:472
msgid "'encoder.<chan>.update-counter.tmax (s32, RW)'"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:478
msgid ""
"The component exports two functions. Each function acts on all of the "
"encoder counters - running different counters in different threads is not "
"supported."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:481
msgid ""
"'(funct) encoder.update-counters' - High speed function to count pulses (no "
"floating point)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:483
msgid ""
"'(funct) encoder.capture-position' - Low speed function to update latches "
"and scale position."
msgstr ""

#. type: Title ==
#: src/hal/rtcomps.adoc:485
#, no-wrap
msgid "PID(((PID)))"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:493
msgid ""
"This component provides Proportional/Integral/Derivative control loops. It "
"is a realtime component only. For simplicity, this discussion assumes that "
"we are talking about position loops, however this component can be used to "
"implement other feedback loops such as speed, torch height, temperature, "
"etc. The PID Loop Block Diagram is a block diagram of a single PID loop."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:495
#, no-wrap
msgid "PID Loop Block Diagram(((PID Block Diagram)))"
msgstr ""

#. type: Target for macro image
#: src/hal/rtcomps.adoc:496
#, no-wrap
msgid "images/pid-block-diag.png"
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:498
#, no-wrap
msgid "Loading PID"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:501
#, no-wrap
msgid "halcmd: loadrt pid [num_chan=<loops>] [debug=1]\n"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:509
msgid ""
"'<loops>' is the number of PID loops that you want to install. If 'numchan' "
"is not specified, one loop will be installed. The maximum number of loops is "
"16 (as defined by MAX_CHAN in pid.c). Each loop is completely independent. "
"In the following descriptions, '<loopnum>' is the loop number of a specific "
"loop. The first loop is number 0."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:515
msgid ""
"If 'debug=1' is specified, the component will export a few extra pins that "
"may be useful during debugging and tuning. By default, the extra pins are "
"not exported, to save shared memory space and avoid cluttering the pin list."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:516
#, no-wrap
msgid "Unloading PID"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:519
#, no-wrap
msgid "halcmd: unloadrt pid\n"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:524
msgid "The three most important pins are"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:527
msgid ""
"'(float) pid.<loopnum>.command' - The desired position, as commanded by "
"another system component."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:529
msgid ""
"'(float) pid.<loopnum>.feedback' - The present position, as measured by a "
"feedback device such as an encoder."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:531
msgid ""
"'(float) pid.<loopnum>.output' - A velocity command that attempts to move "
"from the present position to the desired position."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:541
msgid ""
"For a position loop, 'command' and 'feedback' are in position units.  For a "
"linear axis, this could be inches, mm, meters, or whatever is relevant. "
"Likewise, for an angular axis, it could be degrees, radians, etc. The units "
"of the 'output' pin represent the change needed to make the feedback match "
"the command. As such, for a position loop 'Output' is a velocity, in inches/"
"sec, mm/sec, degrees/sec, etc. Time units are always seconds, and the "
"velocity units match the position units. If command and feedback are in "
"meters, then output is in meters per second."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:544
msgid ""
"Each loop has two pins which are used to monitor or control the general "
"operation of the component."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:546
msgid "'(float) pid._<loopnum>_.error' - Equals '.command' minus '.feedback'."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:549
msgid ""
"'(bit) pid._<loopnum>_.enable' - A bit that enables the loop. If '.enable' "
"is false, all integrators are reset, and the output is forced to zero. If '."
"enable' is true, the loop operates normally."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:552
msgid ""
"Pins used to report saturation. Saturation occurs when the output of the PID "
"block is at its maximum or minimum limit."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:554
msgid "'(bit) pid._<loopnum>_.saturated' - True when output is saturated."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:555
msgid ""
"'(float) pid._<loopnum>_.saturated_s' - The time the output has been "
"saturated."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:556
msgid ""
"'(s32) pid._<loopnum>_.saturated_count' - The time the output has been "
"saturated."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:560
msgid ""
"The PID gains, limits, and other 'tunable' features of the loop are "
"available as pins so that they can be adjusted dynamically for more advanced "
"tuning possibilities."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:562
msgid "'(float) pid._<loopnum>_.Pgain' - Proportional gain"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:563
msgid "'(float) pid._<loopnum>_.Igain' - Integral gain"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:564
msgid "'(float) pid._<loopnum>_.Dgain' - Derivative gain"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:565
msgid "'(float) pid._<loopnum>_.bias' - Constant offset on output"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:567
msgid ""
"'(float) pid._<loopnum>_.FF0' - Zeroth order feedforward - output "
"proportional to command (position)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:569
msgid ""
"'(float) pid._<loopnum>_.FF1' - First order feedforward - output "
"proportional to derivative of command (velocity)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:572
msgid ""
"'(float) pid._<loopnum>_.FF2' - Second order feedforward - output "
"proportional to 2^nd^ derivative of command (acceleration)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:573
msgid ""
"'(float) pid._<loopnum>_.deadband' - Amount of error that will be ignored"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:574
msgid "'(float) pid._<loopnum>_.maxerror' - Limit on error"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:575
msgid "'(float) pid._<loopnum>_.maxerrorI' - Limit on error integrator"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:576
msgid "'(float) pid._<loopnum>_.maxerrorD' - Limit on error derivative"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:577
msgid "'(float) pid._<loopnum>_.maxcmdD' - Limit on command derivative"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:578
msgid "'(float) pid._<loopnum>_.maxcmdDD' - Limit on command 2^nd^ derivative"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:579
msgid "'(float) pid._<loopnum>_.maxoutput' - Limit on output value"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:582
msgid ""
"All _max*_ limits are implemented so that if the value of this parameter is "
"zero, there is no limit."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:585
msgid ""
"If 'debug=1' was specified when the component was installed, four additional "
"pins will be exported:"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:587
msgid "'(float) pid._<loopnum>_.errorI' - Integral of error."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:588
msgid "'(float) pid._<loopnum>_.errorD' - Derivative of error."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:589
msgid "'(float) pid._<loopnum>_.commandD' - Derivative of the command."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:590
msgid "'(float) pid._<loopnum>_.commandDD' - 2^nd^ derivative of the command."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:597
msgid ""
"The component exports one function for each PID loop. This function performs "
"all the calculations needed for the loop. Since each loop has its own "
"function, individual loops can be included in different threads and execute "
"at different rates."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:600
msgid ""
"'(funct) pid._<loopnum>_.do_pid_calcs' - Performs all calculations for a "
"single PID loop."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:606
msgid ""
"If you want to understand the exact algorithm used to compute the output of "
"the PID loop, refer to figure <<fig:pid-block-diag,PID Loop Block Diagram>>, "
"the comments at the beginning of 'emc2/src/hal/components/pid.c' , and of "
"course to the code itself. The loop calculations are in the C function "
"'calc_pid()'."
msgstr ""

#. type: Title ==
#: src/hal/rtcomps.adoc:608
#, no-wrap
msgid "Simulated Encoder(((Simulated Encoder)))"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:613
msgid ""
"The simulated encoder is exactly that. It produces quadrature pulses with an "
"index pulse, at a speed controlled by a HAL pin. Mostly useful for testing."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:614
#, no-wrap
msgid "Loading sim-encoder"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:617
#, no-wrap
msgid "halcmd: loadrt sim-encoder num_chan=<number>\n"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:622
msgid ""
"'<number>' is the number of encoders that you want to simulate. If not "
"specified, one encoder will be installed. The maximum number is 8 (as "
"defined by MAX_CHAN in sim_encoder.c)."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:623
#, no-wrap
msgid "Unloading sim-encoder"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:626
#, no-wrap
msgid "halcmd: unloadrt sim-encoder\n"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:632
msgid ""
"'(float) sim-encoder._<chan-num>_.speed' - The speed command for the "
"simulated shaft."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:633
msgid "'(bit) sim-encoder._<chan-num>_.phase-A' - Quadrature output."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:634
msgid "'(bit) sim-encoder._<chan-num>_.phase-B' - Quadrature output."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:635
msgid "'(bit) sim-encoder._<chan-num>_.phase-Z' - Index pulse output."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:637
msgid "When '.speed' is positive, '.phase-A' leads '.phase-B'."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:641
msgid "'(u32) sim-encoder._<chan-num>_.ppr' - Pulses Per Revolution."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:645
msgid ""
"'(float) sim-encoder._<chan-num>_.scale' - Scale Factor for 'speed'.  The "
"default is 1.0, which means that 'speed' is in revolutions per second. "
"Change to 60 for RPM, to 360 for degrees per second, 6.283185 for radians "
"per seconed, etc."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:649
msgid ""
"Note that pulses per revolution is not the same as counts per revolution. A "
"pulse is a complete quadrature cycle. Most encoder counters will count four "
"times during one complete cycle."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:654
msgid ""
"The component exports two functions. Each function affects all simulated "
"encoders."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:657
msgid ""
"'(funct) sim-encoder.make-pulses' - High speed function to generate "
"quadrature pulses (no floating point)."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:659
msgid ""
"'(funct) sim-encoder.update-speed' - Low speed function to read 'speed', do "
"scaling, and set up 'make-pulses'."
msgstr ""

#. type: Title ==
#: src/hal/rtcomps.adoc:661
#, no-wrap
msgid "Debounce(((debounce)))"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:666
msgid ""
"Debounce is a realtime component that can filter the glitches created by "
"mechanical switch contacts. It may also be useful in other applications "
"where short pulses are to be rejected."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:667
#, no-wrap
msgid "Loading debounce"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:670
#, no-wrap
msgid "halcmd: loadrt debounce cfg=<config-string>\n"
msgstr ""

#. type: Labeled list
#: src/hal/rtcomps.adoc:672
#, no-wrap
msgid "<config-string>"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:676
msgid ""
"Is a series of comma separated decimal integers.  Each number installs a "
"group of identical debounce filters, the number determines how many filters "
"are in the group."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:677
#, no-wrap
msgid "Loading debounce Example"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:680
#, no-wrap
msgid "halcmd: loadrt debounce cfg=1,4,2\n"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:694
msgid ""
"will install three groups of filters. Group 0 contains one filter, group 1 "
"contains four, and group 2 contains two filters. The default value for "
"'<config-string>' is '\"1\"' which will install a single group containing a "
"single filter. The maximum number of groups 8 (as defined by MAX_GROUPS in "
"debounce.c).  The maximum number of filters in a group is limited only by "
"shared memory space. Each group is completely independent. All filters in a "
"single group are identical, and they are all updated by the same function at "
"the same time. In the following descriptions, '<G>' is the group number and "
"'<F>' is the filter number within the group. The first filter is group 0, "
"filter 0."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:695
#, no-wrap
msgid "Unloading debounce"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:698
#, no-wrap
msgid "halcmd: unloadrt debounce\n"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:703
msgid "Each individual filter has two pins."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:705
msgid "'(bit) debounce._<G>_._<F>_.in' - Input of filter _<F>_ in group _<G>_."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:706
msgid ""
"'(bit) debounce._<G>_._<F>_.out' - Output of filter _<F>_ in group _<G>_."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:714
msgid ""
"Each group of filters has one parameterfootnote:[Each individual filter also "
"has an internal state variable. There is a compile time switch that can "
"export that variable as a parameter. This is intended for testing, and "
"simply wastes shared memory under normal circumstances.]."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:716
msgid ""
"'(s32) debounce._<G>_.delay' - Filter delay for all filters in group _<G>_."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:722
msgid ""
"The filter delay is in units of thread periods. The minimum delay is zero. "
"The output of a zero delay filter exactly follows its input - it doesn't "
"filter anything. As 'delay' increases, longer and longer glitches are "
"rejected. If 'delay' is 4, all glitches less than or equal to four thread "
"periods will be rejected."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:728
msgid ""
"Each group of filters has one function, which updates all the filters in "
"that group 'simultaneously'. Different groups of filters can be updated from "
"different threads at different periods."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:730
msgid "'(funct) debounce._<G>_' - Updates all filters in group _<G>_."
msgstr ""

#. type: Title ==
#: src/hal/rtcomps.adoc:732
#, no-wrap
msgid "Siggen(((Siggen)))"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:736
msgid ""
"Siggen is a realtime component that generates square, triangle, and sine "
"waves. It is primarily used for testing."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:737 src/hal/tutorial.adoc:114
#, no-wrap
msgid "Loading siggen"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:740
#, no-wrap
msgid "halcmd: loadrt siggen [num_chan=<chans>]\n"
msgstr ""

#. type: Labeled list
#: src/hal/rtcomps.adoc:742
#, no-wrap
msgid "<chans>"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:747
msgid ""
"is the number of signal generators that you want to install.  If 'numchan' "
"is not specified, one signal generator will be installed.  The maximum "
"number of generators is 16 (as defined by MAX_CHAN in siggen.c). Each "
"generator is completely independent. In the following descriptions is"
msgstr ""

#. type: Labeled list
#: src/hal/rtcomps.adoc:747
#, no-wrap
msgid "<chan>"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:749
msgid "the number of a specific signal generator (the numbers start at 0)."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:750
#, no-wrap
msgid "Unloading siggen"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:753
#, no-wrap
msgid "halcmd: unloadrt siggen\n"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:758
msgid "Each generator has five output pins."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:760
msgid "'(float) siggen._<chan>_.sine' - Sine wave output."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:761
msgid "'(float) siggen._<chan>_.cosine' - Cosine output."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:762
msgid "'(float) siggen._<chan>_.sawtooth' - Sawtooth output."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:763
msgid "'(float) siggen._<chan>_.triangle' - Triangle wave output."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:764
msgid "'(float) siggen._<chan>_.square' - Square wave output."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:766
msgid "All five outputs have the same frequency, amplitude, and offset."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:768
msgid "In addition to the output pins, there are three control pins:"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:771
msgid ""
"'(float) siggen._:<chan>_.frequency' - Sets the frequency in Hertz, default "
"value is 1 Hz."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:773
msgid ""
"'(float) siggen._<chan>_.amplitude' - Sets the peak amplitude of the output "
"waveforms, default is 1."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:775
msgid ""
"'(float) siggen._<chan>_.offset' - Sets DC offset of the output waveforms, "
"default is 0."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:780
msgid ""
"For example, if 'siggen.0.amplitude' is 1.0 and 'siggen.0.offset' is 0.0, "
"the outputs will swing from -1.0 to +1.0. If 'siggen.0.amplitude' is 2.5 and "
"'siggen.0.offset' is 10.0, then the outputs will swing from 7.5 to 12.5."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:786
msgid ""
"None. footnote:[Prior to version 2.1, frequency, amplitude, and offset were "
"parameters. They were changed to pins to allow control by other components.]"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:790
msgid ""
"'(funct) siggen._<chan>_.update' - Calculates new values for all five "
"outputs."
msgstr ""

#. type: Title ==
#: src/hal/rtcomps.adoc:792
#, no-wrap
msgid "lut5(((lut5)))"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:795
msgid ""
"The lut5 component is a 5 input logic component based on a look up table."
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:797
msgid "'lut5' does not require a floating point thread."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:798
#, no-wrap
msgid "Loading lut5"
msgstr ""

#. type: delimited block -
#: src/hal/rtcomps.adoc:803
#, no-wrap
msgid ""
"loadrt lut5 [count=N|names=name1[,name2...]]\n"
"addf lut5.N servo-thread | base-thread\n"
"setp lut5.N.function 0xN\n"
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:805
#, no-wrap
msgid "Lut5 Computing Function"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:812
msgid ""
"To compute the hexadecimal number for the function starting from the top put "
"a 1 or 0 to indicate if that row would be true or false. Next write down "
"every number in the output column starting from the top and writing them "
"from right to left. This will be the binary number. Using a calculator with "
"a program view like the one in Ubuntu enter the binary number and then "
"convert it to hexadecimal and that will be the value for function."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:813
#, no-wrap
msgid "Lut5 Look Up Table"
msgstr ""

#. type: Table
#: src/hal/rtcomps.adoc:816 src/hal/rtcomps.adoc:858
#, no-wrap
msgid "Bit 4"
msgstr ""

#. type: Table
#: src/hal/rtcomps.adoc:816 src/hal/rtcomps.adoc:858
#, no-wrap
msgid "Bit 3"
msgstr ""

#. type: Table
#: src/hal/rtcomps.adoc:816 src/hal/rtcomps.adoc:858
#, no-wrap
msgid "Bit 2"
msgstr ""

#. type: Table
#: src/hal/rtcomps.adoc:816 src/hal/rtcomps.adoc:858
#, no-wrap
msgid "Bit 1"
msgstr ""

#. type: Table
#: src/hal/rtcomps.adoc:816 src/hal/rtcomps.adoc:858
#, no-wrap
msgid "Bit 0"
msgstr ""

#. type: Table
#: src/hal/rtcomps.adoc:817 src/hal/rtcomps.adoc:859
#, no-wrap
msgid "Output"
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:851
#, no-wrap
msgid "Lut5 Two Inputs Example"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:854
msgid ""
"In the following table we have selected the output state for each line that "
"we wish to be true."
msgstr ""

#. type: Block title
#: src/hal/rtcomps.adoc:855
#, no-wrap
msgid "Lut5 Two Inputs Example Look Up Table"
msgstr ""

#. type: Plain text
#: src/hal/rtcomps.adoc:870
msgid ""
"Looking at the output column of our example we want the output to be on when "
"Bit 0 or Bit 0 and Bit1 is on and nothing else. The binary number is "
"'b1010' (rotate the output 90 degrees CW). Enter this number into the "
"calculator then change the display to hexadecimal and the number needed for "
"function is '0xa'. The hexadecimal prefix is '0x'."
msgstr ""

#. type: Title =
#: src/hal/tools.adoc:5
#, no-wrap
msgid "HAL Tools(((HAL Tools)))"
msgstr ""

#. type: Title ==
#: src/hal/tools.adoc:14
#, no-wrap
msgid "Halcmd"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:19
msgid ""
"Halcmd is a command line tool for manipulating the HAL.  There is a rather "
"complete man page for link:../man/man1/halcmd.1.html[halcmd], which will be "
"installed if you have installed LinuxCNC from either source or a package.  "
"The manpage provides usage info:"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:22
#, no-wrap
msgid "man halcmd\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:26
msgid ""
"If you have compiled LinuxCNC for \"run-in-place\", you must source the rip-"
"environment script to make the man page available:"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:31
#, no-wrap
msgid ""
"cd toplevel_directory_for_rip_build\n"
". scripts/rip-environment\n"
"man halcmd\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:35
msgid ""
"The <<cha:hal-tutorial,HAL Tutorial>> has a number of examples of halcmd "
"usage, and is a good tutorial for `halcmd`."
msgstr ""

#. type: Title ==
#: src/hal/tools.adoc:37
#, no-wrap
msgid "Halmeter(((Halmeter)))"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:56
msgid ""
"Halmeter is a 'voltmeter' for the HAL.  It lets you look at a pin, signal, "
"or parameter, and displays the current value of that item.  It is pretty "
"simple to use.  Start it by typing `halmeter` in an X windows shell.  "
"Halmeter is a GUI application.  It will pop up a small window, with two "
"buttons labeled \"Select\" and \"Exit\".  Exit is easy - it shuts down the "
"program.  Select pops up a larger window, with three tabs. One tab lists all "
"the pins currently defined in the HAL.  The next lists all the signals, and "
"the last tab lists all the parameters.  Click on a tab, then click on a pin/"
"signal/parameter.  Then click on \"OK\".  The lists will disappear, and the "
"small window will display the name and value of the selected item.  The "
"display is updated approximately 10 times per second.  If you click \"Accept"
"\" instead of \"OK\", the small window will display the name and value of "
"the selected item, but the large window will remain on the screen.  This is "
"convenient if you want to look at a number of different items quickly."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:69
msgid ""
"You can have many halmeters running at the same time, if you want to monitor "
"several items. If you want to launch a halmeter without tying up a shell "
"window, type `halmeter &` to run it in the background.  You can also make "
"halmeter start displaying a specific item immediately, by adding \"`pin`|"
"`sig`|`par`[`am`] _<name>_\" to the command line.  It will display the pin, "
"signal, or parameter _<name>_ as soon as it starts - if there is no such "
"item, it will simply start normally.  And finally, if you specify an item to "
"display, you can add '-s' before the pin|sig|param to tell halmeter to use a "
"small window.  The item name will be displayed in the title bar instead of "
"under the value, and there will be no buttons.  This is useful when you want "
"a lot of meters in a small amount of screen space."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:71
msgid ""
"Refer to <<sec:tutorial-halmeter,Halmeter Tutorial>> section for more "
"information."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:81
msgid ""
"Halmeter can be loaded from a terminal or from AXIS.  Halmeter is faster "
"than Halshow at displaying values.  Halmeter has two windows, one to pick "
"the pin, signal, or parameter to monitor and one that displays the value.  "
"Multiple Halmeters can be open at the same time.  If you use a script to "
"open multiple Halmeters you can set the position of each one with the "
"argument `-g X Y` relative to the upper left corner of your screen.  For "
"example:"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:85
#, no-wrap
msgid "loadusr halmeter pin hm2.0.stepgen.00.velocity-fb -g 0 500\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:88
msgid ""
"See the man page for more options and the section <<sec:halmeter,Halmeter>>."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tools.adoc:89 src/hal/tools.adoc:90
#, no-wrap
msgid "Halmeter selection window"
msgstr ""

#. type: Target for macro image
#: src/hal/tools.adoc:90
#, no-wrap
msgid "images/hal-meter01.png"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tools.adoc:92 src/hal/tools.adoc:93
#, no-wrap
msgid "Halmeter watch window"
msgstr ""

#. type: Target for macro image
#: src/hal/tools.adoc:93
#, no-wrap
msgid "images/hal-meter02.png"
msgstr ""

#. type: Title ==
#: src/hal/tools.adoc:95
#, no-wrap
msgid "Halshow"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:105
msgid ""
"Halshow (<<cha:halshow,complete usage description>>)  can be started from "
"the command line to show details for selected components, pins, parameters, "
"signals, functions, and threads of a running HAL.  The WATCH tab provides a "
"continuous display of selected pin, parameters, and signal items.  The File "
"menu provides buttons to save the watch items to a watch list and to load an "
"existing watch list.  The watch list items can also be loaded automatically "
"on startup.  For command line usage:"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:114
#, no-wrap
msgid ""
"halshow --help\n"
"Usage:\n"
"  halshow [Options] [watchfile]\n"
"  Options:\n"
"           --help    (this help)\n"
"           --fformat format_string_for_float\n"
"           --iformat format_string_for_int\n"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:118
#, no-wrap
msgid ""
"Notes:\n"
"  Create watchfile in halshow using: 'File/Save Watch List'.\n"
"  LinuxCNC must be running for standalone usage.\n"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tools.adoc:120 src/hal/tools.adoc:121
#, no-wrap
msgid "Halshow Watch Tab"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:127
msgid ""
"A watchfile created using the 'File/Save Watch List' menu item is formatted "
"as a single line with tokens \"pin+\", \"param+\", \"sig=+\" followed by the "
"appropriate pin, param, or signal name.  The token-name pairs are separated "
"by a space character."
msgstr ""

#. type: Block title
#: src/hal/tools.adoc:128
#, no-wrap
msgid "Single Line Watchfile Example"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:131
#, no-wrap
msgid "pin+joint.0.pos-hard-limit pin+joint.1.pos-hard-limit sig+estop-loop\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:136
msgid ""
"A watchfile created using the 'File/Save Watch List (multiline)' menu item "
"is formatted with separate lines for each item identified with token-name "
"pairs as described above."
msgstr ""

#. type: Block title
#: src/hal/tools.adoc:137
#, no-wrap
msgid "Separated Lines Watchfile Example"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:142
#, no-wrap
msgid ""
"pin+joint.0.pos-hard-limit\n"
"pin+joint.1.pos-hard-limit\n"
"sig+estop-loop\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:147
msgid ""
"When loading a watchfile with the 'File/Load Watch List' menu item, the "
"token-name pairs may appear as single or multiple lines.  Blank lines and "
"lines beginning with a # character are ignored."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tools.adoc:149 src/hal/tutorial.adoc:910 src/hal/tutorial.adoc:911
#, no-wrap
msgid "Halscope"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:156
msgid ""
"Halscope is an 'oscilloscope' for the HAL. It lets you capture the value of "
"pins, signals, and parameters as a function of time.  Complete operating "
"instructions should be located here eventually.  For now, refer to section "
"<<sec:tutorial-halscope>> in the tutorial chapter, which explains the basics."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:160
msgid ""
"The halscope \"File\" menu selector provides buttons to save a configuration "
"or open a previously saved configuration.  When halscope is terminated, the "
"last configuration is saved in a file named autosave.halscope."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:163
msgid ""
"Configuration files may also be specified when starting halscope from the "
"commandline.  Commandline help (-h) usage:"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:168
#, no-wrap
msgid ""
"halscope -h\n"
"Usage:\n"
"  halscope [-h] [-i infile] [-o outfile] [num_samples]\n"
msgstr ""

#. type: Title ==
#: src/hal/tools.adoc:170
#, no-wrap
msgid "Sim Pin"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:174
msgid ""
"sim_pin is a command line utility to display and update any number of "
"writable pins, parameters or signals."
msgstr ""

#. type: Block title
#: src/hal/tools.adoc:175
#, no-wrap
msgid "`sim_pin` Usage"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:179
#, no-wrap
msgid ""
"  Usage:\n"
"         sim_pin [Options] name1 [name2 ...] &\n"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:183
#, no-wrap
msgid ""
"  Options:\n"
"         --help                (this text)\n"
"         --title title_string  (window title, default: sim_pin)\n"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:190
#, no-wrap
msgid ""
"  Note:  LinuxCNC (or a standalone HAL application) must be running\n"
"         A named item can specify a pin, param, or signal\n"
"         The item must be writable, e.g.:\n"
"            pin:    IN or I/O (and not connected to a signal with a writer)\n"
"            param:  RW\n"
"            signal: connected to a writable pin\n"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:192
#, no-wrap
msgid "         HAL item types bit, s32, u32, float are supported\n"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:204
#, no-wrap
msgid ""
"         When a bit item is specified, a pushbutton is created\n"
"         to manage the item in one of three manners specified\n"
"         by radio buttons:\n"
"             toggle: Toggle value when button pressed\n"
"             pulse:  Pulse item to 1 once when button pressed\n"
"             hold:   Set to 1 while button pressed\n"
"         The bit pushbutton mode can be specified on the command\n"
"         line by formatting the item name:\n"
"             namei/mode=[toggle | pulse | hold]\n"
"         If the mode begins with an uppercase letter, the radio\n"
"         buttons for selecting other modes are not shown\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:207
msgid "For complete information, see the man page:"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:210
#, no-wrap
msgid "man sim_pin\n"
msgstr ""

#. type: Block title
#: src/hal/tools.adoc:212
#, no-wrap
msgid "`sim_pin` Example (with LinuxCNC running)"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:216
#, no-wrap
msgid ""
"halcmd loadrt mux2 names=example; halcmd net sig_example example.in0\n"
"sim_pin example.sel example.in1 sig_example &\n"
msgstr ""

#. type: Block title
#: src/hal/tools.adoc:218
#, no-wrap
msgid "`sim_pin` Window"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tools.adoc:219
#, no-wrap
msgid "sim_pin Window"
msgstr ""

#. type: Target for macro image
#: src/hal/tools.adoc:219
#, no-wrap
msgid "images/sim_pin.png"
msgstr ""

#. type: Title ==
#: src/hal/tools.adoc:221
#, no-wrap
msgid "Simulate Probe"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:225
msgid ""
"`simulate_probe` is a simple GUI to simulate activation of the pin motion."
"probe-input.  Usage:"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:228
#, no-wrap
msgid "simulate_probe &\n"
msgstr ""

#. type: Block title
#: src/hal/tools.adoc:230
#, no-wrap
msgid "`simulate_probe` Window"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tools.adoc:231
#, no-wrap
msgid "simulate_probe Window"
msgstr ""

#. type: Target for macro image
#: src/hal/tools.adoc:231
#, no-wrap
msgid "images/simulate_probe.png"
msgstr ""

#. type: Title ==
#: src/hal/tools.adoc:233
#, no-wrap
msgid "HAL Histogram"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:236
msgid ""
"`hal-histogram` is a command line utility to display histograms for HAL pins."
msgstr ""

#. type: Block title
#: src/hal/tools.adoc:237
#, no-wrap
msgid "`hal-histogram` Usage"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:238 man/man1/xhc-hb04.1:50
#, no-wrap
msgid "Usage:"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:242
#, no-wrap
msgid ""
"   hal-histogram --help | -?\n"
"or\n"
"   hal-histogram [Options] [pinname]\n"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:247 src/plasma/qtplasmac.adoc:1523
#, no-wrap
msgid "Option"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:248
#, no-wrap
msgid "--minvalue"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:248
#, no-wrap
msgid "minvalue"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:249
#, no-wrap
msgid "minimum bin, default: 0"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:249
#, no-wrap
msgid "--binsize"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:249
#, no-wrap
msgid "binsize"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:250
#, no-wrap
msgid "binsize, default: 100"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:250
#, no-wrap
msgid "--nbins"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:250
#, no-wrap
msgid "nbins"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:251
#, no-wrap
msgid "number of bins, default: 50"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:252
#, no-wrap
msgid "--logscale"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:252
#, no-wrap
msgid "0/1"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:253 man/man1/latency-histogram.1:87
#, no-wrap
msgid "y axis log scale, default: 1"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:253
#, no-wrap
msgid "--text"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:253
#, no-wrap
msgid "note"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:254
#, no-wrap
msgid "text display, default: \"\""
msgstr ""

#. type: Table
#: src/hal/tools.adoc:254
#, no-wrap
msgid "--show"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:255
#, no-wrap
msgid "show count of undisplayed nbins, default off"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:255
#, no-wrap
msgid "--verbose"
msgstr ""

#. type: Table
#: src/hal/tools.adoc:256
#, no-wrap
msgid "progress and debug, default off"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:258 man/man9/corexy_by_hal.9:36
#, no-wrap
msgid "Notes:"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:260
msgid "LinuxCNC (or another HAL application) must be running."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:261
msgid "If no pinname is specified, default is: `motion-command-handler.time`."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:262
msgid "This app may be opened for 5 pins."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:263
msgid "Pintypes float, s32, u32, bit are supported."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:266
msgid ""
"The pin must be associated with a thread supporting floating point For a "
"base thread, this may require using `loadrt motmod ... base_thread_fp=1` ."
msgstr ""

#. type: Block title
#: src/hal/tools.adoc:267
#, no-wrap
msgid "`hal-histogram` Window"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tools.adoc:268
#, no-wrap
msgid "hal-histogram Window"
msgstr ""

#. type: Target for macro image
#: src/hal/tools.adoc:268
#, no-wrap
msgid "images/hal-histogram.png"
msgstr ""

#. type: Title ==
#: src/hal/tools.adoc:270
#, no-wrap
msgid "Halreport"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:276
msgid ""
"`halreport` is a command-line utility that generates a report about HAL "
"connections for a running LinuxCNC (or other HAL) application.  The report "
"shows all signal connections and flags potential problems.  Information "
"included:"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:278
msgid "System description and kernel version."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:279
msgid "Signals and all connected output, io, and input pins."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:280
msgid "Each pin's component_function, thread, and addf-order."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:281
msgid "Userspace component pins having non-ordered functions."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:282
msgid "Identification of unknown functions for unhandled components."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:283
#, no-wrap
msgid "Signals   with no output.\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:284
#, no-wrap
msgid "Signals   with no inputs.\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:285
#, no-wrap
msgid "Functions with no addf.\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:286
#, no-wrap
msgid "Warning tags for components marked as deprecated/obsolete in docs.\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:287
#, no-wrap
msgid "Real names for pins that use alias names.\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:290
msgid ""
"The report can be generated from the command line and directed to an output "
"file (or stdout if no outfilename is specified):"
msgstr ""

#. type: Block title
#: src/hal/tools.adoc:291
#, no-wrap
msgid "`halreport` Usage"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:297
#, no-wrap
msgid ""
"Usage:\n"
"  halreport -h | --help (this help)\n"
"or\n"
"  halreport [outfilename]\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:301
msgid ""
"To generate the report for every LinuxCNC startup, include halreport and an "
"output filename as an [APPLICATIONS]APP entry in the INI file."
msgstr ""

#. type: Block title
#: src/hal/tools.adoc:302
#, no-wrap
msgid "`halreport` Example"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:307
#, no-wrap
msgid ""
"[APPLICATIONS]\n"
"APP = halreport /tmp/halreport.txt\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:312
msgid ""
"The function addf-ordering can be important for servo loops where the "
"sequence of the functions computed at each servo period is important.  "
"Typically, the order is:"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:314
msgid "read input pins,"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:315
msgid "do the motion command-handler and motion-controller functions,"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:316
msgid "perform pid calculations, and finally"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:317
msgid "write output pins."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:321
msgid ""
"For each signal in a critical path, the addf-order of the output pin should "
"be numerically lower than the addf-order of the critical input pins that it "
"connects to."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:326
msgid ""
"For routine signal paths that handle switch inputs, user-space pins, etc., "
"the addf-ordering is often not critical.  Moreover, the timing of user-space "
"pin value changes cannot be controlled or guaranteed at the intervals "
"typically employed for HAL threads."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:330
msgid ""
"Example report file excerpts showing a pid loop for a hostmot2 stepgen "
"operated in velocity mode on a trivkins machine with joint.0 corresponding "
"to the X axis coordinate:"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:348
#, no-wrap
msgid ""
"SIG:    pos-fb-0\n"
"  OUT:    h.00.position-fb                     hm2_7i92.0.read        servo-thread 001\n"
"          (=hm2_7i92.0.stepgen.00.position-fb)\n"
"    IN:     X_pid.feedback                     X_pid.do-pid-calcs     servo-thread 004\n"
"    IN:     joint.0.motor-pos-fb               motion-command-handler servo-thread 002\n"
"            ....................               motion-controller      servo-thread 003\n"
"...\n"
"SIG:    pos-cmd-0\n"
"  OUT:    joint.0.motor-pos-cmd                motion-command-handler servo-thread 002\n"
"          .....................                motion-controller      servo-thread 003\n"
"    IN:     X_pid.command                      X_pid.do-pid-calcs     servo-thread 004\n"
"...\n"
"SIG:    motor-cmd-0\n"
"  OUT:    X_pid.output                         X_pid.do-pid-calcs     servo-thread 004\n"
"    IN:     h.00.velocity-cmd                  hm2_7i92.0.write       servo-thread 008\n"
"            (=hm2_7i92.0.stepgen.00.velocity-cmd)\n"
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:351
msgid ""
"In the example above, the HALFILE uses halcmd aliases to simplify pin names "
"for an hostmot2 FPGA board with commands like:"
msgstr ""

#. type: delimited block -
#: src/hal/tools.adoc:355
#, no-wrap
msgid "alias pin hm2_7i92.0.stepgen.00.position-fb h.00.position-fb\n"
msgstr ""

#. type: delimited block =
#: src/hal/tools.adoc:360
msgid "Questionable component function detection may occur for"
msgstr ""

#. type: delimited block =
#: src/hal/tools.adoc:362
msgid "unsupported (deprecated) components,"
msgstr ""

#. type: delimited block =
#: src/hal/tools.adoc:364
msgid ""
"user-created components that use multiple functions or unconventional "
"function naming, or"
msgstr ""

#. type: delimited block =
#: src/hal/tools.adoc:366
msgid ""
"GUI-created userspace components that lack distinguishing characteristics "
"such as a prefix based on the GUI program name."
msgstr ""

#. type: delimited block =
#: src/hal/tools.adoc:368
msgid "Questionable functions are tagged with a question mark \"?\"."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:373
msgid ""
"Component pins that cannot be associated with a known thread function report "
"the function as \"Unknown\"."
msgstr ""

#. type: Plain text
#: src/hal/tools.adoc:380
msgid ""
"`halreport` generates a connections report (without pin types, and current "
"values) for a running HAL application to aid in designing and verifying "
"connections.  This helps with the understanding what the source of a pin "
"value is.  Use this information with applications like `halshow`, "
"`halmeter`, `halscope` or the `halcmd show` command in a terminal."
msgstr ""

#. type: Title =
#: src/hal/tutorial.adoc:5
#, no-wrap
msgid "HAL Tutorial(((HAL Tutorial)))"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:12
msgid ""
"Configuration moves from theory to device -- HAL device that is.  For those "
"who have had just a bit of computer programming, this section is the 'Hello "
"World' of the HAL."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:16
msgid ""
"`halrun` can be used to create a working system.  It is a command line or "
"text file tool for configuration and tuning.  The following examples "
"illustrate its setup and operation."
msgstr ""

#. type: Title ==
#: src/hal/tutorial.adoc:18
#, no-wrap
msgid "Halcmd(((Halcmd Tutorial)))"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:25
msgid ""
"`halcmd` is a command line tool for manipulating HAL. A more complete man "
"page exists for halcmd and installed together with LinuxCNC, from source or "
"from a package. If LinuxCNC has been compiled as _run-in-place_, the man "
"page is not installed but is accessible in the LinuxCNC main directory with "
"the following command:"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:28
#, no-wrap
msgid "$ man -M docs/man halcmd\n"
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:30
#, no-wrap
msgid "Notation"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:35
msgid ""
"For this tutorial, commands for the operating system are typically shown "
"without the prompt provided by the UNIX shell, i.e typically a dollar sign "
"($) or a hash/double cross (#).  When communicating directly with the HAL "
"through `halcmd` or `halrun`, the prompts are shown in the examples.  The "
"terminal window is in 'Applications/Accessories' from the main Ubuntu menu "
"bar."
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:36
#, no-wrap
msgid "Terminal Command Example - prompts"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:41
#, no-wrap
msgid ""
"me@computer:~linuxcnc$ halrun\n"
"(will be shown like the following line)\n"
"halrun\n"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:45
#, no-wrap
msgid ""
"(the halcmd: prompt will be shown when running HAL)\n"
"halcmd: loadrt counter\n"
"halcmd: show pin\n"
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:47 src/hal/tutorial.adoc:54
#, no-wrap
msgid "Tab-completion"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:53
msgid ""
"Your version of `halcmd` may include tab-completion.  Instead of completing "
"file names as a shell does, it completes commands with HAL identifiers.  You "
"will have to type enough letters for a unique match.  Try pressing tab after "
"starting a HAL command:"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:61
#, no-wrap
msgid ""
"halcmd: loa<TAB>\n"
"halcmd: load\n"
"halcmd: loadrt\n"
"halcmd: loadrt cou<TAB>\n"
"halcmd: loadrt counter\n"
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:63
#, no-wrap
msgid "The RTAPI environment"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:72
msgid ""
"RTAPI stands for Real Time Application Programming Interface. Many HAL "
"components work in realtime, and all HAL components store data in shared "
"memory so realtime components can access it. Regular Linux does not support "
"realtime programming or the type of shared memory that HAL needs. "
"Fortunately, there are realtime operating systems (RTOS's) that provide the "
"necessary extensions to Linux. Unfortunately, each RTOS does things a little "
"differently."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:80
msgid ""
"To address these differences, the LinuxCNC team came up with RTAPI, which "
"provides a consistent way for programs to talk to the RTOS. If you are a "
"programmer who wants to work on the internals of LinuxCNC, you may want to "
"study 'linuxcnc/src/rtapi/rtapi.h' to understand the API.  But if you are a "
"normal person, all you need to know about RTAPI is that it (and the RTOS) "
"needs to be loaded into the memory of your computer before you do anything "
"with HAL."
msgstr ""

#. type: Title ==
#: src/hal/tutorial.adoc:81
#, no-wrap
msgid "A Simple Example"
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:83
#, no-wrap
msgid "Loading a component"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:92
msgid ""
"For this tutorial, we are going to assume that you have successfully "
"installed the Live CD and, if using a RIP footnote:[Run In Place, when the "
"source files have been downloaded to a user directory and are compiled and "
"executed directly from there.], invoke the 'rip-environment' script to "
"prepare your shell.  In that case, all you need to do is load the required "
"RTOS and RTAPI modules into memory.  Just run the following command from a "
"terminal window:"
msgstr ""

#.  FIXME: add link to rip-environment explanation
#. type: Block title
#: src/hal/tutorial.adoc:95
#, no-wrap
msgid "Loading HAL"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:100
#, no-wrap
msgid ""
"cd linuxcnc\n"
"halrun\n"
"halcmd:\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:106
msgid ""
"With the realtime OS and RTAPI loaded, we can move into the first example. "
"Notice that the prompt is now shown as 'halcmd:'.  This is because "
"subsequent commands will be interpreted as HAL commands, not shell commands."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:113
msgid ""
"For the first example, we will use a HAL component called 'siggen', which is "
"a simple signal generator. A complete description of the 'siggen' component "
"can be found in the <<sec:siggen,SigGen>> section of this Manual.  It is a "
"realtime component, implemented as a Linux kernel module.  To load the "
"\"`siggen`\" component, use the HAL command `loadrt`."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:117
#, no-wrap
msgid "halcmd: loadrt siggen\n"
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:120
#, no-wrap
msgid "Examining the HAL"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:130
msgid ""
"Now that the module is loaded, it is time to introduce `halcmd`, the command "
"line tool used to configure the HAL.  This tutorial will introduce only a "
"selection of halcmd features.  For a more complete description try `man "
"halcmd`, or see the reference in <<sec:hal-commands,HAL Commands>> section "
"of this document.  The first halcmd feature is the 'show' command.  This "
"command displays information about the current state of the HAL.  To show "
"all installed components:"
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:131
#, no-wrap
msgid "Show Components with `halrun`/`halcmd`"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:134
#, no-wrap
msgid "halcmd: show comp\n"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:139
#, no-wrap
msgid ""
"    Loaded HAL Components:\n"
"    ID     Type  Name                                PID   State\n"
"    3      RT    siggen                                    ready\n"
"    2      User  halcmd2177                          2177  ready\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:148
msgid ""
"Since _halcmd_ itself is also a HAL component, it will always show up in the "
"list.  The number after \"`halcmd`\" in the component list is the UNIX "
"process ID.  It is possible to run more than one copy of halcmd at the same "
"time (in different terminal windows for example), so the PID is added to the "
"end of the name to make it unique.  The list also shows the 'siggen' "
"component that we installed in the previous step.  The 'RT' under 'Type' "
"indicates that 'siggen' is a realtime component.  The 'User' under 'Type' "
"indicates it is a user space component."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:150
msgid "Next, let's see what pins `siggen` makes available:"
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:151
#, no-wrap
msgid "Show Pins"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:166
#, no-wrap
msgid ""
"Component Pins:\n"
"Owner   Type   Dir        Value  Name\n"
"     3  float  IN             1  siggen.0.amplitude\n"
"     3  bit    OUT        FALSE  siggen.0.clock\n"
"     3  float  OUT            0  siggen.0.cosine\n"
"     3  float  IN             1  siggen.0.frequency\n"
"     3  float  IN             0  siggen.0.offset\n"
"     3  float  OUT            0  siggen.0.sawtooth\n"
"     3  float  OUT            0  siggen.0.sine\n"
"     3  float  OUT            0  siggen.0.square\n"
"     3  float  OUT            0  siggen.0.triangle\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:174
msgid ""
"This command displays all of the pins in the current HAL.  A complex system "
"could have dozens or hundreds of pins.  But right now there are only nine "
"pins.  Of these pins eight are floating point and one is bit (boolean).  Six "
"carry data out of the 'siggen' component and three are used to transfer "
"settings into the component.  Since we have not yet executed the code "
"contained within the component, some the pins have a value of zero."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:176
msgid "The next step is to look at parameters:"
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:177
#, no-wrap
msgid "Show Parameters"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:180 src/hal/tutorial.adoc:326
#: src/hal/tutorial.adoc:594
#, no-wrap
msgid "halcmd: show param\n"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:185
#, no-wrap
msgid ""
"Parameters:\n"
"Owner   Type  Dir        Value   Name\n"
"     3  s32   RO             0   siggen.0.update.time\n"
"     3  s32   RW             0   siggen.0.update.tmax\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:199
msgid ""
"The 'show param' command shows all the parameters in the HAL.  Right now, "
"each parameter has the default value it was given when the component was "
"loaded.  Note the column labeled 'Dir'.  The parameters labeled '-W' are "
"writable ones that are never changed by the component itself, instead they "
"are meant to be changed by the user to control the component.  We will see "
"how to do this later.  Parameters labeled 'R-' are read only parameters.  "
"They can be changed only by the component.  Finally, parameter labeled 'RW' "
"are read-write parameters.  That means that they are changed by the "
"component, but can also be changed by the user.  Note: The parameters "
"`siggen.0.update.time` and `siggen.0.update.tmax` are for debugging purposes "
"and won't be covered in this section."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:202
msgid ""
"Most realtime components export one or more functions to actually run the "
"realtime code they contain.  Let's see what function(s) 'siggen' exported:"
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:203
#, no-wrap
msgid "Show Functions with `halcmd``"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:206 src/hal/tutorial.adoc:701
#, no-wrap
msgid "halcmd: show funct\n"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:210
#, no-wrap
msgid ""
"Exported Functions:\n"
"Owner   CodeAddr  Arg       FP   Users  Name\n"
"00003   f801b000  fae820b8  YES      0  siggen.0.update\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:217
msgid ""
"The siggen component exported a single function.  It requires floating "
"point.  It is not currently linked to any threads, so 'users' is zero "
"footnote:[CodeAddr and Arg fields were used during development and should "
"probably disappear.]."
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:218
#, no-wrap
msgid "Making realtime code run"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:223
msgid ""
"To actually run the code contained in the function `siggen.0.update`, we "
"need a realtime thread.  The component called 'threads' that is used to "
"create a new thread.  Lets create a thread called \"test-thread\" with a "
"period of 1&thinsp;ms (1,000&thinsp;µs or 1,000,000&thinsp;ns):"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:226
#, no-wrap
msgid "halcmd: loadrt threads name1=test-thread period1=1000000\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:229
msgid "Let's see if that worked:"
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:230
#, no-wrap
msgid "Show Threads"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:233 src/hal/tutorial.adoc:256
#: src/hal/tutorial.adoc:748 src/hal/tutorial.adoc:773
#, no-wrap
msgid "halcmd: show thread\n"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:237
#, no-wrap
msgid ""
"Realtime Threads:\n"
"     Period  FP     Name               (     Time, Max-Time )\n"
"     999855  YES    test-thread        (        0,        0 )\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:243
msgid ""
"It did. The period is not exactly 1,000,000&thinsp;ns because of hardware "
"limitations, but we have a thread that runs at approximately the correct "
"rate, and which can handle floating point functions.  The next step is to "
"connect the function to the thread:"
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:244
#, no-wrap
msgid "Add Function"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:247
#, no-wrap
msgid "halcmd: addf siggen.0.update test-thread\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:253
msgid ""
"Up till now, we've been using `halcmd` only to look at the HAL.  However, "
"this time we used the `addf` (add function) command to actually change "
"something in the HAL.  We told 'halcmd' to add the function `siggen.0."
"update` to the thread 'test-thread', and if we look at the thread list "
"again, we see that it succeeded:"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:261
#, no-wrap
msgid ""
"Realtime Threads:\n"
"     Period  FP     Name                (     Time, Max-Time )\n"
"     999855  YES    test-thread         (        0,        0 )\n"
"                  1 siggen.0.update\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:267
msgid ""
"There is one more step needed before the 'siggen' component starts "
"generating signals.  When the HAL is first started, the thread(s) are not "
"actually running.  This is to allow you to completely configure the system "
"before the realtime code starts.  Once you are happy with the configuration, "
"you can start the realtime code like this:"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:270 src/hal/tutorial.adoc:825
#, no-wrap
msgid "halcmd: start\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:273
msgid "Now the signal generator is running. Let's look at its output pins:"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:288
#, no-wrap
msgid ""
"Component Pins:\n"
"Owner   Type  Dir         Value  Name\n"
"     3  float IN              1  siggen.0.amplitude\n"
"     3  bit   OUT         FALSE  siggen.0.clock\n"
"     3  float OUT    -0.1640929  siggen.0.cosine\n"
"     3  float IN              1  siggen.0.frequency\n"
"     3  float IN              0  siggen.0.offset\n"
"     3  float OUT    -0.4475303  siggen.0.sawtooth\n"
"     3  float OUT     0.9864449  siggen.0.sine\n"
"     3  float OUT            -1  siggen.0.square\n"
"     3  float OUT    -0.1049393  siggen.0.triangle\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:291
msgid "And let's look again:"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:306
#, no-wrap
msgid ""
"Component Pins:\n"
"Owner   Type  Dir         Value  Name\n"
"     3  float IN              1  siggen.0.amplitude\n"
"     3  bit   OUT         FALSE  siggen.0.clock\n"
"     3  float OUT     0.0507619  siggen.0.cosine\n"
"     3  float IN              1  siggen.0.frequency\n"
"     3  float IN              0  siggen.0.offset\n"
"     3  float OUT     -0.516165  siggen.0.sawtooth\n"
"     3  float OUT     0.9987108  siggen.0.sine\n"
"     3  float OUT            -1  siggen.0.square\n"
"     3  float OUT    0.03232994  siggen.0.triangle\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:311
msgid ""
"We did two `show pin` commands in quick succession, and you can see that the "
"outputs are no longer zero.  The sine, cosine, sawtooth, and triangle "
"outputs are changing constantly.  The square output is also working, however "
"it simply switches from +1.0 to -1.0 every cycle."
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:312
#, no-wrap
msgid "Changing Parameters"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:317
msgid ""
"The real power of HAL is that you can change things.  For example, we can "
"use the `setp` command to set the value of a parameter.  Let's change the "
"amplitude of the signal generator from 1.0 to 5.0:"
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:318
#, no-wrap
msgid "Set Pin"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:321
#, no-wrap
msgid "halcmd: setp siggen.0.amplitude 5\n"
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:323
#, no-wrap
msgid "Check the parameters and pins again"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:331
#, no-wrap
msgid ""
"Parameters:\n"
"Owner   Type  Dir         Value  Name\n"
"     3  s32   RO           1754  siggen.0.update.time\n"
"     3  s32   RW          16997  siggen.0.update.tmax\n"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:345
#, no-wrap
msgid ""
"Component Pins:\n"
"Owner   Type  Dir         Value  Name\n"
"     3  float IN              5  siggen.0.amplitude\n"
"     3  bit   OUT         FALSE  siggen.0.clock\n"
"     3  float OUT     0.8515425  siggen.0.cosine\n"
"     3  float IN              1  siggen.0.frequency\n"
"     3  float IN              0  siggen.0.offset\n"
"     3  float OUT      2.772382  siggen.0.sawtooth\n"
"     3  float OUT     -4.926954  siggen.0.sine\n"
"     3  float OUT             5  siggen.0.square\n"
"     3  float OUT      0.544764  siggen.0.triangle\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:349
msgid ""
"Note that the value of parameter `siggen.0.amplitude` has changed to 5, and "
"that the pins now have larger values."
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:350
#, no-wrap
msgid "Saving the HAL configuration"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:358
msgid ""
"Most of what we have done with `halcmd` so far has simply been viewing "
"things with the 'show' command.  However two of the commands actually "
"changed things.  As we design more complex systems with HAL, we will use "
"many commands to configure things just the way we want them.  HAL has the "
"memory of an elephant, and will retain that configuration until we shut it "
"down.  But what about next time? We don't want to manually enter a bunch of "
"commands every time we want to use the system."
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:359
#, no-wrap
msgid "Saving the configuration of the entire HAL with a single command."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:362
#, no-wrap
msgid "halcmd: save\n"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:373
#, no-wrap
msgid ""
"# components\n"
"loadrt threads name1=test-thread period1=1000000\n"
"loadrt siggen\n"
"# pin aliases\n"
"# signals\n"
"# nets\n"
"# parameter values\n"
"setp siggen.0.update.tmax 14687\n"
"# realtime thread/function links\n"
"addf siggen.0.update test-thread\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:379
msgid ""
"The output of the `save` command is a sequence of HAL commands.  If you "
"start with an _empty_ HAL and run all these commands, you will get the "
"configuration that existed when the 'save' command was issued.  To save "
"these commands for later use, we simply redirect the output to a file:"
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:380
#, no-wrap
msgid "Save configuration to a file with `halcmd`"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:383
#, no-wrap
msgid "halcmd: save all saved.hal\n"
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:385
#, no-wrap
msgid "Exiting halrun"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:390
msgid ""
"When you're finished with your HAL session type `exit` at the \"`halcmd:`\" "
"prompt.  This will return you to the system prompt and close down the HAL "
"session.  Do not simply close the terminal window without shutting down the "
"HAL session."
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:391
#, no-wrap
msgid "Exit HAL"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:394 src/hal/tutorial.adoc:538
#, no-wrap
msgid "halcmd: exit\n"
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:396
#, no-wrap
msgid "Restoring the HAL configuration"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:401
msgid ""
"To restore the HAL configuration stored in the file \"saved.hal\", we need "
"to execute all of those HAL commands.  To do that, we use \"`-f _<file "
"name>_`\" which reads commands from a file, and \"`-I`\" (upper case i) "
"which shows the halcmd prompt after executing the commands:"
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:402
#, no-wrap
msgid "Run a Saved File"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:405
#, no-wrap
msgid "halrun -I -f saved.hal\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:409
msgid ""
"Notice that there is not a \"start\" command in saved.hal.  It's necessary "
"to issue it again (or edit the file saved.hal to add it there)."
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:410
#, no-wrap
msgid "Removing HAL from memory"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:415
msgid ""
"If an unexpected shutdown of a HAL session occurs you might have to unload "
"HAL before another session can begin.  To do this type the following command "
"in a terminal window."
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:416
#, no-wrap
msgid "Removing HAL"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:419
#, no-wrap
msgid "halrun -U\n"
msgstr ""

#. type: Title ==
#: src/hal/tutorial.adoc:422
#, no-wrap
msgid "Halmeter(((Halmeter,Tutorial Halmeter)))"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:429
msgid ""
"You can build very complex HAL systems without ever using a graphical "
"interface. However there is something satisfying about seeing the result of "
"your work. The first and simplest GUI tool for the HAL is halmeter. It is a "
"very simple program that is the HAL equivalent of the handy multimeter (or "
"analog meter for the old timers)."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:433
msgid ""
"It allows to observe the pins, signals or parameters by displaying the "
"current value of these entities.  It is very easy to use application for "
"graphical environments.  In a console type:"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:436
#, no-wrap
msgid "halmeter\n"
msgstr ""

#. FIXME Add halmeter screenshot(s)
#. type: Plain text
#: src/hal/tutorial.adoc:442
msgid ""
"Two windows will appear. The selection window is the largest and includes "
"three tabs:"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:444
msgid "One lists all the pins currently defined in HAL,"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:445
msgid "one lists all the signals,"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:446
msgid "one lists all the parameters."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:454
msgid ""
"Click on a tab, then click on one of the items to select it. The small "
"window will show the name and value of the selected item.  The display is "
"updated approximately 10 times per second. To free screen space, the "
"selection window can be closed with the _Close_ button.  On the little "
"window, hidden under the selection window at program launch, the _Select_ "
"button, re-opens the selection window and the _Exit_ button stops the "
"program and closes both windows."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:458
msgid ""
"It is possible to run several halmeters simultaneously, which makes it "
"possible to visualize several items at the same time. To open a halmeter and "
"release the console by running it in the background, run the following "
"command:"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:461
#, no-wrap
msgid "halmeter &\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:467
msgid ""
"It is possible to launch halmeter and make it immediately display an item.  "
"For this, add _pin|sig|par[am] name_ arguments on the command line. It will "
"display the signal, pin, or parameter _name_ as soon as it will start. If "
"the indicated item does not exist, it will start normally."
msgstr ""

#. FIXME Add halmeter command example for direct item display
#. type: Plain text
#: src/hal/tutorial.adoc:475
msgid ""
"Finally, if an item is specified for display, it is possible add _-s_ in "
"front of pin|sig|param to tell halmeter to use an even smaller window. The "
"item name will be displayed in the title bar instead of below the value and "
"there will be no button.  This is useful for displaying a lot of halmeters "
"in a small space."
msgstr ""

#. FIXME Add halmeter run with '-s' screenshot
#. type: Plain text
#: src/hal/tutorial.adoc:481
msgid ""
"We will use the siggen component again to check out halmeter. If you just "
"finished the previous example, then you can load siggen using the saved "
"file. If not, we can load it just like we did before:"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:489
#, no-wrap
msgid ""
"halrun\n"
"halcmd: loadrt siggen\n"
"halcmd: loadrt threads name1=test-thread period1=1000000\n"
"halcmd: addf siggen.0.update test-thread\n"
"halcmd: start\n"
"halcmd: setp siggen.0.amplitude 5\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:493
msgid ""
"At this point we have the siggen component loaded and running.  It's time to "
"start halmeter."
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:494
#, no-wrap
msgid "Starting Halmeter"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:497
#, no-wrap
msgid "halcmd: loadusr halmeter\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:500
msgid "The first window you will see is the \"Select Item to Probe\" window."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tutorial.adoc:501 src/hal/tutorial.adoc:502
#, no-wrap
msgid "Halmeter Select Window"
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:502
#, no-wrap
msgid "images/halmeter-select.png"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:508
msgid ""
"This dialog has three tabs. The first tab displays all of the HAL pins in "
"the system.  The second one displays all the signals, and the third displays "
"all the parameters.  We would like to look at the pin `siggen.0.cosine` "
"first, so click on it then click the \"Close\" button.  The probe selection "
"dialog will close, and the meter looks something like the following figure."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tutorial.adoc:509 src/hal/tutorial.adoc:510
#, no-wrap
msgid "Halmeter Window"
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:510
#, no-wrap
msgid "images/halmeter-1.png"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:514
msgid ""
"To change what the meter displays press the \"Select\" button which brings "
"back the \"Select Item to Probe\" window."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:517
msgid ""
"You should see the value changing as siggen generates its cosine wave.  "
"Halmeter refreshes its display about 5 times per second."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:519
msgid "To shut down halmeter, just click the exit button."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:524
msgid ""
"If you want to look at more than one pin, signal, or parameter at a time, "
"you can just start more halmeters. The halmeter window was intentionally "
"made very small so you could have a lot of them on the screen at once."
msgstr ""

#. type: Title ==
#: src/hal/tutorial.adoc:525
#, no-wrap
msgid "Stepgen Example(((stepgen Example)))"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:531
msgid ""
"Up till now we have only loaded one HAL component. But the whole idea behind "
"the HAL is to allow you to load and connect a number of simple components to "
"make up a complex system. The next example will use two components."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:535
msgid ""
"Before we can begin building this new example, we want to start with a clean "
"slate. If you just finished one of the previous examples, we need to remove "
"the all components and reload the RTAPI and HAL libraries."
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:540
#, no-wrap
msgid "Installing the components"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:547
msgid ""
"Now we are going to load the step pulse generator component. For a detailed "
"description of this component refer to the stepgen section of the Integrator "
"Manual. In this example we will use the 'velocity' control type of StepGen.  "
"For now, we can skip the details, and just run the following commands."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:550
msgid ""
"In this example we will use the _velocity_ control type from the `stepgen` "
"component."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:556
#, no-wrap
msgid ""
"halrun\n"
"halcmd: loadrt stepgen step_type=0,0 ctrl_type=v,v\n"
"halcmd: loadrt siggen\n"
"halcmd: loadrt threads name1=fast fp1=0 period1=50000 name2=slow period2=1000000\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:562
msgid ""
"The first command loads two step generators, both configured to generate "
"stepping type 0.  The second command loads our old friend siggen, and the "
"third one creates two threads, a fast one with a period of 50 microseconds "
"(µs) and a slow one with a period of 1 millisecond (ms).  The fast thread "
"doesn't support floating point functions."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:565
msgid ""
"As before, we can use `halcmd show` to take a look at the HAL.  This time we "
"have a lot more pins and parameters than before:"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:592
#, no-wrap
msgid ""
"Component Pins:\n"
"Owner   Type  Dir         Value  Name\n"
"     4  float IN              1  siggen.0.amplitude\n"
"     4  bit   OUT         FALSE  siggen.0.clock\n"
"     4  float OUT             0  siggen.0.cosine\n"
"     4  float IN              1  siggen.0.frequency\n"
"     4  float IN              0  siggen.0.offset\n"
"     4  float OUT             0  siggen.0.sawtooth\n"
"     4  float OUT             0  siggen.0.sine\n"
"     4  float OUT             0  siggen.0.square\n"
"     4  float OUT             0  siggen.0.triangle\n"
"     3  s32   OUT             0  stepgen.0.counts\n"
"     3  bit   OUT         FALSE  stepgen.0.dir\n"
"     3  bit   IN          FALSE  stepgen.0.enable\n"
"     3  float OUT             0  stepgen.0.position-fb\n"
"     3  bit   OUT         FALSE  stepgen.0.step\n"
"     3  float IN              0  stepgen.0.velocity-cmd\n"
"     3  s32   OUT             0  stepgen.1.counts\n"
"     3  bit   OUT         FALSE  stepgen.1.dir\n"
"     3  bit   IN          FALSE  stepgen.1.enable\n"
"     3  float OUT             0  stepgen.1.position-fb\n"
"     3  bit   OUT         FALSE  stepgen.1.step\n"
"     3  float IN              0  stepgen.1.velocity-cmd\n"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:623
#, no-wrap
msgid ""
"Parameters:\n"
"Owner   Type  Dir         Value  Name\n"
"     4  s32   RO              0  siggen.0.update.time\n"
"     4  s32   RW              0  siggen.0.update.tmax\n"
"     3  u32   RW     0x00000001  stepgen.0.dirhold\n"
"     3  u32   RW     0x00000001  stepgen.0.dirsetup\n"
"     3  float RO              0  stepgen.0.frequency\n"
"     3  float RW              0  stepgen.0.maxaccel\n"
"     3  float RW              0  stepgen.0.maxvel\n"
"     3  float RW              1  stepgen.0.position-scale\n"
"     3  s32   RO              0  stepgen.0.rawcounts\n"
"     3  u32   RW     0x00000001  stepgen.0.steplen\n"
"     3  u32   RW     0x00000001  stepgen.0.stepspace\n"
"     3  u32   RW     0x00000001  stepgen.1.dirhold\n"
"     3  u32   RW     0x00000001  stepgen.1.dirsetup\n"
"     3  float RO              0  stepgen.1.frequency\n"
"     3  float RW              0  stepgen.1.maxaccel\n"
"     3  float RW              0  stepgen.1.maxvel\n"
"     3  float RW              1  stepgen.1.position-scale\n"
"     3  s32   RO              0  stepgen.1.rawcounts\n"
"     3  u32   RW     0x00000001  stepgen.1.steplen\n"
"     3  u32   RW     0x00000001  stepgen.1.stepspace\n"
"     3  s32   RO              0  stepgen.capture-position.time\n"
"     3  s32   RW              0  stepgen.capture-position.tmax\n"
"     3  s32   RO              0  stepgen.make-pulses.time\n"
"     3  s32   RW              0  stepgen.make-pulses.tmax\n"
"     3  s32   RO              0  stepgen.update-freq.time\n"
"     3  s32   RW              0  stepgen.update-freq.tmax\n"
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:625
#, no-wrap
msgid "Connecting pins with signals"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:640
msgid ""
"What we have is two step pulse generators, and a signal generator. Now it is "
"time to create some HAL signals to connect the two components. We are going "
"to pretend that the two step pulse generators are driving the X and Y axis "
"of a machine. We want to move the table in circles. To do this, we will send "
"a cosine signal to the X axis, and a sine signal to the Y axis. The siggen "
"module creates the sine and cosine, but we need 'wires' to connect the "
"modules together. In the HAL, 'wires' are called signals. We need to create "
"two of them. We can call them anything we want, for this example they will "
"be 'X-vel' and 'Y-vel'. The signal 'X-vel' is intended to run from the "
"cosine output of the signal generator to the velocity input of the first "
"step pulse generator.  The first step is to connect the signal to the signal "
"generator output.  To connect a signal to a pin we use the net command."
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:641
#, no-wrap
msgid "net command"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:644
#, no-wrap
msgid "halcmd: net X-vel <= siggen.0.cosine\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:647
msgid "To see the effect of the `net` command, we show the signals again."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:650 src/hal/tutorial.adoc:679
#, no-wrap
msgid "halcmd: show sig\n"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:654
#, no-wrap
msgid ""
"Signals:\n"
"Type          Value  Name     (linked to)\n"
"float             0  X-vel <== siggen.0.cosine\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:661
msgid ""
"When a signal is connected to one or more pins, the show command lists the "
"pins immediately following the signal name. The 'arrow' shows the direction "
"of data flow - in this case, data flows from pin `siggen.0.cosine` to signal "
"`X-vel`. Now let's connect the `X-vel` to the velocity input of a step pulse "
"generator."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:664
#, no-wrap
msgid "halcmd: net X-vel => stepgen.0.velocity-cmd\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:670
msgid ""
"We can also connect up the Y axis signal `Y-vel`.  It is intended to run "
"from the sine output of the signal generator to the input of the second step "
"pulse generator.  The following command accomplishes in one line what two "
"`net` commands accomplished for `X-vel`."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:673
#, no-wrap
msgid "halcmd: net Y-vel siggen.0.sine => stepgen.1.velocity-cmd\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:676
msgid ""
"Now let's take a final look at the signals and the pins connected to them."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:686
#, no-wrap
msgid ""
"Signals:\n"
"Type          Value  Name     (linked to)\n"
"float             0  X-vel <== siggen.0.cosine\n"
"                           ==> stepgen.0.velocity-cmd\n"
"float             0  Y-vel <== siggen.0.sine\n"
"                           ==> stepgen.1.velocity-cmd\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:690
msgid ""
"The 'show sig' command makes it clear exactly how data flows through the "
"HAL.  For example, the 'X-vel' signal comes from pin `siggen.0.cosine`, and "
"goes to pin `stepgen.0.velocity-cmd`."
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:691
#, no-wrap
msgid "Setting up realtime execution - threads and functions"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:698
msgid ""
"Thinking about data flowing through \"wires\" makes pins and signals fairly "
"easy to understand.  Threads and functions are a little more difficult.  "
"Functions contain the computer instructions that actually get things done.  "
"Thread are the method used to make those instructions run when they are "
"needed.  First let's look at the functions available to us."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:708
#, no-wrap
msgid ""
"Exported Functions:\n"
"Owner   CodeAddr  Arg       FP   Users  Name\n"
" 00004  f9992000  fc731278  YES      0   siggen.0.update\n"
" 00003  f998b20f  fc7310b8  YES      0   stepgen.capture-position\n"
" 00003  f998b000  fc7310b8  NO       0   stepgen.make-pulses\n"
" 00003  f998b307  fc7310b8  YES      0   stepgen.update-freq\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:716
msgid ""
"In general, you will have to refer to the documentation for each component "
"to see what its functions do. In this case, the function `siggen.0.update` "
"is used to update the outputs of the signal generator. Every time it is "
"executed, it calculates the values of the sine, cosine, triangle, and square "
"outputs. To make smooth signals, it needs to run at specific intervals."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:718
msgid "The other three functions are related to the step pulse generators."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:722
msgid ""
"The first one, `stepgen.capture_position`, is used for position feedback.  "
"It captures the value of an internal counter that counts the step pulses as "
"they are generated.  Assuming no missed steps, this counter indicates the "
"position of the motor."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:730
msgid ""
"The main function for the step pulse generator is `stepgen.make_pulses`.  "
"Every time 'make_pulses' runs it decides if it is time to take a step, and "
"if so sets the outputs accordingly.  For smooth step pulses, it should run "
"as frequently as possible.  Because it needs to run so fast, 'make_pulses' "
"is highly optimized and performs only a few calculations.  Unlike the "
"others, it does not need floating point math."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:734
msgid ""
"The last function, `stepgen.update-freq`, is responsible for doing scaling "
"and some other calculations that need to be performed only when the "
"frequency command changes."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:741
msgid ""
"What this means for our example is that we want to run `siggen.0.update` at "
"a moderate rate to calculate the sine and cosine values.  Immediately after "
"we run `siggen.0.update`, we want to run `stepgen.update_freq` to load the "
"new values into the step pulse generator.  Finally we need to run `stepgen."
"make_pulses` as fast as possible for smooth pulses.  Because we don't use "
"position feedback, we don't need to run `stepgen.capture_position` at all."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:745
msgid ""
"We run functions by adding them to threads.  Each thread runs at a specific "
"rate.  Let's see what threads we have available."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:753
#, no-wrap
msgid ""
"Realtime Threads:\n"
"     Period  FP     Name               (     Time, Max-Time )\n"
"     996980  YES                  slow (        0,        0 )\n"
"      49849  NO                   fast (        0,        0 )\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:762
msgid ""
"The two threads were created when we loaded `threads`.  The first one, "
"'slow', runs every millisecond, and is capable of running floating point "
"functions.  We will use it for `siggen.0.update` and `stepgen.update_freq`.  "
"The second thread is 'fast', which runs every 50 microseconds (µs), and does "
"not support floating point.  We will use it for `stepgen.make_pulses`.  To "
"connect the functions to the proper thread, we use the `addf` command.  We "
"specify the function first, followed by the thread."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:767
#, no-wrap
msgid ""
"halcmd: addf siggen.0.update slow\n"
"halcmd: addf stepgen.update-freq slow\n"
"halcmd: addf stepgen.make-pulses fast\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:770
msgid ""
"After we give these commands, we can run the `show thread` command again to "
"see what happened."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:781
#, no-wrap
msgid ""
"Realtime Threads:\n"
"     Period  FP     Name               (     Time, Max-Time )\n"
"     996980  YES                  slow (        0,        0 )\n"
"                  1 siggen.0.update\n"
"                  2 stepgen.update-freq\n"
"      49849  NO                   fast (        0,        0 )\n"
"                  1 stepgen.make-pulses\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:785
msgid ""
"Now each thread is followed by the names of the functions, in the order in "
"which the functions will run."
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:786
#, no-wrap
msgid "Setting parameters"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:801
msgid ""
"We are almost ready to start our HAL system.  However we still need to "
"adjust a few parameters.  By default, the siggen component generates signals "
"that swing from +1 to -1.  For our example that is fine, we want the table "
"speed to vary from +1 to -1 inches per second.  However the scaling of the "
"step pulse generator isn't quite right.  By default, it generates an output "
"frequency of 1 step per second with an input of 1.0.  It is unlikely that "
"one step per second will give us one inch per second of table movement.  "
"Let's assume instead that we have a 5 turn per inch leadscrew, connected to "
"a 200 step per rev stepper with 10x microstepping.  So it takes 2000 steps "
"for one revolution of the screw, and 5 revolutions to travel one inch.  That "
"means the overall scaling is 10000 steps per inch.  We need to multiply the "
"velocity input to the step pulse generator by 10000 to get the proper "
"output.  That is exactly what the parameter `stepgen.n.velocity-scale` is "
"for.  In this case, both the X and Y axis have the same scaling, so we set "
"the scaling parameters for both to 10000."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:807
#, no-wrap
msgid ""
"halcmd: setp stepgen.0.position-scale 10000\n"
"halcmd: setp stepgen.1.position-scale 10000\n"
"halcmd: setp stepgen.0.enable 1\n"
"halcmd: setp stepgen.1.enable 1\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:817
msgid ""
"This velocity scaling means that when the pin `stepgen.0.velocity-cmd` is "
"1.0, the step generator will generate 10000 pulses per second (10&thinsp;"
"kHz).  With the motor and leadscrew described above, that will result in the "
"axis moving at exactly 1.0 inches per second.  This illustrates a key HAL "
"concept - things like scaling are done at the lowest possible level, in this "
"case in the step pulse generator.  The internal signal `X-vel` is the "
"velocity of the table in inches per second, and other components such as "
"`siggen` don't know (or care) about the scaling at all.  If we changed the "
"leadscrew, or motor, we would change only the scaling parameter of the step "
"pulse generator."
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:818
#, no-wrap
msgid "Run it!"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:822
msgid ""
"We now have everything configured and are ready to start it up.  Just like "
"in the first example, we use the `start` command."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:832
msgid ""
"Although nothing appears to happen, inside the computer the step pulse "
"generator is cranking out step pulses, varying from 10&thinsp;kHz forward to "
"10&thinsp;kHz reverse and back again every second. Later in this tutorial "
"we'll see how to bring those internal signals out to run motors in the real "
"world, but first we want to look at them and see what is happening."
msgstr ""

#. type: Title ==
#: src/hal/tutorial.adoc:834
#, no-wrap
msgid "Halscope(((Tutorial Halscope)))"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:840
msgid ""
"The previous example generates some very interesting signals. But much of "
"what happens is far too fast to see with halmeter. To take a closer look at "
"what is going on inside the HAL, we want an oscilloscope.  Fortunately HAL "
"has one, called halscope."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:846
msgid ""
"Halscope has two parts - a realtime part that is loaded as a kernel module, "
"and a user part that supplies the GUI and display. However, you don't need "
"to worry about this, because the userspace portion will automatically "
"request that the realtime part be loaded. With LinuxCNC running in a "
"terminal you can start halscope with the following command."
msgstr ""

#. type: Block title
#: src/hal/tutorial.adoc:847
#, no-wrap
msgid "Starting Halscope"
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:850
#, no-wrap
msgid "halcmd loadusr halscope\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:857
msgid ""
"If LinuxCNC is not running or the autosave.halscope file does not match the "
"pins available in the current running LinuxCNC the scope GUI window will "
"open, immediately followed by a 'Realtime function not linked' dialog that "
"looks like the following figure. To change the sample rate left click on the "
"samples box."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tutorial.adoc:859 src/hal/tutorial.adoc:860
#, no-wrap
msgid "Realtime function not linked dialog"
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:860
#, no-wrap
msgid "images/halscope-01.png"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:869
msgid ""
"This dialog is where you set the sampling rate for the oscilloscope.  For "
"now we want to sample once per millisecond, so click on the 989&thinsp;µs "
"thread 'slow' and leave the multiplier at 1. We will also leave the record "
"length at 4000 samples, so that we can use up to four channels at one time. "
"When you select a thread and then click 'OK', the dialog disappears, and the "
"scope window looks something like the following figure."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tutorial.adoc:871 src/hal/tutorial.adoc:872
#, no-wrap
msgid "Initial scope window"
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:872
#, no-wrap
msgid "images/halscope-02.png"
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:874
#, no-wrap
msgid "Hooking up the scope probes"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:883
msgid ""
"At this point, Halscope is ready to use. We have already selected a sample "
"rate and record length, so the next step is to decide what to look at. This "
"is equivalent to hooking 'virtual scope probes' to the HAL. Halscope has 16 "
"channels, but the number you can use at any one time depends on the record "
"length - more channels means shorter records, since the memory available for "
"the record is fixed at approximately 16,000 samples."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:890
msgid ""
"The channel buttons run across the bottom of the halscope screen.  Click "
"button '1', and you will see the 'Select Channel Source' dialog as shown in "
"the following figure. This dialog is very similar to the one used by "
"Halmeter. We would like to look at the signals we defined earlier, so we "
"click on the 'Signals' tab, and the dialog displays all of the signals in "
"the HAL (only two for this example)."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tutorial.adoc:892 src/hal/tutorial.adoc:893
#, no-wrap
msgid "Select Channel Source"
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:893
#, no-wrap
msgid "images/halscope-03.png"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:898
msgid ""
"To choose a signal, just click on it. In this case, we want channel 1 to "
"display the signal 'X-vel'. Click on the Signals tab then click on 'X-vel' "
"and the dialog closes and the channel is now selected."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tutorial.adoc:900 src/hal/tutorial.adoc:901
#, no-wrap
msgid "Select Signal"
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:901
#, no-wrap
msgid "images/halscope-04.png"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:908
msgid ""
"The channel 1 button is pressed in, and channel number 1 and the name 'X-"
"vel' appear below the row of buttons. That display always indicates the "
"selected channel - you can have many channels on the screen, but the "
"selected one is highlighted, and the various controls like vertical position "
"and scale always work on the selected one."
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:911
#, no-wrap
msgid "images/halscope-05.png"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:919
msgid ""
"To add a signal to channel 2, click the '2' button. When the dialog pops up, "
"click the 'Signals' tab, then click on 'Y-vel'. We also want to look at the "
"square and triangle wave outputs. There are no signals connected to those "
"pins, so we use the 'Pins' tab instead. For channel 3, select `siggen.0."
"triangle` and for channel 4, select `siggen.0.square`."
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:920
#, no-wrap
msgid "Capturing our first waveforms"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:934
msgid ""
"Now that we have several probes hooked to the HAL, it's time to capture some "
"waveforms. To start the scope, click the 'Normal' button in the 'Run Mode' "
"section of the screen (upper right). Since we have a 4000 sample record "
"length, and are acquiring 1000 samples per second, it will take halscope "
"about 2 seconds to fill half of its buffer.  During that time a progress bar "
"just above the main screen will show the buffer filling. Once the buffer is "
"half full, the scope waits for a trigger. Since we haven't configured one "
"yet, it will wait forever. To manually trigger it, click the 'Force' button "
"in the 'Trigger' section at the top right. You should see the remainder of "
"the buffer fill, then the screen will display the captured waveforms. The "
"result will look something like the following figure."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tutorial.adoc:936 src/hal/tutorial.adoc:937
#, no-wrap
msgid "Captured Waveforms"
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:937
#, no-wrap
msgid "images/halscope-06.png"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:943
msgid ""
"The 'Selected Channel' box at the bottom tells you that the purple trace is "
"the currently selected one, channel 4, which is displaying the value of the "
"pin `siggen.0.square`. Try clicking channel buttons 1 through 3 to highlight "
"the other three traces."
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:944
#, no-wrap
msgid "Vertical Adjustments"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:954
msgid ""
"The traces are rather hard to distinguish since all four are on top of each "
"other. To fix this, we use the 'Vertical' controls in the box to the right "
"of the screen. These controls act on the currently selected channel. When "
"adjusting the gain, notice that it covers a huge range - unlike a real "
"scope, this one can display signals ranging from very tiny (pico-units) to "
"very large (Tera-units). The position control moves the displayed trace up "
"and down over the height of the screen only. For larger adjustments the "
"offset button should be used."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tutorial.adoc:956 src/hal/tutorial.adoc:957
#, no-wrap
msgid "Vertical Adjustment"
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:957
#, no-wrap
msgid "images/halscope-07.png"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:963
msgid ""
"The large _Selected Channel_ button at the bottom indicates that channel 1 "
"is currently selected channel and that it matches the _X-vel_ signal.  Try "
"clicking on the other channels to put their traces in evidence and to be "
"able to move them with the _Pos_ cursor."
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:964
#, no-wrap
msgid "Triggering"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:972
msgid ""
"Using the 'Force' button is a rather unsatisfying way to trigger the scope. "
"To set up real triggering, click on the 'Source' button at the bottom right. "
"It will pop up the 'Trigger Source' dialog, which is simply a list of all "
"the probes that are currently connected. Select a probe to use for "
"triggering by clicking on it. For this example we will use channel 3, the "
"triangle wave as shown in the following figure."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tutorial.adoc:974 src/hal/tutorial.adoc:975
#, no-wrap
msgid "Trigger Source Dialog"
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:975
#, no-wrap
msgid "images/halscope-08.png"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:992
msgid ""
"After setting the trigger source, you can adjust the trigger level and "
"trigger position using the sliders in the 'Trigger' box along the right "
"edge. The level can be adjusted from the top to the bottom of the screen, "
"and is displayed below the sliders. The position is the location of the "
"trigger point within the overall record. With the slider all the way down, "
"the trigger point is at the end of the record, and halscope displays what "
"happened before the trigger point. When the slider is all the way up, the "
"trigger point is at the beginning of the record, displaying what happened "
"after it was triggered. The trigger point is visible as a vertical line in "
"the progress box above the screen. The trigger polarity can be changed by "
"clicking the button just below the trigger level display. It will then "
"become _descendant_.  Note that changing the trigger position stops the "
"scope once the position has been adjusted, you relaunch the scope by "
"clicking on the _Normal_ button of _Run mode_ the group."
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:995
msgid ""
"Now that we have adjusted the vertical controls and triggering, the scope "
"display looks something like the following figure."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tutorial.adoc:997 src/hal/tutorial.adoc:998
#, no-wrap
msgid "Waveforms with Triggering"
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:998
#, no-wrap
msgid "images/halscope-09.png"
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:1000
#, no-wrap
msgid "Horizontal Adjustments"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:1012
msgid ""
"To look closely at part of a waveform, you can use the zoom slider at the "
"top of the screen to expand the waveforms horizontally, and the position "
"slider to determine which part of the zoomed waveform is visible.  However, "
"sometimes simply expanding the waveforms isn't enough and you need to "
"increase the sampling rate.  For example, we would like to look at the "
"actual step pulses that are being generated in our example.  Since the step "
"pulses may be only 50&thinsp;µs long, sampling at 1&thinsp;kHz isn't fast "
"enough.  To change the sample rate, click on the button that displays the "
"number of samples and sample rate to bring up the 'Select Sample Rate' "
"dialog figure.  For this example, we will click on the 50&thinsp;µs thread, "
"'fast', which gives us a sample rate of about 20&thinsp;kHz.  Now instead of "
"displaying about 4 seconds worth of data, one record is 4000 samples at "
"20&thinsp;kHz, or about 0.20&thinsp;seconds."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tutorial.adoc:1014 src/hal/tutorial.adoc:1015
#, no-wrap
msgid "Sample Rate Dialog"
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:1015
#, no-wrap
msgid "images/halscope-10.png"
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:1017
#, no-wrap
msgid "More Channels"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:1033
msgid ""
"Now let's look at the step pulses.  Halscope has 16 channels, but for this "
"example we are using only 4 at a time.  Before we select any more channels, "
"we need to turn off a couple.  Click on the channel 2 button, then click the "
"'Chan Off' button at the bottom of the 'Vertical' box.  Then click on "
"channel 3, turn if off, and do the same for channel 4.  Even though the "
"channels are turned off, they still remember what they are connected to, and "
"in fact we will continue to use channel 3 as the trigger source.  To add new "
"channels, select channel 5, and choose pin `stepgen.0.dir`, then channel 6, "
"and select `stepgen.0.step`.  Then click run mode 'Normal' to start the "
"scope, and adjust the horizontal zoom to 5&thinsp;ms per division.  You "
"should see the step pulses slow down as the velocity command (channel 1) "
"approaches zero, then the direction pin changes state and the step pulses "
"speed up again.  You might want toincrease the gain on channel 1 to about 20 "
"milli per division to better see the change in the velocity command.  The "
"result should look like the following figure."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/hal/tutorial.adoc:1035 src/hal/tutorial.adoc:1036
#, no-wrap
msgid "Step Pulses"
msgstr ""

#. type: Target for macro image
#: src/hal/tutorial.adoc:1036
#, no-wrap
msgid "images/halscope-11.png"
msgstr ""

#. type: Title ===
#: src/hal/tutorial.adoc:1038
#, no-wrap
msgid "More samples"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:1043
msgid ""
"If you want to record more samples at once, restart realtime and load "
"halscope with a numeric argument which indicates the number of samples you "
"want to capture."
msgstr ""

#. type: delimited block -
#: src/hal/tutorial.adoc:1046
#, no-wrap
msgid "halcmd loadusr halscope 80000\n"
msgstr ""

#. type: Plain text
#: src/hal/tutorial.adoc:1053
msgid ""
"If the 'scope_rt' component was not already loaded, halscope will load it "
"and request 80000 total samples, so that when sampling 4 channels at a time "
"there will be 20000 samples per channel.  (If 'scope_rt' was already loaded, "
"the numeric argument to halscope will have no effect)."
msgstr ""

#. type: Title =
#: src/hal/twopass.adoc:5
#, no-wrap
msgid "HAL TWOPASS"
msgstr ""

#. type: Title ==
#: src/hal/twopass.adoc:13
#, no-wrap
msgid "TWOPASS"
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:19
msgid ""
"LinuxCNC 2.5 supports TWOPASS processing of LinuxCNC configuration files "
"that can help in the modularization and readability of LinuxCNC files.  "
"(LinuxCNC files are specified in an LinuxCNC INI file in the LinuxCNC stanza "
"as [LinuxCNC]HALFILE=filename)."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:25
msgid ""
"Normally, a set of one or more LinuxCNC configuration files must use a "
"single, unique loadrt line to load a kernel module that may handle multiple "
"instances of a component.  For example, if you use a two input AND gate "
"component (and2) in three different places in your setup, you would need to "
"have a single line somewhere to specify:"
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:29
#, no-wrap
msgid "loadrt and2 count=3\n"
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:32
msgid "resulting in components and2.0, and2.1, and2.2."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:35
msgid ""
"Configurations are more readable if you specify with the names=option for "
"components where it is supported, e.g.,:"
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:39
#, no-wrap
msgid "loadrt and2 names=aa,ab,ac\n"
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:42
msgid "resulting in components aa,ab,ac."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:47
msgid ""
"It can be a maintenance problem to keep track of the components and their "
"names since when you add (or remove) a component, you must find and update "
"the single loadrt directive applicable to the component."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:50
msgid ""
"TWOPASS processing is enabled by including an INI file parameter in the "
"[HAL] section:"
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:54 src/hal/twopass.adoc:144
#, no-wrap
msgid "[HAL]\n"
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:56
#, no-wrap
msgid "TWOPASS = anystring\n"
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:60
msgid ""
"Where \"anystring\" can be any non-null string.  With this setting, you can "
"have multiple specifications like:"
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:68
#, no-wrap
msgid ""
"loadrt and2 names=aa\n"
"...\n"
"loadrt and2 names=ab,ac\n"
"...\n"
"loadrt and2 names=ad\n"
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:73
msgid ""
"These commands can appear in different HAL files. The HAL files are "
"processed in the order of their appearance in the INI file, in multiple "
"HALFILE assignments."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:77
msgid ""
"The TWOPASS option can be specified with options to add output for debugging "
"(verbose) and to prevent deletion of temporary files (nodelete).  The "
"options are separated with commas."
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:83
#, no-wrap
msgid ""
"[HAL]\n"
"TWOPASS = on,verbose,nodelete\n"
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:89
msgid ""
"With TWOPASS processing, all [HAL]HALFILES are first read and multiple "
"appearances of loadrt directives for each module are accumulated.  User "
"components (loadusr) are loaded in order but no other LinuxCNC commands are "
"executed in the initial pass."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:93
msgid ""
"User components should use the wait (-W) option to ensure the component is "
"ready before other commands are executed."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:98
msgid ""
"After the initial pass, the realtime modules are loaded (loadrt)  "
"automatically with a number equal to the total number when using the "
"'count=' option or with all of the individual names specified when using the "
"'names=' option."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:104
msgid ""
"A second pass is then made to execute all of the other LinuxCNC instructions "
"specified in the HALFILES.  The addf commands that associate a component's "
"functions with thread execution are executed in the order of appearance with "
"other commands during this second pass."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:107
msgid ""
"While you can use either the 'count=' or 'names=' options, they are mutually "
"exclusive -- only one type can be specified for a given module."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:114
msgid ""
"TWOPASS processing is most effective when using the 'names=' option.  This "
"option allows you to provide unique names that are mnemonic or otherwise "
"relevant to the configuration.  For example, if you use a derivative "
"component to estimate the velocities and accelerations on each (x,y,z) "
"coordinate, using the 'count=' method will give arcane component names like "
"ddt.0, ddt.1, ddt.2, etc."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:116
msgid "Alternatively, using the 'names=' option like:"
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:122
#, no-wrap
msgid ""
"loadrt ddt names=xvel,yvel,zvel\n"
"...\n"
"loadrt ddt names=xaccel,yaccel,zaccel\n"
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:125
msgid ""
"results in components sensibly named xvel, yvel, zvel, xaccel, yaccel, "
"zaccel."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:129
msgid ""
"Many comps supplied with the distribution are created with the halcompile "
"utility and support the 'names=' option. These include the common logic "
"components that are the glue of many LinuxCNC configurations."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:135
msgid ""
"User-created comps that use the halcompile utility automatically support the "
"names= option as well.  In addition to comps generated with the halcompile "
"utility, numerous other comps support the names=option.  Comps that support "
"names= option include: at_pid, encoder, encoder_ratio, pid, siggen, and "
"sim_encoder."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:139
msgid ""
"Two-step processing occurs before the GUI is loaded. When using a "
"[HAL]POSTGUI_HALFILE, it is convenient to place all the [HAL]POSTGUI_HALFILE "
"loadrt declarations for the necessary components in a preloaded HAL file."
msgstr ""

#. type: Block title
#: src/hal/twopass.adoc:140
#, no-wrap
msgid "Example of a HAL section when using a POSTGUI_HALFILE"
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:151
#, no-wrap
msgid ""
"TWOPASS = on\n"
"HALFILE = core_sim.hal\n"
"HALFILE = sim_spindle_encoder.hal\n"
"HALFILE = axis_manualtoolchange.hal\n"
"HALFILE = simulated_home.hal\n"
"HALFILE = load_for_postgui.hal <- loadrt lines for components in postgui.hal\n"
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:154
#, no-wrap
msgid ""
"POSTGUI_HALFILE = postgui.hal\n"
"HALUI = halui\n"
msgstr ""

#. type: Title ==
#: src/hal/twopass.adoc:156
#, no-wrap
msgid "Post GUI"
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:163
msgid ""
"Some GUIs support HAL files that are processed after the GUI is started in "
"order to connect LinuxCNC pins that are created by the GUI.  When using a "
"postgui HAL file with TWOPASS processing, include all loadrt items for "
"components added by postgui HAL files in a separate HAL file that is "
"processed before the GUI.  The addf commands can also be included in the "
"file."
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:175
#, no-wrap
msgid ""
"[HAL]\n"
"TWOPASS = on\n"
"HALFILE = file_1.hal\n"
"...\n"
"HALFILE = file_n.hal\n"
"HALFILE = file_with_all_loads_for_postgui.hal\n"
"...\n"
"POSTGUI_HALFILE = the_postgui_file.hal\n"
msgstr ""

#. type: Title ==
#: src/hal/twopass.adoc:177
#, no-wrap
msgid "Excluding .hal files"
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:185
msgid ""
"TWOPASS processing converts '.hal' files to equivalent '.tcl' files and uses "
"haltcl to find loadrt and addf commands in order to accumulate and "
"consolidate their usage.  Loadrt parameters that conform to the simple "
"'names=' (or 'count=') parameters accepted by the HAL Component Generator "
"('halcompile') are expected.  More complex parameter items included in "
"specialized LinuxCNC components may not be handled properly."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:191
#, no-wrap
msgid ""
"A '.hal' file may be excluded from TWOPASS processing by including a magic\n"
"comment line anywhere in the '.hal' file.   The magic comment line must begin\n"
"with the string: '#NOTWOPASS'.  Files specified with this magic comment are\n"
"sourced by halcmd using the '-k' (keep going if failure) and '-v' (verbose)\n"
"options.\n"
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:194
msgid ""
"This exclusion provision can be used to isolate problems or for loading any "
"special LinuxCNC component that does not require or benefit from TWOPASS "
"processing."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:198
msgid ""
"Ordinarily, the loadrt ordering of realtime components is not critical, but "
"loadrt ordering for special components can be enforced by placing the such "
"loadrt directives in an excluded file."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:203
msgid ""
"While the order of loadrt directives is not usually critical, ordering of "
"addf directives is often very important for proper operation of servo loop "
"components."
msgstr ""

#. type: Block title
#: src/hal/twopass.adoc:204
#, no-wrap
msgid "Excluded '.hal' file example"
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:210
#, no-wrap
msgid ""
"$ cat twopass_excluded.hal\n"
"# The following magic comment causes this file to\n"
"# be excluded from twopass processing:\n"
"# NOTWOPASS\n"
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:214
#, no-wrap
msgid ""
"# debugging component with complex options:\n"
"loadrt mycomponent parm1=\"abc def\" parm2=ghi\n"
"show pin mycomponent\n"
msgstr ""

#. type: delimited block -
#: src/hal/twopass.adoc:218
#, no-wrap
msgid ""
"# ordering special components\n"
"loadrt component_1\n"
"loadrt component_2\n"
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:228
msgid ""
"Case and whitespace within the magic comment are ignored.  The loading of "
"components that use 'names=' or 'count=' parameters (typically built by "
"halcompile) should not be used in excluded files as that would eliminate the "
"benefits of TWOPASS processing.  The LinuxCNC commands that create signals "
"(net) and commands that establish execution order (addf) should not be "
"placed in excluded files.  This is especially true for addf commands since "
"their ordering may be important."
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:233
msgid ""
"Examples of TWOPASS usage for a simulator are included in the directories:"
msgstr ""

#. type: Plain text
#: src/hal/twopass.adoc:236
#, no-wrap
msgid ""
"  configs/sim/axis/twopass/\n"
"  configs/sim/axis/simtcl/\n"
msgstr ""

#. type: Title =
#: src/install/latency-test.adoc:5
#, no-wrap
msgid "Latency Testing(((Latency Testing)))"
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:12
msgid ""
"This test is the first test that should be performed on a PC to see if it is "
"able to drive a CNC machine."
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:19
msgid ""
"Latency is how long it takes the PC to stop what it is doing and respond to "
"an external request. For LinuxCNC the request is BASE_THREAD that makes the "
"periodic 'heartbeat' that serves as a timing reference for the step pulses. "
"The lower the latency, the faster you can run the heartbeat, and the faster "
"and smoother the step pulses will be."
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:24
msgid ""
"Latency is far more important than CPU speed.  A lowly Pentium II that "
"responds to interrupts within 10 microseconds each and every time can give "
"better results than the latest and fastest P4 Hyperthreading beast."
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:30
msgid ""
"The CPU isn't the only factor in determining latency.  Motherboards, video "
"cards, USB ports, and a number of other things can hurt the latency.  The "
"best way to find out what you are dealing with is to run the RTAI latency "
"test."
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:37
msgid ""
"Generating step pulses in software has one very big advantage - it's free.  "
"Just about every PC has a parallel port that is capable of outputting step "
"pulses that are generated by the software.  However, software step pulses "
"also have some disadvantages:"
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:39 src/motion/tweaking-steppers.adoc:15
msgid "limited maximum step rate"
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:40 src/motion/tweaking-steppers.adoc:16
msgid "jitter in the generated pulses"
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:41 src/motion/tweaking-steppers.adoc:17
msgid "loads the CPU"
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:47
msgid ""
"The best way to find out how well your PC will lrun LinuxCNC is to run the "
"HAL latency test.  To run the test, open a terminal window (in Ubuntu, from "
"Applications → Accessories → Terminal)  and run the following command:"
msgstr ""

#. type: delimited block -
#: src/install/latency-test.adoc:50
#, no-wrap
msgid "latency-test\n"
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:55
msgid ""
"This will start the latency test with a base-thread period of 25uS and a "
"servo-thread period of 1mS. The period times may be specified on the command "
"line:"
msgstr ""

#. type: delimited block -
#: src/install/latency-test.adoc:58
#, no-wrap
msgid "latency-test 50000 1000000\n"
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:62
msgid ""
"This will start the latency test with a base-thread period of 50uS and a "
"servo-thread period of 1mS."
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:64
msgid "For available options, on the command line enter:"
msgstr ""

#. type: delimited block -
#: src/install/latency-test.adoc:67
#, no-wrap
msgid "latency-test -h\n"
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:70
msgid "After stating a latency test you should see something like this:"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/install/latency-test.adoc:71 src/install/latency-test.adoc:72
#, no-wrap
msgid "HAL Latency Test"
msgstr ""

#. type: Target for macro image
#: src/install/latency-test.adoc:72
#, no-wrap
msgid "../config/images/latency-test_en.png"
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:80
msgid ""
"While the test is running, you should 'abuse' the computer.  Move windows "
"around on the screen. Surf the web. Copy some large files around on the "
"disk. Play some music.  Run an OpenGL program such as glxgears.  The idea is "
"to put the PC through its paces while the latency test checks to see what "
"the worst case numbers are."
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:83
msgid "Do not run LinuxCNC or Stepconf while the latency test is running."
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:87
msgid ""
"The important number for software stepping is the 'max jitter' of the base "
"thread.  In the example above, that is 6693 nanoseconds, or 6.693 "
"microseconds.  Record this number, and enter it in Stepconf when it is "
"requested."
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:95
msgid ""
"In the example above, latency-test only ran for a few seconds.  You should "
"run the test for at least several minutes; sometimes the worst case latency "
"doesn't happen very often, or only happens when you do some particular "
"action. For instance, one Intel motherboard worked pretty well most of the "
"time, but every 64 seconds it had a very bad 300 us latency. Fortunately "
"that was fixable, see http://wiki.linuxcnc.org/cgi-bin/wiki.pl?"
"FixingSMIIssues"
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:107
msgid ""
"So, what do the results mean? If your Max Jitter number is less than about "
"15-20 microseconds (15000-20000 nanoseconds), the computer should give very "
"nice results with software stepping. If the max latency is more like 30-50 "
"microseconds, you can still get good results, but your maximum step rate "
"might be a little disappointing, especially if you use microstepping or have "
"very fine pitch leadscrews. If the numbers are 100 us or more (100,000 "
"nanoseconds), then the PC is not a good candidate for software stepping. "
"Numbers over 1 millisecond (1,000,000 nanoseconds) mean the PC is not a good "
"candidate for LinuxCNC, regardless of whether you use software stepping or "
"not."
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:114
msgid ""
"If you get high numbers, there may be ways to improve them. Another PC had "
"very bad latency (several milliseconds) when using the onboard video. But a "
"$5 used video card solved the problem.  LinuxCNC does not require bleeding "
"edge hardware."
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:117
msgid ""
"For more information on stepper tuning see the <<cha:stepper-tuning,Stepper "
"Tuning>> Chapter."
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:120
#, no-wrap
msgid ""
"*Additional command line tools are available for examining latency\n"
"when LinuxCNC is not running.*\n"
msgstr ""

#. type: Title ==
#: src/install/latency-test.adoc:121
#, no-wrap
msgid "Latency Plot"
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:126
msgid ""
"latency-plot makes a strip chart recording for a base and a servo thread.  "
"It may be useful to see spikes in latency when other applications are "
"started or used. Usage:"
msgstr ""

#. type: delimited block -
#: src/install/latency-test.adoc:129
#, no-wrap
msgid "latency-plot --help\n"
msgstr ""

#. type: delimited block -
#: src/install/latency-test.adoc:133
#, no-wrap
msgid ""
"Usage:\n"
"      latency-plot --help | -?\n"
"      latency-plot --hal [Options]\n"
msgstr ""

#. type: delimited block -
#: src/install/latency-test.adoc:140
#, no-wrap
msgid ""
"Options:\n"
"      --base nS  (base  thread interval, default:   25000)\n"
"      --servo nS (servo thread interval, default: 1000000)\n"
"      --time mS  (report interval, default: 1000)\n"
"      --relative (relative clock time (default))\n"
"      --actual   (actual clock time)\n"
msgstr ""

#. type: Block title
#: src/install/latency-test.adoc:142
#, no-wrap
msgid "`latency-plot` Window"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/install/latency-test.adoc:143
#, no-wrap
msgid "latency-plot Window"
msgstr ""

#. type: Target for macro image
#: src/install/latency-test.adoc:143
#, no-wrap
msgid "../config/images/latency-plot.png"
msgstr ""

#. type: Title ==
#: src/install/latency-test.adoc:145
#, no-wrap
msgid "Latency Histogram"
msgstr ""

#. type: Plain text
#: src/install/latency-test.adoc:149
msgid ""
"latency-histogram displays a histogram of latency (jitter) for a base and "
"servo thread."
msgstr ""

#. type: delimited block -
#: src/install/latency-test.adoc:154
#, no-wrap
msgid ""
"Usage:\n"
"   latency-histogram --help | -?\n"
"   latency-histogram [Options]\n"
msgstr ""

#. type: delimited block -
#: src/install/latency-test.adoc:168
#, no-wrap
msgid ""
"Options:\n"
"  --base      nS   (base  thread interval, default:   25000, min:  5000)\n"
"  --servo     nS   (servo thread interval, default: 1000000, min: 25000)\n"
"  --bbinsize  nS   (base  bin size,  default: 100\n"
"  --sbinsize  nS   (servo bin size, default: 100\n"
"  --bbins     n    (base  bins, default: 200\n"
"  --sbins     n    (servo bins, default: 200\n"
"  --logscale  0|1  (y axis log scale, default: 1)\n"
"  --text      note (additional note, default: \"\" )\n"
"  --show           (show count of undisplayed bins)\n"
"  --nobase         (servo thread only)\n"
"  --verbose        (progress and debug)\n"
"  --nox            (no gui, display elapsed,min,max,sdev for each thread)\n"
msgstr ""

#. type: delimited block -
#: src/install/latency-test.adoc:176
#, no-wrap
msgid ""
"Notes:\n"
"  Linuxcnc and Hal should not be running, stop with halrun -U.\n"
"  Large number of bins and/or small binsizes will slow updates.\n"
"  For single thread, specify --nobase (and options for servo thread).\n"
"  Measured latencies outside of the +/- bin range are reported\n"
"  with special end bars.  Use --show to show count for\n"
"  the off-chart [pos|neg] bin\n"
msgstr ""

#. type: Block title
#: src/install/latency-test.adoc:178
#, no-wrap
msgid "`latency-histogram` Window"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/install/latency-test.adoc:179
#, no-wrap
msgid "latency-histogram Window"
msgstr ""

#. type: Target for macro image
#: src/install/latency-test.adoc:179
#, no-wrap
msgid "../config/images/latency-histogram.png"
msgstr ""

#. type: Title =
#: src/integrator/steppers.adoc:5
#, no-wrap
msgid "Stepper Information"
msgstr ""

#. type: Title ==
#: src/integrator/steppers.adoc:7
#, no-wrap
msgid "Stepper Motor Operation"
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:12
msgid ""
"Stepper motors operate by sequentially energising and de-energising several "
"coils surrounding the rotor in such a way that the shaft is magnetically "
"forced to rotate around in discrete steps. Steps of 0.9 - 1.8 degrees are "
"quite common, giving 400 - 200 steps per full revolution of the shaft."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:19
msgid ""
"As in real life, nothing can change from one state to another with "
"absolutely no time delay. In the case of the stepper motor, the current "
"passing through each coil, and thus the magnetic field that pulls the rotor "
"around to each step of rotation takes some time to take effect. This is due "
"to the coil having inductance (expressed in Henries, abbreviated to the "
"letter H) which has a natural tendency to resist the flow of a rapidly "
"changing current. More coil inductance results in a slower rate of current "
"change and thus a slower rate of magnetic field expansion and contraction."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:25
msgid ""
"The maximum torque that the stepper motor can achieve is when the motor is "
"stationary with one winding energised.  This figure may be quoted on a "
"stepper motor datasheet as the 'holding torque'. As the rate at which each "
"coil is energised and de-energised increases to induce rotation in the "
"shaft, the time that each coil can exert its full magnetic attraction on the "
"rotor reduces, thereby reducing the overall torque. This relationship "
"between speed and torque is largely inversely proportional."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:30
msgid ""
"In the below example, the charging time for three coils is shown when the "
"applied voltage is stepped from 0V to 40V. While all three coils can easily "
"reach the full current limit of 5 amps, the time taken varies for each coil. "
"The 4 milli-Henry coil (blue trace) takes twice as long to reach full "
"current than the 2mH coil (green trace), and the 8mH (red trace) coil takes "
"twice as long again:"
msgstr ""

#. type: Target for macro image
#: src/integrator/steppers.adoc:31
#, no-wrap
msgid "images/inductance-step-response.png"
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:37
msgid ""
"If the rate at which step changes are applied to the coils is significantly "
"shorter than the rise time, it's easy to see that the winding has less time "
"to attain full magnetic attraction on the rotor, and thus maximum torque is "
"curtailed. In the below example the 2mH coil can achieve the full 5A limit "
"before the step voltage is removed, but the 4mH and 8mH coils cannot:"
msgstr ""

#. type: Target for macro image
#: src/integrator/steppers.adoc:38
#, no-wrap
msgid "images/inductance-pulse-response-slow-charge.png"
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:45
msgid ""
"The accepted way of improving motor speed while maintaining torque is to "
"increase the speed at which the magnetic field of the motor coils can expand "
"and collapse. The easiest way to accomplish this is to increase the supply "
"voltage to force the current in each winding to rise and fall much more "
"rapidly. A quicker magnetising time equates to faster step rates while "
"improving torque at higher speeds, both of which are obviously desirable in "
"a CNC system."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:48
msgid ""
"Using the same example as above, but increasing the step voltage to 80V it "
"can be seen that all three coils can now reach the 5A maximum quite easily:"
msgstr ""

#. type: Target for macro image
#: src/integrator/steppers.adoc:49
#, no-wrap
msgid "images/inductance-pulse-response-fast-charge.png"
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:54
msgid ""
"However, careful management of a higher drive voltage is required, as a "
"higher voltage will increase current flowing in each coil with a "
"corresponding increase in temperature of the winding. Excessive temperature "
"rise in the winding will lead to eventual overheating and failure of the "
"motor."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:58
msgid ""
"In most stepper-based CNC systems the voltage of the supply feeding the "
"stepper driver is several orders of magnitude greater than the voltage of "
"the motor itself. A typical NEMA23 stepper motor may have a rating of only a "
"handful of volts, yet the power supply and driver could be operating at "
"48&thinsp;VDC or more."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:66
msgid ""
"Nearly all modern stepper motor drivers on the market today are constant-"
"current types. That is, the current being applied to each winding is fixed "
"irrespective of how much voltage is being applied. Most drivers accomplish "
"this by monitoring the current being drawn through the motor windings and "
"rapidly switching the outputs on and off at a very high frequency to "
"maintain this current. Depending on the drivers being used, it may even be "
"possible to hear this high frequency whistling in the motors themselves when "
"stationary. Because the voltage is rapidly switched on and off to maintain "
"the winding current at an approximate fixed value, these types of drivers "
"are also known as 'chopper drive'."
msgstr ""

#. type: Title ==
#: src/integrator/steppers.adoc:67
#, no-wrap
msgid "Selecting a Stepper Power Supply"
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:76
msgid ""
"While a higher voltage is directly related to more speed and torque, "
"obviously there comes a limit where increasing supply voltage is no longer "
"beneficial. The first limitation to the maximum power supply voltage is "
"likely to be what the stepper driver itself is capable of withstanding. This "
"value should be provided in the datasheet for the stepper driver, and "
"exceeding this voltage will result in the destruction of the driver. Ideally "
"the power supply voltage should be chosen with a degree of headroom that "
"falls under this maximum voltage limit of around 10%. If, for example a "
"stepper driver has a V~max~ rating of 80&thinsp;VDC, the maximum power "
"supply voltage should be limited to 72&thinsp;VDC."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:82
msgid ""
"As mentioned above, excessive motor supply voltage also leads to excessive "
"heat rise in the motor windings which can lead to eventual failure of the "
"motor through overheating. A commonly used equation for providing a "
"guideline in determining the maximum voltage to prevent excessive heat rise "
"is to take the square-root of the winding inductance quoted in the motor "
"datasheet (expressed in mill-Henries) and multiply by 32. For example, "
"choosing a stepper with a coil inductance of 4mH will result in a maximum "
"power supply voltage of 32 x SQRT (4) = 64&thinsp;VDC."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:88
msgid ""
"Many stepper motor datasheets will also provide speed/torque curves, often "
"plotted using different supply voltages. By studying the graphs it may be "
"determined that increasing the supply voltage by a factor of two will not "
"result in a corresponding improvement in speed/torque by the same degree. If "
"there is little to be gained in running a stepper motor at 64&thinsp;VDC, "
"this may help in narrowing down the proposed power supply to 32&thinsp;VDC "
"which will also help minimise excessive heat rise in the motor windings."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:96
msgid ""
"The other factor to consider is the current rating of the power supply. This "
"is based from the motor's winding current ratings and whether the motor "
"windings are wired in series or parallel, both of which should be listed in "
"the motor's datasheet. A good rule of thumb is to size the power supply "
"current rating at 2/3 of the rated phase current of the stepper motor if the "
"windings are in parallel, or 1/3 of the rated current if wired in series.  "
"Thus, for a stepper motor rated at 4&thinsp;A wired in parallel, the power "
"supply needs to have a current rating of at least 2.7&thinsp;A, or "
"1.3&thinsp;A if wired in series.  The total current rating of the complete "
"system is then the sum of all stepper motors' current requirements."
msgstr ""

#. type: Title ==
#: src/integrator/steppers.adoc:97
#, no-wrap
msgid "Resonance"
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:106
msgid ""
"Motor resonance occurs when the rate at which the steps are applied to the "
"windings matches the natural frequency of the motor itself. Applying steps "
"for a prolonged period of time at this rate results in the torque dropping "
"dramatically, and the motor may stall or even rotate in random directions. "
"Some stepper motor datasheets provide plots of the torque/speed relationship "
"and show a dip in the graph where resonance is likely to occur. It should be "
"noted that this resonant peak provided in the datasheet is only for the "
"motor itself - as soon as the motor is coupled to other components (ie, "
"installed in a CNC system) the resonant frequency may be altered, or even "
"multiple new resonances introduced."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:109
msgid ""
"Several methods exist to help control the effects of resonance, all with "
"varying degrees of complexity, effectiveness and side effects:"
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:112
msgid ""
"Microstepping can help reduce resonance by using smaller step changes in "
"current between each step.  These smaller step changes cause less ringing in "
"the motor and windings and thus cause less excitation at the point of "
"resonance."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:114
msgid ""
"Ensuring the motor is never operated at a particular frequency for a "
"sustained period is a very basic method of reducing resonance, always "
"accelerating or decelerating through the resonant peak."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:116
msgid ""
"Increasing inertial load will damp unwanted resonances at the expense of "
"some torque and potentially some accuracy.  Elastomeric motor mounts, shaft "
"couplings or bearing mounts can be employed."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:119
msgid ""
"More advanced stepper motor drives may have the ability to switch between "
"stepping modes such that the resonant peak is managed at certain rates of "
"operation.  Other systems exist to place electrical load on the windings, "
"which has a similar effect to mechanical damping, above."
msgstr ""

#. type: Title ==
#: src/integrator/steppers.adoc:120
#, no-wrap
msgid "Microstepping"
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:126
msgid ""
"A stepper motor operating with each winding being fully energised in a "
"sequential fashion is operating in full-step mode. That is, the maximum "
"rotation resolution possible for that motor is the same as the number of "
"whole steps that motor is manufactured to perform at (eg, 200 steps per "
"revolution for a 1.8 degree/step motor).  As each winding is energised the "
"rotor clocks around fully from one detent to the next."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:131
msgid ""
"Additional rotational resolution from a stepper motor can be obtained by "
"performing microstepping, whereby the current being driven into each winding "
"can essentially be 'ramped' in discrete intermediate steps. This then causes "
"the rotor to gradually straddle across each rotational detent rather than "
"making the full jump from one step to the next."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:138
msgid ""
"Microstepping is commonly performed in multiples of 2 (4x, 8x, 16x, 32x "
"etc). For example, a drive set to 4x microstepping will divide each step "
"into four discrete current levels in the motor windings, thus affording an "
"improvement in rotational resolution by a factor of four. This obviously "
"means that for a typical step/direction control interface there will need to "
"be four times as many step pulses generated to make the motor move the same "
"amount had it been operating in full-step mode. To make the motor rotate at "
"the same speed the rate at which pulses need to be applied to the drive also "
"needs to be four times as fast."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:143
msgid ""
"At low rotational speeds, microstepping actually results in slightly higher "
"torque than when full stepping. This is due to the smaller changes in "
"current between intermediate steps resulting in less energy being wasted "
"exciting natural resonances in the motor. As RPM increases however, torque "
"tends to fall off at a similar rate as full stepping."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:148
msgid ""
"However, continuing to increase the degree of microstepping will eventually "
"lead to some real-life limitations.  Step pulse generation, particularly "
"when using the parallel port, is limited in frequency. This will inevitably "
"limit the maximum speed at which the drive can be commanded to step at. With "
"high degrees of microstepping this will result in unacceptably slow RPM of "
"the motor."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:159
msgid ""
"Excessively-high rates of microstepping have no real benefit if the "
"resultant accuracy is too small to be mechanically useful. A 1.8 degree per "
"step motor running at 16x microstepping is theoretically capable of 0.1125 "
"degrees per step. Coupled with a 20TPI leadscrew this should result in a "
"positional resolution of 0.000016” or 0.0004&thinsp;mm. In reality it is "
"incredibly difficult to achieve such fine degrees of control. All components "
"in the CNC system will contain tolerances and countering forces (backlash in "
"leadscrews, flex in gantries, runout in the spindle and cutting tool, static "
"friction in the stepper motor itself, stepper detent error etc) that will "
"render such small amounts of resolution completely meaningless. In practice, "
"microstepping at rates in excess of 4x or 8x on a CNC machine fitted with "
"leadscrews serves little purpose. In some cases it may even be more "
"beneficial to run at lower degrees of microstepping or even full steps, and "
"operate the stepper motor through a gear reduction to obtain the necessary "
"resolution and torque gains."
msgstr ""

#. type: Title ==
#: src/integrator/steppers.adoc:160
#, no-wrap
msgid "Open and Closed Loop"
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:168
msgid ""
"In the simplest CNC systems employing stepper motors, the host computer and/"
"or stepper driver receives no feedback from the motor that it has achieved "
"the desired outcome when commanded to begin stepping. The assumption by the "
"software, driver and end user is that the motor operated correctly and the "
"axis has moved to the expected new position. A system operating in this "
"fashion is said to be running in 'open loop', where the device at the end of "
"the signal chain (the stepper motor) does not provide any indication to the "
"device at the start of the chain (the computer) that the target was reached."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:175
msgid ""
"A further enhancement to the basic stepper motor is to run the system in a "
"'closed loop'. This is achieved by equipping the stepper motor with a rotary "
"encoder whose positional signal is returned back to a device higher up in "
"the signal chain. In this way the motors' actual position can be compared to "
"the expected position at all times, and the drive parameters adjusted in "
"real time to ensure that the motor does not fall behind. This enables closed "
"loop stepper systems to be able to achieve better speed and torque "
"performance than open loop systems, due to the system constantly "
"compensating for any deviation to the stepper's performance under varying "
"loads."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:181
msgid ""
"Basic systems operating in this fashion may only close the loop between the "
"motor and the driver, leaving the software on the host computer out of the "
"loop. The software issues step/direction pulses to the downstream driver as "
"it would normally when running in open loop. In these situations the drivers "
"usually include an alarm output which signals the software to halt when the "
"load placed on the stepper becomes too great for the driver to compensate "
"without losing steps."
msgstr ""

#. type: Plain text
#: src/integrator/steppers.adoc:185
msgid ""
"More advanced implementations of closed loop operation bring the encoder "
"signal all the way back to the host computer, but require that a much higher "
"hardware and software overhead be installed to manage the encoder feedback "
"and calculation and delivery of drive compensation."
msgstr ""

#. type: Plain text
#: src/integrator/stepper-timing.adoc:7
msgid "This page is for step and direction timing of stepper drives."
msgstr ""

#. type: Plain text
#: src/integrator/stepper-timing.adoc:10
msgid ""
"Please add to this list using the stepconf wizard format and in nanoseconds "
"so it will be uniform."
msgstr ""

#. type: Plain text
#: src/integrator/stepper-timing.adoc:13
msgid "Some boards have know issues see the troubleshooting hardware page"
msgstr ""

#. type: Plain text
#: src/integrator/stepper-timing.adoc:18
msgid ""
"If your unsure about your drive timing start high like 10000 for each and "
"test.  remember that signal conditioning and opto-isolation can increase "
"timing requirements. That's why you need to know the timings for a driver "
"board, not just the step translator chip that is contains."
msgstr ""

#. type: Plain text
#: src/integrator/stepper-timing.adoc:22
msgid ""
"Also notice that some controllers step on the falling edge some on the "
"rising edge. This matters as it will change the timing and will be hard to "
"trace.  make sure LinuxCNC follows what the controller expects."
msgstr ""

#. type: Plain text
#: src/integrator/stepper-timing.adoc:25
msgid ""
"Note 1 if an asterisk precedes the name then the values are not confirmed. "
"If you can confirm the values please do..."
msgstr ""

#. type: Plain text
#: src/integrator/stepper-timing.adoc:28
msgid ""
"Times listed are in nanoseconds (ns). Multiply microseconds (us) by 1000 to "
"get nanoseconds (ns)"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:31
#, no-wrap
msgid "Manufacturer"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:31
#, no-wrap
msgid "Model"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:31
#, no-wrap
msgid "Step Time"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:31
#, no-wrap
msgid "Step Space"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:31
#, no-wrap
msgid "Direction Hold"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:31
#, no-wrap
msgid "Direction Setup"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:31
#, no-wrap
msgid "Steps on"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:31
#, no-wrap
msgid "Spec Sheet"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:32
#, no-wrap
msgid "Chinese Blue Boards"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:32
#, no-wrap
msgid "TB6560 CNC Stepper Motor Driver Controller Board"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:32
#, no-wrap
msgid "150000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:32 src/integrator/stepper-timing.adoc:33
#: src/integrator/stepper-timing.adoc:34 src/integrator/stepper-timing.adoc:36
#: src/integrator/stepper-timing.adoc:37
#, no-wrap
msgid "Falling Edge"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:32
#, no-wrap
msgid "http://hyu68.com/cp8.htm"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:33 src/integrator/stepper-timing.adoc:34
#: src/integrator/stepper-timing.adoc:35 src/integrator/stepper-timing.adoc:36
#: src/integrator/stepper-timing.adoc:37 src/integrator/stepper-timing.adoc:38
#: src/integrator/stepper-timing.adoc:39 src/integrator/stepper-timing.adoc:40
#, no-wrap
msgid "Gecko"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:33
#, no-wrap
msgid "201"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:33 src/integrator/stepper-timing.adoc:34
#: src/integrator/stepper-timing.adoc:36 src/integrator/stepper-timing.adoc:37
#: src/integrator/stepper-timing.adoc:39 src/integrator/stepper-timing.adoc:43
#: src/integrator/stepper-timing.adoc:44 src/integrator/stepper-timing.adoc:49
#: src/integrator/stepper-timing.adoc:63
#, no-wrap
msgid "500"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:33 src/integrator/stepper-timing.adoc:37
#: src/integrator/stepper-timing.adoc:45 src/integrator/stepper-timing.adoc:49
#, no-wrap
msgid "4000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:33 src/integrator/stepper-timing.adoc:34
#: src/integrator/stepper-timing.adoc:36 src/integrator/stepper-timing.adoc:37
#: src/integrator/stepper-timing.adoc:52 src/integrator/stepper-timing.adoc:56
#: src/integrator/stepper-timing.adoc:64
#, no-wrap
msgid "20000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:33 src/integrator/stepper-timing.adoc:36
#, no-wrap
msgid "http://www.geckodrive.com/support/motor-control-manuals/stepper-drives/g201-rev-16.html"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:34
#, no-wrap
msgid "202"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:34
#, no-wrap
msgid "4500"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:34
#, no-wrap
msgid "http://www.geckodrive.com/support/motor-control-manuals/stepper-drives/g202-rev-15.html"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:35
#, no-wrap
msgid "203v"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:35 src/integrator/stepper-timing.adoc:38
#: src/integrator/stepper-timing.adoc:47 src/integrator/stepper-timing.adoc:50
#: src/integrator/stepper-timing.adoc:53 src/integrator/stepper-timing.adoc:86
#, no-wrap
msgid "2000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:35 src/integrator/stepper-timing.adoc:38
#: src/integrator/stepper-timing.adoc:39 src/integrator/stepper-timing.adoc:40
#: src/integrator/stepper-timing.adoc:48 src/integrator/stepper-timing.adoc:50
#: src/integrator/stepper-timing.adoc:51 src/integrator/stepper-timing.adoc:52
#: src/integrator/stepper-timing.adoc:54 src/integrator/stepper-timing.adoc:60
#: src/integrator/stepper-timing.adoc:84
#, no-wrap
msgid "200"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:35 src/integrator/stepper-timing.adoc:38
#: src/integrator/stepper-timing.adoc:39 src/integrator/stepper-timing.adoc:40
#: src/integrator/stepper-timing.adoc:41 src/integrator/stepper-timing.adoc:42
#: src/integrator/stepper-timing.adoc:43 src/integrator/stepper-timing.adoc:44
#: src/integrator/stepper-timing.adoc:45 src/integrator/stepper-timing.adoc:46
#: src/integrator/stepper-timing.adoc:47 src/integrator/stepper-timing.adoc:48
#: src/integrator/stepper-timing.adoc:49 src/integrator/stepper-timing.adoc:50
#: src/integrator/stepper-timing.adoc:51 src/integrator/stepper-timing.adoc:52
#: src/integrator/stepper-timing.adoc:55 src/integrator/stepper-timing.adoc:57
#: src/integrator/stepper-timing.adoc:60 src/integrator/stepper-timing.adoc:64
#: src/integrator/stepper-timing.adoc:65 src/integrator/stepper-timing.adoc:66
#: src/integrator/stepper-timing.adoc:67 src/integrator/stepper-timing.adoc:68
#: src/integrator/stepper-timing.adoc:69 src/integrator/stepper-timing.adoc:70
#: src/integrator/stepper-timing.adoc:71 src/integrator/stepper-timing.adoc:72
#: src/integrator/stepper-timing.adoc:73 src/integrator/stepper-timing.adoc:74
#: src/integrator/stepper-timing.adoc:75 src/integrator/stepper-timing.adoc:76
#: src/integrator/stepper-timing.adoc:77 src/integrator/stepper-timing.adoc:78
#: src/integrator/stepper-timing.adoc:79 src/integrator/stepper-timing.adoc:80
#: src/integrator/stepper-timing.adoc:81 src/integrator/stepper-timing.adoc:82
#: src/integrator/stepper-timing.adoc:83 src/integrator/stepper-timing.adoc:84
#: src/integrator/stepper-timing.adoc:85 src/integrator/stepper-timing.adoc:86
#, no-wrap
msgid "Rising Edge"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:35
#, no-wrap
msgid "http://www.geckodrive.com/support/motor-control-manuals/stepper-drives/g203v-rev-7.html"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:36
#, no-wrap
msgid "201x"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:36
#, no-wrap
msgid "3000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:37
#, no-wrap
msgid "212"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:37
#, no-wrap
msgid "http://www.geckodrive.com/support/motor-control-manuals/stepper-drives/g212-rev-15.html"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:38
#, no-wrap
msgid "213v"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:38
#, no-wrap
msgid "http://www.geckodrive.com/support/motor-control-manuals/stepper-drives/g213v-rev-7.html"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:39
#, no-wrap
msgid "320"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:39
#, no-wrap
msgid "3500"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:39
#, no-wrap
msgid "http://www.geckodrive.com/support/motor-control-manuals/dc-servo-drives/g320-rev-7.html"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:40
#, no-wrap
msgid "320x"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:40 src/integrator/stepper-timing.adoc:43
#: src/integrator/stepper-timing.adoc:44 src/integrator/stepper-timing.adoc:61
#: src/integrator/stepper-timing.adoc:62 src/integrator/stepper-timing.adoc:65
#: src/integrator/stepper-timing.adoc:66 src/integrator/stepper-timing.adoc:67
#: src/integrator/stepper-timing.adoc:68 src/integrator/stepper-timing.adoc:69
#: src/integrator/stepper-timing.adoc:70 src/integrator/stepper-timing.adoc:71
#: src/integrator/stepper-timing.adoc:72 src/integrator/stepper-timing.adoc:78
#: src/integrator/stepper-timing.adoc:79 src/integrator/stepper-timing.adoc:81
#, no-wrap
msgid "2500"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:40
#, no-wrap
msgid "http://www.geckodrive.com/support/motor-control-manuals/dc-servo-drives/g320x-rev-10.html"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:41 src/integrator/stepper-timing.adoc:42
#, no-wrap
msgid "Granite Devices"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:41
#, no-wrap
msgid "VSD-E/XE Evolution"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:41
#, no-wrap
msgid "125"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:41
#, no-wrap
msgid "http://granitedevices.fi/assets/files/vsd-e_160_manual.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:42
#, no-wrap
msgid "VSD-E/XE DualDC"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:42
#, no-wrap
msgid "150"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:42
#, no-wrap
msgid "1850"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:42
#, no-wrap
msgid "http://granitedevices.fi/assets/files/vsd-e_160_dualdc_manual.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:43 src/integrator/stepper-timing.adoc:44
#, no-wrap
msgid "JVL"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:43
#, no-wrap
msgid "SMD41"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:43 src/integrator/stepper-timing.adoc:44
#, no-wrap
msgid "http://www.jvl.dk/files/pdf/lb043gb.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:44
#, no-wrap
msgid "SMD42"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:45 src/integrator/stepper-timing.adoc:46
#, no-wrap
msgid "Linistepper Open Source"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:45
#, no-wrap
msgid "RULMS1"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:45
#, no-wrap
msgid "30000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:45
#, no-wrap
msgid "100000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:45
#, no-wrap
msgid "http://www.piclist.com/techref/io/stepper/linistep/index.htm"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:46
#, no-wrap
msgid "THB6064"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:46
#, no-wrap
msgid "2300"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:46
#, no-wrap
msgid "4600"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:46
#, no-wrap
msgid "http://www.piclist.com/techref/io/stepper/THB6064/index.htm"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:47
#, no-wrap
msgid "*Motion Control"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:47
#, no-wrap
msgid "MSD542"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:47
#, no-wrap
msgid ">1500"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:47
#, no-wrap
msgid "http://www.motioncontrolproducts.com/c2/uploads/msd542%20datasheet.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:48
#, no-wrap
msgid "Parker"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:48
#, no-wrap
msgid "OEM750"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:48
#, no-wrap
msgid "300"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:48
#, no-wrap
msgid "200000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:48
#, no-wrap
msgid "http://www.compumotor.com/manuals/OEM750/OEM750_Entire_Rev_B.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:49
#, no-wrap
msgid "ST"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:49
#, no-wrap
msgid "L297"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:49 src/integrator/stepper-timing.adoc:53
#: src/integrator/stepper-timing.adoc:54 src/integrator/stepper-timing.adoc:56
#: src/integrator/stepper-timing.adoc:58 src/integrator/stepper-timing.adoc:59
#: src/integrator/stepper-timing.adoc:61 src/integrator/stepper-timing.adoc:62
#: src/integrator/stepper-timing.adoc:63
#, no-wrap
msgid "?"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:49
#, no-wrap
msgid "http://www.st.com/stonline/books/pdf/docs/1334.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:50 src/integrator/stepper-timing.adoc:51
#, no-wrap
msgid "Xylotex"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:50
#, no-wrap
msgid "XS-3525/8S-3"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:50
#, no-wrap
msgid "http://www.xylotex.com/XS3525V202.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:51
#, no-wrap
msgid "XS-3525/8S-4"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:51
#, no-wrap
msgid "http://www.xylotex.com/XS3525V400.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:52
#, no-wrap
msgid "Lin Engineering"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:52
#, no-wrap
msgid "Silverpak 17D/DE"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:52
#, no-wrap
msgid "http://www.linengineering.com/site/products/pdf/SilverPak17D_DE-manual.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:53
#, no-wrap
msgid "Hobbycnc"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:53
#, no-wrap
msgid "Pro Chopper Board"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:53
#, no-wrap
msgid "http://www.hobbycnc.com/products/hobbycnc-pro-chopper-driver-board-kits/"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:54
#, no-wrap
msgid "*Routout"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:54
#, no-wrap
msgid "2.5amp Stepper Driver"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:54
#, no-wrap
msgid "http://www.routoutcnc.com/2-5ampdriver.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:55
#, no-wrap
msgid "*Intelligent Motion System"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:55
#, no-wrap
msgid "IM483"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:55
#, no-wrap
msgid "http://www.imshome.com/im483.html"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:56 src/integrator/stepper-timing.adoc:57
#, no-wrap
msgid "Keling"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:56
#, no-wrap
msgid "4030"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:56 src/integrator/stepper-timing.adoc:59
#: src/integrator/stepper-timing.adoc:64 src/integrator/stepper-timing.adoc:65
#: src/integrator/stepper-timing.adoc:66 src/integrator/stepper-timing.adoc:67
#: src/integrator/stepper-timing.adoc:68 src/integrator/stepper-timing.adoc:69
#: src/integrator/stepper-timing.adoc:70 src/integrator/stepper-timing.adoc:71
#: src/integrator/stepper-timing.adoc:72 src/integrator/stepper-timing.adoc:73
#: src/integrator/stepper-timing.adoc:74 src/integrator/stepper-timing.adoc:75
#: src/integrator/stepper-timing.adoc:76 src/integrator/stepper-timing.adoc:77
#: src/integrator/stepper-timing.adoc:78 src/integrator/stepper-timing.adoc:79
#: src/integrator/stepper-timing.adoc:80 src/integrator/stepper-timing.adoc:81
#: src/integrator/stepper-timing.adoc:82 src/integrator/stepper-timing.adoc:83
#: src/integrator/stepper-timing.adoc:86
#, no-wrap
msgid "5000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:56
#, no-wrap
msgid "http://www."
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:57
#, no-wrap
msgid "6852"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:57
#, no-wrap
msgid "1750"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:57 src/integrator/stepper-timing.adoc:65
#: src/integrator/stepper-timing.adoc:66 src/integrator/stepper-timing.adoc:67
#: src/integrator/stepper-timing.adoc:68 src/integrator/stepper-timing.adoc:69
#: src/integrator/stepper-timing.adoc:70 src/integrator/stepper-timing.adoc:71
#: src/integrator/stepper-timing.adoc:72 src/integrator/stepper-timing.adoc:78
#: src/integrator/stepper-timing.adoc:79 src/integrator/stepper-timing.adoc:81
#, no-wrap
msgid "10000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:57
#, no-wrap
msgid "http://www.kelinginc.net/kL-6852.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:58
#, no-wrap
msgid "Sherline"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:58
#, no-wrap
msgid "8760"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:58 src/integrator/stepper-timing.adoc:59
#, no-wrap
msgid "6000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:58
#, no-wrap
msgid "24000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:58
#, no-wrap
msgid "http://www.sherline.com/"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:59
#, no-wrap
msgid "Burkhard Lewetz"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:59
#, no-wrap
msgid "Step3S"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:59
#, no-wrap
msgid "15000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:59
#, no-wrap
msgid "http://www.lewetz.de/download/ibstep3se.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:60
#, no-wrap
msgid "Parker Compumotor"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:60
#, no-wrap
msgid "Zeta 4"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:60
#, no-wrap
msgid "?(200)"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:60
#, no-wrap
msgid "http://www.compumotor.com/manuals/ZETA/ZETA_Rev_A_Entire.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:61 src/integrator/stepper-timing.adoc:62
#, no-wrap
msgid "www.cncdrive.com"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:61
#, no-wrap
msgid "Dugong"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:61
#, no-wrap
msgid "http://www.cncdrive.com/content/dugong.htm"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:62
#, no-wrap
msgid "DG2S-08020"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:62
#, no-wrap
msgid "http://cncdrive.com/DG2S_08020.html"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:63
#, no-wrap
msgid "Wantai Motors"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:63
#, no-wrap
msgid "DQ542MA"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:63
#, no-wrap
msgid "5050"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:63
#, no-wrap
msgid "http://www.wantmotor.com/ProductsView.asp?id=257&pid=82"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:64 src/integrator/stepper-timing.adoc:65
#: src/integrator/stepper-timing.adoc:66 src/integrator/stepper-timing.adoc:67
#: src/integrator/stepper-timing.adoc:68 src/integrator/stepper-timing.adoc:69
#: src/integrator/stepper-timing.adoc:70 src/integrator/stepper-timing.adoc:71
#: src/integrator/stepper-timing.adoc:72 src/integrator/stepper-timing.adoc:73
#: src/integrator/stepper-timing.adoc:74 src/integrator/stepper-timing.adoc:75
#: src/integrator/stepper-timing.adoc:76 src/integrator/stepper-timing.adoc:77
#: src/integrator/stepper-timing.adoc:78 src/integrator/stepper-timing.adoc:79
#: src/integrator/stepper-timing.adoc:80 src/integrator/stepper-timing.adoc:81
#: src/integrator/stepper-timing.adoc:82 src/integrator/stepper-timing.adoc:83
#, no-wrap
msgid "Leadshine USA"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:64
#, no-wrap
msgid "Digital DM422 40V 2.2A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:64
#, no-wrap
msgid "7500"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:64
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/DM422m.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:65
#, no-wrap
msgid "Digital DM556 50V 5.6A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:65
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/DM556m.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:66
#, no-wrap
msgid "Digital DM856 80V 7.0A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:66
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/DM856m.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:67
#, no-wrap
msgid "Digital DM870 80V 7.0A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:67
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/DM870m.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:68
#, no-wrap
msgid "Digital DM1182 150VAC 8.2A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:68
#, no-wrap
msgid "http://leadshine.com/UploadFile/Down/DM1182m.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:69
#, no-wrap
msgid "Digital EM402 40V 2.2A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:69
#, no-wrap
msgid "http://leadshine.com/UploadFile/Down/EM402d_P.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:70
#, no-wrap
msgid "Digital EM503 50V 4.2A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:70
#, no-wrap
msgid "http://leadshine.com/UploadFile/Down/EM503d_P.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:71
#, no-wrap
msgid "Digital EM705 70V 7.0A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:71
#, no-wrap
msgid "http://leadshine.com/UploadFile/Down/EM705d_P.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:72
#, no-wrap
msgid "Digital EM806 80V 8.2A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:72
#, no-wrap
msgid "http://leadshine.com/UploadFile/Down/EM806d_P.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:73
#, no-wrap
msgid "Analog M415B 40V 1.5A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:73 src/integrator/stepper-timing.adoc:74
#: src/integrator/stepper-timing.adoc:75 src/integrator/stepper-timing.adoc:76
#: src/integrator/stepper-timing.adoc:77
#, no-wrap
msgid "1500"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:73 src/integrator/stepper-timing.adoc:74
#: src/integrator/stepper-timing.adoc:75 src/integrator/stepper-timing.adoc:76
#: src/integrator/stepper-timing.adoc:77 src/integrator/stepper-timing.adoc:86
#, no-wrap
msgid "8000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:73
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/M415Bm.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:74
#, no-wrap
msgid "Analog M542 50V 4.2A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:74
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/M542V2m.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:75
#, no-wrap
msgid "Analog M752 75V 5.2A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:75
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/M752m.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:76
#, no-wrap
msgid "Analog M880A 80V 7.8A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:76
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/M880Am.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:77
#, no-wrap
msgid "Analog M860H 80VAC 7.2A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:77
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/MA860Hm.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:78
#, no-wrap
msgid "Brushed servo DCS303 30V 15A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:78
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/DCS303m.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:79
#, no-wrap
msgid "Brushed servo DCS810 80V 20A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:79
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/DCS810V1m.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:80
#, no-wrap
msgid "Brushed servo DCS810S 80V 20A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:80
#, no-wrap
msgid "7000"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:80
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/DCS810Sm.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:81
#, no-wrap
msgid "Brushless servo ACS306 30V 15A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:81
#, no-wrap
msgid "http://leadshine.com/UploadFile/Down/ACS306hm.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:82
#, no-wrap
msgid "Brushless servo ACS606 60V 15A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:82 src/integrator/stepper-timing.adoc:83
#, no-wrap
msgid "6700"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:82
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/ACS606m.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:83
#, no-wrap
msgid "Brushless servo ACS806 80V 20A"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:83
#, no-wrap
msgid "http://leadshineusa.com/UploadFile/Down/ACS806m.pdf"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:84 src/integrator/stepper-timing.adoc:85
#, no-wrap
msgid "Pololu"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:84
#, no-wrap
msgid "A4988 Stepper Motor Driver Carrier"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:84
#, no-wrap
msgid "http://www.pololu.com/catalog/product/1182/"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:85
#, no-wrap
msgid "DRV8825 Stepper Motor Driver Carrier"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:85
#, no-wrap
msgid "1900"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:85
#, no-wrap
msgid "650"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:85
#, no-wrap
msgid "http://www.pololu.com/catalog/product/2132/"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:86
#, no-wrap
msgid "cnc4you"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:86
#, no-wrap
msgid "[[CW5045]]"
msgstr ""

#. type: Table
#: src/integrator/stepper-timing.adoc:86
#, no-wrap
msgid "http://cnc4you.co.uk/resources/CW5045.pdf"
msgstr ""

#. type: Title =
#: src/integrator/wiring.adoc:5
#, no-wrap
msgid "Best Wiring Practices"
msgstr ""

#. type: Title ==
#: src/integrator/wiring.adoc:7
#, no-wrap
msgid "Electrical Noise"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:14
msgid ""
"Electrical noise in a system is caused by Electromagnetic Interference "
"(EMI), where signals appearing in one electrical circuit interfere with an "
"adjacent circuit, either through electromagnetic induction, electrostatic "
"coupling or conduction. EMI can cause problems with the daily operation of a "
"CNC machine, and can manifest itself in various ways such as false "
"triggering of limit switches, prematurely interrupted tool probing "
"operations, corruption of a serial data link to a VFD or erratic behaviour "
"of the CNC control systems and software."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:18
msgid ""
"When current passes through a conductor a magnetic field is created. As the "
"current increases the magnetic field gets stronger, and then collapses again "
"when current ceases to flow. If this alternating magnetic field happens to "
"cross another conductor it can induce an unwanted voltage into it, which "
"presents itself as noise."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:23
msgid ""
"There are several methods that can be employed to minimise the effects of "
"EMI in any electrical system. The most effective of these is obviously to "
"prevent the noise from occurring in the first place. In reality the method "
"of controlling the effects of EMI is usually by applying measures to prevent "
"noise from contaminating wanted signals in the CNC system."
msgstr ""

#. type: Title ==
#: src/integrator/wiring.adoc:24
#, no-wrap
msgid "Ground, Earth and Common"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:33
msgid ""
"Confusion can arise when using terms such as earth, ground and common. In "
"some cases they may be used to describe the same thing; that being the point "
"in an electrical system to which all voltages are referenced to. For the "
"purpose of this article, the terms 'earth' and 'ground' refer to the point "
"at which the incoming mains supply is earthed to, whereas 'common' is the "
"return or negative terminal on a DC supply.  In some cases it is permissible "
"to ground the common on a DC supply, thereby making the negative terminal on "
"that supply the same potential as the incoming AC earth, but for the "
"purposes of this discussion the terms 'earth' and 'common' must be made "
"distinct from each other to avoid confusion."
msgstr ""

#. type: Title ==
#: src/integrator/wiring.adoc:34
#, no-wrap
msgid "Wire Selection and Use"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:40
msgid ""
"Wire comes in many types, sizes and configurations. Wading through all the "
"wire available is a monumental task of its own, but for the purposes of this "
"article it is only necessary to consider the types of wires typically used "
"when wiring a CNC controller. Additionally, how the wire is to be used can "
"have some effect on the overall system. What follows are some tips that may "
"prove helpful."
msgstr ""

#. type: Title ===
#: src/integrator/wiring.adoc:41
#, no-wrap
msgid "Single Conductor Wire"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:46
msgid ""
"Wire comes in two forms: solid conductor and stranded. Solid core wire is "
"generally cheaper than stranded, but more likely to break if used in "
"applications where repeated bending is expected. Fortunately, the prevalence "
"of stranded wire on the market means that its use should be encouraged "
"wherever possible."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:51
msgid ""
"Wires should be terminated such that all strands in the conductor are neatly "
"and securely located into the mating receptacle. This may be accomplished by "
"either twisting the strands together before inserting in the termination, or "
"using a compression crimp such as a spade or bootlace terminal. Care should "
"be made to ensure that no strands of wire end up outside the termination to "
"prevent accidental shorting with adjacent terminations."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:56
msgid ""
"If using a compression crimp on the bare wire, avoid soldering the strands "
"together before crimping. Crimping the lug onto a soldered wire can result "
"in the lug working loose over time as the soldered strands lose their "
"compressibility once the crimp has been applied. For this same reason, "
"soldered wire should not be installed in a terminal block where the screw "
"stud bites directly onto the wire when tightened."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:60
msgid ""
"When stripping the wire ready for a termination, only remove the minimum "
"amount required to keep the termination covered when complete. Stripping too "
"much insulation off will expose some of the wire that something can short "
"against."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:69
msgid ""
"The circuit that the wire is intended for should also be considered; the "
"voltage the circuit operates at and the amount of current it carries have a "
"bearing on the choice of wire to be used. The thin insulation on a piece of "
"recycled CAT5 ethernet cable is insufficient to withstand the voltages that "
"can appear at the output terminals of a Variable Frequency Drive, nor is the "
"cross sectional area of the conductor sufficient to carry several amps of "
"current without overheating and potentially causing a fire. Conversely, "
"while it is perfectly permissible to wire a limit switch circuit using 2.5 "
"sqmm cable, it creates needless bulk in the wiring loom. Consult any "
"manufacturer's documentation and your local country's electrical wiring "
"codes for minimum suggested wire gauges for power and control requirements."
msgstr ""

#. type: Title ===
#: src/integrator/wiring.adoc:70
#, no-wrap
msgid "Shielded Wire"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:75
msgid ""
"There are two types of shielded wire. One has a bare wire braid that "
"surrounds the wire inside, and the other has metal foil that surrounds the "
"wire inside. The type of shielded wire selected will depend on the amount of "
"noise you are trying to combat."
msgstr ""

#. type: Block title
#: src/integrator/wiring.adoc:76
#, no-wrap
msgid "Foil Shielded Wire"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:83
msgid ""
"Foil shielded wire has a thin aluminum or copper foil that is usually bonded "
"to a film of plastic that surrounds the wire. The enclosed wire is usually "
"100% covered. Attaching the foil to earth can be difficult, especially if "
"the foil is constructed from aluminum or laminated to a plastic backing "
"material. For this reason, it is usual to find a bare metal stranded wire "
"enclosed inside the cable which is in contact with the foil for the full "
"length of the cable. This is called the drain wire and is used to make the "
"connection to earth with."
msgstr ""

#. type: Block title
#: src/integrator/wiring.adoc:84
#, no-wrap
msgid "Braided Shielded Wire"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:91
msgid ""
"Braided shielded wire has a woven copper braid that surrounds the wire. It "
"is more bulky than foil and does not provide 100% coverage, but is more "
"flexible than foil shielded types. Coverage is typically 70% to 95% "
"depending on how tight the braid has been constructed. Despite the lower "
"coverage of braided shield, the effectiveness is greater than foil shielding "
"due to the increased bulk of the braid, and copper being a better conductor "
"than aluminum."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:95
msgid ""
"For very noisy environments, a further subset of the above two shielding "
"methodologies may be employed, whereby both braid and foil shielding is used "
"simultaneously. Individual wires in a multi-conductor cable may also be "
"shielded along with an overall shield being applied to the entire cable "
"jacket."
msgstr ""

#. type: Title ==
#: src/integrator/wiring.adoc:96
#, no-wrap
msgid "AC Line Voltage"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:104
msgid ""
"The incoming mains AC that powers the CNC system can pick up and carry noise "
"into the power supplies and other equipment. For example, if the incoming "
"supply is also used to feed large motors, electrical noise may be generated "
"on the line feeding the CNC components. Although most modern electronic "
"devices feature built-in mains filtering to help minimise the susceptibility "
"to mains-borne interference, the custom and modularised nature of a CNC "
"system can mean that components used come from a wide variety of sources "
"with differing degrees of inherent noise immunity."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:108
msgid ""
"Inline filters may be installed on the incoming mains supply feeding the CNC "
"control system to help reduce any induced noise. Running the CNC system from "
"a different mains circuit to any large electrical sources of noise may also "
"help minimise any potential sources of mains-borne interference."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:112
msgid ""
"Be aware that in many countries, the installation and alteration of mains "
"circuits can only be carried out by licensed electricians."
msgstr ""

#. type: Title ==
#: src/integrator/wiring.adoc:113
#, no-wrap
msgid "Power Supply Units"
msgstr ""

#. type: Title ===
#: src/integrator/wiring.adoc:115
#, no-wrap
msgid "AC Ground"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:121
msgid ""
"A typical CNC machine may have several different Power Supply Units (PSUs) "
"installed in the system. Any device powered from the incoming mains designed "
"to be earthed must be properly and permanently terminated to mains earth.  "
"Ideally this should be made to the same point in the system, which may be a "
"threaded post or bolt, a copper/brass termination strip or a large metallic "
"mounting plate within the control enclosure."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:125
msgid ""
"The prevalence of high-frequency switchmode PSUs used in CNC systems "
"increase the likelihood of RF noise being coupled from them to adjacent "
"circuitry. Many of these PSUs have a metal case which, if connected to mains "
"earth, will help screen the coupling of high frequency EMI into other "
"electrical components."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:130
msgid ""
"From a safety standpoint, it is important that these mains earth connections "
"also be mechanically strong and unlikely to break free, and the wire used "
"has a cross-sectional area sufficient to carry the anticipated fault current "
"should a short to earth occur. It is also imperative that mains earth is "
"never used as a current-carrying conductor for other components in the "
"system. Earth shall be used for one purpose only: safety earthing."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:133
msgid ""
"Note also that the colour of the jacket used to make a termination to earth "
"may be prescribed by the wiring code for your country, and the conduction of "
"other unrelated signals in that same wire colour may be prohibited."
msgstr ""

#. type: Title ===
#: src/integrator/wiring.adoc:134
#, no-wrap
msgid "DC Common"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:141
msgid ""
"Commoning of a DC PSU is somewhat dependent on the electrical operating "
"requirements of the CNC system. For example, a stepper motor driver "
"operating with a 24VDC motor supply and a 5V logic supply may have optically-"
"isolated signal input lines which provide complete electrical separation of "
"the driver's input and output circuitry for safety and noise immunity "
"purposes. Tying the stepper motor and logic control supply commons together "
"in this case may have a detrimental impact on the operation of the system."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:148
msgid ""
"In general it makes most sense to keep the commons of the various DC PSUs "
"used in the CNC system separate from each other, and separate from the AC "
"mains earth unless there is a specific requirement to tie them together. In "
"most cases the common points of the heavy-duty power sections of the CNC "
"system (eg, stepper motor or servo motor drivers, spindle motors etc) will "
"be segregated from common points of the electrically-sensitive sections of "
"the CNC (control interface boards, limit switches, tool probe circuitry etc) "
"to prevent cross-contamination of the two systems."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:152
msgid ""
"Should it be necessary to connect several common points of different PSUs "
"together, or to connect a common of a PSU to AC main earth, it should be "
"done at a single point only and as close to the common terminal of the PSUs "
"as possible."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:155
msgid ""
"In CNC machines where the hardware drivers and interfacing circuitry are pre-"
"assembled, the decision as to which DC commons are tied where is usually "
"taken out of the hands of the end user."
msgstr ""

#. type: Title ==
#: src/integrator/wiring.adoc:156
#, no-wrap
msgid "DC Supply Feeds"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:164
msgid ""
"In situations where a DC circuit is run with the common point disconnected "
"from the mains earth (ie, the supply is 'floating'), it can be helpful to "
"run DC supplies using twisted pairs of wires, whereby each pair of wires in "
"the circuit (eg, the positive and negative leads) is physically twisted "
"together in a helix pattern. The twist in the wire allows both conductors to "
"share the same 'real estate' as closely as possible. Any EMI that passes "
"across them will therefore be largely canceled as both conductors will "
"receive the same degree of EMI. For additional protection use twisted wire "
"that is housed in a shielded jacket with the shield terminated to mains "
"earth."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:169
msgid ""
"Note however that twisted pairs of wires are less effective at combating the "
"effects of EMI if one of the two wires is referenced to mains earth, as the "
"conductor at earth potential is less able to be influenced by EMI than the "
"un-earthed conductor. In these instances the twisting of the wires has less "
"of an impact on the overall noise immunity, and shielded cable will be "
"intrinsically more effective at reducing noise pickup."
msgstr ""

#. type: Title ==
#: src/integrator/wiring.adoc:170
#, no-wrap
msgid "Signal Wires and Control Lines"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:179
msgid ""
"The wires that are used to transmit logic signals to and from various "
"peripherals in the CNC (eg, stepper motor controller inputs, axis limit "
"switches etc) are the most susceptible to noise interference. The reason for "
"this is the low level voltages that are used to convey the information. When "
"a limit or home switch is engaged, or a tool probe has made or broken "
"contact, this signal is used to signify the event has taken place. Typically "
"this is done by using input pins on the computer interface card or parallel "
"port which, dependent on the application, may be signaled using as little as "
"3.3V. Evidently a 2V noise spike has the potential to corrupt the validity "
"of a signal if the useful range is only 0-3.3V."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:184
msgid ""
"If possible, isolate the common point of the PSU supplying the logic "
"peripherals from the rest of the system.  For example, keeping the common of "
"the low voltage power supply isolated from the common of the stepper motor "
"supply will reduce the chances of large currents flowing in the stepper "
"motor return line contaminating the common of the low voltage supply."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:188
msgid ""
"If the controller uses differential signaling, use twisted pairs to carry "
"the signal. Shielded cable is preferred when the control lines are single-"
"ended, or if the distances traversed are long or through electrically "
"hostile environments. When grounding the shield in the cable, terminate to "
"the mains earth."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:193
msgid ""
"If the controller and interfacing devices can withstand higher control "
"signals, consider altering the wiring and power supply requirements to use a "
"bigger voltage for signaling (eg, 12V or 24V). The same 2V EMI noise spike "
"that could corrupt a 3.3V limit switch signal will be far less likely to "
"cause issues with a limit switch operating with a 24V signal."
msgstr ""

#. type: Title ==
#: src/integrator/wiring.adoc:194
#, no-wrap
msgid "Stepper or Servo Motor Drivers"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:199
msgid ""
"The metal housing of the driver should be connected to the local mains earth "
"in the CNC system. Some driver enclosures will indicate a specific terminal "
"as being the earthing point, in which case this point must be connected to "
"earth via a dedicated wire."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:202
msgid ""
"Control and power wiring should be segregated as much as possible. Route "
"signal input wires well away from power supply and motor drive output lines."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:206
msgid ""
"It is recommended to run both driver input and motor output wiring in "
"shielded cable with the shield terminated to mains earth. The shield on the "
"input lines helps reduce the amount of interference they can receive, while "
"the shield on the output lines reduces the amount of noise they can radiate."
msgstr ""

#. type: Title ==
#: src/integrator/wiring.adoc:207
#, no-wrap
msgid "Variable Frequency Drives"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:212
msgid ""
"If at all possible the Variable Frequency Drive (VFD) should be mounted in a "
"separate enclosure or cabinet to reduce the risk of it radiating noise into "
"adjacent wiring. If the VFD enclosure is metallic it must be earthed as per "
"any recommendations in the manufacturer's documentation."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:216
msgid ""
"Because the VFD is a high power, high frequency electronic switching device, "
"the output is notoriously prone to EMI radiation, and it is advisable to run "
"the VFD output to the connected motor in a shielded cable, with the shield "
"terminated to mains earth."
msgstr ""

#. type: Title ==
#: src/integrator/wiring.adoc:217
#, no-wrap
msgid "Routing Conductors"
msgstr ""

#. type: Title ===
#: src/integrator/wiring.adoc:219
#, no-wrap
msgid "Routing Movable Wires"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:226
msgid ""
"Any wire that will be moved about during normal operation of the CNC falls "
"into this category. For example, wires running from stepper drivers through "
"a cable management system (drag chains) and then to the stepper motors "
"mounted on a movable gantry.  Cables and wires operating in these "
"circumstances should be rated for extra flexibility. This precludes the use "
"of solid-core wires and cables, as the constant flexing will lead to fatigue "
"and eventual failure of the conductors."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:230
msgid ""
"If running cables in a cable track/carrier, tie them down at both ends of "
"the cable track. If not, ratcheting can occur and fatigue the cable "
"prematurely. Care should also be taken to ensure that mechanical rubbing of "
"conductors against other parts of the machine is prevented."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:233
msgid ""
"In a cable track/carrier observe the neutral axis idea. Have the wire run as "
"close to the neutral axis as possible. Make sure the wire is not in tension "
"in the longest neutral axis situation."
msgstr ""

#. type: Title ===
#: src/integrator/wiring.adoc:234
#, no-wrap
msgid "Routing Stationary Wires"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:239
msgid ""
"As discussed earlier, running different signal classes (high voltage and low "
"voltage) in proximity to each other has the tendency to exacerbate EMI "
"interference. Separate conductors by as much distance as possible. If two "
"conductors must cross over each other make the crossing as close to a 90 "
"degree angle as possible."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:244
msgid ""
"Avoid long loops of excess wire at any peripheral devices - they are great "
"antennas for receiving or transmitting noise. Where possible, run wires in "
"close proximity to large earthed structures. If the controller enclosure "
"features a large metallic back plate that is earthed, secure all control "
"wiring against this surface as much as possible while wiring between two "
"points."
msgstr ""

#. type: Title ==
#: src/integrator/wiring.adoc:245
#, no-wrap
msgid "Mechanical Noise"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:253
msgid ""
"Very few mechanical switches (eg, an axis limit switch or tool probe input) "
"will close or open perfectly when operated. More often than not the switch "
"contacts will physically bounce against each other several times within a "
"very short space of time when operated. This may be interpreted by the "
"machine controller as multiple operations of the same signal when in reality "
"only one clean state change was expected. Sometimes it doesn't matter, but "
"in many circumstances it is desirable to ensure that any state change is as "
"'clean' as possible and does not interfere with the operation of the "
"machine. This is accomplished by debouncing."
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:258
msgid ""
"Debouncing is achieved by permitting a state change on a mechanical switch "
"to only register with the controller after a fixed period of time to allow "
"any bouncing in the switch contacts to settle. Time delays of 5-15 "
"milliseconds are usually sufficient. This can be done with the addition of "
"some hardware to the signal circuit or in software within LinuxCNC."
msgstr ""

#. type: Title ===
#: src/integrator/wiring.adoc:259
#, no-wrap
msgid "Hardware Debouncing"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:264
msgid ""
"Several schemes exist to implement debouncing of switches and relay contacts "
"with hardware, ranging from the addition of a single capacitor across the "
"signal and common lines, to dedicated debouncing integrated circuits such as "
"the MC14490 or MAX6818. Several hardware debouncing schemes can be found via "
"the link below:"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:266
msgid "https://electrosome.com/switch-debouncing/"
msgstr ""

#. type: Title ===
#: src/integrator/wiring.adoc:267
#, no-wrap
msgid "Software Debouncing"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:273
msgid ""
"The Hardware Abstraction Layer (HAL) of LinuxCNC includes a debounce "
"component. This component has a single input pin and a single output pin. "
"Its job is to monitor the input and to send an output after the input has "
"activated for a programmed delay period. More information can be found for "
"the debounce component by visiting the following page:"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:275
msgid "link:../man/man9/debounce.9.html"
msgstr ""

#. type: Title ==
#: src/integrator/wiring.adoc:276
#, no-wrap
msgid "Documentation"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:281
msgid ""
"The importance of documenting the installed wiring and components cannot be "
"over-emphasised. Should the user want to modify the CNC system further down "
"the track, or if trouble should arise that needs correcting, then complete "
"and concise documentation of the wiring and equipment can save many hours of "
"head scratching and frustration."
msgstr ""

#. type: Title ===
#: src/integrator/wiring.adoc:282
#, no-wrap
msgid "Hardware Documentation"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:288
msgid ""
"At a minimum, make sure to save any documentation associated with the "
"installed hardware in a safe place. Stepper controllers, break out boards, "
"power supplies, VFDs, interfaces and controllers, servo and stepper drivers "
"and any associated device settings are all critical components of the system "
"and their documentation should be kept at hand for easy reference."
msgstr ""

#. type: Title ===
#: src/integrator/wiring.adoc:289
#, no-wrap
msgid "Wiring Schematics"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:296
msgid ""
"As the CNC machine is wired, make sure to draw up a schematic that can be "
"referenced to later. The schematic does not have to be all that neat, but it "
"should be understandable in such a way that it could be easily interpreted "
"at a later date, ideally by anyone who may need to service the equipment. "
"Include details such as wire colours used, pin numbers, part numbers and any "
"other notes that will help explain particular details not immediately "
"apparent from first glance at the schematic."
msgstr ""

#. type: Title ===
#: src/integrator/wiring.adoc:297
#, no-wrap
msgid "Wiring Identification"
msgstr ""

#. type: Plain text
#: src/integrator/wiring.adoc:303
msgid ""
"Take the time to identify each wire in the system. When a bundle of wires "
"has been cable-tied in place it can be very difficult to look at them and "
"know for sure which wire goes where. Label the motor wires with the joint or "
"axis they are associated with, or identify each signal wire so that it is "
"easy to identify what that signal does.  It will also help if this "
"information is transferred to the wiring schematics."
msgstr ""

#. type: Title =
#: src/ladder/classic-ladder.adoc:5
#, no-wrap
msgid "ClassicLadder Programming(((ClassicLadder Programming,CL Programming)))"
msgstr ""

#. type: Title ==
#: src/ladder/classic-ladder.adoc:13
#, no-wrap
msgid "Ladder Concepts"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:22
msgid ""
"ClassicLadder is a type of programming language originally implemented on "
"industrial PLCs (it's called Ladder Programming). It is based on the concept "
"of relay contacts and coils, and can be used to construct logic checks and "
"functions in a manner that is familiar to many systems integrators. Ladder "
"consists of rungs that may have branches and resembles an electrical "
"circuit. It is important to know how ladder programs are evaluated when "
"running."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:27
msgid ""
"It seems natural that each line would be evaluated left to right, then the "
"next line down, etc., but it doesn't work this way in ladder logic.  Ladder "
"logic 'scans' the ladder rungs 3 times to change the state of the outputs."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:29
msgid "the inputs are read and updated"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:30
msgid "the logic is figured out"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:31
msgid "the outputs are set"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:35
msgid ""
"This can be confusing at first if the output of one line is read by the "
"input of a another rung. There will be one scan before the second input "
"becomes true after the output is set."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:40
msgid ""
"Another gotcha with ladder programming is the \"Last One Wins\" rule. If you "
"have the same output in different locations of your ladder the state of the "
"last one will be what the output is set to."
msgstr ""

#. type: Title ==
#: src/ladder/classic-ladder.adoc:41 src/user/user-intro.adoc:174
#, no-wrap
msgid "Languages"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:46
msgid ""
"The most common language used when working with ClassicLadder is 'ladder'. "
"ClassicLadder also supports Sequential Function Chart (Grafcet)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:50
msgid "There are two components to ClassicLadder."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:52
msgid "The real time module classicladder_rt"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:53
msgid "The user space module (including a GUI) classicladder"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:60
msgid ""
"Typically ClassicLadder components are placed in the custom.hal file if your "
"working from a Stepconf generated configuration. These must not be placed in "
"the custom_postgui.hal file or the Ladder Editor menu will be grayed out."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:62
msgid "Ladder files (.clp) must not contain any blank spaces in the name."
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:63
#, no-wrap
msgid "Realtime Module"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:70
msgid ""
"Loading the ClassicLadder real time module (classicladder_rt) is possible "
"from a HAL file, or directly using a halcmd instruction. The first line "
"loads real time the ClassicLadder module. The second line adds the function "
"classicladder.0.refresh to the servo thread. This line makes ClassicLadder "
"update at the servo thread rate."
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:75 src/ladder/ladder-examples.adoc:68
#, no-wrap
msgid ""
"loadrt classicladder_rt\n"
"addf classicladder.0.refresh servo-thread\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:88
msgid ""
"The speed of the thread that ClassicLadder is running in directly affects "
"the responsiveness to inputs and outputs. If you can turn a switch on and "
"off faster than ClassicLadder can notice it then you may need to speed up "
"the thread. The fastest that ClassicLadder can update the rungs is one "
"millisecond. You can put it in a faster thread but it will not update any "
"faster. If you put it in a slower than one millisecond thread then "
"ClassicLadder will update the rungs slower.  The current scan time will be "
"displayed on the section display, it is rounded to microseconds. If the scan "
"time is longer than one millisecond you may want to shorten the ladder or "
"put it in a slower thread."
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:89
#, no-wrap
msgid "Variables"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:95
msgid ""
"It is possible to configure the number of each type of ladder object while "
"loading the ClassicLadder real time module. If you do not configure the "
"number of ladder objects ClassicLadder will use the default values."
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:97
#, no-wrap
msgid "Default Variable Count"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:101
#, no-wrap
msgid "Object Name"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:101
#, no-wrap
msgid "Variable Name"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:102
#, no-wrap
msgid "Default Value"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:102
#, no-wrap
msgid "Number of rungs"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:102
#, no-wrap
msgid "(numRungs)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:103
#, no-wrap
msgid "100"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:103
#, no-wrap
msgid "Number of bits"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:103
#, no-wrap
msgid "(numBits)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:104
#, no-wrap
msgid "Number of word variables"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:104
#, no-wrap
msgid "(numWords)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:105
#, no-wrap
msgid "Number of timers"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:105
#, no-wrap
msgid "(numTimers)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:106
#, no-wrap
msgid "Number of timers IEC"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:106
#, no-wrap
msgid "(numTimersIec)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:107
#, no-wrap
msgid "Number of monostables"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:107
#, no-wrap
msgid "(numMonostables)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:108
#, no-wrap
msgid "Number of counters"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:108
#, no-wrap
msgid "(numCounters)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:109
#, no-wrap
msgid "Number of HAL inputs bit pins"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:109
#, no-wrap
msgid "(numPhysInputs)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:110
#, no-wrap
msgid "Number of HAL output bit pins"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:110
#, no-wrap
msgid "(numPhysOutputs)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:111
#, no-wrap
msgid "Number of arithmetic expressions"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:111
#, no-wrap
msgid "(numArithmExpr)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:112 src/remap/remap.adoc:2222
#, no-wrap
msgid "50"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:112
#, no-wrap
msgid "Number of Sections"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:112
#, no-wrap
msgid "(numSections)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:113
#, no-wrap
msgid "Number of Symbols"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:113
#, no-wrap
msgid "(numSymbols)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:114
#, no-wrap
msgid "Number of S32 inputs"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:114
#, no-wrap
msgid "(numS32in)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:115
#, no-wrap
msgid "Number of S32 outputs"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:115
#, no-wrap
msgid "(numS32out)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:116
#, no-wrap
msgid "Number of Float inputs"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:116
#, no-wrap
msgid "(numFloatIn)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:117
#, no-wrap
msgid "Number of Float outputs"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:117
#, no-wrap
msgid "(numFloatOut)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:122
msgid ""
"Objects of most interest are numPhysInputs, numPhysOutputs, numS32in, and "
"numS32out."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:127
msgid ""
"Changing these numbers will change the number of HAL bit pins available. "
"numPhysInputs and numPhysOutputs control how many HAL bit (on/off) pins are "
"available. numS32in and numS32out control how many HAL signed integers (+- "
"integer range) pins are available."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:129
msgid "For example (you don't need all of these to change just a few):"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:136
#, no-wrap
msgid ""
"loadrt classicladder_rt numRungs=12 numBits=100 numWords=10\n"
"numTimers=10 numMonostables=10 numCounters=10 numPhysInputs=10\n"
"numPhysOutputs=10 numArithmExpr=100 numSections=4 numSymbols=200\n"
"numS32in=5 numS32out=5\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:139
msgid "To load the default number of objects:"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:143 src/ladder/classic-ladder.adoc:1096
#, no-wrap
msgid "loadrt classicladder_rt\n"
msgstr ""

#. type: Title ==
#: src/ladder/classic-ladder.adoc:145
#, no-wrap
msgid "Loading the ClassicLadder user module"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:151
msgid ""
"ClassicLadder HAL commands must executed before the GUI loads or the menu "
"item Ladder Editor will not function. If you used the Stepper Config Wizard "
"place any ClassicLadder HAL commands in the custom.hal file."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:153
msgid "To load the user module:"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:157
#, no-wrap
msgid "loadusr classicladder\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:161
msgid ""
"Only one .clp file can be loaded. If you need to divide your ladder then use "
"sections."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:163
msgid "To load a ladder file:"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:167
#, no-wrap
msgid "loadusr classicladder myladder.clp\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:170
msgid "ClassicLadder Loading Options"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:173
msgid ""
"'--nogui' - (loads without the ladder editor) normally used after debugging "
"is finished."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:174
msgid "'--modbus_port=port' - (loads the modbus port number)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:176
msgid ""
"'--modmaster' - (initializes MODBUS master) should load the ladder program "
"at the same time or the TCP is default port."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:177
msgid "'--modslave' - (initializes MODBUS slave) only TCP"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:179
msgid "To use ClassicLadder with HAL without EMC:"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:183
#, no-wrap
msgid "loadusr -w classicladder\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:187
msgid ""
"The -w tells HAL not to close down the HAL environment until ClassicLadder "
"is finished."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:191
msgid ""
"If you first load ladder program with the '--nogui' option then load "
"ClassicLadder again with no options the GUI will display the last loaded "
"ladder program."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:193
msgid "In AXIS you can load the GUI from File/Ladder Editor..."
msgstr ""

#. type: Title ==
#: src/ladder/classic-ladder.adoc:194
#, no-wrap
msgid "ClassicLadder GUI"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:198
msgid ""
"If you load ClassicLadder with the GUI it will display two windows: section "
"display, and section manager."
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:199
#, no-wrap
msgid "Sections Manager"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:203
msgid ""
"When you first start up ClassicLadder you get an empty Sections Manager "
"window."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:205 src/ladder/classic-ladder.adoc:206
#, no-wrap
msgid "Sections Manager Default Window"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:206
#, no-wrap
msgid "images/Default_Sections_Manager.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:211
msgid ""
"This window allows you to name, create or delete sections and choose what "
"language that section uses. This is also how you name a subroutine for call "
"coils."
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:212
#, no-wrap
msgid "Section Display"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:216
msgid ""
"When you first start up ClassicLadder you get an empty Section Display "
"window.  Displayed is one empty rung."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:218 src/ladder/classic-ladder.adoc:219
#, no-wrap
msgid "Section Display Default Window"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:219
#, no-wrap
msgid "images/Default_Section_Display.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:222
msgid "Most of the buttons are self explanatory:"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:225
msgid ""
"The Vars button is for looking at variables, toggle it to display one, the "
"other, both, then none of the windows."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:228
msgid ""
"The Config button is used for modbus and shows the max number of ladder "
"elements that was loaded with the real time module."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:231
msgid ""
"The Symbols button will display an editable list of symbols for the "
"variables (hint you can name the inputs, outputs, coils etc)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:234
msgid ""
"The Quit button will shut down the user program meaning Modbus and the "
"display. The real time ladder program will still run in the background."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:237
msgid ""
"The check box at the top right allows you to select whether variable names "
"or symbol names are displayed"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:251
msgid ""
"You might notice that there is a line under the ladder program display that "
"reads \"Project failed to load...\" That is the status bar that gives you "
"info about elements of the ladder program that you click on in the display "
"window. This status line will now display HAL signal names for variables %I, "
"%Q and the first %W (in an equation) You might see some funny labels, such "
"as (103) in the rungs. This is displayed (on purpose) because of an old bug- "
"when erasing elements older versions sometimes didn't erase the object with "
"the right code. You might have noticed that the long horizontal connection "
"button sometimes didn't work in the older versions. This was because it "
"looked for the 'free' code but found something else. The number in the "
"brackets is the unrecognized code. The ladder program will still work "
"properly, to fix it erase the codes with the editor and save the program."
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:252
#, no-wrap
msgid "The Variable Windows"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:258
msgid ""
"This are two variable windows: the Bit Status Window (boolean) and the Watch "
"Window (signed integer). The Vars button is in the Section Display Window, "
"toggle the Vars button to display one, the other, both, then none of the "
"variable windows."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:260 src/ladder/classic-ladder.adoc:261
#, no-wrap
msgid "Bit Status Window"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:261
#, no-wrap
msgid "images/Bit_Status.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:276
msgid ""
"The Bit Status Window displays some of the boolean (on/off) variable data.  "
"Notice all variables start with the % sign. The %I variables represent HAL "
"input bit pins. The %Q represents the relay coil and HAL output bit pins. "
"The %B represents an internal relay coil or internal contact. The three edit "
"areas at the top allow you to select what 15 variables will be displayed in "
"each column. For instance, if the %B Variable column were 15 entries high, "
"and you entered 5 at the top of the column, variables %B5 to %B19 would be "
"displayed. The check boxes allow you to set and unset %B variables manually "
"as long as the ladder program isn't setting them as outputs.  Any Bits that "
"are set as outputs by the program when ClassicLadder is running can not be "
"changed and will be displayed as checked if on and unchecked if off."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:278 src/ladder/classic-ladder.adoc:279
#, no-wrap
msgid "Watch Window"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:279
#, no-wrap
msgid "images/watch_window.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:291
msgid ""
"The Watch Window displays variable status. The edit box beside it is the "
"number stored in the variable and the drop-down box beside that allow you to "
"choose whether the number to be displayed in hex, decimal or binary. If "
"there are symbol names defined in the symbols window for the word variables "
"showing and the 'display symbols' checkbox is checked in the section display "
"window, symbol names will be displayed.  To change the variable displayed, "
"type the variable number, e.g. %W2 (if the display symbols check box is not "
"checked) or type the symbol name (if the display symbols checkbox is "
"checked) over an existing variable number/name and press the Enter Key."
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:292
#, no-wrap
msgid "Symbol Window"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:295 src/ladder/classic-ladder.adoc:296
#, no-wrap
msgid "Symbol Names window"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:296
#, no-wrap
msgid "images/Default_Symbols_names.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:309
msgid ""
"This is a list of 'symbol' names to use instead of variable names to be "
"displayed in the section window when the 'display symbols' check box is "
"checked. You add the variable name (remember the '%' symbol and capital "
"letters), symbol name . If the variable can have a HAL signal connected to "
"it (%I, %Q, and %W-if you have loaded s32 pin with the real time module) "
"then the comment section will show the current HAL signal name or lack "
"thereof. Symbol names should be kept short to display better. Keep in mind "
"that you can display the longer HAL signal names of %I, %Q and %W variable "
"by clicking on them in the section window. Between the two, one should be "
"able to keep track of what the ladder program is connected to!"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:310
#, no-wrap
msgid "The Editor window"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:313 src/ladder/classic-ladder.adoc:314
#: src/ladder/classic-ladder.adoc:1124 src/ladder/classic-ladder.adoc:1125
#, no-wrap
msgid "Editor Window"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:314
#, no-wrap
msgid "images/Editor.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:317
msgid "'Add' - adds a rung after the selected rung"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:318
msgid "'Insert' - inserts a rung before the selected rung"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:319
msgid "'Delete' - deletes the selected rung"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:320
msgid "'Modify' - opens the selected rung for editing"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:322
msgid "Starting from the top left image:"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:324
msgid "Object Selector, Eraser"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:325
msgid "N.O. Input, N.C. Input, Rising Edge Input , Falling Edge Input"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:326
msgid "Horizontal Connection, Vertical Connection , Long Horizontal Connection"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:327
msgid "Timer IEC Block, Counter Block, Compare Variable"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:329
msgid ""
"Old Timer Block, Old Monostable Block (These have been replaced by the IEC "
"Timer)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:330
msgid "COILS - N.O. Output, N.C. Output, Set Output, Reset Output"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:331
msgid "Jump Coil, Call Coil, Variable Assignment"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:333
msgid "A short description of each of the buttons:"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:336
msgid ""
"'Selector' - allows you to select existing objects and modify the "
"information."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:337
msgid "'Eraser' - erases an object."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:343
msgid ""
"'N.O. Contact' - creates a normally open contact. It can be an external HAL-"
"pin (%I) input contact, an internal-bit coil (%B) contact or a external coil "
"(%Q) contact. The HAL-pin input contact is closed when the HAL-pin is true. "
"The coil contacts are closed when the corresponding coil is active (%Q2 "
"contact closes when %Q2 coil is active)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:346
msgid ""
"'N.C. Contact' - creates a normally closed contact. It is the same as the N."
"O. contact except that the contact is open when the HAL-pin is true or the "
"coil is active."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:348
msgid ""
"'Rising Edge Contact' - creates a contact that is closed when the HAL-pin "
"goes from False to true, or the coil from not-active to active."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:350
msgid ""
"'Falling Edge Contact' - creates a contact that is closed when the HAL-pin "
"goes from true to false or the coil from active to not."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:351
msgid "'Horizontal Connection' - creates a horizontal connection to objects."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:352
msgid ""
"'Vertical Connection' - creates a vertical connection to horizontal lines."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:355
msgid ""
"'Horizontal Running Connection' - creates a horizontal connection between "
"two objects and is a quick way to connect objects that are more than one "
"block apart."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:356
msgid "'IEC Timer' - creates a timer and replaces the 'Timer'."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:357
msgid "'Timer' - creates a Timer Module (depreciated use IEC Timer instead)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:358
msgid "'Monostable' - creates a one-shot monostable module"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:359
msgid "'Counter' - creates a counter module."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:362
msgid ""
"'Compare' - creates a compare block to compare variable to values or other "
"variables. (eg %W1<=5 or %W1=%W2) Compare cannot be placed in the right most "
"side of the section display."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:365
msgid ""
"'Variable Assignment' - creates an assignment block so you to assign values "
"to variables. (eg %W2=7 or %W1=%W2) ASSIGNMENT functions can only be placed "
"at the right most side of the section display."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:366 src/ladder/classic-ladder.adoc:372
#: src/ladder/classic-ladder.adoc:373
#, no-wrap
msgid "Config Window"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:370
msgid ""
"The config window shows the current project status and has the Modbus setup "
"tabs."
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:373
#, no-wrap
msgid "images/Config.png"
msgstr ""

#. type: Title ==
#: src/ladder/classic-ladder.adoc:375
#, no-wrap
msgid "Ladder objects"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:377
#, no-wrap
msgid "CONTACTS"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:381
msgid ""
"Represent switches or relay contacts. They are controlled by the variable "
"letter and number assigned to them."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:392
msgid ""
"The variable letter can be B, I, or Q and the number can be up to a three "
"digit number eg. %I2, %Q3, or %B123. Variable I is controlled by a HAL input "
"pin with a corresponding number. Variable B is for internal contacts, "
"controlled by a B coil with a corresponding number.  Variable Q is "
"controlled by a Q coil with a corresponding number. (like a relay with "
"multiple contacts). E.g. if HAL pin `classicladder.0.in-00` is true then %I0 "
"N.O. contact would be on (closed, true, whatever you like to call it). If "
"%B7 coil is 'energized' (on, true, etc) then %B7 N.O. contact would be on. "
"If %Q1 coil is 'energized' then %Q1 N.O.  contact would be on (and HAL pin "
"`classicladder.0.out-01` would be true)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:395
msgid ""
"'N.O. Contact' - image:images/ladder_action_load.png[\"Normally Open Contact"
"\"] (Normally Open)  When the variable is false the switch is off."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:397
msgid ""
"'N.C. Contact' - image:images/ladder_action_loadbar.png[\"Normally Closed "
"Contact\"] (Normally Closed) When the variable is false the switch is on."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:399
msgid ""
"'Rising Edge Contact' - When the variable changes from false to true, the "
"switch is PULSED on."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:401
msgid ""
"'Falling Edge Contact' - When the variable changes from true to false, the "
"switch is PULSED on."
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:402
#, no-wrap
msgid "IEC TIMERS"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:406
msgid ""
"Represent new count down timers. IEC Timers replace Timers and Monostables."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:408
msgid "IEC Timers have 2 contacts."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:410
msgid "'I' - input contact"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:411
msgid "'Q' - output contact"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:413
msgid "There are three modes - TON, TOF, TP."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:417
msgid ""
"'TON' - When timer input is true countdown begins and continues as long as "
"input remains true. After countdown is done and as long as timer input is "
"still true the output will be true."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:419
msgid ""
"'TOF' - When timer input is true, sets output true. When the input is false "
"the timer counts down then sets output false."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:421
msgid ""
"'TP' - When timer input is pulsed true or held true timer sets output true "
"till timer counts down. (one-shot)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:424
msgid ""
"The time intervals can be set in multiples of 100ms, seconds, or minutes."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:427
msgid ""
"There are also Variables for IEC timers that can be read and/or written to "
"in compare or operate blocks."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:429
msgid "'%TMxxx.Q' - timer done (Boolean, read write)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:430
msgid "'%TMxxx.P' - timer preset (read write)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:431
msgid "'%TMxxx.V' - timer value (read write)"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:432
#, no-wrap
msgid "TIMERS"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:436
msgid ""
"Represent count down timers. This is deprecated and replaced by IEC Timers."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:438
msgid "Timers have 4 contacts."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:440
msgid "'E' - enable (input) starts timer when true, resets when goes false"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:441
msgid ""
"'C' - control (input) must be on for the timer to run (usually connect to E)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:442
msgid ""
"'D' - done (output) true when timer times out and as long as E remains true"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:443
msgid "'R' - running (output) true when timer is running"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:445
msgid "The timer base can be multiples of milliseconds, seconds, or minutes."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:448
msgid ""
"There are also Variables for timers that can be read and/or written to in "
"compare or operate blocks."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:450
msgid "'%Txx.R' - Timer xx running (Boolean, read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:451
msgid "'%Txx.D' - Timer xx done (Boolean, read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:452
msgid "'%Txx.V' - Timer xx current value (integer, read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:453
msgid "'%Txx.P' - Timer xx preset (integer, read or write)"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:454
#, no-wrap
msgid "MONOSTABLES"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:458
msgid ""
"Represent the original one-shot timers. This is now deprecated and replaced "
"by IEC Timers."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:460
msgid "Monostables have 2 contacts, I and R."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:462
msgid "'I' - input (input) will start the mono timer running."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:463
msgid "'R' - running (output) will be true while timer is running."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:470
msgid ""
"The I contact is rising edge sensitive meaning it starts the timer only when "
"changing from false to true (or off to on). While the timer is running the I "
"contact can change with no effect to the running timer. R will be true and "
"stay true till the timer finishes counting to zero. The timer base can be "
"multiples of milliseconds, seconds, or minutes."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:473
msgid ""
"There are also Variables for monostables that can be read and/or written to "
"in compare or operate blocks."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:475
msgid "'%Mxx.R' - Monostable xx running (Boolean, read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:476
msgid "'%Mxx.V' - Monostable xx current value (integer, read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:477
msgid "'%Mxx.P' - Monostable xx preset (integer, read or write)"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:478
#, no-wrap
msgid "COUNTERS"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:481
msgid "Represent up/down counters."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:483
msgid "There are 7 contacts:"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:485
msgid "'R' - reset (input) will reset the count to 0."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:486
msgid ""
"'P' - preset (input) will set the count to the preset number assigned from "
"the edit menu."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:487
msgid "'U' - up count (input) will add one to the count."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:488
msgid "'D' - down count (input) will subtract one from the count."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:489
msgid ""
"'E' - under flow (output) will be true when the count rolls over from 0 to "
"9999."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:490
msgid "'D' - done (output) will be true when the count equals the preset."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:491
msgid ""
"'F' - overflow (output) will be true when the count rolls over from 9999 to "
"0."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:495
msgid ""
"The up and down count contacts are edge sensitive meaning they only count "
"when the contact changes from false to true (or off to on if you prefer)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:497
msgid "The range is 0 to 9999."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:500
msgid ""
"There are also Variables for counters that can be read and/or written to in "
"compare or operate blocks."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:502
msgid "'%Cxx.D' - Counter xx done (Boolean, read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:503
msgid "'%Cxx.E' - Counter xx empty overflow (Boolean, read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:504
msgid "'%Cxx.F' - Counter xx full overflow (Boolean, read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:505
msgid "'%Cxx.V' - Counter xx current value (integer, read or write)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:506
msgid "'%Cxx.P' - Counter xx preset (integer, read or write)"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:507
#, no-wrap
msgid "COMPARE"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:511
msgid ""
"For arithmetic comparison. Is variable %XXX = to this number (or evaluated "
"number)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:514
msgid ""
"The compare block will be true when comparison is true. you can use most "
"math symbols:"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:516
msgid "+, - ,* , /, = (standard math symbols)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:518
msgid ""
"< (less than), > (greater than), <= (less or equal), >= (greater or equal), "
"<> (not equal)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:521
msgid ""
"(, ) separate into groups example %IF1=2,&%IF2<5 in pseudo code translates "
"to if %IF1 is equal to 2 and %IF2 is less than 5 then the comparison is "
"true.  Note the comma separating the two groups of comparisons."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:522
msgid "^ (exponent),% (modulus),& (and),| (or),. -"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:523
msgid "ABS (absolute), MOY (French for average) ,AVG (average)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:525
msgid "For example ABS(%W2)=1, MOY(%W1,%W2)<3."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:529
msgid ""
"No spaces are allowed in the comparison equation. For example %C0.V>%C0.P is "
"a valid comparison expression while %C0.V > %CO.P is not a valid expression."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:533
msgid ""
"There is a list of Variables down the page that can be used for reading from "
"and writing to ladder objects. When a new compare block is opened be sure "
"and delete the # symbol when you enter a compare."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:536
msgid ""
"To find out if word variable #1 is less than 2 times the current value of "
"counter #0 the syntax would be:"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:539
#, no-wrap
msgid "%W1<2*%C0.V\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:542
msgid "To find out if S32in bit 2 is equal to 10 the syntax would be:"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:545
#, no-wrap
msgid "%IW2=10\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:549
msgid ""
"Note: Compare uses the arithmetic equals not the double equals that "
"programmers are used to."
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:550
#, no-wrap
msgid "VARIABLE ASSIGNMENT"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:556
msgid ""
"For variable assignment, e.g. assign this number (or evaluated number)  to "
"this variable %xxx, there are two math functions MINI and MAXI that check a "
"variable for maximum (0x80000000) and minimum values (0x07FFFFFFF) (think "
"signed values) and keeps them from going beyond."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:559
msgid ""
"When a new variable assignment block is opened be sure to delete the # "
"symbol when you enter an assignment."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:562
msgid ""
"To assign a value of 10 to the timer preset of IEC Timer 0 the syntax would "
"be:"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:565
#, no-wrap
msgid "%TM0.P=10\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:568
msgid "To assign the value of 12 to s32out bit 3 the syntax would be:"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:571
#, no-wrap
msgid "%QW3=12\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:578
msgid ""
"When you assign a value to a variable with the variable assignment block the "
"value is retained until you assign a new value using the variable assignment "
"block. The last value assigned will be restored when LinuxCNC is started."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:584
msgid ""
"The following figure shows an Assignment and a Comparison Example.  %QW0 is "
"a S32out bit and %IW0 is a S32in bit. In this case the HAL pin "
"classicladder.0.s32out-00 will be set to a value of 5 and when the HAL pin "
"classicladder.0.s32in-00 is 0 the HAL pin classicladder.0.out-00 will be set "
"to True."
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:586
#, no-wrap
msgid "Assign/Compare Ladder Example"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:587
#, no-wrap
msgid "Assign/Compare Example"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:587
#, no-wrap
msgid "images/AssignCompare-Ladder.png"
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:589
#, no-wrap
msgid "Assignment Expression Example"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:590
#, no-wrap
msgid "images/Assignment_Expression.png"
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:592
#, no-wrap
msgid "Comparison Expression Example"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:593
#, no-wrap
msgid "images/Comparison_Expression.png"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:595
#, no-wrap
msgid "COILS"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:599
msgid ""
"Coils represent relay coils. They are controlled by the variable letter and "
"number assigned to them."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:604
msgid ""
"The variable letter can be B or Q and the number can be up to a three digit "
"number, e.g., %Q3, or %B123. Q coils control HAL out pins, e.g. if %Q15 is "
"energized then HAL pin classicladder.0.out-15 will be true. B coils are "
"internal coils used to control program flow."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:608
msgid ""
"'N.O. COIL' - A relay coil: When coil is energized, then its contact that is "
"normally open (short: N.O.) will be closed (turned on, true, etc.) and the "
"current may pass."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:611
msgid ""
"'N.C. COIL' - A relay coil that inverses its contacts: When coil is "
"energized, then its contact that is normally closed (short: N.C.) will be "
"opened (turned off, false, etc) and the current flow is interrupted."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:613
msgid ""
"'SET COIL' - A relay coil with latching contacts: When coil is energized "
"then its N.O. contact will be latched closed."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:615
msgid ""
"'RESET COIL' - A relay coil with latching contacts: When coil is energized "
"then its N.O. contact will be latched open."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:619
msgid ""
"'JUMP COIL' - A 'goto' coil: When coil is energized then the ladder program "
"jumps to a rung (in the CURRENT section) - jump points are designated by a "
"rung label. (Add rung labels in the section display, top left label box.)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:623
msgid ""
"'CALL COIL' - A 'gosub' coil: When coil is energized then the program jumps "
"to a subroutine section designated by a subroutine number - subroutines are "
"designated SR0 to SR9 (designate them in the section manager)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:628
msgid ""
"If you use a N.C. contact with a N.C. coil the logic will work (when the "
"coil is energized the contact will be closed) but that is really hard to "
"follow!"
msgstr ""

#. type: Title ====
#: src/ladder/classic-ladder.adoc:629
#, no-wrap
msgid "JUMP COIL"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:633
msgid ""
"A JUMP COIL is used to 'JUMP' to another section, like a goto in BASIC "
"programming language."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:637
msgid ""
"If you look at the top left of the sections display window you will see a "
"small label box and a longer comment box beside it. Now go to Editor→Modify "
"then go back to the little box, type in a name."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:641
msgid ""
"Go ahead and add a comment in the comment section. This label name is the "
"name of this rung only and is used by the JUMP COIL to identify where to go."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:644
msgid ""
"When placing a JUMP COIL, add it in the rightmost position and change the "
"label to the rung you want to JUMP to."
msgstr ""

#. type: Title ====
#: src/ladder/classic-ladder.adoc:645
#, no-wrap
msgid "CALL COIL"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:649
msgid ""
"A CALL COIL is used to go to a subroutine section then return, like a gosub "
"in BASIC programming language."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:653
msgid ""
"If you go to the sections manager window hit the add section button.  You "
"can name this section, select what language it will use (ladder or "
"sequential), and select what type (main or subroutine)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:656
msgid ""
"Select a subroutine number (SR0 for example). An empty section will be "
"displayed and you can build your subroutine."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:659
msgid ""
"When you've done that, go back to the section manager and click on the your "
"main section (default name prog1)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:662
msgid ""
"Now you can add a CALL COIL to your program. CALL COILs are to be placed at "
"the rightmost position in the rung."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:664
msgid "Remember to change the label to the subroutine number you chose before."
msgstr ""

#. type: Title ==
#: src/ladder/classic-ladder.adoc:665
#, no-wrap
msgid "ClassicLadder Variables"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:670
msgid ""
"These Variables are used in COMPARE or OPERATE to get information about, or "
"change specs of, ladder objects such as changing a counter preset, or seeing "
"if a timer is done running."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:672
msgid "List of variables :"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:674
msgid "'%Bxxx' - Bit memory xxx (Boolean)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:675
msgid "'%Wxxx' - Word memory xxx (32 bits signed integer)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:676
msgid "'%IWxxx' - Word memory xxx (S32 in pin)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:677
msgid "'%QWxxx' - Word memory xxx (S32 out pin)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:678
msgid ""
"'%IFxx' - Word memory xx (Float in pin) (*converted to S32 in ClassicLadder*)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:679
msgid ""
"'%QFxx' - Word memory xx (Float out pin) (*converted to S32 in "
"ClassicLadder*)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:680
msgid "'%Txx.R' - Timer xx running (Boolean, user read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:681
msgid "'%Txx.D' - Timer xx done (Boolean, user read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:682
msgid "'%Txx.V' - Timer xx current value (integer, user read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:683
msgid "'%Txx.P' - Timer xx preset (integer)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:684
msgid "'%TMxxx.Q' - Timer xxx done (Boolean, read write)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:685
msgid "'%TMxxx.P' - Timer xxx preset (integer, read write)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:686
msgid "'%TMxxx.V' - Timer xxx value (integer, read write)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:687
msgid "'%Mxx.R' - Monostable xx running (Boolean)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:688
msgid "'%Mxx.V' - Monostable xx current value (integer, user read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:689
msgid "'%Mxx.P' - Monostable xx preset (integer)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:690
msgid "'%Cxx.D' - Counter xx done (Boolean, user read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:691
msgid "'%Cxx.E' - Counter xx empty overflow (Boolean, user read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:692
msgid "'%Cxx.F' - Counter xx full overflow (Boolean, user read only)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:693
msgid "'%Cxx.V' - Counter xx current value (integer)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:694
msgid "'%Cxx.P' - Counter xx preset (integer)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:695
msgid "'%Ixxx' - Physical input xxx (Boolean) (HAL input bit)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:696
msgid "'%Qxxx' - Physical output xxx (Boolean) (HAL output bit)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:697
msgid "'%Xxxx' - Activity of step xxx (sequential language)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:698
msgid ""
"'%Xxxx.V' - Time of activity in seconds of step xxx (sequential language)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:699
msgid "'%Exx' - Errors (Boolean, read write(will be overwritten))"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:702
msgid ""
"'Indexed or vectored variables' - These are variables indexed by another "
"variable.  Some might call this vectored variables.  Example: %W0[%W4] => if "
"%W4 equals 23 it corresponds to %W23"
msgstr ""

#. type: Title ==
#: src/ladder/classic-ladder.adoc:703
#, no-wrap
msgid "GRAFCET (State Machine) Programming"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:713
msgid ""
"This is probably the least used and most poorly understood feature of "
"ClassicLadder.  Sequential programming is used to make sure a series of "
"ladder events always happen in a prescribed order. Sequential programs do "
"not work alone. There is always a ladder program as well that controls the "
"variables. Here are the basic rules governing sequential programs:"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:717
msgid ""
"Rule 1 : Initial situation - The initial situation is characterized by the "
"initial steps which are by definition in the active state at the beginning "
"of the operation.There shall be at least one initial step."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:722
msgid ""
"Rule 2 : R2, Clearing of a transition - A transition is either enabled or "
"disabled. It is said to be enabled when all immediately preceding steps "
"linked to its corresponding transition symbol are active, otherwise it is "
"disabled. A transition cannot be cleared unless it is enabled, and its "
"associated transition condition is true."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:725
msgid ""
"Rule 3 : R3, Evolution of active steps - The clearing of a transition "
"simultaneously leads to the active state of the immediately following "
"step(s) and to the inactive state of the immediately preceding step(s)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:727
msgid ""
"Rule 4 : R4, Simultaneous clearing of transitions - All simultaneous cleared "
"transitions are simultaneously cleared."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:730
msgid ""
"Rule 5 : R5, Simultaneous activation and deactivation of a step - If during "
"operation, a step is simultaneously activated and deactivated, priority is "
"given to the activation."
msgstr ""

#. FIXME Convert CL sequential editor window description to table or add callouts on image
#. type: Plain text
#: src/ladder/classic-ladder.adoc:739
#, no-wrap
msgid ""
"This is the SEQUENTIAL editor window. (Starting from the top left):\n"
"Selector arrow , Eraser\n"
"Ordinary step ,  Initial (Starting) step\n"
"Transition ,  Step and Transition\n"
"Transition Link-Downside ,  Transition Link-Upside\n"
"Pass-through Link-Downside , Pass-through Link-Upside Jump\n"
"Link, Comment Box +"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:740 src/ladder/classic-ladder.adoc:741
#, no-wrap
msgid "Sequence Editor Window"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:741
#, no-wrap
msgid "images/sequence-editor.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:744
msgid "'ORDINARY STEP' - has a unique number for each one"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:746
msgid ""
"'STARTING STEP' - a sequential program must have one.  This is where the "
"program will start."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:748
msgid ""
"'TRANSITION' - This shows the variable that must be true for control to pass "
"through to the next step."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:749
msgid "'STEP AND TRANSITION' - Combined for convenience"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:751
msgid ""
"'TRANSITION LINK-DOWNSIDE' - splits the logic flow to one of two possible "
"lines based on which of the next steps is true first (Think OR logic)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:752
msgid "'TRANSITION LINK=UPSIDE' - combines two (OR) logic lines back in to one"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:754
msgid ""
"'PASS-THROUGH LINK-DOWNSIDE' - splits the logic flow to two lines that BOTH "
"must be true to continue (Think AND logic)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:755
msgid ""
"'PASS-THROUGH LINK-UPSIDE' - combines two concurrent (AND logic) logic lines "
"back together"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:757
msgid ""
"'JUMP LINK' - connects steps that are not underneath each other such as "
"connecting the last step to the first"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:758
msgid "'COMMENT BOX' - used to add comments"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:762
msgid ""
"To use links, you must have steps already placed. Select the type of link, "
"then select the two steps or transactions one at a time. It takes practice!"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:771
msgid ""
"With sequential programming: The variable %Xxxx (eg. %X5) is used to see if "
"a step is active. The variable %Xxxx.V (eg. %X5.V) is used to see how long "
"the step has been active. The %X and %X.v variables are use in LADDER logic. "
"The variables assigned to the transitions (eg. %B)  control whether the "
"logic will pass to the next step. After a step has become active the "
"transition variable that caused it to become active has no control of it "
"anymore. The last step has to JUMP LINK back only to the beginning step."
msgstr ""

#. type: Title ==
#: src/ladder/classic-ladder.adoc:772
#, no-wrap
msgid "Modbus"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:775
msgid "Things to consider:"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:778
msgid ""
"Modbus is a userspace program so it might have latency issues on a heavily "
"laden computer."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:780
msgid ""
"Modbus is not really suited to hard real time events such as position "
"control of motors or to control E-stop."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:781
msgid "The ClassicLadder GUI must be running for Modbus to be running."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:782
msgid "Modbus is not fully finished so it does not do all modbus functions."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:785
msgid ""
"To get MODBUS to initialize you must specify that when loading the "
"ClassicLadder userspace program."
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:786
#, no-wrap
msgid "Loading Modbus"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:789
#, no-wrap
msgid "loadusr -w classicladder --modmaster myprogram.clp\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:794
msgid ""
"The -w makes HAL wait until you close ClassicLadder before closing realtime "
"session. ClassicLadder also loads a TCP modbus slave if you add '--"
"modserver' on command line."
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:795
#, no-wrap
msgid "Modbus Functions"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:797
msgid "'1' - read coils"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:798
msgid "'2' - read inputs"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:799
msgid "'3' - read holding registers"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:800
msgid "'4' - read input registers"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:801
msgid "'5' - write single coils"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:802
msgid "'6' - write single register"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:803
msgid "'8' - echo test"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:804
msgid "'15' - write multiple coils"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:805
msgid "'16' - write multiple registers"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:808
msgid ""
"If you do not specify a '-- modmaster' when loading the ClassicLadder user "
"program this page will not be displayed."
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:810
#, no-wrap
msgid "Modbus I/O Config"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:811
#, no-wrap
msgid "Config I/O"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:811
#, no-wrap
msgid "images/Config-io.png"
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:814
#, no-wrap
msgid "Modbus Communication Config"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:815
#, no-wrap
msgid "Config Coms"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:815
#, no-wrap
msgid "images/Config-com.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:819
msgid ""
"'SERIAL PORT' - For IP blank. For serial the location/name of serial driver "
"eg.  /dev/ttyS0 ( or /dev/ttyUSB0 for a USB-to-serial converter)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:821
msgid ""
"'SERIAL SPEED' - Should be set to speed the slave is set for - 300, 600, "
"1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 are supported."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:823
msgid ""
"'PAUSE AFTER TRANSMIT' - Pause (milliseconds) after transmit and before "
"receiving answer, some devices need more time (e.g., USB-to-serial "
"converters)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:825
msgid ""
"'PAUSE INTER-FRAME' - Pause (milliseconds) after receiving answer from "
"slave.  This sets the duty cycle of requests (it's a pause for EACH request)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:827
msgid ""
"'REQUEST TIMEOUT LENGTH' - Length (milliseconds) of time before we decide "
"that the slave didn't answer."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:829
msgid ""
"'MODBUS ELEMENT OFFSET' - used to offset the element numbers by 1 (for "
"manufacturers numbering differences)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:830
msgid ""
"'DEBUG LEVEL' - Set this to 0-3 (0 to stop printing debug info besides no-"
"response errors)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:831
msgid ""
"'READ COILS/INPUTS MAP TO' - Select what variables that read coils/inputs "
"will update. (B or Q)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:832
msgid ""
"'WRITE COILS MAP TO' - Select what variables that write coils will updated "
"from (B,Q,or I)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:833
msgid ""
"'READ REGISTERS/HOLDING' - Select what variables that read registers will "
"update (W or QW)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:834
msgid ""
"'WRITE REGISTERS MAP TO' - Select what variables that read registers will "
"updated from (W, QW, or IW)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:836
msgid ""
"'SLAVE ADDRESS' - For serial the slaves ID number usually settable on the "
"slave device (usually 1-256) For IP the slave IP address plus optionally the "
"port number."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:837
msgid ""
"'TYPE ACCESS' - This selects the MODBUS function code to send to the slave "
"(eg what type of request)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:838
msgid ""
"'COILS / INPUTS' - Inputs and Coils (bits) are read from/written to I, B, or "
"Q variables (user selects)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:839
msgid ""
"'REGISTERS (WORDS)' - Registers (Words/Numbers) map to IW, W, or QW "
"variables (user selects)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:841
msgid ""
"'1st MODBUS ELEMENT' - The address (or register number) of the first element "
"in a group (remember to set MODBUS ELEMENT OFFSET properly)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:842
msgid "'NUMBER OF ELEMENTS' - The number of elements in this group."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:843
msgid "'LOGIC' - You can invert the logic here."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:845
msgid ""
"'1st%I%Q IQ WQ MAPPED' - This is the starting number of %B, %I, %Q, %W, %IW, "
"or %QW variables that are mapped onto/from the modbus element group "
"(starting at the first modbus element number)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:848
msgid ""
"In the example above: Port number - for my computer /dev/ttyS0 was my serial "
"port."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:850
msgid "The serial speed is set to 9600 baud."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:853
msgid ""
"Slave address is set to 12 (on my VFD I can set this from 1-31, meaning I "
"can talk to 31 VFDs maximum on one system)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:857
msgid ""
"The first line is set up for 8 input bits starting at the first register "
"number (register 1). So register numbers 1-8 are mapped onto ClassicLadder's "
"%B variables starting at %B1 and ending at %B8."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:861
msgid ""
"The second line is set for 2 output bits starting at the ninth register "
"number (register 9) so register numbers 9-10 are mapped onto ClassicLadder's "
"%Q variables starting at %Q9 ending at %Q10."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:865
msgid ""
"The third line is set to write 2 registers (16 bits each) starting at the "
"0th register number (register 0) so register numbers 0-1 are mapped onto "
"ClassicLadder's %W variables starting at %W0 ending at %W1."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:870
msgid ""
"It's easy to make an off-by-one error as sometimes the modbus elements are "
"referenced starting at one rather then 0 (actually by the standard that is "
"the way it's supposed to be!) You can use the modbus element offset radio "
"button to help with this."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:873
msgid ""
"The documents for your modbus slave device will tell you how the registers "
"are set up- there is no standard way."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:877
msgid ""
"The SERIAL PORT, PORT SPEED, PAUSE, and DEBUG level are editable for changes "
"(when you close the config window values are applied, though Radio buttons "
"apply immediately)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:880
msgid ""
"To use the echo function select the echo function and add the slave number "
"you wish to test. You don't need to specify any variables."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:884
msgid ""
"The number 257 will be sent to the slave number you specified and the slave "
"should send it back. you will need to have ClassicLadder running in a "
"terminal to see the message."
msgstr ""

#. type: Title ==
#: src/ladder/classic-ladder.adoc:885
#, no-wrap
msgid "MODBUS Settings"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:888
msgid "Serial:"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:890
msgid "ClassicLadder uses RTU protocol (not ASCII)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:891
msgid "8 data bits, No parity is used, and 1 stop bit is also known as 8-N-1."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:893
msgid ""
"Baud rate must be the same for slave and master. ClassicLadder can only have "
"one baud rate so all the slaves must be set to the same rate."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:894
msgid "Pause inter frame is the time to pause after receiving an answer."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:897
msgid ""
"MODBUS_TIME_AFTER_TRANSMIT is the length of pause after sending a request "
"and before receiving an answer (this apparently helps with USB converters "
"which are slow)."
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:898
#, no-wrap
msgid "MODBUS Info"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:902
msgid ""
"ClassicLadder can use distributed inputs/outputs on modules using the modbus "
"protocol (\"master\": polling slaves)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:903
msgid "The slaves and theirs I/O can be configured in the config window."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:905
msgid ""
"2 exclusive modes are available : ethernet using Modbus/TCP and serial using "
"Modbus/RTU."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:906
msgid "No parity is used."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:907
msgid "If no port name for serial is set, TCP/IP mode will be used..."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:908
msgid "The slave address is the slave address (Modbus/RTU) or the IP address."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:910
msgid ""
"The IP address can be followed per the port number to use (xx.xx.xx.xx:pppp) "
"else the port 9502 will be used per default."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:913
msgid ""
"2 products have been used for tests: a Modbus/TCP one (Adam-6051, http://www."
"advantech.com) and a serial Modbus/RTU one (http://www.ipac.ws)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:914
msgid "See examples: adam-6051 and modbus_rtu_serial."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:916
msgid ""
"Web links: http://www.modbus.org and this interesting one: http://www.iatips."
"com/modbus.html"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:917
msgid "MODBUS TCP SERVER INCLUDED"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:920
msgid ""
"ClassicLadder has a Modbus/TCP server integrated. Default port is 9502.  "
"(the previous standard 502 requires that the application must be launched "
"with root privileges)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:921
msgid ""
"List of Modbus functions code supported are: 1, 2, 3, 4, 5, 6, 15 and 16."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:923
msgid ""
"Modbus bits and words correspondence table is actually not parametric and "
"correspond directly to the %B and %W variables."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:925
msgid "More information on modbus protocol is available on the internet."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:927
msgid "http://www.modbus.org/[http://www.modbus.org/]"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:928
#, no-wrap
msgid "Communication Errors"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:934
msgid ""
"If there is a communication error, a warning window will pop up (if the GUI "
"is running) and %E0 will be true. Modbus will continue to try to "
"communicate. The %E0 could be used to make a decision based on the error. A "
"timer could be used to stop the machine if timed out, etc."
msgstr ""

#. type: Title ==
#: src/ladder/classic-ladder.adoc:935
#, no-wrap
msgid "Debugging modbus problems"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:941
msgid ""
"A good reference for the protocol: http://www.modbus.org/docs/"
"Modbus_Application_Protocol_V1_1b.pdf If you run linuxcnc/classocladder from "
"a terminal, it will print the Modbus commands and slave responses."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:946
msgid ""
"Here we set ClassicLadder to request slave 1, to read holding registers "
"(function code 3) starting at address 8448 (0x2100).  We ask for 1 (2 byte "
"wide) data element to be returned.  We map it to a ClassicLadder variable "
"starting at 2."
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:947
#, no-wrap
msgid "Modbus I/O Register Setup"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:948
#, no-wrap
msgid "Config I/O Register Setting"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:948
#, no-wrap
msgid "images/modbus_register_setting.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:953
msgid ""
"Note in this image we have set the debug level to 1 so modbus messages are "
"printed to the terminal.  We have mapped our read and written holding "
"registers to ClassicLadder's %W variables so our returned data will be in "
"%W2 as in the other image we mapped the data starting at the 2nd element."
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:954
#, no-wrap
msgid "Modbus Communication Setup"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:955
#, no-wrap
msgid "Communication Setting"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:955
#, no-wrap
msgid "images/modbus_com_setting.png"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:957
#, no-wrap
msgid "Request"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:960
msgid ""
"Lets look at an example of reading one hold register at 8448 Decimal (0x2100 "
"Hex)."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:962
msgid "Looking in the Modbus protocol reference:"
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:963
#, no-wrap
msgid "Read holding register request"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:966 src/ladder/classic-ladder.adoc:997
#: src/ladder/classic-ladder.adoc:1030 src/plasma/qtplasmac.adoc:116
#: src/plasma/qtplasmac.adoc:753 src/plasma/qtplasmac.adoc:777
#: src/plasma/qtplasmac.adoc:815 src/plasma/qtplasmac.adoc:833
#: src/plasma/qtplasmac.adoc:846 src/plasma/qtplasmac.adoc:885
#: src/plasma/qtplasmac.adoc:895 src/plasma/qtplasmac.adoc:910
#: src/plasma/qtplasmac.adoc:928 src/plasma/qtplasmac.adoc:945
#: src/plasma/qtplasmac.adoc:956 src/plasma/qtplasmac.adoc:1023
#: src/plasma/qtplasmac.adoc:1044 src/plasma/qtplasmac.adoc:1060
#: src/plasma/qtplasmac.adoc:1070 src/plasma/qtplasmac.adoc:1080
#: src/plasma/qtplasmac.adoc:1090 src/plasma/qtplasmac.adoc:1107
#: src/plasma/qtplasmac.adoc:1141 src/plasma/qtplasmac.adoc:1203
#: src/plasma/qtplasmac.adoc:1245 src/plasma/qtplasmac.adoc:1536
#: src/plasma/qtplasmac.adoc:1550 src/plasma/qtplasmac.adoc:1789
#: src/plasma/qtplasmac.adoc:2337 src/plasma/qtplasmac.adoc:2580
#: src/plasma/qtplasmac.adoc:3744
#, no-wrap
msgid "Name"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:966 src/ladder/classic-ladder.adoc:1030
#, no-wrap
msgid "number of bytes"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:967 src/ladder/classic-ladder.adoc:998
#: src/ladder/classic-ladder.adoc:1031
#, no-wrap
msgid "Value (hex)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:967 src/ladder/classic-ladder.adoc:1031
#, no-wrap
msgid "Function code"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:967
#, no-wrap
msgid "(1 Byte)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:968
#, no-wrap
msgid "3  (0x03)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:968
#, no-wrap
msgid "Starting Address"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:968 src/ladder/classic-ladder.adoc:969
#, no-wrap
msgid "(2 Bytes)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:969
#, no-wrap
msgid "0 - 65535 (0x0000 to 0xFFFF)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:969
#, no-wrap
msgid "Number of Registers"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:970
#, no-wrap
msgid "1 to 125 (0x7D)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:970 src/ladder/classic-ladder.adoc:1000
#: src/ladder/classic-ladder.adoc:1034
#, no-wrap
msgid "Checksum"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:970 src/ladder/classic-ladder.adoc:1000
#: src/ladder/classic-ladder.adoc:1034
#, no-wrap
msgid "(2 bytes)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:971 src/ladder/classic-ladder.adoc:1001
#, no-wrap
msgid "Calculated automatically"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:974
msgid "Here is an example sent command as printed in the terminal (all Hex):"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:977
#, no-wrap
msgid "INFO CLASSICLADDER-   Modbus I/O module to send: Lgt=8 <-  Slave address-1  Function code-3  Data-21 0 0 1 8E 36\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:980
msgid "Meaning (Hex):"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:982
msgid ""
"Lgt = 8 = message is 8 bytes long including slave number and checksum number"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:983 src/ladder/classic-ladder.adoc:1019
#: src/ladder/classic-ladder.adoc:1048
msgid "Slave number = 1 (0x1) = Slave address 1"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:984
msgid "Function code = 3 (0x3) = read holding register"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:985
msgid ""
"Start at address = highbyte 33 (0x21) lowbyte 0 (0x00) = combined address = "
"8448 (0x2100)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:986
msgid ""
"Number of Registers = 1 (0x1) = return 1 2-byte register (holding and "
"reading registers are always 2 bytes wide)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:987
msgid "Checksum = high byte 0x8E lowbyte 0x36 = (0x8E36)"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:988
#, no-wrap
msgid "Error response"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:993
msgid ""
"If there is an error response, it sends the function code plus 0x80, an "
"error code, and a checksum.  Getting an error response means the slave is "
"seeing the request command but can not give valid data.  Looking in the "
"Modbus protocol reference:"
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:994
#, no-wrap
msgid "Error returned for function code 3 (read holding register)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:997
#, no-wrap
msgid "Number of bytes"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:998
#, no-wrap
msgid "Error code"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:998 src/ladder/classic-ladder.adoc:999
#: src/ladder/classic-ladder.adoc:1031 src/ladder/classic-ladder.adoc:1032
#, no-wrap
msgid "1 Byte"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:999
#, no-wrap
msgid "131 (0x83)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:999
#, no-wrap
msgid "Exception code"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:1000
#, no-wrap
msgid "1-4 (0x01 to 0x04)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1004
msgid "Exception code meaning:"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1006
msgid "1 - illegal Function"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1007
msgid "2 - illegal data address"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1008
msgid "3 - illegal data value"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1009
msgid "4 - slave device failure"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1011 src/ladder/classic-ladder.adoc:1040
msgid ""
"Here is an example received command as printed in the terminal (all Hex):"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:1014
#, no-wrap
msgid "INFO CLASSICLADDER-   Modbus I/O module received: Lgt=5 ->   (Slave address-1  Function code-83 ) 2 C0 F1\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1017
msgid "Meaning (Hex): +"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1020
msgid "Function code = 131 (0x83) = error while reading holding register"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1021
msgid "Error code = 2 (0x2) = illegal data address requested"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1022
msgid "Checksum = (0x8E36)"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:1023
#, no-wrap
msgid "Data response"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1026
msgid "Looking in the Modbus protocol reference for Response:"
msgstr ""

#. type: Block title
#: src/ladder/classic-ladder.adoc:1027
#, no-wrap
msgid "Data response for function code 3 (read holding register)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:1032
#, no-wrap
msgid "3 (0x03)"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:1032
#, no-wrap
msgid "Byte count"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:1033
#, no-wrap
msgid "2 x N*"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:1033
#, no-wrap
msgid "Register value"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:1033
#, no-wrap
msgid "N* x 2 Bytes"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:1034
#, no-wrap
msgid "returned value of requested address"
msgstr ""

#. type: Table
#: src/ladder/classic-ladder.adoc:1035
#, no-wrap
msgid "calculated automatically"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1038
#, no-wrap
msgid "*N = Number of registers\n"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:1043
#, no-wrap
msgid "INFO CLASSICLADDER-   Modbus I/O module received: Lgt=7 ->   (Slave address-1  Function code-3 2 0 0 B8 44)\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1046
msgid "meaning (Hex):"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1049
msgid "Requested function code = 3 (0x3) = read holding register requested"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1050
msgid ""
"count of byte registers = 2 (0x1) = return 2 bytes (each register value is 2 "
"bytes wide)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1051
msgid "value of highbyte = 0 (0x0) = high byte value of address 8448 (0x2100)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1052
msgid "value of lowbyte = 0 (0x0) = high byte value of address 8448 (0x2100)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1053
msgid "Checksum = (0xB844)"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1059
msgid ""
"(high and low bytes are combined to create a 16 bit value and then "
"transferred to ClassicLadder's variable.)  Read Registers can be mapped to "
"%W or %QW (internal memory or HAL out pins).  Write registers can be mapped "
"from %W, %QW or %IW (internal memory, HAL out pins or HAL in pins).  The "
"variable number will start at the number entered in the modbus I/O registry "
"setup page's column: 'First variable mapped'.  If multiple registers are "
"requested in one read/write then the variable number are sequential after "
"the first one."
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:1060
#, no-wrap
msgid "MODBUS Bugs"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1064
msgid ""
"In compare blocks the function %W=ABS(%W1-%W2) is accepted but does not "
"compute properly. only %W0=ABS(%W1) is currently legal."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1067
msgid ""
"When loading a ladder program it will load Modbus info but will not tell "
"ClassicLadder to initialize Modbus. You must initialize Modbus when you "
"first load the GUI by adding '--modmaster'."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1069
msgid ""
"If the section manager is placed on top of the section display, across the "
"scroll bar and exit is clicked the user program crashes."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1071
msgid ""
"When using '--modmaster' you must load the ladder program at the same time "
"or else only TCP will work."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1072
msgid "reading/writing multiple registers in Modbus has checksum errors."
msgstr ""

#. type: Title ==
#: src/ladder/classic-ladder.adoc:1073
#, no-wrap
msgid "Setting up ClassicLadder"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1078
msgid ""
"In this section we will cover the steps needed to add ClassicLadder to a "
"Stepconf Wizard generated config. On the advanced Configuration Options page "
"of Stepconf Wizard check off \"Include ClassicLadder PLC\"."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:1080 src/ladder/classic-ladder.adoc:1081
#, no-wrap
msgid "Stepconf ClassicLadder"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:1081
#, no-wrap
msgid "images/stepconf_ladder.png"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:1083
#, no-wrap
msgid "Add the Modules"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1087
msgid ""
"If you used the Stepconf Wizard to add ClassicLadder you can skip this step."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1090
msgid ""
"To manually add ClassicLadder you must first add the modules. This is done "
"by adding a couple of lines to the custom.hal file."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1092
msgid "This line loads the real time module:"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1099
msgid "This line adds the ClassicLadder function to the servo thread:"
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:1103
#, no-wrap
msgid "addf classicladder.0.refresh servo-thread\n"
msgstr ""

#. type: Title ===
#: src/ladder/classic-ladder.adoc:1105
#, no-wrap
msgid "Adding Ladder Logic"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1116
msgid ""
"Now start up your config and select \"File/Ladder Editor\" to open up the "
"ClassicLadder GUI. You should see a blank Section Display and Sections "
"Manager window as shown above. In the Section Display window open the "
"Editor. In the Editor window select Modify. Now a Properties window pops up "
"and the Section Display shows a grid. The grid is one rung of ladder. The "
"rung can contain branches. A simple rung has one input, a connector line and "
"one output. A rung can have up to six horizontal branches. While it is "
"possible to have more than one circuit in a run the results are not "
"predictable."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:1118 src/ladder/classic-ladder.adoc:1119
#, no-wrap
msgid "Section Display with Grid"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:1119
#, no-wrap
msgid "images/Section_Display_Grid.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1122
msgid "Now click on the N.O. Input in the Editor Window."
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:1125
#, no-wrap
msgid "images/Editor_NO_Input.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1129
msgid ""
"Now click in the upper left grid to place the N.O. Input into the ladder."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:1131 src/ladder/classic-ladder.adoc:1132
#, no-wrap
msgid "Section Display with Input"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:1132
#, no-wrap
msgid "images/Section_Display_Build01.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1137
msgid ""
"Repeat the above steps to add a N.O. Output to the upper right grid and use "
"the Horizontal Connection to connect the two. It should look like the "
"following. If not, use the Eraser to remove unwanted sections."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:1139 src/ladder/classic-ladder.adoc:1140
#, no-wrap
msgid "Section Display with Rung"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:1140
#, no-wrap
msgid "images/Section_Display_Build02.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1144
msgid ""
"Now click on the OK button in the Editor window.  Now your Section Display "
"should look like this:"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:1146 src/ladder/classic-ladder.adoc:1147
#, no-wrap
msgid "Section Display Finished"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:1147
#, no-wrap
msgid "images/Section_Display_Build03.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1152
msgid ""
"To save the new file select 'Save As' and give it a name. The .clp extension "
"will be added automatically. It should default to the running config "
"directory as the place to save it."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/classic-ladder.adoc:1154 src/ladder/classic-ladder.adoc:1155
#, no-wrap
msgid "Save As Dialog"
msgstr ""

#. type: Target for macro image
#: src/ladder/classic-ladder.adoc:1155
#, no-wrap
msgid "images/SaveAs.png"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1159
msgid ""
"Again if you used the Stepconf Wizard to add ClassicLadder you can skip this "
"step."
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1163
msgid ""
"To manually add a ladder you need to add add a line to your custom.hal file "
"that will load your ladder file. Close your LinuxCNC session and add this "
"line to your custom.hal file."
msgstr ""

#. type: delimited block -
#: src/ladder/classic-ladder.adoc:1167
#, no-wrap
msgid "loadusr -w classicladder --nogui MyLadder.clp\n"
msgstr ""

#. type: Plain text
#: src/ladder/classic-ladder.adoc:1172
msgid ""
"Now if you start up your LinuxCNC config your ladder program will be running "
"as well. If you select \"File/Ladder Editor\", the program you created will "
"show up in the Section Display window."
msgstr ""

#. type: Title =
#: src/ladder/ladder-examples.adoc:5
#, no-wrap
msgid "ClassicLadder Examples"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/ladder-examples.adoc:13 src/ladder/ladder-examples.adoc:25
#: src/ladder/ladder-examples.adoc:26
#, no-wrap
msgid "Wrapping Counter"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:24
msgid ""
"To have a counter that 'wraps around' you have to use the preset pin and the "
"reset pin. When you create the counter set the preset at the number you wish "
"to reach before wrapping around to 0. The logic is if the counter value is "
"over the preset then reset the counter and if the underflow is on then set "
"the counter value to the preset value. As you can see in the example when "
"the counter value is greater than the counter preset the counter reset is "
"triggered and the value is now 0.  The underflow output %Q2 will set the "
"counter value at the preset when counting backwards."
msgstr ""

#. type: Target for macro image
#: src/ladder/ladder-examples.adoc:26
#, no-wrap
msgid "images/wrapping-counter.png"
msgstr ""

#. type: Title ==
#: src/ladder/ladder-examples.adoc:28
#, no-wrap
msgid "Reject Extra Pulses"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:38
msgid ""
"This example shows you how to reject extra pulses from an input.  Suppose "
"the input pulse %I0 has an annoying habit of giving an extra pulse that "
"spoils our logic. The TOF (Timer Off Delay) prevents the extra pulse from "
"reaching our cleaned up output %Q0. How this works is when the timer gets an "
"input the output of the timer is on for the duration of the time setting. "
"Using a normally closed contact %TM0.Q the output of the timer blocks any "
"further inputs from reaching our output until it times out."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/ladder-examples.adoc:39 src/ladder/ladder-examples.adoc:40
#, no-wrap
msgid "Reject Extra Pulse"
msgstr ""

#. type: Target for macro image
#: src/ladder/ladder-examples.adoc:40
#, no-wrap
msgid "images/extra-pulse-reject.png"
msgstr ""

#. type: Title ==
#: src/ladder/ladder-examples.adoc:42
#, no-wrap
msgid "External E-Stop"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:46
msgid ""
"The External E-Stop example is in the /config/classicladder/cl-estop folder. "
"It uses a PyVCP panel to simulate the external components."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:50
msgid ""
"To interface an external E-Stop to LinuxCNC and have the external E-Stop "
"work together with the internal E-Stop requires a couple of connections "
"through ClassicLadder."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:54
msgid ""
"First we have to open the E-Stop loop in the main HAL file by commenting out "
"by adding the pound sign as shown or removing the following lines."
msgstr ""

#. type: delimited block -
#: src/ladder/ladder-examples.adoc:59
#, no-wrap
msgid ""
"# net estop-out <= iocontrol.0.user-enable-out\n"
"# net estop-out => iocontrol.0.emc-enable-in\n"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:63
msgid ""
"Next we add ClassicLadder to our custom.hal file by adding these two lines:"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:71
msgid "Next we run our config and build the ladder as shown here."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/ladder-examples.adoc:73 src/ladder/ladder-examples.adoc:74
#, no-wrap
msgid "E-Stop Section Display"
msgstr ""

#. type: Target for macro image
#: src/ladder/ladder-examples.adoc:74
#, no-wrap
msgid "images/EStop_Section_Display.png"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:78
msgid ""
"After building the ladder select Save As and save the ladder as estop.clp"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:80
msgid "Now add the following line to your custom.hal file."
msgstr ""

#. type: delimited block -
#: src/ladder/ladder-examples.adoc:85
#, no-wrap
msgid ""
"# Load the ladder\n"
"loadusr classicladder --nogui estop.clp\n"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:88
msgid "I/O assignments"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:90
msgid "%I0 = Input from the PyVCP panel simulated E-Stop (the checkbox)"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:91
msgid "%I1 = Input from LinuxCNC's E-Stop"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:92
msgid "%I2 = Input from LinuxCNC's E-Stop Reset Pulse"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:93
msgid "%I3 = Input from the PyVCP panel reset button"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:94
msgid "%Q0 = Output to LinuxCNC to enable"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:96
msgid ""
"%Q1 = Output to external driver board enable pin (use a N/C output if your "
"board had a disable pin)"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:98
msgid "Next we add the following lines to the custom_postgui.hal file"
msgstr ""

#. type: delimited block -
#: src/ladder/ladder-examples.adoc:102
#, no-wrap
msgid "# E-Stop example using PyVCP buttons to simulate external components\n"
msgstr ""

#. type: delimited block -
#: src/ladder/ladder-examples.adoc:105
#, no-wrap
msgid ""
"# The PyVCP checkbutton simulates a normally closed external E-Stop\n"
"net ext-estop classicladder.0.in-00 <= pyvcp.py-estop\n"
msgstr ""

#. type: delimited block -
#: src/ladder/ladder-examples.adoc:108
#, no-wrap
msgid ""
"# Request E-Stop Enable from LinuxCNC\n"
"net estop-all-ok iocontrol.0.emc-enable-in <= classicladder.0.out-00\n"
msgstr ""

#. type: delimited block -
#: src/ladder/ladder-examples.adoc:111
#, no-wrap
msgid ""
"# Request E-Stop Enable from PyVCP or external source\n"
"net ext-estop-reset classicladder.0.in-03 <= pyvcp.py-reset\n"
msgstr ""

#. type: delimited block -
#: src/ladder/ladder-examples.adoc:114
#, no-wrap
msgid ""
"# This line resets the E-Stop from LinuxCNC\n"
"net emc-reset-estop iocontrol.0.user-request-enable => classicladder.0.in-02\n"
msgstr ""

#. type: delimited block -
#: src/ladder/ladder-examples.adoc:117
#, no-wrap
msgid ""
"# This line enables LinuxCNC to unlatch the E-Stop in ClassicLadder\n"
"net emc-estop iocontrol.0.user-enable-out => classicladder.0.in-01\n"
msgstr ""

#. type: delimited block -
#: src/ladder/ladder-examples.adoc:120
#, no-wrap
msgid ""
"# This line turns on the green indicator when out of E-Stop\n"
"net estop-all-ok => pyvcp.py-es-status\n"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:124
msgid ""
"Next we add the following lines to the panel.xml file. Note you have to open "
"it with the text editor not the default html viewer."
msgstr ""

#. type: delimited block -
#: src/ladder/ladder-examples.adoc:146
#, no-wrap
msgid ""
"<pyvcp>\n"
"<vbox>\n"
"<label><text>\"E-Stop Demo\"</text></label>\n"
"<led>\n"
"<halpin>\"py-es-status\"</halpin>\n"
"<size>50</size>\n"
"<on_color>\"green\"</on_color>\n"
"<off_color>\"red\"</off_color>\n"
"</led>\n"
"<checkbutton>\n"
"<halpin>\"py-estop\"</halpin>\n"
"<text>\"E-Stop\"</text>\n"
"</checkbutton>\n"
"</vbox>\n"
"<button>\n"
"<halpin>\"py-reset\"</halpin>\n"
"<text>\"Reset\"</text>\n"
"</button>\n"
"</pyvcp>\n"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:149
msgid "Now start up your config and it should look like this."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/ladder-examples.adoc:151 src/ladder/ladder-examples.adoc:152
#, no-wrap
msgid "AXIS E-Stop"
msgstr ""

#. type: Target for macro image
#: src/ladder/ladder-examples.adoc:152
#, no-wrap
msgid "images/axis_cl-estop.png"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:159
msgid ""
"Note that in this example like in real life you must clear the remote E-Stop "
"(simulated by the checkbox) before the AXIS E-Stop or the external Reset "
"will put you in OFF mode. If the E-Stop in the AXIS screen was pressed, you "
"must press it again to clear it. You cannot reset from the external after "
"you do an E-Stop in AXIS."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/ladder/ladder-examples.adoc:160 src/ladder/ladder-examples.adoc:166
#: src/ladder/ladder-examples.adoc:167
#, no-wrap
msgid "Timer/Operate Example"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:164
msgid ""
"In this example we are using the Operate block to assign a value to the "
"timer preset based on if an input is on or off."
msgstr ""

#. type: Target for macro image
#: src/ladder/ladder-examples.adoc:167
#, no-wrap
msgid "images/Tmr_Section_Display.png"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-examples.adoc:171
msgid ""
"In this case %I0 is true so the timer preset value is 10. If %I0 was false "
"the timer preset would be 5."
msgstr ""

#. type: Title =
#: src/ladder/ladder-intro.adoc:5
#, no-wrap
msgid "ClassicLadder Introduction"
msgstr ""

#. type: Title ==
#: src/ladder/ladder-intro.adoc:7
#, no-wrap
msgid "History"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:11
msgid ""
"ClassicLadder is a free implementation of a ladder interpreter, released "
"under the LGPL. It was written by Marc Le Douarain."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:13
msgid "He describes the beginning of the project on his website:"
msgstr ""

#. type: delimited block _
#: src/ladder/ladder-intro.adoc:23
msgid ""
"I decided to program a ladder language only for test purposes at the start, "
"in February 2001. It was planned, that I would have to participate to a new "
"product after leaving the enterprise in which I was working at that time. "
"And I was thinking that to have a ladder language in those products could be "
"a nice option to considerate. And so I started to code the first lines for "
"calculating a rung with minimal elements and displaying dynamically it under "
"Gtk, to see if my first idea to realize all this works."
msgstr ""

#. type: delimited block _
#: src/ladder/ladder-intro.adoc:26
msgid ""
"And as quickly I've found that it advanced quite well, I've continued with "
"more complex elements: timer, multiples rungs, etc..."
msgstr ""

#. type: delimited block _
#: src/ladder/ladder-intro.adoc:29
msgid ""
"Voila, here is this work... and more: I've continued to add features since "
"then."
msgstr ""

#. type: delimited block _
#: src/ladder/ladder-intro.adoc:31
msgid "Marc Le Douarain, from \"Genesis\" at the ClassicLadder website"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:36
msgid ""
"ClassicLadder has been adapted to work with LinuxCNC's HAL, and is currently "
"being distributed along with LinuxCNC. If there are issues/problems/bugs "
"please report them to the LinuxCNC project."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:48
msgid ""
"Ladder logic or the Ladder programming language is a method of drawing "
"electrical logic schematics. It is now a graphical language very popular for "
"programming Programmable Logic Controllers (PLCs). It was originally "
"invented to describe logic made from relays. The name is based on the "
"observation that programs in this language resemble ladders, with two "
"vertical 'rails' and a series of horizontal 'rungs' between them. In Germany "
"and elsewhere in Europe, the style is to draw the rails horizontally along "
"the top and bottom of the page while the rungs are drawn vertically from "
"left to right."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:53
msgid ""
"A program in ladder logic, also called a ladder diagram, is similar to a "
"schematic for a set of relay circuits. Ladder logic is useful because a wide "
"variety of engineers and technicians can understand and use it without much "
"additional training because of the resemblance."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:59
msgid ""
"Ladder logic is widely used to program PLCs, where sequential control of a "
"process or manufacturing operation is required. Ladder logic is useful for "
"simple but critical control systems, or for reworking old hardwired relay "
"circuits. As programmable logic controllers became more sophisticated it has "
"also been used in very complex automation systems."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:68
msgid ""
"Ladder logic can be thought of as a rule-based language, rather than a "
"procedural language. A 'rung' in the ladder represents a rule. When "
"implemented with relays and other electromechanical devices, the various "
"rules 'execute' simultaneously and immediately. When implemented in a "
"programmable logic controller, the rules are typically executed sequentially "
"by software, in a loop. By executing the loop fast enough, typically many "
"times per second, the effect of simultaneous and immediate execution is "
"obtained."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:70
msgid "Ladder logic follows these general steps for operation."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:72
msgid "Read Inputs"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:73
msgid "Solve Logic"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:74
msgid "Update Outputs"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:80
msgid ""
"The most common components of ladder are contacts (inputs), these usually "
"are either NC (normally closed) or NO (normally open), and coils (outputs)."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:82
msgid "the NO contact image:images/ladder_action_load.png[]"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:83
msgid "the NC contact image:images/ladder_action_loadbar.png[]"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:84
msgid "the coil (output) image:images/ladder_action_out.png[]"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:87
msgid ""
"Of course there are many more components to a full ladder language, but "
"understanding these will help you grasp the overall concept."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:91
msgid ""
"The ladder consists of one or more rungs. These rungs are horizontal traces "
"(representing wires), with components on them (inputs, outputs and other), "
"which get evaluated left to right."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:93
msgid "This example is the simplest rung:"
msgstr ""

#. type: Target for macro image
#: src/ladder/ladder-intro.adoc:94
#, no-wrap
msgid "images/example_link_contact_coil.png"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:104
msgid ""
"The input on the left, B0, a normally open contact, is connected to the coil "
"(output) on the right, Q0. Now imagine a voltage gets applied to the "
"leftmost end, because the input B0 turns true (e.g. the input is activated, "
"or the user pushed the NO contact). The voltage has a direct path to reach "
"the coil (output) on the right, Q0.  As a consequence, the Q0 coil (output) "
"will turn from 0/off/false to 1/on/true.  If the user releases B0, the Q0 "
"output quickly returns to 0/off/false."
msgstr ""

#. type: Title ==
#: src/ladder/ladder-intro.adoc:105
#, no-wrap
msgid "Basic Latching On-Off Circuit"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:113
msgid ""
"Building on the above example, suppose we add a switch that closes whenever "
"the coil Q0 is active. This would be the case in a relay, where the coil can "
"activate the switch contacts; or in a contactor, where there are often "
"several small auxiliary contacts in addition to the large 3-phase contacts "
"that are the primary feature of the contactor."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:120
msgid ""
"Since this auxiliary switch is driven from coil Q0 in our earlier example, "
"we will give it the same number as the coil that drives it.  This is the "
"standard practice followed in all ladder programming, although it may seem "
"strange at first to see a switch labeled the same as a coil. So let's call "
"this auxiliary contact Q0 and connect it across the B0 'pushbutton' contact "
"from our earlier example."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:122
msgid "Let's take a look at it:"
msgstr ""

#. type: Target for macro image
#: src/ladder/ladder-intro.adoc:123
#, no-wrap
msgid "images/example_link_contact_coil2.png"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:132
msgid ""
"As before, when the user presses pushbutton B0, coil Q0 comes on.  And when "
"coil Q0 comes on, switch Q0 comes on. Now the interesting part happens. When "
"the user releases pushbutton B0, coil Q0 does not stop as it did before. "
"This is because switch Q0 of this circuit is effectively holding the user's "
"pushbutton pressed. So we see that switch Q0 is still holding coil Q0 on "
"after the 'start' pushbutton has been released."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:138
msgid ""
"This type of contact on a coil or relay, used in this way, is often called a "
"'holding contact', because it 'holds on' the coil that it is associated "
"with. It is also occasionally called a 'seal' contact, and when it is active "
"it is said that the circuit is 'sealed'."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:145
msgid ""
"Unfortunately, our circuit so far has little practical use, because, "
"although we have an 'on' or 'start' button in the form of pushbutton B0, we "
"have no way to shut this circuit off once it is started. But that's easy to "
"fix. All we need is a way to interrupt the power to coil Q0. So let's add a "
"normally-closed (NC) pushbutton just ahead of coil Q0."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:147
msgid "Here's how that would look:"
msgstr ""

#. type: Target for macro image
#: src/ladder/ladder-intro.adoc:148
#, no-wrap
msgid "images/example_link_contact_coil3.png"
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:158
msgid ""
"Now we have added 'off' or 'stop' pushbutton B1. If the user pushes it, "
"contact from the rung to the coil is broken.  When coil Q0 loses power, it "
"drops to 0/off/false. When coil Q0 goes off, so does switch Q0, so the "
"'holding contact' is broken, or the circuit is 'unsealed'. When the user "
"releases the 'stop' pushbutton, contact is restored from the rung to coil "
"Q0, but the rung has gone dead, so the coil doesn't come back on."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:165
msgid ""
"This circuit has been used for decades on virtually every machine that has a "
"three-phase motor controlled by a contactor, so it was inevitable that it "
"would be adopted by ladder/PLC programmers. It is also a very safe circuit, "
"in that if 'start' and 'stop' are both pressed at the same time, the 'stop' "
"function always wins."
msgstr ""

#. type: Plain text
#: src/ladder/ladder-intro.adoc:169
msgid ""
"This is the basic building block of much of ladder programming, so if you "
"are new to it, you would do well to make sure that you understand how this "
"circuit operates."
msgstr ""

#. type: Title =
#: src/lathe/lathe-user.adoc:5
#, no-wrap
msgid "Lathe User Information(((Lathe User Information)))"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:14
msgid "This chapter will provide information specific to lathes."
msgstr ""

#. type: Title ==
#: src/lathe/lathe-user.adoc:15
#, no-wrap
msgid "Lathe Mode"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:20
msgid ""
"If your CNC machine is a lathe, there are some specific changes you will "
"probably want to make to your INI file in order to get the best results from "
"LinuxCNC."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:23
msgid ""
"If you are using the AXIS display, have AXIS display your lathe tools "
"properly.  See the <<cha:ini-configuration,INI Configuration>> section for "
"more details."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:25
msgid "To set up AXIS for Lathe Mode."
msgstr ""

#. type: delimited block -
#: src/lathe/lathe-user.adoc:29
#, no-wrap
msgid "[DISPLAY]\n"
msgstr ""

#. type: delimited block -
#: src/lathe/lathe-user.adoc:32
#, no-wrap
msgid ""
"# Tell the AXIS GUI our machine is a lathe.\n"
"LATHE = TRUE\n"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:37
msgid ""
"Lathe Mode in AXIS does not set your default plane to G18 (XZ). You must "
"program that in the preamble of each G-code file or (better) add it to your "
"INI file, like this:"
msgstr ""

#. type: delimited block -
#: src/lathe/lathe-user.adoc:45
#, no-wrap
msgid ""
"# G-code modal codes (modes) that the interpreter is initialized with\n"
"# on startup\n"
"RS274NGC_STARTUP_CODE = G18 G20 G90\n"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:49
msgid ""
"If your using GMOCCAPY then see the <<gmoccapy:lathe-section,the GMOCCAPY "
"Lathe>> section."
msgstr ""

#. type: Title ==
#: src/lathe/lathe-user.adoc:51
#, no-wrap
msgid "Lathe Tool Table(((Lathe Tool Table)))"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:61
msgid ""
"The \"Tool Table\" is a text file that contains information about each "
"tool.  The file is located in the same directory as your configuration and "
"is called \"tool.tbl\" by default.  The tools might be in a tool changer or "
"just changed manually.  The file can be edited with a text editor or be "
"updated using G10 L1,L10,L11.  There is also a built-in tool table editor in "
"the AXIS display.  The maximum number of entries in the tool table is 56.  "
"The maximum tool and pocket number is 99999."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:68
msgid ""
"Earlier versions of LinuxCNC had two different tool table formats for mills "
"and lathes, but since the 2.4.x release, one tool table format is used for "
"all machines. Just ignore the parts of the tool table that don't pertain to "
"your machine, or which you don't need to use. For more information on the "
"specifics of the tool table format, see the <<sec:tool-table,Tool Table>> "
"Section."
msgstr ""

#. type: Title ==
#: src/lathe/lathe-user.adoc:70
#, no-wrap
msgid "Lathe Tool Orientation(((Lathe Tool Orientation)))"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:74
msgid ""
"The following figure shows the lathe tool orientations with the center line "
"angle of each orientation and info on FRONTANGLE and BACKANGLE."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:76
msgid ""
"The FRONTANGLE and BACKANGLE are clockwise starting at a line parallel to Z+."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/lathe/lathe-user.adoc:77 src/lathe/lathe-user.adoc:78
#, no-wrap
msgid "Lathe Tool Orientations"
msgstr ""

#. type: Target for macro image
#: src/lathe/lathe-user.adoc:78
#, no-wrap
msgid "images/tool-positions_en.svg"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:82
msgid ""
"In AXIS the following figures show what the Tool Positions look like, as "
"entered in the tool table."
msgstr ""

#. type: Block title
#: src/lathe/lathe-user.adoc:84
#, no-wrap
msgid "Tool Positions 1, 2, 3 & 4(((Tool Positions 1, 2, 3 & 4)))"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:89
msgid ""
"image:images/tool-pos-1_en.svg[\"Tool Position 1\"] image:images/tool-"
"pos-2_en.svg[\"Tool Position 2\"] image:images/tool-pos-3_en.svg[\"Tool "
"Position 3\"] image:images/tool-pos-4_en.svg[\"Tool Position 4\"]"
msgstr ""

#. type: Block title
#: src/lathe/lathe-user.adoc:91
#, no-wrap
msgid "Tool Positions 5, 6, 7 & 8(((Tool Positions 5, 6, 7 & 8)))"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:96
msgid ""
"image:images/tool-pos-5_en.svg[\"Tool Position 5\"] image:images/tool-"
"pos-6_en.svg[\"Tool Position 6\"] image:images/tool-pos-7_en.svg[\"Tool "
"Position 7\"] image:images/tool-pos-8_en.svg[\"Tool Position 8\"]"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:107
msgid ""
"When running in lathe mode in AXIS you can set the X and Z in the tool table "
"using the Touch Off window. If you have a tool turret you normally have "
"'Touch off to fixture' selected when setting up your turret. When setting "
"the material Z zero you have 'Touch off to material' selected.  For more "
"information on the G-codes used for tools see <<mcode:m6,M6>>, <<sec:select-"
"tool,T__n__>>, and <<gcode:g43,G43>>.  For more information on tool touch "
"off options in AXIS see <<sub:axis-machine-menu,Tool Touch Off>>."
msgstr ""

#. type: Title ===
#: src/lathe/lathe-user.adoc:108
#, no-wrap
msgid "X Touch Off"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:112
msgid ""
"The X axis offset for each tool is normally an offset from the center line "
"of the spindle."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:122
msgid ""
"One method is to take your normal turning tool and turn down some stock to a "
"known diameter. Using the Tool Touch Off window enter the measured diameter "
"(or radius if in radius mode) for that tool. Then using some layout fluid or "
"a marker to coat the part bring each tool up till it just touches the dye "
"and set it's X offset to the diameter of the part used using the tool touch "
"off. Make sure any tools in the corner quadrants have the nose radius set "
"properly in the tool table so the control point is correct. Tool touch off "
"automatically adds a G43 so the current tool is the current offset."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:124 src/lathe/lathe-user.adoc:147
#: src/lathe/lathe-user.adoc:174
msgid "A typical session might be:"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:126 src/lathe/lathe-user.adoc:149
#: src/lathe/lathe-user.adoc:176
msgid "Home each axis if not homed."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:127 src/lathe/lathe-user.adoc:151
msgid "Set the current tool with 'T__n__ M6 G43' where _n_ is the tool number."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:128
msgid "Select the X axis in the 'Manual Control window'."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:129
msgid ""
"Move the X to a known position or take a test cut and measure the diameter."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:130
msgid ""
"Select Touch Off and pick Tool Table then enter the position or the diameter."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:131
msgid "Follow the same sequence to correct the Z axis."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:133
msgid ""
"Note: if you are in Radius Mode you must enter the radius, not the diameter."
msgstr ""

#. type: Title ===
#: src/lathe/lathe-user.adoc:134
#, no-wrap
msgid "Z Touch Off"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:145
msgid ""
"The Z axis offsets can be a bit confusing at first because there are two "
"elements to the Z offset.  There is the tool table offset, and the machine "
"coordinate offset.  First we will look at the tool table offsets.  One "
"method is to use a fixed point on your lathe and set the Z offset for all "
"tools from this point.  Some use the spindle nose or chuck face.  This gives "
"you the ability to change to a new tool and set its Z offset without having "
"to reset all the tools."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:150
msgid "Make sure no offsets are in effect for the current coordinate system."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:152
msgid "Select the Z axis in the Manual Control window."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:153
msgid "Bring the tool close to the control surface."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:155
msgid ""
"Using a cylinder move the Z away from the control surface until the cylinder "
"just passes between the tool and the control surface."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:156
msgid "Select Touch Off and pick Tool Table and set the position to 0.0."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:157
msgid "Repeat for each tool using the same cylinder."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:166
msgid ""
"Now all the tools are offset the same distance from a standard position.  If "
"you change a tool like a drill bit you repeat the above and it is now in "
"sync with the rest of the tools for Z offset.  Some tools might require a "
"bit of cyphering to determine the control point from the touch off point.  "
"For example, if you have a 0.125\" wide parting tool and you touch the left "
"side off but want the right to be Z0, then enter 0.125\" in the touch off "
"window."
msgstr ""

#. type: Title ===
#: src/lathe/lathe-user.adoc:167
#, no-wrap
msgid "The Z Machine Offset"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:172
msgid ""
"Once all the tools have the Z offset entered into the tool table, you can "
"use any tool to set the machine offset using the machine coordinate system."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:177
msgid "Set the current tool with 'T__n__ M6' where _n_ is the tool number."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:178
msgid "Issue a G43 so the current tool offset is in effect."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:179
msgid "Bring the tool to the work piece and set the machine Z offset."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:184
msgid ""
"If you forget to set the G43 for the current tool when you set the machine "
"coordinate system offset, you will not get what you expect, as the tool "
"offset will be added to the current offset when the tool is used in your "
"program."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:191
msgid ""
"Spindle synchronized motion requires a quadrature encoder connected to the "
"spindle with one index pulse per revolution. See the motion man page and the "
"<<cha:spindle-control,Spindle Control Example>> for more information."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:195
msgid ""
"The G76 threading cycle is used for both internal and external threads.  For "
"more information see the <<gcode:g76,G76>> Section."
msgstr ""

#. type: Block title
#: src/lathe/lathe-user.adoc:196
#, no-wrap
msgid "Constant Surface Speed"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:202
msgid ""
"CSS or Constant Surface Speed uses the machine X origin modified by the tool "
"X offset to compute the spindle speed in RPM. CSS will track changes in tool "
"offsets. The X <<sec:machine-coordinate-system,machine origin>> should be "
"when the reference tool (the one with zero offset) is at the center of "
"rotation.  For more information see the <<gcode:g96-g97,G96>> Section."
msgstr ""

#. type: Block title
#: src/lathe/lathe-user.adoc:203
#, no-wrap
msgid "Feed per Revolution"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:207
msgid ""
"Feed per revolution will move the Z axis by the F amount per revolution.  "
"This is not for threading, use G76 for threading.  For more information see "
"the <<gcode:g93-g94-g95,G95>> Section."
msgstr ""

#. type: Title ==
#: src/lathe/lathe-user.adoc:208
#, no-wrap
msgid "Arcs"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:216
msgid ""
"Calculating arcs can be mind challenging enough without considering radius "
"and diameter mode on lathes as well as machine coordinate system "
"orientation. The following applies to center format arcs. On a lathe you "
"should include G18 in your preamble as the default is G17 even if you're in "
"lathe mode, in the user interface AXIS. Arcs in G18 XZ plane use I (X axis) "
"and K (Z axis) offsets."
msgstr ""

#. type: Title ===
#: src/lathe/lathe-user.adoc:217
#, no-wrap
msgid "Arcs and Lathe Design"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:222
msgid ""
"The typical lathe has the spindle on the left of the operator and the tools "
"on the operator side of the spindle center line. This is typically set up "
"with the imaginary Y axis (+) pointing at the floor."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:224
msgid "The following will be true on this type of setup:"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:226
msgid "The Z axis (+) points to the right, away from the spindle."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:228
msgid ""
"The X axis (+) points toward the operator, and when on the operator side of "
"the spindle the X values are positive."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:231
msgid ""
"Some lathes with tools on the back side have the imaginary Y axis (+)  "
"pointing up."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:237
msgid ""
"G2/G3 Arc directions are based on the axis they rotate around. In the case "
"of lathes, it is the imaginary Y axis. If the Y axis (+) points toward the "
"floor, you have to look up for the arc to appear to go in the correct "
"direction. So looking from above you reverse the G2/G3 for the arc to appear "
"to go in the correct direction."
msgstr ""

#. type: Title ===
#: src/lathe/lathe-user.adoc:238
#, no-wrap
msgid "Radius & Diameter Mode"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:242
msgid ""
"When calculating arcs in radius mode you only have to remember the direction "
"of rotation as it applies to your lathe."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:245
msgid ""
"When calculating arcs in diameter mode X is diameter and the X offset (I)  "
"is radius even if you're in G7 diameter mode."
msgstr ""

#. type: Title ==
#: src/lathe/lathe-user.adoc:246
#, no-wrap
msgid "Tool Path"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/lathe/lathe-user.adoc:248 src/lathe/lathe-user.adoc:260
#: src/lathe/lathe-user.adoc:261
#, no-wrap
msgid "Control point"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:259
msgid ""
"The control point for the tool follows the programmed path. The control "
"point is the intersection of a line parallel to the X and Z axis and tangent "
"to the tool tip diameter, as defined when you touch off the X and Z axes for "
"that tool. When turning or facing straight sided parts the cutting path and "
"the tool edge follow the same path.  When turning radius and angles the edge "
"of the tool tip will not follow the programmed path unless cutter comp is in "
"effect. In the following figures you can see how the control point does not "
"follow the tool edge as you might assume."
msgstr ""

#. type: Target for macro image
#: src/lathe/lathe-user.adoc:261
#, no-wrap
msgid "images/control-point_en.svg"
msgstr ""

#. type: Title ===
#: src/lathe/lathe-user.adoc:263
#, no-wrap
msgid "Cutting Angles without Cutter Comp"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:269
msgid ""
"Now imagine we program a ramp without cutter comp. The programmed path is "
"shown in the following figure. As you can see in the figure the programmed "
"path and the desired cut path are one and the same as long as we are moving "
"in an X or Z direction only."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/lathe/lathe-user.adoc:270 src/lathe/lathe-user.adoc:271
#, no-wrap
msgid "Ramp Entry"
msgstr ""

#. type: Target for macro image
#: src/lathe/lathe-user.adoc:271
#, no-wrap
msgid "images/ramp-entry_en.svg"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:277
msgid ""
"Now as the control point progresses along the programmed path the actual "
"cutter edge does not follow the programmed path as shown in the following "
"figure. There are two ways to solve this, cutter comp and adjusting your "
"programmed path to compensate for tip radius."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/lathe/lathe-user.adoc:278 src/lathe/lathe-user.adoc:279
#, no-wrap
msgid "Ramp Path"
msgstr ""

#. type: Target for macro image
#: src/lathe/lathe-user.adoc:279
#, no-wrap
msgid "images/ramp-cut_en.svg"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:284
msgid ""
"In the above example it is a simple exercise to adjust the programmed path "
"to give the desired actual path by moving the programmed path for the ramp "
"to the left the radius of the tool tip."
msgstr ""

#. type: Title ===
#: src/lathe/lathe-user.adoc:285
#, no-wrap
msgid "Cutting a Radius"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:291
msgid ""
"In this example we will examine what happens during a radius cut without "
"cutter comp. In the next figure you see the tool turning the OD of the part. "
"The control point of the tool is following the programmed path and the tool "
"is touching the OD of the part."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/lathe/lathe-user.adoc:292 src/lathe/lathe-user.adoc:293
#, no-wrap
msgid "Turning Cut"
msgstr ""

#. type: Target for macro image
#: src/lathe/lathe-user.adoc:293
#, no-wrap
msgid "images/radius-1_en.svg"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:299
msgid ""
"In this next figure you can see as the tool approaches the end of the part "
"the control point still follows the path but the tool tip has left the part "
"and is cutting air. You can also see that even though a radius has been "
"programmed the part will actually end up with a square corner."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/lathe/lathe-user.adoc:300 src/lathe/lathe-user.adoc:301
#: src/lathe/lathe-user.adoc:306 src/lathe/lathe-user.adoc:307
#, no-wrap
msgid "Radius Cut"
msgstr ""

#. type: Target for macro image
#: src/lathe/lathe-user.adoc:301
#, no-wrap
msgid "images/radius-2_en.svg"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:305
msgid ""
"Now you can see as the control point follows the radius programmed the tool "
"tip has left the part and is now cutting air."
msgstr ""

#. type: Target for macro image
#: src/lathe/lathe-user.adoc:307
#, no-wrap
msgid "images/radius-3_en.svg"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:315
msgid ""
"In the final figure we can see the tool tip will finish cutting the face but "
"leave a square corner instead of a nice radius. Notice also that if you "
"program the cut to end at the center of the part a small amount of material "
"will be left from the radius of the tool. To finish a face cut to the center "
"of a part you have to program the tool to go past center at least the nose "
"radius of the tool."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/lathe/lathe-user.adoc:316 src/lathe/lathe-user.adoc:317
#, no-wrap
msgid "Face Cut"
msgstr ""

#. type: Target for macro image
#: src/lathe/lathe-user.adoc:317
#, no-wrap
msgid "images/radius-4_en.svg"
msgstr ""

#. type: Title ===
#: src/lathe/lathe-user.adoc:319
#, no-wrap
msgid "Using Cutter Comp"
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:322
msgid ""
"When using cutter comp on a lathe think of the tool tip radius as the radius "
"of a round cutter."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:323
msgid ""
"When using cutter comp the path must be large enough for a round tool that "
"will not gouge into the next line."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:325
msgid ""
"When cutting straight lines on the lathe you might not want to use cutter "
"comp.  For example boring a hole with a tight fitting boring bar you may not "
"have enough room to do the exit move."
msgstr ""

#. type: Plain text
#: src/lathe/lathe-user.adoc:326
msgid ""
"The entry move into a cutter comp arc is important to get the correct "
"results."
msgstr ""

#.  vim: set syntax=asciidoc:
#. type: Title =
#: src/man/man1/halstreamer.1.adoc:1
#, no-wrap
msgid "halstreamer(1)"
msgstr ""

#. type: SH
#: src/man/man1/halstreamer.1.adoc:4 src/man/man1/hy_gt_vfd.1.adoc:4
#: src/man/man1/sendkeys.1.adoc:4 src/man/man1/svd-ps_vfd.1.adoc:4
#: src/man/man1/xhc-whb04b-6.1.adoc:3 src/man/man9/streamer.9.adoc:3
#: src/plasma/qtplasmac.adoc:1409 man/man1/5axisgui.1:26 man/man1/axis.1:27
#: man/man1/axis-remote.1:27 man/man1/debuglevel.1:26 man/man1/elbpcom.1:3
#: man/man1/gladevcp.1:23 man/man1/gladevcp_demo.1:26 man/man1/gmoccapy.1:26
#: man/man1/gremlin_view.1:26 man/man1/gs2_vfd.1:28 man/man1/gscreen.1:26
#: man/man1/halcmd.1:31 man/man1/halcmd_twopass.1:26 man/man1/halcompile.1:26
#: man/man1/hal-histogram.1:26 man/man1/hal_input.1:2
#: man/man1/hal_manualtoolchange.1:24 man/man1/halmeter.1:27
#: man/man1/hal_parport.1:24 man/man1/halreport.1:26 man/man1/halrmt.1:26
#: man/man1/halrun.1:31 man/man1/halsampler.1:27 man/man1/halscope.1:26
#: man/man1/halshow.1:26 man/man1/haltcl.1:31 man/man1/halui.1:27
#: man/man1/hbmgui.1:26 man/man1/hexagui.1:26 man/man1/hy_vfd.1:27
#: man/man1/image-to-gcode.1:26 man/man1/inivar.1:26 man/man1/io.1:3
#: man/man1/iocontrol.1:3 man/man1/iov2.1:26 man/man1/latency-histogram.1:26
#: man/man1/latency-plot.1:26 man/man1/latency-test.1:26
#: man/man1/lineardelta.1:26 man/man1/linuxcnc_info.1:26
#: man/man1/linuxcnclcd.1:26 man/man1/linuxcncmkdesktop.1:26
#: man/man1/linuxcnc_module_helper.1:26 man/man1/linuxcncrsh.1:2
#: man/man1/linuxcncsvr.1:26 man/man1/linuxcnctop.1:26
#: man/man1/linuxcnc_var.1:26 man/man1/maho600gui.1:26 man/man1/max5gui.1:26
#: man/man1/mb2hal.1:30 man/man1/mdi.1:26 man/man1/milltask.1:2
#: man/man1/mitsub_vfd.1:4 man/man1/monitor-xhc-hb04.1:26
#: man/man1/motion-logger.1:26 man/man1/moveoff_gui.1:26 man/man1/ngcgui.1:26
#: man/man1/panelui.1:26 man/man1/pi500_vfd.1:10 man/man1/pmx485.1:26
#: man/man1/pmx485-test.1:26 man/man1/pncconf.1:26 man/man1/puma560gui.1:26
#: man/man1/pumagui.1:26 man/man1/pyngcgui.1:26 man/man1/pyui.1:26
#: man/man1/pyvcp.1:23 man/man1/pyvcp_demo.1:26
#: man/man1/qtplasmac-cfg2prefs.1:26 man/man1/qtplasmac-materials.1:26
#: man/man1/qtplasmac-plasmac2qt.1:26 man/man1/qtplasmac-setup.1:26
#: man/man1/qtvcp.1:26 man/man1/rotarydelta.1:26 man/man1/rs274.1:26
#: man/man1/rtapi_app.1:26 man/man1/scaragui.1:26 man/man1/schedrmt.1:26
#: man/man1/scorbot-er-3.1:26 man/man1/shuttle.1:2 man/man1/sim_pin.1:26
#: man/man1/simulate_probe.1:26 man/man1/stepconf.1:26 man/man1/teach-in.1:26
#: man/man1/thermistor.1:10 man/man1/tooledit.1:26 man/man1/touchy.1:26
#: man/man1/update_ini.1:26 man/man1/vfdb_vfd.1:28 man/man1/vfs11_vfd.1:27
#: man/man1/wj200_vfd.1:10 man/man1/xhc-hb04.1:2 man/man1/xhc-hb04-accels.1:26
#: man/man1/xyzac-trt-gui.1:26 man/man1/xyzbc-trt-gui.1:26
#: man/man3/hal_add_funct_to_thread.3hal:2 man/man3/hal_create_thread.3hal:2
#: man/man3/hal_exit.3hal:2 man/man3/hal_export_funct.3hal:2
#: man/man3/hal_init.3hal:2 man/man3/hal_malloc.3hal:2
#: man/man3/hal_param_alias.3hal:2 man/man3/hal_param_new.3hal:2
#: man/man3/hal_parport.3hal:2 man/man3/hal_pin_alias.3hal:2
#: man/man3/hal_pin_new.3hal:2 man/man3/hal_port.3hal:12
#: man/man3/hal_ready.3hal:2 man/man3/hal_set_constructor.3hal:2
#: man/man3/hal_set_lock.3hal:2 man/man3/hal_signal_new.3hal:2
#: man/man3/hal_start_threads.3hal:2 man/man3/hal_stream.3hal:12
#: man/man3/hal_type_t.3hal:2 man/man3/hm2_allocate_bspi_tram.3hm2:5
#: man/man3/hm2_bspi_set_read_function.3hm2:5
#: man/man3/hm2_bspi_setup_chan.3hm2:4
#: man/man3/hm2_bspi_set_write_function.3hm2:5
#: man/man3/hm2_bspi_write_chan.3hm2:4 man/man3/hm2_pktuart_read.3hm2:4
#: man/man3/hm2_pktuart_send.3hm2:4 man/man3/hm2_pktuart_setup.3hm2:4
#: man/man3/hm2_tram_add_bspi_frame.3hm2:4 man/man3/hm2_uart_read.3hm2:4
#: man/man3/hm2_uart_send.3hm2:4 man/man3/hm2_uart_setup.3hm2:4
#: man/man3/intro.3hal:2 man/man3/intro.3rtapi:2
#: man/man3/PM_ROTATION_VECTOR.3:2 man/man3/rtapi_app_exit.3rtapi:2
#: man/man3/rtapi_app_main.3rtapi:2 man/man3/rtapi_atomic.3rtapi:2
#: man/man3/rtapi_bool.3rtapi:23 man/man3/rtapi_byteorder.3rtapi:23
#: man/man3/rtapi_clock_set_period.3rtapi:2 man/man3/rtapi_delay.3rtapi:2
#: man/man3/rtapi_device.3rtapi:23 man/man3/rtapi_div_u64.3rtapi:17
#: man/man3/rtapi_exit.3rtapi:2 man/man3/rtapi_firmware.3rtapi:23
#: man/man3/rtapi_get_time.3rtapi:2 man/man3/rtapi_gfp.3rtapi:23
#: man/man3/rtapi_init.3rtapi:2 man/man3/rtapi_io.3rtapi:23
#: man/man3/rtapi_is.3rtapi:23 man/man3/rtapi_list.3rtapi:23
#: man/man3/rtapi_module_param.3rtapi:2 man/man3/rtapi_mutex.3rtapi:2
#: man/man3/rtapi_open_as_root.3rtapi:2 man/man3/rtapi_outb.3rtapi:2
#: man/man3/rtapi_parport.3rtapi:23 man/man3/rtapi_pci.3rtapi:23
#: man/man3/rtapi_print.3rtapi:2 man/man3/rtapi_prio.3rtapi:2
#: man/man3/rtapi_region.3rtapi:2 man/man3/rtapi_set_msg_level.3rtapi:2
#: man/man3/rtapi_shmem.3rtapi:2 man/man3/rtapi_slab.3rtapi:23
#: man/man3/rtapi_snprintf.3rtapi:2 man/man3/rtapi_stdint.3rtapi:23
#: man/man3/rtapi_string.3rtapi:23 man/man3/rtapi_strlcpy.3rtapi:23
#: man/man3/rtapi_task_new.3rtapi:2 man/man3/rtapi_task_pause.3rtapi:2
#: man/man3/rtapi_task_self.3rtapi:2 man/man3/rtapi_task_start.3rtapi:2
#: man/man3/rtapi_task_wait.3rtapi:2 man/man3/undocumented.3hal:2
#: man/man3/undocumented.3rtapi:2 man/man9/abs.9:10 man/man9/abs_s32.9:10
#: man/man9/and2.9:10 man/man9/at_pid.9:3 man/man9/axistest.9:10
#: man/man9/bin2gray.9:10 man/man9/biquad.9:10 man/man9/bitslice.9:10
#: man/man9/bitwise.9:10 man/man9/bldc.9:10 man/man9/blend.9:10
#: man/man9/carousel.9:10 man/man9/charge_pump.9:10 man/man9/clarke2.9:10
#: man/man9/clarke3.9:10 man/man9/clarkeinv.9:10 man/man9/classicladder.9:4
#: man/man9/comp.9:10 man/man9/constant.9:10 man/man9/conv_bit_float.9:10
#: man/man9/conv_bit_s32.9:10 man/man9/conv_bit_u32.9:10
#: man/man9/conv_float_s32.9:10 man/man9/conv_float_u32.9:10
#: man/man9/conv_s32_bit.9:10 man/man9/conv_s32_float.9:10
#: man/man9/conv_s32_u32.9:10 man/man9/conv_u32_bit.9:10
#: man/man9/conv_u32_float.9:10 man/man9/conv_u32_s32.9:10
#: man/man9/corexy_by_hal.9:10 man/man9/counter.9:3 man/man9/dbounce.9:10
#: man/man9/ddt.9:10 man/man9/deadzone.9:10 man/man9/debounce.9:3
#: man/man9/demux.9:10 man/man9/differential.9:10 man/man9/edge.9:10
#: man/man9/encoder.9:3 man/man9/encoder_ratio.9:3
#: man/man9/eoffset_per_angle.9:10 man/man9/estop_latch.9:10
#: man/man9/feedcomp.9:10 man/man9/filter_kalman.9:10 man/man9/flipflop.9:10
#: man/man9/gantry.9:10 man/man9/gantrykins.9:3 man/man9/gearchange.9:10
#: man/man9/gentrivkins.9:3 man/man9/gladevcp.9:4 man/man9/gray2bin.9:10
#: man/man9/hal_bb_gpio.9:2 man/man9/histobins.9:10 man/man9/hm2_7i43.9:3
#: man/man9/hm2_7i90.9:3 man/man9/hm2_eth.9:24 man/man9/hm2_pci.9:3
#: man/man9/hm2_rpspi.9:25 man/man9/hm2_spi.9:24 man/man9/hostmot2.9:3
#: man/man9/hypot.9:10 man/man9/ilowpass.9:10 man/man9/integ.9:10
#: man/man9/invert.9:10 man/man9/joyhandle.9:10 man/man9/kins.9:3
#: man/man9/knob2float.9:10 man/man9/latencybins.9:10 man/man9/lcd.9:3
#: man/man9/limit1.9:10 man/man9/limit2.9:10 man/man9/limit3.9:10
#: man/man9/lincurve.9:10 man/man9/lineardeltakins.9:3 man/man9/logic.9:10
#: man/man9/lowpass.9:10 man/man9/lut5.9:10 man/man9/maj3.9:10
#: man/man9/match8.9:10 man/man9/matrix_kb.9:5 man/man9/max31855.9:10
#: man/man9/mesa_7i65.9:10 man/man9/mesa_pktgyro_test.9:10
#: man/man9/message.9:10 man/man9/millturn.9:10 man/man9/minmax.9:10
#: man/man9/motion.9:3 man/man9/moveoff.9:10 man/man9/mult2.9:10
#: man/man9/multiclick.9:10 man/man9/multiswitch.9:10 man/man9/mux16.9:10
#: man/man9/mux2.9:10 man/man9/mux4.9:10 man/man9/mux8.9:10
#: man/man9/mux_generic.9:5 man/man9/near.9:10 man/man9/not.9:10
#: man/man9/offset.9:10 man/man9/ohmic.9:10 man/man9/oneshot.9:10
#: man/man9/opto_ac5.9:4 man/man9/or2.9:10 man/man9/orient.9:10
#: man/man9/pid.9:3 man/man9/plasmac.9:10 man/man9/pwmgen.9:3
#: man/man9/rosekins.9:3 man/man9/sample_hold.9:10 man/man9/sampler.9:27
#: man/man9/scale.9:10 man/man9/select8.9:10 man/man9/serport.9:10
#: man/man9/setsserial.9:5 man/man9/siggen.9:3 man/man9/sim_axis_hardware.9:10
#: man/man9/sim_encoder.9:3 man/man9/sim_home_switch.9:10
#: man/man9/sim_matrix_kb.9:10 man/man9/sim_parport.9:10
#: man/man9/simple_tp.9:10 man/man9/sim_spindle.9:10 man/man9/sphereprobe.9:10
#: man/man9/spindle.9:10 man/man9/spindle_monitor.9:10 man/man9/sserial.9:5
#: man/man9/stepgen.9:3 man/man9/steptest.9:10 man/man9/streamer.9:30
#: man/man9/sum2.9:10 man/man9/supply.9:3 man/man9/thc.9:10 man/man9/thcud.9:10
#: man/man9/threads.9:3 man/man9/threadtest.9:10 man/man9/time.9:10
#: man/man9/timedelay.9:10 man/man9/timedelta.9:10 man/man9/toggle2nist.9:10
#: man/man9/toggle.9:10 man/man9/tristate_bit.9:10 man/man9/tristate_float.9:10
#: man/man9/updown.9:10 man/man9/userkins.9:10 man/man9/watchdog.9:2
#: man/man9/wcomp.9:10 man/man9/weighted_sum.9:2 man/man9/xhc_hb04_util.9:10
#: man/man9/xor2.9:10
#, no-wrap
msgid "NAME"
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:7
msgid "halstreamer - stream file data into HAL in real-time"
msgstr ""

#. type: SH
#: src/man/man1/halstreamer.1.adoc:9 src/man/man1/hy_gt_vfd.1.adoc:9
#: src/man/man1/sendkeys.1.adoc:8 src/man/man1/svd-ps_vfd.1.adoc:9
#: src/man/man1/xhc-whb04b-6.1.adoc:6 src/man/man9/streamer.9.adoc:6
#: man/man1/axis.1:29 man/man1/axis-remote.1:29 man/man1/debuglevel.1:28
#: man/man1/elbpcom.1:5 man/man1/gladevcp.1:25 man/man1/gladevcp_demo.1:28
#: man/man1/gmoccapy.1:28 man/man1/gremlin_view.1:28 man/man1/gs2_vfd.1:31
#: man/man1/gscreen.1:28 man/man1/halcmd.1:33 man/man1/halcmd_twopass.1:28
#: man/man1/halcompile.1:28 man/man1/hal-histogram.1:28 man/man1/hal_input.1:4
#: man/man1/hal_manualtoolchange.1:26 man/man1/halmeter.1:29
#: man/man1/hal_parport.1:26 man/man1/halreport.1:28 man/man1/halrmt.1:28
#: man/man1/halrun.1:33 man/man1/halsampler.1:29 man/man1/halscope.1:28
#: man/man1/halshow.1:28 man/man1/haltcl.1:35 man/man1/halui.1:29
#: man/man1/hy_vfd.1:30 man/man1/image-to-gcode.1:28 man/man1/inivar.1:28
#: man/man1/io.1:6 man/man1/iocontrol.1:6 man/man1/iov2.1:28
#: man/man1/latency-histogram.1:28 man/man1/latency-plot.1:28
#: man/man1/latency-test.1:28 man/man1/linuxcnc_info.1:28
#: man/man1/linuxcnclcd.1:28 man/man1/linuxcncmkdesktop.1:28
#: man/man1/linuxcnc_module_helper.1:28 man/man1/linuxcncrsh.1:4
#: man/man1/linuxcncsvr.1:28 man/man1/linuxcnctop.1:28
#: man/man1/linuxcnc_var.1:28 man/man1/mb2hal.1:32 man/man1/mdi.1:29
#: man/man1/mitsub_vfd.1:10 man/man1/monitor-xhc-hb04.1:28
#: man/man1/motion-logger.1:29 man/man1/moveoff_gui.1:29 man/man1/ngcgui.1:28
#: man/man1/panelui.1:28 man/man1/pi500_vfd.1:13 man/man1/pmx485.1:28
#: man/man1/pmx485-test.1:28 man/man1/pncconf.1:28 man/man1/pyngcgui.1:28
#: man/man1/pyui.1:28 man/man1/pyvcp.1:25 man/man1/pyvcp_demo.1:28
#: man/man1/qtplasmac-cfg2prefs.1:28 man/man1/qtplasmac-materials.1:28
#: man/man1/qtplasmac-plasmac2qt.1:28 man/man1/qtplasmac-setup.1:28
#: man/man1/qtvcp.1:28 man/man1/rs274.1:28 man/man1/rtapi_app.1:28
#: man/man1/schedrmt.1:28 man/man1/shuttle.1:4 man/man1/sim_pin.1:29
#: man/man1/simulate_probe.1:28 man/man1/stepconf.1:28 man/man1/teach-in.1:28
#: man/man1/thermistor.1:13 man/man1/tooledit.1:28 man/man1/touchy.1:28
#: man/man1/update_ini.1:28 man/man1/vfdb_vfd.1:31 man/man1/vfs11_vfd.1:30
#: man/man1/wj200_vfd.1:13 man/man1/xhc-hb04-accels.1:28
#: man/man3/hal_port.3hal:16 man/man3/hal_stream.3hal:16 man/man9/abs.9:13
#: man/man9/abs_s32.9:13 man/man9/and2.9:13 man/man9/axistest.9:13
#: man/man9/bin2gray.9:13 man/man9/biquad.9:13 man/man9/bitslice.9:13
#: man/man9/bitwise.9:13 man/man9/bldc.9:13 man/man9/blend.9:13
#: man/man9/carousel.9:13 man/man9/charge_pump.9:13 man/man9/clarke2.9:13
#: man/man9/clarke3.9:13 man/man9/clarkeinv.9:13 man/man9/classicladder.9:6
#: man/man9/comp.9:13 man/man9/constant.9:13 man/man9/conv_bit_float.9:13
#: man/man9/conv_bit_s32.9:13 man/man9/conv_bit_u32.9:13
#: man/man9/conv_float_s32.9:13 man/man9/conv_float_u32.9:13
#: man/man9/conv_s32_bit.9:13 man/man9/conv_s32_float.9:13
#: man/man9/conv_s32_u32.9:13 man/man9/conv_u32_bit.9:13
#: man/man9/conv_u32_float.9:13 man/man9/conv_u32_s32.9:13
#: man/man9/corexy_by_hal.9:13 man/man9/counter.9:7 man/man9/dbounce.9:13
#: man/man9/ddt.9:13 man/man9/deadzone.9:13 man/man9/debounce.9:6
#: man/man9/demux.9:13 man/man9/differential.9:13 man/man9/edge.9:13
#: man/man9/encoder.9:5 man/man9/encoder_ratio.9:5
#: man/man9/eoffset_per_angle.9:13 man/man9/estop_latch.9:13
#: man/man9/feedcomp.9:13 man/man9/filter_kalman.9:13 man/man9/flipflop.9:13
#: man/man9/gantry.9:13 man/man9/gearchange.9:13 man/man9/gladevcp.9:6
#: man/man9/gray2bin.9:13 man/man9/hal_bb_gpio.9:6 man/man9/histobins.9:13
#: man/man9/hm2_7i43.9:6 man/man9/hm2_7i90.9:6 man/man9/hm2_eth.9:27
#: man/man9/hm2_pci.9:6 man/man9/hm2_rpspi.9:28 man/man9/hm2_spi.9:26
#: man/man9/hostmot2.9:5 man/man9/hypot.9:13 man/man9/ilowpass.9:13
#: man/man9/integ.9:13 man/man9/invert.9:13 man/man9/joyhandle.9:13
#: man/man9/kins.9:14 man/man9/knob2float.9:13 man/man9/latencybins.9:13
#: man/man9/lcd.9:5 man/man9/limit1.9:13 man/man9/limit2.9:13
#: man/man9/limit3.9:13 man/man9/lincurve.9:13 man/man9/lineardeltakins.9:6
#: man/man9/logic.9:13 man/man9/lowpass.9:13 man/man9/lut5.9:13
#: man/man9/maj3.9:13 man/man9/match8.9:13 man/man9/matrix_kb.9:9
#: man/man9/max31855.9:13 man/man9/mesa_7i65.9:13
#: man/man9/mesa_pktgyro_test.9:13 man/man9/message.9:13 man/man9/millturn.9:13
#: man/man9/minmax.9:13 man/man9/motion.9:6 man/man9/moveoff.9:13
#: man/man9/mult2.9:13 man/man9/multiclick.9:13 man/man9/multiswitch.9:13
#: man/man9/mux16.9:13 man/man9/mux2.9:13 man/man9/mux4.9:13 man/man9/mux8.9:13
#: man/man9/mux_generic.9:8 man/man9/near.9:13 man/man9/not.9:13
#: man/man9/offset.9:13 man/man9/ohmic.9:13 man/man9/oneshot.9:13
#: man/man9/opto_ac5.9:6 man/man9/or2.9:13 man/man9/orient.9:13
#: man/man9/pid.9:5 man/man9/plasmac.9:13 man/man9/pwmgen.9:5
#: man/man9/rosekins.9:6 man/man9/sample_hold.9:13 man/man9/sampler.9:29
#: man/man9/scale.9:13 man/man9/select8.9:13 man/man9/serport.9:13
#: man/man9/setsserial.9:12 man/man9/siggen.9:5 man/man9/sim_axis_hardware.9:13
#: man/man9/sim_encoder.9:5 man/man9/sim_home_switch.9:13
#: man/man9/sim_matrix_kb.9:13 man/man9/sim_parport.9:13
#: man/man9/simple_tp.9:13 man/man9/sim_spindle.9:13 man/man9/sphereprobe.9:13
#: man/man9/spindle.9:13 man/man9/spindle_monitor.9:13 man/man9/sserial.9:8
#: man/man9/stepgen.9:5 man/man9/steptest.9:13 man/man9/streamer.9:32
#: man/man9/sum2.9:13 man/man9/supply.9:5 man/man9/thc.9:13 man/man9/thcud.9:13
#: man/man9/threads.9:5 man/man9/threadtest.9:13 man/man9/time.9:13
#: man/man9/timedelay.9:13 man/man9/timedelta.9:13 man/man9/toggle2nist.9:13
#: man/man9/toggle.9:13 man/man9/tristate_bit.9:13 man/man9/tristate_float.9:13
#: man/man9/updown.9:13 man/man9/userkins.9:13 man/man9/watchdog.9:5
#: man/man9/wcomp.9:13 man/man9/weighted_sum.9:4 man/man9/xhc_hb04_util.9:13
#: man/man9/xor2.9:13
#, no-wrap
msgid "SYNOPSIS"
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:12
#, no-wrap
msgid "*halstreamer* [_options_]\n"
msgstr ""

#. type: SH
#: src/man/man1/halstreamer.1.adoc:14 src/man/man1/hy_gt_vfd.1.adoc:14
#: src/man/man1/sendkeys.1.adoc:12 src/man/man1/svd-ps_vfd.1.adoc:13
#: src/man/man1/xhc-whb04b-6.1.adoc:9 src/man/man9/streamer.9.adoc:9
#: man/man1/5axisgui.1:29 man/man1/axis.1:32 man/man1/axis-remote.1:31
#: man/man1/debuglevel.1:31 man/man1/elbpcom.1:40 man/man1/gladevcp_demo.1:32
#: man/man1/gmoccapy.1:31 man/man1/gremlin_view.1:31 man/man1/gs2_vfd.1:36
#: man/man1/gscreen.1:31 man/man1/halcmd.1:37 man/man1/halcmd_twopass.1:31
#: man/man1/halcompile.1:59 man/man1/hal-histogram.1:31 man/man1/hal_input.1:6
#: man/man1/hal_manualtoolchange.1:28 man/man1/halmeter.1:32
#: man/man1/hal_parport.1:28 man/man1/halreport.1:31 man/man1/halrmt.1:31
#: man/man1/halrun.1:41 man/man1/halsampler.1:33 man/man1/halscope.1:31
#: man/man1/halshow.1:42 man/man1/haltcl.1:39 man/man1/halui.1:32
#: man/man1/hbmgui.1:29 man/man1/hexagui.1:29 man/man1/hy_vfd.1:35
#: man/man1/image-to-gcode.1:31 man/man1/inivar.1:31 man/man1/io.1:12
#: man/man1/iocontrol.1:17 man/man1/iov2.1:34 man/man1/latency-histogram.1:43
#: man/man1/latency-plot.1:37 man/man1/latency-test.1:31
#: man/man1/lineardelta.1:29 man/man1/linuxcnc_info.1:31
#: man/man1/linuxcnclcd.1:31 man/man1/linuxcncmkdesktop.1:31
#: man/man1/linuxcnc_module_helper.1:31 man/man1/linuxcncrsh.1:8
#: man/man1/linuxcncsvr.1:31 man/man1/linuxcnctop.1:31
#: man/man1/linuxcnc_var.1:31 man/man1/maho600gui.1:29 man/man1/max5gui.1:29
#: man/man1/mb2hal.1:41 man/man1/mdi.1:32 man/man1/milltask.1:4
#: man/man1/mitsub_vfd.1:28 man/man1/monitor-xhc-hb04.1:31
#: man/man1/motion-logger.1:32 man/man1/moveoff_gui.1:36 man/man1/ngcgui.1:31
#: man/man1/panelui.1:31 man/man1/pmx485.1:31 man/man1/pmx485-test.1:31
#: man/man1/pncconf.1:31 man/man1/puma560gui.1:29 man/man1/pumagui.1:29
#: man/man1/pyngcgui.1:31 man/man1/pyui.1:31 man/man1/pyvcp_demo.1:31
#: man/man1/qtplasmac-cfg2prefs.1:31 man/man1/qtplasmac-materials.1:31
#: man/man1/qtplasmac-plasmac2qt.1:31 man/man1/qtplasmac-setup.1:31
#: man/man1/qtvcp.1:31 man/man1/rotarydelta.1:29 man/man1/rs274.1:32
#: man/man1/rtapi_app.1:31 man/man1/scaragui.1:29 man/man1/schedrmt.1:31
#: man/man1/scorbot-er-3.1:29 man/man1/shuttle.1:6 man/man1/sim_pin.1:41
#: man/man1/simulate_probe.1:31 man/man1/stepconf.1:31 man/man1/teach-in.1:31
#: man/man1/thermistor.1:15 man/man1/tooledit.1:31 man/man1/touchy.1:31
#: man/man1/update_ini.1:31 man/man1/vfdb_vfd.1:36 man/man1/vfs11_vfd.1:35
#: man/man1/xhc-hb04.1:5 man/man1/xhc-hb04-accels.1:31
#: man/man1/xyzac-trt-gui.1:29 man/man1/xyzbc-trt-gui.1:29
#: man/man3/hal_add_funct_to_thread.3hal:28 man/man3/hal_create_thread.3hal:24
#: man/man3/hal_exit.3hal:14 man/man3/hal_export_funct.3hal:34
#: man/man3/hal_init.3hal:14 man/man3/hal_malloc.3hal:14
#: man/man3/hal_param_alias.3hal:19 man/man3/hal_param_new.3hal:59
#: man/man3/hal_parport.3hal:30 man/man3/hal_pin_alias.3hal:19
#: man/man3/hal_pin_new.3hal:66 man/man3/hal_port.3hal:36
#: man/man3/hal_ready.3hal:14 man/man3/hal_set_constructor.3hal:25
#: man/man3/hal_set_lock.3hal:17 man/man3/hal_signal_new.3hal:28
#: man/man3/hal_start_threads.3hal:15 man/man3/hal_stream.3hal:43
#: man/man3/hal_type_t.3hal:4 man/man3/hm2_allocate_bspi_tram.3hm2:15
#: man/man3/hm2_bspi_set_read_function.3hm2:15
#: man/man3/hm2_bspi_setup_chan.3hm2:15
#: man/man3/hm2_bspi_set_write_function.3hm2:15
#: man/man3/hm2_bspi_write_chan.3hm2:14 man/man3/hm2_pktuart_read.3hm2:14
#: man/man3/hm2_pktuart_send.3hm2:14 man/man3/hm2_pktuart_setup.3hm2:13
#: man/man3/hm2_tram_add_bspi_frame.3hm2:14 man/man3/hm2_uart_read.3hm2:14
#: man/man3/hm2_uart_send.3hm2:14 man/man3/hm2_uart_setup.3hm2:13
#: man/man3/intro.3hal:6 man/man3/intro.3rtapi:6
#: man/man3/rtapi_app_exit.3rtapi:15 man/man3/rtapi_app_main.3rtapi:15
#: man/man3/rtapi_atomic.3rtapi:32 man/man3/rtapi_bool.3rtapi:30
#: man/man3/rtapi_byteorder.3rtapi:40 man/man3/rtapi_clock_set_period.3rtapi:14
#: man/man3/rtapi_delay.3rtapi:16 man/man3/rtapi_device.3rtapi:42
#: man/man3/rtapi_div_u64.3rtapi:41 man/man3/rtapi_exit.3rtapi:14
#: man/man3/rtapi_firmware.3rtapi:41 man/man3/rtapi_get_time.3rtapi:12
#: man/man3/rtapi_gfp.3rtapi:37 man/man3/rtapi_init.3rtapi:14
#: man/man3/rtapi_io.3rtapi:43 man/man3/rtapi_is.3rtapi:33
#: man/man3/rtapi_list.3rtapi:45 man/man3/rtapi_module_param.3rtapi:51
#: man/man3/rtapi_mutex.3rtapi:19 man/man3/rtapi_open_as_root.3rtapi:22
#: man/man3/rtapi_outb.3rtapi:18 man/man3/rtapi_parport.3rtapi:51
#: man/man3/rtapi_pci.3rtapi:72 man/man3/rtapi_print.3rtapi:31
#: man/man3/rtapi_prio.3rtapi:20 man/man3/rtapi_region.3rtapi:23
#: man/man3/rtapi_set_msg_level.3rtapi:17 man/man3/rtapi_shmem.3rtapi:30
#: man/man3/rtapi_slab.3rtapi:38 man/man3/rtapi_snprintf.3rtapi:16
#: man/man3/rtapi_stdint.3rtapi:57 man/man3/rtapi_string.3rtapi:36
#: man/man3/rtapi_strlcpy.3rtapi:36 man/man3/rtapi_task_new.3rtapi:25
#: man/man3/rtapi_task_pause.3rtapi:15 man/man3/rtapi_task_self.3rtapi:10
#: man/man3/rtapi_task_start.3rtapi:14 man/man3/rtapi_task_wait.3rtapi:10
#: man/man9/at_pid.9:6 man/man9/bin2gray.9:16 man/man9/biquad.9:16
#: man/man9/bitslice.9:16 man/man9/bldc.9:15 man/man9/carousel.9:37
#: man/man9/charge_pump.9:16 man/man9/clarke2.9:16 man/man9/clarke3.9:16
#: man/man9/clarkeinv.9:16 man/man9/classicladder.9:11
#: man/man9/corexy_by_hal.9:16 man/man9/counter.9:9 man/man9/ddt.9:16
#: man/man9/debounce.9:21 man/man9/demux.9:16 man/man9/encoder.9:8
#: man/man9/encoder_ratio.9:8 man/man9/eoffset_per_angle.9:16
#: man/man9/estop_latch.9:16 man/man9/filter_kalman.9:16 man/man9/gantry.9:16
#: man/man9/gladevcp.9:9 man/man9/gray2bin.9:16 man/man9/hm2_7i43.9:35
#: man/man9/hm2_7i90.9:37 man/man9/hm2_eth.9:38 man/man9/hm2_pci.9:15
#: man/man9/hm2_rpspi.9:104 man/man9/hm2_spi.9:42 man/man9/hostmot2.9:36
#: man/man9/ilowpass.9:16 man/man9/joyhandle.9:16 man/man9/kins.9:48
#: man/man9/lcd.9:37 man/man9/lincurve.9:16 man/man9/logic.9:29
#: man/man9/lut5.9:16 man/man9/matrix_kb.9:23 man/man9/max31855.9:16
#: man/man9/mesa_7i65.9:16 man/man9/mesa_pktgyro_test.9:16
#: man/man9/message.9:26 man/man9/millturn.9:16 man/man9/motion.9:37
#: man/man9/moveoff.9:16 man/man9/multiclick.9:16 man/man9/mux_generic.9:66
#: man/man9/ohmic.9:16 man/man9/oneshot.9:16 man/man9/opto_ac5.9:9
#: man/man9/orient.9:16 man/man9/pid.9:8 man/man9/plasmac.9:16
#: man/man9/pwmgen.9:8 man/man9/sampler.9:34 man/man9/siggen.9:10
#: man/man9/sim_axis_hardware.9:16 man/man9/sim_encoder.9:10
#: man/man9/sim_home_switch.9:16 man/man9/sim_parport.9:16
#: man/man9/spindle.9:16 man/man9/stepgen.9:8 man/man9/streamer.9:35
#: man/man9/supply.9:8 man/man9/thc.9:16 man/man9/thcud.9:16
#: man/man9/threads.9:8 man/man9/time.9:16 man/man9/toggle2nist.9:16
#: man/man9/toggle.9:16 man/man9/userkins.9:16 man/man9/weighted_sum.9:9
#: man/man9/xhc_hb04_util.9:16
#, no-wrap
msgid "DESCRIPTION"
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:21
#, no-wrap
msgid ""
"*streamer*(9) and *halstreamer* are used together to stream data\n"
"from a file into the HAL in real-time.  *streamer* is a real-time HAL\n"
"component that exports HAL pins and creates a FIFO in shared memory.\n"
"*hal_streamer* is a user space program that copies data from stdin into\n"
"the FIFO, so that *streamer* can write it to the HAL pins.\n"
msgstr ""

#. type: SH
#: src/man/man1/halstreamer.1.adoc:23 src/man/man1/hy_gt_vfd.1.adoc:114
#: src/man/man1/svd-ps_vfd.1.adoc:47 src/man/man1/xhc-whb04b-6.1.adoc:32
#: src/man/man9/streamer.9.adoc:18 man/man1/axis.1:35 man/man1/axis-remote.1:35
#: man/man1/gladevcp.1:27 man/man1/gmoccapy.1:34 man/man1/gs2_vfd.1:43
#: man/man1/gscreen.1:34 man/man1/halcmd.1:47 man/man1/halmeter.1:36
#: man/man1/hal_parport.1:32 man/man1/halrun.1:65 man/man1/halsampler.1:45
#: man/man1/halshow.1:31 man/man1/haltcl.1:45 man/man1/halui.1:36
#: man/man1/hy_vfd.1:119 man/man1/latency-histogram.1:62
#: man/man1/latency-plot.1:48 man/man1/linuxcnclcd.1:35
#: man/man1/linuxcncrsh.1:15 man/man1/moveoff_gui.1:47 man/man1/pyvcp.1:27
#: man/man1/touchy.1:34 man/man1/vfdb_vfd.1:65 man/man1/vfs11_vfd.1:42
#: man/man9/sampler.9:46 man/man9/streamer.9:38
#, no-wrap
msgid "OPTIONS"
msgstr ""

#. type: Labeled list
#: src/man/man1/halstreamer.1.adoc:25
#, no-wrap
msgid "*-c* _CHAN_"
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:30
msgid ""
"Instructs *halstreamer* to write to FIFO _CHAN_.  FIFOs are numbered from "
"zero, and the default value is zero, so this option is not needed unless "
"multiple FIFOs have been created."
msgstr ""

#. type: Labeled list
#: src/man/man1/halstreamer.1.adoc:31
#, no-wrap
msgid "_FILENAME_"
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:34
msgid "Instructs *halsampler* to read from _FILENAME_ instead of from stdin."
msgstr ""

#. type: SH
#: src/man/man1/halstreamer.1.adoc:36 man/man1/hal_manualtoolchange.1:51
#: man/man1/halmeter.1:61 man/man1/hal_parport.1:108 man/man1/halrmt.1:34
#: man/man1/halsampler.1:75 man/man1/halui.1:42 man/man1/mdi.1:37
#: man/man1/moveoff_gui.1:174 man/man1/pmx485-test.1:35
#: man/man1/pyvcp_demo.1:34 man/man1/sim_pin.1:77 man/man1/vfdb_vfd.1:242
#: man/man1/vfs11_vfd.1:209 man/man9/setsserial.9:21
#, no-wrap
msgid "USAGE"
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:41
msgid ""
"A FIFO must first be created by loading *streamer*(9) with *halcmd loadrt* "
"or a *loadrt* command in a HAL file.  Then *halstreamer* can be invoked to "
"begin writing data into the FIFO."
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:45
msgid ""
"Data is read from stdin, and is almost always either redirected from a file "
"or piped from some other program, since keyboard input would be unable to "
"keep up with even slow streaming rates."
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:52
msgid ""
"Each line of input must match the pins that are attached to the FIFO, for "
"example, if the *streamer* config string was \"ffbs\" then each line of "
"input must consist of two floats, a bit, and a signed integer, in that order "
"and separated by whitespace.  Floats must be formatted as required by "
"*strtod*(3), signed and unsigned integers must be formatted as required by "
"*strtol*(3) and *strtoul*(3), and bits must be either '0' or '1'."
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:55
msgid ""
"Input lines that begin with '#' will be treated as comments and silently "
"skipped."
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:60
#, no-wrap
msgid ""
"*halstreamer* transfers data to the FIFO as fast as possible until the\n"
"FIFO is full, then it retries at regular intervals, until it is either\n"
"killed or reads EOF from stdin.  Data can be redirected from a file or\n"
"piped from some other program.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:65
msgid ""
"The FIFO size should be chosen to ride through any momentary disruptions in "
"the flow of data, such as disk seeks.  If the FIFO is big enough, "
"*halstreamer* can be restarted with the same or a new file before the FIFO "
"empties, resulting in a continuous stream of data."
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:69
msgid ""
"The data format for *halstreamer* input is the same as for *halsampler*(1)  "
"output, so 'waveforms' captured with *halsampler* can be replayed using "
"*halstreamer*."
msgstr ""

#. type: SH
#: src/man/man1/halstreamer.1.adoc:71 man/man1/halsampler.1:129
#, no-wrap
msgid "EXIT STATUS"
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:75
msgid ""
"If a problem is encountered during initialization, *halstreamer* prints a "
"message to stderr and returns failure."
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:79
msgid ""
"If a badly formatted line is encountered while writing to the FIFO, it "
"prints a message to stderr, skips the line, and continues (this behavior may "
"be revised in the future)."
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:82
msgid ""
"Upon reading EOF from the input, it returns success.  If it is terminated "
"before the input ends, it returns failure."
msgstr ""

#. type: SH
#: src/man/man1/halstreamer.1.adoc:84 src/man/man1/xhc-whb04b-6.1.adoc:596
#: src/man/man9/streamer.9.adoc:77 man/man1/5axisgui.1:36 man/man1/axis.1:45
#: man/man1/axis-remote.1:57 man/man1/debuglevel.1:35 man/man1/elbpcom.1:82
#: man/man1/gladevcp.1:76 man/man1/gladevcp_demo.1:36 man/man1/gmoccapy.1:44
#: man/man1/gremlin_view.1:79 man/man1/gs2_vfd.1:173 man/man1/gscreen.1:44
#: man/man1/halcmd.1:424 man/man1/halcmd_twopass.1:36 man/man1/halcompile.1:79
#: man/man1/hal-histogram.1:37 man/man1/hal_input.1:186
#: man/man1/hal_manualtoolchange.1:85 man/man1/hal_parport.1:203
#: man/man1/halreport.1:53 man/man1/halrmt.1:287 man/man1/halrun.1:102
#: man/man1/halsampler.1:144 man/man1/halscope.1:36 man/man1/halshow.1:50
#: man/man1/haltcl.1:92 man/man1/halui.1:567 man/man1/hbmgui.1:37
#: man/man1/hexagui.1:37 man/man1/image-to-gcode.1:38 man/man1/inivar.1:44
#: man/man1/io.1:98 man/man1/iocontrol.1:29 man/man1/iov2.1:155
#: man/man1/latency-histogram.1:102 man/man1/latency-plot.1:69
#: man/man1/latency-test.1:35 man/man1/lineardelta.1:36
#: man/man1/linuxcnc_info.1:36 man/man1/linuxcnclcd.1:45
#: man/man1/linuxcncmkdesktop.1:34 man/man1/linuxcnc_module_helper.1:36
#: man/man1/linuxcncsvr.1:35 man/man1/linuxcnctop.1:39
#: man/man1/linuxcnc_var.1:50 man/man1/maho600gui.1:37 man/man1/max5gui.1:37
#: man/man1/mdi.1:52 man/man1/monitor-xhc-hb04.1:39 man/man1/motion-logger.1:38
#: man/man1/moveoff_gui.1:230 man/man1/ngcgui.1:36 man/man1/panelui.1:42
#: man/man1/pmx485.1:35 man/man1/pncconf.1:37 man/man1/puma560gui.1:37
#: man/man1/pumagui.1:37 man/man1/pyngcgui.1:35 man/man1/pyui.1:37
#: man/man1/pyvcp.1:37 man/man1/pyvcp_demo.1:40
#: man/man1/qtplasmac-cfg2prefs.1:35 man/man1/qtplasmac-materials.1:36
#: man/man1/qtplasmac-plasmac2qt.1:34 man/man1/qtplasmac-setup.1:35
#: man/man1/qtvcp.1:36 man/man1/rotarydelta.1:36 man/man1/rs274.1:81
#: man/man1/rtapi_app.1:36 man/man1/scaragui.1:37 man/man1/schedrmt.1:208
#: man/man1/scorbot-er-3.1:43 man/man1/simulate_probe.1:35
#: man/man1/stepconf.1:37 man/man1/teach-in.1:41 man/man1/tooledit.1:37
#: man/man1/touchy.1:44 man/man1/update_ini.1:39 man/man1/xhc-hb04-accels.1:34
#: man/man1/xyzac-trt-gui.1:37 man/man1/xyzbc-trt-gui.1:37
#: man/man3/hal_add_funct_to_thread.3hal:40 man/man3/hal_create_thread.3hal:42
#: man/man3/hal_export_funct.3hal:49 man/man3/hal_param_alias.3hal:31
#: man/man3/hal_param_new.3hal:67 man/man3/hal_pin_alias.3hal:31
#: man/man3/hal_pin_new.3hal:79 man/man3/hal_port.3hal:124
#: man/man3/hal_set_constructor.3hal:34 man/man3/hal_signal_new.3hal:51
#: man/man3/hal_start_threads.3hal:26 man/man3/hal_stream.3hal:219
#: man/man3/hal_type_t.3hal:82 man/man3/hm2_allocate_bspi_tram.3hm2:32
#: man/man3/hm2_bspi_set_read_function.3hm2:43
#: man/man3/hm2_bspi_setup_chan.3hm2:70
#: man/man3/hm2_bspi_set_write_function.3hm2:45
#: man/man3/hm2_bspi_write_chan.3hm2:34 man/man3/hm2_pktuart_read.3hm2:69
#: man/man3/hm2_pktuart_send.3hm2:49 man/man3/hm2_pktuart_setup.3hm2:97
#: man/man3/hm2_tram_add_bspi_frame.3hm2:35 man/man3/hm2_uart_read.3hm2:32
#: man/man3/hm2_uart_send.3hm2:32 man/man3/hm2_uart_setup.3hm2:60
#: man/man3/intro.3hal:73 man/man3/PM_ROTATION_VECTOR.3:66
#: man/man3/rtapi_app_exit.3rtapi:31 man/man3/rtapi_app_main.3rtapi:29
#: man/man3/rtapi_atomic.3rtapi:72 man/man3/rtapi_byteorder.3rtapi:55
#: man/man3/rtapi_delay.3rtapi:35 man/man3/rtapi_device.3rtapi:54
#: man/man3/rtapi_firmware.3rtapi:53 man/man3/rtapi_gfp.3rtapi:49
#: man/man3/rtapi_io.3rtapi:57 man/man3/rtapi_list.3rtapi:59
#: man/man3/rtapi_open_as_root.3rtapi:40 man/man3/rtapi_outb.3rtapi:34
#: man/man3/rtapi_pci.3rtapi:84 man/man3/rtapi_print.3rtapi:57
#: man/man3/rtapi_prio.3rtapi:47 man/man3/rtapi_set_msg_level.3rtapi:35
#: man/man3/rtapi_slab.3rtapi:51 man/man3/rtapi_snprintf.3rtapi:30
#: man/man3/rtapi_stdint.3rtapi:69 man/man3/rtapi_string.3rtapi:49
#: man/man3/rtapi_strlcpy.3rtapi:55 man/man3/rtapi_task_new.3rtapi:38
#: man/man3/rtapi_task_pause.3rtapi:46 man/man3/rtapi_task_self.3rtapi:20
#: man/man3/rtapi_task_start.3rtapi:24 man/man3/rtapi_task_wait.3rtapi:20
#: man/man3/undocumented.3hal:6 man/man3/undocumented.3rtapi:6
#: man/man9/and2.9:43 man/man9/at_pid.9:10 man/man9/clarke2.9:49
#: man/man9/clarke3.9:53 man/man9/clarkeinv.9:50 man/man9/classicladder.9:87
#: man/man9/counter.9:73 man/man9/encoder_ratio.9:84 man/man9/gantrykins.9:13
#: man/man9/gentrivkins.9:7 man/man9/hm2_7i43.9:84 man/man9/hm2_7i90.9:71
#: man/man9/hm2_eth.9:208 man/man9/hm2_pci.9:29 man/man9/hm2_rpspi.9:198
#: man/man9/hm2_spi.9:76 man/man9/hostmot2.9:1785 man/man9/kins.9:496
#: man/man9/logic.9:109 man/man9/lut5.9:175 man/man9/motion.9:730
#: man/man9/moveoff.9:194 man/man9/not.9:27 man/man9/opto_ac5.9:68
#: man/man9/or2.9:42 man/man9/sampler.9:133 man/man9/stepgen.9:228
#: man/man9/streamer.9:213 man/man9/sum2.9:43 man/man9/weighted_sum.9:44
#: man/man9/xor2.9:42
#, no-wrap
msgid "SEE ALSO"
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:87
#, no-wrap
msgid "*streamer*(9) *sampler*(9) *halsampler*(1)\n"
msgstr ""

#. type: SH
#: src/man/man1/halstreamer.1.adoc:89 src/man/man1/sendkeys.1.adoc:133
#: src/man/man9/streamer.9.adoc:85 man/man1/5axisgui.1:45 man/man1/axis.1:54
#: man/man1/axis-remote.1:66 man/man1/debuglevel.1:45
#: man/man1/gladevcp_demo.1:46 man/man1/gmoccapy.1:53
#: man/man1/gremlin_view.1:89 man/man1/gs2_vfd.1:180 man/man1/gscreen.1:53
#: man/man1/halcmd.1:413 man/man1/halcmd_twopass.1:46
#: man/man1/hal-histogram.1:46 man/man1/halmeter.1:106
#: man/man1/hal_parport.1:206 man/man1/halreport.1:62 man/man1/halrmt.1:296
#: man/man1/halrun.1:89 man/man1/halsampler.1:149 man/man1/halscope.1:45
#: man/man1/halshow.1:68 man/man1/halui.1:571 man/man1/hbmgui.1:46
#: man/man1/hexagui.1:46 man/man1/hy_vfd.1:334 man/man1/image-to-gcode.1:47
#: man/man1/inivar.1:53 man/man1/io.1:124 man/man1/iov2.1:184
#: man/man1/latency-histogram.1:112 man/man1/latency-plot.1:79
#: man/man1/latency-test.1:47 man/man1/lineardelta.1:45
#: man/man1/linuxcnc_info.1:45 man/man1/linuxcnclcd.1:54
#: man/man1/linuxcncmkdesktop.1:43 man/man1/linuxcnc_module_helper.1:45
#: man/man1/linuxcncsvr.1:44 man/man1/linuxcnctop.1:48
#: man/man1/linuxcnc_var.1:59 man/man1/maho600gui.1:46 man/man1/max5gui.1:46
#: man/man1/mb2hal.1:110 man/man1/mdi.1:61 man/man1/monitor-xhc-hb04.1:49
#: man/man1/motion-logger.1:47 man/man1/ngcgui.1:45 man/man1/panelui.1:51
#: man/man1/pmx485.1:37 man/man1/pmx485-test.1:44 man/man1/pncconf.1:46
#: man/man1/puma560gui.1:46 man/man1/pumagui.1:46 man/man1/pyngcgui.1:45
#: man/man1/pyui.1:46 man/man1/pyvcp_demo.1:49
#: man/man1/qtplasmac-cfg2prefs.1:39 man/man1/qtplasmac-materials.1:40
#: man/man1/qtplasmac-plasmac2qt.1:38 man/man1/qtplasmac-setup.1:39
#: man/man1/qtvcp.1:45 man/man1/rotarydelta.1:45 man/man1/rs274.1:90
#: man/man1/rtapi_app.1:45 man/man1/scaragui.1:46 man/man1/schedrmt.1:217
#: man/man1/scorbot-er-3.1:52 man/man1/simulate_probe.1:44
#: man/man1/stepconf.1:46 man/man1/teach-in.1:50 man/man1/tooledit.1:46
#: man/man1/touchy.1:53 man/man1/update_ini.1:48 man/man1/vfdb_vfd.1:259
#: man/man1/vfs11_vfd.1:224 man/man1/xhc-hb04.1:310
#: man/man1/xhc-hb04-accels.1:43 man/man1/xyzac-trt-gui.1:46
#: man/man1/xyzbc-trt-gui.1:46 man/man9/abs.9:36 man/man9/abs_s32.9:36
#: man/man9/and2.9:52 man/man9/axistest.9:78 man/man9/bin2gray.9:30
#: man/man9/biquad.9:68 man/man9/bitslice.9:32 man/man9/bitwise.9:45
#: man/man9/bldc.9:463 man/man9/blend.9:37 man/man9/carousel.9:220
#: man/man9/charge_pump.9:42 man/man9/clarke2.9:53 man/man9/clarke3.9:57
#: man/man9/clarkeinv.9:53 man/man9/comp.9:43 man/man9/constant.9:26
#: man/man9/conv_bit_float.9:27 man/man9/conv_bit_s32.9:27
#: man/man9/conv_bit_u32.9:27 man/man9/conv_float_s32.9:36
#: man/man9/conv_float_u32.9:36 man/man9/conv_s32_bit.9:36
#: man/man9/conv_s32_float.9:27 man/man9/conv_s32_u32.9:36
#: man/man9/conv_u32_bit.9:36 man/man9/conv_u32_float.9:27
#: man/man9/conv_u32_s32.9:36 man/man9/corexy_by_hal.9:79 man/man9/dbounce.9:37
#: man/man9/ddt.9:44 man/man9/deadzone.9:34 man/man9/demux.9:44
#: man/man9/differential.9:45 man/man9/edge.9:47
#: man/man9/eoffset_per_angle.9:133 man/man9/estop_latch.9:109
#: man/man9/feedcomp.9:40 man/man9/filter_kalman.9:69 man/man9/flipflop.9:39
#: man/man9/gantry.9:73 man/man9/gearchange.9:61 man/man9/gray2bin.9:30
#: man/man9/histobins.9:141 man/man9/hypot.9:36 man/man9/ilowpass.9:56
#: man/man9/integ.9:41 man/man9/invert.9:32 man/man9/joyhandle.9:67
#: man/man9/knob2float.9:40 man/man9/latencybins.9:101 man/man9/lcd.9:163
#: man/man9/limit1.9:35 man/man9/limit2.9:42 man/man9/limit3.9:59
#: man/man9/lincurve.9:62 man/man9/logic.9:118 man/man9/lowpass.9:68
#: man/man9/lut5.9:184 man/man9/maj3.9:38 man/man9/match8.9:91
#: man/man9/max31855.9:72 man/man9/mesa_7i65.9:54
#: man/man9/mesa_pktgyro_test.9:60 man/man9/message.9:58 man/man9/millturn.9:48
#: man/man9/minmax.9:34 man/man9/moveoff.9:199 man/man9/mult2.9:32
#: man/man9/multiclick.9:92 man/man9/multiswitch.9:44 man/man9/mux16.9:75
#: man/man9/mux2.9:34 man/man9/mux4.9:61 man/man9/mux8.9:93
#: man/man9/mux_generic.9:89 man/man9/near.9:43 man/man9/not.9:36
#: man/man9/offset.9:39 man/man9/ohmic.9:120 man/man9/oneshot.9:57
#: man/man9/or2.9:47 man/man9/orient.9:91 man/man9/plasmac.9:573
#: man/man9/sample_hold.9:31 man/man9/sampler.9:138 man/man9/scale.9:36
#: man/man9/select8.9:30 man/man9/sim_axis_hardware.9:511
#: man/man9/sim_home_switch.9:48 man/man9/sim_matrix_kb.9:48
#: man/man9/sim_parport.9:405 man/man9/simple_tp.9:41 man/man9/sim_spindle.9:38
#: man/man9/sphereprobe.9:48 man/man9/spindle.9:148
#: man/man9/spindle_monitor.9:45 man/man9/steptest.9:81 man/man9/streamer.9:219
#: man/man9/sum2.9:46 man/man9/thc.9:129 man/man9/thcud.9:126
#: man/man9/threadtest.9:26 man/man9/time.9:121 man/man9/timedelay.9:40
#: man/man9/timedelta.9:48 man/man9/toggle2nist.9:63 man/man9/toggle.9:42
#: man/man9/tristate_bit.9:30 man/man9/tristate_float.9:30 man/man9/updown.9:46
#: man/man9/userkins.9:79 man/man9/wcomp.9:42 man/man9/xhc_hb04_util.9:133
#: man/man9/xor2.9:51
#, no-wrap
msgid "AUTHOR"
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:93 src/man/man9/streamer.9.adoc:88
#: man/man1/halmeter.1:110 man/man1/halsampler.1:153 man/man9/sampler.9:141
msgid ""
"Original version by John Kasunich, as part of the LinuxCNC project.  "
"Improvements by several other members of the LinuxCNC development team."
msgstr ""

#. type: SH
#: src/man/man1/halstreamer.1.adoc:95 src/man/man9/streamer.9.adoc:90
#: man/man1/5axisgui.1:47 man/man1/axis.1:56 man/man1/axis-remote.1:68
#: man/man1/debuglevel.1:47 man/man1/gladevcp_demo.1:48 man/man1/gmoccapy.1:55
#: man/man1/gremlin_view.1:91 man/man1/gscreen.1:55 man/man1/halcmd.1:416
#: man/man1/halcmd_twopass.1:48 man/man1/hal-histogram.1:48
#: man/man1/halmeter.1:110 man/man1/halreport.1:64 man/man1/halrmt.1:298
#: man/man1/halrun.1:93 man/man1/halsampler.1:153 man/man1/halscope.1:47
#: man/man1/halshow.1:70 man/man1/haltcl.1:84 man/man1/halui.1:574
#: man/man1/hbmgui.1:48 man/man1/hexagui.1:48 man/man1/image-to-gcode.1:49
#: man/man1/inivar.1:55 man/man1/io.1:120 man/man1/iov2.1:180
#: man/man1/latency-histogram.1:114 man/man1/latency-plot.1:81
#: man/man1/latency-test.1:49 man/man1/lineardelta.1:47
#: man/man1/linuxcnc_info.1:47 man/man1/linuxcnclcd.1:56
#: man/man1/linuxcncmkdesktop.1:45 man/man1/linuxcnc_module_helper.1:47
#: man/man1/linuxcncsvr.1:46 man/man1/linuxcnctop.1:50
#: man/man1/linuxcnc_var.1:61 man/man1/maho600gui.1:48 man/man1/max5gui.1:48
#: man/man1/mdi.1:63 man/man1/monitor-xhc-hb04.1:51 man/man1/motion-logger.1:49
#: man/man1/ngcgui.1:47 man/man1/panelui.1:53 man/man1/pncconf.1:48
#: man/man1/puma560gui.1:48 man/man1/pumagui.1:48 man/man1/pyngcgui.1:47
#: man/man1/pyui.1:48 man/man1/pyvcp_demo.1:51 man/man1/qtvcp.1:47
#: man/man1/rotarydelta.1:47 man/man1/rs274.1:92 man/man1/rtapi_app.1:47
#: man/man1/scaragui.1:48 man/man1/schedrmt.1:219 man/man1/scorbot-er-3.1:54
#: man/man1/simulate_probe.1:46 man/man1/stepconf.1:48 man/man1/teach-in.1:52
#: man/man1/tooledit.1:48 man/man1/touchy.1:55 man/man1/update_ini.1:50
#: man/man1/xhc-hb04-accels.1:45 man/man1/xyzac-trt-gui.1:48
#: man/man1/xyzbc-trt-gui.1:48 man/man9/sampler.9:141 man/man9/streamer.9:222
#, no-wrap
msgid "REPORTING BUGS"
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:98 src/man/man9/streamer.9.adoc:92
#: man/man1/halmeter.1:112 man/man1/halsampler.1:155 man/man9/sampler.9:143
#: man/man9/streamer.9:225
msgid "Report bugs to jmkasunich AT users DOT sourceforge DOT net"
msgstr ""

#. type: SH
#: src/man/man1/halstreamer.1.adoc:100 src/man/man1/xhc-whb04b-6.1.adoc:613
#: src/man/man9/streamer.9.adoc:94 man/man1/5axisgui.1:49 man/man1/axis.1:58
#: man/man1/axis-remote.1:70 man/man1/debuglevel.1:49
#: man/man1/gladevcp_demo.1:50 man/man1/gmoccapy.1:57
#: man/man1/gremlin_view.1:93 man/man1/gscreen.1:57 man/man1/halcmd.1:419
#: man/man1/halcmd_twopass.1:50 man/man1/hal-histogram.1:50
#: man/man1/halmeter.1:112 man/man1/halreport.1:66 man/man1/halrmt.1:300
#: man/man1/halrun.1:96 man/man1/halsampler.1:155 man/man1/halscope.1:49
#: man/man1/halshow.1:72 man/man1/haltcl.1:87 man/man1/halui.1:576
#: man/man1/hbmgui.1:50 man/man1/hexagui.1:50 man/man1/image-to-gcode.1:51
#: man/man1/inivar.1:57 man/man1/io.1:126 man/man1/iov2.1:188
#: man/man1/latency-histogram.1:117 man/man1/latency-plot.1:84
#: man/man1/latency-test.1:51 man/man1/lineardelta.1:49
#: man/man1/linuxcnc_info.1:49 man/man1/linuxcnclcd.1:58
#: man/man1/linuxcncmkdesktop.1:47 man/man1/linuxcnc_module_helper.1:49
#: man/man1/linuxcncsvr.1:48 man/man1/linuxcnctop.1:52
#: man/man1/linuxcnc_var.1:63 man/man1/maho600gui.1:50 man/man1/max5gui.1:50
#: man/man1/mdi.1:65 man/man1/monitor-xhc-hb04.1:53 man/man1/motion-logger.1:51
#: man/man1/ngcgui.1:49 man/man1/panelui.1:55 man/man1/pncconf.1:50
#: man/man1/puma560gui.1:50 man/man1/pumagui.1:50 man/man1/pyngcgui.1:49
#: man/man1/pyui.1:50 man/man1/pyvcp_demo.1:53 man/man1/qtvcp.1:49
#: man/man1/rotarydelta.1:49 man/man1/rs274.1:94 man/man1/rtapi_app.1:49
#: man/man1/scaragui.1:50 man/man1/schedrmt.1:221 man/man1/scorbot-er-3.1:56
#: man/man1/simulate_probe.1:48 man/man1/stepconf.1:50 man/man1/teach-in.1:54
#: man/man1/tooledit.1:50 man/man1/touchy.1:57 man/man1/update_ini.1:52
#: man/man1/xhc-hb04-accels.1:47 man/man1/xyzac-trt-gui.1:50
#: man/man1/xyzbc-trt-gui.1:50 man/man9/sampler.9:143 man/man9/streamer.9:225
#, no-wrap
msgid "COPYRIGHT"
msgstr ""

#. type: Plain text
#: src/man/man1/halstreamer.1.adoc:104 src/man/man9/streamer.9.adoc:98
msgid ""
"Copyright © 2006 John Kasunich.  This is free software; see the source for "
"copying conditions.  There is NO warranty; not even for MERCHANTABILITY or "
"FITNESS FOR A PARTICULAR PURPOSE."
msgstr ""

#. type: Title =
#: src/man/man1/hy_gt_vfd.1.adoc:1
#, no-wrap
msgid "hy_gt_vfd(1)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:7
msgid "hy_gt_vfd - HAL userspace component for Huanyang GT-series VFDs"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:12
#, no-wrap
msgid "*hy_gt_vfd* [_OPTIONS_]\n"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:19
msgid ""
"The hy_gt_vfd component interfaces a Huanyang GT-series VFD to the LinuxCNC "
"HAL.  The VFD is connected via RS-485 serial to the LinuxCNC computer."
msgstr ""

#. type: Title ==
#: src/man/man1/hy_gt_vfd.1.adoc:21 src/man/man1/svd-ps_vfd.1.adoc:20
#, no-wrap
msgid "Hardware setup"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:25
msgid ""
"At least some Huanyang GT VFDs must be physically modified to enable Modbus "
"communication."
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:34
msgid ""
"The circuit board location marked \"SW1\" is identified in the manual as "
"\"Switch of terminal resistor for RS485 communication\".  On the only VFD I "
"have experience with, the circuit board contained no switch at that "
"location, instead holding a pair of crossed jumper wires (top-left pad "
"connected to bottom-right pad, top-right to bottom-left).  In this "
"configuration, no Modbus communication is possible.  We had to desolder the "
"two crossed jumper wires and re-solder them parallel to each other (top-left "
"to bottom-left, top-right to bottom-right)."
msgstr ""

#. type: Title ==
#: src/man/man1/hy_gt_vfd.1.adoc:36 src/man/man1/svd-ps_vfd.1.adoc:25
#, no-wrap
msgid "Firmware setup"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:41
msgid ""
"The Huanyang GT VFD must be configure via the faceplate to talk Modbus with "
"LinuxCNC.  Consult the Operation section of the Huanyang GT-series Inverter "
"Manual for details.  Set the following parameters:"
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:42
#, no-wrap
msgid "P0.01 = 2"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:45
msgid "Set Run Command Source to Modbus serial port."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:46
#, no-wrap
msgid "P0.03"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:50
msgid ""
"Set Maximum Frequency to the maximum frequency you want the VFD to output, "
"in Hz."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:51
#, no-wrap
msgid "P0.04"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:55
msgid ""
"Set Upper Frequency Limit to the maximum frequency you want the VFD to "
"output, in Hz.  This should be the same as the value in P0.03."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:56
#, no-wrap
msgid "P0.05"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:60
msgid ""
"Set Lower Frequency Limit to the minimum frequency you want the VFD to "
"output, in Hz."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:61
#, no-wrap
msgid "P0.07 = 7"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:64
msgid "Set Frequency A Command Source to Modbus serial port."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:65
#, no-wrap
msgid "P2.01 = ???"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:68
msgid "Set Motor Rated Power to the motor's power rating in kW."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:69
#, no-wrap
msgid "P2.02 = ???"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:72
msgid "Set Motor Rated Frequency to the motor's max frequency in Hz."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:73
#, no-wrap
msgid "P2.03 = ???"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:77
msgid ""
"Set Motor Rated Speed to the motor's speed in RPM at its rated maximum "
"frequency."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:78
#, no-wrap
msgid "P2.04 = ???"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:81
msgid "Set Motor Rated Voltage to the motor's maximum voltage, in Volts."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:82
#, no-wrap
msgid "P2.05 = ???"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:85
msgid "Set Motor Rated Current to the motor's maximum current, in Amps."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:86
#, no-wrap
msgid "PC.00 = 1"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:90
msgid ""
"Set Local Address to 1.  This matches the default in the hy_gt_vfd driver, "
"change this if your setup has special needs."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:91
#, no-wrap
msgid "PC.01 = 5"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:95
msgid ""
"Set Baud Rate Selection to 5 (38400 bps).  This matches the default in the "
"hy_gt_vfd driver, change this if your setup has special needs."
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:102
#, no-wrap
msgid ""
"0 = 1200\n"
"1 = 2400\n"
"2 = 4800\n"
"3 = 9600\n"
"4 = 19200\n"
"5 = 38400\n"
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:103
#, no-wrap
msgid "PC.02 = 0"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:107
msgid ""
"Set Data Format (8n1 RTU).  This matches the default in the hy_gt_vfd "
"driver, change this if your setup has special needs."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:108
#, no-wrap
msgid "PC.03 = 1"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:112
msgid ""
"Set Communication Delay Time to 1&thinsp;ms.  This is expected by the "
"hy_gt_vfd driver."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:116 src/man/man1/svd-ps_vfd.1.adoc:49
#, no-wrap
msgid "*-b*, *--bits* _N_"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:120 src/man/man1/svd-ps_vfd.1.adoc:53
msgid ""
"(default 8) For Modbus communication.  Set number of data bits to _N_.  _N_ "
"must be between 5 and 8 inclusive."
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:122 src/man/man1/svd-ps_vfd.1.adoc:55
#, no-wrap
msgid "*-p*, *--parity* [Even,Odd,None]\n"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:125 src/man/man1/svd-ps_vfd.1.adoc:58
#, no-wrap
msgid ""
"      (default None) For Modbus communication.  Set serial parity to Even,\n"
"      Odd, or None.\n"
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:126 src/man/man1/svd-ps_vfd.1.adoc:59
#, no-wrap
msgid "*-r*, *--rate* _N_"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:131
msgid ""
"(default 38400) For Modbus communication.  Set baud rate to _N_.  It is an "
"error if the rate is not one of the following: 1200, 2400, 4800, 9600, "
"19200, 38400"
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:132 src/man/man1/svd-ps_vfd.1.adoc:65
#, no-wrap
msgid "*-s*, *--stopbits* [1,2]"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:136
msgid "(default 1) For Modbus communication.  Set serial stop bits to 1 or 2."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:137 src/man/man1/svd-ps_vfd.1.adoc:70
#, no-wrap
msgid "*-t*, *--target* _N_"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:142 src/man/man1/svd-ps_vfd.1.adoc:75
msgid ""
"(default 1) For Modbus communication.  Set Modbus target (slave)  number.  "
"This must match the device number you set on the Huanyang GT VFD."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:143 src/man/man1/svd-ps_vfd.1.adoc:76
#, no-wrap
msgid "*-d*, *--device* _PATH_"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:147 src/man/man1/svd-ps_vfd.1.adoc:80
msgid ""
"(default /dev/ttyS0) For Modbus communication.  Set the name of the serial "
"device node to use."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:148 src/man/man1/svd-ps_vfd.1.adoc:81
#, no-wrap
msgid "*-v*, *--verbose*"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:151 src/man/man1/svd-ps_vfd.1.adoc:84
#: man/man1/gs2_vfd.1:54
msgid "Turn on verbose mode."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:152 src/man/man1/svd-ps_vfd.1.adoc:85
#, no-wrap
msgid "*-S*, *--motor-max-speed* _RPM_"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:156
msgid ""
"The motor's max speed in RPM.  This must match the motor speed value "
"configured in VFD register P2.03."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:157 src/man/man1/svd-ps_vfd.1.adoc:89
#, no-wrap
msgid "*-F*, *--max-frequency* _HZ_"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:163
msgid ""
"This is the maximum output frequency of the VFD in Hz.  It should correspond "
"to the motor's rated max frequency, and to the maximum and upper limit "
"output frequency configured in VFD register P0.03 and P0.04."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:164 src/man/man1/svd-ps_vfd.1.adoc:93
#, no-wrap
msgid "*-f*, *--min-frequency* _HZ_"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:169
msgid ""
"This is the minimum output frequency of the VFD in Hz.  It should correspond "
"to the minimum output frequency configured in VFD register P0.05."
msgstr ""

#. type: SH
#: src/man/man1/hy_gt_vfd.1.adoc:171 src/man/man1/sendkeys.1.adoc:85
#: src/man/man1/svd-ps_vfd.1.adoc:97 src/man/man9/streamer.9.adoc:44
#: man/man1/gs2_vfd.1:92 man/man1/hal_manualtoolchange.1:38
#: man/man1/hal_parport.1:54 man/man1/halui.1:49 man/man1/hy_vfd.1:213
#: man/man1/io.1:26 man/man1/mb2hal.1:51 man/man1/milltask.1:23
#: man/man1/mitsub_vfd.1:104 man/man1/pi500_vfd.1:15 man/man1/thermistor.1:22
#: man/man1/vfdb_vfd.1:133 man/man1/vfs11_vfd.1:65 man/man1/wj200_vfd.1:15
#: man/man9/abs.9:20 man/man9/abs_s32.9:20 man/man9/and2.9:20
#: man/man9/axistest.9:20 man/man9/bin2gray.9:23 man/man9/biquad.9:24
#: man/man9/bitslice.9:26 man/man9/bitwise.9:20 man/man9/bldc.9:115
#: man/man9/blend.9:20 man/man9/carousel.9:115 man/man9/charge_pump.9:29
#: man/man9/clarke2.9:34 man/man9/clarke3.9:31 man/man9/clarkeinv.9:25
#: man/man9/classicladder.9:24 man/man9/comp.9:20 man/man9/constant.9:20
#: man/man9/conv_bit_float.9:20 man/man9/conv_bit_s32.9:20
#: man/man9/conv_bit_u32.9:20 man/man9/conv_float_s32.9:20
#: man/man9/conv_float_u32.9:20 man/man9/conv_s32_bit.9:20
#: man/man9/conv_s32_float.9:20 man/man9/conv_s32_u32.9:20
#: man/man9/conv_u32_bit.9:20 man/man9/conv_u32_float.9:20
#: man/man9/conv_u32_s32.9:20 man/man9/corexy_by_hal.9:54 man/man9/counter.9:37
#: man/man9/dbounce.9:26 man/man9/ddt.9:27 man/man9/deadzone.9:20
#: man/man9/debounce.9:36 man/man9/demux.9:31 man/man9/differential.9:20
#: man/man9/edge.9:20 man/man9/encoder.9:59 man/man9/encoder_ratio.9:37
#: man/man9/eoffset_per_angle.9:49 man/man9/estop_latch.9:86
#: man/man9/feedcomp.9:20 man/man9/filter_kalman.9:45 man/man9/flipflop.9:20
#: man/man9/gantry.9:45 man/man9/gearchange.9:24 man/man9/gray2bin.9:23
#: man/man9/hal_bb_gpio.9:16 man/man9/hal_bb_gpio.9:34
#: man/man9/hal_bb_gpio.9:50 man/man9/histobins.9:54 man/man9/hm2_eth.9:121
#: man/man9/hypot.9:20 man/man9/ilowpass.9:35 man/man9/integ.9:20
#: man/man9/invert.9:21 man/man9/joyhandle.9:41 man/man9/knob2float.9:20
#: man/man9/latencybins.9:46 man/man9/lcd.9:13 man/man9/limit1.9:20
#: man/man9/limit2.9:20 man/man9/limit3.9:22 man/man9/lincurve.9:45
#: man/man9/lineardeltakins.9:21 man/man9/logic.9:57 man/man9/lowpass.9:20
#: man/man9/lut5.9:149 man/man9/maj3.9:20 man/man9/match8.9:20
#: man/man9/matrix_kb.9:58 man/man9/max31855.9:47 man/man9/mesa_7i65.9:27
#: man/man9/mesa_pktgyro_test.9:56 man/man9/message.9:45 man/man9/millturn.9:45
#: man/man9/minmax.9:20 man/man9/moveoff.9:111 man/man9/mult2.9:20
#: man/man9/multiclick.9:41 man/man9/multiswitch.9:27 man/man9/mux16.9:20
#: man/man9/mux2.9:20 man/man9/mux4.9:20 man/man9/mux8.9:20
#: man/man9/mux_generic.9:16 man/man9/near.9:20 man/man9/not.9:20
#: man/man9/offset.9:23 man/man9/ohmic.9:47 man/man9/oneshot.9:28
#: man/man9/opto_ac5.9:26 man/man9/or2.9:20 man/man9/orient.9:66
#: man/man9/pid.9:211 man/man9/plasmac.9:44 man/man9/pwmgen.9:53
#: man/man9/rosekins.9:16 man/man9/sample_hold.9:20 man/man9/sampler.9:84
#: man/man9/scale.9:20 man/man9/select8.9:20 man/man9/serport.9:37
#: man/man9/setsserial.9:18 man/man9/siggen.9:43
#: man/man9/sim_axis_hardware.9:28 man/man9/sim_encoder.9:50
#: man/man9/sim_home_switch.9:29 man/man9/sim_matrix_kb.9:20
#: man/man9/sim_parport.9:55 man/man9/simple_tp.9:19 man/man9/sim_spindle.9:20
#: man/man9/sphereprobe.9:20 man/man9/spindle.9:38
#: man/man9/spindle_monitor.9:20 man/man9/stepgen.9:81 man/man9/steptest.9:20
#: man/man9/streamer.9:119 man/man9/sum2.9:20 man/man9/supply.9:34
#: man/man9/thc.9:70 man/man9/thcud.9:79 man/man9/threads.9:36
#: man/man9/threadtest.9:23 man/man9/time.9:105 man/man9/timedelay.9:20
#: man/man9/timedelta.9:20 man/man9/toggle2nist.9:48 man/man9/toggle.9:31
#: man/man9/tristate_bit.9:20 man/man9/tristate_float.9:20 man/man9/updown.9:20
#: man/man9/userkins.9:76 man/man9/watchdog.9:24 man/man9/wcomp.9:20
#: man/man9/weighted_sum.9:24 man/man9/xhc_hb04_util.9:30 man/man9/xor2.9:20
#, no-wrap
msgid "PINS"
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:174
#, no-wrap
msgid "*hy_gt_vfd.period* (float, in)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:180 src/man/man1/svd-ps_vfd.1.adoc:106
msgid ""
"The period for the driver's update cycle, in seconds. This is how frequently "
"the driver will wake up, check its HAL pins, and communicate with the VFD.  "
"Must be between 0.001 and 2.000 seconds.  Default: 0.1 seconds."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:181
#, no-wrap
msgid "*hy_gt_vfd.speed-cmd* (float, in)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:184 src/man/man1/svd-ps_vfd.1.adoc:110
msgid "The requested motor speed, in RPM."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:185
#, no-wrap
msgid "*hy_gt_vfd.speed-fb* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:188 src/man/man1/svd-ps_vfd.1.adoc:114
msgid "The motor's current speed, in RPM, reported by the VFD."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:189
#, no-wrap
msgid "*hy_gt_vfd.at-speed* (bit, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:193 src/man/man1/svd-ps_vfd.1.adoc:119
msgid ""
"True when the drive is on and at the commanded speed (within 2%), False "
"otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:194
#, no-wrap
msgid "*hy_gt_vfd.freq-cmd* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:198 src/man/man1/svd-ps_vfd.1.adoc:124
msgid ""
"The requested output frequency, in Hz.  This is set from the .speed-cmd "
"value, and is just shown for debugging purposes."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:199
#, no-wrap
msgid "*hy_gt_vfd.freq-fb* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:203 src/man/man1/svd-ps_vfd.1.adoc:129
msgid ""
"The current output frequency of the VFD, in Hz.  This is reported from the "
"VFD to the driver."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:204
#, no-wrap
msgid "*hy_gt_vfd.spindle-on* (bit, in)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:209 src/man/man1/svd-ps_vfd.1.adoc:135
msgid ""
"Set this pin True to command the spindle on, at the speed requested on the ."
"speed-cmd pin.  Set this pin False to command the spindle off."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:210
#, no-wrap
msgid "*hy_gt_vfd.output-voltage* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:214 src/man/man1/svd-ps_vfd.1.adoc:140
msgid "The voltage that the VFD is current providing to the motor, in Volts."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:215
#, no-wrap
msgid "*hy_gt_vfd.output-current* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:219 src/man/man1/svd-ps_vfd.1.adoc:145
msgid ""
"The current that the motor is currently drawing from the VFD, in Amperes."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:220
#, no-wrap
msgid "*hy_gt_vfd.output-power* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:224 src/man/man1/svd-ps_vfd.1.adoc:150
msgid "The power that the motor is currently drawing from the VFD, in Watts."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:225
#, no-wrap
msgid "*hy_gt_vfd.dc-bus-volts* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:228 src/man/man1/svd-ps_vfd.1.adoc:154
msgid "The current voltage of the VFD's internal DC power supply, in Volts."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:229
#, no-wrap
msgid "*hy_gt_vfd.modbus-errors* (u32, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:235 src/man/man1/svd-ps_vfd.1.adoc:161
msgid ""
"A count of the number of modbus communication errors between the driver and "
"the VFD.  The driver is resilient against communication errors, but a large "
"or growing number here indicates a problem that should be investigated."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:236
#, no-wrap
msgid "*hy_gt_vfd.input-terminal* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:239 src/man/man1/svd-ps_vfd.1.adoc:165
msgid "The VFD's input terminal register."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:240
#, no-wrap
msgid "*hy_gt_vfd.output-terminal* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:243
msgid "The VFD's output terminal register."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:244
#, no-wrap
msgid "*hy_gt_vfd.AI1* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:247 src/man/man1/svd-ps_vfd.1.adoc:169
msgid "The VFD's AI1 register."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:248
#, no-wrap
msgid "*hy_gt_vfd.AI2* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:251 src/man/man1/svd-ps_vfd.1.adoc:172
msgid "The VFD's AI2 register."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:252
#, no-wrap
msgid "*hy_gt_vfd.HDI-frequency* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:255
msgid "The VFD's HDI-frequency register."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:256
#, no-wrap
msgid "*hy_gt_vfd.external-counter* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:259
msgid "The VFD's external counter register."
msgstr ""

#. type: Labeled list
#: src/man/man1/hy_gt_vfd.1.adoc:260
#, no-wrap
msgid "*hy_gt_vfd.fault-info* (float, out)"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:263
msgid "The VFD's fault info register."
msgstr ""

#. type: SH
#: src/man/man1/hy_gt_vfd.1.adoc:265 man/man1/mitsub_vfd.1:237
#: man/man9/gladevcp.9:20
#, no-wrap
msgid "ISSUES"
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:269
msgid ""
"The VFD produces the output frequency that it sends to the motor by adding a "
"manually specified offset to the frequency command it gets over modbus."
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:272
msgid ""
"The manual offset is controlled by pressing the Up/Down arrows on the "
"faceplate while the VFD is turning the motor."
msgstr ""

#. type: Plain text
#: src/man/man1/hy_gt_vfd.1.adoc:279
msgid ""
"If you command a speed on the .speed-cmd pin and get a different speed "
"reported on the .speed-fb pin, first verify that the VFD registers listed in "
"the FIRMWARE SETUP section above and the driver's command-line arguments all "
"agree with the info on the motor's name plate.  If you still aren't getting "
"the speed you expect, zero the VFD's frequency offset by starting the motor "
"running, then pressing the Up/Down buttons to zero the offset."
msgstr ""

#. type: Title =
#: src/man/man1/sendkeys.1.adoc:1
#, no-wrap
msgid "sendkeys(1)"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:7
msgid "sendkeys - send input events based on pins or scancodes from HAL"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:11
#, no-wrap
msgid "*loadusr sendkeys config=s8t5, 16, t12*\n"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:18
msgid ""
"This component is intended as a partner component to matrix_kb or the "
"hostmot2 7i73 driver. It accepts the key-up and key-down event codes from "
"either of these and converts them to keystrokes sent from a virtual keyboard."
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:20
msgid "It also allows for keystrokes to be generated by individual HAL pins."
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:26
#, no-wrap
msgid ""
"The *config* parameter to the *loadusr* HAL command defines how many\n"
"scancodes will be supported and how many individual pins are created.\n"
"  *config=s16* would support the 16 scancodes of a 4x4 matrix.\n"
"  *config=t10* would create 10 individual HAL pin triggers.\n"
"  *config=s16t10* would create one instance with both the above.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:30
msgid ""
"Multiple configs separated by commas will create multiple instances of the "
"component. The accepted codes can be seen in the extract from the linux "
"headers here: <http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Scancodes>"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:33
msgid ""
"The component requires the user to have write permissions to /dev/uinput "
"which is not available by default. To give access:"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:35
msgid "Create the uinput group and add the LinuxCNC user to it:"
msgstr ""

#. type: delimited block -
#: src/man/man1/sendkeys.1.adoc:39
#, no-wrap
msgid ""
"sudo groupadd -f uinput\n"
"sudo gpasswd -a username uinput\n"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:42
msgid "Create a new entry in .B/etc/udev/rules.d/99-input.rules"
msgstr ""

#. type: delimited block -
#: src/man/man1/sendkeys.1.adoc:45
#, no-wrap
msgid "sudo echo KERNEL==\"uinput\", GROUP=\"uinput\", MODE:=\"0660\" | sudo tee /etc/udev/rules.d/88-input.rules\n"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:48
msgid "Then reboot the machine. You can test that is has worked:"
msgstr ""

#. type: delimited block -
#: src/man/man1/sendkeys.1.adoc:52
#, no-wrap
msgid ""
"ls -l /dev/uinput\n"
"crw-rw---- 1 root uinput 10, 223 Nov 11 15:35 /dev/uinput\n"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:59
msgid ""
"It is possible to link the 7i73 codes to both the matrix_kb comp and this "
"comp, so that some codes operate HAL pins and some send keystrokes. Where "
"the option exists it is _MUCH_ better to use HAL pins for things like "
"jogging and machine control. This component should really be used only for "
"text entry and GUI operations."
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:66
msgid ""
"Each key on the matrix is allocated a scan code. The simplest way to "
"configure the component is to load the component and open a halmeter showing "
"sendkeys.0.current-event. Note the code for each physical key.  (If keys do "
"not give consistent results then you probably need to toggle the value of "
"the matrix_kb.0.negative-logic pin and/or invert io pins)."
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:69
msgid ""
"Then edit the HAL file to assign a key event to each scancode. For example:"
msgstr ""

#. type: delimited block -
#: src/man/man1/sendkeys.1.adoc:72
#, no-wrap
msgid "setp sendkeys.0.scan-event-21 34\n"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:77
msgid ""
"To set a button to type the letter \"G\" The key events related to each "
"physical key need to be set up prior to the component activating, but after "
"the component is loaded."
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:81
msgid ""
"To achieve this there is a pin *sendkeys*./N/.*init* which should be set to "
"\"true\" once the events to be sent for each scancode and pin have been set "
"up."
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:84
msgid ""
"To generate keystrokes from other sources note that a keydown is simply 0xC0 "
"& keycode and keyup is 0x80 & keycode."
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:89
#, no-wrap
msgid ""
"*sendkeys.N.keycode* u32 in\n"
"    Connect to scancode generator.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:92
#, no-wrap
msgid ""
"*sendkeys.N.current-event* s32 out\n"
"    shows the current scancode without keyup / keydown markers.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:95
#, no-wrap
msgid ""
"*sendkeys.N.init* bit in\n"
"    set this pin TRUE once all the event parameters have been set.\n"
msgstr ""

#. type: SH
#: src/man/man1/sendkeys.1.adoc:96 man/man1/gs2_vfd.1:151
#: man/man1/hal_parport.1:79 man/man1/hy_vfd.1:326 man/man1/pi500_vfd.1:46
#: man/man1/vfdb_vfd.1:219 man/man1/vfs11_vfd.1:183 man/man1/wj200_vfd.1:49
#: man/man9/axistest.9:70 man/man9/biquad.9:52 man/man9/bldc.9:288
#: man/man9/blend.9:33 man/man9/carousel.9:207 man/man9/classicladder.9:62
#: man/man9/comp.9:33 man/man9/constant.9:23 man/man9/conv_float_s32.9:32
#: man/man9/conv_float_u32.9:32 man/man9/conv_s32_bit.9:32
#: man/man9/conv_s32_u32.9:32 man/man9/conv_u32_bit.9:32
#: man/man9/conv_u32_s32.9:32 man/man9/deadzone.9:27 man/man9/demux.9:41
#: man/man9/edge.9:31 man/man9/encoder.9:162 man/man9/encoder_ratio.9:68
#: man/man9/feedcomp.9:33 man/man9/filter_kalman.9:62 man/man9/gearchange.9:40
#: man/man9/hal_bb_gpio.9:58 man/man9/hm2_eth.9:140 man/man9/ilowpass.9:44
#: man/man9/invert.9:28 man/man9/joyhandle.9:48 man/man9/knob2float.9:33
#: man/man9/lcd.9:31 man/man9/lincurve.9:55 man/man9/lowpass.9:31
#: man/man9/lut5.9:172 man/man9/maj3.9:35 man/man9/matrix_kb.9:75
#: man/man9/mesa_7i65.9:45 man/man9/message.9:53 man/man9/multiclick.9:75
#: man/man9/multiswitch.9:37 man/man9/mux16.9:66 man/man9/mux_generic.9:56
#: man/man9/near.9:36 man/man9/oneshot.9:47 man/man9/opto_ac5.9:49
#: man/man9/pid.9:411 man/man9/sampler.9:110 man/man9/serport.9:71
#: man/man9/siggen.9:92 man/man9/sim_encoder.9:67 man/man9/sim_parport.9:310
#: man/man9/sim_spindle.9:30 man/man9/spindle_monitor.9:39
#: man/man9/stepgen.9:114 man/man9/steptest.9:73 man/man9/sum2.9:32
#: man/man9/thc.9:113 man/man9/thcud.9:119 man/man9/threads.9:40
#: man/man9/toggle.9:38 man/man9/updown.9:33 man/man9/watchdog.9:39
#, no-wrap
msgid "PARAMETERS"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:100
#, no-wrap
msgid ""
"*sendkeys.N.scan-event-MM* u32 in\n"
"    assign the uinput event codes associated with each scancode.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:103
#, no-wrap
msgid ""
"*sendkeys.N.pin-event-MM* u32 in\n"
"    assign the uinput codes associated with each HAL bit pin.\n"
msgstr ""

#. type: SH
#: src/man/man1/sendkeys.1.adoc:104 man/man1/sim_pin.1:81
#, no-wrap
msgid "EXAMPLE"
msgstr ""

#. type: delimited block .
#: src/man/man1/sendkeys.1.adoc:108
#, no-wrap
msgid ""
"loadusr -W sendkeys config=16t2\n"
"net scancodes hm2_7i73.0.0.keycode => sendkeys.0.keycode\n"
msgstr ""

#. type: delimited block .
#: src/man/man1/sendkeys.1.adoc:128
#, no-wrap
msgid ""
"setp sendkeys.0.scan-event-00 34 # Key G\n"
"setp sendkeys.0.scan-event-01  2 # Key 1\n"
"setp sendkeys.0.scan-event-02  3 # Key 2\n"
"setp sendkeys.0.scan-event-03  4 # Key 3\n"
"setp sendkeys.0.scan-event-04 50 # Key M\n"
"setp sendkeys.0.scan-event-05 05 # Key 4\n"
"setp sendkeys.0.scan-event-06 06 # Key 5\n"
"setp sendkeys.0.scan-event-07 07 # Key 6\n"
"setp sendkeys.0.scan-event-08 31 # Key S\n"
"setp sendkeys.0.scan-event-09  8 # Key 7\n"
"setp sendkeys.0.scan-event-10  9 # Key 8\n"
"setp sendkeys.0.scan-event-11 10 # Key 9\n"
"setp sendkeys.0.scan-event-12 20 # Key T\n"
"setp sendkeys.0.scan-event-13 11 # Key 0\n"
"setp sendkeys.0.scan-event-14 52 # Key Dot\n"
"setp sendkeys.0.scan-event-15 14 # Backspace\n"
"setp sendkeys.0.pin-event-00 29 # Left Ctrl\n"
"setp sendkeys.0.pin-event-01 57 # Space\n"
"setp sendkeys.0.init 1\n"
msgstr ""

#. type: delimited block .
#: src/man/man1/sendkeys.1.adoc:131
#, no-wrap
msgid ""
"#Send Ctl + Space from one trigger\n"
"net clear-errors parport.0.pin.00.in sendkeys.0.trigger-00 sendkeys.0.trigger-01\n"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:136 man/man9/bin2gray.9:33
#: man/man9/bitslice.9:35 man/man9/bitwise.9:48 man/man9/bldc.9:466
#: man/man9/carousel.9:223 man/man9/demux.9:47 man/man9/gray2bin.9:33
#: man/man9/lcd.9:165 man/man9/lincurve.9:65 man/man9/mux_generic.9:90
msgid "Andy Pugh"
msgstr ""

#. type: SH
#: src/man/man1/sendkeys.1.adoc:137 man/man1/gs2_vfd.1:183
#: man/man1/hy_vfd.1:337 man/man1/mb2hal.1:112 man/man1/pi500_vfd.1:50
#: man/man1/pmx485.1:39 man/man1/pmx485-test.1:46
#: man/man1/qtplasmac-cfg2prefs.1:41 man/man1/qtplasmac-materials.1:42
#: man/man1/qtplasmac-plasmac2qt.1:40 man/man1/qtplasmac-setup.1:41
#: man/man1/thermistor.1:64 man/man1/vfdb_vfd.1:261 man/man1/vfs11_vfd.1:226
#: man/man1/wj200_vfd.1:53 man/man9/abs.9:39 man/man9/abs_s32.9:39
#: man/man9/and2.9:55 man/man9/axistest.9:81 man/man9/bin2gray.9:33
#: man/man9/biquad.9:71 man/man9/bitslice.9:35 man/man9/bitwise.9:48
#: man/man9/bldc.9:466 man/man9/blend.9:40 man/man9/carousel.9:223
#: man/man9/charge_pump.9:45 man/man9/clarke2.9:56 man/man9/clarke3.9:60
#: man/man9/clarkeinv.9:56 man/man9/comp.9:46 man/man9/constant.9:29
#: man/man9/conv_bit_float.9:30 man/man9/conv_bit_s32.9:30
#: man/man9/conv_bit_u32.9:30 man/man9/conv_float_s32.9:39
#: man/man9/conv_float_u32.9:39 man/man9/conv_s32_bit.9:39
#: man/man9/conv_s32_float.9:30 man/man9/conv_s32_u32.9:39
#: man/man9/conv_u32_bit.9:39 man/man9/conv_u32_float.9:30
#: man/man9/conv_u32_s32.9:39 man/man9/corexy_by_hal.9:82 man/man9/dbounce.9:40
#: man/man9/ddt.9:47 man/man9/deadzone.9:37 man/man9/demux.9:47
#: man/man9/differential.9:48 man/man9/edge.9:50
#: man/man9/eoffset_per_angle.9:136 man/man9/estop_latch.9:112
#: man/man9/feedcomp.9:43 man/man9/filter_kalman.9:72 man/man9/flipflop.9:42
#: man/man9/gantry.9:76 man/man9/gearchange.9:64 man/man9/gray2bin.9:33
#: man/man9/hal_bb_gpio.9:69 man/man9/histobins.9:144 man/man9/hm2_7i43.9:87
#: man/man9/hm2_7i90.9:74 man/man9/hm2_eth.9:211 man/man9/hm2_pci.9:32
#: man/man9/hm2_rpspi.9:202 man/man9/hm2_spi.9:79 man/man9/hostmot2.9:1799
#: man/man9/hypot.9:39 man/man9/ilowpass.9:59 man/man9/integ.9:44
#: man/man9/invert.9:35 man/man9/joyhandle.9:70 man/man9/knob2float.9:43
#: man/man9/latencybins.9:104 man/man9/lcd.9:165 man/man9/limit1.9:38
#: man/man9/limit2.9:45 man/man9/limit3.9:62 man/man9/lincurve.9:65
#: man/man9/logic.9:121 man/man9/lowpass.9:71 man/man9/lut5.9:187
#: man/man9/maj3.9:41 man/man9/match8.9:94 man/man9/max31855.9:75
#: man/man9/mesa_7i65.9:57 man/man9/mesa_pktgyro_test.9:63
#: man/man9/message.9:61 man/man9/millturn.9:51 man/man9/minmax.9:37
#: man/man9/moveoff.9:202 man/man9/mult2.9:35 man/man9/multiclick.9:95
#: man/man9/multiswitch.9:47 man/man9/mux16.9:78 man/man9/mux2.9:37
#: man/man9/mux4.9:64 man/man9/mux8.9:96 man/man9/mux_generic.9:86
#: man/man9/near.9:46 man/man9/not.9:39 man/man9/offset.9:42
#: man/man9/ohmic.9:123 man/man9/oneshot.9:60 man/man9/or2.9:50
#: man/man9/orient.9:94 man/man9/plasmac.9:576 man/man9/sample_hold.9:34
#: man/man9/scale.9:39 man/man9/select8.9:33 man/man9/serport.9:86
#: man/man9/setsserial.9:105 man/man9/sim_axis_hardware.9:514
#: man/man9/sim_home_switch.9:51 man/man9/sim_matrix_kb.9:51
#: man/man9/sim_parport.9:408 man/man9/simple_tp.9:44 man/man9/sim_spindle.9:41
#: man/man9/sphereprobe.9:51 man/man9/spindle.9:151
#: man/man9/spindle_monitor.9:48 man/man9/steptest.9:84 man/man9/sum2.9:49
#: man/man9/thc.9:132 man/man9/thcud.9:129 man/man9/threadtest.9:29
#: man/man9/time.9:124 man/man9/timedelay.9:43 man/man9/timedelta.9:51
#: man/man9/toggle2nist.9:66 man/man9/toggle.9:45 man/man9/tristate_bit.9:33
#: man/man9/tristate_float.9:33 man/man9/updown.9:49 man/man9/userkins.9:82
#: man/man9/watchdog.9:48 man/man9/wcomp.9:45 man/man9/xhc_hb04_util.9:136
#: man/man9/xor2.9:54
#, no-wrap
msgid "LICENSE"
msgstr ""

#. type: Plain text
#: src/man/man1/sendkeys.1.adoc:139
msgid "GPL-2.0+"
msgstr ""

#. type: Title =
#: src/man/man1/svd-ps_vfd.1.adoc:1
#, no-wrap
msgid "svd-ps_vfd(1)"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:7
msgid "svd-ps_vfd - HAL userspace component for SVD-P(S) VFDs"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:12
#, no-wrap
msgid "*svd-ps_vfd* [_OPTIONS_]\n"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:17
msgid ""
"The svd-ps_vfd component interfaces a Soyan Power SVD-P(S) VFD to the "
"LinuxCNC HAL.  The VFD is connected via RS-485 to the LinuxCNC computer."
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:19
msgid "The SVD-P(S) VFDs are also sold under the LAPOND brand."
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:24
msgid ""
"The SVD-P(S) VFDs do not come with a Modbus daughterboard by default, it "
"needs to be purchased separately."
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:29
msgid ""
"The sad-ps_vfd component uses standard Modbus protocol communication which "
"requires that one parameter be changed from the default settings:"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:31
msgid "PD-05 = 1 (Standard Modbus protocol)"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:34
msgid ""
"The following settings have been tested successfully and are the default per "
"Soyans documentation:"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:36
msgid "PD-00 = 6005 (9600 baud)"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:38
msgid "PD-01 = 0 (8N2)"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:40
msgid "PD-02 = 1 (Slave address)"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:42
msgid "PD-03 = 2 (Response delay)"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:44
msgid "PD-04 = 0 (Communication timeout)"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:46
msgid "PD-06 = 0 (Current resolution)"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:64
msgid ""
"(default 9600) For Modbus communication.  Set baud rate to _N_.  It is an "
"error if the rate is not one of the following: 1200, 2400, 4800, 9600, "
"19200, 38400"
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:69
msgid "(default 2) For Modbus communication.  Set serial stop bits to 1 or 2."
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:88
msgid "The motor's max speed in RPM."
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:92
msgid "This is the maximum output frequency of the VFD in Hz."
msgstr ""

#. type: Plain text
#: src/man/man1/svd-ps_vfd.1.adoc:96
msgid "This is the minimum output frequency of the VFD in Hz."
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:100
#, no-wrap
msgid "*svd-ps_vfd.period* (float, in)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:107
#, no-wrap
msgid "*svd-ps_vfd.speed-cmd* (float, in)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:111
#, no-wrap
msgid "*svd-ps_vfd.speed-fb* (float, out)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:115
#, no-wrap
msgid "*svd-ps_vfd.at-speed* (bit, out)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:120
#, no-wrap
msgid "*svd-ps_vfd.freq-cmd* (float, out)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:125
#, no-wrap
msgid "*svd-ps_vfd.freq-fb* (float, out)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:130
#, no-wrap
msgid "*svd-ps_vfd.spindle-on* (bit, in)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:136
#, no-wrap
msgid "*svd-ps_vfd.output-voltage* (float, out)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:141
#, no-wrap
msgid "*svd-ps_vfd.output-current* (float, out)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:146
#, no-wrap
msgid "*hsvd-ps_vfd.output-power* (float, out)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:151
#, no-wrap
msgid "*svd-ps_vfd.dc-bus-voltage* (float, out)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:155
#, no-wrap
msgid "*svd-ps_vfd.modbus-errors* (u32, out)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:162
#, no-wrap
msgid "*svd-ps_vfd.input-terminal* (float, out)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:166
#, no-wrap
msgid "*svd-ps_vfd.AI1* (float, out)"
msgstr ""

#. type: Labeled list
#: src/man/man1/svd-ps_vfd.1.adoc:170
#, no-wrap
msgid "*svd-ps_vfd.AI2* (float, out)"
msgstr ""

#. type: Title =
#: src/man/man1/xhc-whb04b-6.1.adoc:1
#, no-wrap
msgid "xhc-whb04b-6(1)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:5
msgid ""
"xhc-whb04b-6 - Userspace jog dial HAL component for the wireless XHC "
"WHB04B-6 USB device."
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:8
msgid "xhc-whb04b-6 [-h] | [-H] [OPTIONS]"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:13
msgid ""
"The xhc-whb04b-6 HAL component supports the XHC WHB04B-6, a 6-axis wireless "
"USB pendant.  It provides a number of push-buttons, a jogwheel, two rotary "
"buttons for axis and speed / step selection and an ordinary LCD display."
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:16
msgid ""
"The LCD display, having a very simple firmware interface, indicates the "
"following listed information only.  No other information, such as custom "
"data, can be printed."
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:26
#, no-wrap
msgid ""
"Activated axis (X, Y, Z, A, B or C).\n"
"Current axis position of X, Y, Z and separately of A, B, C.\n"
"Whether machine (X, Y, Z, A, B or C) or relative (X1, Y1, Z1, A1, B1 or C1) coordinates are displayed.\n"
"Step size or velocity depending on the operating mode (MPG or Step or Continuous).\n"
"Feedrate override Spindle Feedrate override Machine state such as reset.\n"
"Battery level\n"
"Wireless signal strength"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:31
msgid ""
"The pendant display, its rotary selector switch, and the component pin names "
"use designators x,y,z,a,b and c.  While this arrangement presumes a machine "
"configured as X, Y, Z, A, B an C, the pins can be assigned independently as "
"required in a HAL configuration."
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:36
#, no-wrap
msgid ""
"*-h, --help*\n"
"Prints the synopsis and the most commonly used commands.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:41
#, no-wrap
msgid ""
"*-H*\n"
"Run xhc-whb04b-6 in HAL-mode instead of interactive mode.\n"
"When in HAL mode commands from device will be exposed to HAL's shred memory.\n"
"Interactive mode is useful for testing device connectivity and debugging.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:45
#, no-wrap
msgid ""
"*-s*\n"
"Lead + jogwheel changes the spindle override speed.\n"
"Each tick will increase/decrease the spindle override.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:49
#, no-wrap
msgid ""
"*-f*\n"
"MPG + jogwheel changes the feed override.\n"
"Each tick will increment/decrement the feed override.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:52
#, no-wrap
msgid ""
"*-B*\n"
"Add 5&thinsp;mm and 10&thinsp;mm to Step feedrate output\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:56
#, no-wrap
msgid ""
"*-t*\n"
"Wait with timeout for USB device then proceed, exit otherwise.\n"
"Without -t the timeout is implicitly infinite.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:60
#, no-wrap
msgid ""
"*-u, -U*\n"
"Show received data from device.\n"
"With -U received and transmitted data will be printed. Output is prefixed with \"usb\".\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:63
#, no-wrap
msgid ""
"*-p*\n"
"Show HAL pins and HAL related messages. Output is prefixed with \"hal\".\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:67
#, no-wrap
msgid ""
"*-e*\n"
"Show captured events such as button pressed/released, jog dial, axis rotary button, and feed rotary button event.\n"
"Output is prefixed with \"event\".\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:70
#, no-wrap
msgid ""
"*-a*\n"
"Enable all logging facilities without explicitly specifying each.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:74
#, no-wrap
msgid ""
"*-c*\n"
"Enable checksum output which is necessary for debugging the checksum generator function.\n"
"Do not rely on this feature since it will be removed once the generator is implemented.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:78
#, no-wrap
msgid ""
"*-n*\n"
"Force being silent and not printing any output except of errors.\n"
"This will also inhibit messages prefixed with \"init\".\n"
msgstr ""

#. type: SH
#: src/man/man1/xhc-whb04b-6.1.adoc:80 man/man1/shuttle.1:31
#: man/man1/xhc-hb04.1:28
#, no-wrap
msgid "UDEV"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:87
#, no-wrap
msgid ""
"The xhc-whb04b-6 executable needs permission for reading the pendant's USB device. There may be the need for additional udev rules. If so, this file\n"
"`/etc/udev/rules.d/99-xhc-whb04b-6.rules`\n"
"should be created with the single line\n"
"`ATTR{idProduct}==\"eb93\", ATTR{idVendor}==\"10ce\", MODE=\"0666\", OWNER=\"root\", GROUP=\"plugdev\"`."
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:91
msgid ""
"The xhc-whb04b-6 program can be run from the command line without LinuxCNC "
"to test a pendant.  This standalone mode is used to identify the button "
"codes produced for each button press and debug transmitted USB data."
msgstr ""

#. type: SH
#: src/man/man1/xhc-whb04b-6.1.adoc:92 man/man1/halmeter.1:71
#: man/man9/eoffset_per_angle.9:101 man/man9/logic.9:80 man/man9/moveoff.9:184
#: man/man9/ohmic.9:87
#, no-wrap
msgid "EXAMPLES"
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:94
#, no-wrap
msgid "*xhc-whb04b-6 -ue*"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:96
msgid ""
"Start in userspace mode (simulation) and prints incoming USB data transfer "
"and generated key pressed/released events."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:96
#, no-wrap
msgid "*xhc-whb04b-6 -p*"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:98
msgid ""
"Start in userspace mode (simulation) and prints HAL pin names and events "
"distributed to HAL memory."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:98
#, no-wrap
msgid "*xhc-whb04b-6 -H*"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:100
msgid "Start in HAL mode (Normal mode for real machine use)."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:100
#, no-wrap
msgid "*xhc-whb04b-6 -HsfB*"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:102
msgid ""
"Start in HAL mode + Spindle Override + Feedrate Override + Big step "
"5/10&thinsp;mm)."
msgstr ""

#. type: Title ==
#: src/man/man1/xhc-whb04b-6.1.adoc:104
#, no-wrap
msgid "Hal Usage"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:107
#, no-wrap
msgid ""
"Use the -H option to specify HAL mode and other options as required:\n"
"*loadusr -W xhc-whb04b-6 -HsfB*"
msgstr ""

#. type: Title ===
#: src/man/man1/xhc-whb04b-6.1.adoc:108
#, no-wrap
msgid "Input/Output Signals"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:115
#, no-wrap
msgid ""
"*Note:* For each button an output pin is provided even if no functionality is realized with that signal.\n"
"For example, to stop a running program the Stop button pin may be directly connected to halui.program.stop.\n"
"However, to start/pause/resume a program, the corresponding button toggles besides whb.button.start-pause\n"
"also the whb.halui.program.{run,pause,resume} signals accordingly. +\n"
"*Note:* The Spindle+/Spindle- buttons do manipulate the spindle override.\n"
"The spindle speed is set with the respective combos Fn + Spindle- and FN + Spindle+.\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:117
msgid ""
"The following tables list all in-/output pins and state which signals they "
"are meant to be connected to. +"
msgstr ""

#. type: Title ====
#: src/man/man1/xhc-whb04b-6.1.adoc:118
#, no-wrap
msgid "Axis and Stepgen"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:121
msgid "Signals utilized for moving axis."
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:123
#, no-wrap
msgid "*_<N>_*  ... denotes the axis number, which is of {x, y, z, a, b, c}\n"
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:124
#, no-wrap
msgid "*whb.halui.home-all* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:127
msgid ""
"connect to *halui.home-all*, driven by M-Home Pin for requesting all axis to "
"home. See also *whb.button.m-home*."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:127
#, no-wrap
msgid "*whb.halui.axis._<N>_.select* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:129
msgid "connect to *halui.axis._<N>_.select* Pin to select axis."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:129
#, no-wrap
msgid "*whb.axis._<N>_.jog-counts* (s32,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:131
msgid "connect to *axis._<N>_.jog-counts* The count pin of the jogwheel."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:131
#, no-wrap
msgid "*whb.axis._<N>_.jog-enable* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:135
msgid ""
"connect to *axis._<N>_.jog-enable* If true (and in manual mode), any change "
"to \"jog-counts\" will result in motion. If false, \"jog-counts\" is ignored."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:135
#, no-wrap
msgid "*whb.axis._<N>_.jog-scale* (float,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:138
msgid ""
"connect to *axis._<N>_.jog-scale* The distance to move for each count on "
"\"jog-counts\", in machine units."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:138
#, no-wrap
msgid "*whb.axis._<N>_.jog-vel-mode* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:141
msgid ""
"connect to *axis._<N>_.jog-jog-vel-mode* If false the jogwheel operates in "
"position mode. The axis will move exactly jog-scale units for each count, "
"regardless of how long that might take. If true, the jogwheel operates in "
"velocity mode - motion stops when the wheel stops, even if that means the "
"commanded motion is not completed."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:141
#, no-wrap
msgid "*whb.halui.max-velocity.value* (float,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:144
msgid ""
"connect to *halui.max-velocity.value* The maximum allowable velocity, in "
"units per second (_<N>_ is two digit '0'-padded)."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:144
#, no-wrap
msgid "*whb.halui.feed-override.scale* (float,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:147
msgid ""
"connect to *halui.feed-override.scale* The scaling for feed override value."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:147
#, no-wrap
msgid "*whb.halui.axis._<N>_.pos-feedback* (float,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:150
msgid ""
"connect to *halui.axis._<N>_.pos-feedback* Feedback axis position in machine "
"coordinates to be displayed."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:150
#, no-wrap
msgid "*whb.halui.axis._<N>_.pos-relative* (float,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:153
msgid ""
"connect to *halui.axis._<N>_.pos-relative* Commanded axis position in "
"relative coordinates to be displayed."
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:157
msgid "Signals utilized for toggling machine status."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:158
#, no-wrap
msgid "*whb.halui.machine.on* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:160
msgid "connect to *halui.machine.on* Pin for requesting machine on."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:160
#, no-wrap
msgid "*whb.halui.machine.is-on* (bit,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:162
msgid "connect to *halui.machine.is-on* Pin that indicates machine is on."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:162
#, no-wrap
msgid "*whb.halui.machine.off* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:164
msgid "connect to *halui.machine.off* Pin for requesting machine off."
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:168
msgid "Signals utilized for operating a spindle."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:169
#, no-wrap
msgid "*whb.halui.spindle.start* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:171
msgid "connect to *halui.spindle.0.start* Pin to start the spindle."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:171
#, no-wrap
msgid "*whb.halui.spindle.is-on* (bit,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:174
msgid ""
"connect to *halui.spindle.0.on* Pin to indicate spindle is on (either "
"direction)."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:174
#, no-wrap
msgid "*whb.halui.spindle.stop* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:176
msgid "connect to *halui.spindle.0.stop* Pin to stop the spindle."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:176
#, no-wrap
msgid "*whb.halui.spindle.forward* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:178
msgid ""
"connect to *halui.spindle.0.forward* Pin to make the spindle go forward."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:178
#, no-wrap
msgid "*whb.halui.spindle.reverse* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:180
msgid ""
"connect to *halui.spindle.0.reverse* Pin to make the spindle go reverse."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:180
#, no-wrap
msgid "*whb.halui.spindle.decrease* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:182
msgid ""
"connect to *halui.spindle.0.decrease* Pin to decrease the spindle speed."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:182
#, no-wrap
msgid "*whb.halui.spindle.increase* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:184
msgid ""
"connect to *halui.spindle.0.increase* Pin to increase the spindle speed."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:184
#, no-wrap
msgid "*whb.halui.spindle-override.increase* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:187
msgid ""
"connect to *halui.spindle.0.override.increase* Pin for increasing the "
"spindle override by the amount of scale."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:187
#, no-wrap
msgid "*whb.halui.spindle-override.decrease* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:190
msgid ""
"connect to *halui.spindle.0.override.decrease* Pin for decreasing the "
"spindle override by the amount of scale."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:190
#, no-wrap
msgid "*whb.halui.spindle-override.value* (float,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:193
msgid ""
"connect to *halui.spindle.0.override.value* The current spindle override "
"value."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:193
#, no-wrap
msgid "*whb.halui.spindle-override.scale* (float,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:196
msgid ""
"connect to *halui.spindle.0.override.scale* The current spindle scaling "
"override value."
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:212
#, no-wrap
msgid ""
"Signals utilized for operating spindle and feed override. The feed rotary button can serve in Continuous move x% from max velocity Step move x mm Mpg override feed/spindle the special position Lead.\n"
"*Continuous:* In this mode jogging is performed at the selected feed rate. As long the jogwheel turns, the selected axis moves.\n"
"*Step:* In this mode the machine moves steps * wheel_counts at the currently selected step size and the current set feed rate in machine units. If the commanded position is not reached the machine keeps moving even the jogwheel is not turning.\n"
"*Lead:* Manipulates the spindle override.+\n"
"*Mpg:* Manipulates the feedrate override.+"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:217
#, no-wrap
msgid ""
"*Note:* As a consequence of 3 modes from manufacturer, switching the feed rotary button back from Lead revert to Mpg mode,\n"
" Mpg mode is default mode at startup.\n"
"Depending on the mode before turning the rotary button, the feed override results in different values.\n"
"In MPG/CON the feed rate will change to 100%, 60%, ... and so forth. In Step mode the feed rate is mm.\n"
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:218
#, no-wrap
msgid "*whb.halui.feed-override.value* (float,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:220
msgid "connect to *halui.feed-override.value* The current feed override value."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:220
#, no-wrap
msgid "*whb.halui.feed-override.decrease* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:223
msgid ""
"connect to *halui.feed-override.decrease* Pin for decreasing the feed "
"override by amount of scale."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:223
#, no-wrap
msgid "*whb.halui.feed-override.increase* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:226
msgid ""
"connect to *halui.feed-override.increase* Pin for increasing the feed "
"override by amount of scale."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:226
#, no-wrap
msgid "*whb.halui.feed-override.scale* (float,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:229
msgid ""
"connect to *halui.feed-override.scale* Pin for setting the scale on changing "
"the feed override."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:229
#, no-wrap
msgid "*whb.halui.max-velocity.value* (float,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:231
msgid "connect to *halui.max-velocity.value*"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:236
msgid "Signals for operating program and MDI mode."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:237
#, no-wrap
msgid "*whb.halui.program.run* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:239
msgid "connect to *halui.program.run* in for running a program."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:239
#, no-wrap
msgid "*whb.halui.program.is-running* (bit,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:241
msgid ""
"connect to *halui.program.is-running* in indicating a program is running."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:241
#, no-wrap
msgid "*whb.halui.program.pause* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:243
msgid "connect to *halui.program.pause* Pin for pausing a program."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:243
#, no-wrap
msgid "*whb.halui.program.is-paused* (bit,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:245
msgid ""
"connect to *halui.program.is-paused* Pin indicating a program is pausing."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:245
#, no-wrap
msgid "*whb.halui.program.resume* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:247
msgid "connect to *halui.program.resume* Pin for resuming a program."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:247
#, no-wrap
msgid "*whb.halui.program.stop* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:249
msgid "connect to *program.stop* Pin for stopping a program."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:249
#, no-wrap
msgid "*whb.halui.program.is-idle* (bit,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:251
msgid ""
"connect to *halui.program.is-idle* Pin indicating no program is running."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:251
#, no-wrap
msgid "*whb.halui.mode.auto* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:253
msgid "connect to *halui.mode.auto* Pin for requesting auto mode."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:253
#, no-wrap
msgid "*whb.halui.mode.is-auto* (bit,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:255
msgid "connect to *halui.mode.is-auto* Pin for indicating auto mode is on."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:255
#, no-wrap
msgid "*whb.halui.mode.joint* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:257
msgid "connect to *halui.mode.joint* Pin for requesting joint by joint mode."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:257
#, no-wrap
msgid "*whb.halui.mode.is-joint* (bit,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:259
msgid ""
"connect to *halui.mode.is-joint* Pin indicating joint by joint mode is on."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:259
#, no-wrap
msgid "*whb.halui.mode.manual* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:261
msgid "connect to *halui.mode.manual* Pin for requesting manual mode."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:261
#, no-wrap
msgid "*whb.halui.mode.is-manual* (bit,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:263
msgid "connect to *halui.mode.is-manual* Pin indicating manual mode is on."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:263
#, no-wrap
msgid "*whb.halui.mode.mdi* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:265
msgid "connect to *halui.mode.mdi* Pin for requesting MDI mode."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:265
#, no-wrap
msgid "*whb.halui.mode.is-mdi* (bit,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:267
msgid "connect to *halui.mode.is-mdi* Pin indicating MDI mode is on."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:267
#, no-wrap
msgid "*whb.halui.mode.teleop* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:269
msgid "connect to *halui.mode.teleop* + Pin for requesting axis by axis mode."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:269
#, no-wrap
msgid "*whb.halui.mode.is-teleop* (bit,in)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:271
msgid ""
"connect to *halui.mode.is-teleop* Pin indicating axis by axis mode is on."
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:280
msgid ""
"For flexibility reasons each button provides an output pin even if no "
"functionality is realized directly with that signal.  The Fn button can be "
"combined with each other push-button.  This includes also RESET, Stop, Start/"
"Pause, Macro-10, and Step|Continuous.  By default the more frequent used "
"orange buttons are executed, whereas blue ones (whb.button.macro-<M>) by "
"combining them with Fn (press Fn first then button)."
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:283
msgid ""
"Button macro needs to be added to your ini and needs to be edited for your "
"own use :"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:303
#, no-wrap
msgid ""
"[HALUI]\n"
"MDI_COMMAND=(debug,macro0)  # this one is for numbering but not used by pendant (need 1 to 16)\n"
"MDI_COMMAND=(debug,macro1)\n"
"MDI_COMMAND=(debug,macro2)\n"
"MDI_COMMAND=(debug,macro3)\n"
"MDI_COMMAND=(debug,macro4)\n"
"MDI_COMMAND=(debug,macro5)\n"
"MDI_COMMAND=(debug,macro6)\n"
"MDI_COMMAND=(debug,macro7)\n"
"MDI_COMMAND=(debug,macro8)\n"
"MDI_COMMAND=(debug,macro9)\n"
"MDI_COMMAND=(debug,macro10)\n"
"MDI_COMMAND=(debug,macro11)\n"
"MDI_COMMAND=(debug,macro12)\n"
"MDI_COMMAND=(debug,macro13)\n"
"MDI_COMMAND=(debug,macro14)\n"
"MDI_COMMAND=(debug,macro15)\n"
"MDI_COMMAND=(debug,macro16)\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:306
#, no-wrap
msgid "*<M>* ... denotes an arbitrary macro number which is of {1, 2, ..., 16}\n"
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:307
#, no-wrap
msgid "*whb.button.reset* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:310
msgid ""
"see *whb.halui.estop.{activate, reset}* True one Reset button down, false "
"otherwise. For toggling E-stop use whb.halui.estop .active and .reset."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:310
#, no-wrap
msgid "*whb.button.stop* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:313
msgid ""
"see *whb.halui.program.stop* True on Stop button down, false otherwise.  For "
"stopping a program use whb.halui.program.stop."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:313
#, no-wrap
msgid "*whb.button.start-pause* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:317
msgid ""
"see *whb.halui.program.{run, pause, resume}* True on Start-Pause button "
"down, false otherwise.For toggling start-pause use whb.halui.program .run, ."
"pause, and .resume."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:317
#, no-wrap
msgid "*whb.button.feed-plus* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:319
msgid "True on Feed+ button down, false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:319
#, no-wrap
msgid "*whb.button.feed-minus* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:321
msgid "True on Feed- button down, false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:321
#, no-wrap
msgid "*whb.button.spindle-plus* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:326
msgid ""
"see *halui.spindle.0.override.increase* True on Spindle+ button down, false "
"otherwise. This button is meant to manipulate the spindle override. For "
"increasing the spindle override use *halui.spindle.0.override.increase*"
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:326
#, no-wrap
msgid "*whb.button.spindle-minus* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:331
msgid ""
"see *halui.spindle.0.override.decrease* True on Spindle- button down, false "
"otherwise. This button is meant to manipulate the spindle override.For "
"decreasing the spindle override use *halui.spindle.0.override.decrease*"
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:331
#, no-wrap
msgid "*whb.button.m-home* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:334
msgid ""
"connect to *halui.home-all* True on M-Home button down, false otherwise.  "
"Requests MDI mode before button pin is set. See also *whb.halui.mode.mdi*."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:334
#, no-wrap
msgid "*whb.button.safe-z* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:338
msgid ""
"connect to *halui.mdi-command-*<M> True on Safe-Z button down, false "
"otherwise. Requests MDI mode before button pin is set. See also *whb.halui."
"mode.mdi*."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:338
#, no-wrap
msgid "*whb.button.w-home* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:342
msgid ""
"connect to *halui.mdi-command-*<M> True on W-Home button down, false "
"otherwise. Requests MDI mode before button pin is set. See also *whb.halui."
"mode.mdi*."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:342
#, no-wrap
msgid "*whb.button.s-on-off* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:346
msgid ""
"see *whb.halui.spindle.{start, stop}* True on S-ON/OFF button down, false "
"otherwise.For toggling spindle on-off use halui.spindle.0.start.  For "
"toggling spindle on-off use halui.spindle.0.stop."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:346
#, no-wrap
msgid "*whb.button.fn* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:348
msgid "True on Fn button down, false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:348
#, no-wrap
msgid "*whb.button.probe-z* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:352
msgid ""
"connect to *halui.mdi-command-*<M> True on Probe-Z button down, false "
"otherwise.Requests MDI mode before button pin is set. See also *whb.halui."
"mode.mdi*."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:352
#, no-wrap
msgid "*whb.button.macro-1* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:355
msgid ""
"connect to *halui.mdi-command-*<M> True on Macro-1 button (Fn + Feed+)  "
"down, false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:355
#, no-wrap
msgid "*whb.button.macro-2* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:358
msgid ""
"connect to *halui.mdi-command-*<M> True on Macro-2 button (Fn + Feed-)  "
"down, false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:358
#, no-wrap
msgid "*whb.button.macro-3* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:362
msgid ""
"see *whb.halui.spindle.increase* True on Macro-3 button (Fn + Spindle+)  "
"down, false otherwise. This button is meant to manipulate the spindle speed. "
"For decreasing the spindle speed use whb.halui.spindle.increase."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:362
#, no-wrap
msgid "*whb.button.macro-4* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:367
msgid ""
"see *whb.halui.spindle.decrease* True on Macro-4 button down (Fn + "
"Spindle-), false otherwise This button is meant to manipulate the spindle "
"speed. For decreasing the spindle speed use *whb.halui.spindle.decrease*"
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:367
#, no-wrap
msgid "*whb.button.macro-5* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:370
msgid ""
"connect to *halui.mdi-command-*<M> True on Macro-5 button down (Fn + M-"
"HOME), false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:370
#, no-wrap
msgid "*whb.button.macro-6* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:373
msgid ""
"connect to *halui.mdi-command-*<M> True on Macro-6 button down (Fn + Safe-"
"Z), false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:373
#, no-wrap
msgid "*whb.button.macro-7* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:376
msgid ""
"connect to *halui.mdi-command-*<M> True on Macro-7 button down (Fn + W-"
"HOME), false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:376
#, no-wrap
msgid "*whb.button.macro-8* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:379
msgid ""
"reserved for Spindle Direction True on Macro-8 button down (Fn + S-ON/OFF), "
"false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:379
#, no-wrap
msgid "*whb.button.macro-9* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:382
msgid ""
"connect to *halui.mdi-command-*<M> True on Macro-9 button down (Fn + Probe-"
"Z), false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:382
#, no-wrap
msgid "*whb.button.macro-10* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:387
msgid ""
"reserved for toggle DRO Abs/rel. True on Macro-10 button down, false "
"otherwise. Switches the display coordinates to relative coordinates.On "
"display the axis are denoted then as X1, Y1, Z1, A1, B1 and C1.  See also "
"*whb.halui.axis._<N>_.pos-relative*."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:387
#, no-wrap
msgid "*whb.button.macro-11* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:390
msgid ""
"connect to *halui.mdi-command-*<M> True on Macro-11 button down (Fn + "
"RESET), false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:390
#, no-wrap
msgid "*whb.button.macro-12* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:393
msgid ""
"connect to *halui.mdi-command-*<M> True on Macro-12 button (Fn + Stop) down, "
"false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:393
#, no-wrap
msgid "*whb.button.macro-13* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:396
#, no-wrap
msgid ""
"connect to *halui.mdi-command-*<M> rue on Macro-13 button (Fn\n"
"Start/Pause) down, false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:396
#, no-wrap
msgid "*whb.button.macro-14* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:399
msgid ""
"connect to *halui.mdi-command-*<M> True on Macro-14 button (Fn + Macro-10) "
"down, false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:399
#, no-wrap
msgid "*whb.button.macro-15* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:402
msgid ""
"connect to *halui.mdi-command-*<M> True on Macro-15 button down (Fn + MPG), "
"false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:402
#, no-wrap
msgid "*whb.button.macro-16* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:405
msgid ""
"connect to *halui.mdi-command-*<M> True on Macro-16 button (Fn + Step)  "
"down, false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:405
#, no-wrap
msgid "*whb.button.mode-continuous* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:407
msgid "True on Continuous mode button down, false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:407
#, no-wrap
msgid "*whb.button.mode-step* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:409
msgid "True on Step mode button down, false otherwise."
msgstr ""

#. type: Title ====
#: src/man/man1/xhc-whb04b-6.1.adoc:411
#, no-wrap
msgid "Pendant"
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:413
#, no-wrap
msgid "*whb.pendant.is-sleeping* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:416
msgid ""
"True as long pendant is in sleep mode (usually a few seconds after turned "
"off), false otherwise."
msgstr ""

#. type: Labeled list
#: src/man/man1/xhc-whb04b-6.1.adoc:416
#, no-wrap
msgid "*whb.pendant.is-connected* (bit,out)"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:418
msgid "True as long pendant is not in sleep mode (turned on), false otherwise."
msgstr ""

#. type: Title ==
#: src/man/man1/xhc-whb04b-6.1.adoc:419
#, no-wrap
msgid "HAL Configuration Example"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:425
msgid ""
"Exercise caution if using copy and paste of this example code from the "
"online web docs. Certain characters are incompatibly encoded by the web site "
"(minus becomes em-dash). It is safer to copy and paste from https://raw."
"githubusercontent.com/LinuxCNC/linuxcnc/2.8/src/hal/user_comps/xhc-whb04b-6/"
"example-configuration.md[]."
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:433
#, no-wrap
msgid ""
"#\n"
"### Hal File xhc_whb04b_6.hal Example\n"
"#\n"
"# ######################################################################\n"
"# load pendant components\n"
"# ######################################################################\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:435
#, no-wrap
msgid "loadusr -W xhc-whb04b-6 -HsfB\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:439
#, no-wrap
msgid ""
"# ######################################################################\n"
"# pendant signal configuration\n"
"# ######################################################################\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:444
#, no-wrap
msgid ""
"# On/Off signals\n"
"net machine.is-on                         halui.machine.is-on                   whb.halui.machine.is-on\n"
"net pdnt.machine.on                       whb.halui.machine.on                  halui.machine.on\n"
"net pdnt.machine.off                      whb.halui.machine.off                 halui.machine.off\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:453
#, no-wrap
msgid ""
"# program related signals\n"
"net pdnt.program.is-idle                  whb.halui.program.is-idle             halui.program.is-idle\n"
"net pdnt.program.is-paused                whb.halui.program.is-paused           halui.program.is-paused\n"
"net pdnt.program-is-running               whb.halui.program.is-running          halui.program.is-running\n"
"net pdnt.program.resume                   whb.halui.program.resume              halui.program.resume\n"
"net pdnt.program.pause                    whb.halui.program.pause               halui.program.pause\n"
"net pdnt.program.run                      whb.halui.program.run                 halui.program.run\n"
"net pdnt.program.stop                     whb.halui.program.stop                halui.program.stop\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:465
#, no-wrap
msgid ""
"# machine mode related signals\n"
"net pdnt.mode.auto                        whb.halui.mode.auto                   halui.mode.auto\n"
"net pdnt.mode.manual                      whb.halui.mode.manual                 halui.mode.manual\n"
"net pdnt.mode.mdi                         whb.halui.mode.mdi                    halui.mode.mdi\n"
"net pdnt.mode.joint                       whb.halui.mode.joint                  halui.mode.joint\n"
"net pdnt.mode.teleop                      whb.halui.mode.teleop                 halui.mode.teleop\n"
"net pdnt.mode.is-auto                     halui.mode.is-auto                    whb.halui.mode.is-auto\n"
"net pdnt.mode.is-manual                   halui.mode.is-manual                  whb.halui.mode.is-manual\n"
"net pdnt.mode.is-mdi                      halui.mode.is-mdi                     whb.halui.mode.is-mdi\n"
"net pdnt.mode.is-joint                    halui.mode.is-joint                   whb.halui.mode.is-joint\n"
"net pdnt.mode.is-teleop                   halui.mode.is-teleop                  whb.halui.mode.is-teleop\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:470
#, no-wrap
msgid ""
"# \"is-homed\" axis signal for allowing pendant when machine is not homed\n"
"net pdnt.axis.X.is-homed                  halui.joint.0.is-homed                whb.halui.joint.x.is-homed\n"
"net pdnt.axis.Y.is-homed                  halui.joint.1.is-homed                whb.halui.joint.y.is-homed\n"
"net pdnt.axis.Z.is-homed                  halui.joint.2.is-homed                whb.halui.joint.z.is-homed\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:475
#, no-wrap
msgid ""
"# \"selected axis\" signals\n"
"net pdnt.axis.X.select                    whb.halui.axis.x.select               halui.axis.x.select\n"
"net pdnt.axis.y.select                    whb.halui.axis.y.select               halui.axis.y.select\n"
"net pdnt.axis.Z.select                    whb.halui.axis.z.select               halui.axis.z.select\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:479
#, no-wrap
msgid ""
"net pdnt.axis.x.jog-scale                 whb.axis.x.jog-scale                  axis.x.jog-scale\n"
"net pdnt.axis.y.jog-scale                 whb.axis.y.jog-scale                  axis.y.jog-scale\n"
"net pdnt.axis.z.jog-scale                 whb.axis.z.jog-scale                  axis.z.jog-scale\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:483
#, no-wrap
msgid ""
"net pdnt.axis.x.jog-counts                whb.axis.x.jog-counts                 axis.x.jog-counts\n"
"net pdnt.axis.y.jog-counts                whb.axis.y.jog-counts                 axis.y.jog-counts\n"
"net pdnt.axis.z.jog-counts                whb.axis.z.jog-counts                 axis.z.jog-counts\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:487
#, no-wrap
msgid ""
"net pdnt.axis.x.jog-enable                whb.axis.x.jog-enable                 axis.x.jog-enable\n"
"net pdnt.axis.y.jog-enable                whb.axis.y.jog-enable                 axis.y.jog-enable\n"
"net pdnt.axis.z.jog-enable                whb.axis.z.jog-enable                 axis.z.jog-enable\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:491
#, no-wrap
msgid ""
"net pdnt.axis.x.jog-vel-mode              whb.axis.x.jog-vel-mode               axis.x.jog-vel-mode\n"
"net pdnt.axis.y.jog-vel-mode              whb.axis.y.jog-vel-mode               axis.y.jog-vel-mode\n"
"net pdnt.axis.z.jog-vel-mode              whb.axis.z.jog-vel-mode               axis.z.jog-vel-mode\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:507
#, no-wrap
msgid ""
"# macro buttons to MDI commands\n"
"net pdnt.macro-1                          whb.button.macro-1                    halui.mdi-command-01             # use MDI command from main.ini\n"
"net pdnt.macro-2                          whb.button.macro-2                    halui.mdi-command-02             # use MDI command from main.ini or used for Hardcoded lube on/off\n"
"net pdnt.reserved.for.spindle+            whb.button.macro-3                                                     # Hardcoded for spindle+ whb.halui.spindle.increase\n"
"net pdnt.reserved.for.spindle-            whb.button.macro-4                                                     # Hardcoded for spindle- whb.halui.spindle.decrease\n"
"net pdnt.macro-5                          whb.button.macro-5                    halui.mdi-command-05             # use MDI command from main.ini\n"
"net pdnt.macro-6                          whb.button.macro-6                    halui.mdi-command-06             # use MDI command from main.ini\n"
"net pdnt.macro-7                          whb.button.macro-7                    halui.mdi-command-07             # use MDI command from main.ini\n"
"net pdnt.reserved.for.spindle.dir         whb.button.macro-8                                                     # Hardcoded for spindle direction inside pendant\n"
"net pdnt.macro-9                          whb.button.macro-9                    halui.mdi-command-09             # use MDI command from main.ini\n"
"net pdnt.reserved.for.ABS-REL             whb.button.macro-10                                                    # Hardcoded for swap Dro  Relative/Absolute\n"
"net pdnt.macro-14                         whb.button.macro-14                   halui.mdi-command-14             # use MDI command from main.ini\n"
"net pdnt.reserved.for.flood               whb.button.macro-15                                                    # Hardcoded for halui.flood on/off\n"
"net pdnt.reserved.for.mist                whb.button.macro-16                                                    # Hardcoded for halui.mist on/off\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:511
#, no-wrap
msgid ""
"net pdnt.macro.11                         whb.button.macro-11                   halui.mdi-command-11             # use MDI command from main.ini\n"
"net pdnt.macro.12                         whb.button.macro-12                   halui.mdi-command-12             # use MDI command from main.ini\n"
"net pdnt.macro.13                         whb.button.macro-13                   halui.mdi-command-13             # use MDI command from main.ini\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:517
#, no-wrap
msgid ""
"# flood and mist toggle signals\n"
"net  pdnt.flood.is-on                     whb.halui.flood.is-on                 halui.flood.is-on                #return signal is on or off\n"
"net  pdnt.flood.off                       whb.halui.flood.off                   halui.flood.off                  #reserved whb.button.macro-15\n"
"net  pdnt.flood.on                        whb.halui.flood.on                    halui.flood.on                   #reserved whb.button.macro-15\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:521
#, no-wrap
msgid ""
"net  pdnt.mist.is-on                      whb.halui.mist.is-on                  halui.mist.is-on                 #return signal is on or off\n"
"net  pdnt.mist.off                        whb.halui.mist.off                    halui.mist.off                   #reserved whb.button.macro-16\n"
"net  pdnt.mist.on                         whb.halui.mist.on                     halui.mist.on                    #reserved whb.button.macro-16\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:525
#, no-wrap
msgid ""
"#net  pdnt.lube.is-on                      whb.halui.lube.is-on                  halui.lube.is-on                 #return signal is on or off\n"
"#net  pdnt.lube.off                        whb.halui.lube.off                    halui.lube.off                   #reserved whb.button.macro-2\n"
"#net  pdnt.lube.on                         whb.halui.lube.on                     halui.lube.on                    #reserved whb.button.macro-2\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:532
#, no-wrap
msgid ""
"# default function button signals\n"
"net pdnt.button.m-home                    whb.button.m-home                     halui.home-all                   # Homeing use built-in halui home all\n"
"net pdnt.button.safe-z                    whb.button.safe-z                     halui.mdi-command-03             # Safe-z  use MDI command from main.ini\n"
"net pdnt.button.w-home                    whb.button.w-home                     halui.mdi-command-04             # Unpark  use MDI command from main.ini\n"
"net pdnt.button.probe-z                   whb.button.probe-z                    halui.mdi-command-08             # Probe-Z use MDI command from main.ini\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:539
#, no-wrap
msgid ""
"# unused, just exposes pendant internal status or as basic button\n"
"#net pdnt.mode-lead                        whb.halui.feed.selected-lead\n"
"#net pdnt.mode-mpg-feed                    whb.halui.feed.selected-mpg-feed\n"
"#net pdnt.mode-continuous                  whb.halui.feed.selected-continuous\n"
"#net pdnt.mode-step                        whb.halui.feed.selected-step\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:551
#, no-wrap
msgid ""
"#net pdnt.button.mode-mpg                  whb.button.mode-continuous\n"
"#net pdnt.button.mode-step                 whb.button.mode-step\n"
"#net pdnt.button.fn                        whb.button.fn\n"
"#net pdnt.button.reset                     whb.button.reset\n"
"#net pdnt.button.stop                      whb.button.stop\n"
"#net pdnt.button.start-pause               whb.button.start-pause\n"
"#net pdnt.button.s-on-off                  whb.button.s-on-off\n"
"#net pdnt.button.spindle-plus              whb.button.spindle-plus\n"
"#net pdnt.button.spindle-minus             whb.button.spindle-minus\n"
"#net pdnt.button.feed-plus                 whb.button.feed-plus\n"
"#net pdnt.button.feed-minus                whb.button.feed-minus\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:562
#, no-wrap
msgid ""
"# spindle related signals\n"
"net pdnt.spindle.is-on                    whb.halui.spindle.is-on               spindle.0.on\n"
"net pdnt.spindle.start                    whb.halui.spindle.start               halui.spindle.0.start\n"
"net pdnt.spindle.stop                     whb.halui.spindle.stop                halui.spindle.0.stop\n"
"net pdnt.spindle.forward                  whb.halui.spindle.forward             halui.spindle.0.forward\n"
"net pdnt.spindle.reverse                  whb.halui.spindle.reverse             halui.spindle.0.reverse\n"
"net pdnt.spindle.increase                 whb.halui.spindle.increase            halui.spindle.0.increase         # reserved whb.button.macro-3\n"
"net pdnt.spindle.decrease                 whb.halui.spindle.decrease            halui.spindle.0.decrease         # reserved whb.button.macro-4\n"
"net pdnt.spindle-speed-abs                whb.halui.spindle-speed-cmd           spindle.0.speed-out-abs          # speed cmd from motion in rpm absolute\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:569
#, no-wrap
msgid ""
"# spindle speed override signals\n"
"net pdnt.spindle-override.scale           whb.halui.spindle-override.scale      halui.spindle.0.override.scale   # needed for both spindle+/- and spindleoverride+/- button\n"
"net pdnt.spindle.override.value           halui.spindle.0.override.value        whb.halui.spindle-override.value # GUI feed rate related signals\n"
"net pdnt.spindle.override.increase        whb.halui.spindle-override.increase   halui.spindle.0.override.increase\n"
"net pdnt.spindle.override.decrease        whb.halui.spindle-override.decrease   halui.spindle.0.override.decrease\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:574
#, no-wrap
msgid ""
"# GUI feed rate related signals can be used when program is running moving GUI slider\n"
"net pdnt.feed-override.scale              whb.halui.feed-override.scale         halui.feed-override.scale        # needed for both FeedOverride+/- and rotary knob button\n"
"net pdnt.max-velocity.value               whb.halui.max-velocity.value          halui.max-velocity.value         # needed for Mpg mode : button feed position% * max-velocity = Mpg feedrate\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:580
#, no-wrap
msgid ""
"# take feed override min/max values from/to the GUI\n"
"net pdnt.feed-override.value              halui.feed-override.value             whb.halui.feed-override.value    # GUI feed rate related signals\n"
"net pdnt.feed-override.increase           whb.halui.feed-override.increase      halui.feed-override.increase\n"
"net pdnt.feed-override.decrease           whb.halui.feed-override.decrease      halui.feed-override.decrease\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:586
#, no-wrap
msgid ""
"# axis position related signals feedback\n"
"net pdnt.axis.x.pos-feedback              halui.axis.x.pos-feedback             whb.halui.axis.x.pos-feedback\n"
"net pdnt.axis.y.pos-feedback              halui.axis.y.pos-feedback             whb.halui.axis.y.pos-feedback\n"
"net pdnt.axis.z.pos-feedback              halui.axis.z.pos-feedback             whb.halui.axis.z.pos-feedback\n"
msgstr ""

#. type: delimited block -
#: src/man/man1/xhc-whb04b-6.1.adoc:592
#, no-wrap
msgid ""
"# axis position related signals relative\n"
"net pdnt.axis.x.pos-relative              halui.axis.x.pos-relative             whb.halui.axis.x.pos-relative\n"
"net pdnt.axis.y.pos-relative              halui.axis.y.pos-relative             whb.halui.axis.y.pos-relative\n"
"net pdnt.axis.z.pos-relative              halui.axis.z.pos-relative             whb.halui.axis.z.pos-relative\n"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:598
msgid ""
"https://github.com/linuxcnc/linuxcnc/tree/master/src/hal/user_comps/xhc-"
"whb04b-6/[xhc-whb04b-6 developer documentation on GitHub]"
msgstr ""

#. type: SH
#: src/man/man1/xhc-whb04b-6.1.adoc:599 man/man1/milltask.1:101
#: man/man1/moveoff_gui.1:145 man/man3/hal_parport.3hal:57
#: man/man3/hal_type_t.3hal:47 man/man3/rtapi_bool.3rtapi:35
#: man/man3/rtapi_div_u64.3rtapi:48 man/man3/rtapi_get_time.3rtapi:49
#: man/man3/rtapi_module_param.3rtapi:56 man/man3/rtapi_outb.3rtapi:29
#: man/man3/rtapi_parport.3rtapi:80 man/man9/ddt.9:34
#: man/man9/eoffset_per_angle.9:110 man/man9/feedcomp.9:37
#: man/man9/hm2_eth.9:173 man/man9/lineardeltakins.9:37 man/man9/lowpass.9:34
#: man/man9/rosekins.9:30 man/man9/spindle.9:92 man/man9/wcomp.9:39
#, no-wrap
msgid "NOTES"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:603
msgid ""
"The CRC code function is not disclosed by the manufacturer.  Thus the CRC "
"value transmitted with each package is not checked yet.  Feel free to help "
"us enhance the component."
msgstr ""

#. type: Title ==
#: src/man/man1/xhc-whb04b-6.1.adoc:604
#, no-wrap
msgid "AUTHORS"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:607
msgid ""
"This component was started by Raoul Rubien based on predecessor device "
"component xhc-hb04.cc.  https://github.com/machinekit/machinekit/graphs/"
"contributors gives you a more complete list of contributors."
msgstr ""

#. type: SH
#: src/man/man1/xhc-whb04b-6.1.adoc:608 man/man1/halshow.1:56
#, no-wrap
msgid "HISTORY"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:612
msgid ""
"The component was developed accidentally as leisure project.  The "
"development started with the xhc-whb04 (4-axis wireless pendant) "
"implementation as reference.  73 & many thanks to the developers who "
"delivered provided an excellent preparatory work!"
msgstr ""

#. type: Plain text
#: src/man/man1/xhc-whb04b-6.1.adoc:616
msgid ""
"Copyright (C) 2018 Raoul Rubien (github.com/rubienr) Updated for Linuxcnc "
"2020 by alkabal_free.fr.  This is free software; see the source for copying "
"conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS "
"FOR A PARTICULAR PURPOSE."
msgstr ""

#. type: Title =
#: src/man/man9/streamer.9.adoc:1
#, no-wrap
msgid "streamer(9)"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:5 man/man9/streamer.9:32
msgid "streamer - stream file data into HAL in real time"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:8
#, no-wrap
msgid "*loadrt streamer depth*=_depth1[,depth2...]_ *cfg*=_string1[,string2...]_\n"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:16
#, no-wrap
msgid ""
"*streamer* and *halstreamer(1)* are used together to stream data\n"
"from a file into the HAL in real time.  *streamer* is a realtime HAL\n"
"component that exports HAL pins and creates a FIFO in shared memory.\n"
"*hal_streamer* is a user space program that copies data from stdin into\n"
"the FIFO, so that *streamer* can write it to the HAL pins.\n"
msgstr ""

#. type: Labeled list
#: src/man/man9/streamer.9.adoc:20
#, no-wrap
msgid "*depth*=_depth1[,depth2...]_"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:27
msgid ""
"Sets the depth of the user->realtime FIFO that *streamer* creates to receive "
"data from *hal-streamer*.  Multiple values of _depth_ (separated by commas) "
"can be specified if you need more than one FIFO (for example if you want to "
"stream data from two different realtime threads)."
msgstr ""

#. type: Labeled list
#: src/man/man9/streamer.9.adoc:28
#, no-wrap
msgid "*cfg*=_string1[,string2...]_"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:34
msgid ""
"Defines the set of HAL pins that *streamer* exports and later writes data "
"to.  One _string_ must be supplied for each FIFO, separated by commas.  "
"*streamer* exports one pin for each character in _string_.  Legal characters "
"are:"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:36
#, no-wrap
msgid "*F*, *f* (float pin)\n"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:37
#, no-wrap
msgid "*B*, *b* (bit pin)\n"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:38
#, no-wrap
msgid "*S*, *s* (s32 pin)\n"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:39
#, no-wrap
msgid "*U*, *u* (u32 pin)\n"
msgstr ""

#. type: Labeled list
#: src/man/man9/streamer.9.adoc:41
#, no-wrap
msgid "*streamer*._N_"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:43 man/man9/sampler.9:83
msgid "One function is created per FIFO, numbered from zero."
msgstr ""

#. type: Labeled list
#: src/man/man9/streamer.9.adoc:46
#, no-wrap
msgid "*streamer*._N_.*pin*._M_ output"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:49
msgid ""
"Data from column _M_ of the data in FIFO _N_ appears on this pin.  The pin "
"type depends on the config string."
msgstr ""

#. type: Labeled list
#: src/man/man9/streamer.9.adoc:50
#, no-wrap
msgid "*streamer*._N_.*curr-depth* s32 output"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:53
msgid ""
"Current number of samples in the FIFO.  When this reaches zero, new data "
"will no longer be written to the pins."
msgstr ""

#. type: Labeled list
#: src/man/man9/streamer.9.adoc:54
#, no-wrap
msgid "*streamer*._N_.*empty* bit output"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:56
msgid "TRUE when the FIFO _N_ is empty, FALSE when valid data is available."
msgstr ""

#. type: Labeled list
#: src/man/man9/streamer.9.adoc:57
#, no-wrap
msgid "*streamer*._N_.*enable* bit input"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:60
msgid ""
"When TRUE, data from FIFO _N_ is written to the HAL pins.  When false, no "
"data is transferred.  Defaults to TRUE."
msgstr ""

#. type: Labeled list
#: src/man/man9/streamer.9.adoc:61
#, no-wrap
msgid "*streamer*._N_.*underruns* s32 read/write"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:65
msgid ""
"The number of times that *sampler* has tried to write data to the HAL pins "
"but found no fresh data in the FIFO.  It increments whenever *empty* is "
"true, and can be reset by the *setp* command."
msgstr ""

#. type: Labeled list
#: src/man/man9/streamer.9.adoc:66
#, no-wrap
msgid "*streamer*._N_.*clock bit input"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:68 man/man9/streamer.9:163
msgid "Clock for data as specified by the clock-mode pin"
msgstr ""

#. type: Labeled list
#: src/man/man9/streamer.9.adoc:69
#, no-wrap
msgid "*streamer*._N_.*clock-mode s32 input"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:71 man/man9/streamer.9:168
msgid "Defines behavior of clock pin:"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:73
msgid "0 (*default*) free run at every iteration"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:74 man/man9/streamer.9:189
msgid "1 clock on falling edge of clock pin"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:75 man/man9/streamer.9:200
msgid "2 clock on rising edge of clock pin"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:76 man/man9/streamer.9:211
msgid "3 clock on any edge of clock pin"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:79
#, no-wrap
msgid "*halstreamer*(1), *sampler*(9), *halsampler*(1)\n"
msgstr ""

#. type: SH
#: src/man/man9/streamer.9.adoc:81 man/man1/5axisgui.1:42 man/man1/axis.1:51
#: man/man1/axis-remote.1:63 man/man1/debuglevel.1:42
#: man/man1/gladevcp_demo.1:43 man/man1/gmoccapy.1:50
#: man/man1/gremlin_view.1:86 man/man1/gs2_vfd.1:178 man/man1/gscreen.1:50
#: man/man1/halcmd.1:411 man/man1/halcmd_twopass.1:43
#: man/man1/hal-histogram.1:43 man/man1/hal_input.1:183 man/man1/halreport.1:59
#: man/man1/halrmt.1:293 man/man1/halrun.1:87 man/man1/halscope.1:42
#: man/man1/halshow.1:65 man/man1/halui.1:569 man/man1/hbmgui.1:43
#: man/man1/hexagui.1:43 man/man1/image-to-gcode.1:44 man/man1/inivar.1:50
#: man/man1/latency-histogram.1:110 man/man1/latency-plot.1:77
#: man/man1/latency-test.1:44 man/man1/lineardelta.1:42
#: man/man1/linuxcnc_info.1:42 man/man1/linuxcnclcd.1:51
#: man/man1/linuxcncmkdesktop.1:40 man/man1/linuxcnc_module_helper.1:42
#: man/man1/linuxcncsvr.1:41 man/man1/linuxcnctop.1:45
#: man/man1/linuxcnc_var.1:56 man/man1/maho600gui.1:43 man/man1/max5gui.1:43
#: man/man1/mdi.1:58 man/man1/monitor-xhc-hb04.1:46 man/man1/motion-logger.1:44
#: man/man1/ngcgui.1:42 man/man1/panelui.1:48 man/man1/pncconf.1:43
#: man/man1/puma560gui.1:43 man/man1/pumagui.1:43 man/man1/pyngcgui.1:42
#: man/man1/pyui.1:43 man/man1/pyvcp_demo.1:46 man/man1/qtvcp.1:42
#: man/man1/rotarydelta.1:42 man/man1/rs274.1:87 man/man1/rtapi_app.1:42
#: man/man1/scaragui.1:43 man/man1/schedrmt.1:214 man/man1/scorbot-er-3.1:49
#: man/man1/simulate_probe.1:41 man/man1/stepconf.1:43 man/man1/teach-in.1:47
#: man/man1/tooledit.1:43 man/man1/touchy.1:50 man/man1/update_ini.1:45
#: man/man1/xhc-hb04-accels.1:40 man/man1/xyzac-trt-gui.1:43
#: man/man1/xyzbc-trt-gui.1:43 man/man3/hal_stream.3hal:211
#: man/man9/classicladder.9:84 man/man9/hm2_eth.9:191 man/man9/motion.9:723
#: man/man9/opto_ac5.9:65 man/man9/pid.9:430 man/man9/streamer.9:216
#: man/man9/threads.9:44
#, no-wrap
msgid "BUGS"
msgstr ""

#. type: Plain text
#: src/man/man9/streamer.9.adoc:83 man/man9/streamer.9:219
msgid ""
"Should an enable HAL pin be added, to allow streaming to be turned on and "
"off?"
msgstr ""

#. use image:: for equation png files -- no latexmath
#. type: Title =
#: src/motion/5-axis-kinematics.adoc:9
#, no-wrap
msgid "5-Axis Kinematics(((5-Axis Kinematics)))"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:20
msgid ""
"Coordinated multi-axis CNC machine tools controlled with LinuxCNC, require a "
"special kinematics component for each type of machine. This chapter "
"describes some of the most popular 5-axis machine configurations and then "
"develops the forward (from work to joint coordinates) and inverse (from "
"joint to work) transformations in a general mathematical process for two "
"types of machine."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:22
msgid ""
"The kinematics components are given as well as vismach simulation models to "
"demonstrate their behaviour on a computer screen. Examples of HAL file data "
"are also given."
msgstr ""

#. type: Title ==
#: src/motion/5-axis-kinematics.adoc:23
#, no-wrap
msgid "5-Axis Machine Tool Configurations"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:26
msgid ""
"In this section we deal with the typical 5-axis milling or router machines "
"with five joints or degrees-of-freedom which are controlled in coordinated "
"moves."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:28
msgid ""
"3-axis machine tools cannot change the tool orientation, so 5-axis machine "
"tools use two extra axes to set the cutting tool in an appropriate "
"orientation for efficient machining of freeform surfaces."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:30
msgid ""
"Typical 5-axis machine tool configurations are shown in Figs. 3, 5, 7 and "
"9-11 [1,2] in section Figures."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:32
msgid ""
"The kinematics of 5-axes machine tools are much simpler than that of 6-axis "
"serial arm robots, since 3 of the axes are normally linear axes and only two "
"are rotational axes."
msgstr ""

#. type: Title ==
#: src/motion/5-axis-kinematics.adoc:33
#, no-wrap
msgid "Tool Orientation and Location"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:36
msgid ""
"CAD/CAM systems are typically used to generate the 3D CAD models of the "
"workpiece as well as the CAM data for input to the CNC 5-axis machine. The "
"tool or cutter location (CL) data, is composed of the cutter tip position "
"and the cutter orientation relative to the workpiece coordinate system. Two "
"vectors, as generated by most CAM systems and shown in Fig. 1, contain this "
"information:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:37
#, no-wrap
msgid "5-axis-figures/equation__1.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:40
msgid ""
"The K vector is equivalent to the 3rd vector from the pose matrix E~6~ that "
"was used in the 6-axis robot kinematics [3] and the Q vector is equivalent "
"to the 4th vector of E~6~. In MASTERCAM for example this information is "
"contained in the intermediate output \".nci\" file."
msgstr ""

#. type: Block title
#: src/motion/5-axis-kinematics.adoc:41
#, no-wrap
msgid "Cutter location data"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:42
#, no-wrap
msgid "5-axis-figures/Figure-1.png"
msgstr ""

#. type: Title ==
#: src/motion/5-axis-kinematics.adoc:44
#, no-wrap
msgid "Translation and Rotation Matrices"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:48
msgid ""
"Homogeneous transformations provide a simple way to describe the mathematics "
"of multi-axis machine kinematics. A transformation of the space H is a 4x4 "
"matrix and can represent translation and rotation transformations. Given a "
"point x,y,x described by a vector u = {x,y,z,1}^T^, then its transformation "
"v is represented by the matrix product"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:49
#, no-wrap
msgid "5-axis-figures/equation__2.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:52
msgid ""
"There are four fundamental transformation matrices on which 5-axis "
"kinematics can be based:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:53
#, no-wrap
msgid "5-axis-figures/equation__3.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:56
msgid ""
"The matrix T(a,b,c) implies a translation in the X, Y, Z coordinate "
"directions by the amounts a, b, c respectively. The R matrices imply "
"rotations of the angle theta about the X, Y and Z coordinate axes "
"respectively. The 'C' and 'S' symbols refer to cosine and sine functions "
"respectively."
msgstr ""

#. type: Title ==
#: src/motion/5-axis-kinematics.adoc:57
#, no-wrap
msgid "Table Rotary/Tilting 5-Axis Configurations"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:60
msgid ""
"In these machine tools the two rotational axes mount on the work table of "
"the machine. Two forms are typically used:"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:62
msgid ""
"A rotary table which rotates about the vertical Z-axes (C-rotation, "
"secondary) mounted on a tilting table which rotates about the X- or Y-axis "
"(A- or B-rotation, primary). The workpiece is mounted on the rotary table."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:63
msgid ""
"A tilting table which rotates about the X- or Y-axis (A- or B-rotation, "
"secondary) is mounted on a rotary table which rotates about the Z-axis (C-"
"rotation, primary), with the workpiece on the tilting table."
msgstr ""

#. type: Block title
#: src/motion/5-axis-kinematics.adoc:64
#, no-wrap
msgid "General configuration and coordinate systems"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:65
#, no-wrap
msgid "5-axis-figures/Figure-2.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:68
msgid ""
"A multi-axis machine can be considered to consist of a series of links "
"connected by joints. By embedding a coordinate frame in each link of the "
"machine and using homogeneous transformations, we can describe the relative "
"position and orientation between these coordinate frames"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:70
msgid ""
"We need to describe a relationship between the workpiece coordinate system "
"and the tool coordinate system. This can be defined by a transformation "
"matrix '^w^A~t~', which can be found by subsequent transformations between "
"the different structural elements or links of the machine, each with its own "
"defined coordinate system. In general such a transformation may look as "
"follows:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:71
#, no-wrap
msgid "5-axis-figures/equation__4.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:74
msgid ""
"where each matrix '^i-1^A~j~' is a translation matrix 'T' or a rotation "
"matrix 'R' of the form (2,3)."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:76
msgid ""
"Matrix multiplication is a simple process in which the elements of each row "
"of the lefthand matrix A is multiplied by the elements of each column of the "
"righthand matrix B and summed to obtain an element in the result matrix C, "
"ie."
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:77
#, no-wrap
msgid "5-axis-figures/equation__5.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:80
msgid ""
"In Fig. 2 a generic configuration with coordinate systems is shown [4]. It "
"includes table rotary/tilting axes as well as spindle rotary/tilting axes. "
"Only two of the rotary axes are actually used in a machine tool."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:82
msgid ""
"First we will develop the transformations for the first type of "
"configuration mentioned above, ie. a table tilting/rotary (trt) type with no "
"rotating axis offsets. We may give it the name xyzac-trt configuration."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:84
msgid ""
"We also develop the transformations for the same type (xyzac-trt), but with "
"rotating axis offsets."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:86
msgid ""
"Then we develop the transformations for a xyzbc-trt configuration with "
"rotating axis offsets."
msgstr ""

#. type: Title ===
#: src/motion/5-axis-kinematics.adoc:87
#, no-wrap
msgid "Transformations for a xyzac-trt machine tool with work offsets"
msgstr ""

#. type: Block title
#: src/motion/5-axis-kinematics.adoc:89
#, no-wrap
msgid "vismach model of xyzac-trt with coincident rotation axes"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:90
#, no-wrap
msgid "5-axis-figures/Figure-3.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:93
msgid ""
"We deal here with a simplified configuration in which the tilting axis and "
"rotary axis intersects at a point called the pivot point as shown in Fig. 4. "
"therefore the two coordinate systems 'O~ws~' and 'O~wp~' of Fig. 2 are "
"coincident."
msgstr ""

#. type: Block title
#: src/motion/5-axis-kinematics.adoc:94
#, no-wrap
msgid "Table tilting/rotary configuration"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:95
#, no-wrap
msgid "5-axis-figures/Figure-4.png"
msgstr ""

#. type: Title ===
#: src/motion/5-axis-kinematics.adoc:97 src/motion/kinematics.adoc:183
#, no-wrap
msgid "Forward transformation"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:100 src/motion/5-axis-kinematics.adoc:172
#: src/motion/5-axis-kinematics.adoc:235
msgid ""
"The transformation can be defined by the sequential multiplication of the "
"matrices:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:101
#, no-wrap
msgid "5-axis-figures/equation__6.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:104 src/motion/5-axis-kinematics.adoc:176
#: src/motion/5-axis-kinematics.adoc:239
msgid "with the matrices built up as follows:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:105
#, no-wrap
msgid "5-axis-figures/equation__7.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:108
msgid ""
"In these equations L~x~, L~y~, L~z~ defines the offsets of the pivot point "
"of the two rotary axes A and C relative to the workpiece coordinate system "
"origin. Furthermore, P~x~, P~y~, P~z~ are the relative distances of the "
"pivot point to the cutter tip position, which can also be called the \"joint "
"coordinates\" of the pivot point. The pivot point is at the intersection of "
"the two rotary axes. The signs of the S~A~ and S~C~ terms are different to "
"those in [2,3] since there the table rotations are negative relative to the "
"workpiece coordinate axes (note that sin(-theta) = -sin(theta), cos(-theta) "
"= cos(theta))."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:110
msgid "When multiplied in accordance with (5), we obtain:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:111
#, no-wrap
msgid "5-axis-figures/equation__8.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:114 src/motion/5-axis-kinematics.adoc:186
msgid ""
"We can now equate the third column of this matrix with our given tool "
"orientation vector K, ie.:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:115
#, no-wrap
msgid "5-axis-figures/equation__9.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:118 src/motion/5-axis-kinematics.adoc:190
msgid ""
"From these equations we can solve for the rotation angles theta~A~, "
"theta~C~. From the third row we find:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:119
#, no-wrap
msgid "5-axis-figures/equation__10.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:122
msgid "and by dividing the first row by the second row we find:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:123
#, no-wrap
msgid "5-axis-figures/equation__11.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:126 src/motion/5-axis-kinematics.adoc:198
#: src/motion/5-axis-kinematics.adoc:263
msgid ""
"These relationships are typically used in the CAM post-processor to convert "
"the tool orientation vectors to rotation angles."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:128
msgid ""
"Equating the last column of (8) with the tool position vector Q, we can "
"write:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:129
#, no-wrap
msgid "5-axis-figures/equation__12.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:132 src/motion/5-axis-kinematics.adoc:204
#: src/motion/5-axis-kinematics.adoc:269
msgid ""
"The vector on the right hand side can also be written as the product of a "
"matrix and a vector resulting in:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:133
#, no-wrap
msgid "5-axis-figures/equation__13.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:136
msgid "This can be expanded to give"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:137
#, no-wrap
msgid "5-axis-figures/equation__14.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:140 src/motion/5-axis-kinematics.adoc:208
#: src/motion/5-axis-kinematics.adoc:273
msgid "which is the 'forward transformation' of the kinematics."
msgstr ""

#. type: Title ====
#: src/motion/5-axis-kinematics.adoc:141 src/motion/5-axis-kinematics.adoc:209
#: src/motion/5-axis-kinematics.adoc:274
#, no-wrap
msgid "Inverse Transformation"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:144
msgid ""
"We can solve for P from equation (13) as 'P = (^Q^A~P~)^-1^ * Q'. Noting "
"that the square matrix is a homogeneous 4x4 matrix containing a rotation "
"matrix R and translation vector q, for which the inverse can be written as:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:145
#, no-wrap
msgid "5-axis-figures/equation__15.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:148
msgid ""
"where R^T is the transpose of R (rows and columns swappped). We therefore "
"obtain:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:149
#, no-wrap
msgid "5-axis-figures/equation__16.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:152 src/motion/5-axis-kinematics.adoc:217
#: src/motion/5-axis-kinematics.adoc:283
msgid ""
"The desired equations for the 'inverse transformation' of the kinematics "
"thus can be written as:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:153
#, no-wrap
msgid "5-axis-figures/equation__17.png"
msgstr ""

#. type: Title ===
#: src/motion/5-axis-kinematics.adoc:155
#, no-wrap
msgid "Transformations for a xyzac-trt machine  with rotary axis offsets"
msgstr ""

#. type: Block title
#: src/motion/5-axis-kinematics.adoc:157
#, no-wrap
msgid "vismach model of xyzac-trt with rotational axis offsets (positive)"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:158
#, no-wrap
msgid "5-axis-figures/Figure-5.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:165
msgid ""
"We deal here with a extended configuration in which the tilting axis and "
"rotary axis do not intersect at a point but have an offset D~y~.  "
"Furthermore, there is also an z-offset between the two coordinate systems "
"'O~ws~' and 'O~wp~' of Fig. 2, called D~z~.  A vismach model is shown in "
"Fig. 5 and the offsets are shown in Fig. 6 (positive offsets in this "
"example).  To simplify the configuration, the offsets L~x~, L~y~, L~z~ of "
"the previous case are not included.  They are probably not necessary if one "
"uses the G54 offsets in LinuxCNC by means of the \"touch of\" facility."
msgstr ""

#. type: Block title
#: src/motion/5-axis-kinematics.adoc:166
#, no-wrap
msgid "Table tilting/rotary xyzac-trt configuration, with axis offsets"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:167
#, no-wrap
msgid "5-axis-figures/Figure-6.png"
msgstr ""

#. type: Title ====
#: src/motion/5-axis-kinematics.adoc:169 src/motion/5-axis-kinematics.adoc:232
#, no-wrap
msgid "Forward Transformation"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:173
#, no-wrap
msgid "5-axis-figures/equation__18.png"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:177
#, no-wrap
msgid "5-axis-figures/equation__19.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:180
msgid ""
"In these equations D~y~, D~z~ defines the offsets of the pivot point of the "
"rotary axes A relative to the workpiece coordinate system origin. "
"Furthermore, P~x~, P~y~, P~z~ are the relative distances of the pivot point "
"to the cutter tip position, which can also be called the \"joint coordinates"
"\" of the pivot point. The pivot point is on the A rotary axis."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:182
msgid "When multiplied in accordance with (18), we obtain:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:183
#, no-wrap
msgid "5-axis-figures/equation__20.png"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:187
#, no-wrap
msgid "5-axis-figures/equation__21.png"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:191
#, no-wrap
msgid "5-axis-figures/equation__22.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:194 src/motion/5-axis-kinematics.adoc:259
msgid "and by dividing the second row by the first row we find:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:195
#, no-wrap
msgid "5-axis-figures/equation__23.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:200
msgid ""
"Equating the last column of (21) with the tool position vector Q, we can "
"write:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:201
#, no-wrap
msgid "5-axis-figures/equation__24.png"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:205
#, no-wrap
msgid "5-axis-figures/equation__25.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:213
msgid ""
"We can solve for P from equation (25) as 'P = (^Q^A~P~)^-1^ * Q' using (15) "
"as before.  We thereby obtain:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:214
#, no-wrap
msgid "5-axis-figures/equation__26.png"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:218
#, no-wrap
msgid "5-axis-figures/equation__27.png"
msgstr ""

#. type: Title ===
#: src/motion/5-axis-kinematics.adoc:220
#, no-wrap
msgid "Transformations for a xyzbc-trt machine  with rotary axis offsets"
msgstr ""

#. type: Block title
#: src/motion/5-axis-kinematics.adoc:222
#, no-wrap
msgid "vismach model of xyzbc-trt with rotational axis offsets (negative)"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:223
#, no-wrap
msgid "5-axis-figures/Figure-7.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:228
msgid ""
"We deal here again with a extended configuration in which the tilting axis "
"(about the y-axis) and rotary axis do not intersect at a point but have an "
"offset D~x~.  Furthermore, there is also an z-offset between the two "
"coordinate systems 'O~ws~' and 'O~wp~' of Fig. 2, called D~z~.  A vismach "
"model is shown in Fig. 7 (negative offsets in this example) and the positive "
"offsets are shown in Fig. 8."
msgstr ""

#. type: Block title
#: src/motion/5-axis-kinematics.adoc:229
#, no-wrap
msgid "Table tilting/rotary xyzbc-trt configuration, with axis offsets"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:230
#, no-wrap
msgid "5-axis-figures/Figure-8.png"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:236
#, no-wrap
msgid "5-axis-figures/equation__28.png"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:240
#, no-wrap
msgid "5-axis-figures/equation__29.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:245
msgid ""
"In these equations D~x~, D~z~ defines the offsets of the pivot point of the "
"rotary axes B relative to the workpiece coordinate system origin.  "
"Furthermore, P~x~, P~y~, P~z~ are the relative distances of the pivot point "
"to the cutter tip position, which can also be called the \"joint coordinates"
"\" of the pivot point.  The pivot point is on the B rotary axis."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:247
msgid "When multiplied in accordance with (29), we obtain:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:248
#, no-wrap
msgid "5-axis-figures/equation__30.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:251
msgid ""
"We can now equate the third column of this matrix with our given tool "
"orientation vector K, i.e.:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:252
#, no-wrap
msgid "5-axis-figures/equation__31.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:255
msgid ""
"From these equations we can solve for the rotation angles theta~B~, "
"theta~C~. From the third row we find:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:256
#, no-wrap
msgid "5-axis-figures/equation__32.png"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:260
#, no-wrap
msgid "5-axis-figures/equation__33.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:265
msgid ""
"Equating the last column of (32) with the tool position vector Q, we can "
"write:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:266
#, no-wrap
msgid "5-axis-figures/equation__34.png"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:270
#, no-wrap
msgid "5-axis-figures/equation__35.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:277
msgid "We can solve for P from equation (37) as 'P = (^Q^A~P~)^-1^ * Q'."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:279
msgid "With the same approach as before, we obtain:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:280
#, no-wrap
msgid "5-axis-figures/equation__36.png"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:284
#, no-wrap
msgid "5-axis-figures/equation__37.png"
msgstr ""

#. type: Title ==
#: src/motion/5-axis-kinematics.adoc:286
#, no-wrap
msgid "Table Rotary/Tilting Examples"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:291
msgid ""
"LinuxCNC includes kinematics modules for the 'xyzac-trt' and 'xyzbc-trt' "
"topologies described in the mathematics detailed above.  For interested "
"users, the source code is available in the git tree in the 'src/emc/"
"kinematics/' directory."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:295
msgid ""
"Example xyzac-trt and xyzbc-trt simulation configurations are located in the "
"Sample Configurations ('configs/sim/axis/vismach/5axis/table-rotary-"
"tilting/')  directory."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:299
msgid ""
"The example configurations include the required INI files and an examples "
"subdirectory with G-code (NGC) files. These sim configurations invoke a "
"realistic 3-dimensional model using the LinuxCNC vismach facility."
msgstr ""

#. type: Title ===
#: src/motion/5-axis-kinematics.adoc:300
#, no-wrap
msgid "Vismach Simulation Models"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:303
msgid ""
"Vismach is a library of python routines to display a dynamic simulation of a "
"CNC machine on the PC screen. The python script for a particular machine is "
"loaded in HAL and data passed by HAL pin connections.  The user-space "
"vismach model is loaded by a HAL command like:"
msgstr ""

#. type: delimited block -
#: src/motion/5-axis-kinematics.adoc:307
#, no-wrap
msgid "loadusr -W xyzac-trt-gui\n"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:310
msgid "and connections are made using HAL commands like:"
msgstr ""

#. type: delimited block -
#: src/motion/5-axis-kinematics.adoc:315
#, no-wrap
msgid ""
"net  :table-x   joint.0.pos-fb xyzac-trt-gui.table-x\n"
"net  :saddle-y  joint.1.pos-fb xyzac-trt-gui.saddle-y\n"
"...\n"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:318
msgid ""
"See the simulation INI files for details of the HAL connections used for the "
"vismach model."
msgstr ""

#. type: Title ===
#: src/motion/5-axis-kinematics.adoc:319
#, no-wrap
msgid "Tool-Length Compensation"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:322
msgid ""
"In order to use tools from a tool table sequentially with tool-length "
"compensation applied automatically, a further Z-offset is required. For a "
"tool that is longer than the \"master\" tool, which typically has a tool "
"length of zero, LinuxCNC has a variable called \"motion.tooloffset.z\". If "
"this variable is passed on to the kinematic component (and vismach python "
"script), then the necessary additional Z-offset for a new tool can be "
"accounted for by adding the component statement, for example:"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:323
#, no-wrap
msgid "5-axis-figures/equation__38.png"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:326
msgid "The required HAL connection (for xyzac-trt) is:"
msgstr ""

#. type: delimited block -
#: src/motion/5-axis-kinematics.adoc:330
#, no-wrap
msgid "net :tool-offset motion.tooloffset.z xyzac-trt-kins.tool-offset\n"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:333
msgid "where:"
msgstr ""

#. type: delimited block -
#: src/motion/5-axis-kinematics.adoc:338
#, no-wrap
msgid ""
":tool-offset ---------------- signal name\n"
"motion.tooloffset.z --------- output HAL pin from LinuxCNC motion module\n"
"xyzac-trt-kins.tool-offset -- input  HAL pin to xyzac-trt-kins\n"
msgstr ""

#. type: Title ==
#: src/motion/5-axis-kinematics.adoc:340
#, no-wrap
msgid "Custom Kinematics Components"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:348
msgid ""
"LinuxCNC implements kinematics using a HAL component that is loaded at "
"startup of LinuxCNC.  The most common kinematics module, 'trivkins', "
"implements identity (trivial) kinematics where there is a one-to-one "
"correspondence between an axis coordinate letter and a motor joint.  "
"Additional kinematics modules for more complex systems (including 'xyzac-"
"trt' and 'xyzbc-trt' described above) are available."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:351
msgid ""
"See the kins manpage (*\\$ man kins*) for brief descriptions of the "
"available kinematics modules."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:356
msgid ""
"The kinematics modules provided by LinuxCNC are typically written in the C-"
"language.  Since a standard structure is used, creation of a custom "
"kinematics module is facilitated by copying an existing source file to a "
"user file with a new name, modifying it, and then installing."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:358
msgid "Installation is done using halcompile:"
msgstr ""

#. type: delimited block -
#: src/motion/5-axis-kinematics.adoc:361
#, no-wrap
msgid "sudo halcompile --install kinsname.c\n"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:366
msgid ""
"where \"kinsname\" is the name you give to your component. The sudo prefix "
"is required to install it and you will be asked for your root password.  See "
"the halcompile man page for more information (*\\$ man halcompile*)"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:370
msgid ""
"Once it is compiled and installed you can reference it in your config setup "
"of your machine. This is done in the INI file of your config directory. For "
"example, the common INI specificaion:"
msgstr ""

#. type: delimited block -
#: src/motion/5-axis-kinematics.adoc:375
#, no-wrap
msgid ""
"[KINS]\n"
"KINEMATICS = trivkins\n"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:378
msgid "is replaced by"
msgstr ""

#. type: delimited block -
#: src/motion/5-axis-kinematics.adoc:383
#, no-wrap
msgid ""
"[KINS]\n"
"KINEMATICS = kinsname\n"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:389
msgid ""
"where \"kinsname\" is the name of your kins program.  Additional HAL pins "
"may be created by the module for variable configuration items such as the "
"D~x~, D~y~, D~z~, tool-offset used in the xyzac-trt kinematics module.  "
"These pins can be connected to a signal for dynamic control or set once with "
"HAL connections like:"
msgstr ""

#. type: delimited block -
#: src/motion/5-axis-kinematics.adoc:396
#, no-wrap
msgid ""
"# set offset parameters\n"
"net :tool-offset motion.tooloffset.z xyzac-trt-kins.tool-offset\n"
"setp xyzac-trt-kins.y-offset 0\n"
"setp xyzac-trt-kins.z-offset 20\n"
msgstr ""

#. type: Title ==
#: src/motion/5-axis-kinematics.adoc:398
#, no-wrap
msgid "Figures"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/motion/5-axis-kinematics.adoc:400 src/motion/5-axis-kinematics.adoc:401
#, no-wrap
msgid "Table tilting/rotating configuration"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:401
#, no-wrap
msgid "5-axis-figures/Figure-9.png"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/motion/5-axis-kinematics.adoc:403 src/motion/5-axis-kinematics.adoc:404
#, no-wrap
msgid "Spindle/table tilting configuration"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:404
#, no-wrap
msgid "5-axis-figures/Figure-10.png"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/motion/5-axis-kinematics.adoc:406 src/motion/5-axis-kinematics.adoc:407
#, no-wrap
msgid "Spindle tilting/rotary configuration"
msgstr ""

#. type: Target for macro image
#: src/motion/5-axis-kinematics.adoc:407
#, no-wrap
msgid "5-axis-figures/Figure-11.png"
msgstr ""

#. == References  nope nope nope pdf nope
#. type: Title ==
#: src/motion/5-axis-kinematics.adoc:413
#, no-wrap
msgid "REFERENCES"
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:417
msgid ""
"A Postprocessor Based on the Kinematics Model for General Five-Axis machine "
"Tools: C-H She, R-S Lee, J Manufacturing Processes, V2 N2, 2000."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:420
msgid ""
"NC Post-processor for 5-axis milling of table-rotating/tilting type: YH "
"Jung, DW Lee, JS Kim, HS Mok, J Materials Processing Technology,130-131 "
"(2002)  641-646."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:421
msgid ""
"3D 6-DOF Serial Arm Robot Kinematics, RJ du Preez, SA-CNC-CLUB, Dec. 5, 2013."
msgstr ""

#. type: Plain text
#: src/motion/5-axis-kinematics.adoc:424
msgid ""
"Design of a generic five-axis postprocessor based on generalized kinematics "
"model of machine tool: C-H She, C-C Chang, Int. J Machine Tools & "
"Manufacture, 47 (2007) 537-545."
msgstr ""

#. type: Title =
#: src/motion/dh-parameters.adoc:5
#, no-wrap
msgid "Setting up \"modified\" Denavit-Hartenberg (DH) parameters for 'genserkins'(((DH parameters Examples)))"
msgstr ""

#. type: Title ==
#: src/motion/dh-parameters.adoc:7
#, no-wrap
msgid "Prelude"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:12
msgid ""
"LinuxCNC supports a number of kinematics modules including one that supports "
"a generalized set of serial kinematics commonly specified via Denavit-"
"Hartenberg parameters."
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:15
msgid ""
"This document illustrates a method to set up the DH-parameters for a "
"Mitsubishi RV-6SDL in LinuxCNC using 'genserkins' kinematics."
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:20
msgid ""
"This document does not cover the creation of a 'vismach' model which, while "
"certainly very useful, requires just as much careful modeling if it is to "
"match the 'genserkins' model derived in this document."
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:23
msgid "There may be errors and/or shortcomings -- use at your own risk!"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:34
msgid ""
"With the proliferation of industrial robots comes an increased interest to "
"control used robots with LinuxCNC.  A common type of robot used in industry "
"and manufacturing is the \"serial manipulator\" designed as a series of "
"motorized joints connected by rigid links.  Serial robots often have six "
"joints as required for the six degrees of freedom needed to both position "
"(XYZ) and orient (ABC or pitch, roll, yaw) an object in space.  Often these "
"robots have an arm structure that extends from a base to an end-effector."
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:45
msgid ""
"Control of such a serial robot requires the calculation of the end-"
"effector's position and orientation in relation to a reference coordinate "
"system when the joint angles are known (*forward kinematics*)  and also the "
"more complex reverse calculation of the required joint angles for a given "
"end-effector position and orientation in relation to the reference "
"coordinate system (*inverse kinematics*).  The standard mathematical tools "
"used for these calculations are matrices which are basically tables of "
"parameters and formulas that make it easier to handle the rotations and "
"translations involved in forward and inverse kinematics calculations."
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:53
msgid ""
"Detailed familiarity with the math is not required for a serial robot since "
"LinuxCNC provides a kinematics module that implements an algorithm called "
"'genserkins' to calculate the forward and inverse kinematics for a generic "
"serial robot.  In order to control a specific serial robot, 'genserkins' "
"must be provided with data so that it can build a mathematical model of the "
"robot's mechanical structure and thus do the math."
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:60
msgid ""
"The required data needs to be in a standardized form that has been "
"introduced by Jacques Denavit and Richard Hartenberg back in the fifties and "
"are called the DH-Parameters.  Denavit and Hartenberg used four parameters "
"to describe how one joint is linked to the next.  These parameters describe "
"basically two rotations ('alpha' and 'theta') and two translations ('a' and "
"'d')."
msgstr ""

#. type: Title ==
#: src/motion/dh-parameters.adoc:61
#, no-wrap
msgid "Modified DH-Parameters"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:75
msgid ""
"As is often the case, this \"standard\" has been modified by other authors "
"who have introduced \"modified DH-parameters\" and one must be very careful "
"because 'genserkins' uses \"modified DH-parameters\" as described in the "
"publication \"Introduction to Robotics, Mechanics and Control\" by John J. "
"Craig.  Beware there is a lot of information to be found on 'DH-parameters' "
"but rarely does the author define which convention is actually used.  In "
"addition, some people have found it necessary to change the parameter named "
"'a' to 'r' and have thus added to the confusion.  This document adheres to "
"the convention in the above mentioned publication by Craig with the "
"difference that joint and parameter enumeration begins with the number '0' "
"in order to be consistent with 'genserkins' and its HAL pins."
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:87
msgid ""
"Standard and Modified DH-Parameters consist of four numeric values for each "
"joint ('a', 'd', 'alpha' and 'theta') that describe how the coordinate "
"system (CS) sitting in one joint has to be moved and rotated to be aligned "
"with the next joint.  Aligned means that the Z-axis of our CS coincides with "
"the axis of rotation of the joint and points in the positive direction such "
"that, using the right hand rule with the thumb pointing in the positive "
"direction of the Z-axis, the fingers point in the positive direction of "
"rotation of the joint.  It becomes clear that in order to do this, one must "
"decide on the positive directions of all joints before starting to derive "
"the parameters!"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:91
msgid ""
"The difference between \"standard\" and \"modified\" notations is in how the "
"parameters are allocated to the links.  Using the \"standard\" DH-Parameters "
"in 'genserkins' will *not* give the correct mathematical model."
msgstr ""

#. type: Title ==
#: src/motion/dh-parameters.adoc:92
#, no-wrap
msgid "Modified DH-Parameters as used in 'genserkins'"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:99
msgid ""
"Note that 'genserkins' does not handle offsets to theta-values -- theta is "
"the joint variable that is *controlled* by LinuxCNC.  With the CS aligned "
"with the joint, a rotation around its Z-Axis is identical to the rotation "
"commanded to that joint by LinuxCNC. This makes it impossible to define the "
"0° position of our robots joints arbitrarily."
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:101
msgid "The three configurable parameters are:"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:104
#, no-wrap
msgid ""
"*alpha* : positive or negative rotation (in radians) around the X-axis\n"
"of the \"current coordinate system\"\n"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:106
#, no-wrap
msgid ""
"*a* : positive distance, along X, between two joint axes specified in\n"
"'machine units' (mm or inch) defined in the system's INI file.\n"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:107
#, no-wrap
msgid "*d* : positive or negative length along Z (also in 'machine units')\n"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:114
msgid ""
"The parameter sets are always derived in the same order and a set is "
"completed by setting the d-parameter.  This does not leave the Z-axis of our "
"CS aligned with the next joint! This may seem confusing but sticking to this "
"rule will yield a working set of parameters.  Once the *d*-parameter is set, "
"the X-axis of our-CS needs to point to the axis of the next joint."
msgstr ""

#. type: Title ==
#: src/motion/dh-parameters.adoc:115
#, no-wrap
msgid "Numbering of joints and parameters"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:122
msgid ""
"The first joint in LinuxCNC is joint-0 (because in software counting starts "
"with 0) while most publications start with the number '1'.  That goes for "
"all the parameters as well.  That is, numbering starts with a-0, alpha-0, "
"d-0 and ends with a-5, alpha-5 and d-5.  Keep this in mind when following a "
"publication to set up 'genserkins' parameters."
msgstr ""

#. type: Title ==
#: src/motion/dh-parameters.adoc:123
#, no-wrap
msgid "How to start"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:128
msgid ""
"Convention is to start by placing the reference-CS in the base of the robot "
"with it's Z-axis coinciding with the axis of the first joint and its X-axis "
"pointing toward the next joint's axis."
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:137
msgid ""
"This will also result in the DRO values in LinuxCNC being referenced to that "
"point.  Having done so sets a-0 and alpha-0 to 0.  The above mentioned "
"publication (Craig) also sets d-0 to 0, which is confusing when a "
"displacement offset is needed in order to have the reference-CS at the "
"bottom of the base.  Setting d-0 = to the displacement gives correct "
"results.  In this manner, the first set of parameters are alpha-0 = 0, a-0 = "
"0, d0 = displacement, and the X-axis of the CS points to the axis of the "
"next joint (joint-1)."
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:140
msgid ""
"Derivation of the net set (alpha-1, a-1, d-1) follows -- always using the "
"same sequence all the way to the sixth set (alpha-5, a-5, d-5)."
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:143
msgid ""
"And thus, the TCP-CS of the end-effector is sitting in the center of the "
"hand flange."
msgstr ""

#. type: Title ==
#: src/motion/dh-parameters.adoc:144
#, no-wrap
msgid "Special cases"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:149
msgid ""
"If the next joint-axis is parallel to the last then one could arbitrarily "
"choose a value for the d-parameter but there is no point in setting it other "
"than 0."
msgstr ""

#. type: Title ==
#: src/motion/dh-parameters.adoc:150
#, no-wrap
msgid "Detailed Example (RV-6SL)"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:157
msgid ""
"Described below is a method to derive the required \"modified DH-parameters"
"\" for a Mitsubishi RV-6SDL and how to set the parameters in the HAL file to "
"be used with the 'genserkins' kinematics in LinuxCNC.  The necessary "
"dimensions are best taken from a dimensional drawing provided by the "
"manufacturer of the robot."
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:158
#, no-wrap
msgid "rv-6sl/rv-6sl-001.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:160
#, no-wrap
msgid "rv-6sl/rv-6sl-002.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:162
#, no-wrap
msgid "rv-6sl/rv-6sl-003.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:164
#, no-wrap
msgid "rv-6sl/rv-6sl-004.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:166
#, no-wrap
msgid "rv-6sl/rv-6sl-005.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:168
#, no-wrap
msgid "rv-6sl/rv-6sl-006.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:170
#, no-wrap
msgid "rv-6sl/rv-6sl-007.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:172
#, no-wrap
msgid "rv-6sl/rv-6sl-008.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:174
#, no-wrap
msgid "rv-6sl/rv-6sl-009.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:176
#, no-wrap
msgid "rv-6sl/rv-6sl-010.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:178
#, no-wrap
msgid "rv-6sl/rv-6sl-011.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:180
#, no-wrap
msgid "rv-6sl/rv-6sl-012.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:182
#, no-wrap
msgid "rv-6sl/rv-6sl-013.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:184
#, no-wrap
msgid "rv-6sl/rv-6sl-014.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:186
#, no-wrap
msgid "rv-6sl/rv-6sl-015.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:188
#, no-wrap
msgid "rv-6sl/rv-6sl-016.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:190
#, no-wrap
msgid "rv-6sl/rv-6sl-017.jpg"
msgstr ""

#. type: Target for macro image
#: src/motion/dh-parameters.adoc:192
#, no-wrap
msgid "rv-6sl/rv-6sl-018.jpg"
msgstr ""

#. type: Title ==
#: src/motion/dh-parameters.adoc:194
#, no-wrap
msgid "Credits"
msgstr ""

#. type: Plain text
#: src/motion/dh-parameters.adoc:198
msgid ""
"Thanks to user Aciera for all text and the graphics for the RV-6SL robot!"
msgstr ""

#. type: Title =
#: src/motion/external-offsets.adoc:5
#, no-wrap
msgid "External Axis Offsets(((externaloffsets)))"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:20
msgid ""
"External axis offsets are supported during teleop (world) jogs and "
"coordinated (G-code) motion.  External axis offsets are enabled on a per-"
"axis basis by INI file settings and controlled dynamically by INI input "
"pins.  The INI interface is similar to that used for wheel jogging.  This "
"type of interface is typically implemented with a manual-pulse-generator "
"(mpg)  connected to an encoder INI component that counts pulses."
msgstr ""

#. type: Title ==
#: src/motion/external-offsets.adoc:21
#, no-wrap
msgid "INI File Settings"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:24
msgid "For each axis letter (*L* in xyzabcuvw):"
msgstr ""

#. type: delimited block -
#: src/motion/external-offsets.adoc:28
#, no-wrap
msgid "[AXIS_L]OFFSET_AV_RATIO = value (controls accel/vel for external offsets)\n"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:31
msgid "Allowed values: 0 <= value <= 0.9"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:32
msgid "Disallowed values are replaced with 0.1 with message to stdout"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:35
#, no-wrap
msgid ""
"Default value:  0 (disables external offset).\n"
"Consequence: omitted [AXIS_L]OFFSET_AV_RATIO disables external offset for the axis."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:38
msgid ""
"If nonzero, the OFFSET_AV_RATIO (*r*), adjusts the conventional (planning) "
"max velocity and acceleration to preserve [AXIS_L] constraints:"
msgstr ""

#. type: delimited block -
#: src/motion/external-offsets.adoc:42
#, no-wrap
msgid ""
"planning max velocity        = (1-r) * MAX_VELOCITY\n"
"external offset velocity     = (  r) * MAX_VELOCITY\n"
msgstr ""

#. type: delimited block -
#: src/motion/external-offsets.adoc:45
#, no-wrap
msgid ""
"planning max acceleration    = (1-r) * MAX_ACCELERATIOIN\n"
"external offset acceleration = (  r) * MAX_ACCELERATION\n"
msgstr ""

#. type: Title ===
#: src/motion/external-offsets.adoc:49
#, no-wrap
msgid "Per-Axis Motion HAL Pins"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:52
msgid "For each axis letter (*L* in xyzabcuvw)"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:54
#, no-wrap
msgid "*axis.L.eoffset-enable*  Input(bit): enable\n"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:55
#, no-wrap
msgid "*axis.L.eoffset-scale*   Input(float): scale factor\n"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:56
#, no-wrap
msgid "*axis.L.eoffset-counts*  Input(s32): input to counts register\n"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:57
#, no-wrap
msgid "*axis.L.eoffset-clear*   Input(bit): clear requested offset\n"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:58
#, no-wrap
msgid "*axis.L.eoffset*         Output(float): current external offset\n"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:59
#, no-wrap
msgid "*axis.L.eoffset-request* Output(float): requested external offset\n"
msgstr ""

#. type: Title ===
#: src/motion/external-offsets.adoc:60
#, no-wrap
msgid "Other Motion HAL Pins"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:63
#, no-wrap
msgid "*motion.eoffset-active*   Output(bit): non-zero external offsets applied\n"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:64
#, no-wrap
msgid "*motion.eoffset-limited*  Output(bit): motion inhibited due to soft limit\n"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:69
msgid ""
"The axis input HAL pins (enable,scale,counts) are similar to the pins used "
"for wheel jogging."
msgstr ""

#. type: Title ===
#: src/motion/external-offsets.adoc:70
#, no-wrap
msgid "Offset Computation"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:79
msgid ""
"At each servo period, the 'axis.L.eoffset-counts' pin is compared to its "
"value in the prior period. The increase or decrease (positive or negative "
"delta) of the 'axis.L.eoffset-counts' pin is multiplied by the current 'axis."
"L.eoffset-scale' pin value.  This product is accumulated in an internal "
"register and exported to the 'axis.L.eoffset-request' HAL pin. The "
"accumulation register is reset to zero at each machine-on."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:86
msgid ""
"The requested offset value is used to plan the movement for the offset that "
"is applied to the 'L' coordinate and represented by the 'axis.L.eoffset' HAL "
"pin. The planned motion respects the allocated velocity and acceleration "
"constraints and may be limited if the net motion (offset plus teleop jogging "
"or coordinated motion)  reaches a soft limit for the 'L' coordinate."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:92
msgid ""
"For many applications, the 'axis.L.eoffset-scale' pin is constant and the "
"net 'axis.L.eoffset-request' response to 'axis.L.eoffset-counts' is "
"equivalent to the product of the accumulated value of 'axis.L.eoffset-"
"counts' and the (constant)  'axis.L.eoffset-scale' pin values."
msgstr ""

#. type: Title ===
#: src/motion/external-offsets.adoc:93
#, no-wrap
msgid "Machine-off/Machine-on"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:98
msgid ""
"When the machine is turned off, the *current position with external offsets "
"is maintained* so that there is no unexpected motion at turn off or turn on."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:102
msgid ""
"At each startup (machine-on), the internal counts register for each HAL pin "
"'axis.L.eoffset-counts' is zeroed and the corresponding HAL output pin 'axis."
"L.eoffset' is reset to zero."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:108
msgid ""
"In other words, external offsets are *defined as ZERO at each startup* "
"(machine-on) regardless of the value of the 'axis.L.eoffset-counts' pins. To "
"avoid confusion, it is recommended that all 'axis.L.eoffset-counts' pins are "
"set to zero when the machine is off."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:118
msgid ""
"External axis offset movements are independently planned with velocity and "
"acceleration settings specified by the '[AXIS_L]OFFSET_AV_RATIO'. The "
"offsetting motion is not coordinated with teleop jogs nor with coordinated "
"(G-code)  motion. During teleop jogging and coordinated (G-code) motion, "
"axis soft limits ('[AXIS_L]MIN_LIMIT,MAX_LIMIT') restrict movement of the "
"axis."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:127
msgid ""
"When external offsets are applied and motion reaches a soft limit (by "
"external offset increases or teleop jogging or coordinated motion), the HAL "
"pin 'motion.eoffset-limited' is asserted and the axis value is held "
"nominally to the soft limit.  This HAL pin can be used by associated HAL "
"logic to truncate additional eoffset counts or to stop the machine (connect "
"to 'halui.machine.off' for instance). If the axis is moved within the soft "
"limit, the 'motion.eoffset-limited' pin is reset."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:134
msgid ""
"When operating at a soft limit during coordinated motion that continues to "
"change the planned axis value, the HAL output pin 'axis.L.eoffset' will "
"indicate the current offset -- the distance needed to reach the limit "
"instead of the computed offset request. This indicated value will change as "
"the planned axis value changes."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:144
msgid ""
"The HAL pin 'axis.L.eoffset-request' indicates the current requested offset "
"that is the product of the internal counts register and the eoffset-scale. "
"In general, the 'axis.L.eoffset' pin value lags the 'axis.L.eoffset-request' "
"value since the external offset is subject to an acceleration limit.  When "
"operating at a soft limit, additional updates to the 'axis.L.eoffset-counts' "
"will continue to affect the requested external offset as reflected in the "
"'axis.L.eoffset-request' HAL pin."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:152
msgid ""
"When teleop jogging with external offsets enabled *and* non-zero values "
"applied, encountering a soft limit will stop motion in the offending axis "
"*without a deacceleration interval*.  Similarly, during coordinated motion "
"with external offsets enabled, reaching a soft limit will stop motion with "
"no deacceleration phase. For this case, it does not matter if the offsets "
"are zero."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:159
msgid ""
"When motion is stopped with no deacceleration phase, system *acceleration "
"limits may be violated* and lead to: 1) a following error (and/or a thump) "
"for a servo motor system, 2) a loss of steps for a stepper motor system.  In "
"general, it is recommended that external offsets are applied in a manner to "
"avoid approaching soft limits."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:165
msgid ""
"External offsets apply to axis coordinate letters (xyzabcuvw).  All joints "
"must be homed before external axis offsets are honored."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:168
msgid ""
"If an 'axis.L.eoffset-enable' HAL pin is reset when its offset is non-zero, "
"the offset is maintained.  The offset may be cleared by:"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:170
msgid "a 'Machine-off/Machine on' toggle"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:172
msgid ""
"reactivating the enable pin and incrementing/decrementing the 'axis.L."
"eoffset-counts' HAL pin to return the offset to zero."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:173
msgid "pulsing the 'axis.L.eoffset-clear' HAL pin"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:176
msgid ""
"External-offsets are intended for use with 'small' offsets that are applied "
"within the soft-limit bounds."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:188
msgid ""
"Soft limits are respected for both teleop jogging and coordinated motion "
"when external offsets are applied.  However, when a soft limit is reached "
"during coordinated motion, reducing the offending external offset *may not "
"move away* from the soft limit *if planned motion continues in the same "
"direction*.  This circumstance can occur since the rate of correcting offset "
"removal (as set by '[AXIS_L]OFFSET_AV_RATIO') may be less than the opposing "
"planned rate of motion.  In such cases, *pausing* (or stopping) the planned, "
"coordinated motion will allow movement away from the soft limit when "
"correcting changes are made in the offending external offset."
msgstr ""

#. type: Title ===
#: src/motion/external-offsets.adoc:189
#, no-wrap
msgid "Warning"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:195
msgid ""
"The use of external offsets can alter machine motion in a significant "
"manner.  The control of external offsets with HAL components and connections "
"and any associated user interfaces should be carefully designed and tested "
"before deployment."
msgstr ""

#. type: Title ==
#: src/motion/external-offsets.adoc:196
#, no-wrap
msgid "Related HAL Components"
msgstr ""

#. type: Title ===
#: src/motion/external-offsets.adoc:198
#, no-wrap
msgid "eoffset_per_angle.comp"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:203
msgid ""
"Component to compute an external offset from a function based on a measured "
"angle (rotary coordinate or spindle).  See the man page for details (*$ man "
"eoffset_per_angle*)."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:208
msgid ""
"The external axis offset capability is enabled by adding an '[AXIS_L]' "
"setting for each candidate axis.  For example:"
msgstr ""

#. type: delimited block -
#: src/motion/external-offsets.adoc:213
#, no-wrap
msgid ""
"[AXIS_Z]\n"
"OFFSET_AV_RATIO = 0.2\n"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:217
msgid ""
"For testing, it is convenient to simulate a jog wheel interface using the "
"*sim_pin* GUI.  For example, in a terminal:"
msgstr ""

#. type: delimited block -
#: src/motion/external-offsets.adoc:220
#, no-wrap
msgid "$ sim_pin axis.z.eoffset-enable axis.z.eoffset-scale axis.z.eoffset-counts\n"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:228
msgid ""
"The use of external offsets is aided by displaying information related to "
"the current offsets: the current eoffset value and the requested eoffset "
"value, the axis pos-cmd, and (for an identity kinematics machine) the "
"corresponding joint motor pos-cmd and motor-offset.  The provided sim "
"configuration (see below)  demonstrates an example PyVCP panel for the AXIS "
"GUI."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:231
msgid ""
"In the absence of a custom display, *halshow* can be started as an auxiliary "
"application with a custom watch list."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:235
msgid ""
"Example INI file settings to simulate the HAL pin eoffset connections and "
"display eoffset information for the z axis (for identity kinematics with "
"z==joint2):"
msgstr ""

#. type: delimited block -
#: src/motion/external-offsets.adoc:244
#, no-wrap
msgid ""
"[APPLICATIONS]\n"
"APP = sim_pin \\\n"
"      axis.z.eoffset-enable \\\n"
"      axis.z.eoffset-scale \\\n"
"      axis.z.eoffset-counts \\\n"
"      axis.z.eoffset-clear\n"
msgstr ""

#. type: delimited block -
#: src/motion/external-offsets.adoc:246
#, no-wrap
msgid "APP = halshow --fformat \"%0.5f\" ./z.halshow\n"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:249
msgid "Where the file z.halshow (in the configuration directory) is:"
msgstr ""

#. type: delimited block -
#: src/motion/external-offsets.adoc:257
#, no-wrap
msgid ""
"pin+joint.2.motor-pos-cmd\n"
"pin+joint.2.motor-offset\n"
"pin+axis.z.pos-cmd\n"
"pin+axis.z.eoffset\n"
"pin+axis.z.eoffset-request\n"
"pin+motion.eoffset-limited\n"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:264
msgid ""
"Provided simulation configurations demonstrate the use of external offsets "
"in order to provide a starting point for user customization for real "
"hardware."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:274
#, no-wrap
msgid ""
"The sim configurations utilize the INI setting '[HAL]HALFILE =\n"
"LIB:basic_sim.tcl' to configure all routine HAL connections for\n"
"the axes specified in the INI file '[TRAJ]COORDINATES=' setting.\n"
"The HAL logic needed to demonstrate external offset functionality\n"
"and the GUI HAL pin connections for a PyVCP panel are made in\n"
"separate HAL files.   A non-simulation configuration should\n"
"replace the 'LIB:basic_sim.tcl' item HALFILEs appropriate to the\n"
"machine.  The provided PyVCP files (.hal and .xml) could be a\n"
"starting point for application-specific GUI interfaces.\n"
msgstr ""

#. type: Title ===
#: src/motion/external-offsets.adoc:275
#, no-wrap
msgid "eoffsets.ini"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:280
msgid ""
"The sim config 'sim/configs/axis/external_offsets/eoffsets.ini' demonstrates "
"a cartesian XYZ machine with controls to enable external offsets on any axis."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:283
msgid "Displays are provided to show all important position and offset values."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:287
msgid ""
"A sim_pin GUI provides controls for the axis offset pins: eoffset-scale & "
"eoffset-counts (via signal e:<L>counts), eoffset-clear (via signal e:"
"clearall)"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:290
msgid ""
"A script (eoffsets_monitor.tcl) is used to set 'axis.L.counts' pins to zero "
"at Machine-off."
msgstr ""

#. type: Title ===
#: src/motion/external-offsets.adoc:291
#, no-wrap
msgid "jwp_z.ini"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:295
msgid ""
"The sim config 'sim/configs/axis/external_offsets/jwp_z.ini' demonstrates a "
"jog-while-pause capability for a single (Z) coordinate:"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:297 src/motion/external-offsets.adoc:308
#: src/motion/external-offsets.adoc:330
msgid "Panel LEDs are provided to show important status items."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:300
msgid ""
"Controls are provided to set the eoffset scale factor and to increment/"
"decrement/clear the eoffset counts."
msgstr ""

#. type: Title ===
#: src/motion/external-offsets.adoc:301
#, no-wrap
msgid "dynamic_offsets.ini"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:306
msgid ""
"This sim config 'sim/configs/axis/external_offsets/dynamic_offsets.ini' "
"demonstrates dynamically applied offsets by connecting a sinusoidal waveform "
"to the z coordinate external offset inputs."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:311
msgid ""
"Controls are provided to alter INI file settings for the Z axis max velocity "
"and max acceleration."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:313
msgid "Controls are provided to set the waveform generator parameters."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:316
msgid ""
"A halscope app is started to show the applied waveform, the offset response, "
"and the motor cmd response."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:319
msgid ""
"changes to the z coordinate max-acceleration and max-velocity are not "
"acknowledged while a program is running."
msgstr ""

#. type: Title ===
#: src/motion/external-offsets.adoc:320
#, no-wrap
msgid "opa.ini (eoffset_per_angle)"
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:328
msgid ""
"The opa.ini configuration uses the INI component eoffset_per_angle (*$ man "
"eoffset_per_angle*) to demonstrate an XZC machine with functional offsets "
"computed from the C coordinate (angle) and applied to the transvers (X) "
"coordinate.  Offset computations are based on a specified reference radius "
"typically set by a program (or MDI)  M68 command to control a *motion.analog-"
"out-NN* pin."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:335
msgid ""
"Functions are provided for inside and outside polygons (nsides >= 3), sine "
"waves and square waves.  The functions can be multiplied in frequency using "
"the fmul pin and modified in amplitude using the rfrac pin (fraction of "
"reference radius)."
msgstr ""

#. type: Plain text
#: src/motion/external-offsets.adoc:338
msgid ""
"Controls are provided to start/stop offset waveforms and to set the function "
"type and its parameters."
msgstr ""

#. type: Title =
#: src/motion/kinematics.adoc:5
#, no-wrap
msgid "Kinematics(((kinematics)))"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:15
msgid ""
"When we talk about CNC machines, we usually think about machines that are "
"commanded to move to certain locations and perform various tasks.  In order "
"to have an unified view of the machine space, and to make it fit the human "
"point of view over 3D space, most of the machines (if not all) use a common "
"coordinate system called the Cartesian Coordinate System."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:20
msgid ""
"The Cartesian Coordinate system is composed of three axes (X, Y, Z) each "
"perpendicular to the other two footnote:[The word \"axes\" is also commonly "
"(and wrongly) used when talking about CNC machines, and referring to the "
"moving directions of the machine.]."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:28
msgid ""
"When we talk about a G-code program (RS274/NGC) we talk about a number of "
"commands (G0, G1, etc.) which have positions as parameters (X- Y- Z-). These "
"positions refer exactly to Cartesian positions. Part of the LinuxCNC motion "
"controller is responsible for translating those positions into positions "
"which correspond to the machine (((kinematics)))kinematics footnote:"
"[Kinematics: a two way function to transform from Cartesian space to joint "
"space.]."
msgstr ""

#. type: Title ===
#: src/motion/kinematics.adoc:29
#, no-wrap
msgid "Joints vs Axes"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:36
msgid ""
"A joint of a CNC machine is a one of the physical degrees of freedom of the "
"machine. This might be linear (leadscrews) or rotary (rotary tables, robot "
"arm joints). There can be any number of joints on a given machine. For "
"example, one popular robot has 6 joints, and a typical simple milling "
"machine has only 3."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:43
msgid ""
"There are certain machines where the joints are laid out to match kinematics "
"axes (joint 0 along axis X, joint 1 along axis Y, joint 2 along axis Z), and "
"these machines are called (((Cartesian machines)))  Cartesian machines (or "
"machines with (((Trivial Kinematics)))Trivial Kinematics).  These are the "
"most common machines used in milling, but are not very common in other "
"domains of machine control (e.g. welding: puma-typed robots)."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:48
msgid ""
"LinuxCNC supports axes with names: X Y Z A B C U V W.  The X Y Z axes "
"typically refer to the usual Cartesian coordinates. The A B C axes refer to "
"rotational coordinates about the X Y Z axes respectively.  The U V W axes "
"refer to additional coordinates that are commonly made colinear to the X Y Z "
"axes respectively."
msgstr ""

#. type: Title ==
#: src/motion/kinematics.adoc:49
#, no-wrap
msgid "Trivial Kinematics"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:55
msgid ""
"The simplest machines are those in which which each joint is placed along "
"one of the Cartesian axes. On these machines the mapping from Cartesian "
"space (the G-code program) to the joint space (the actual actuators of the "
"machine) is trivial. It is a simple 1:1 mapping:"
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:60
#, no-wrap
msgid ""
"pos->tran.x = joints[0];\n"
"pos->tran.y = joints[1];\n"
"pos->tran.z = joints[2];\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:68
msgid ""
"In the above code snippet one can see how the mapping is done: the X "
"position is identical with the joint 0, the Y position with joint 1, etc. "
"The above refers to the direct kinematics (one direction of the "
"transformation).  The next code snippet refers to the inverse kinematics (or "
"the inverse direction of the transformation):"
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:73
#, no-wrap
msgid ""
"joints[0] = pos->tran.x;\n"
"joints[1] = pos->tran.y;\n"
"joints[2] = pos->tran.z;\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:86
msgid ""
"In LinuxCNC, the identity kinematics are implemented with the 'trivkins' "
"kinematics module and extended to 9 axes.  The default relationships between "
"axis coordinates and joint numbers are: footnote:[If the machine (for "
"example a lathe) is mounted with only the X, Z and A axes and the INI file "
"of LinuxCNC contains only the definition of these 3 joints, then the "
"previous assertion is false.  Because we currently have (joint0=X, joint1=Z, "
"joint2=A) which assumes that joint1=Y.  To make this work in LinuxCNC just "
"define all the axes (XYZA), LinuxCNC will then use a simple loop in HAL for "
"unused Y axis.] footnote:[Another way to make it work is to change the "
"corresponding code and recompile the software.]"
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:97
#, no-wrap
msgid ""
"pos->tran.x = joints[0];\n"
"pos->tran.y = joints[1];\n"
"pos->tran.z = joints[2];\n"
"pos->a      = joints[3];\n"
"pos->b      = joints[4];\n"
"pos->c      = joints[5];\n"
"pos->u      = joints[6];\n"
"pos->v      = joints[7];\n"
"pos->w      = joints[8];\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:100
msgid ""
"Similarly, the default relationships for inverse kinematics for trivkins are:"
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:111
#, no-wrap
msgid ""
"joints[0] = pos->tran.x;\n"
"joints[1] = pos->tran.y;\n"
"joints[2] = pos->tran.z;\n"
"joints[3] = pos->a;\n"
"joints[4] = pos->b;\n"
"joints[5] = pos->c;\n"
"joints[6] = pos->u;\n"
"joints[7] = pos->v;\n"
"joints[8] = pos->w;\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:116
msgid ""
"It is straightforward to do the transformation for a trivial \"kins"
"\" ('trivkins' kinematics) or Cartesian machine provided that there are no "
"omissions in the axis letters used."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:122
msgid ""
"It gets a bit more complicated if the machine is missing one or more of the "
"axis letters.  The problems of omitted axis letters is addressed by using "
"the 'coordinates=' module parameter with the trivkins module. Joint numbers "
"are assigned consecutively to each coordinate specified.  A lathe can be "
"described with 'coordinates=xz' The joint assignments will then be:"
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:126
#, no-wrap
msgid ""
"joints[0] = pos->tran.x\n"
"joints[1] = pos->tran.z\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:135
msgid ""
"Use of the 'coordinates=' parameter is recommended for configurations that "
"omit axis letters. footnote:[ Historically, the trivkins module did not "
"support the 'coordinates=' parameter so lathe configs were often configured "
"as XYZ machines.  The unused Y axis was configured to 1) home immediately, "
"2) use a simple loopback to connect its position command HAL pin to its "
"position feedback HAL pin, and 3) hidden in gui displays. Numerous sim "
"configs use these methods in order to share common HAL files.]"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:140
msgid ""
"The 'trivkins' kinematics module also allows the same coordinate to be "
"specified for more than one joint.  This feature can be useful on machines "
"like a gantry having two independent motors for the y coordinate.  Such a "
"machine could use 'coordinates=xyyz' resulting in joint assignments:"
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:146
#, no-wrap
msgid ""
"joints[0] = pos->tran.x\n"
"joints[1] = pos->tran.y\n"
"joints[2] = pos->tran.y\n"
"joints[3] = pos->tran.z\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:149
msgid "See the trivkins man pages for more information."
msgstr ""

#. type: Title ==
#: src/motion/kinematics.adoc:150
#, no-wrap
msgid "Non-trivial kinematics"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:158
msgid ""
"There can be quite a few types of machine setups (robots: puma, scara; "
"hexapods etc.). Each of them is set up using linear and rotary joints.  "
"These joints don't usually match with the Cartesian coordinates, therefore "
"we need a kinematics function which does the conversion (actually 2 "
"functions: forward and inverse kinematics function)."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:162
msgid ""
"To illustrate the above, we will analyze a simple kinematics called bipod (a "
"simplified version of the tripod, which is a simplified version of the "
"hexapod)."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/motion/kinematics.adoc:163 src/motion/kinematics.adoc:164
#, no-wrap
msgid "Bipod setup"
msgstr ""

#. type: Target for macro image
#: src/motion/kinematics.adoc:164
#, no-wrap
msgid "images/bipod.png"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:170
msgid ""
"The Bipod we are talking about is a device that consists of 2 motors placed "
"on a wall, from which a device is hung using some wire. The joints in this "
"case are the distances from the motors to the device (named AD and BD in the "
"figure)."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:175
msgid ""
"The position of the motors is fixed by convention. Motor A is in (0,0), "
"which means that its X coordinate is 0, and its Y coordinate is also 0. "
"Motor B is placed in (Bx, 0), which means that its X coordinate is Bx."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:178
msgid ""
"Our tooltip will be in point D which gets defined by the distances AD and "
"BD, and by the Cartesian coordinates Dx, Dy."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:181
msgid ""
"The job of the kinematics is to transform from joint lengths (AD, BD)  to "
"Cartesian coordinates (Dx, Dy) and vice-versa."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:188
msgid ""
"To transform from joint space into Cartesian space we will use some "
"trigonometry rules (the right triangles determined by the points (0,0), "
"(Dx,0), (Dx,Dy) and the triangle (Dx,0), (Bx,0) and (Dx,Dy))."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:190
msgid "We can easily see that:"
msgstr ""

#. type: Target for macro image
#: src/motion/kinematics.adoc:191
#, no-wrap
msgid "images/kinematics-math-01.png"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:194
msgid "likewise:"
msgstr ""

#. type: Target for macro image
#: src/motion/kinematics.adoc:195
#, no-wrap
msgid "images/kinematics-math-02.png"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:198
msgid "If we subtract one from the other we will get:"
msgstr ""

#. type: Target for macro image
#: src/motion/kinematics.adoc:199
#, no-wrap
msgid "images/kinematics-math-03.png"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:202
msgid "and therefore:"
msgstr ""

#. type: Target for macro image
#: src/motion/kinematics.adoc:203
#, no-wrap
msgid "images/kinematics-math-04.png"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:206
msgid "From there we calculate:"
msgstr ""

#. type: Target for macro image
#: src/motion/kinematics.adoc:207
#, no-wrap
msgid "images/kinematics-math-05.png"
msgstr ""

#
#
#
#
#
#
#. we can easily see that latexmath:[$AD^{2}=x^{2}+y^{2}$], likewise
#. latexmath:[$BD^{2}=(Bx-x)^{2}+y^{2}$].
#. If we subtract one from the other we will get:
#. latexmath::[\[AD^{2}-BD^{2}=x^{2}+y^{2}-x^{2}+2*x*Bx-Bx^{2}-y^{2}\]]
#. and therefore:
#. latexmath::[\[x=\frac{AD^{2}-BD^{2}+Bx^{2}}{2*Bx}\]]
#. From there we calculate:
#. latexmath::[\[y=\sqrt{AD^{2}-x^{2}}\]]
#. type: Plain text
#: src/motion/kinematics.adoc:231
msgid ""
"Note that the calculation for y involves the square root of a difference, "
"which may not result in a real number. If there is no single Cartesian "
"coordinate for this joint position, then the position is said to be a "
"singularity. In this case, the forward kinematics return -1."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:233
msgid "Translated to actual code:"
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:243
#, no-wrap
msgid ""
"double AD2 = joints[0] * joints[0];\n"
"double BD2 = joints[1] * joints[1];\n"
"double x = (AD2 - BD2 + Bx * Bx) / (2 * Bx);\n"
"double y2 = AD2 - x * x;\n"
"if(y2 < 0) return -1;\n"
"pos->tran.x = x;\n"
"pos->tran.y = sqrt(y2);\n"
"return 0;\n"
msgstr ""

#. type: Title ===
#: src/motion/kinematics.adoc:245
#, no-wrap
msgid "Inverse transformation"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:249
msgid ""
"The inverse kinematics is much easier in our example, as we can write it "
"directly:"
msgstr ""

#. type: Target for macro image
#: src/motion/kinematics.adoc:250
#, no-wrap
msgid "images/kinematics-math-06.png"
msgstr ""

#. type: Target for macro image
#: src/motion/kinematics.adoc:252
#, no-wrap
msgid "images/kinematics-math-07.png"
msgstr ""

#
#. latexmath::[\[AD=\sqrt{x^{2}+y^{2}}\]]
#. latexmath::[\[BD=\sqrt{(Bx-x)^{2}+y^{2}}\]]
#. type: Plain text
#: src/motion/kinematics.adoc:261
msgid "or translated to actual code:"
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:268
#, no-wrap
msgid ""
"double x2 = pos->tran.x * pos->tran.x;\n"
"double y2 = pos->tran.y * pos->tran.y;\n"
"joints[0] = sqrt(x2 + y2);\n"
"joints[1] = sqrt((Bx - pos->tran.x)*(Bx - pos->tran.x) + y2);\n"
"return 0;\n"
msgstr ""

#. type: Title ==
#: src/motion/kinematics.adoc:270
#, no-wrap
msgid "Implementation details"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:275
msgid ""
"A kinematics module is implemented as a HAL component, and is permitted to "
"export pins and parameters. It consists of several \"C\" functions (as "
"opposed to HAL functions):"
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:280
#, no-wrap
msgid ""
"int kinematicsForward(const double *joint, EmcPose *world,\n"
"const KINEMATICS_FORWARD_FLAGS *fflags,\n"
"KINEMATICS_INVERSE_FLAGS *iflags)\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:283
msgid ""
"Implements the <<sec:Forward-transformation,forward kinematics function>>."
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:288
#, no-wrap
msgid ""
"int kinematicsInverse(const EmcPose * world, double *joints,\n"
"const KINEMATICS_INVERSE_FLAGS *iflags,\n"
"KINEMATICS_FORWARD_FLAGS *fflags)\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:291
msgid "Implements the inverse kinematics function."
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:294
#, no-wrap
msgid "KINEMATICS_TYPE kinematicsType(void)\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:297
msgid "Returns the kinematics type identifier, típicamente 'KINEMATICS_BOTH':"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:299
msgid "KINEMATICS_IDENTITY (each joint number corresponds to an axis letter)"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:300
#, no-wrap
msgid "KINEMATICS_BOTH      (forward and inverse kinematics functions are provided)\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:301
#, no-wrap
msgid "KINEMATICS_FORWARD_ONLY\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:302
#, no-wrap
msgid "KINEMATICS_INVERSE_ONLY\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:307
msgid ""
"GUIs may interpret KINEMATICS_IDENTITY to hide the distinctions between "
"joint numbers and axis letters when in joint mode (typically prior to "
"homing)."
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:312
#, no-wrap
msgid ""
"int kinematicsSwitchable(void)\n"
"int kinematicsSwitch(int switchkins_type)\n"
"KINS_NOT_SWITCHABLE\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:318
msgid ""
"The function kinematicsSwitchable() returns 1 if multiple kinematics types "
"are supported.  The function kinematicsSwitch()  selects the kinematics "
"type.  See <<cha:switchable-kinematics,Switchable Kinematitcs>>."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:324
msgid ""
"The majority of provided kinematics modules support a single kinematics type "
"and use the directive \"*KINS_NOT_SWITCHABLE*\" to supply defaults for the "
"required kinematicsSwitchable() and kinematicsSwitch() functions."
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:329
#, no-wrap
msgid ""
"int kinematicsHome(EmcPose *world, double *joint,\n"
"KINEMATICS_FORWARD_FLAGS *fflags,\n"
"KINEMATICS_INVERSE_FLAGS *iflags)\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:336
msgid ""
"The home kinematics function sets all its arguments to their proper values "
"at the known home position. When called, these should be set, when known, to "
"initial values, e.g., from an INI file. If the home kinematics can accept "
"arbitrary starting points, these initial values should be used."
msgstr ""

#. type: delimited block -
#: src/motion/kinematics.adoc:340
#, no-wrap
msgid ""
"int rtapi_app_main(void)\n"
"void rtapi_app_exit(void)\n"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:343
msgid "These are the standard setup and tear-down functions of RTAPI modules."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:347
msgid ""
"When they are contained in a single source file, kinematics modules may be "
"compiled and installed by 'halcompile'. See the 'halcompile(1)' manpage or "
"the HAL manual for more information."
msgstr ""

#. type: Title ===
#: src/motion/kinematics.adoc:348
#, no-wrap
msgid "Kinematics module using the userkins.comp template"
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:353
msgid ""
"Another way to create a custom kinematics module is to adapt the HAL "
"component 'userkins'. This template component can be modified locally by a "
"user and can be built using halcompile."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:355
msgid "See the userkins man pages for more information."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:358
msgid ""
"Note that to create switchable kinematic modules the required modifications "
"are somewhat more complicated."
msgstr ""

#. type: Plain text
#: src/motion/kinematics.adoc:361
msgid ""
"See 'millturn.comp' as an example of a switchable kinematic module that was "
"created using the 'userkins.comp' template."
msgstr ""

#. type: Title =
#: src/motion/pid-theory.adoc:5
#, no-wrap
msgid "PID Tuning(((PID Tuning)))"
msgstr ""

#. type: Title ==
#: src/motion/pid-theory.adoc:7
#, no-wrap
msgid "PID Controller"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:13
msgid ""
"A proportional-integral-derivative controller (PID controller) is a common "
"feedback loop component in industrial control systems. footnote:[This "
"Subsection is taken from an much more extensive article found at http://en."
"wikipedia.org/wiki/PID_controller]"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:19
msgid ""
"The Controller compares a measured value from a process (typically an "
"industrial process) with a reference set point value. The difference (or "
"'error' signal) is then used to calculate a new value for a manipulable "
"input to the process that brings the process measured value back to its "
"desired set point."
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:26
msgid ""
"Unlike simpler control algorithms, the PID controller can adjust process "
"outputs based on the history and rate of change of the error signal, which "
"gives more accurate and stable control. (It can be shown mathematically that "
"a PID loop will produce accurate, stable control in cases where a simple "
"proportional control would either have a steady-state error or would cause "
"the process to oscillate)."
msgstr ""

#. type: Title ===
#: src/motion/pid-theory.adoc:27
#, no-wrap
msgid "Control loop basics"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:35
msgid ""
"Intuitively, the PID loop tries to automate what an intelligent operator "
"with a gauge and a control knob would do. The operator would read a gauge "
"showing the output measurement of a process, and use the knob to adjust the "
"input of the process (the 'action') until the process's output measurement "
"stabilizes at the desired value on the gauge."
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:41
msgid ""
"In older control literature this adjustment process is called a 'reset' "
"action. The position of the needle on the gauge is a 'measurement', 'process "
"value' or 'process variable'. The desired value on the gauge is called a "
"'set point' (also called 'set value'). The difference between the gauge's "
"needle and the set point is the 'error'."
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:43
msgid "A control loop consists of three parts:"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:45
msgid "Measurement by a sensor connected to the process (e.g. encoder),"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:46
msgid "Decision in a controller element,"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:47
msgid "Action through an output device such as an motor."
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:53
msgid ""
"As the controller reads a sensor, it subtracts this measurement from the "
"'set point' to determine the 'error'. It then uses the error to calculate a "
"correction to the process's input variable (the 'action')  so that this "
"correction will remove the error from the process's output measurement."
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:59
msgid ""
"In a PID loop, correction is calculated from the error in three ways: cancel "
"out the current error directly (Proportional), the amount of time the error "
"has continued uncorrected (Integral), and anticipate the future error from "
"the rate of change of the error over time (Derivative)."
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:66
msgid ""
"A PID controller can be used to control any measurable variable which can be "
"affected by manipulating some other process variable. For example, it can be "
"used to control temperature, pressure, flow rate, chemical composition, "
"speed, or other variables. Automobile cruise control is an example of a "
"process outside of industry which utilizes crude PID control."
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:75
msgid ""
"Some control systems arrange PID controllers in cascades or networks.  That "
"is, a 'master' control produces signals used by 'slave' controllers. One "
"common situation is motor controls: one often wants the motor to have a "
"controlled speed, with the 'slave' controller (often built into a variable "
"frequency drive) directly managing the speed based on a proportional input. "
"This 'slave' input is fed by the 'master' controller's output, which is "
"controlling based upon a related variable."
msgstr ""

#. type: Title ===
#: src/motion/pid-theory.adoc:76
#, no-wrap
msgid "Theory"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:81
msgid ""
"'PID' is named after its three correcting calculations, which all add to and "
"adjust the controlled quantity. These additions are actually 'subtractions' "
"of error, because the proportions are usually negative:"
msgstr ""

#. type: Block title
#: src/motion/pid-theory.adoc:82
#, no-wrap
msgid "Proportional"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:89
msgid ""
"To handle the present, the error is multiplied by a (negative)  constant P "
"(for 'proportional'), and added to (subtracting error from)  the controlled "
"quantity. P is only valid in the band over which a controller's output is "
"proportional to the error of the system. Note that when the error is zero, a "
"proportional controller's output is zero."
msgstr ""

#. type: Block title
#: src/motion/pid-theory.adoc:90
#, no-wrap
msgid "Integral"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:103
msgid ""
"To learn from the past, the error is integrated (added up) over a period of "
"time, and then multiplied by a (negative) constant I (making an average), "
"and added to (subtracting error from) the controlled quantity. I averages "
"the measured error to find the process output's average error from the set "
"point. A simple proportional system either oscillates, moving back and forth "
"around the set point because there's nothing to remove the error when it "
"overshoots, or oscillates and/or stabilizes at a too low or too high value. "
"By adding a negative proportion of (i.e. subtracting part of) the average "
"error from the process input, the average difference between the process "
"output and the set point is always being reduced. Therefore, eventually, a "
"well-tuned PID loop's process output will settle down at the set point."
msgstr ""

#. type: Block title
#: src/motion/pid-theory.adoc:104
#, no-wrap
msgid "Derivative"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:111
msgid ""
"To handle the future, the first derivative (the slope of the error)  over "
"time is calculated, and multiplied by another (negative) constant D, and "
"also added to (subtracting error from) the controlled quantity.  The "
"derivative term controls the response to a change in the system.  The larger "
"the derivative term, the more rapidly the controller responds to changes in "
"the process's output."
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:117
msgid ""
"More technically, a PID loop can be characterized as a filter applied to a "
"complex frequency-domain system. This is useful in order to calculate "
"whether it will actually reach a stable value. If the values are chosen "
"incorrectly, the controlled process input can oscillate, and the process "
"output may never stay at the set point."
msgstr ""

#. type: Title ===
#: src/motion/pid-theory.adoc:118
#, no-wrap
msgid "Loop Tuning"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:129
msgid ""
"'Tuning' a control loop is the adjustment of its control parameters (gain/"
"proportional band, integral gain/reset, derivative gain/rate) to the optimum "
"values for the desired control response. The optimum behavior on a process "
"change or set point change varies depending on the application. Some "
"processes must not allow an overshoot of the process variable from the set "
"point. Other processes must minimize the energy expended in reaching a new "
"set point. Generally stability of response is required and the process must "
"not oscillate for any combination of process conditions and set points."
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:136
msgid ""
"Tuning of loops is made more complicated by the response time of the "
"process; it may take minutes or hours for a set point change to produce a "
"stable effect. Some processes have a degree of non-linearity and so "
"parameters that work well at full-load conditions don't work when the "
"process is starting up from no-load. This section describes some traditional "
"manual methods for loop tuning."
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:143
msgid ""
"There are several methods for tuning a PID loop. The choice of method will "
"depend largely on whether or not the loop can be taken 'offline' for tuning, "
"and the response speed of the system. If the system can be taken offline, "
"the best tuning method often involves subjecting the system to a step change "
"in input, measuring the output as a function of time, and using this "
"response to determine the control parameters."
msgstr ""

#. type: Block title
#: src/motion/pid-theory.adoc:144
#, no-wrap
msgid "Simple method"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:151
msgid ""
"If the system must remain on line, one tuning method is to first set the I "
"and D values to zero. Increase the P until the output of the loop "
"oscillates. Then increase I until oscillation stops. Finally, increase D "
"until the loop is acceptably quick to reach its reference. A fast PID loop "
"tuning usually overshoots slightly to reach the set point more quickly; "
"however, some systems cannot accept overshoot."
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:154
#, no-wrap
msgid "Rise Time"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:154
#, no-wrap
msgid "Overshoot"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:154
#, no-wrap
msgid "Settling Time"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:155
#, no-wrap
msgid "Steady State Error"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:155 src/motion/pid-theory.adoc:156
#: src/motion/pid-theory.adoc:157
#, no-wrap
msgid "Decrease"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:155 src/motion/pid-theory.adoc:156
#, no-wrap
msgid "Increase"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:155 src/motion/pid-theory.adoc:157
#: src/motion/pid-theory.adoc:158
#, no-wrap
msgid "Small Change"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:157
#, no-wrap
msgid "Eliminate"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:161
msgid "Effects of increasing parameters"
msgstr ""

#. type: Block title
#: src/motion/pid-theory.adoc:162
#, no-wrap
msgid "Ziegler-Nichols method"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:177
msgid ""
"Another tuning method is formally known as the 'Ziegler-Nichols method', "
"introduced by John G. Ziegler and Nathaniel B. Nichols footnote:[Introduced "
"in the 1942 paper Optimum Settings for Automatic Controllers, link:https://"
"doi.org/10.1115/1.2899060[DOI 10.1115/1.2899060] also link:https://web."
"archive.org/web/20170918055307/http://staff.guilan.ac.ir/staff/users/"
"chaibakhsh/fckeditor_repo/file/documents/Optimum%20Settings%20for%20Automatic"
"%20Controllers%20(Ziegler%20and%20Nichols,%201942).pdf[available from The "
"Internet Archive].]. It starts in the same way as the method described "
"before: first set the I and D gains to zero and then increase the P gain and "
"expose the loop to external interference for example knocking the motor axis "
"to cause it to move out of equilibrium in order to determine critical gain "
"and period of oscillation until the output of the loop starts to oscillate.  "
"Write down the critical gain (K~c~) and the oscillation period of the output "
"(P~c~). Then adjust the P, I and D controls as the table shows:"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:180
#, no-wrap
msgid "Control type"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:181
#, no-wrap
msgid ".5K~c~"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:182
#, no-wrap
msgid "PI"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:182
#, no-wrap
msgid ".45K~c~"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:182
#, no-wrap
msgid "P~c~/1.2"
msgstr ""

#. type: TH
#: src/motion/pid-theory.adoc:183 man/man9/pid.9:1
#, no-wrap
msgid "PID"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:183
#, no-wrap
msgid ".6K~c~"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:183
#, no-wrap
msgid "P~c~/2"
msgstr ""

#. type: Table
#: src/motion/pid-theory.adoc:184
#, no-wrap
msgid "P~c~/8"
msgstr ""

#. type: Block title
#: src/motion/pid-theory.adoc:186
#, no-wrap
msgid "Final Steps"
msgstr ""

#. type: Plain text
#: src/motion/pid-theory.adoc:190
msgid ""
"After tuning the axis check the following error with Halscope to make sure "
"it is within your machine requirements. More information on Halscope is in "
"the HAL User manual."
msgstr ""

#. type: Title =
#: src/motion/switchkins.adoc:5
#, no-wrap
msgid "Switchable Kinematics (switchkins)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:20
msgid ""
"A number of kinematics modules support the switching of kinematics "
"calculations. These modules support a default kinematics method (type0), a "
"second built-in method (type1), and (optionally) a user-provided kinematics "
"method (type2).  Identity kinematics are typically used for the type1 method."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:27
msgid ""
"The switchkins functionality can be used for machines where post-homing "
"joint control is needed during setup or to avoid movement near singularities "
"from G-code. Such machines use specific kinematics calculations for most "
"operations but can be switched to identity kinematics for control of "
"individual joints after homing."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:33
msgid ""
"The kinematics type is selected by a motion module HAL pin that can be "
"updated from a G-code program or by interactive MDI commands. The halui "
"provisions for activating MDI commands can be used to allow buttons to "
"select the kinematics type using hardware controls or a virtual panel "
"(PyVCP, GladeVCP, etc.)."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:39
msgid ""
"When a kinematics type is changed, the G-code must also issue commands to "
"*force synchronization* of the interpreter and motion parts of LinuxCNC. "
"Typically, a HAL pin 'read' command (M66 E0 L0) is used immediately after "
"altering the controlling HAL pin to force synchronization."
msgstr ""

#. type: Title ==
#: src/motion/switchkins.adoc:40
#, no-wrap
msgid "Switchable Kinematic Modules"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:43
msgid "The following kinematics modules support switchable kinematics:"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:45
#, no-wrap
msgid "*xyzac-trt-kins* (type0:xyzac-trt-kins type1:identity)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:46
#, no-wrap
msgid "*xyzbc-trt-kins* (type0:xyzbc-trt-kins type1:identity)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:47
#, no-wrap
msgid "*genhexkins*     (type0:genhexkins     type1:identity)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:48
#, no-wrap
msgid "*genserkins*     (type0:genserkins     type1:identity) (puma560 example)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:49
#, no-wrap
msgid "*pumakins*       (type0:pumakins       type1:identity)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:50
#, no-wrap
msgid "*scarakins*      (type0:scarakins      type1:identity)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:51
#, no-wrap
msgid "*5axiskins*      (type0:5axiskins      type1:identity) (bridgemill)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:56
msgid ""
"The xyz[ab]c-trt-kins modules by default use type0==xyz[ab]c-trt-kins for "
"backwards compatibility.  The provided sim configs alter the type0/type1 "
"convention by forcing type0==identity kinematics using the module string "
"parameter 'sparm' with an INI file setting like:"
msgstr ""

#. type: delimited block -
#: src/motion/switchkins.adoc:62
#, no-wrap
msgid ""
"[KINS]\n"
"KINEMATICS = xyzac-trt-kins sparm=identityfirst\n"
"...\n"
msgstr ""

#. type: Title ===
#: src/motion/switchkins.adoc:64
#, no-wrap
msgid "Identity letter assignments"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:70
msgid ""
"When using an *identity* kinematics type, the module parameter 'coordinates' "
"can be used to assign letters to joints in arbitrary order from the set of "
"allowed coordinate letters.  Examples:"
msgstr ""

#. type: delimited block -
#: src/motion/switchkins.adoc:75
#, no-wrap
msgid ""
"[KINS]\n"
"JOINTS = 6\n"
msgstr ""

#. type: delimited block -
#: src/motion/switchkins.adoc:78
#, no-wrap
msgid ""
"# conventional identity ordering: joint0==x, joint1==y, ...\n"
"KINEMATICS = genhexkins coordinates=xyzabc\n"
msgstr ""

#. type: delimited block -
#: src/motion/switchkins.adoc:81
#, no-wrap
msgid ""
"# custom identity ordering: joint0==c, joint1==b, ...\n"
"# KINEMATICS = genhexkins coordinates=cbazyx\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:86
msgid ""
"If the coordinates= parameter is omitted, the default joint-letter identity "
"assignments are joint0==x,joint1=y,..."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:95
msgid ""
"The joint assignments provided for *identity* kinematics when using the "
"coordinates parameter are identical to those provided for the trivkins "
"module.  However, duplication of axis letters to assign multiple joints for "
"a coordinate letter is not generally applicable for serial or parallel "
"kinematics (like genserkins, pumakins, genhexkins, etc.)  where there is no "
"simple relationship between joints and coordinates."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:101
msgid ""
"Duplication of axis coordinate letters is supported in the kinematics "
"modules xyzac-trt-kins, xyzbc-trt-kins, and 5axiskins (bridgemill).  Typical "
"applications for duplicate coordinates are gantry machines where two motors "
"(joints)  are used for the transverse axis."
msgstr ""

#. type: Title ===
#: src/motion/switchkins.adoc:102
#, no-wrap
msgid "Backwards compatibility"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:108
msgid ""
"Switchable kinematics initialize with motion.switchkins-type==0 implementing "
"their eponymous kinematics method.  If the the motion.switchkins-type pin is "
"not connected -- as in legacy configurations -- only the default kinematics "
"type is available."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:116
msgid ""
"Kinematics switching is controlled by the motion module input HAL pin "
"*motion.switchkins-type*.  The floating point pin value is truncated to "
"integer and used to select one of the provided kinematics types.  The zero "
"startup value selects the type0 default kinematics type."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:122
msgid ""
"The motion.switchkins-type input pin is floating point in order to "
"facilitate connections to motion module output pins like motion.analog-"
"out-0n that are controllable by standard M-codes (typically M68EnL0)."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:127
msgid ""
"Output HAL pins are provided to inform GUIs of the current kinematics type.  "
"These pins can also be connected to digital inputs that are read by G-code "
"programs to enable or disable program behavior in accordance with the active "
"kinematics type."
msgstr ""

#. type: Title ===
#: src/motion/switchkins.adoc:128
#, no-wrap
msgid "HAL Pin Summary"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:131
#, no-wrap
msgid "*motion.switchkins-type*  Input  (float)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:132
#, no-wrap
msgid "*kinstype.is-0*           Output (bit)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:133
#, no-wrap
msgid "*kinstype.is-1*           Output (bit)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:134
#, no-wrap
msgid "*kinstype.is-2*           Output (bit)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:143
msgid ""
"Switchkins functionality is enabled by the pin *motion.switchkins-type*.  "
"Typically, this pin is sourced by an analog output pin like motion.analog-"
"out-03 so that it can be set by M68 commands.  Example:"
msgstr ""

#. type: delimited block -
#: src/motion/switchkins.adoc:148
#, no-wrap
msgid ""
"net :kinstype-select <= motion.analog-out-03\n"
"net :kinstype-select => motion.switchkins-type\n"
msgstr ""

#. type: Title ===
#: src/motion/switchkins.adoc:150
#, no-wrap
msgid "G-/M-code commands"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:153
msgid "Kinstype selection is managed using G-code sequences like:"
msgstr ""

#. type: delimited block -
#: src/motion/switchkins.adoc:165
#, no-wrap
msgid ""
"...\n"
"M68 E3 Q1 ;update analog-out-03 to select kinstype 1\n"
"M66 E0 L0 ;sync interp-motion\n"
"...\n"
"...       ;user G-code\n"
"...\n"
"M68 E3 Q0 ;update analog-out-03 to select kinstype 0\n"
"M66 E0 L0 ;sync interp-motion\n"
"...\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:172
msgid ""
"An M66 'wait-on-input' command updates the #5399 variable.  If the current "
"value of this variable is needed for subsequent purposes, it should be "
"copied to an additional variable before invoking M66."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:175
msgid ""
"These G-code command sequences are typically implemented in G-code "
"subroutines as remapped M-codes or with conventional M-code scripts."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:177
msgid "Suggested codes (as used in sim configs) are:"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:179
msgid "Conventional User M-codes:"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:181
msgid "M128 Select kinstype 0 (startup default kinematics)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:182
msgid "M129 Select kinstype 1 (typically identity kinematics)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:183
msgid "M130 Select kinstype 2 (user-provided kinematics)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:185
msgid "Remapped M-codes:"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:187
msgid "M428 Select kinstype 0 (startup default kinematics)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:188
msgid "M429 Select kinstype 1 (typically identity kinematics)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:189
msgid "M430 Select kinstype 2 (user-provided kinematics)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:195
msgid ""
"Conventional user M-codes (in the range M100-M199) are in modal group 10.  "
"Remapped M-codes (in the range M200 to M999) can specify a modalgroup.  See "
"the remap documentation for additional information."
msgstr ""

#. type: Title ===
#: src/motion/switchkins.adoc:196
#, no-wrap
msgid "INI file limit settings"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:202
msgid ""
"LinuxCNC trajectory planning uses limits for position (min,max), velocity, "
"and acceleration for each applicable coordinate letter specified in the "
"configuration INI file.  Example for letter L (in the set 'XYZABCUVW'):"
msgstr ""

#. type: delimited block -
#: src/motion/switchkins.adoc:210
#, no-wrap
msgid ""
"[AXIS_L]\n"
"MIN_LIMIT =\n"
"MAX_LIMIT =\n"
"MAX_VELOCITY =\n"
"MIN_ACCELERATION =\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:218
msgid ""
"The INI file limits specified apply to the type 0 default kinematics type "
"that is activated at startup.  These limits may *not* be applicable when "
"switching to alternative kinematics.  However, since an interpreter-motion "
"synchronization is required when switching kinematics, INI-HAL pins can be "
"used to setup limits for a pending kinematics type."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:223
msgid ""
"INI-HAL pins are typically not recognized during a G-code program unless a "
"synchronization (queue-buster) command is issued.  See the milltask manpage "
"for more information ($ man milltask)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:225
msgid "The relevant INI-HAL pins for a joint number (N) are:"
msgstr ""

#. type: delimited block -
#: src/motion/switchkins.adoc:232
#, no-wrap
msgid ""
"ini.N.min_limit\n"
"ini.N.max_limit\n"
"ini.N.max_acceleration\n"
"ini.N.max_velocity\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:235
msgid "The relevant INI-HAL pins for an axis coordinate (_L_) are:"
msgstr ""

#. type: delimited block -
#: src/motion/switchkins.adoc:242
#, no-wrap
msgid ""
"ini.L.min_limit\n"
"ini.L.max_limit\n"
"ini.L.max_velocity\n"
"ini.L.max_acceleration\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:250
msgid ""
"In general, there are no fixed mappings between joint numbers and axis "
"coordinate letters.  There may be specific mappings for some kinematics "
"modules especially those that implement identity kinematics (trivkins).  See "
"the kins man page for more information ($ man kins)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:256
msgid ""
"A user-provided M-code can alter any or all of the axis coordinate limits "
"prior to changing the motion.switchkins-type pin and synchronizing the "
"interpreter and motionparts of LinuxCNC.  As an example, a bash script "
"invoking halcmd can be 'hardcoded' to set any number of HAL pins:"
msgstr ""

#. type: delimited block -
#: src/motion/switchkins.adoc:264
#, no-wrap
msgid ""
"#!/bin/bash\n"
"halcmd -f <<EOF\n"
"setp ini.x.min_limit -100\n"
"setp ini.x.max_limit  100\n"
"# ... repeat for other limit parameters\n"
"EOF\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:271
msgid ""
"Scripts like this can be invoked as a user M-code and used *prior* to the "
"kins switching M-code that updates the motion.switchkins-type HAL pin and "
"forces an interp-motion sync.  Typically, separate scripts would be used for "
"each kinstype (0,1,2)."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:282
msgid ""
"When identity kinematics are provided as a means to control individual "
"joints, it may be convenient to set or restore limits as specified in the "
"system INI file.  For example, a robot starts with a complex (non-identity) "
"kinematics (type0) after homing.  The system is configured so that it can be "
"switched to identity kinematics (type1) in order to manipulate individual "
"joints using the conventional letters from the set 'XYZABCUVW'.  The INI "
"file settings ([AXIS_L]) are *not* applicable when operating with identity "
"(type1) kinematics.  To address this use case, the user M-code scripts can "
"be designed as follows:"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:284
#, no-wrap
msgid "*M129* (Switch to identity type1)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:286 src/motion/switchkins.adoc:295
msgid "read and parse INI file"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:289
msgid ""
"HAL: setp the INI-HAL limit pins for each axis letter ([AXIS_L])  according "
"to the 'identity-referenced' joint number INI file setting ([JOINT_N])"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:290
msgid "HAL: setp motion.switchkins-type 1"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:291 src/motion/switchkins.adoc:299
msgid "MDI: execute a syncing G-code (M66E0L0)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:293
#, no-wrap
msgid "*M128* (restore robot default kinematics type 0)\n"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:297
msgid ""
"HAL: setp the INI-HAL limit pins for each axis letter ([AXIS_L])  according "
"to the appropriate INI file setting ([AXIS_L])"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:298
msgid "HAL: setp motion.switchkins-type 0"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:303
msgid ""
"The vismach simulation configurations for a puma robot demonstrate M-code "
"scripts (M128,M129,M130) for this example use case."
msgstr ""

#. type: Title ===
#: src/motion/switchkins.adoc:304
#, no-wrap
msgid "Offset considerations"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:312
msgid ""
"Like INI file limit settings, coordinate system offsets (G92, G10L2, G10L20, "
"G43, etc) are generally applicable only for the type 0 default startup "
"kinematics type.  When switching kinematics types, it may be *important* to "
"either reset all offsets prior to switching or update offsets based on "
"system-specific requirements."
msgstr ""

#. type: Title ==
#: src/motion/switchkins.adoc:313 src/tooldatabase/tooldatabase.adoc:244
#, no-wrap
msgid "Simulation configs"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:318
msgid ""
"Simulation configs (requiring no hardware) are provided with illustrative "
"vismach displays in subdirectories of configs/sim/axis/vismach/ ."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:320
msgid "5axis/table-rotary-tilting/xyzac-trt.ini (xyzac-trt-kins)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:321
msgid "5axis/table-rotary-tilting/xyzbc-trt.ini (xyzac-trt-kins)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:322
msgid "5axis/bridgemill/5axis.ini (5axiskins)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:323
msgid "scara/scara.ini (scarakins)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:324
msgid "puma/puma560.ini (genserkins)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:325
msgid "puma/puma.ini (pumakins)"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:326
msgid "hexapod-sim/hexapod.ini (genhexkins)"
msgstr ""

#. type: Title ==
#: src/motion/switchkins.adoc:327
#, no-wrap
msgid "User kinematics provisions"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:334
msgid ""
"Custom kinematics can be coded and tested on Run-In-Place ('RIP')  builds.  "
"A template file src/emc/kinematics/userkfuncs.c is provided in the "
"distribution.  This file can be copied/renamed to a user directory and "
"edited to supply custom kinematics with kinstype==2."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:339
msgid ""
"The user custom kinematics file can be compiled from out-of-tree source "
"locations for rt-preempt implementations or by replacing the in-tree "
"template file (src/emc/kinematics/userkfuncs.c) for rtai systems."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:341
msgid "Preempt-rt make example:"
msgstr ""

#. type: delimited block -
#: src/motion/switchkins.adoc:344
#, no-wrap
msgid "$ userkfuncs=/home/myname/kins/mykins.c make && sudo make setuid\n"
msgstr ""

#. type: Title ==
#: src/motion/switchkins.adoc:346
#, no-wrap
msgid "Warnings"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:351
msgid ""
"Unexpected behavior can result if a G-code program is inadvertently started "
"with an incompatible kinematics type.  Unwanted behavior can be circumvented "
"in G-code programs by:"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:354
msgid ""
"Connecting appropriate kinstype.is.N HAL pins to digital input pins (like "
"motion.digital-in-0m)."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:356
msgid ""
"Reading the digital input pin (M66 E0 Pm) at the start of the G-code program"
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:358
msgid ""
"Aborting (M2) the G-code program with a message (DEBUG, problem_message)  if "
"the kinstype is not suitable."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:362
msgid ""
"When using jogging facilities or MDI commands interactively, operator "
"caution is required.  Guis should include indicators to display the current "
"kinematics type."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:369
msgid ""
"Switching kinematics can cause substantial operational changes requiring "
"careful design, testing, and training for deployment.  The management of "
"coordinate offsets, tool compensation, and INI file limits may require "
"complicated and non-standard operating protocols."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:378
msgid ""
"Kinematic modules providing switchkins functionality are linked to the "
"switchkins.o object (switchkins.c) that provides the module 'main' program "
"(rtapi_app_main()) and related functions.  This 'main' program reads "
"(optional) module command-line parameters (coordinates, sparm) and passes "
"them to the module-provided function switchkinsSetup()."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:383
msgid ""
"The switchkinsSetup() function identifies kinstype-specific setup routines "
"and the functions for forward an inverse calculation for each kinstype "
"(0,1,2) and sets a number of configuration settings."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:387
msgid ""
"After calling switchkinsSetup(), rtapi_app_main() checks the supplied "
"parameters, creates a HAL component, and then invokes the setup routine "
"identified for each kinstype (0,1,2)."
msgstr ""

#. type: Plain text
#: src/motion/switchkins.adoc:392
msgid ""
"Each kinstype (0,1,2) setup routine can (optionally) create HAL pins and set "
"them to default values.  When all setup routines finish, rtapi_app_main() "
"issues hal_ready() for the component to complete creation of the module."
msgstr ""

#. type: Title =
#: src/motion/tweaking-steppers.adoc:5
#, no-wrap
msgid "Stepper Tuning"
msgstr ""

#. type: Title ==
#: src/motion/tweaking-steppers.adoc:7
#, no-wrap
msgid "Getting the most out of Software Stepping"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:13
msgid ""
"Generating step pulses in software has one very big advantage - it's free. "
"Just about every PC has a parallel port that is capable of outputting step "
"pulses that are generated by the software. However, software step pulses "
"also have some disadvantages:"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:20
msgid ""
"This chapter has some steps that can help you get the best results from "
"software generated steps."
msgstr ""

#. type: Title ===
#: src/motion/tweaking-steppers.adoc:21
#, no-wrap
msgid "Run a Latency Test"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:26
msgid ""
"The CPU is not the only factor determining latency. Motherboards, graphics "
"cards, USB ports and many other things can degrade it. The best way to know "
"what to expect from a PC is to run the RT latency tests."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:29
msgid ""
"Run the latency test as described in the <<sec:latency-test,Latency Test>> "
"chapter."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:35
msgid ""
"While the test is running, you should 'abuse' the computer. Move windows "
"around on the screen. Surf the web. Copy some large files around on the "
"disk. Play some music. Run an OpenGL program such as glxgears. The idea is "
"to put the PC through its paces while the latency test checks to see what "
"the worst case numbers are."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:49
msgid ""
"The last number in the column labeled 'Max Jitter' is the most important.  "
"Write it down - you will need it later. It contains the worst latency "
"measurement during the entire run of the test. In the example above, that is "
"6693 nano-seconds, or 6,69 micro-seconds, which is excellent.  However the "
"example only ran for a few seconds (it prints one line every second). You "
"should run the test for at least several minutes; sometimes the worst case "
"latency doesn't happen very often, or only happens when you do some "
"particular action. I had one Intel motherboard that worked pretty well most "
"of the time, but every 64 seconds it had a very bad 300 µs latency.  "
"Fortunately that is fixable, see http://wiki.linuxcnc.org/cgi-bin/wiki.pl?"
"FixingSMIIssues[Fixing SMI issues on the LinuxCNC Wiki]"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:60
msgid ""
"So, what do the results mean? If your 'Max Jitter' number is less than about "
"15-20 microseconds (15000-20000 nanoseconds), the computer should give very "
"nice results with software stepping. If the max latency is more like 30-50 "
"microseconds, you can still get good results, but your maximum step rate "
"might be a little disappointing, especially if you use microstepping or have "
"very fine pitch leadscrews. If the numbers are 100 µs or more (100,000 "
"nanoseconds), then the PC is not a good candidate for software stepping. "
"Numbers over 1 millisecond (1,000,000 nanoseconds) mean the PC is not a good "
"candidate for LinuxCNC, regardless of whether you use software stepping or "
"not."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:65
msgid ""
"Note that if you get high numbers, there may be ways to improve them.  For "
"example, one PC had very bad latency (several milliseconds) when using the "
"onboard video. But a $5 used video card solved the problem - LinuxCNC does "
"not require bleeding edge hardware."
msgstr ""

#. type: Title ===
#: src/motion/tweaking-steppers.adoc:66
#, no-wrap
msgid "Figure out what your drives expect"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:71
msgid ""
"Different brands of stepper drives have different timing requirements on "
"their step and direction inputs. So you need to dig out (or Google for) the "
"data sheet that has your drive's specs."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:73
msgid "From the Gecko G202 manual:"
msgstr ""

#. type: delimited block .
#: src/motion/tweaking-steppers.adoc:79
#, no-wrap
msgid ""
"Step Frequency: 0 to 200 kHz\n"
"Step Pulse \"0\" Time: 0.5 µs min (Step on falling edge)\n"
"Step Pulse \"1\" Time: 4.5 µs min\n"
"Direction Setup: 1 µs min (20 µs min hold time after Step edge)\n"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:82
msgid "From the Gecko G203V manual:"
msgstr ""

#. type: delimited block .
#: src/motion/tweaking-steppers.adoc:87
#, no-wrap
msgid ""
"Step Frequency: 0 to 333 kHz\n"
"Step Pulse \"0\" Time: 2.0 µs min (Step on rising edge)\n"
"Step Pulse \"1\" Time: 1.0 µs min\n"
msgstr ""

#. type: delimited block .
#: src/motion/tweaking-steppers.adoc:91
#, no-wrap
msgid ""
"Direction Setup:\n"
"    200 ns (0.2 µs) before step pulse rising edge\n"
"    200 ns (0.2 µs) hold after step pulse rising edge\n"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:94
msgid "From the Xylotex datasheet:"
msgstr ""

#. type: delimited block .
#: src/motion/tweaking-steppers.adoc:101
#, no-wrap
msgid ""
"Minimum DIR setup time before rising edge of STEP Pulse 200 ns Minimum\n"
"DIR hold time after rising edge of STEP pulse 200 ns\n"
"Minimum STEP pulse high time 2.0 µs\n"
"Minimum STEP pulse low time 1.0 µs\n"
"Step happens on rising edge\n"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:105
msgid ""
"Once you find the numbers, write them down too - you need them in the next "
"step."
msgstr ""

#. type: Title ===
#: src/motion/tweaking-steppers.adoc:106
#, no-wrap
msgid "Choose your BASE_PERIOD"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:115
msgid ""
"BASE_PERIOD is the 'heartbeat' of your LinuxCNC computer. Every period, the "
"software step generator decides if it is time for another step pulse. A "
"shorter period will allow you to generate more pulses per second, within "
"limits. But if you go too short, your computer will spend so much time "
"generating step pulses that everything else will slow to a crawl, or maybe "
"even lock up. Latency and stepper drive requirements affect the shortest "
"period you can use, as we will see in a minute."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:123
msgid ""
"Let's look at the Gecko example first. The G202 can handle step pulses that "
"go low for 0.5 µs and high for 4.5 µs, it needs the direction pin to be "
"stable 1 µs before the falling edge, and remain stable for 20 µs after the "
"falling edge. The longest timing requirement is the 20 µs hold time.  A "
"simple approach would be to set the period at 20 µs. That means that all "
"changes on the STEP and DIR lines are separated by 20 µs. All is good, right?"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:134
msgid ""
"Wrong! If there was ZERO latency, then all edges would be separated by 20 "
"µs, and everything would be fine. But all computers have some latency. "
"Latency means lateness. If the computer has 11 µs of latency, that means "
"sometimes the software runs as much as 11 µs later than it was supposed to. "
"If one run of the software is 11 µs late, and the next one is on time, the "
"delay from the first to the second is only 9 µs. If the first one generated "
"a step pulse, and the second one changed the direction bit, you just "
"violated the 20 µs G202 hold time requirement.  That means your drive might "
"have taken a step in the wrong direction, and your part will be the wrong "
"size."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:140
msgid ""
"The really nasty part about this problem is that it can be very very rare. "
"Worst case latencies might only happen a few times a minute, and the odds of "
"bad latency happening just as the motor is changing direction are low. So "
"you get very rare errors that ruin a part every once in a while and are "
"impossible to troubleshoot."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:148
msgid ""
"The simplest way to avoid this problem is to choose a BASE_PERIOD that is "
"the sum of the longest timing requirement of your drive, and the worst case "
"latency of your computer. If you are running a Gecko with a 20 µs hold time "
"requirement, and your latency test said you have a maximum latency of 11 µs, "
"then if you set the BASE_PERIOD to 20+11 = 31 µs (31000 nano-seconds in the "
"ini file), you are guaranteed to meet the drive's timing requirements."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:155
msgid ""
"But there is a tradeoff. Making a step pulse requires at least two periods. "
"One to start the pulse, and one to end it. Since the period is 31 µs, it "
"takes 2x31 = 62 µs to create a step pulse. That means the maximum step rate "
"is only 16,129 steps per second. Not so good. (But don't give up yet, we "
"still have some tweaking to do in the next section.)"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:162
msgid ""
"For the Xylotex, the setup and hold times are very short, 200 ns each (0.2 "
"µs). The longest time is the 2 µs high time. If you have 11 µs latency, then "
"you can set the BASE_PERIOD as low as 11+2=13 µs. Getting rid of the long 20 "
"µs hold time really helps! With a period of 13 µs, a complete step takes "
"2x13 = 26 µs, and the maximum step rate is 38,461 steps per second!"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:172
msgid ""
"But you can't start celebrating yet. Note that 13 µs is a very short period. "
"If you try to run the step generator every 13 µs, there might not be enough "
"time left to run anything else, and your computer will lock up. If you are "
"aiming for periods of less than 25 µs, you should start at 25 µs or more, "
"run LinuxCNC, and see how things respond. If all is well, you can gradually "
"decrease the period. If the mouse pointer starts getting sluggish, and "
"everything else on the PC slows down, your period is a little too short. Go "
"back to the previous value that let the computer run smoothly."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:179
msgid ""
"In this case, suppose you started at 25 µs, trying to get to 13 µs, but you "
"find that around 16 µs is the limit - any less and the computer doesn't "
"respond very well. So you use 16 µs. With a 16 µs period and 11 µs latency, "
"the shortest output time will be 16-11 = 5 µs. The drive only needs 2 µs, so "
"you have some margin. Margin is good - you don't want to lose steps because "
"you cut the timing too close."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:183
msgid ""
"What is the maximum step rate? Remember, two periods to make a step.  You "
"settled on 16 µs for the period, so a step takes 32 µs. That works out to a "
"not bad 31,250 steps per second."
msgstr ""

#. type: Title ===
#: src/motion/tweaking-steppers.adoc:184
#, no-wrap
msgid "Use steplen, stepspace, dirsetup, and/or dirhold"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:190
msgid ""
"In the last section, we got the Xylotex drive to a 16 µs period and a 31,250 "
"step per second maximum speed. But the Gecko was stuck at 31 µs and a not-so-"
"nice 16,129 steps per second. The Xylotex example is as good as we can make "
"it. But the Gecko can be improved."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:199
msgid ""
"The problem with the G202 is the 20 µs hold time requirement. That plus the "
"11 µs latency is what forces us to use a slow 31 µs period. But the LinuxCNC "
"software step generator has some parameters that let you increase the "
"various time from one period to several. For example, if steplen is changed "
"from 1 to 2, then it there will be two periods between the beginning and end "
"of the step pulse. Likewise, if dirhold is changed from 1 to 3, there will "
"be at least three periods between the step pulse and a change of the "
"direction pin."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:211
msgid ""
"If we can use dirhold to meet the 20 µs hold time requirement, then the next "
"longest time is the 4.5 µs high time. Add the 11 µs latency to the 4.5 µs "
"high time, and you get a minimum period of 15.5 µs. When you try 15.5 µs, "
"you find that the computer is sluggish, so you settle on 16 µs.  If we leave "
"dirhold at 1 (the default), then the minimum time between step and direction "
"is the 16 µs period minus the 11 µs latency = 5 µs, which is not enough. We "
"need another 15 µs. Since the period is 16 µs, we need one more period. So "
"we change dirhold from 1 to 2. Now the minimum time from the end of the step "
"pulse to the changing direction pin is 5+16=21 µs, and we don't have to "
"worry about the Gecko stepping the wrong direction because of latency."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:218
msgid ""
"If the computer has a latency of 11 µs, then a combination of a 16 µs base "
"period, and a dirhold value of 2 ensures that we will always meet the timing "
"requirements of the Gecko. For normal stepping (no direction change), the "
"increased dirhold value has no effect. It takes two periods totalling 32 µs "
"to make each step, and we have the same 31,250 step per second rate that we "
"got with the Xylotex."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:224
msgid ""
"The 11 µs latency number used in this example is very good. If you work "
"through these examples with larger latency, like 20 or 25 µs, the top step "
"rate for both the Xylotex and the Gecko will be lower. But the same formulas "
"apply for calculating the optimum BASE_PERIOD, and for tweaking dirhold or "
"other step generator parameters."
msgstr ""

#. type: Title ===
#: src/motion/tweaking-steppers.adoc:225
#, no-wrap
msgid "No Guessing!"
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:231
msgid ""
"For a fast AND reliable software based stepper system, you cannot just guess "
"at periods and other configuration parameters. You need to make measurements "
"on your computer, and do the math to ensure that your drives get the signals "
"they need."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:241
msgid ""
"To make the math easier, I've created an Open Office spreadsheet http://wiki."
"linuxcnc.org/uploads/StepTimingCalculator.ods[Step Timing Calculator].  You "
"enter your latency test result and your stepper drive timing requirements "
"and the spreadsheet calculates the optimum BASE_PERIOD.  Next, you test the "
"period to make sure it won't slow down or lock up your PC. Finally, you "
"enter the actual period, and the spreadsheet will tell you the stepgen "
"parameter settings that are needed to meet your drive's timing requirements. "
"It also calculates the maximum step rate that you will be able to generate."
msgstr ""

#. type: Plain text
#: src/motion/tweaking-steppers.adoc:244
msgid ""
"I've added a few things to the spreadsheet to calculate max speed and "
"stepper electrical calculations."
msgstr ""

#. type: Title =
#: src/plasma/plasma-cnc-primer.adoc:5
#, no-wrap
msgid "Plasma Cutting Primer for LinuxCNC Users(((Plasma Cutting Primer)))"
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:13
#, no-wrap
msgid "What Is Plasma?"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:19
msgid ""
"Plasma is a fourth state of matter, an ionised gas which has been heated to "
"an extremely high temperature and ionised so that it becomes electrically "
"conductive.  The plasma arc cutting and gouging processes use this plasma to "
"transfer an electrical arc to the workpiece.  The metal to be cut or removed "
"is melted by the heat of the arc and then blown away.  While the goal of "
"plasma arc cutting is the separation of the material, plasma arc gouging is "
"used to remove metals to a controlled depth and width."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:24
msgid ""
"Plasma torches are similar in design to the automotive spark plug.  They "
"consist of negative and positive sections separated by a center insulator.  "
"Inside the torch, the pilot arc starts in the gap between the negatively "
"charged electrode and the positively charged tip.  Once the pilot arc has "
"ionised the plasma gas, the superheated column of gas flows through the "
"small orifice in the torch tip, which is focused on the metal to be cut."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:26
msgid ""
"In a Plasma Cutting Torch a cool gas enters Zone B, where a pilot arc "
"between the electrode and the torch tip heats and ionises the gas. The main "
"cutting arc then transfers to the workpiece through the column of plasma gas "
"in Zone C. By forcing the plasma gas and electric arc through a small "
"orifice, the torch delivers a high concentration of heat to a small area. "
"The stiff, constricted plasma arc is shown in Zone C. Direct current (DC) "
"straight polarity is used for plasma cutting, as shown in the illustration. "
"Zone A channels a secondary gas that cools the torch. This gas also assists "
"the high velocity plasma gas in blowing the molten metal out of the cut "
"allowing for a fast, slag - free cut."
msgstr ""

#. type: Target for macro image
#: src/plasma/plasma-cnc-primer.adoc:27
#, no-wrap
msgid "images/primer_torch-head.png"
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:29
#, no-wrap
msgid "Arc Initialisation"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:32
msgid ""
"There are two main methods for arc initialisation for plasma cutters that "
"are designed for CNC operation. Whilst other methods are used on some "
"machines (such as scratch start where physical contact with the material is "
"required), they are unsuited for CNC applications.."
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:33
#, no-wrap
msgid "High Frequency Start"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:36
msgid ""
"This start type is widely employed, and has been around the longest. "
"Although it is older technology, it works well, and starts quickly. But, "
"because of the high frequency high voltage power that is required generated "
"to ionise the air, it has some drawbacks. It often interferes with "
"surrounding electronic circuitry, and can even damage components. Also a "
"special circuit is needed to create a Pilot arc. Inexpensive models will not "
"have a pilot arc, and require touching the consumable to the work to start. "
"Employing a HF circuit also can increase maintenance issues, as there are "
"usually adjustable points that must be cleaned and readjusted from time to "
"time."
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:37
#, no-wrap
msgid "Blowback Start"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:40
msgid ""
"This start type uses air pressure supplied to the cutter to force a small "
"piston or cartridge inside the torch head back to create a small spark "
"between the inside surface of the consumable, ionising the air, and creating "
"a small plasma flame. This also creates a \"pilot arc\" that provides a "
"plasma flame that stays on, whether in contact with the metal or not. This "
"is a very good start type that is now used by several manufacturers. It's "
"advantage is that it requires somewhat less circuitry, is a fairly reliable "
"and generates far less electrical noise."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:42
msgid ""
"For entry level air plasma CNC systems, the blowback style is much preferred "
"to minimise electrical interference with electronics and standard PCs but "
"the High frequency start still rules supreme in larger machines from 200 "
"amps and up. These require industrial level PC's and electronics and even "
"commercial manufacturers have had issues with faults because they have "
"failed to account for electrical noise in their designs."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:43
#, no-wrap
msgid "CNC Plasma"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:51
msgid ""
"Plasma operations on CNC machines is quite unique in comparison to milling "
"or turning and is a bit of an orphan process.  Uneven heating of the "
"material from the plasma arc will cause the sheet to bend and buckle.  Most "
"sheets of metal do not come out of the mill or press in a very even or flat "
"state.  Thick sheets (30&#8239;mm plus) can be out of plane as much as "
"50&#8239;mm to 100&#8239;mm.  Most other CNC G-code operations will start "
"from a known reference or a piece of stock that has a known size and shape "
"and the G-code is written to rough the excess off and then finally cut the "
"finished part.  With plasma the unknown state of the sheet makes it "
"impossible to generate G-code that will cater for these variances in the "
"material."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:53
msgid ""
"A plasma Arc is oval in shape and the cutting height needs to be controlled "
"to minimise bevelled edges. If the torch is too high or too low then the "
"edges can become excessively bevelled. It is also critical that the torch is "
"held perpendicular to the surface."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:55
#, no-wrap
msgid "*Torch to work distance can impact edge bevel*\n"
msgstr ""

#. type: Target for macro image
#: src/plasma/plasma-cnc-primer.adoc:56
#, no-wrap
msgid "images/primer_cut-angularity.png"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:59
#, no-wrap
msgid "*Negative cut angle:* torch too low, increase torch to work distance.\n"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:60
#, no-wrap
msgid "*Positive cut angle:* torch too high, decrease torch to work distance.\n"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:63
msgid ""
"A slight variation in cut angles may be normal, as long as it is within "
"tolerance."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:65
msgid ""
"The ability to precisely control the cutting height in such a hostile and "
"ever changing environment is a very difficult challenge. Fortunately there "
"is a very linear relationship between Torch height (Arc length) and arc "
"voltage as this graph shows."
msgstr ""

#. type: Target for macro image
#: src/plasma/plasma-cnc-primer.adoc:66
#, no-wrap
msgid "images/primer_volts-height.png"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:70
msgid ""
"This graph was prepared from a sample of about 16,000 readings at varying "
"cut height and the regression analysis shows 7.53&thinsp;V/mm with 99.4% "
"confidence.  In this particular instance this sample was taken from an "
"Everlast 50&thinsp;A machine being controlled by LinuxCNC."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:77
msgid ""
"Torch voltage then becomes an ideal process control variable to use to "
"adjust the cut height.  Let's assume for simplicity that voltage changes by "
"10&thinsp;V/mm.  This can be restated to be 1&thinsp;Volt per 0.1&thinsp;mm "
"(0.004\").  Major plasma machine manufacturers (eg Hypertherm, Thermal "
"Dynamics and ESAB), produce cut charts that specify the recommended cut "
"height and estimated arc voltage at this height as well as some additional "
"data.  So if the arc voltage is 1&#8239;V higher than the manufacturers "
"specification, the controller simply needs to lower the torch by 0.1&#8239;"
"mm (0.004\") to move back to the desired cut height.  A torch height control "
"unit (THC) is traditionally used to manage this process."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:78
#, no-wrap
msgid "Choosing a Plasma Machine for CNC operations"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:81
msgid ""
"There are a plethora of plasma machines available on the market today and "
"not all of them are suited for CNC use. CNC Plasma cutting is a complex "
"operation and it is recommended that integrators choose a suitable plasma "
"machine. Failure to do this is likely to cause hours and hours of fruitless "
"trouble shooting trying to work around the lack of what many would consider "
"to be mandatory features."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:83
msgid ""
"Whilst rules are made to be broken if you fully understand the reasons the "
"rule apply, we consider a new plasma table builder should select a machine "
"with the following features:"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:85
msgid "Blowback start to minimise electrical noise to simplify construction"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:86
msgid "A Machine torch is preferred but many have used hand torches."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:87
msgid "A fully shielded torch tip to allow ohmic sensing"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:89
msgid "If you have the budget, a higher end machines will supply:"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:91
msgid ""
"Manufacturer provided cut charts which will save many hours and material "
"waste calibrating cut parameters"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:92
msgid "Dry Contacts for ArcOK"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:93
msgid "Terminals for Arc On switch"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:94
msgid "Raw arc voltage or divided arc voltage output"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:95
msgid ""
"Optionally a RS485 interface if using a Hypertherm plasma cutter and want to "
"control it from the LinuxCNC console."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:96
msgid "Higher duty cycles"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:98
msgid ""
"In recent times, another class of machine which includes some of these "
"features has become available at around USD $550. One example is the "
"Herocut55i available on Amazon but there is yet no feedback from users. This "
"Machine features a blowback torch, ArcOK output, torch start contacts and "
"raw arc voltage."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:99
#, no-wrap
msgid "Types Of Torch Height Control"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:102
msgid ""
"Most THC units are external devices and many have a fairly crude “bit bang\" "
"adjustment method. They provide two signals back to the LinuxCNC controller. "
"One turns on if the Z axis should move up and the other turns on if the Z "
"axis should move down. Neither signal is true if the torch is at the correct "
"height. The popular Proma 150 THC is one example of this type of THC. The "
"LinuxCNC THCUD component is designed to work with this type of THC."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:104
msgid ""
"With the release of the Mesa THCAD voltage to frequency interface, LinuxCNC "
"was able to decode the actual torch voltage via an encoder input. This "
"allowed LinuxCNC to control the Z axis and eliminate external hardware. "
"Early implementations utilising the THCAD replicated the “bit bang\" "
"approach. The LinuxCNC THC component is an example of this approach."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:106
msgid ""
"Jim Colt of Hypertherm is on record saying that the best THC controllers "
"were fully integrated into the CNC controller itself. Of course he was "
"referring to high end systems manufactured by Hypertherm, Esab, Thermal "
"Dynamics and others such as Advanced Robotic Technology in Australia, little "
"dreaming that open source could produce systems using this approach that "
"rival high end systems."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:109
msgid ""
"The inclusion of external offsets in LinuxCNC V2.8 allowed plasma control in "
"LinuxCNC to rise to a whole new level. External Offsets refers to the "
"ability to apply an offset to the axis commanded position external to the "
"motion controller. This is perfect for plasma THC control as a method to "
"adjust the torch height in real time based on our chosen process control "
"methodology. Following a number of experimental builds, the Plasmac "
"configuration was incorporated into LinuxCNC 2.8. link:./qtplasmac."
"html[QtPlasmaC] has superceded Plasmac in LinuxCNC 2.9.  This has been an "
"extremely ambitious project and many people around the globe have been "
"involved in testing and improving the feature set. QtPlasmaC is unique in "
"that its design goal was to support all THCs including the simple bit bang "
"ones through to sophisticated torch voltage control if the voltage is made "
"available to LinuxCNC via a THCAD or some other voltage sensor. What's more, "
"QtPlasmaC is designed to be a stand alone system that does not need any "
"additional G-code subroutines and allows the user to define their own cut "
"charts that are stored in the system and accessible by a drop-down."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:110
#, no-wrap
msgid "Arc OK Signal"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:113
msgid ""
"Plasma machines that have a CNC interface contain a set of dry contacts (eg "
"a relay) that close when a valid arc is established and each side of these "
"contacts are bought out onto pins on the CNC interface. A plasma table "
"builder should connect one side of these pins to field power and the other "
"to an input pin. This then allows the CNC controller to know when a valid "
"arc is established and also when an arc is lost unexpectedly. There is a "
"potential trap here when the input is a high impedance circuit such as a "
"Mesa card. If the dry contacts are a simple relay, there is a high "
"probability that the current passing through the relay is less than the "
"minimum current specification. Under these conditions, the relay contacts "
"can suffer from a buildup of oxide which over time can result in "
"intermittent contact operation. To prevent this from happening, a pull down "
"resistor should be installed on the controller input pin. Care should be "
"taken to ensure that this resistor is selected to ensure the minimum current "
"passes through the relay and is of sufficient wattage to handle the power in "
"the circuit. Finally, the resistor should be mounted in such a way that the "
"generated heat does not damage anything whilst in operation."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:115
msgid ""
"If you have an ArcOK signal, it is recommended it is used over and above any "
"synthesised signal to eliminate potential build issues. A synthesised signal "
"available from an external THC or QtPlasmaC's Mode 0 can't fully replace the "
"ArcOK circuitry in a plasma inverter. Some build issues have been observed "
"where misconfiguration or incompatibility with the plasma inverter has "
"occurred from a synthesised ArcOK signal. By and large however, a correctly "
"configured synthesised ArcOK signal is fine."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:117
msgid ""
"A simple and effective ArcOK signal can be achieved with a simple reed "
"relay. Wrap 3 turns of one of the plasma cutter's thick cables (eg the "
"material clamp cable) around it. Place the relay in an old pen tube for "
"protection and connect one side of the relay to field power and the other "
"end to your ArcOK input pin."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:118
#, no-wrap
msgid "Initial Height Sensing"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:121
msgid ""
"Because the cutting height is such a critical system parameter and the "
"material surface is inherently uneven, a Z axis mechanism needs a method to "
"sense the material surface. There are three methods this can be achieved; "
"Current sensing to detect increased motor torque, a “float\" switch and an "
"electrical or “ohmic\" sensing circuit that is closed when the torch shield "
"contacts the material. Current sensing is not a viable technique for DIY "
"tables but float switches and ohmic sensing are discussed below:"
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:122
#, no-wrap
msgid "Float Switches"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:125
msgid ""
"The torch is mounted on a sliding stage that can move up when the torch tip "
"contacts the material surface and trigger a switch or sensor. Often this is "
"achieved under G-code control using the G38 Commands. If this is the case, "
"then after initial probing, it is recommended to probe away from the surface "
"until the probe signal is lost at a slower speed. Also, ensure the switch "
"hysteresis is accounted for."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:127
msgid ""
"Regardless of the probing method used, it is strongly recommended that float "
"switch is implemented so that there is a fallback or secondary signal to "
"avoid damage to the torch from a crash."
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:129
#, no-wrap
msgid "Ohmic Sensing"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:132
msgid ""
"Ohmic sensing relies on contact between the torch and the material acting as "
"a switch to activate an electrical signal that is sensed by the CNC "
"controller. Provided the material is clean, this can be a much more accurate "
"method of sensing the material than a float switch which can cause "
"deflection of the material surface. This ohmic sensing circuit is operating "
"in an extremely hostile environment so a number of failsafes need to be "
"implemented to ensure safety of both the CNC electronics and the operator. "
"In plasma cutting, the earth clamp attached to the material is positive and "
"the torch is negative. It is recommended that:"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:134
msgid ""
"Ohmic sensing only be implemented where the torch has a shield that is "
"isolated from the torch tip that conveys the cutting arc."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:135
msgid ""
"The ohmic circuit uses a totally separate isolated power supply that "
"activates an opto-isolated relay to enable the probing signal to be "
"transmitted to the CNC controller."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:136
msgid "The positive side of the circuit should be at the torch"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:137
msgid ""
"Both sides of the circuit needs to be isolated by opto-isolated relays until "
"probing is being undertaken"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:138
msgid ""
"Blocking diodes be used to prevent arc voltage entering the ohmic sensing "
"circuit."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:140
msgid ""
"The following is an example circuit that has been proven to work and is "
"compatible with the LinuxCNC QtPlasmaC configuration."
msgstr ""

#. type: Target for macro image
#: src/plasma/plasma-cnc-primer.adoc:141
#, no-wrap
msgid "images/primer_ohmic-sensing.png"
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:143
#, no-wrap
msgid "Hypersensing with a MESA THCAD-5"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:146
msgid ""
"A more sophisticated method of material sensing that eliminates the relays "
"and diodes is to use another THCAD-5 to monitor the material sensing circuit "
"voltage from an isolated power supply. The advantage this has is the THCAD "
"is designed for the hostile plasma electrical environment and totally and "
"safely isolates the logic side from the high voltage side."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:148
msgid "To implement this method, a second encoder input is required."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:150
msgid ""
"If using a mesa card, different firmware is available to provide 2 "
"additional Encoder A inputs on the Encoder B and Encoder Index pins. This "
"firmware is available for download for the 7i76e and 7i96 boards from the "
"Mesa web site on the product pages."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:152
msgid ""
"The THCAD is sensitive enough to see the ramp up in circuit voltage as "
"contact pressure increases. The ohmic.comp component included in LinuxCNC "
"can monitor the sensing voltage and set a voltage threshold above which it "
"is deemed contact is made and an output is enabled. By monitoring the "
"voltage, a lower “break circuit\" threshold can be set to build in strong "
"switch hysteresis. This minimises false triggering. In our testing, we found "
"the material sensing using this method was more sensitive and robust as well "
"as being simpler to implement the wiring. One further advantage is using "
"software outputs instead of physical I/O pins is that it frees up pins to "
"use for other purposes. This advantage is helpful to get the most out of the "
"Mesa 7i96 which has limited I/O pins."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:154
msgid ""
"The following circuit diagram shows how to implement a hypersensing circuit."
msgstr ""

#. type: Target for macro image
#: src/plasma/plasma-cnc-primer.adoc:155
#, no-wrap
msgid "images/primer_hypersensing.png"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:159
msgid ""
"We used a 15&#8239;W Mean Well HDR-15 Ultra Slim DIN Rail Supply 24&#8239;V "
"DIN rail based isolated power supply.  This is a double insulated Isolation "
"Class II device that will withstand any arc voltage that might be applied to "
"the terminals."
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:160
#, no-wrap
msgid "Example HAL Code for Hypersensing"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:163
msgid ""
"The following HAL code can be pasted into your QtPlasmaC's custom.hal to "
"enable Ohmic sensing on Encoder 2 of a 7i76e. Install the correct bit file "
"and connect the THCAD to IDX+ and IDX-. Be sure to change the calibration "
"settings to agree with your THCAD-5."
msgstr ""

#. type: delimited block -
#: src/plasma/plasma-cnc-primer.adoc:169
#, no-wrap
msgid ""
"# --- Load the Component ---\n"
"loadrt ohmic names=ohmicsense\n"
"addf ohmicsense servo-thread\n"
msgstr ""

#. type: delimited block -
#: src/plasma/plasma-cnc-primer.adoc:173
#, no-wrap
msgid ""
"# --- 7i76e ENCODER 2 SETUP FOR OHMIC SENSING---\n"
"setp hm2_7i76e.0.encoder.02.scale -1\n"
"setp hm2_7i76e.0.encoder.02.counter-mode 1\n"
msgstr ""

#. type: delimited block -
#: src/plasma/plasma-cnc-primer.adoc:183
#, no-wrap
msgid ""
"# --- Configure the component ---\n"
"setp ohmicsense.thcad-0-volt-freq    140200\n"
"setp ohmicsense.thcad-max-volt-freq  988300\n"
"setp ohmicsense.thcad-divide         32\n"
"setp ohmicsense.thcad-fullscale      5\n"
"setp ohmicsense.volt-divider         4.9\n"
"setp ohmicsense.ohmic-threshold      22.0\n"
"setp ohmicsense.ohmic-low            1.0\n"
"net ohmic-vel ohmicsense.velocity-in <= hm2_7i76e.0.encoder.02.velocity\n"
msgstr ""

#. type: delimited block -
#: src/plasma/plasma-cnc-primer.adoc:188
#, no-wrap
msgid ""
"# --- Replace QtPlasmaC's Ohmic sensing signal ---\n"
"unlinkp debounce.0.2.in\n"
"net ohmic-true ohmicsense.ohmic-on => debounce.0.2.in\n"
"net plasmac:ohmic-enable    =>  ohmicsense.is-probing\n"
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:190
#, no-wrap
msgid "THC Delay"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:193
msgid ""
"When an arc is established, arc voltage peaks significantly and then settles "
"back to a stable voltage at cut height. As shown by the green line in the "
"image below."
msgstr ""

#. type: Target for macro image
#: src/plasma/plasma-cnc-primer.adoc:194
#, no-wrap
msgid "images/primer_thc-delay.png"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:197
msgid ""
"It is important for the plasma controller to “wait it out\" before auto "
"sampling the torch voltage and commencing THC control. If enabled too early, "
"the voltage will be above the desired cut Volts and the torch will be driven "
"down in an attempt to address a perceived over-height condition."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:199
msgid ""
"In our testing this varies between machines and material from 0.5 to 1.5 "
"seconds. Therefore a delay of 1.5&thinsp;s after a valid ArcOK signal is "
"received before enabling THC control is a safe initial setting. If you want "
"to shorten this for a given material, LinuxCNC's Halscope will allow you to "
"plot the torch voltage and make informed decisions about the shortest safe "
"delay is used."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:202
msgid ""
"If the cut velocity is not near the desired cut speed at the end of this "
"delay, the controller should wait until this is achieved before enabling the "
"THC."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:203
#, no-wrap
msgid "Torch Voltage Sampling"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:206
msgid ""
"Rather than relying on the manufacturer's cut charts to set the desired "
"torch voltage, many people (the writer included) prefer to sample the "
"voltage as the THC is enabled and use that as a set point."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:207
#, no-wrap
msgid "Torch Breakaway"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:210
msgid ""
"It is recommended that a mechanism is provided to allow the torch to “break "
"away\" or fall off in the case of impact with the material or a cut part "
"that has tipped up. A sensor should be installed to allow the CNC controller "
"to detect if this has occurred and pause the running program. Usually a "
"break away is implemented using magnets to secure the torch to the Z axis "
"stage."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:211
#, no-wrap
msgid "Corner Lock / Velocity Anti-Dive"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:219
msgid ""
"The LinuxCNC trajectory planner is responsible for translating velocity and "
"acceleration commands into motion that obey the laws of physics.  For "
"example, motion will slow when negotiating a corner.  Whilst this is not a "
"problem with milling machines or routers, this poses a particular problem "
"for plasma cutting as the arc voltage increases as motion slows.  This will "
"cause the THC to drive the torch down.  One of the enormous advantages of a "
"THC control embedded within the LinuxCNC motion controller is that it knows "
"what is going on at all times.  So it becomes a trivial matter to monitor "
"the current velocity (`motion.current-velocity`) and to hold THC operation "
"if it falls below a set threshold (e.g., 10% below the desired feedrate)."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:220
#, no-wrap
msgid "Void / Kerf Crossing"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:223
msgid ""
"If the plasma torch passes over a void while cutting, arc voltage rapidly "
"rises and the THC responds by violent downward motion which can smash the "
"torch into the material possibly damaging it. This is a situation that is "
"difficult to detect and handle. To a certain extent it can be mitigated by "
"good nesting techniques but can still occur on thicker material when a slug "
"falls away. This is the one problem that has yet to be solved within the "
"LinuxCNC open source movement."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:225
msgid ""
"One suggested technique is to monitor the rate of change in torch Volts over "
"time (dv/dt) because this parameter is orders of magnitude higher when "
"crossing a void than what occurs due to normal warpage of the material. The "
"following graph shows a low resolution plot of dv/dt (in blue) while "
"crossing a void. The red curve is a moving average of torch Volts."
msgstr ""

#. type: Target for macro image
#: src/plasma/plasma-cnc-primer.adoc:226
#, no-wrap
msgid "images/primer_kerf-cross.png"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:229
msgid ""
"So it should be possible to compare the moving average with the dv/dt and "
"halt THC operation once the dv/dt exceeds the normal range expected due to "
"warpage. More work needs to be done in this area to come up with a working "
"solution in LinuxCNC."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:230
#, no-wrap
msgid "Hole And Small Shape Cutting"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:233
msgid ""
"It is recommended that you slow down cutting when cutting holes and small "
"shapes."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:235
msgid ""
"John Moore says: “If you want details on cutting accurate small holes look "
"up the sales sheets on Hypertherm's \"True Hole Technology\" also look on "
"PlasmaSpider, user seanp has posted extensively on his work using simple air "
"plasma."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:237
msgid ""
"The generally accepted method to get good holes from 37mm dia. and down to "
"material thickness with minimal taper using an air plasma is:"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:239
msgid "Use recommended cutting current for consumables."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:240
msgid "Use fixed (no THC) recommended cutting height for consumables."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:241
msgid ""
"Cut from 60% to 70% of the recommended feed rate of consumables and "
"materials."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:242
msgid "Start lead in at or near center of hole."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:243
msgid "Use perpendicular lead in."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:244
msgid ""
"No lead out, either a slight over burn or early torch off depending on what "
"works best for you."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:246
msgid ""
"You will need to experiment to get exact hole size because the kerf with "
"this method will be wider than your usual straight cut.\""
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:248
msgid ""
"This slow down can be achieved by manipulating the feed rate directly in "
"your post processor or by using adaptive feed and an analog pin as input. "
"This lets you use M67/M68 to set the percentage of desired feed to cut at."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:250
msgid "Knowing The Feedrate"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:252
msgid ""
"From the preceding discussion it is evident that the plasma controller needs "
"to know the feed rate set by the user. This poses a problem with LinuxCNC "
"because the Feedrate is not saved by LinuxCNC after the G-code is buffered "
"and parsed. There are two approaches to work around this:"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:254
msgid ""
"Remap the F command and save the commanded feedrate set in G-code via an M67/"
"M68 command"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:255
msgid ""
"Storing the cut charts in the plasma controller and allow the current "
"feedrate be queried by the G-code program (as QtPlasmaC does)"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:257
msgid ""
"One experimental LinuxCNC branch that would be useful for plasma cutting was "
"the state tags branch. This adds a “tag\" that is available to motion "
"containing the current feed and speed rates for all active motion commands. "
"It has been merged and will be in LinuxCNC v2.9"
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:258
#, no-wrap
msgid "I/O Pins For Plasma Controllers"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:261
msgid ""
"Plasma cutters require several additional pins. In LinuxCNC, there are no "
"hard and fast rules about which pin does what. In this discussion we will "
"assume the plasma inverter has a CNC interface and the controller card has "
"active high inputs are in use (e.g., Mesa 7i76e)."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:263
msgid ""
"Plasma tables can be large machines and we recommend that you take the time "
"to install separate max/min limit switches and homing switches for each "
"joint. The exception might be the Z axis lower limit. When a homing switch "
"is triggered the joint decelerates fairly slowly for maximum accuracy. This "
"means that if you wish to use homing velocities that are commensurate with "
"table size, you can overshoot the initial trigger point by 50-100&#8239;mm. "
"If you use a shared home/limit switch, you have to move the sensor off the "
"trigger point with the final HOME_OFFSET or you will trigger a limit switch "
"fault as the machine comes out of homing. This means you could lose 50&#8239;"
"mm or more of axis travel with shared home/limit switches. This does not "
"happen if separate home and limit switches are used."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:265
msgid ""
"The following pins are usually required (note that suggested connections may "
"not be appropriate for a QtPlasmaC configuration):"
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:266
#, no-wrap
msgid "Arc OK (input)"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:269
msgid "Inverter closes dry contacts when a valid arc is established"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:270
msgid "Connect Field power to one Inverter ArcOK terminal."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:271
msgid "Connect other Inverter Ok Terminal to input pin."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:272
msgid ""
"Usually connected to one of the `motion.digital-_<nn>_` pins for use from G-"
"code with M66"
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:273
#, no-wrap
msgid "Torch On (output)"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:276
msgid "Triggers a relay to close the torch on switch in the inverter"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:277
msgid ""
"Connect the torch on terminals on the inverter to the relay output terminals"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:278
msgid "Connect one side of the coil to the output pin"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:279
msgid "Connect the other side of the coil to Field Power ground."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:280
msgid ""
"If a mechanical relay is used, connect a flyback diode (e.g., IN400x series) "
"across the coil terminals with the band on the diode pointing towards the "
"output pin"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:281
msgid ""
"If a Solid State Relay is used, polarity may need to be observed on the "
"outputs"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:282
msgid ""
"In some circumstances, the onboard spindle relay on a Mesa card can be used "
"instead of an external relay."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:283
msgid "Usually connected to `spindle.0.on`"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:285
msgid ""
"It is strongly recommended that the torch cannot be enabled while this pin "
"is false otherwise the torch will not be extinguished when estop is pressed;"
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:286
#, no-wrap
msgid "Float switch (input)"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:289
msgid ""
"Used for surface probing. A sensor or switch that is activated if the torch "
"slides up when it hits the material."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:290
msgid ""
"Connect Proximity sensor output to chosen input pin. If mechanical switches "
"are used. Connect one side of the switch to field power and the other side "
"of the switch to input."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:291
msgid "Usually Connected to `motion.probe-input`"
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:292
#, no-wrap
msgid "Ohmic Sensor enable (output)"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:295
msgid "See the <<ohmic-sensing,ohmic sensing>> schematic."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:296
msgid ""
"Connect output pin to one side of the isolation relays and the other side to "
"field power ground."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:297
msgid ""
"In a non-QtPlasmaC configuration, usually triggered by a `motion.digital-out-"
"_<nn>_` so it can be controlled in G-code by M62/M63/M64/M65"
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:298
#, no-wrap
msgid "Ohmic Sensing (input)"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:301
msgid ""
"Take care to follow the <<ohmic-sensing,ohmic sensing>> schematic shown "
"previously."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:302
msgid ""
"An isolated power supply triggers a relay when the torch shield contacts the "
"material."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:303
msgid "Connect field power to one output terminal and the other to the input."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:304
msgid ""
"Take care to observe relay polarity if opto-coupled solid State relays are "
"used."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:305
msgid ""
"Usually connected to `motion.probe-input` and may be or'd with the float "
"switch."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:307
msgid ""
"As can be seen, plasma tables are pin intensive and we have already consumed "
"about 15 inputs before the normal estops are added. Others have other views "
"but it is the writer's opinion that the Mesa 7i76e is preferred over the "
"cheaper 7i96 to allow for MPG's, scale and axis selection switch and other "
"features you may wish to add over time. If your table uses servos, there are "
"a number of alternatives. Whilst there are other suppliers, designing your "
"machine around the Mesa ecosystem will simplify use of their THCAD board to "
"read arc voltage."
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:308
#, no-wrap
msgid "Torch Breakaway Sensor"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:311
msgid ""
"As mentioned earlier, a breakaway sensor should be installed that is "
"triggered if the torch crashes and falls off."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:312
msgid ""
"Usually, this would be connected to `halui.program-pause` so the fault can "
"be rectified and the program resumed."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:313
#, no-wrap
msgid "G-code For Plasma Controllers"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:316
msgid ""
"Most plasma controllers offer a method to change settings from G-code. "
"LinuxCNC support this via M67/M68 for analog commands and M62-M65 for "
"digital (on/off commands). How this is implemented is totally arbitrary. "
"Lets look at how the LinuxCNC QtPlasmaC configuration does this:"
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:317
#, no-wrap
msgid "Select Material Settings In QtPlasmaC And Use The Feedrate For That Material:"
msgstr ""

#. type: delimited block -
#: src/plasma/plasma-cnc-primer.adoc:325
#, no-wrap
msgid ""
"M190 Pn\n"
"M66 P3 L3 Q1\n"
"F#<_hal[plasmac.cut-feed-rate]>\n"
"M3 S1\n"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:328
msgid ""
"Users with a very large number of entries in the QtPlasmaC Materials Table "
"may need to increase the Q parameter (e.g., from Q1 to Q2)."
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:329
#, no-wrap
msgid "Enable/Disable THC Operation:"
msgstr ""

#. type: delimited block -
#: src/plasma/plasma-cnc-primer.adoc:337
#, no-wrap
msgid ""
"M62 P2 will disable THC (synchronised with motion)\n"
"M63 P2 will enable THC (synchronised with motion)\n"
"M64 P2 will disable THC (immediately)\n"
"M65 P2 will enable THC (immediately)\n"
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:339
#, no-wrap
msgid "Reduce Cutting Speeds: (eg for hole cutting)"
msgstr ""

#. type: delimited block -
#: src/plasma/plasma-cnc-primer.adoc:347
#, no-wrap
msgid ""
"M67 E3 Q0 would set the velocity to 100% of requested~speed\n"
"M67 E3 Q40 would set the velocity to 40% of requested~speed\n"
"M67 E3 Q60 would set the velocity to 60% of requested~speed\n"
"M67 E3 Q100 would set the velocity to 100% of requested~speed\n"
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:349
#, no-wrap
msgid "Cutter Compensation:"
msgstr ""

#. type: delimited block -
#: src/plasma/plasma-cnc-primer.adoc:356
#, no-wrap
msgid ""
"G41.1 D#<_hal[plasmac_run.kerf-width-f]> ; for left of programmed path\n"
"G42.1 D#<_hal[plasmac_run.kerf-width-f]> for right of programmed path\n"
"G40 to turn compensation off\n"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:359
msgid ""
"Integrators should familiarise themselves with the LinuxCNC documentation "
"for the various LinuxCNC G-code commands mentioned above."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:360
#, no-wrap
msgid "External Offsets and Plasma Cutting"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:363
msgid ""
"External Offsets were introduced to LinuxCNC with version 2.8. By external, "
"it means that we can apply an offset external to the G-code that the "
"trajectory planner knows nothing about. It easiest to explain with an "
"example. Picture a lathe with an external offset being applied by a "
"mathematical formula to machine a lobe on a cam. So the lathe is blindly "
"spinning around with the cut diameter set to a fixed diameter and the "
"external offset moves the tool in and out to machine the cam lobe via an "
"applied external offset. To configure our lathe to machine this cam, we need "
"to allocate some portion of the axis velocity and acceleration to external "
"offsets or the tool can't move. This is where the ini variable "
"OFFSET_AV_RATIO comes in. Say we decide we need to allocate 20% of the "
"velocity and acceleration to the external offset to the Z axis. We set this "
"equal to 0.2. The consequence of this is that your maximum velocity and "
"acceleration for the Lathe's Z axis is only 80% of what it could be."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:365
msgid ""
"External offsets are a very powerful method to make torch height adjustments "
"to the Z axis via a THC. But plasma is all about high velocities and rapid "
"acceleration so it makes no sense to limit these parameters. Fortunately in "
"a plasma machine, the Z axis is either 100% controlled by the THC or it "
"isn't. During the development of LinuxCNC's external offsets it was "
"recognised that Z axis motion by G-code and by THC were mutually exclusive. "
"This allows us to trick external offsets into giving 100 % of velocity and "
"acceleration all of the time. We can do this by doubling the machine's Z "
"axis velocity and acceleration settings in the ini file and set "
"OFFSET_AV_RATIO = 0.5. That way 100% of the maximum velocity and "
"acceleration will be available for both probing and THC."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:368
msgid ""
"Example: On a metric machine with a NEMA23 motor with a direct drive to a "
"5&#8239;mm ball screw, 60&#8239;mm/s maximum velocity and 700&#8239;mm/s^2^ "
"acceleration were determined to be safe values without loss of steps. For "
"this machine, set the Z axis in the ini file as follows:"
msgstr ""

#. type: delimited block -
#: src/plasma/plasma-cnc-primer.adoc:375
#, no-wrap
msgid ""
"[AXIS_Z]\n"
"OFFSET_AV_RATIO = 0.5\n"
"MAX_VELOCITY = 120\n"
"MAX_ACCELERATION = 1400\n"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:378
msgid ""
"The joint associated with this axis would have the velocity and acceleration "
"variables set as follows:"
msgstr ""

#. type: delimited block -
#: src/plasma/plasma-cnc-primer.adoc:384
#, no-wrap
msgid ""
"[JOINT_n]\n"
"MAX_VELOCITY = 60\n"
"MAX_ACCELERATION = 700\n"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:387
msgid ""
"For further information about external offsets (for version 2.8 or later) "
"please read the <<sub:ini:sec:axis-letter,[AXIS_<letter>] Section>> of the "
"INI file document and <<cha:external-offsets,External Axis Offsets>> in the "
"LinuxCNC documentation."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:388
#, no-wrap
msgid "Reading Arc Voltage With The Mesa THCAD"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:391
msgid ""
"The Mesa THCAD board is a remarkably well priced and accurate voltage to "
"frequency converter that is designed for the hostile noisy electrical "
"environment associated with plasma cutting. Internally it has a 0-10&#8239;V "
"range. This range can be simply extended by the addition of some resistors "
"as described in the documentation. This board is available in three "
"versions, the newer THCAD-5 with a 0-5&#8239;V range, the THCAD-10 with a "
"0-10 Volt range and the THCAD-300 which is pre-calibrated for a 300 Volt "
"extended range. Each board is individually calibrated and a sticker is "
"applied to the board that states the frequency at 0 Volts and full scale. "
"For use with LinuxCNC, it is recommended that the 1/32 divisor be selected "
"by the appropriate link on the board. In this case, be sure to also divide "
"the stated frequencies by 32. This is more appropriate for the 1&#8239;kHz "
"servo thread and also allows more time for the THCAD to average and smooth "
"the output."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:393
msgid ""
"There is a lot of confusion around how to decode the THCAD output so lets "
"consider the Mesa 7i76e and the THCAD-10 for a moment with the following "
"hypothetical calibration data:"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:395
msgid "Full scale 928,000&#8239;Hz (1/32 29,000 Hz)"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:396
msgid "0 volt 121,600&#8239;Hz (1/32 3,800 Hz)"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:398
msgid "Because the full scale is 10 Volts, then the frequency per Volt is:"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:400
msgid ""
"(29,000&#8239;Hz - 3,800&#8239;Hz) / 10&#8239;V = 2,520&#8239;Hz per Volt"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:402
msgid "So assuming we have a 5 Volt input, the calculated frequency would be:"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:404
msgid "(2520&#8239;Hz/V * 5&#8239;V) + 3,800&#8239;Hz = 16,400&#8239;Hz"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:406
msgid ""
"So now it should be fairly clear how to convert the frequency to its voltage "
"equivalent:"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:408
msgid "Volts = (frequency&#8239;(Hz) - 3,800&#8239;Hz) / 2,520&#8239;Hz/V"
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:409
#, no-wrap
msgid "THCAD Connections"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:412
msgid "On the high voltage side:"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:414
msgid "Connect the divided or raw arc voltage to I~N~+ and I~N~-"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:415
msgid "Connect the interconnect cable shield to the Shield connection."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:416
msgid "Connect the other Shield terminal to frame ground."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:418
msgid ""
"Assuming it is connected to a Mesa 7I76E, connect the output to the spindle "
"encoder input:"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:420
msgid "THCAD +5&#8239;V to TB3 Pin 6 (+5 VP)"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:421
msgid "THCAD -5&#8239;V to TB3 Pin 1 (GND)"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:422
msgid "THCAD FOUT+ to TB3 Pin 7 (ENC A+)"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:423
msgid "THCAD FOUT- to TB3 Pin 8 (ENC A-)"
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:424
#, no-wrap
msgid "THCAD Initial Testing"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:427
msgid ""
"Make sure you have the following lines in your ini file (assuming a Mesa "
"7I76E):"
msgstr ""

#. type: delimited block -
#: src/plasma/plasma-cnc-primer.adoc:432
#, no-wrap
msgid ""
"setp hm2_7i76e.0.encoder.00.scale -1\n"
"setp hm2_7i76e.0.encoder.00.counter-mode 1\n"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:439
msgid ""
"Power up your controller and open Halshow (AXIS: Show Homing Configuration), "
"drill down to find the `hm2_7i76e.0.encoder.00.velocity pin`.  With 0 Volts "
"applied, it should be hovering around the 0 Volt frequency (3,800 in our "
"example).  Grab a 9 Volt battery and connect it to I~N~+ and I~N~-.  For a "
"THCAD-10 you can now calculate the expected velocity (26,480 in our "
"hypothetical example).  If you pass this test, then you are ready to "
"configure your LinuxCNC plasma controller."
msgstr ""

#. type: Title ===
#: src/plasma/plasma-cnc-primer.adoc:440
#, no-wrap
msgid "Which Model THCAD To Use"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:443
msgid ""
"The THCAD-5 is useful if you intend to use it for ohmic sensing. There is no "
"doubt the THCAD-10 is the more flexible device and it is easy to alter the "
"scaling. However, there is one caveat that can come into play with some "
"cheaper plasma cutters with an inbuilt voltage divider. That is, the "
"internal resistors may be sensed by the THCAD as being part of its own "
"external resistance and return erroneous results. For example, the 16:1 "
"divider on the Everlast plasma cutters needs to be treated as 24:1 (and 50:1 "
"becomes 75:1). This is not a problem with more reputable brands (e.g., "
"Thermal Dynamics, Hypertherm, ESAB etc). So if you are seeing lower than "
"expected cutting voltages, it might be preferable to reconfigure the THCAD "
"to read raw arc voltage."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:445
msgid ""
"Remembering that plasma arc voltages are potentially lethal, here are some "
"suggested criteria."
msgstr ""

#. type: Block title
#: src/plasma/plasma-cnc-primer.adoc:446
#, no-wrap
msgid "Pilot Arc Start"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:449
msgid ""
"Because there is not likely to be any significant EMI, you should be able to "
"safely install the THCAD in your control panel if you have followed our "
"construction guidelines."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:451
msgid ""
"If you do not have a voltage divider, either install scaling resistors "
"inside the plasma cutter and install the THCAD in the control panel or "
"follow the suggestions for HF start machines."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:452
msgid ""
"If you have a voltage divider, install a THCAD-10 in your control panel. "
"We've had no problems with this configuration with a 120&thinsp;A Thermal "
"Dynamics plasma cutter."
msgstr ""

#. type: Block title
#: src/plasma/plasma-cnc-primer.adoc:453
#, no-wrap
msgid "HF Start"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:456
msgid ""
"Install the THCAD at the inverter as the frequency signal is far more immune "
"to EMI noise."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:458
msgid ""
"If you do not have a voltage divider and you have room inside the plasma "
"cutter, install a THCAD-300 inside the plasma cutter."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:459
msgid ""
"If you do not have a voltage divider and you do not have room inside the "
"plasma cutter, install a THCAD-10 in a metal case outside the plasma cutter "
"and install 50% of the scaling resistance on each of the I~N~+ and I~N~- "
"inside the plasma cutter case so no lethal voltages come out of the case."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:460
msgid ""
"If you have a voltage divider, install a THCAD-10 in a metal case outside "
"the plasma cutter"
msgstr ""

#. type: Block title
#: src/plasma/plasma-cnc-primer.adoc:461
#, no-wrap
msgid "Raw Arc voltage presented on a connector"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:464
msgid ""
"In this case, regardless of the arc starting method, there are probably "
"already resistors included in the circuitry to avoid lethal shocks so a "
"THCAD-10 is advised so this resistance (typically 200&thinsp;k&ohm;) can be "
"accounted for when choosing a scaling resistor as these resistors will "
"distort the voltage reported by the THCAD-300."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:465
#, no-wrap
msgid "Post Processors And Nesting"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:468
msgid "Plasma is no different to other CNC operations in that it is:"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:470
msgid "Designed in CAD (where it is output as a DXF or sometimes SVG format)."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:471
msgid "Processed in CAM to generate final G-code that is loaded to the machine"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:472
msgid "Cutting the parts via CNC G-code commands."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:474
msgid ""
"Some people achieve good results with Inkscape and G-code tools but SheetCam "
"is a very well priced solution and there are a number of post processors "
"available for LinuxCNC. SheetCam has a number of advanced features designed "
"for plasma cutting and for the price, is a no brainer for anybody doing "
"regular plasma cutting."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:475
#, no-wrap
msgid "Designing For Noisy Electrical Environments"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:478
msgid ""
"Plasma cutting is inherently an extremely hostile and noisy electrical "
"environment. If you have EMI problems things won't work correctly. You might "
"fire the torch and the computer will reboot in a more obvious example, but "
"you can have any number of other odd symptoms. They will pretty much all "
"happen only when the torch is cutting - often when it is first fired."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:481
msgid ""
"Therefore, system builders should select components carefully and design "
"from the ground up to cope with this hostile environment to avoid the impact "
"of Electro-Magnetic Interference (EMI).  Failure to do this could result in "
"countless hours of fruitless troubleshooting."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:489
msgid ""
"Choosing ethernet boards such as the Mesa 7I76E or the cheaper 7I96 helps by "
"allowing the PC to be located away from the electronics and the plasma "
"machine.  This hardware also allows the use of 24 Volt logic systems which "
"are much more noise tolerant.  Components should be mounted in a metal "
"enclosure connected to the mains earth.  It is strongly recommended that an "
"EMI filter is installed on the mains power connection.  The simplest way is "
"to use a EMI filtered mains power IEC connector commonly used on PC's and "
"electric appliances which allows this to be achieved with no extra work.  "
"Plan the layout of components in the enclosure so that mains power, high "
"voltage motor wires and logic signals are kept as separate as possible from "
"each other.  If they do have to cross, keep them at 90 degrees."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:491
msgid ""
"Peter Wallace from Mesa Electronics suggests: \"If you have a CNC compatible "
"plasma source with a voltage divider, I would mount the THCAD inside your "
"electronics enclosure with all the other motion hardware. If you have a "
"manual plasma source and you are reading raw plasma voltage, I would mount "
"the THCAD as close to the plasma source as possible (even inside the plasma "
"source case if it fits.) In this case, make sure that all low side THCAD "
"connections are fully isolated from the plasma source. If you use a shielded "
"box for the THCAD, the shield should connect to your electronic enclosure "
"ground, not the plasma source ground.\""
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:493
msgid ""
"It is recommended to run a separate earth wire from motor cases and the "
"torch back to a central star grounding point on the machine. Connect the "
"plasma ground lead to this point and optionally an earth rod driven into the "
"ground as close as possible to the machine (particularly if its a HF start "
"plasma machine)."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:495
msgid ""
"External wiring to motors should be shielded and appropriately sized to "
"handle the current passing through the circuit. The shield should be left "
"unconnected at the motor end and earthed at the control box end. Consider "
"using an additional pin on any connectors into the control box so the earth "
"can be extended through into the control box and earthed to the chassis "
"right at the stepper/servo motor controller itself."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:497
msgid ""
"We are aware of at least one commercial system builder who has had problems "
"with induced electrical noise on the ohmic sensing circuit. Whilst this can "
"be mitigated by using ferrite beads and coiling the cable, adding a feed "
"through power line filter is also recommended where the ohmic sensing signal "
"enters the electronics enclosure."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:499
msgid ""
"Tommy Berisha, the master of building plasma machines on a budget says: “If "
"on a budget, consider using old laptop power bricks. They are very good, "
"filtering is good, completely isolated, current limited (this becomes very "
"important when something goes wrong), and fitting 2 or 3 of them in series "
"is easy as they are isolated ( be aware that some do have the grounding "
"wired to the negative output terminal, so. It has to be disconnected, simply "
"done by using a power cable with no ground contacts)\"."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:500
#, no-wrap
msgid "Water Tables"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:503
msgid ""
"The minimum water level under the cut level of the torch should be around "
"40&#8239;mm, having space under slats is nice so the water can level and "
"escape during cutting, having a bit of water above the metal plate being cut "
"is really nice as it gets rid of the little bit of dust, running it "
"submerged is the best way but not preferable for systems with part time use "
"as it will corrode the torch. Adding baking soda to the water will keep the "
"table in a nice condition for many years as it does not allow corrosion "
"while the slats are under water and it also reduces the smell of water "
"vapour. Some people use a water reservoir with a compressed air inlet so "
"they can push the water from the reservoir up to the water table on demand "
"and thus allow changes in water levels."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:504
#, no-wrap
msgid "Downdraft Tables"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:507
msgid ""
"Many commercial tables utilise a down draft design so fans are used to suck "
"air down through the slats to capture fumes and sparks. Often tables are "
"zoned so only a section below the torch is opened to the outgoing vent, "
"often using air rams and air solenoids to open shutters. Triggering these "
"zones is relatively straightforward if you use the axis or joint position "
"from one of the motion pins and the lincurve component to map downdraft "
"zones to the correct output pin."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:508
#, no-wrap
msgid "Designing For Speed And Acceleration"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:511
msgid ""
"In plasma cutting, speed and acceleration are king. The higher the "
"acceleration, the less the machine needs to slow down when negotiating "
"corners. This implies that the gantry should be as light as possible without "
"sacrificing torsional stiffness. A 100&#8239;mm x 100&#8239;mm x 2&#8239;mm "
"aluminium box section has equivalent torsional stiffness to an 80&#8239;mm x "
"80&#8239;mm T slot extrusion yet is 62% lighter. So does the convenience of "
"T slots outweigh the additional construction?"
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:512
#, no-wrap
msgid "Distance Travelled Per Motor Revolution"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:517
msgid ""
"Stepper motors suffer from resonance and a direct drive pinion is likely to "
"mean that the motor is operating under unfavourable conditions.  Ideally, "
"for plasma machines a distance of around 15-25&thinsp;mm per motor "
"revolution is considered ideal but even around 30&thinsp;mm per revolutions "
"is still acceptable.  A 5&thinsp;mm pitch ball screw with a 3:1 or 5:1 "
"reduction drive is ideal for the Z axis."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:518
#, no-wrap
msgid "QtPlasmaC LinuxCNC Plasma Configuration"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:521
msgid ""
"The link:./qtplasmac.html[QtPlasmaC] which is comprised of a HAL component "
"(plasmac.hal) plus a complete configurations for the QtPlasmaC GUI has "
"received considerable input from many in the LinuxCNC Open Source movement "
"that have advanced the understanding of plasma controllers since about 2015. "
"There has been much testing and development work in getting QtPlasmaC to its "
"current working state. Everything from circuit design to G-code control and "
"configuration has been included. Additionally, QtPlasmaC supports external "
"THC's such as the Proma 150 but really comes into its own when paired with a "
"Mesa controller as this allows the integrator to include the Mesa THCAD "
"voltage to frequency converter which is purpose built to deal with the "
"hostile plasma environment."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:523
msgid ""
"QtPlasmaC is designed to stand alone and includes the ability to include "
"your cutting charts yet also includes features to be used with a post "
"processor like SheetCam."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:525
msgid ""
"The QtPlasmaC system is now included in Version 2.9 and above of LinuxCNC. "
"Its now quite mature and has been significantly enhanced since the first "
"version of this guide was written. QtPlasmaC will define LinuxCNC's plasma "
"support for many years to come as it includes all of the features a "
"proprietary high end plasma control system at an open source price."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:526
#, no-wrap
msgid "Hypertherm RS485 Control"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:532
msgid ""
"Some Hypertherm plasma cutters have a RS485 interface to allow the "
"controller (e.g., LinuxCNC) to set amps.pressure and mode.  A number of "
"people have used a userspace component written in Python to achieve this.  "
"More recently, QtPlasmaC now supports this interface natively.  Refer to the "
"QtPlasmaC documentation for how to use it."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:534
msgid ""
"The combination of a slow baud rate used by Hypertherm and the userspace "
"component, make this fairly slow to alter machine states so it generally not "
"viable to change settings on the fly while cutting."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:536
msgid ""
"When selecting a RS485 interface to use at the PC end, users have reported "
"that USB to RS485 interfaces are not reliable. Good reliable results have "
"been achieved using a hardware based RS232 interface (eg PCI/PCIe or "
"motherboard port) and an appropriate RS485 converter. Some users have "
"reported success with a Sunix P/N: SER5037A PCI RS2322 card a generic XC4136 "
"RS232 to RS485 converter (which may sometimes include a USB cable as well)."
msgstr ""

#. type: Title ==
#: src/plasma/plasma-cnc-primer.adoc:537
#, no-wrap
msgid "Post Processors For Plasma Cutting"
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:540
msgid ""
"CAM programs (Computer Aided Manufacture) are the bridge between CAD "
"(Computer Aided Design) and the final CNC (Computer Numerical Control) "
"operation. They often include a user configurable post processor to define "
"the code that is generated for a specific machine or dialect of G-code."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:542
msgid ""
"Many LinuxCNC users are perfectly happy with using Inkscape to convert .SVG "
"vector based files to G-code. If you are using a plasma for hobby or home "
"use, consider this option. However, if your needs are more complex, probably "
"the best and most reasonably priced solution is SheetCam. SheetCam supports "
"both Windows and Linux and post processors are available for it including "
"the QtPlasmaC configuration. SheetCam allows you to nest parts over a full "
"sheet of material and allows you to configure toolsets and code snippets to "
"suit your needs. SheetCam post processors are text files written in the Lua "
"programming language and are generally easy to modify to suit your exact "
"requirements. For further information, consult the https://sheetcam."
"com[SheetCam web site] and their support forum."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:544
msgid ""
"Another popular post-processor is included with the popular Fusion360 "
"package but the included post-processors will need some customisation."
msgstr ""

#. type: Plain text
#: src/plasma/plasma-cnc-primer.adoc:546
msgid ""
"LinuxCNC is a CNC application and discussions of CAM techniques other than "
"this introductory discussion are out of scope of LinuxCNC."
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:13
#, no-wrap
msgid "Preamble"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:16
#, no-wrap
msgid "*Except where noted, this guide assumes the user is using the latest version of QtPlasmaC. Version history can be seen by visiting this http://htmlpreview.github.io/?https://github.com/LinuxCNC/linuxcnc/blob/master/share/qtvcp/screens/qtplasmac/versions.html[link] which will show the latest available version. The installed QtPlasmaC version is displayed in the title bar. See <<qt_update, Update QtPlasmaC>> for information on updating QtPlasmaC.*\n"
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:17
#, no-wrap
msgid "License"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:20
msgid "QtPlasmaC and all of its related software are released under GPLv2."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:24
msgid ""
"QtPlasmaC is a GUI for plasma cutting which utilises the http://linuxcnc.org/"
"docs/devel/html/man/man9/plasmac.9.html[plasmac component] for controlling a "
"plasma table from LinuxCNC v2.9 or later using the Debian Buster or similar "
"distribution."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:26
msgid ""
"The QtPlasmaC GUI supports up to five axes and uses the QtVCP infrastructure "
"provided with LinuxCNC."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:28
msgid ""
"The standard theme is based on a design by user \"pinder\" on the LinuxCNC "
"Forum and the colors are able to be changed by the user."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:30
msgid ""
"The QtPlasmaC GUI will run on any hardware that is supported by LinuxCNC "
"provided there are enough hardware I/O pins to fulfill the requirements of a "
"plasma configuration."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:32
msgid "There are three available formats:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:35
msgid "16:9 with a minimum resolution of 1366 x 768"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:36
msgid "9:16 with a minimum resolution of 768 x 1366"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:37
msgid "4:3 with a minimum resolution of 1024 x 768"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:39
msgid "Screenshot examples of QtPlasmaC are below:"
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:40
#, no-wrap
msgid "*16:9*"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:41 src/plasma/qtplasmac.adoc:745
#, no-wrap
msgid "images/qtplasmac_16x9.png"
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:43
#, no-wrap
msgid "*9:16*"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:44
#, no-wrap
msgid "images/qtplasmac_9x16.png"
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:46
#, no-wrap
msgid "*4:3*"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:47
#, no-wrap
msgid "images/qtplasmac_4x3.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:52
msgid ""
"The preferred method for installing LinuxCNC is via an ISO image as "
"described below."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:55
msgid ""
"It is possible to install and run LinuxCNC on a variety of Linux "
"distributions however that is beyond the scope of this User Guide. If the "
"user wishes to install a Linux distribution other than those recommended, "
"they will first need to install their preferred Linux distribution and then "
"install LinuxCNC v2.9 or later along with any required dependencies."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:56
#, no-wrap
msgid "If The User Does Not Have Linux Installed"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:59
msgid ""
"Installation instructions are available at: link:../getting-started/getting-"
"linuxcnc.html"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:61
msgid ""
"Following these instructions will yield a machine with the current stable "
"branch (v2.8) of LinuxCNC on Debian Buster."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:62
#, no-wrap
msgid "Package Installation (Buildbot) If The User Has Linux with LinuxCNC v2.8"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:65
msgid ""
"A package installation (Buildbot) uses prebuilt packages from the LinuxCNC "
"Buildbot, instructions for upgrading from 2.8 to 2.9 are available at: "
"http://buildbot.linuxcnc.org"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:67
msgid ""
"Following these instructions by using the below stanzas will upgrade the "
"machine to the last LinuxCNC Buildbot build master branch (v2.9) of "
"LinuxCNC. This may not always be the latest version of master branch (v2.9) "
"as from time to time the LinuxCNC Buildbot may stop due to errors."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:71
#, no-wrap
msgid ""
"deb     http://buildbot.linuxcnc.org/ buster master-rtpreempt\n"
"deb-src http://buildbot.linuxcnc.org/ buster master-rtpreempt\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:73
#, no-wrap
msgid "Run In Place Installation If The User Has Linux with LinuxCNC v2.8"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:76
msgid ""
"A run in place installation runs LinuxCNC from a locally compiled version "
"usually located at ~/linuxcnc-dev, instructions for building a run in place "
"installation are available at: link:../code/building-linuxcnc.html"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:78
msgid ""
"Following these instructions will install the latest master branch (v2.9) of "
"LinuxCNC."
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:79
#, no-wrap
msgid "Creating A QtPlasmaC Configuration"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:82
msgid ""
"Prior to creating a QtPlasmaC configuration, it is important that the user "
"has a firm understanding of the operating modes available, as well as the I/"
"O's that are required for successful plasma operation."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:84 src/plasma/qtplasmac.adoc:116
#: src/plasma/qtplasmac.adoc:833 src/plasma/qtplasmac.adoc:846
#: src/plasma/qtplasmac.adoc:1023 src/plasma/qtplasmac.adoc:1107
#, no-wrap
msgid "Modes"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:87
msgid ""
"QtPlasmaC requires the selection of one of following three operating modes:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:91
#, no-wrap
msgid "*Description*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:92
#, no-wrap
msgid "Uses an external arc voltage input to calculate both Arc Voltage (for Torch Height Control) and Arc OK."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:94
#, no-wrap
msgid ""
"Uses an external arc voltage input to calculate Arc Voltage (for Torch Height Control). +\n"
"   Uses an external Arc OK input for Arc OK."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:96
#, no-wrap
msgid ""
"Uses an external Arc OK input for Arc OK. +\n"
"   Use external up/down signals for Torch Height Control."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:103
msgid ""
"If the plasma power source has an Arc OK (Transfer) output then it is "
"recommended to use that for Arc OK rather than the soft (calculated) Arc OK "
"provided by mode 0.  It may also be possible to use a <<qt_reed-arc-ok,reed "
"relay>> as an alternative method to establish an Arc OK signal when the "
"power source does not provide one."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:107
msgid ""
"For fine tuning of Mode 0 Ark OK see <<mode0-arcok,Tuning Mode 0 Arc OK>> in "
"the Advanced Topics section of the manual."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:108
#, no-wrap
msgid "Available I/Os"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:113
msgid ""
"This section only touches on the hardware I/O's required for QtPlasmaC.  "
"Base machine requirements such as limit switches, home switches, etc. are in "
"addition to these."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:117 src/plasma/qtplasmac.adoc:834
#, no-wrap
msgid "Arc Voltage"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:117 src/plasma/qtplasmac.adoc:834
#: src/plasma/qtplasmac.adoc:836 src/plasma/qtplasmac.adoc:837
#: src/plasma/qtplasmac.adoc:838 src/plasma/qtplasmac.adoc:854
#: src/plasma/qtplasmac.adoc:855 src/plasma/qtplasmac.adoc:863
#: src/plasma/qtplasmac.adoc:1027 src/plasma/qtplasmac.adoc:1029
#: src/plasma/qtplasmac.adoc:1110 src/plasma/qtplasmac.adoc:1112
#: src/plasma/qtplasmac.adoc:1114 src/plasma/qtplasmac.adoc:1117
#: src/plasma/qtplasmac.adoc:1118 src/plasma/qtplasmac.adoc:1119
#, no-wrap
msgid "0, 1"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:121
#, no-wrap
msgid ""
"Analog input; *optional.* +\n"
"    HAL pin name plasmac.arc-voltage-in +\n"
"    Connected to the velocity output of an encoder equipped breakout board.\n"
"    This signal is used to read the arc voltage to determine the necessary corrections to maintain the torch distance from the work piece during cutting."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:121
#, no-wrap
msgid "Arc OK"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:121
#, no-wrap
msgid "1, 2"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:125
#, no-wrap
msgid ""
"Digital input; *optional.* +\n"
"    HAL pin name plasmac.arc-ok-in +\n"
"    Connected from the Arc OK output of the plasma power source to an input on the breakout board.\n"
"    This signal is used to determine if the cutting arc has been established and it is ok for the machine to move (sometimes called arc transfer)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:125 src/plasma/qtplasmac.adoc:476
#, no-wrap
msgid "Float Switch"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:125 src/plasma/qtplasmac.adoc:131
#: src/plasma/qtplasmac.adoc:137 src/plasma/qtplasmac.adoc:140
#: src/plasma/qtplasmac.adoc:144 src/plasma/qtplasmac.adoc:156
#: src/plasma/qtplasmac.adoc:160 src/plasma/qtplasmac.adoc:164
#: src/plasma/qtplasmac.adoc:835 src/plasma/qtplasmac.adoc:847
#: src/plasma/qtplasmac.adoc:848 src/plasma/qtplasmac.adoc:852
#: src/plasma/qtplasmac.adoc:853 src/plasma/qtplasmac.adoc:856
#: src/plasma/qtplasmac.adoc:864 src/plasma/qtplasmac.adoc:872
#: src/plasma/qtplasmac.adoc:874 src/plasma/qtplasmac.adoc:876
#: src/plasma/qtplasmac.adoc:1024 src/plasma/qtplasmac.adoc:1025
#: src/plasma/qtplasmac.adoc:1026 src/plasma/qtplasmac.adoc:1031
#: src/plasma/qtplasmac.adoc:1108 src/plasma/qtplasmac.adoc:1115
#: src/plasma/qtplasmac.adoc:1116
#, no-wrap
msgid "0, 1, 2"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:131
#, no-wrap
msgid ""
"Digital input; *optional, see info below table:* +\n"
"    HAL pin name plasmac.float-switch +\n"
"    Connected from a breakout board input to a switch on the floating head.\n"
"    This signal is used to mechanically probe the work piece with the torch and set Z zero at the top of the work piece. +\n"
"    If used and no ohmic probe is configured, this is the probing method. +\n"
"    If used and an ohmic probe is configured, this is the fallback probing method."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:131 src/plasma/qtplasmac.adoc:477
#, no-wrap
msgid "Ohmic Probe"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:137
#, no-wrap
msgid ""
"Digital input; *optional, see info below table:* +\n"
"    HAL pin name plasmac.ohmic-probe +\n"
"    Connected from to the ohmic probe's output to a breakout board input.\n"
"    This signal is used to probe electronically by completing a circuit using the work piece and the torch consumables and set Z zero at the top of the work piece. +\n"
"    If used, this is the primary probing method.\n"
"    If an ohmic probe fails to locate the work piece, and there is no float switch is present, probing will continue until the torch breaks away or the minimum Z limit is reached."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:137
#, no-wrap
msgid "Ohmic Probe Enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:140
#, no-wrap
msgid ""
"Digital output; *optional, see info below table:* +\n"
"    HAL pin name plasmac.ohmic-enable +\n"
"    Connected from a breakout board output to an input to control the ohmic probe's power."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:140 src/plasma/qtplasmac.adoc:478
#, no-wrap
msgid "Breakaway Switch"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:144
#, no-wrap
msgid ""
"Digital input; *optional, see info below table:* +\n"
"    HAL pin name plasmac.breakaway +\n"
"    Connected from a breakout board input to a torch breakaway detection switch. +\n"
"    This signal senses if the torch has broken away from its cradle."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:144
#, no-wrap
msgid "Torch On"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:148
#, no-wrap
msgid ""
"Digital output; *required.* +\n"
"    HAL pin name plasmac.torch-on +\n"
"    Connected from a breakout board output to the torch-on input of the plasma power supply.\n"
"    This signal is used to control the plasma power supply and start the arc."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:148
#, no-wrap
msgid "Move Up"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:152
#, no-wrap
msgid ""
"Digital input; *optional.* +\n"
"    HAL pin name plasmac.move-up +\n"
"    Connected from the up output of the external THC control to a break out board input.\n"
"    This signal is used to control the Z axis in an upward motion and make necessary corrections to maintain the torch distance from the work piece during cutting."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:152
#, no-wrap
msgid "Move Down"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:156
#, no-wrap
msgid ""
"Digital input; *optional.* +\n"
"    HAL pin name plasmac.move-down +\n"
"    Connected from the down output of the external THC control to a break out board input.\n"
"    This signal is used to control the Z axis in a downward motion and make necessary corrections to maintain the torch distance from the work piece during cutting."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:156
#, no-wrap
msgid "Scribe Arming"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:160
#, no-wrap
msgid ""
"Digital output; *optional.* +\n"
"    HAL pin name plasmac.scribe-arm +\n"
"    Connected from a breakout board output to the scribe arming circuit.\n"
"    This signal is used to place the scribe into position on the work piece ."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:160
#, no-wrap
msgid "Scribe On"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:164
#, no-wrap
msgid ""
"Digital output; *optional.* +\n"
"    HAL pin name plasmac.scribe-on +\n"
"    Connected from a breakout board output to the scribe-on circuit.\n"
"    This signal is used to turn the scribing device on."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:164
#, no-wrap
msgid "Laser On"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:167
#, no-wrap
msgid ""
"Digital output; *optional.* +\n"
"    HAL pin name qtplasmac.laser_on +\n"
"    This signal is used to turn the alignment laser on."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:170
msgid ""
"Only one of either *Float Switch* or *Ohmic Probe* is required. If both are "
"used then *Float Switch* will be a fallback if *Ohmic Probe* is not sensed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:172
msgid ""
"If *Ohmic Probe* is used then *Ohmic Probe Enable* is required to be checked "
"on the QtPlasmaC GUI."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:174
#, no-wrap
msgid "*Breakaway Switch* is not mandatory because the *Float Switch* is treated the same as a breakaway when not probing. If they are two separate switches, and there are not enough inputs on the breakout board, they could be combined and connected as a *Float Switch*.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:177
msgid ""
"The minimum I/O requirement for a QtPlasmaC configuration to function are: "
"*Arc Voltage* input OR *Arc OK* input, *Float Switch* input, and *Torch On* "
"output. To reiterate, in this case QtPlasmaC will treat the float switch as "
"a breakaway switch when it is not probing."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:179
#, no-wrap
msgid "Recommended Settings:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:182
msgid ""
"Refer to the <<qt_initial-setup,Heights Diagram>> diagram for a visual "
"representation of the terms below."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:188
#, no-wrap
msgid ""
"*[AXIS_Z] MIN_LIMIT* should be just below top of the slats with\n"
"allowances for float_switch_travel and over travel tolerance. For example,\n"
"if the user's float switch takes 4mm (0.157\") to activate then set the Z\n"
"minimum to 5mm (0.2\") plus an allowance for overrun (either calculated\n"
"using the equation below or allow 5mm (0.2\") below the lowest slat).\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:190
#, no-wrap
msgid ""
"*[AXIS_Z] MAX_LIMIT* should be the highest the user wants the Z axis\n"
"to travel (it must not be lower than Z HOME_OFFSET).\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:192
#, no-wrap
msgid ""
"*[AXIS_Z] HOME* should be set to be approximately 5mm-10mm (0.2\"-0.4\")\n"
"below the maximum limit.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:195
#, no-wrap
msgid ""
"*Floating Head* - it is recommended that a floating head be used and\n"
"that it has enough movement to allow for overrun during probing. Overrun\n"
"can be calculated using the following formula:\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:198
#, no-wrap
msgid "o = 0.5 * a * (v / a)^2\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:201
msgid ""
"where: o = overrun, a = acceleration in units/sec2 and v = velocity in units/"
"sec."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:203
msgid ""
"Metric example: given a Z axis MAX_ACCELERATION of 600&thinsp;mm/s^2^ and "
"MAX_VELOCITY of 60&thinsp;mm/s, the overrun would be 3&thinsp;mm."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:205
msgid ""
"Imperial example: given a Z axis MAX_ACCELERATION of 24&thinsp;in/s^2^ and "
"MAX_VELOCITY of 2.4&thinsp;in/s, the overrun would be 0.12&thinsp;in."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:207
msgid ""
"On machines that will utilize an ohmic probe as the primary method of "
"probing, it is highly recommended to install a switch on the floating head "
"as a backup means of stopping Z motion in the event of ohmic probe failure "
"due to dirty surfaces."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:209
#, no-wrap
msgid "Configuring"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:212
msgid ""
"LinuxCNC provides two configuration wizards which can be used to build a "
"machine configuration. The choice of these wizards is dependent on the "
"hardware used to control the machine."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:214
msgid ""
"If the user wishes to use a Run In Place installation then prior to running "
"one of the following commands they will need to run the following command "
"from a terminal:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:217
#, no-wrap
msgid "source ~/linuxcnc-dev/scripts/rip-environment\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:220
msgid "If using a Package installation then no additional action is required."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:222
msgid ""
"If using a parallel port, use the <<cha:stepconf-wizard,StepConf wizard>> "
"(enter the following command into a terminal window):"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:225
#, no-wrap
msgid "stepconf\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:228
msgid ""
"If using a Mesa Electronics board, use the <<cha:pncconf-wizard,PnCconf "
"wizard>> (enter the following command into a terminal window):"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:231
#, no-wrap
msgid "pncconf\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:235
#, no-wrap
msgid ""
"If using a Pico Systems board:\n"
"https://forum.linuxcnc.org/27-driver-boards/14977-pico-systems-faq[This LinuxCNC forum thread] may be helpful."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:237
msgid ""
"The machine specific settings are not described here, refer to the "
"documentation for the particular configuration wizard that is being used."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:239
msgid "There are LinuxCNC forum sections available for these wizards:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:241
msgid "https://forum.linuxcnc.org/16-stepconf-wizard()[StepConf Wizard]"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:243
msgid "https://forum.linuxcnc.org/39-pncconf[PnCconf Wizard]"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:245
msgid ""
"Fill in the required entries to suit the machine wiring/breakout board "
"configuration."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:251
msgid ""
"QtPlasmaC adds two pages to the LinuxCNC configuration wizards for QtPlasmaC "
"specific parameters, the two pages are QtPlasmaC options and <<qt_custom-"
"user-buttons,User Buttons>>. Complete each of the wizards QtPlasmaC page to "
"suit the machine that is being configured and the user button requirements."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:255
msgid ""
"Note that PnCconf options allow user selection of Feed Override, Linear "
"Velocity, and Jog Increments whereas in StepConf these are automatically "
"calculated and set."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:257
#, no-wrap
msgid "*PnCconf QtPlasmaC Options:*\n"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:258
#, no-wrap
msgid "images/qtplasmac_pncconf_screen.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:261
#, no-wrap
msgid "*StepConf QtPlasmaC Options:*\n"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:262
#, no-wrap
msgid "images/qtplasmac_stepconf_options.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:265
#, no-wrap
msgid "*QtPlasmaC User Buttons:*\n"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:266
#, no-wrap
msgid "images/qtplasmac_pncconf_buttons.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:269
#, no-wrap
msgid "*QtPlasmaC THCAD:*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:271
msgid ""
"The THCAD screen will only appear if a Plasma Encoder is selected in the "
"card screen."
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:272
#, no-wrap
msgid "images/qtplasmac_pncconf_thcad.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:275
msgid "More information on <<qt_mesa-thcad,Mesa THCAD>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:277
msgid ""
"When the configuration is complete, the wizard will save a copy of the "
"configuration that may be loaded and edited at a later time, a working "
"QtPlasmaC configuration will be created in the following directory: ~/"
"linuxcnc/configs/_<machine_name>_."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:279
msgid ""
"The newly created QtPlasmaC configuration can be run by entering the "
"following command into a terminal window (*change \"<machine_name>\" to the "
"machine name entered into the configuration wizard*):"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:281
msgid "For a package installation (Buildbot):"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:284
#, no-wrap
msgid "linuxcnc ~/linuxcnc/configs/<machine_name>/<machine_name>.ini\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:287
msgid "For a run in place installation:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:290
#, no-wrap
msgid "~/linuxcnc-dev/scripts/linuxcnc ~/linuxcnc/configs/<machine_name>/<machine_name>.ini\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:293
msgid ""
"After running the above command LinuxCNC should be running with the "
"QtPlasmaC GUI visible."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:295
msgid ""
"BEFORE PROCEEDING, THE USER SHOULD BE ABLE TO HOME THE MACHINE, ZERO EACH "
"AXIS, JOG ALL AXES TO SOFT LIMITS WITHOUT CRASHING, AND RUN TEST G-CODE "
"PROGRAMS WITHOUT ANY ERRORS."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:297
msgid ""
"ONLY WHEN this criteria is met should the user proceed with the QtPlasmaC "
"initial setup."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:300
msgid ""
"It is possible to create a sim configuration using StepConf but it is not "
"possible to have tandem joints in the sim configuration."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:302
#, no-wrap
msgid "Qt Dependency Errors"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:305
msgid ""
"If any Qt dependency errors are encountered while attempting to run the "
"QtPlasmaC configuration, the user may need to run the QtVCP installation "
"script to resolve these issues."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:307 src/plasma/qtplasmac.adoc:1586
#: src/plasma/qtplasmac.adoc:3812
msgid ""
"For a package installation (Buildbot) enter the following command in a "
"terminal window:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:310
#, no-wrap
msgid "/usr/lib/python3/dist-packages/qtvcp/designer/install_script\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:313
msgid ""
"For a run in place installation enter the following command in a terminal "
"window:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:316
#, no-wrap
msgid "~/linuxcnc-dev/lib/python/qtvcp/designer/install_script\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:319
#, no-wrap
msgid "Initial Setup"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:322
msgid ""
"The following heights diagram will help the user visualize the different "
"heights involved in plasma cutting and how they are measured:"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:323
#, no-wrap
msgid "images/qtplasmac_heights_diagram.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:326
msgid ""
"Click on the <<qt_parameters-tab,Parameters Tab>> to view the "
"*CONFIGURATION* section which shows the user settable parameters. It is "
"necessary to ensure every one of these settings is tailored to the machine."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:328
msgid ""
"To set the Z axis DRO relative to the Z axis MINIMUM_LIMIT, the user should "
"perform the following steps. It is important to understand that in "
"QtPlasmaC, touching off the Z axis DRO has no effect on the Z axis position "
"while running a G-code program. These steps simply allow the user to more "
"easily set the probe height as after performing the steps, the displayed Z "
"axis DRO value will be relative to Z axis MINIMUM_LIMIT."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:330
msgid ""
"The user should be familiar with the recommended <<qt_z-settings, Z Axis "
"Settings>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:331
msgid "Home the Z axis."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:332
msgid ""
"Ensure there is nothing below the torch then jog the Z axis down until it "
"stops at the Z axis MINIMUM_LIMIT then click the 0 next to the Z axis DRO to "
"*Touch Off* with the Z axis selected to set the Z axis at zero offset. This "
"step only serves to allow the user to more easily visualize and adjust "
"*Probe Height* this value is measured from the Z axis MINIMUM_LIMIT up."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:333
msgid "Home the Z axis again."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:336
msgid ""
"If the machine is equipped with a float switch then the user will need to "
"set the offset in the *CONFIGURATION* section of the *PARAMETERS* tab. This "
"will be done by running a \"Probe Test\" cycle."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:338
msgid ""
"Check that the Probe Speed and the Probe Height in the *CONFIGURATION* "
"section of the *PARAMETERS* tab are correct. QtPlasmaC can probe at the full "
"Z axis velocity so long as the machine has enough movement in the float "
"switch to absorb any overrun. If the machine is suitable, the user could set "
"the Probe Height to a value near the Z axis minimum and do all probing at "
"full speed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:339
msgid ""
"If the machine is not already homed and in the home position, home the "
"machine."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:340
msgid "Place some material on the slats under the torch."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:341
msgid "Press the *PROBE TEST* button."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:342
msgid ""
"The Z axis will probe down, find the material then move up to the specified "
"*Pierce Height* as set by the currently selected material. The torch will "
"wait in this position for the time set in the <machine_name>.prefs file. The "
"default probe test hold time is 10 seconds, this value may be edited in the "
"<machine_name>.prefs file. After this the torch will return to the starting "
"height."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:343
msgid ""
"Measure the distance between the material and the tip of the torch while the "
"torch is waiting at *Pierce Height*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:344
msgid ""
"If the measurement is greater than the *Pierce Height* of the currently "
"selected material, then reduce the \"Float Travel\" in the *CONFIGURATION* "
"section of the *PARAMETERS* tab by the difference between the measured value "
"and the specified value. If the measurement is less than *Pierce Height* of "
"the currently selected material, then increase the \"Float Travel\" in the "
"*CONFIGURATION* section of the *PARAMETERS* tab by the difference between "
"the specified value and the measured value."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:345
msgid ""
"After the adjustments to the \"Float Travel\" have been made, repeat the "
"process from #4 above until the measured distance between the material and "
"the torch tip matches the *Pierce Height* of the currently selected material."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:346
msgid ""
"If the table has a laser or camera for sheet alignment, a scribe, or uses "
"offset probing then the required offsets need to be applied by following the "
"procedure described in <<peripheral-offsets,Peripheral Offsets>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:347
msgid ""
"CONGRATULATIONS! The user should now have a working QtPlasmaC Configuration."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:350 src/plasma/qtplasmac.adoc:1055
msgid ""
"If the amount of time between the torch contacting the material and when the "
"torch moves up and comes to rest at the Pierce Height seems excessive, see "
"<<qt_probing,the probing section>> for a possible solution."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:353
msgid ""
"IF USING A *Mesa Electronics THCAD* THEN THE *Voltage Scale* VALUE WAS "
"OBTAINED MATHEMATICALLY. IF THE USER INTENDS TO USE CUT VOLTAGES FROM A "
"MANUFACTURE'S CUT CHART THEN IT WOULD BE ADVISABLE TO DO MEASUREMENTS OF "
"ACTUAL VOLTAGES AND FINE TUNE THE *Voltage Scale* AND *Voltage Offset*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:356
msgid ""
"PLASMA CUTTING VOLTAGES CAN BE LETHAL, IF THE USER IS NOT EXPERIENCED IN "
"DOING THESE MEASUREMENTS GET SOME QUALIFIED HELP."
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:358
#, no-wrap
msgid "Migrating to QtPlasmac From PlasmaC (Axis or Gmoccapy)"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:361
msgid ""
"There are two methods available to get from a working PlasmaC configuration "
"to a new QtPlasmaC configuration. These methods assume the user is on "
"LinuxCNC v2.9 or later, QtVCP is installed, and all dependency requirements "
"are satisfied."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:363
msgid ""
"If there are Qt dependency errors, the user should run the <<qt-dependency,"
"QtVCP install script>>."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:364
#, no-wrap
msgid "Quick Method"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:367
msgid ""
"A quick method to move to QtPlasmaC from PlasmaC (loaded on top of either "
"Axis or Gmoccapy) is to use the plasmac2qt conversion program which will "
"attempt to create a new QtPlasmaC configuration from an existing PlasmaC INI "
"file. This program will convert the user's parameters, settings, and "
"materials from the previous PlasmaC configuration and create a new QtPlasmaC "
"configuration directory in the ~/linuxcnc/configs directory."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:369
msgid ""
"This methods will keep the original PlasmaC config as a backup with _plasmac "
"and a time stamp appended to the directory name."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:371
msgid ""
"To run the plasmac2qt conversion program, use the following instructions:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:373 src/plasma/qtplasmac.adoc:437
msgid ""
"For a package installation (Buildbot) enter the following line in a terminal "
"window:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:376
#, no-wrap
msgid "qtplasmac-plasmac2qt\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:379 src/plasma/qtplasmac.adoc:443
msgid ""
"For a run in place installation enter the following lines in terminal window:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:383
#, no-wrap
msgid ""
"source ~/linuxcnc-dev/scripts/rip-environment\n"
"qtplasmac-plasmac2qt\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:386
msgid "The following screen will be displayed:"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:387
#, no-wrap
msgid "images/qtplasmac_plasmac2qt.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:390
#, no-wrap
msgid "*Mandatory Settings*\n"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:393 src/plasma/qtplasmac.adoc:410
#, no-wrap
msgid "Field"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:394
#, no-wrap
msgid "INI FILE IN EXISTING PLASMAC CONFIG"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:394
#, no-wrap
msgid "This is the INI file of the PlasmaC config that requires migrating."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:395 src/plasma/qtplasmac.adoc:573
#, no-wrap
msgid "<machine_name>.ini"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:395
#, no-wrap
msgid "MONITOR ASPECT RATIO"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:395
#, no-wrap
msgid "This is the <<qt_formats, aspect ratio format>> for the GUI."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:396
#, no-wrap
msgid "16:9"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:396 src/plasma/qtplasmac.adoc:778
#: src/plasma/qtplasmac.adoc:3952
#, no-wrap
msgid "ESTOP"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:399
#, no-wrap
msgid ""
"Selects the required Estop type based on the following criteria: +\n"
"    0 - Estop is an indicator only. +\n"
"    1 - Estop indicator is hidden. +\n"
"    2 - Estop is a button."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:400
#, no-wrap
msgid "ESTOP:1"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:403
#, no-wrap
msgid "*Optional Setting*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:405
msgid ""
"This setting is not required unless the machine has a <<qt_laser,laser>> for "
"sheet alignment."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:407
msgid "Leave this blank if it is not used/required."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:411
#, no-wrap
msgid "Laser On HAL Pin"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:411
#, no-wrap
msgid "Power on a laser crosshair for sheet alignment."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:413
#, no-wrap
msgid ""
"*Parallel Port Example:* parport.0.pin-16-out +\n"
"    *Mesa 7i96 Example:* hm2_7i96.0.ssr.00.out-00"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:416
msgid "After filling in the appropriate entries, press *CONVERT*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:419
msgid ""
"This method will not change any existing debounce components to the new "
"dbounce component. If the user wishes to change to the new dbounce component "
"then the New Base Config method should be used for migration."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:420
#, no-wrap
msgid "New Base Config Method"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:423
msgid ""
"This method to move to QtPlasmaC from PlasmaC (loaded on top of either Axis "
"or Gmoccapy) is to use a <<configuring, configuration wizard>> to create a "
"new configuration. This method then allows changing of the base machine "
"configuration at a later date via the configuration wizard provided that the "
"base ini and base HAL files have not been edited."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:425
msgid ""
"This method requires that the user take note of all HAL pins used in the "
"existing config so they can be entered into the configuration wizard. Any "
"custom HAL commands will also need to be noted and added manually to either "
"the custom.hal file or the custom_postgui.hal file which will be created by "
"the configuration wizard."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:427
msgid ""
"After using the wizard, the user can then run a conversion program "
"(cfg2prefs) to convert the parameters, settings, and materials from the "
"previous PlasmaC configuration to the new QtPlasmaC configuration. This tool "
"should be used immediately after the user has created a new QtPlasmaC "
"configuration."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:429
msgid ""
"Prior to running this conversion program, it is mandatory that the user have "
"both an existing PlasmaC configuration and a new QtPlasmaC configuration. "
"This program WILL overwrite the existing QtPlasmaC preferences and materials "
"files, and should be used with caution if it is not being run on a new "
"QtPlasmaC configuration."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:431
msgid ""
"The program will create a time stamped backup of the original preferences "
"file and the existing materials file (if it exists)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:433
msgid ""
"It will read the existing <machine_name>_config.cfg, <machine_name>_run.cfg, "
"<machine_name>_wizards.cfg, and plasmac_stats.var files and write them to an "
"existing <machine_name>.prefs file. It will also copy the "
"<machine_name>_material.cfg file to the existing QtPlasmaC configuration."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:435
msgid ""
"To run the cfg2prefs conversion program, use the following instructions:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:440
#, no-wrap
msgid "qtplasmac-cfg2prefs\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:447
#, no-wrap
msgid ""
"source ~/linuxcnc-dev/scripts/rip-environment\n"
"qtplasmac-cfg2prefs\n"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:449
#, no-wrap
msgid "images/qtplasmac_cfg2prefs.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:452
msgid ""
"Select the INI file of the old PlasmaC configuration, select the INI file of "
"the new QtPlasmaC configuration, then press *CONVERT*."
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:453
#, no-wrap
msgid "Other QtPlasmaC Setup Considerations"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:456
#, no-wrap
msgid "Lowpass Filter"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:459
msgid ""
"The plasmac HAL component has a built in lowpass filter that if used is "
"applied to the *plasmac.arc-voltage-in* input pin to filter any noise that "
"could cause erroneous voltage readings. The lowpass filter should only be "
"used after using Halscope to determine the required frequency and whether "
"the amplitude of the noise is large enough to cause any issues. For most "
"plasma machines lowpass is not required and should not be used unless it is "
"required."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:461
msgid ""
"The HAL pin assigned to this filter is *plasmac.lowpass-frequency* and is "
"set to 0 (disabled) by default. To apply a lowpass filter to the arc-"
"voltage, the user would edit the following entry in the custom.hal file in "
"the machine's configuration directory to add the appropriate cutoff "
"frequency as measured in Hertz (Hz)."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:467
#, no-wrap
msgid "setp plasmac.lowpass-frequency 100\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:470
msgid "The above example would give a cutoff frequency of 100Hz."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:471
#, no-wrap
msgid "Contact Bounce"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:474
msgid ""
"Contact bounce from mechanical relays, switches, or external interference "
"may cause some inconsistent behavior of the following switches:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:479
msgid "Arc OK (for modes 1 & 2)"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:481
msgid ""
"Due to the fact that the software is capable of sampling rates faster than "
"the contact bounce period, it is possible that the software may see contact "
"bounce as several changes in input states occurring in a very small time "
"period, and incorrectly interpret this as a very quick on-off of the input. "
"One method of mitigating contact bounce is to \"debounce\" the input. To "
"summarize debounce, it requires the input state to be stable at the opposite "
"state of the output state for consecutive delay periods before changing the "
"state of the output."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:483
msgid ""
"Debounce delay periods can be changed by editing the appropriate debounce "
"value in the custom.hal file in the <machine_name> config directory."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:485
msgid ""
"Each increment of delay adds one servo thread cycle to the debounce time. "
"For example: given a servo thread period of 1000000 (measured in nano "
"seconds), a debounce delay of 5 would equate to 5000000ns, or 5ms."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:487
msgid ""
"For the Float and Ohmic switches this equates to a 0.001mm (0.00004\") "
"increase in the probed height result."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:489
msgid ""
"It is recommended to keep the debounce values as low as possible while still "
"achieving consistent results. Using link:../hal/tutorial.html#sec:tutorial-"
"halscope[Halscope] to plot the inputs is a good way to establish the correct "
"value."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:491
msgid ""
"For QtPlasmaC installations, debounce is achieved by using the HAL link:../"
"man/man9/dbounce.9.html[dbounce component] which is a later alternative to "
"the original debounce component. This new version allows for the loading and "
"naming of individual debounce instances and is compatible with Twopass HAL "
"file processing."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:493
msgid ""
"All four signals above have an individual debounce component so the debounce "
"periods can be catered individually to each input. Any changes made to these "
"values in the custom.hal file will not be overwritten by later updates of "
"QtPlasmaC."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:495
msgid ""
"The default delay for all four inputs is five servo thread periods. In most "
"cases this value will work quite well. If any of the inputs do not use "
"mechanical switches, it may be possible to either reduce or remove the delay "
"for those inputs."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:497
msgid ""
"If debounce is required for other equipment like home or limit switches etc. "
"then more dbounce components may added in any of the HAL files without any "
"regard to the signals listed here."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:499
#, no-wrap
msgid "Contact Load"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:502
msgid ""
"Mechanical relays and switches usually require a minimum current passing "
"through the contacts for reliable operation. This current varies with the "
"material that the contacts in the device are made from."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:504
msgid ""
"Depending on the specified minimum contact current and the current drawn by "
"the input device there may be a need to provide a method to increase the "
"current through the contacts."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:506
msgid ""
"Most relays using gold contacts will not require any additional current for "
"reliable operation."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:508
msgid ""
"There are two different methods available to provide this minimum current if "
"it is required:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:510
msgid "A 0.1μF film capacitor placed across the contacts."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:511
msgid "A 1200Ω 1W resistor across the load (see calculations below)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:513
msgid ""
"Schematics are shown at <<qt_contact-load-schematics,contact load "
"schematics>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:515
msgid ""
"More information on contact switching load can be seen on page III of link:"
"https://www.finder-relais.net/en/Finder-general-technical-information-en."
"pdf[Finder Relays General Technical Information]"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:517
msgid "[underline]*Calculations:*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:519
msgid ""
"If using a Mesa card, the input resistance of a 7i96 is 4700&#8239;Ω (always "
"consult the product manual associated with the revision being used as these "
"values sometimes vary between revisions), giving a contact current of "
"5.1&#8239;mA assuming a supply voltage of 24&#8239;V (I = V/R)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:523
msgid ""
"As an example, the typical relay used in a Hypertherm Powermax 65 plasma "
"cutter (link:https://www.te.com/commerce/DocumentDelivery/DDEController?"
"Action=showdoc&DocId=Data+Sheet%7F1308242_T77%7F1011%7Fpdf%7FEnglish"
"%7FENG_DS_1308242_T77_1011.pdf%7F1-1393194-0[TE T77S1D10-24]) requires a "
"minimum contact load of 100&#8239;mA @ 5&#8239;VDC which will dissipate "
"0.5&#8239;W (P = I * V).  If using a 24&#8239;VDC power supply this would "
"then equate to a minimum current of 20.8&#8239;mA.  Because there is less "
"current drawn by the Mesa input than is required by the relay there needs to "
"be an increase in the current."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:525
msgid "The resistance can be calculated using R = U~s~ / (I~m~ - I~i~) where:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:527
msgid "R = calculated resistance"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:528 src/plasma/qtplasmac.adoc:538
msgid "U~s~ = supply voltage"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:529
msgid "I~m~ = minimum current required"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:530
msgid "I~i~ = input current"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:533
msgid ""
"Using a 7i96 with an input current of 5.1&#8239;mA gives a calculated value "
"of 1529&#8239;Ω ( = 24&#8239;V / (.0208 - .0051)&#8239;A).  This could then "
"be rounded down to a commonly available 1500&#8239;Ω resistor, giving a "
"small safety margin."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:535
msgid "The power dissipation can by calculated using P = U~s~^2^ / R~s~ where:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:537
msgid "P = power"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:539
msgid "R~s~ = selected resistance"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:541
msgid ""
"This gives a value of 0.38&#8239;W. This could then be rounded up to 1&#8239;"
"W, giving a good safety margin. The final selection would be a 1500&#8239;Ω "
"1&#8239;W resistor."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:542
#, no-wrap
msgid "Desktop Launcher"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:545
msgid ""
"If a link to the launch the configuration was not created when creating the "
"config, the user could create a desktop launcher to the config by right "
"clicking on the desktop and selecting Create Launcher or similar. This will "
"bring up a dialog box to create a launcher. Give the icon a nice short name, "
"enter anything for the command and click OK."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:547
msgid ""
"After the launcher appears on the desktop, right click on it and then edit "
"it with the user's editor of choice. Edit the file so it looks similar to:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:556
#, no-wrap
msgid ""
"[Desktop Entry]\n"
"Comment=\n"
"Terminal=false\n"
"Name=LinuxCNC\n"
"Exec=sh -c \"linuxcnc $HOME/linuxcnc/configs/<machine_name>/<machine_name>.ini\"\n"
"Type=Application\n"
"Icon=/usr/share/pixmaps/linuxcncicon.png\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:559
msgid ""
"If the user would like a terminal window to open behind the GUI window then "
"change the Terminal line to:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:562
#, no-wrap
msgid "Terminal=true\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:565
msgid "Displaying a terminal can be handy for error and information messages."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:566
#, no-wrap
msgid "QtPlasmaC Files"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:569
msgid ""
"After a successful QtPlasmaC installation, the following files are created "
"in the configuration directory:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:572
#, no-wrap
msgid "*Filename"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:573
#, no-wrap
msgid "*Function*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:574
#, no-wrap
msgid "A configuration file for the machine."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:574
#, no-wrap
msgid "<machine_name>.hal"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:575
#, no-wrap
msgid "A HAL for the machine."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:575
#, no-wrap
msgid "<machine_name>.prefs"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:576
#, no-wrap
msgid "A configuration file for QtPlasmaC specific parameters and preferences."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:576
#, no-wrap
msgid "custom.hal"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:577
#, no-wrap
msgid "A HAL file for user customization."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:577
#, no-wrap
msgid "custom_postgui.hal"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:578
#, no-wrap
msgid "A HAL file for user customization which is run after the GUI has initialized."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:578
#, no-wrap
msgid "shutdown.hal"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:579
#, no-wrap
msgid "A HAL file which is run during the shutdown sequence."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:579
#, no-wrap
msgid "tool.tbl"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:580
#, no-wrap
msgid "A tool table used to store offset information for additional tools (scribe, etc.) used by the QtPlasmaC configuration."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:580
#, no-wrap
msgid "qtplasmac"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:581
#, no-wrap
msgid "A link to the directory containing common qtplasmac support files."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:581
#, no-wrap
msgid "backup"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:582
#, no-wrap
msgid "A directory for backups of config files."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:586
msgid ""
"<machine_name> is whatever name the user entered into the \"Machine Name\" "
"field of the configuration wizard program"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:589
msgid ""
"Custom commands are allowed in custom.hal and the custom_postgui.hal files "
"as they are not overwritten during updates."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:591
msgid ""
"After running a new configuration for the first time the following files "
"will be created in the configuration directory:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:594
#, no-wrap
msgid "Filename"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:595
#, no-wrap
msgid "<machine_name>_material.cfg"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:596
#, no-wrap
msgid "A file for storing the material settings from the MATERIAL section of the <<qt_parameters-tab,PARAMETERS Tab>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:596
#, no-wrap
msgid "qtvcp.prefs"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:597
#, no-wrap
msgid "A file containing the QtVCP preferences."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:597
#, no-wrap
msgid "qtplasmac.qss"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:598
#, no-wrap
msgid "This file is used to store the stylesheet for the currently loaded session of QtPlasmaC."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:602
msgid ""
"The configuration files (<machine_name>.ini and <machine_name>.hal) that are "
"created by configuration wizard are notated to explain the requirements to "
"aid in manual manipulation of these configurations. They may be edited with "
"any text editor."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:605
msgid ""
"The <machine_name>.prefs file is plain text and may be edited with any text "
"editor."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:606
#, no-wrap
msgid "INI File"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:609
msgid ""
"QtPlasmaC has some specific <machine_name>.ini file variables as follows:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:611
#, no-wrap
msgid "*[FILTER]* Section\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:613 src/plasma/qtplasmac.adoc:626
#: src/plasma/qtplasmac.adoc:644 src/plasma/qtplasmac.adoc:692
#: src/plasma/qtplasmac.adoc:703 src/plasma/qtplasmac.adoc:714
msgid "These variables are mandatory."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:620
#, no-wrap
msgid ""
"PROGRAM_EXTENSION = .ngc,.nc,.tap G-code File (*.ngc, *.nc, *.tap)\n"
"ngc               = qtplasmac_gcode\n"
"nc                = qtplasmac_gcode\n"
"tap               = qtplasmac_gcode\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:624
#, no-wrap
msgid "*[RS274NGC]* Section\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:632
#, no-wrap
msgid ""
"RS274NGC_STARTUP_CODE = G21 G40 G49 G80 G90 G92.1 G94 G97 M52P1\n"
"SUBROUTINE_PATH       = ./:../../nc_files\n"
"USER_M_PATH           = ./:../../nc_files\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:635
msgid "for a imperial config replace G21 above with G20."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:637
msgid "both the above paths show the minimum requirements."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:640
msgid ""
"SEE <<qt_path-tolerance,PATH TOLERANCE>> FOR RS274NGC_STARTUP_CODE "
"INFORMATION RELATED TO G64."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:642
#, no-wrap
msgid "*[HAL]* Section\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:653
#, no-wrap
msgid ""
"HALUI           = halui (required)\n"
"HALFILE         = <machine_name>.hal (the machine HAL file)\n"
"HALFILE         = plasmac.tcl (the standard QtPlasmaC HAL file )\n"
"HALFILE         = custom.hal (Users custom HAL commands)\n"
"POSTGUI_HALFILE = postgui_call_list.hal (required)\n"
"SHUTDOWN        = shutdown.hal (shutdown HAL commands)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:657
msgid ""
"The user could place custom HAL commands in the custom.hal file as this file "
"is not overwritten by QtPlasmaC updates."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:660
#, no-wrap
msgid "*[DISPLAY]* Section\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:662 src/plasma/qtplasmac.adoc:683
msgid "This variable is mandatory."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:668
#, no-wrap
msgid ""
"DISPLAY = qtvcp qtplasmac      (use 16:9 resolution)\n"
"        = qtvcp qtplasmac_9x16 (use 9:16 resolution)\n"
"        = qtvcp qtplasmac_4x3  (use 4:3 resolution)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:672
msgid ""
"There are multiple QtVCP options that are described here: link:../gui/qtvcp."
"html#_ini_settings[QtVCP INI Settings]"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:674
msgid ""
"For example the following would start a 16:9 resolution QtPlasmaC screen in "
"full screen mode:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:678
#, no-wrap
msgid "DISPLAY = qtvcp -f qtplasmac\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:681
#, no-wrap
msgid "*[TRAJ]* Section\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:687
#, no-wrap
msgid "SPINDLES = 3\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:690
#, no-wrap
msgid "*[AXIS_X]* Section\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:698 src/plasma/qtplasmac.adoc:709
#, no-wrap
msgid ""
"MAX_VELOCITY     = double the value in the corresponding joint\n"
"MAX_ACCELERATION = double the value in the corresponding joint\n"
"OFFSET_AV_RATIO  = 0.5\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:701
#, no-wrap
msgid "*[AXIS_Y]* Section\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:712
#, no-wrap
msgid "*[AXIS_Z]* Section\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:721
#, no-wrap
msgid ""
"MIN_LIMIT        = just below the top of the table's slats\n"
"MAX_VELOCITY     = double the value in the corresponding joint\n"
"MAX_ACCELERATION = double the value in the corresponding joint\n"
"OFFSET_AV_RATIO  = 0.5\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:726
msgid ""
"QtPlasmaC uses the LinuxCNC External Offsets feature for all Z axis motion, "
"and for moving the X and/or Y axis for a consumable change while paused.  "
"For more information on this feature, please read <<cha:external-offsets,"
"External Axis Offsets>> in the LinuxCNC documentation."
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:727
#, no-wrap
msgid "QtPlasmaC GUI Overview"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:730
msgid ""
"The following sections will give a general overview of the QtPlasmaC layout."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:731
#, no-wrap
msgid "Exiting QtPlasmaC"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:734
msgid "Exiting or shutting down QtPlasmaC is done by either:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:736
msgid "Click the window shutdown button on the window title bar"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:737
msgid "Long press the *POWER* button on the MAIN Tab."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:739
msgid ""
"A shutdown warning can be displayed on every shutdown by checking the *Exit "
"Warning* checkbox on the <<qt_settings-tab, SETTINGS Tab>>."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:741
#, no-wrap
msgid "MAIN Tab"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:744
msgid ""
"Screenshot example of the QtPlasmaC <<qt_main-tab,MAIN Tab>> in *16:9* "
"aspect ratio:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:748 src/plasma/qtplasmac.adoc:1009
msgid ""
"Some functions/features are only used for particular modes and are not "
"displayed if they are not required by the chosen QtPlasmaC mode."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:750
msgid "[underline]*PREVIEW WINDOW*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:754 src/plasma/qtplasmac.adoc:1142
#, no-wrap
msgid "Material"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:755
#, no-wrap
msgid "The top header is clickable in this area to reveal a drop down menu. It is used to manually select the current material cut parameters. If there are no materials in the material file then only the default material will be displayed."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:755
#, no-wrap
msgid "VEL:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:756
#, no-wrap
msgid "This displays the actual cut feed rate the table is moving at."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:756
#, no-wrap
msgid "FR:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:757
#, no-wrap
msgid "If \"View Material\" is selected on the <<qt_settings-tab, SETTINGS Tab>>, this displays the currently selected material's Feed Rate."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:757
#, no-wrap
msgid "PH:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:758
#, no-wrap
msgid "If \"View Material\" is selected on the <<qt_settings-tab, SETTINGS Tab>>, this displays the currently selected material's Pierce Height."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:758
#, no-wrap
msgid "PD:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:759
#, no-wrap
msgid "If \"View Material\" is selected on the <<qt_settings-tab, SETTINGS Tab>>, this displays the currently selected material's Pierce Delay."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:759
#, no-wrap
msgid "CH:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:760
#, no-wrap
msgid "If \"View Material\" is selected on the <<qt_settings-tab, SETTINGS Tab>>, this displays the currently selected material's Cut Height."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:760
#, no-wrap
msgid "CA:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:761
#, no-wrap
msgid "If \"View Material\" is selected on the <<qt_settings-tab, SETTINGS Tab>>, and RS485 communications are enabled, this displays the currently selected material's Cut Amperage."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:762
#, no-wrap
msgid "This button changes the <<sub:qt-preview-views,preview>> to a top down full table view."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:763
#, no-wrap
msgid "This button changes the <<sub:qt-preview-views,preview>> to an isometric view."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:764
#, no-wrap
msgid "This button changes the <<sub:qt-preview-views,preview>> to a top down view."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:764 src/plasma/qtplasmac.adoc:2513
#, no-wrap
msgid "→"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:765
#, no-wrap
msgid "This button pans the <<sub:qt-preview-views,preview>> right."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:765 src/plasma/qtplasmac.adoc:2514
#, no-wrap
msgid "←"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:766
#, no-wrap
msgid "This button pans the <<sub:qt-preview-views,preview>> left."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:766 src/plasma/qtplasmac.adoc:2515
#, no-wrap
msgid "↑"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:767
#, no-wrap
msgid "This button pans the <<sub:qt-preview-views,preview>> up."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:767 src/plasma/qtplasmac.adoc:2516
#, no-wrap
msgid "↓"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:768
#, no-wrap
msgid "This button pans the <<sub:qt-preview-views,preview>> down."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:769 src/plasma/qtplasmac.adoc:770
#, no-wrap
msgid "This button zooms the <<sub:qt-preview-views,preview>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:769 src/plasma/qtplasmac.adoc:837
#, no-wrap
msgid "-"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:771
#, no-wrap
msgid "This button clears the live plot."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:774
msgid "[underline]*MACHINE*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:782
#, no-wrap
msgid ""
"If ESTOP_TYPE = 0 in the <machine_name>.prefs file, this button becomes an indicator of the hardware ESTOP's status only. +\n"
"If ESTOP_TYPE = 1 in the <machine_name>.prefs file, this button will not be visible. +\n"
"If ESTOP_TYPE = 2 in the <machine_name>.prefs file, this button will act as a GUI ESTOP. +\n"
"If ESTOP_TYPE is omitted from the <machine_name>.prefs file, this button will default to being an indicator of the hardware ESTOP's status only."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:782 src/plasma/qtplasmac.adoc:3530
#, no-wrap
msgid "POWER"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:784
#, no-wrap
msgid ""
"This button turns the GUI on and allows QtPlasmaC/LinuxCNC to control the hardware. +\n"
"Pressing and holding the *POWER* button for longer than two seconds will bring up a dialog to exit the QtPlasmaC application."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:784 src/plasma/qtplasmac.adoc:3531
#, no-wrap
msgid "CYCLE START"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:785
#, no-wrap
msgid "This button starts the cycle for any loaded G-code file."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:785 src/plasma/qtplasmac.adoc:3532
#, no-wrap
msgid "CYCLE PAUSE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:788
#, no-wrap
msgid ""
"This button pauses the cycle for any loaded G-code file. +\n"
"If a cycle is paused, this button will display *CYCLE RESUME* and flash. +\n"
"Pressing *CYCLE RESUME* will resume the cycle."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:788 src/plasma/qtplasmac.adoc:3533
#, no-wrap
msgid "CYCLE STOP"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:795
#, no-wrap
msgid ""
"This button stops any actively running or paused cycle. +\n"
"This includes: +\n"
"- G-code Programs +\n"
"- Torch pulse if the pulse was started during *CYCLE PAUSE* (this will cancel the paused G-code program execution as well) +\n"
"- Probe Test +\n"
"- Framing +\n"
"- Manual Cut"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:798
#, no-wrap
msgid ""
"This slider overrides the feed rate for all feed moves. +\n"
"Any value other than 100% will cause the label to flash. +\n"
"Clicking the label will return the slider to 100%."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:798
#, no-wrap
msgid "RAPID"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:801
#, no-wrap
msgid ""
"This slider overrides the rapid rate for all rapid moves. +\n"
"Any value other than 100% will cause the label to flash. +\n"
"Clicking the label will return the slider to 100%."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:803
#, no-wrap
msgid ""
"This slider sets the jog rate. +\n"
"Clicking the label will return the slider to the default linear velocity as set in the <machine_name).ini file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:806
msgid "[underline]*BUTTONS*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:808
msgid ""
"The Button Panel contains buttons useful for the operation of the machine."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:810
msgid ""
"The *EDIT* and *MDI* buttons are permanent, all other buttons are user "
"programmable in the <machine_name>.prefs file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:812
msgid ""
"See <<qt_custom-user-buttons,custom user buttons>> for detailed information "
"on custom user buttons."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:816
#, no-wrap
msgid "EDIT"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:817
#, no-wrap
msgid "This button opens a G-code editor for the currently loaded program."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:821
#, no-wrap
msgid ""
"This button places QtPlasmaC into Manual Data Input (MDI) mode which will display the MDI HISTORY and an entry box over top of the G-code window. +\n"
"Once pressed, this button will display \"MDI CLOSE\". +\n"
"Pressing *MDI CLOSE* will close the MDI. +\n"
"Please see the <<qt_mdi, MDI>> section for additional MDI information."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:821
#, no-wrap
msgid "OHMIC TEST"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:823
#, no-wrap
msgid ""
"This button will enable the Ohmic Probe Enable output signal and if the Ohmic Probe input is sensed, the LED indicator in the SENSOR Panel will light. +\n"
"The main purpose of this is to allow a quick test for a shorted torch tip."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:823
#, no-wrap
msgid "PROBE TEST"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:824
#, no-wrap
msgid "This button will initiate a <<qt_probe-test,Probe Test>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:824
#, no-wrap
msgid "SINGLE CUT"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:825
#, no-wrap
msgid "This button will show the dialog box to start an automatic <<qt_single-cut,Single Cut>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:825
#, no-wrap
msgid "NORMAL CUT"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:826
#, no-wrap
msgid "This button will toggle between <<qt_cut-types,Cut Types>> (NORMAL CUT and PIERCE ONLY)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:826
#, no-wrap
msgid "TORCH PULSE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:827
#, no-wrap
msgid "This button will initiate a <<qt_button-torch,Torch Pulse>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:830
msgid "[underline]*ARC*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:835
#, no-wrap
msgid "Displays the actual arc voltage."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:835
#, no-wrap
msgid "OK"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:836
#, no-wrap
msgid "Indicates the status of the Arc OK signal."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:836
#, no-wrap
msgid "+"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:837
#, no-wrap
msgid "Each press of this button will raise the target voltage by the THC Threshold voltage (The distance changed will be Height Per Volt * THC Threshold voltage)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:838
#, no-wrap
msgid "Each press of this button will lower the target voltage by the THC Threshold voltage (The distance changed will be Height Per Volt * THC Threshold voltage)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:838
#, no-wrap
msgid "OVERRIDE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:839
#, no-wrap
msgid "Clicking this label will return any voltage override to 0.00."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:843
msgid "[underline]*CONTROL*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:847
#, no-wrap
msgid "TORCH ON"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:848
#, no-wrap
msgid "Indicates the status of the Torch On output signal."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:848
#, no-wrap
msgid "TORCH ON ENABLE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:852
#, no-wrap
msgid ""
"This box toggles between Enabling and Disabling the torch. +\n"
"This box defaults to unfilled (disabled) when QtPlasmaC is first run. +\n"
"This box must be filled to change it to \"Torch Enabled\" before material cutting can commence. +\n"
"If this box is not filled, then running a loaded program will cause the machine to run the cycle without firing the torch. This is sometimes referred to as a \"dry run\"."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:852
#, no-wrap
msgid "VELOCITY ANTI DIVE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:853
#, no-wrap
msgid "Indicates that the THC is locked at the current height due to the cut velocity falling below the Velocity Anti Dive (VAD) Threshold percentage set on the <<qt_parameters-tab,PARAMETERS Tab>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:853 src/plasma/qtplasmac.adoc:3544
#, no-wrap
msgid "VELOCITY ANTI DIVE ENABLE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:854
#, no-wrap
msgid "This box toggles between Enabling and Disabling VELOCITY ANTI DIVE."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:854
#, no-wrap
msgid "VOID ANTI DIVE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:855
#, no-wrap
msgid "Indicates that the THC is locked due to a void being sensed."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:855 src/plasma/qtplasmac.adoc:3545
#, no-wrap
msgid "VOID ANTI DIVE ENABLE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:856
#, no-wrap
msgid "This box toggles between Enabling and Disabling VOID ANTI DIVE."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:856 src/plasma/qtplasmac.adoc:3548
#, no-wrap
msgid "MESH MODE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:863
#, no-wrap
msgid ""
"This box will enable or disable <<qt_mesh-mode,Mesh Mode>> for the cutting of expanded metal. This check box may be enabled or disabled at any time during normal cutting. +\n"
"Mesh mode: +\n"
"- Will require an Arc OK signal to start machine motion. +\n"
"- Will disable the THC. +\n"
"- Will not stop machine motion if the Arc OK signal is lost. +\n"
"- Will automatically select CPA mode if PowerMax communications are being used. +\n"
"For more information see <<qt_mesh-mode,Mesh Mode (expanded metal)>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:863 src/plasma/qtplasmac.adoc:3546
#, no-wrap
msgid "AUTO VOLTS"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:864
#, no-wrap
msgid "This box will enable or disable <<qt_thc,Auto Volts>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:864 src/plasma/qtplasmac.adoc:3549
#, no-wrap
msgid "IGNORE OK"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:872
#, no-wrap
msgid ""
"This box will determine if QtPlasmaC ignores the Arc OK signal.\n"
"This check box may be enabled or disabled at any time during normal cutting.\n"
"Additionally this mode may be enabled or disabled via proper M codes in a running program. +\n"
"Ignore Arc OK mode: +\n"
"- Will not require an Arc OK signal be received before starting machine motion after the \"Torch On\" signal is given. +\n"
"- Will disable the THC. +\n"
"- Will not stop machine motion if the Arc OK signal is lost. +\n"
"For more information see <<qt_ignore-ok,Ignore Arc Ok>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:872
#, no-wrap
msgid "OHMIC PROBE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:874
#, no-wrap
msgid ""
"This box enables or disables the ohmic probe input. +\n"
"If the Ohmic Probe input is disabled, the Ohmic Probe LED will still show the status of the probe input, but the Ohmic Probe results will be ignored."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:876
#, no-wrap
msgid ""
"This box will enable or disable the communications to a PowerMax.\n"
"This button is only visible if a PM_PORT is configured in the `[POWERMAX]` section of the _<machine_name>_.prefs file."
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:876 src/remap/remap.adoc:2702
#, no-wrap
msgid "Status"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:879
#, no-wrap
msgid ""
"When PowerMax communications are enabled, this will display one of the following: +\n"
"*CONNECTING*, *CONNECTED*, *COMMS ERROR*, or a *Fault Code*. +\n"
"For more information, see the <<qt_pm_comms,PowerMax Communications>> section."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:882
msgid "[underline]*SENSOR*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:886
#, no-wrap
msgid "FLOAT"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:887
#, no-wrap
msgid "Indicates that the float switch is activated."
msgstr ""

#. type: TH
#: src/plasma/qtplasmac.adoc:887 man/man9/ohmic.9:9
#, no-wrap
msgid "OHMIC"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:888
#, no-wrap
msgid "Indicates that the probe has sensed the material."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:888
#, no-wrap
msgid "BREAK"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:889
#, no-wrap
msgid "Indicates that the torch breakaway sensor is activated."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:892
msgid "[underline]*THC*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:897
#, no-wrap
msgid "This box determines whether the THC will be enabled or disabled during a cut."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:897
#, no-wrap
msgid "ENABLED"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:898
#, no-wrap
msgid "This LED indicates whether the THC is enabled or disabled."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:898
#, no-wrap
msgid "ACTIVE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:899
#, no-wrap
msgid "This LED indicates that the THC is actively controlling the Z axis."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:899
#, no-wrap
msgid "UP"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:900
#, no-wrap
msgid "This LED indicates that the THC is commanding the Z axis to raise."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:900
#, no-wrap
msgid "DOWN"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:901
#, no-wrap
msgid "This LED indicates that the THC is commanding the Z axis to lower."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:904
msgid "[underline]*JOGGING*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:907
msgid ""
"During Paused Motion, this section will become <<qt_cut-recovery,CUT "
"RECOVERY>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:911
#, no-wrap
msgid "CONTINUOUS"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:912
#, no-wrap
msgid "This drop down button will change the jog increment. Options are determined by the values in the *[DISPLAY]* section of the <machine_name>.ini file and begin with the label \"INCREMENTS =\"."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:912
#, no-wrap
msgid "FAST"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:913
#, no-wrap
msgid "This button will toggle between FAST which is the default linear velocity in the <machine_name>.ini file or SLOW which is 10% of the default value."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:913
#, no-wrap
msgid "Y+"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:914
#, no-wrap
msgid "This button moves the Y axis in the positive direction."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:914
#, no-wrap
msgid "Y-"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:915
#, no-wrap
msgid "This button moves the Y axis in the negative direction."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:915
#, no-wrap
msgid "X+"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:916
#, no-wrap
msgid "This button moves the X axis in the positive direction."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:916
#, no-wrap
msgid "X-"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:917
#, no-wrap
msgid "This button moves the X axis in the negative direction."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:917
#, no-wrap
msgid "Z+"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:918
#, no-wrap
msgid "This button moves the Z axis in the positive direction."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:918
#, no-wrap
msgid "Z-"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:919
#, no-wrap
msgid "This button moves the Z axis in the negative direction."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:922
msgid "[underline]*CUT RECOVERY*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:925
msgid ""
"During Paused Motion, this section will be shown on top of the JOGGING "
"panel. The following section will cover each button encountered in this "
"panel. Please see <<qt_cut-recovery,CUT RECOVERY>> for a detailed "
"description of the cut recovery functionality."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:929
#, no-wrap
msgid "PAUSED MOTION FEED SLIDER"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:931
#, no-wrap
msgid ""
"In the event of a paused program, this interface allows X/Y motion to follow the programmed path in the reverse or forward direction. +\n"
"This slider's range is from 1%-100% of the Cut Feed Rate for the currently selected material."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:932
#, no-wrap
msgid "This displays the paused motion feed rate."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:932
#, no-wrap
msgid "REV"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:933
#, no-wrap
msgid "In the event of a paused program, this button will move the machine in reverse along the programmed path until it reaches the last M3 command that was either executed or that QtPlasmaC was attempting to execute before the program became paused."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:933
#, no-wrap
msgid "FWD"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:934
#, no-wrap
msgid "In the event of a paused program, this button will move the machine forward along the programmed path indefinitely until the program's end, skipping over M3 commands."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:934
#, no-wrap
msgid "CANCEL MOVE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:936
#, no-wrap
msgid ""
"This button will cancel any Cut Recovery movement that was made, and return the torch to the position the Cut Recovery movement was initiated. +\n"
"Note that if FWD or REV were used to move the torch, CANCEL will not return to the position of the torch when the pause occurred."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:936
#, no-wrap
msgid "MOVE x.xxx"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:938
#, no-wrap
msgid ""
"This displays the amount of travel that will be incurred with each press of an arrow key, in the direction the arrow key was pressed. +\n"
"This value displayed below MOVE represents the Kerf Width of the currently selected material."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:938
#, no-wrap
msgid "DIRECTIONAL ARROWS"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:939
#, no-wrap
msgid "These buttons will move the torch in the direction indicated by a distance of one Kerf Width (of the currently selected material) per press."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:942
msgid "[underline]*G-CODE WINDOW*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:946
#, no-wrap
msgid "CLEAR"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:948
#, no-wrap
msgid ""
"This button will clear the currently opened program. +\n"
"The torch (T0) will be selected if it was not the active tool."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:948
#, no-wrap
msgid "OPEN"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:949
#, no-wrap
msgid "This button will open a FILE OPEN panel over the PREVIEW WINDOW."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:949 src/plasma/qtplasmac.adoc:2592
#, no-wrap
msgid "RELOAD"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:950
#, no-wrap
msgid "This button will reload the currently loaded G-code File."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:953
msgid "[underline]*DRO*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:957
#, no-wrap
msgid "HOME ALL"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:958
#, no-wrap
msgid "This button will home all of the axes in the order set by HOME_SEQUENCE in the <machine_name>.ini file."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:958
#, no-wrap
msgid "WCS G54"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:959
#, no-wrap
msgid "This drop down button will change the current work offset."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:959 src/plasma/qtplasmac.adoc:1633
#, no-wrap
msgid "CAMERA"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:960
#, no-wrap
msgid "This button will display a CAMVIEW panel on top of the PREVIEW WINDOW and will allow the user to set an origin with or without rotation. See the <<qt_camera,CAMERA section>> for detailed instructions."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:960 src/plasma/qtplasmac.adoc:1676
#: src/plasma/qtplasmac.adoc:3535
#, no-wrap
msgid "LASER"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:961
#, no-wrap
msgid "This button will allow the user to use a laser to set an origin with or without rotation. See the <<qt_laser,LASER section>> for detailed instructions."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:961
#, no-wrap
msgid "X0 Y0"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:962
#, no-wrap
msgid "This button will set the current position to X0 Y0."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:962
#, no-wrap
msgid "HOME [AXIS]"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:963
#, no-wrap
msgid "This button will home the corresponding axis."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:963
#, no-wrap
msgid "0 [AXIS]"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:968
#, no-wrap
msgid ""
"This drop down button will display the following options: +\n"
"*Zero* - zeros the axis. +\n"
"*Set* - launches a dialog box to manually input the axis' coordinate. +\n"
"*Divide By 2* - divides the currently displayed coordinate in the DRO by two. +\n"
"*Set To Last* - sets the axis to the previously set coordinate."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:971
#, no-wrap
msgid "Preview Views"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:974
msgid ""
"The QtPlasmaC preview screen has the ability to be switched between "
"different views and displays, as well as zooming in and out, and panning "
"horizontally and vertically."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:976
msgid ""
"When QtPlasmaC is first started, the Z (top down) view will be selected as "
"the default view for a loaded G-code file, but the full table view will be "
"displayed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:978
msgid ""
"When a G-code file is loaded, the display will change to the selected view."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:980
msgid ""
"Whenever there is no G-code file loaded, the full table will automatically "
"be displayed irrespective of which view is currently selected (the "
"highlighted button representing the currently selected view will not change)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:982
msgid ""
"If a full table is displayed due to no G-code file being loaded and the user "
"wishes to change the view orientation, then pressing either Z or P will "
"change the display to the newly selected view. If the user then wishes to "
"display the full table while maintaining the currently selected view as the "
"default view for a loaded G-code file, then pressing CLEAR will achieve this "
"and allow the selected view orientation to prevail the next time a G-code "
"file is loaded."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:984
#, no-wrap
msgid "CONVERSATIONAL Tab"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:987
msgid ""
"Screenshot example of the QtPlasmaC <<qt_conversational-tab,CONVERSATIONAL "
"Tab>> in *16:9* aspect ratio:"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:988 src/plasma/qtplasmac.adoc:2543
#, no-wrap
msgid "images/qtplasmac_conversational.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:991
msgid ""
"The <<qt_conversational-tab,CONVERSATIONAL Tab>> enables the user to quickly "
"program various simple shapes for quick cutting without the need for CAM "
"software."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:993
msgid ""
"See <<qt_shape-library,Conversational Shape Library>> for detailed "
"information on the Conversational feature."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:995
msgid ""
"It is possible to disable this tab so the conversational feature cannot be "
"used by an operator. This may be achieved either by wiring the pin to a "
"physical key-switch or similar or it may also be set in a HAL file using the "
"following command:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:999
#, no-wrap
msgid "setp qtplasmac.conv_disable 1\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1002
#, no-wrap
msgid "PARAMETERS Tab"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1005
msgid ""
"Screenshot example of the QtPlasmaC <<qt_parameters-tab,PARAMETERS Tab>> in "
"*16:9* aspect ratio:"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:1006 src/plasma/qtplasmac.adoc:1184
#, no-wrap
msgid "images/qtplasmac_parameters.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1011
msgid ""
"This tab is used to display plasma configuration parameters that are "
"modified infrequently."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1013 src/plasma/qtplasmac.adoc:1189
msgid ""
"It is possible to disable this tab so machine settings cannot be modified by "
"unauthorized personnel. This may be achieved either by wiring the pin to a "
"physical key-switch or similar or it may also be set in a HAL file using the "
"following command:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1017
#, no-wrap
msgid "setp qtplasmac.param_disable 1\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1020
msgid "[underline]*CONFIGURATION - ARC*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1024
#, no-wrap
msgid "Start Fail Timer"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1025
#, no-wrap
msgid "This sets the amount of time (in seconds) QtPlasmaC will wait between commanding a \"Torch On\" and receiving an Arc OK signal before timing out and displaying an error message."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1025
#, no-wrap
msgid "Max Starts"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1026
#, no-wrap
msgid "This sets the number of times QtPlasmaC will attempt to start the arc."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1026
#, no-wrap
msgid "Retry Delay"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1027
#, no-wrap
msgid "This sets the time (in seconds) between an arc failure and another arc start attempt."
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:1027 src/plasma/qtplasmac.adoc:4182
#, no-wrap
msgid "Voltage Scale"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1029
#, no-wrap
msgid ""
"This sets the arc voltage input scale and is used to display the correct arc voltage. +\n"
"For initial setup, see <<qt_calibration-values,Calibration Values>>."
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:1029 src/plasma/qtplasmac.adoc:4188
#, no-wrap
msgid "Voltage Offset"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1031
#, no-wrap
msgid ""
"This sets the arc voltage offset and is used to display zero volts when there is zero arc voltage input. +\n"
"For initial setup, see <<qt_calibration-values,Calibration Values>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1031
#, no-wrap
msgid "Height Per Volt"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1033
#, no-wrap
msgid ""
"This sets the distance the torch would need to move to change the arc voltage by one volt. +\n"
"Used for manual height manipulation only."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1033
#, no-wrap
msgid "OK High Volts"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1034
#, no-wrap
msgid "This sets the voltage threshold below which Arc OK signal is valid."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1034
#, no-wrap
msgid "OK Low Volts"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1035
#, no-wrap
msgid "This sets the voltage threshold above which the Arc OK signal is valid."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1039
msgid ""
"When setting the OK Low Volts and OK High Volts in Mode 0, the cut voltage "
"of a stable arc must be greater than the OK Low Volts value but lower than "
"the OK High Volts value for QtPlasmaC to receive a valid Arc OK signal. To "
"further clarify, to have a valid Arc OK, the arc voltage must fall between "
"the two limits."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1041
msgid "[underline]*CONFIGURATION - PROBING*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1045
#, no-wrap
msgid "Float Travel"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1046
#, no-wrap
msgid "This sets the amount of travel the float switch moves before completing the float switch circuit. This distance can be measured by using the Probe Test button, and the method described in <<qt_initial-setup,Initial Setup>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1046
#, no-wrap
msgid "Probe Speed"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1047
#, no-wrap
msgid "This sets the speed at which the torch will probe to find the material after it moves to the Probe Height."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1047
#, no-wrap
msgid "Probe Height"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1048
#, no-wrap
msgid "This sets the height above the Z axis minimum limit that Probe Speed begins. Refer to the <<qt_initial-setup,Heights Diagram>> diagram for a visual representation."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1048
#, no-wrap
msgid "Ohmic Offset"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1049
#, no-wrap
msgid "This sets the distance above the material the torch will should go after a successful ohmic probe. It is mainly used to compensate for high probing speeds."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1049
#, no-wrap
msgid "Ohmic Retries"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1050
#, no-wrap
msgid "This sets the number of times QtPlasmaC will retry a failed ohmic probe before falling back to the float switch for material detection."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1050
#, no-wrap
msgid "Skip IHS"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1051
#, no-wrap
msgid "This sets the distance threshold used to determine if an Initial Height Sense (probe) can be skipped for the current cut, see <<qt_ihs-skip,IHS Skip>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1057
msgid "[underline]*CONFIGURATION - SAFETY*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1061
#, no-wrap
msgid "Safe Height"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1063
#, no-wrap
msgid ""
"This sets the height above the material that the torch will retract to before executing rapid moves. +\n"
"If set to Zero then Z axis maximum height will be used for the safe height. Refer to the <<qt_initial-setup,Heights Diagram>> diagram for a visual representation."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1067
msgid "[underline]*CONFIGURATION - SCRIBING*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1071
#, no-wrap
msgid "Arm Delay"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1073
#, no-wrap
msgid ""
"This sets the delay (in seconds) from the time the scribe command is received to the activation of the scribe.\n"
"This allows the scribe to reach surface of the material before activating the scribe."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1073
#, no-wrap
msgid "On Delay"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1074
#, no-wrap
msgid "This sets the delay (in seconds) to allow the scribe mechanism to start before beginning motion."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1077
msgid "[underline]*CONFIGURATION - SPOTTING*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1081 src/plasma/qtplasmac.adoc:1114
#, no-wrap
msgid "Threshold"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1083
#, no-wrap
msgid ""
"This sets the arc voltage at which the delay timer will begin. +\n"
"0&thinsp;V starts the delay when the torch on signal is activated."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1083
#, no-wrap
msgid "Time On"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1084
#, no-wrap
msgid "This sets the length of time (in milliseconds) the torch is on after threshold voltage is reached."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1087
msgid "[underline]*CONFIGURATION - MOTION*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1091
#, no-wrap
msgid "Max. Speed"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1092
#, no-wrap
msgid "Displays the maximum velocity the Z axis is capable of (this is controlled by the <machine_name>.ini file)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1092
#, no-wrap
msgid "Setup Speed"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1093
#, no-wrap
msgid "The Z axis velocity for setup moves (movements to Probe Height, Pierce Height, Cut Height, etc.)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1097
msgid ""
"Setup Speed has no effect on THC speed which is capable of the velocity "
"displayed in the Max. Speed field."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1099
msgid "[underline]*CONFIGURATION - THC*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1101
msgid ""
"Two methods of THC activation are available and are selected with the *Auto "
"Activation* checkbutton. Both methods begin their calculations when the "
"current velocity of the torch matches the cut feed rate specified for the "
"selected material:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1103
msgid ""
"Delay Activation (the default) is selected when *Auto Activation* is "
"unchecked. This method uses a time delay set with the *Delay* parameter."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1104
msgid ""
"Auto Activation is selected when *Auto Activation* is checked. This method "
"determines that the arc voltage is stable by using the *Sample Counts* and "
"*Sample Threshold* parameters."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1108
#, no-wrap
msgid "Delay"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1110
#, no-wrap
msgid ""
"This sets the delay (in seconds) measured from the time the Arc OK signal is received until Torch Height Controller (THC) activates.\n"
"This is only available when Auto THC is not enabled."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1110
#, no-wrap
msgid "Sample Counts"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1112
#, no-wrap
msgid ""
"This sets the number of consecutive arc voltage readings within THC Sample Threshold required to activate the Torch Height Controller (THC).\n"
"This is only available when Auto THC is enabled."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1112
#, no-wrap
msgid "Sample Threshold"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1114
#, no-wrap
msgid ""
"This sets the maximum voltage deviation allowed for THC Sample Counts.\n"
"This is only available when Auto THC is enabled."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1115
#, no-wrap
msgid "This sets the voltage variation allowed from the target voltage before for THC makes movements to correct the torch height."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1115
#, no-wrap
msgid "Speed (PID-P)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1116
#, no-wrap
msgid "This sets the Proportional gain for the THC PID loop. This roughly equates to how quickly the THC attempts to correct changes in height."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1116
#, no-wrap
msgid "VAD Threshold"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1117
#, no-wrap
msgid "(Velocity Anti Dive) This sets the percentage of the current cut feed rate the machine can slow to before locking the THC to prevent torch dive."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1117
#, no-wrap
msgid "Void Slope"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1118
#, no-wrap
msgid "(Void Anti Dive) This sets the size of the change in cut voltage per seconds necessary to lock the THC to prevent torch dive (higher values need greater voltage change to lock THC)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1118
#, no-wrap
msgid "PID-I"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1119
#, no-wrap
msgid "This sets the Integral gain for the THC PID loop. Integral gain is associated with the sum of errors in the system over time and is not always needed."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1119
#, no-wrap
msgid "PID-D"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1120
#, no-wrap
msgid "This sets the Derivative gain for the THC PID loop. Derivative gain works to dampen the system and reduce over correction oscillations and is not always needed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1127
msgid ""
"PID loop tuning is a complicated process and is outside the scope of this "
"User Guide.  There are many sources of information available to assist with "
"understanding and tuning PID loops.  If the THC is not making corrections "
"fast enough, it is recommended to increase the P gain in small increments "
"until the system operates favorably.  Large P gain adjustments can result in "
"over correction and oscillations."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1129
msgid "[underline]*SAVE & RELOAD Buttons*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1131
msgid ""
"The **SAVE** button will save the currently displayed parameters to the "
"<machine_name>.prefs file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1133
msgid ""
"The **RELOAD** button will reload all the parameters from the <machine_name>."
"prefs file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1136
msgid "[underline]*MATERIAL*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1138
msgid "This section shows the parameters which are active for the current cut."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1143
#, no-wrap
msgid "The top drop down menu is used to manually select the current material cut parameters. If there are no materials in the material file then only the default material will be displayed."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1143
#, no-wrap
msgid "Kerf Width"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1144
#, no-wrap
msgid "This sets the kerf width for the currently selected material. Refer to the <<qt_initial-setup,Heights Diagram>> diagram for a visual representation."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1144
#, no-wrap
msgid "Pierce Height"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1145
#, no-wrap
msgid "This sets the pierce height for the currently selected material. Refer to the <<qt_initial-setup,Heights Diagram>> diagram for a visual representation."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1145
#, no-wrap
msgid "Pierce Delay"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1146
#, no-wrap
msgid "This sets the pierce delay (in seconds) for the currently selected material."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1146
#, no-wrap
msgid "Cut Height"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1147
#, no-wrap
msgid "This sets the cut height for the currently selected material. Refer to the <<qt_initial-setup,Heights Diagram>> diagram for a visual representation."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1147 src/plasma/qtplasmac.adoc:1366
#, no-wrap
msgid "Cut Feed Rate"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1148
#, no-wrap
msgid "This sets the cut feed rate for the currently selected material."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1148
#, no-wrap
msgid "Cut Amps"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1150
#, no-wrap
msgid ""
"This sets the cut amperage for the currently selected material. +\n"
"This is a visual indicator to the operator only, unless PowerMax communications are being used."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1150
#, no-wrap
msgid "Cut Volts"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1151
#, no-wrap
msgid "This sets the cut voltage for the currently selected material."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1151
#, no-wrap
msgid "Puddle Height"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1154
#, no-wrap
msgid ""
"Expressed as a percentage of Pierce Height, this sets the Puddle Jump height for the currently selected material. +\n"
"Typically used for thicker materials, Puddle Jump allows the torch to have an intermediate step between Pierce Height and Cut Height. +\n"
"If set, the torch will proceed from Pierce Height to P-Jump Height for a period of time (P-Jump Delay) before proceeding to Cut Height to effectively \"jump\" over the molten puddle. Refer to the <<qt_initial-setup, Heights Diagram>> diagram for a visual representation."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1154
#, no-wrap
msgid "Puddle Delay"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1155
#, no-wrap
msgid "This sets the amount of time (in seconds) the torch will stay at the P-Jump Height before proceeding to Cut Height."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1155
#, no-wrap
msgid "Pause At End"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1156
#, no-wrap
msgid "This sets the amount of time (in seconds) the torch will stay on at the end of the cut before proceeding with the M5 command to turn off and raise the torch. For more information see <<qt_pause-at-end, Pause At End Of Cut>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1156
#, no-wrap
msgid "Gas Pressure"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1159
#, no-wrap
msgid ""
"This sets the gas pressure for the currently selected material. +\n"
"This setting is only valid if PowerMax communications are being used. +\n"
"0 = Use the PowerMax's automatic pressure mode."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1159
#, no-wrap
msgid "Cut Mode"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1164
#, no-wrap
msgid ""
"This sets the cut mode for the currently selected material. +\n"
"This setting is only valid if PowerMax communications are being used. +\n"
"1 = Normal +\n"
"2 = CPA (Constant Pilot Arc) +\n"
"3 = Gouge/Mark"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1167
msgid ""
"SEE THE <<qt_thick-materials,THICK MATERIALS>> SECTION FOR MORE INFORMATION "
"ON PUDDLE JUMP"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1169
msgid "[underline]*SAVE, RELOAD, NEW, & DELETE Buttons*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1171
msgid ""
"The **SAVE** button will save the current material set to the "
"<machine_name>_material.cfg file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1173
msgid ""
"The **RELOAD** button will reload the material set from the "
"<machine_name>_material.cfg file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1175
msgid ""
"The **NEW** button will allow a new material to be added to the material "
"file. The user will be prompted for a material number and a material name, "
"all other parameters will be read from the currently selected material. Once "
"entered, QtPlasmaC will reload the material file and display the new "
"material. The Cut Parameters for the new material will then need to be "
"adjusted and saved."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1177
msgid ""
"The **DELETE** this button is used to delete a material. After pressing it, "
"the user will be prompted for a material number to be deleted, and prompted "
"again to ensure the user is sure. After deletion, the material file will be "
"reloaded and the drop down list will display the default material."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1180
#, no-wrap
msgid "SETTINGS Tab"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1183
msgid ""
"Screenshot example of the QtPlasmaC <<qt_settings-tab,SETTINGS Tab>> in "
"*16:9* aspect ratio:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1187
msgid ""
"This tab is used to display GUI configuration parameters, button text, and "
"shutdown text that are modified infrequently as well as some utility buttons."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1193
#, no-wrap
msgid "setp qtplasmac.settings_disable 1\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1196
msgid "[underline]*GUI SETTINGS*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1198
msgid ""
"This section shows parameters that effect the GUI appearance and GUI "
"behaviors."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1200
msgid ""
"To return any of the color changes to their default values, see the "
"<<qt_default_styling,Returning To The Default Styling>> section."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1204 src/plasma/qtplasmac.adoc:3019
#, no-wrap
msgid "Foreground"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1205
#, no-wrap
msgid "This button allows the user to change the color of the GUI Foreground."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1205 src/plasma/qtplasmac.adoc:3028
#, no-wrap
msgid "Highlight"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1206
#, no-wrap
msgid "This button allows the user to change the color of the GUI Highlight."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1207
#, no-wrap
msgid "This button allows the user to change the color of the GUI LED."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1207 src/plasma/qtplasmac.adoc:3024
#, no-wrap
msgid "Background"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1208
#, no-wrap
msgid "This button allows the user to change the color of the GUI Background."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1208 src/plasma/qtplasmac.adoc:3031
#, no-wrap
msgid "Alt Background"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1209
#, no-wrap
msgid "This button allows the user to change the color of the GUI Alternate Background."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1209
#, no-wrap
msgid "Frames"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1210
#, no-wrap
msgid "This button allows the user to change the color of the GUI Frames."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1210
#, no-wrap
msgid "Estop"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1211
#, no-wrap
msgid "This button allows the user to change the color of the GUI Estop."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1211
#, no-wrap
msgid "Disabled"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1212
#, no-wrap
msgid "This button allows the user to change the color of the GUI's Disabled features."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1213
#, no-wrap
msgid "This button allows the user to change the color of the GUI Preview Window Background."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1213
#, no-wrap
msgid "Soft Keyboard"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1215
#, no-wrap
msgid ""
"This radio button allows the user to enable or disable the soft touchscreen keyboard. +\n"
"If the \"onboard\" virtual keyboard is installed then the <<custom_kb_layouts,custom layouts>> will be enabled."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1215
#, no-wrap
msgid "KB Shortcuts"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1217
#, no-wrap
msgid ""
"This radio button allows the user to enable or disable <<qt_keyboard-shortcuts,Keyboard Shortcuts>> within the GUI (such as keyboard jogging). +\n"
"In addition to the standard jog keys, a list of the additional shortcuts is available in the <<qt_keyboard-shortcuts,keyboard shortcuts>> section."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1217
#, no-wrap
msgid "View Material"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1219
#, no-wrap
msgid ""
"This radio button allows the user to enable or disable the addition of a visual reference showing key material cut settings to the Preview Windows of the <<qt_main-tab,MAIN>> and <<qt_conversational-tab,CONVERSATIONAL>> tabs. +\n"
"Examples are:  Feed Rate, Pierce Height, Pierce Delay, and Cut Height. Cut Amps will be shown if PowerMax communications are enabled."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1219
#, no-wrap
msgid "Exit Warning"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1221
#, no-wrap
msgid ""
"This radio button allows the user to enable or disable whether a warning will always be displayed during shutdown. +\n"
"It is possible to add a custom message to the warning by editing the <<qt_exit-warning, EXIT WARNING MESSAGE>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1221
#, no-wrap
msgid "Optional Stop"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1222
#, no-wrap
msgid "This radio button allows the user to enable or disable whether or not a running program will pause at an *M1* command."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1222 src/plasma/qtplasmac.adoc:2314
#, no-wrap
msgid "Run From Line"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1223
#, no-wrap
msgid "This radio button allows the user to enable or disable <<qt_run-from-line,Run From Line>>. If enabled, the user can click on a line of G-code and have the program start from that line."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1224
#, no-wrap
msgid "This radio button allows the user to temporarily Override the input from a Limit Switch in the event the limit switch becomes tripped during operation. This button can only be clicked when a limit switch is tripped."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1224
#, no-wrap
msgid "Override Jog"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1225
#, no-wrap
msgid "This radio button will also allow jogging while jogging is inhibited due to a float switch, breakaway switch, or ohmic probe activation. This button can only be clicked when a jog is inhibited."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1225
#, no-wrap
msgid "Optional Block"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1226
#, no-wrap
msgid "This radio button allows the user to enable or disable whether or not lines starting with \"/\" will be skipped if present in a running program."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1226
#, no-wrap
msgid "Grid Size"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1227
#, no-wrap
msgid "This allows a user to change the size of the grid in the Preview Window on the <<qt_main-tab,MAIN Tab>>. Grid size of 0.0 will disable the grid."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1227
#, no-wrap
msgid "Cone Size"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1228
#, no-wrap
msgid "This allows a user to change the size of the cone (which represents the current tool) in the Preview Window on the <<qt_main-tab,MAIN Tab>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1228
#, no-wrap
msgid "Table Zoom"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1229
#, no-wrap
msgid "This allows a user to change the default zoom level for the top down full table view in the Preview Window on the <<qt_main-tab,MAIN Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1233
msgid "[underline]*USER BUTTON ENTRIES* USERBUTTON"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1236
msgid ""
"This section shows the text that appears on the <<qt_custom-user-buttons, "
"Custom User Buttons>> as well as the code associated with the user button.  "
"User buttons may be changed and the new settings used without restarting "
"LinuxCNC."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1238
msgid ""
"The text and/or code may be edited at any time and will be loaded ready for "
"use if the *SAVE* button is clicked."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1240
msgid ""
"Deleting the *Name* and *Code* text will cause that user button to be hidden "
"if the *SAVE* button is clicked."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1242
msgid ""
"To return all the *Name* and *Code* text to their last saved values press "
"the *RELOAD* button."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1246
#, no-wrap
msgid "The text that is displayed on the button"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1247
#, no-wrap
msgid "The code that is run when the button is pressed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1251
msgid ""
"There are 20 user buttons available but not all may be displayed depending "
"on the window size."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1254
msgid "[underline]*EXIT WARNING MESSAGE*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1256
msgid ""
"This section shows the text that appears on the shutdown dialog if the *Exit "
"Warning* is enabled ."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1258
msgid ""
"The text may be edited at any time and will be loaded ready for use if the "
"*SAVE* button is clicked."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1260
msgid ""
"To return the *EXIT WARNING MESSAGE* text to the last saved value press the "
"*RELOAD* button."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1263
msgid "[underline]*UTILITIES*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1265
msgid ""
"Some standard LinuxCNC utilities are provided as an aid in the diagnosis of "
"issues that may arise:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1267
msgid "link:../hal/halshow.html#cha:halshow[Halshow]"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1268
msgid "link:../hal/tutorial.html#sec:tutorial-halscope[Halscope]"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1269
msgid "link:../hal/tutorial.html#sec:tutorial-halmeter[Halmeter]"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1270
msgid ""
"link:../getting-started/updating-linuxcnc."
"html#_calibration_emccalib_tcl[Calibration]"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1271
msgid "link:../man/man1/linuxcnctop.1.html[Status]"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1273
msgid ""
"In addition the following two QtPlasmaC specific utilities are provided:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1275
msgid ""
"The **SET OFFSETS** button is used if the table has a laser or camera for "
"sheet alignment, a scribe, or uses offset probing. The required offsets for "
"these peripherals need to be applied by following the procedure described in "
"<<peripheral-offsets,Peripheral Offsets>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1280
msgid ""
"The **BACKUP CONFIG** button will create a complete machine configuration "
"backup for archiving or to aid in fault diagnosis.  A compressed backup of "
"the machine configuration will be saved in the user's Linux home directory.  "
"The file name will be <machine_name>_<version>_<date>_<time>.tar.gz where "
"<machine_name> is the machine name entered in the configuration wizard, "
"<version> is the current QtPlasmaC version the user is on, <date> is the "
"current date (YY-MM-DD), and <time> is the current time (HH-MM-SS)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1282
msgid ""
"Prior to the backup being made, the machine log will be saved to a file in "
"the configuration directory named machine_log_<date>_<time>.txt where <date> "
"and <time> are as described above. This file along with up to five previous "
"machine logs will also be included in the backup."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1284
msgid ""
"These files are not required by QtPlasmaC and are safe to delete at any time."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1286
#, no-wrap
msgid "STATISTICS Tab"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1289
msgid ""
"The <<qt_statistics-tab, STATISTICS Tab>> provides statistics to allow for "
"the tracking of consumable wear and job run times."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1291
msgid ""
"These statistics are shown for the current job as well as the running total."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1293
msgid "Previous job statistics are reset once the next program is run."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1295
msgid ""
"The total values may be reset either individually by clicking the "
"corresponding \"RESET\" button, or they may all be reset together by "
"clicking \"RESET ALL\"."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1298
msgid ""
"The *RS485 PMX STATISTICS* panel will be only be displayed if the user has "
"Hypertherm PowerMax communications and a valid RS485 connection to the "
"PowerMax is established.  This panel will show the *ARC ON TIME* for the "
"PowerMax in hh:mm:ss format."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1301
msgid ""
"The *MACHINE LOG* is also displayed on the <<qt_statistics-tab,STATISTICS "
"Tab>>, this log will display any errors and/or important information that "
"occurs during the current LinuxCNC session.  If the user makes a backup of "
"the configuration from the <<qt_settings-tab, SETTINGS Tab>> then the "
"machine log is also included in the backup."
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:1302
#, no-wrap
msgid "images/qtplasmac_stats.png"
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:1304
#, no-wrap
msgid "Using QtPlasmaC"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1307
msgid ""
"Once QtPlasmaC is successfully installed, no Z axis motion is required to be "
"part of the G-code cut program. In fact, if any Z axis references are "
"present in the cut program, the standard QtPlasmaC configuration will remove "
"them during the program loading process."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1309
msgid ""
"For reliable use of QtPlasmaC the user should *NOT* use any Z axis offsets "
"other than the coordinate system offsets (G54-G59.3)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1311
msgid ""
"QtPlasmaC will automatically add a line of G-code to move the Z axis to the "
"correct height at the beginning of every G-code program."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1313
#, no-wrap
msgid "*Version Information* - QtPlasmaC will display versioning information in the title of the main window. The information will be displayed as followed \"QtPlasmaC vN.XXX.YYY - powered by QtVCP on LinuxCNC vZ.Z.Z\" where N is the version of QtPlasmaC, XXX is the version of the HAL component (PlasmaC.comp), YYY is the GUI version, and Z.Z.Z is the version of LinuxCNC.\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1314
#, no-wrap
msgid "Units Systems"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1317
msgid ""
"All settings and parameters in QtPlasmaC are required to be in the same "
"units as specified in the ini file, being either metric or imperial."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1319
msgid ""
"If the user is attempting to run a G-code file that is in the \"other\" "
"units system then all parameters including the material file parameters are "
"still required to be in the native machines units. Any further conversions "
"necessary to run the G-code file will be handled automatically by the G-code "
"filter program."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1321
msgid ""
"For example: if a user had a metric machine and wished to run a G-code file "
"that was set up to cut 1/4\" thick material using imperial units (inch - "
"G20) then the user with the metric machine would need to ensure that either "
"the material number in the G-code file was set to the corresponding metric "
"material to be cut, or that a new material is created with the correct "
"metric parameters for the metric material to be cut. If the metric user "
"wanted to cut the G-code file using imperial material, then the new material "
"parameters would need to be converted from imperial units to metric when "
"they are entered."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1322
#, no-wrap
msgid "Preamble and Postamble Codes"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1325
msgid ""
"The following stanzas are the minimum recommended codes to include in the "
"preamble and postamble of any G-code file to be run by QtPlasmaC:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1327
msgid "Metric:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1330 src/plasma/qtplasmac.adoc:2631
#, no-wrap
msgid "G21 G40 G49 G64p0.1 G80 G90 G92.1 G94 G97\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1333
msgid "Imperial:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1336
#, no-wrap
msgid "G20 G40 G49 G64p0.004 G80 G90 G92.1 G94 G97\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1339
msgid ""
"A detailed explanation of each G-code can be found in the docs link:../gcode/"
"g-code.html[here]."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1341
msgid ""
"Note that throughout this user guide there are several additional "
"recommendations for codes that are prudent to add to both the preamble and "
"postamble depending on the features the user wishes to utilize."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1342
#, no-wrap
msgid "Mandatory Codes"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1345
msgid ""
"Aside from the preamble code, postamble code, and X/Y motion code, the only "
"mandatory G-code syntax for QtPlasmaC to run a G-code program using a torch "
"for cutting is *M3 $0 S1* to begin a cut and *M5 $0* to end a cut."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1347
msgid ""
"For backwards compatibility it is permissible to use *M3 S1* in lieu of *M3 "
"$0 S1* to begin a cutting job and *M5* in lieu of *M5 $0* to end a cutting "
"job. Note that this applies to cutting jobs only, for scribe and spotting "
"jobs the *$_n_* tool identifier is mandatory."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1348
#, no-wrap
msgid "Coordinates"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1351
msgid "See <<qt_z-settings,recommended Z axis>> settings."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1353
msgid ""
"Each time LinuxCNC (QtPlasmaC) is started Joint homing is required. This "
"allows LinuxCNC (QtPlasmaC) to establish the known coordinates of each axis "
"and set the soft limits to the values specified in the <machine_name>.ini "
"file in order to prevent the machine from crashing into a hard stop during "
"normal use."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1355
msgid ""
"If the machine does not have home switches then the user needs to ensure "
"that all axes are at the home coordinates specified in the <machine_name>."
"ini file before homing."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1357
msgid ""
"If the machine has home switches then it will move to the specified home "
"coordinates when the Joints are homed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1359
msgid ""
"Depending on the machine's configuration there will either be a *Home All* "
"button or each axis will need to be homed individually. Use the appropriate "
"button/buttons to home the machine."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1361
msgid ""
"As mentioned in the <<qt_initial-setup,Initial Setup>> section, it is "
"recommended that the first time QtPlasmaC is used that the user ensure there "
"is nothing below the torch then jog the Z axis down until it stops at the Z "
"axis MINIMUM_LIMIT then click the 0 next to the Z axis DRO to *Touch Off* "
"with the Z axis selected to set the Z axis at zero offset. This should not "
"need to be done again."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1363
msgid ""
"If the user intends to place the material in the exact same place on the "
"table every time, the user could jog the X and Y axes to the machine to the "
"corresponding X0 Y0 position as established by the CAM software and then "
"*Touch Off* both axes with a zero offset."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1365
msgid ""
"If the user intends to place the material randomly on the table then the "
"user must *Touch Off* the X and Y axes at the appropriate position before "
"starting the program."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1369
msgid ""
"QtPlasmaC is able to read a material file to load all the required cut "
"parameters. To enable to G-code file to use the cut feed rate setting from "
"the cut parameters use the following code in the G-code file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1374
#, no-wrap
msgid "F#<_hal[plasmac.cut-feed-rate]>\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1377
msgid ""
"It is possible to use the standard G-code *F* word to set the cut feed rate "
"as follows:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1381
#, no-wrap
msgid "F 1000\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1384
msgid ""
"If the *F* word is used and the *F* word value does not match the cut feed "
"rate of the selected material then a warning dialog will indicate this "
"during loading of the G-code file."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1386
#, no-wrap
msgid "Material File"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1389
msgid ""
"Material handling uses a material file that was created for the machine "
"configuration when the configuration wizard was ran and allows the user to "
"conveniently store known material settings for easy recall either manually "
"or automatically via G-code. The resulting <<qt_material-file, material "
"file>> is named *<machine_name>_material.cfg*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1393
msgid ""
"QtPlasmaC does not require the use of a material file. Instead, the user "
"could change the cut parameters manually from the MATERIAL section of the "
"<<qt_parameters-tab,PARAMETERS Tab>>.  It is also not required to use the "
"automatic material changes.  If the user does not wish to use this feature "
"they can simply omit the material change codes from the G-code file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1395
msgid ""
"It is also possible to not use the material file and <<qt_magic-comments,"
"automatically load materials>> from within the G-code file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1398
msgid ""
"Material numbers in the materials file do not need to be consecutive nor do "
"they need to be in numerical order."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1400
msgid ""
"The following variables are mandatory and an error message will appear if "
"any are not found when the material file is loaded."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1402 src/plasma/qtplasmac.adoc:3750
#, no-wrap
msgid "PIERCE_HEIGHT"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1403 src/plasma/qtplasmac.adoc:3753
#, no-wrap
msgid "PIERCE_DELAY"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1404 src/plasma/qtplasmac.adoc:3755
#, no-wrap
msgid "CUT_HEIGHT"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1405
msgid "CUT_SPEED"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1407
msgid ""
"The following variables are optional. If they are not detected or have no "
"value assigned, they will be assigned a value of 0 and no error message will "
"appear."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1410
msgid "KERF_WIDTH"
msgstr ""

#. type: TH
#: src/plasma/qtplasmac.adoc:1411 man/man9/thc.9:9
#, no-wrap
msgid "THC"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1412
msgid "PUDDLE_JUMP_HEIGHT"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1413
msgid "PUDDLE_JUMP_DELAY"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1414
msgid "CUT_AMPS"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1415
msgid "CUT_VOLTS"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1416 src/plasma/qtplasmac.adoc:3758
#, no-wrap
msgid "PAUSE_AT_END"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1417
msgid "GAS_PRESSURE"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1418
msgid "CUT_MODE"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1421
msgid ""
"Material numbers 1000000 and above are reserved for temporary materials."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1423
msgid ""
"It is the responsibility of the operator to ensure that the variables are "
"included if they are a requirement for the G-code to be run."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1425
msgid "The material file uses the following format:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1443
#, no-wrap
msgid ""
"[MATERIAL_NUMBER_1]\n"
"NAME                = name\n"
"KERF_WIDTH          = value\n"
"THC                 = value (0 = off, 1 = on)\n"
"PIERCE_HEIGHT       = value\n"
"PIERCE_DELAY        = value\n"
"PUDDLE_JUMP_HEIGHT  = value\n"
"PUDDLE_JUMP_DELAY   = value\n"
"CUT_HEIGHT          = value\n"
"CUT_SPEED           = value\n"
"CUT_AMPS            = value (for info only unless PowerMax communications is enabled)\n"
"CUT_VOLTS           = value (modes 0 & 1 only, if not using auto voltage sampling)\n"
"PAUSE_AT_END        = value\n"
"GAS_PRESSURE        = value (only used for PowerMax communications)\n"
"CUT_MODE            = value (only used for PowerMax communications)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1446
msgid ""
"It is possible to add new material, delete material, or edit existing "
"material from the <<qt_parameters-tab,PARAMETERS tab.>> It is also possible "
"to achieve this by using <<qt_magic-comments,magic comments>> in a g-Code "
"file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1448
msgid ""
"The material file may be edited with a text editor while LinuxCNC is "
"running. After any changes have been saved, press *Reload* in the MATERIAL "
"section of the <<qt_parameters-tab, PARAMETERS Tab>> to reload the material "
"file."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1449
#, no-wrap
msgid "Manual Material Handling"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1453
msgid ""
"For manual material handling, the user would manually select the material "
"from the materials list in the MATERIAL section of the <<qt_parameters-tab,"
"PARAMETERS Tab>> before starting the G-code program.  In addition to "
"selecting materials with materials list in the MATERIAL section of the "
"<<qt_parameters-tab, PARAMETERS Tab>>, the user could use the MDI to change "
"materials with the following command:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1457
#, no-wrap
msgid "M190 Pn\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1460
msgid ""
"The following code is the minimum code necessary to have a successful cut "
"using the manual material selection method:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1468
#, no-wrap
msgid ""
"F#<_hal[plasmac.cut-feed-rate]>\n"
"M3 $0 S1\n"
".\n"
".\n"
"M5 $0\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1472
msgid ""
"Manual material handling will restrict the user to only one material for the "
"entire job."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1473
#, no-wrap
msgid "Automatic Material Handling"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1476
msgid ""
"For automatic material handling, the user would add commands to their G-code "
"file which will enable QtPlasmaC to change the material automatically."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1478
msgid ""
"The following codes may be used to allow QtPlasmaC to automatically change "
"materials:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1480
#, no-wrap
msgid "*M190 P__n__* - Changes the currently displayed material to material number _n_.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1481
#, no-wrap
msgid "*M66 P3 L3 Q1* - Adds a small delay (1 second in this example) to wait for QtPlasmaC to confirm that it successfully changed materials.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1482
#, no-wrap
msgid "*F#<_hal[plasmac.cut-feed-rate]>* - Sets the cut feed rate to the feed rate shown in the MATERIAL section of the <<qt_parameters-tab,PARAMETERS Tab>>.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1485
msgid ""
"For automatic material handling, the codes MUST be applied in the order "
"shown.  If a G-code program is loaded which contains one or more material "
"change commands then the first material will be displayed in the top header "
"of the PREVIEW WINDOW on the <<qt_main-tab,MAIN Tab>> as the program is "
"loading. The following code is the minimum code necessary to have a "
"successful cut using the automatic material selection method:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1495
#, no-wrap
msgid ""
"M190 Pn\n"
"M66 P3 L3 Q1\n"
"F#<_hal[plasmac.cut-feed-rate]>\n"
"M3 $0 S1\n"
".\n"
".\n"
"M5 $0\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1498
#, no-wrap
msgid "Material Addition Via Magic Comments In G-code"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1501
msgid ""
"By using \"magic comments\" in a G-code file it is possible to do the "
"following:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1503
msgid "Add new materials to the <machine_name>_material.cfg file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1504
msgid "Edit existing materials in the <machine_name>_material.cfg file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1505
msgid "Use one or more temporary materials."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1509
msgid ""
"Temporary materials are numbered automatically by QtPlasmaC and the material "
"change will also be done by QtPlasmaC and should not be added to the G-code "
"file by CAM software or otherwise.  The material numbers begin at 1000000 "
"and are incremented for each temporary material.  It is not possible to save "
"a temporary material, however the user could create a new material while a "
"temporary material is displayed and it will use the settings from the "
"temporary material as the defaults."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1511
msgid ""
"It is possible to use temporary materials only and have an empty "
"<machine_name>_material.cfg file. This negates the need to keep the "
"QtPlasmaC materials file updated with the CAM tool file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1513
msgid "The entire comment must be in parentheses."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1514
msgid "The beginning of the magic comment must be: *(o=*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1515
msgid "The equals sign must immediately follow each parameter with no space."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1516
msgid ""
"The mandatory parameters must be in the magic comment (for option 0, *na* is "
"optional and *nu* is not used)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1517
msgid "There can be any number and type of magic comments in a G-code file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1518
msgid ""
"If option 0 is to be used in addition to option 1 and/or option 2 then all "
"option 0 must appear after all option 1 or all option 2 in the G-code file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1520
msgid "The options are:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1527
#, no-wrap
msgid ""
"Creates a temporary default material. +\n"
"Material information added with this option will be discarded by a LinuxCNC restart or materials reload.\n"
"They may also be overwritten by a new G-code file that has temporary materials."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1528
#, no-wrap
msgid "Adds a new material if the number specified does not exist."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1530
#, no-wrap
msgid ""
"Overwrites an existing material if the number specified exists. +\n"
"Adds a new material if the number specified does not exist."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1533
msgid "Mandatory parameters are:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1537
#, no-wrap
msgid "o"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1538
#, no-wrap
msgid "Selects the option to be used."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1538
#, no-wrap
msgid "nu"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1539
#, no-wrap
msgid "Sets the material number (not used for option 0)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1539
#, no-wrap
msgid "na"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1540
#, no-wrap
msgid "Sets the material name (optional for option 0)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1540
#, no-wrap
msgid "ph"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1541
#, no-wrap
msgid "Sets the pierce height."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1541
#, no-wrap
msgid "pd"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1542
#, no-wrap
msgid "Sets the pierce delay."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1542
#, no-wrap
msgid "ch"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1543
#, no-wrap
msgid "Sets the cut height."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1543
#, no-wrap
msgid "fr"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1544
#, no-wrap
msgid "Sets the feed rate."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1547
msgid "Optional parameters are:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1551
#, no-wrap
msgid "kw"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1552
#, no-wrap
msgid "Sets the kerf width."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1552
#, no-wrap
msgid "th"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1553
#, no-wrap
msgid "Sets the THC status (0=disabled, 1=enabled)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1553
#, no-wrap
msgid "ca"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1554
#, no-wrap
msgid "Sets the cut amps."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1554
#, no-wrap
msgid "cv"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1555
#, no-wrap
msgid "Sets the cut voltage."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1555
#, no-wrap
msgid "pe"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1556
#, no-wrap
msgid "Sets the pause at end delay."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1556
#, no-wrap
msgid "gp"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1557
#, no-wrap
msgid "Sets the gas pressure (PowerMax)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1557
#, no-wrap
msgid "cm"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1558
#, no-wrap
msgid "Sets the cut mode (PowerMax)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1558
#, no-wrap
msgid "jh"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1559
#, no-wrap
msgid "Sets the puddle jump height."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1559
#, no-wrap
msgid "jd"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1560
#, no-wrap
msgid "Sets the puddle jump delay."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1563
msgid "A complete example:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1567
#, no-wrap
msgid "(o=0, nu=2, na=5mm Mild Steel 40A, ph=3.1, pd=0.1, ch=0.75, fr=3000, kw=0.5, th=1, ca=45, cv=110, pe=0.1, gp=5, cm=1, jh=0, jd=0)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1570
msgid ""
"If a temporary material has been specified in a G-code file then the "
"material change line (M190...) and wait for change line (M66...) will be "
"added by the G-code filter and are not required in the G-code file."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1571
#, no-wrap
msgid "Material Converter"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1574
msgid ""
"This application is used to convert existing tool tables into QtPlasmaC "
"material files. It can also create a material file from manual user input to "
"entry fields."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1576
msgid ""
"At this stage the only conversions available are for tool tables exported "
"from either SheetCam or Fusion 360."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1578
msgid ""
"SheetCam tool tables are complete and the conversion is fully automatic. The "
"SheetCam tool file must be in the SheetCam .tools format."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1580
msgid ""
"Fusion 360 tool tables do not have all of the required fields so the user "
"will be prompted for missing parameters. The Fusion 360 tool file must be in "
"the Fusion 360 .json format."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1582
msgid ""
"If the user has a format from a different CAM software they would like "
"converted, create a *New Topic* in the https://forum.linuxcnc.org/"
"plasmac[PlasmaC forum] section of the https://forum.linuxcnc.org/[LinuxCNC "
"forum] to request this addition."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1584
msgid ""
"Material Converter may be run from a terminal using one of the two following "
"methods."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1589
#, no-wrap
msgid "qtplasmac-materials\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1592 src/plasma/qtplasmac.adoc:3818
msgid ""
"For a run in place installation enter the following two commands in a "
"terminal window:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1596
#, no-wrap
msgid ""
"source ~/linuxcnc-dev/scripts/rip-environment\n"
"qtplasmac-materials\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1599
msgid ""
"This will bring up the Material Converter Main dialog box with Manual "
"selected as the default."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1601
msgid "Select one of:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1603
#, no-wrap
msgid "*Manual* - to manually create a new material file.\n"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:1604
#, no-wrap
msgid "images/qtplasmac_material_main_manual.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1607
#, no-wrap
msgid "*SheetCam* - to convert a SheetCam tool file.\n"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:1608
#, no-wrap
msgid "images/qtplasmac_material_main_sheetcam.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1611
msgid ""
"For SheetCam only, select whether the user requires a metric or imperial "
"output file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1613
#, no-wrap
msgid "*Fusion 360* - to convert a Fusion 360 tool file.\n"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:1614
#, no-wrap
msgid "images/qtplasmac_material_main_fusion360.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1617
msgid "To convert:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1619
msgid ""
"Select the Input File to be converted, press *INPUT* to bring up a file "
"selector or directly enter the file in the entry box."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1622
msgid ""
"Select the Output File to write to, press *OUTPUT* to bring up a file "
"selector or directly enter the file in the entry box.  This would normally "
"be ~/linuxcnc/configs/<machine_name>_material.cfg.  If necessary, the user "
"could select a different file and hand edit the <machine_name>_material.cfg "
"file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1623
msgid "Click *CREATE/CONVERT* and the new material file will be created."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1626
msgid ""
"For both a Manual creation or a Fusion 360 conversion, a dialog box will "
"show with all available parameters displayed for input.  Any entry marked "
"with pass:[***] is mandatory and all other entries are optional depending on "
"the user's configuration needs."
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:1627
#, no-wrap
msgid "images/qtplasmac_material_manual_dialog.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1631
msgid ""
"If the user selects ~/linuxcnc/configs/<machine_name>_material.cfg and the "
"file already exists, it will be overwritten."
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:1635
#, no-wrap
msgid "images/qtplasmac_camview.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1638
msgid ""
"QtPlasmaC has the ability to use a USB camera to set the origin with or "
"without rotation compensation. The CAMERA button will be enabled after the "
"machine is homed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1640
msgid ""
"To use this feature, the user must set the camera's offset from the torch "
"center by following the procedure described in <<peripheral-offsets,"
"Peripheral Offsets>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1642
msgid ""
"To modify the offsets manually, the user could edit either or both the "
"following lines in the *[CAMERA_OFFSET]* section of the <machine_name>.prefs "
"file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1647 src/plasma/qtplasmac.adoc:1688
#, no-wrap
msgid ""
"X axis = n.n\n"
"Y axis = n.n\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1650
msgid ""
"where _n.n_ is distance from the center line of the torch to the camera's "
"cross hairs."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1652 src/plasma/qtplasmac.adoc:1700
#, no-wrap
msgid "*To set the origin with zero rotation:*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1654
msgid "Jog until the cross hairs are on top of the desired origin point."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1655 src/plasma/qtplasmac.adoc:1663
msgid ""
"Press *MARK EDGE*. The *MARK EDGE* button label will change to *SET ORIGIN* "
"and the *GOTO ORIGIN* button will be disabled."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1656 src/plasma/qtplasmac.adoc:1665
msgid ""
"Press *SET ORIGIN*. The *SET ORIGIN* button label will change to *MARK EDGE* "
"and the *GOTO ORIGIN* button will be enabled."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1657 src/plasma/qtplasmac.adoc:1666
msgid "The torch will now move to the X0 Y0 position."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1658
msgid "The offset is now successful set."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1660 src/plasma/qtplasmac.adoc:1710
#, no-wrap
msgid "*To set the origin with rotation:*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1662
msgid ""
"Jog until the cross hairs are at the edge of the material a suitable "
"distance away from the desired origin point."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1664
msgid "Jog until the cross hairs are at the origin point of the material."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1667
msgid "The offset is now successfully set."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1669
msgid ""
"In the CAMVIEW panel, the mouse can affect the cross hairs and the zoom "
"level as follows:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1671
msgid "Mouse Wheel Scroll - Change cross hair diameter."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1672
msgid ""
"Mouse Wheel Button Double Click - Restores cross hair diameter to default."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1673
msgid "Mouse Left Button Clicked + Wheel Scroll - Changes camera zoom level."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1674
msgid ""
"Mouse Left Button Clicked + Wheel Button Double Click - Restores default "
"camera zoom level."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1679
msgid ""
"QtPlasmaC has the ability to use a laser to set the origin with or without "
"rotation compensation. The LASER button will be enabled after the machine is "
"homed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1681
msgid ""
"To use this feature, the user must set the laser's offset from the torch "
"center by following the procedure described in <<peripheral-offsets,"
"Peripheral Offsets>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1683
msgid ""
"To modify the offsets manually, the user could edit either or both the "
"following lines in the *[LASER_OFFSET]* section of the <machine_name>.prefs "
"file:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1691
msgid ""
"where _n.n_ is distance from the center line of the torch to the laser's "
"cross hairs."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1693
msgid ""
"Additionally, the laser can be tied to any available output to turn the "
"laser on and off via a HAL pin with the following name:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1697
#, no-wrap
msgid "qtplasmac.laser_on\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1702 src/plasma/qtplasmac.adoc:1712
#: src/plasma/qtplasmac.adoc:2303
msgid "Click the *LASER* button."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1703 src/plasma/qtplasmac.adoc:1713
#, no-wrap
msgid "*LASER* button label will change to *MARK EDGE* and the HAL pin named qtplasmac.laser_on will be turned on.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1704
#, no-wrap
msgid "Jog until the laser cross hairs are on top of the desired origin point.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1705 src/plasma/qtplasmac.adoc:1715
#, no-wrap
msgid "Press *MARK EDGE*. The *MARK EDGE* button label will change to *SET ORIGIN*.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1706 src/plasma/qtplasmac.adoc:1717
#, no-wrap
msgid "Press *SET ORIGIN*. The *SET ORIGIN* button label will change to *MARK EDGE* and the HAL pin named qtplasmac.laser_on will be turned off.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1707 src/plasma/qtplasmac.adoc:1718
#, no-wrap
msgid "The torch will now move to the X0 Y0 position.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1708
#, no-wrap
msgid "The offset is now successful set.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1714
#, no-wrap
msgid "Jog until the laser cross hairs are at the edge of the material a suitable distance away from the desired origin point.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1716
#, no-wrap
msgid "Jog until the laser cross hairs are at the origin point of the material.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1719
#, no-wrap
msgid "The offset is now successfully set.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1721
#, no-wrap
msgid "*To turn the laser off and cancel an alignment:*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1723
msgid "Press the *LASER* button and hold for longer than 750 mSec."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1724
#, no-wrap
msgid "*LASER* button label will change to *LASER* and the HAL pin named qtplasmac.laser_on will be turned off.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1725
#, no-wrap
msgid "Release the *LASER* button.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1727
msgid ""
"If an alignment laser has been set up then it is possible to use the laser "
"during <<qt_cut-recovery,CUT RECOVERY>> for accurate positioning of the new "
"start coordinates."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1729
#, no-wrap
msgid "Path Tolerance"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1732
msgid ""
"Path tolerance is set with a G64 command and a following P value. The P "
"value corresponds to the amount that the actual cut path followed by the "
"machine may deviate from the programmed cut path."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1734
msgid ""
"The default LinuxCNC path tolerance is set for maximum speed which will "
"severely round corners when used with normal plasma cutting speeds."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1736
msgid ""
"It is recommended that the path tolerance is set by placing the appropriate "
"G64 command and P value in the header of each G-code file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1738
msgid ""
"The provided G-code filter program will test for the existence of a G64 "
"P__n__ command prior to the first motion command. If no G64 command is found "
"it will insert a G64 P0.1 command which sets the path tolerance to 0.1&#8239;"
"mm. For a imperial config the command will be G64 P0.004."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1740
msgid "For Metric:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1743
#, no-wrap
msgid "G64 P0.1\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1746
msgid "For Imperial:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1749
#, no-wrap
msgid "G64 P0.004\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1752
#, no-wrap
msgid "Paused Motion"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1755
msgid ""
"QtPlasmaC has the ability to allow the repositioning of the X and Y axes "
"along the current cut path while the G-code program is paused."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1757
msgid ""
"In order to use this feature, LinuxCNC's Adaptive Feed Control (M52) must be "
"turned on (P1)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1759
msgid ""
"To enable *Paused Motion* The preamble of the G-code must contain the "
"following line:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1763
#, no-wrap
msgid "M52 P1\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1766
msgid "To turn off *Paused Motion* at any point, use the following command:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1770
#, no-wrap
msgid "M52 P0\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1773
#, no-wrap
msgid "Pause At End Of Cut"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1776
msgid ""
"This feature can be used to allow the arc to \"catch up\" to the torch "
"position to fully finish the cut. It is usually required for thicker "
"materials and is especially useful when cutting stainless steel."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1779
msgid ""
"Using this feature will cause all motion to pause at the end of the cut "
"while the torch is still on.  After the dwell time (in seconds) set by the "
"*Pause At End* parameter in the MATERIAL section of the <<qt_parameters-tab,"
"PARAMETERS Tab>> has expired, QtPlasmaC will proceed with the M5 command to "
"turn off and raise the torch."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1781
#, no-wrap
msgid "Multiple Tools"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1784
msgid ""
"QtPlasmaC has the ability to allow the use of more than one type of plasma "
"tool by utilizing LinuxCNC spindles as a plasma tool when running a G-code "
"program."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1786
msgid "Valid plasma tools for use are:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1789
#, no-wrap
msgid "TOOL #"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1790 src/plasma/qtplasmac.adoc:1792
#, no-wrap
msgid "Plasma Torch"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1791
#, no-wrap
msgid "Used for normal Plasma cutting."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1791 src/plasma/qtplasmac.adoc:2362
#, no-wrap
msgid "Scribe"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1792
#, no-wrap
msgid "Used for material engraving."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:1793
#, no-wrap
msgid "Used for spotting (creating dimples to aid in drilling)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1797
msgid ""
"A LinuxCNC spindle number (designated by $_n_) is required to be in the "
"starting command and also the end command to be able to start and stop the "
"correct plasma tool.  Examples:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1799
#, no-wrap
msgid "*M3 $0 S1* will select and start the plasma cutting tool.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1800
#, no-wrap
msgid "*M3 $1 S1* will select and start the scribe.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1801
#, no-wrap
msgid "*M3 $2 S1* will select and start the plasma spotting tool.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1803
#, no-wrap
msgid "*M5 $0* will stop the plasma cutting tool.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1804
#, no-wrap
msgid "*M5 $1* will stop the scribe.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1805
#, no-wrap
msgid "*M5 $2* will stop the plasma spotting tool.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1807
msgid ""
"It is permissible to use *M5 $-1* in lieu of the M5 $_n_ codes above to stop "
"all tools."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1812
msgid ""
"In order to use a scribe, it is necessary for the user to add the X and Y "
"axis offsets to the LinuxCNC tool table.  Tool 0 is assigned to the Plasma "
"Torch and Tool 1 is assigned to the scribe. Tools are selected with a "
"*T__n__ M6* command, and then a *G43 H0* command is required to apply the "
"offsets for the selected tool.  It is important to note that the LinuxCNC "
"tool table and tool commands only come into play if the user is using a "
"<<qt_scribe,scribe>> in addition to a plasma torch.  For more information, "
"see <<qt_scribe,scribe>>."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1814
#, no-wrap
msgid "Velocity Reduction"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1818
msgid ""
"There is a HAL pin available named *motion.analog-out-03* that can be "
"changed in G-code with the *M67 (Synchronized with Motion)/M68 (Immediate)* "
"commands.  This pin will reduce the velocity to the percentage specified in "
"the command."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1820 src/plasma/qtplasmac.adoc:1868
msgid ""
"It is important to thoroughly understand the difference between "
"*Synchronized with Motion* and *Immediate*:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1822
#, no-wrap
msgid "*M67* (Synchronized with Motion) - The actual change of the specified output (P2 (THC) for example) will happen at the beginning of the next motion command. If there is no subsequent motion command, the output changes will not occur. It is best practice to program a motion code (G0 or G1 for example) right after a M67.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1823
#, no-wrap
msgid "*M68* (Immediate) - These commands happen immediately as they are received by the motion controller. Since these are not synchronized with motion, they will break blending. This means if these codes are used in the middle of active motion codes, the motion will pause to activate these commands.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1827
#, no-wrap
msgid "*M67 E3 Q0* would set the velocity to 100% of *CutFeedRate*.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1828
#, no-wrap
msgid "*M67 E3 Q40* would set the velocity to 40% of *CutFeedRate*.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1829
#, no-wrap
msgid "*M67 E3 Q60* would set the velocity to 60% of *CutFeedRate*.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1830
#, no-wrap
msgid "*M67 E3 Q100* would set the velocity to 100% of *CutFeedRate*.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1832
msgid ""
"The minimum percentage allowed is 10%, values below this will be set to 10%."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1834
msgid ""
"The maximum percentage allowed is 100%, values above this will be set to "
"100%."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1836
msgid ""
"If the user intends to use this feature it would be prudent to add *M68 E3 "
"Q0* to both the preamble and postamble of the G-code program so the machine "
"starts and ends in a known state."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1838
#, no-wrap
msgid "*G-CODE THC* AND *VELOCITY BASED THC* ARE NOT ABLE TO BE USED IF *CUTTER COMPENSATION* IS IN EFFECT; AN ERROR MESSAGE WILL BE DISPLAYED.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1840
msgid ""
"If Cut Feed Rate in the MATERIAL section of the <<qt_parameters-tab,"
"PARAMETERS Tab>> is set to Zero then QtPlasmaC will use *motion.requested-"
"velocity* (as set by a standard Feedrate call in the G-code) for the THC "
"calculations. This is not recommended as it is not a reliable way of "
"implementing velocity based THC."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1843
msgid ""
"All references to CutFeedRate refer to the *Cut Feed Rate* value displayed "
"in the MATERIAL section of the <<qt_parameters-tab,PARAMETERS Tab>>."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1845
#, no-wrap
msgid "THC (Torch Height Controller)"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1848
msgid ""
"The THC can be enabled or disabled from the THC frame of the <<qt_main-tab,"
"MAIN Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1850
msgid ""
"The THC can also be enabled or disabled directly from the G-code program."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1852
msgid ""
"The THC does not become active until the velocity reaches 99.9% of the "
"*CutFeedRate* and then the THC *Delay* time if any in the THC section of the "
"<<qt_parameters-tab,PARAMETERS Tab>> has timed out. This is to allow the arc "
"voltage to stabilize."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1854
msgid ""
"QtPlasmaC uses a control voltage which is dependent on the state of the "
"*AUTO VOLTS* checkbox on the <<qt_main-tab,MAIN Tab>>:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1856
msgid ""
"If *Use Auto Volts* is checked then the actual cut voltage is sampled at the "
"end of the THC *Delay* time and this is used as the target voltage to adjust "
"the height of the torch."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1857
msgid ""
"If *Use Auto Volts* is not checked then the voltage displayed as Cut Volts "
"in the MATERIAL section of the <<qt_parameters-tab,PARAMETERS Tab>> is used "
"as the target voltage to adjust the height of the torch."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1859
msgid "[underline]*G-code THC*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1861
msgid ""
"THC may be disabled and enabled directly from G-code, provided the THC is "
"not disabled in the THC Section of the <<qt_main-tab,MAIN Tab>>, by setting "
"or resetting the *motion.digital-out-02* pin with the M-Codes M62-M65:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1863
#, no-wrap
msgid "*M62 P2* will disable THC (Synchronized with Motion)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1864
#, no-wrap
msgid "*M63 P2* will enable THC (Synchronized with Motion)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1865
#, no-wrap
msgid "*M64 P2* will disable THC (Immediately)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1866
#, no-wrap
msgid "*M65 P2* will enable THC (Immediately)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1870
#, no-wrap
msgid "*M62 and M63* (Synchronized with Motion) - The actual change of the specified output (P2 (THC) for example) will happen at the beginning of the next motion command. If there is no subsequent motion command, the output changes will not occur. It is best practice to program a motion code (G0 or G1 for example) right after a M62 or M63.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1871
#, no-wrap
msgid "*M64 and M65* (Immediate) - These commands happen immediately as they are received by the motion controller. Since these are not synchronized with motion, they will break blending. This means if these codes are used in the middle of active motion codes, the motion will pause to activate these commands.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1874
msgid "[underline]*Velocity Based THC*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1877
msgid ""
"If the cut velocity falls below a percentage of *CutFeedRate* (as defined by "
"the VAD Threshold % value in the THC frame of the CONFIGURATION section of "
"the <<qt_parameters-tab,PARAMETERS Tab>>) the THC will be locked until the "
"cut velocity returns to at least 99.9% of *CutFeedRate*.  This will be made "
"apparent by the *VELOCITY ANTI DIVE* indicator illuminating in the "
"<<qt_control-panel,CONTROL Panel>> on the <<qt_main-tab,MAIN Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1879
msgid ""
"Velocity based THC prevents the torch height being changed when velocity is "
"reduced for a sharp corner or a small hole."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1881
msgid ""
"It is important to note that <<qt_velocity-reduction,Velocity Reduction>> "
"affects the Velocity Based THC in the following ways:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1883
msgid ""
"If Velocity Reduction is invoked in the middle of the cut, the THC will be "
"locked."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1884
msgid ""
"The THC will remain locked until the velocity reduction is canceled by "
"returning it to a value that is above the *VAD Threshold*, and the torch "
"actually reaches 99.9% of the *CutFeedRate*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1889
msgid ""
"LinuxCNC (QtPlasmaC) has the ability to automatically adjust the cut path of "
"the current program by the amount specified in Kerf Width of the selected "
"material's Cut Parameters. This is helpful if the G-code is programmed to "
"the nominal cut path and the user will be running the program on different "
"thickness materials to help ensure consistently sized parts."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1891
msgid ""
"To use cutter compensation the user will need to use G41.1, G42.1 and G40 "
"with the kerf width HAL pin:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1893
#, no-wrap
msgid "*G41.1 D#<_hal[plasmac.kerf-width]>* : offsets torch to the left of the programmed path\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1894
#, no-wrap
msgid "*G42.1 D#<_hal[plasmac.kerf-width]>* : offsets torch to the right of the programmed path\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1895
#, no-wrap
msgid "*G40* turns the cutter compensation off\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1897
msgid ""
"IF *CUTTER COMPENSATION* IS IN EFFECT *G-CODE THC*, *VELOCITY BASED THC* AND "
"*OVER CUT* ARE NOT ABLE TO BE USED; AN ERROR MESSAGE WILL BE DISPLAYED."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1899
#, no-wrap
msgid "Initial Height Sense (IHS) Skip"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1902
msgid "Initial Height Sense may be skipped in one of two different ways:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1906
msgid ""
"If the THC is disabled, or the THC is enabled but not active, then the IHS "
"skip will occur if the start of the cut is less than *Skip IHS* distance "
"from the last successful probe."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1909
msgid ""
"If the THC is enabled and active, then the IHS skip will occur if the start "
"of the cut is less than *Skip IHS* distance from the end of the last cut."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1911
msgid "A value of zero for *Skip IHS* will disable all IHS skipping."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1913
msgid ""
"Any errors encountered during a cut will disable IHS skipping for the next "
"cut if *Skip IHS* is enabled."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1919
msgid ""
"Probing may be done with either ohmic sensing or a float switch.  It is also "
"possible to combine the two methods, in which case the float switch will "
"provide a fallback to ohmic probing. An alternative to ohmic probing is "
"<<qt_offset_probing,Offset Probing>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1923
msgid ""
"If the machine's torch does not support ohmic probing, the user could have a "
"separate probe next to the torch.  In this case the user would extend the "
"probe below the torch.  The probe must NOT extend more than the minimum Cut "
"Height below the torch and the Z axis offset distance needs to be entered as "
"the *Ohmic Offset* in the PROBING frame of the CONFIGURATION section of the "
"<<qt_parameters-tab,PARAMETERS Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1925
msgid ""
"Probing setup is done in the PROBING frame of the CONFIGURATION section of "
"the <<qt_parameters-tab,PARAMETERS Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1927
msgid ""
"QtPlasmaC can probe at the full Z axis velocity so long as the machine has "
"enough movement in the float switch to absorb any overrun. If the machine's "
"float switch travel is suitable, the user could set the Probe Height to near "
"the Z axis MINIMUM_LIMIT and do all probing at full speed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1929
msgid ""
"Some float switches can exhibit a large switching hysteresis which shows up "
"in the probing sequence as an excessive time to complete the final probe up."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1931
msgid "This time may be decreased by changing the speed of the final probe up."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1932
msgid "This speed defaults to 0.001mm (0.000039\") per servo cycle."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1933
msgid ""
"It is possible to increase this speed by up to a factor of 10 by adding the "
"following line to the custom.hal file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1937
#, no-wrap
msgid "setp plasmac.probe-final-speed n\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1940
msgid ""
"where _n_ is a value from 1-10. It is recommended to keep this value as low "
"as possible."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1942
msgid ""
"Using this feature will change the final height slightly and will require "
"thorough probe testing to confirm the final height."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1944
msgid ""
"This speed value affects ALL probing so if the user uses ohmic probing and "
"the user changes this speed value then the user will need to probe test to "
"set the require offset to compensate for this speed change as well as the "
"float travel."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1946
msgid ""
"The reliability of this feature will only be as good as the repeatability of "
"the float switch."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1949
msgid "Probe Height refers to the height above the Z axis MINIMUM_LIMIT."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1951
#, no-wrap
msgid "Offset Probing"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1956
msgid ""
"Offset Probing is the use of a probe that is offset from the torch.  This "
"method is an alternative to Ohmic Probing and uses the plasmac.ohmic-enable "
"output pin to operate a solenoid for extending and retracting the probe.  "
"The plasmac.ohmic-probe input pin is used to detect the material and the "
"*Ohmic Offset* in the PROBING frame of the CONFIGURATION section of the "
"<<qt_parameters-tab,PARAMETERS Tab>> is used to set the correct measured "
"height."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1959
msgid ""
"The probe could be a mechanically deployed probe, a permanently mounted "
"proximity sensor or even simply a stiff piece of wire extending about 0.5mm "
"(0.2\") below the torch tip.  If the probe is mechanically deployed then it "
"needs to extend/retract rather quickly to avoid excessive probing times and "
"would commonly be pneumatically operated."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1961
msgid ""
"To use this feature, the user must set the probe's offset from the torch "
"center by following the procedure described in <<peripheral-offsets,"
"Peripheral Offsets>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1963
msgid ""
"To modify the offsets manually, the user could edit either or both the "
"following lines in the *[OFFSET_PROBING]* section of the <machine_name>."
"prefs file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1969
#, no-wrap
msgid ""
"X axis = n.n\n"
"Y axis = n.n\n"
"Delay = t.t\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1972
msgid ""
"where _n.n_ is the offset of the probe from the torch center in machine "
"units for the X and Y axes and _t.t_ is the time in seconds to allow for any "
"mechanical deployment of the probe if required."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1974
msgid ""
"Each of these parameters is optional and also may appear in any order. If a "
"parameter is not detected then the default is 0.0. There can be no space "
"after the X or Z, lower case is permissible."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1977
msgid ""
"When this variable appears in the INI file with either X or Y not equal to "
"zero then QtPlasmaC will do *all* Ohmic Probing as Offset Probing.  When a "
"probe sequence has begun, the plasmac.ohmic-enable pin will be set True "
"causing the probe to extend. When the material is detected the plasmac.ohmic-"
"enable pin will be reset to false causing the probe to retract."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1980
msgid ""
"The probe will begin moving to the offset position simultaneously with the Z "
"axis moving down to the Probe Height, probing will not commence unless the "
"deployment timer has completed.  It is required that the *Probe Height* in "
"the PROBING frame of the CONFIGURATION section of the <<qt_parameters-tab,"
"PARAMETERS Tab>> is above the top of the material to ensure that the probe "
"is fully offset to the correct X/Y position before the final vertical probe "
"down movement."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1982
msgid ""
"PROBE HEIGHT NEEDS TO BE SET ABOVE THE TOP OF THE MATERIAL FOR OFFSET PROBING"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:1984
#, no-wrap
msgid "Cut Types"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1987
msgid "QtPlasmaC allows two different cut modes:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1989
#, no-wrap
msgid "*NORMAL CUT* - runs the loaded G-code program to pierce then cut.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1990
#, no-wrap
msgid "*PIERCE ONLY* - only pierces the material at each cut start position, useful prior to a *NORMAL CUT* on <<qt_thick-materials,thick materials>>\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1992
msgid "There are two ways of enabling this feature:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1994
msgid ""
"Utilize the default <<qt_button-cut,custom user button>> to toggle between "
"the cut types."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:1995
msgid ""
"Adding the following line to the G-code program before the first cut to "
"enable *Pierce Only* mode for the current file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:1999
#, no-wrap
msgid "#<pierce-only> = 1\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2002
msgid ""
"If using a custom user button is utilized then QtPlasmaC will automatically "
"reload the file when the cut type is toggled."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2003
#, no-wrap
msgid "Hole Cutting - Intro"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2006
msgid ""
"It is recommended that any holes to be cut have a diameter no less than one "
"and a half times the thickness of the material to be cut."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2008
msgid ""
"It is also recommended that holes with a diameter of less than 32mm (1.26\") "
"are cut at 60% of the feed rate used for profile cuts. This should also lock "
"out THC due to velocity constraints."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2010
msgid ""
"QtPlasmaC can utilize G-code commands usually set by a CAM Post Processor "
"(PP) to aid in hole cutting or if the user does not have a PP or the user's "
"PP does not support these methods then QtPlasmaC can automatically adapt the "
"G-code to suit. This automatic mode is disabled by default."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2012
msgid ""
"There are three methods available for improving the quality of small holes:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2014
#, no-wrap
msgid "*Velocity Reduction* - <<qt_hole-cutting-velocity-reduction,Reducing the velocity>> to approximately 60% of the *CutFeedRate*.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2015
#, no-wrap
msgid "*Arc Dwell (<<qt_pause-at-end, Pause At End>>)* - Keeping the torch on for a short time at the end of the hole while motion is stopped to allow the arc to catch up.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2016
#, no-wrap
msgid "*Over cut* - Turning the torch off at the end of the hole then continue along the path.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2019
msgid ""
"If both *Arc Dwell* and *Over cut* are active at the same time then *Over "
"cut* will take precedence."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2021
#, no-wrap
msgid "*OVER CUT* IS NOT ABLE TO BE USED IF CUTTER COMPENSATION IS IN EFFECT; AN ERROR MESSAGE WILL BE DISPLAYED.\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2022
#, no-wrap
msgid "Hole Cutting"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2025
msgid ""
"G-code commands can be set up by either by a CAM Post Processor (PP) or by "
"hand coding."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2028
msgid "[underline]*Hole Cutting Velocity Reduction*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2032
msgid ""
"If cutting a hole requires a reduced velocity then the user would use the "
"following command to set the velocity: *M67 E3 Qnn* where nn is the "
"percentage of the velocity desired.  For example, *M67 E3 Q60* would set the "
"velocity to 60% of the current material's *CutFeedRate*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2034
msgid "See the <<qt_velocity_thc,Velocity Based THC>> section."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2036 src/plasma/qtplasmac.adoc:2079
#: src/plasma/qtplasmac.adoc:2136
msgid "Sample code:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2052
#, no-wrap
msgid ""
"G21 (metric)\n"
"G64 P0.005\n"
"M52 P1 (allow paused motion)\n"
"F#<_hal[plasmac.cut-feed-rate]> (feed rate from cut parameters)\n"
"G0 X10 Y10\n"
"M3 $0 S1 (start cut)\n"
"G1 X0\n"
"M67 E3 Q60 (reduce feed rate to 60%)\n"
"G3 I10 (the hole)\n"
"M67 E3 Q0 (restore feed rate to 100%)\n"
"M5 $0 (end cut)\n"
"G0 X0 Y0\n"
"M2 (end job)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2055 src/plasma/qtplasmac.adoc:2132
msgid "[underline]*Arc Dwell (Pause At End)*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2057
msgid ""
"This method can be invoked by setting the <<qt_pause-at-end,Pause At End>> "
"parameter in the MATERIAL frame of the <<qt_parameters-tab,PARAMETERS Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2060 src/plasma/qtplasmac.adoc:2124
msgid "[underline]*Over cut*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2063
msgid ""
"The torch can be turned off at the end of the hole by setting the *motion."
"digital-out-03* pin with the M-Codes *M62 (Synchronized with Motion)* or "
"*M64 (Immediate)*.  After turning the torch off it is necessary to allow the "
"torch to be turned on again before beginning the next cut by resetting the "
"*motion.digital-out-03* pin with the M-Codes *M63* or *M65*, this will be "
"done automatically by the QtPlasmaC G-code parser if it reaches an M5 "
"command without seeing a *M63 P3* or *M65 P3*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2065
msgid ""
"After the torch is turned off the hole path will be followed for a default "
"length of 4mm (0.157\"). This distance may be specified by adding "
"*#<oclength> = _n_* to the G-code file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2067
#, no-wrap
msgid "*M62 P3* will turn the torch off (Synchronized with Motion)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2068
#, no-wrap
msgid "*M63 P3* will allow the torch to be turned on (Synchronized with Motion)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2069
#, no-wrap
msgid "*M64 P3* will turn the torch off (Immediately)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2070
#, no-wrap
msgid "*M65 P3* will allow the torch to be turned on (Immediately)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2072 src/plasma/qtplasmac.adoc:2271
msgid ""
"It is important to thoroughly understand the difference between "
"*Synchronized with motion* and *Immediate*:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2075 src/plasma/qtplasmac.adoc:2274
#, no-wrap
msgid ""
"*M62 and M63* (Synchronized with Motion) - The actual change of the specified output (P2 (THC) for example) will happen at the beginning of the next motion command.\n"
"If there is no subsequent motion command, the output changes will not occur. It is best practice to program a motion code (G0 or G1 for example) right after a M62 or M63.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2077 src/plasma/qtplasmac.adoc:2276
#, no-wrap
msgid ""
"*M64 and M65* (Immediate) - These commands happen immediately as they are received by the motion controller. Since these are not synchronized with motion, they will break blending.\n"
"This means if these codes are used in the middle of active motion codes, the motion will pause to activate these commands.\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2098
#, no-wrap
msgid ""
"G21 (metric)\n"
"G64 P0.005\n"
"M52 P1 (allow paused motion)\n"
"F#<_hal[plasmac.cut-feed-rate]> (feed rate from cut parameters)\n"
"G0 X10 Y10\n"
"M3 $0 S1 (start cut)\n"
"G1 X0\n"
"M67 E3 Q60 (reduce feed rate to 60%)\n"
"G3 I10 (the hole)\n"
"M62 P3 (turn torch off)\n"
"G3 X0.8 Y6.081 I10 (continue motion for 4mm)\n"
"M63 P3 (allow torch to be turned on)\n"
"M67 E3 Q0 (restore feed rate to 100%)\n"
"M5 $0 (end cut)\n"
"G0 X0 Y0\n"
"M2 (end job)\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2101
#, no-wrap
msgid "Hole Cutting - Automatic"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2104
msgid ""
"QtPlasmaC has the ability to automatically modify the G-code to reduce the "
"velocity and/or apply *Over cut* which can be useful when cutting holes."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2106
msgid ""
"For valid hole sensing it is required that all values in the G2 or G3 G-code "
"line are explicit, an error dialog will be displayed if any values are "
"mathematically calculated."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2108
msgid ""
"QtPlasmaC Hole Sensing is disabled by default. It can be enabled/disabled by "
"using the following G-code parameters to select the desired hole sensing "
"mode:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2110
#, no-wrap
msgid "*#<holes> = 0* - Causes QtPlasmaC to disable hole sensing if it was previously enabled.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2111
#, no-wrap
msgid "*#<holes> = 1* - Causes QtPlasmaC to reduce the speed of holes less than 32mm (1.26\") to 60% of *CutFeedRate*.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2112
#, no-wrap
msgid "*#<holes> = 2* - Causes QtPlasmaC to <<qt_overcut,Over cut>> the hole in addition to the velocity changes in setting 1.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2113
#, no-wrap
msgid "*#<holes> = 3* - Causes QtPlasmaC to reduce the speed of holes less than 32mm (1.26\") and arcs less than 16mm (0.63\") to 60% of *CutFeedRate*.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2114
#, no-wrap
msgid "*#<holes> = 4* - Causes QtPlasmaC to <<qt_overcut,Over cut>> the hole in addition to the velocity change in setting 3.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2116
msgid ""
"The default hole size for QtPlasmaC hole sensing is 32mm (1.26\"). It is "
"possible to change this value with the following command in a G-code file:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2118
#, no-wrap
msgid "*#<h_diameter> = nn* - To set a diameter (nn) in the same units system as the rest of the G-code file.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2120
msgid ""
"The default velocity for QtPlasmaC small holes is 60% of the current feed "
"rate. It is possible to change this value with the following command in a G-"
"code file:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2122
#, no-wrap
msgid "*#<h_velocity> = nn* - to set the percentage (nn) of the current feed rate required.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2126
msgid ""
"If Hole Sensing modes 2 or 4 are active, QtPlasmaC will over cut the hole in "
"addition to the velocity changes associated with modes 1 and 3."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2128
msgid ""
"The default over cut length for QtPlasmaC hole sensing is 4mm (0.157\"). It "
"is possible to change this value with the following command in a G-code file:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2130
#, no-wrap
msgid "*#<oclength> = nn* to specify an over cut length (nn) in the same units system as the rest of the G-code file.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2134
msgid ""
"This feature can be used in addition to setting the desired hole sensing "
"mode via the appropriate G-code parameter by setting the <<qt_pause-at-end,"
"Pause At End>> parameter in the MATERIAL frame of the <<qt_parameters-tab,"
"PARAMETERS Tab>>."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2152
#, no-wrap
msgid ""
"G21 (metric)\n"
"G64 P0.005\n"
"M52 P1 (allow paused motion)\n"
"F#<_hal[plasmac.cut-feed-rate]> (feed rate from cut parameters)\n"
"#<holes> = 2 (over cut for holes)\n"
"#<oclength> = 6.5 (optional, 6.5mm over cut length)\n"
"G0 X10 Y10\n"
"M3 $0 S1 (start cut)\n"
"G1 X0\n"
"G3 I10 (the hole)\n"
"M5 $0 (end cut)\n"
"G0 X0 Y0\n"
"M2 (end job)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2156
msgid ""
"It is OK to have multiple and mixed hole commands in a single G-code file."
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:2157 src/plasma/qtplasmac.adoc:3382
#, no-wrap
msgid "Single Cut"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2160
msgid ""
"A single cut is a single unidirectional cutting move often used to cut a "
"sheet into smaller pieces prior to running a G-code program."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2162
msgid "The machine needs to be homed before commencing a single cut."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2164
msgid "A single cut will commence from the machine's current X/Y position."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2167
msgid "[underline]*Automatic Single Cut*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2169
msgid ""
"This is the preferred method. The parameters for this method are entered in "
"the following dialog box that is displayed after pressing a <<qt_button-"
"single,user button>> which has been coded to run single cut:"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:2170
#, no-wrap
msgid "images/qtplasmac_single_cut.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2173 src/plasma/qtplasmac.adoc:2183
msgid "Jog to the required X/Y start position. +"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2174
msgid ""
"Set required appropriate material, or edit the Feed Rate for the default "
"material in the <<qt_parameters-tab,PARAMETERS Tab>>. +"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2175
msgid "Press the assigned single cut user button. +"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2176
msgid "Enter the length of the cut along the X and/or Y axes. +"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2177
msgid "Press the *CUT* button and the cut will commence."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2179
msgid "[underline]*Pendant Single Cut*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2181
msgid ""
"If the machine is equipped with a pendant that can start and stop the "
"spindle plus jog the X and Y axes, the user can manually perform a single "
"cut."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2184
msgid "Set the required feed rate with the Jog Speed slider. +"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2185
msgid "Start the cut process by starting the spindle. +"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2186
msgid "After probing the torch will fire. +"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2187
msgid ""
"When the Arc OK is received the machine can be jogged along the cut line "
"using the jog buttons. +"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2188
msgid "When the cut is complete stop the spindle. +"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2189 src/plasma/qtplasmac.adoc:2207
msgid ""
"The torch will turn off and the Z axis will return to the starting position."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2192
msgid "[underline]*Manual Single Cut*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2195
msgid ""
"Manual single cut requires that either <<qt_keyboard-shortcuts,keyboard "
"shortcuts>> are enabled in the GUI SETTINGS section of the <<qt_settings-"
"tab, SETTINGS Tab>>, or a custom user button is specified as a <<qt_button-"
"mancut,manual cut>> button."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2197
msgid ""
"If the user is using a custom user button then substitute *F9* with *User "
"Button* in the following description."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2199
msgid "Jog to the required X/Y start position."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2202
msgid ""
"Start the procedure by pressing *F9*. The jog speed will be automatically "
"set to the feed rate of the currently selected material.  The jog label will "
"blink to indicate that the jog speed is temporarily being overridden (jog "
"speed manipulation will be disabled while a manual cut is active).  *CYCLE "
"START* will change to *MANUAL CUT* and blink."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2203
msgid "After probing the torch will fire."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2204
msgid ""
"When the Arc OK is received the machine can be jogged along the cut line "
"using the jog keys."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2205
msgid ""
"The Z height will remain locked at the cut height for the duration of the "
"manual cut, regardless of the Torch Height Controller *ENABLE* status."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2206
msgid ""
"When the cut is complete press *F9* or *Esc* or the *CYCLE STOP* button."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2209
msgid ""
"The jog speed will automatically be returned to the value it was prior to "
"initiating the manual cut process, the label will stop blinking and the jog "
"speed manipulation will be enabled.  *MANUAL CUT* will stop blinking and "
"revert to *CYCLE START*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2213
msgid ""
"If the torch flames out during cutting, the user must still press *F9* or "
"*Esc* or the *CYCLE STOP* button to end the cut.  This clears the Z offsets "
"and returns the torch to the starting position."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2215
#, no-wrap
msgid "Thick Materials"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2218
msgid ""
"Cutting thick materials can be problematic in that the large amount of "
"molten metal caused by piercing can shorten the life of consumables and also "
"may cause a puddle high enough that the torch may hit the puddle while "
"moving to cut height."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2220
msgid ""
"The are two functions built into QtPlasmaC to help alleviate these issues."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2222
msgid "[underline]*Pierce Only*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2224
#, no-wrap
msgid "*Pierce Only* mode converts the loaded G-code program and then runs the program to pierce the material at the start position of each cut. Scribe and Spotting commands will be ignored and no pierce will take place in those locations.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2226
msgid ""
"This mode is useful for thick materials which may produce enough dross on "
"the material surface from piercing to interfere with the torch while "
"cutting. The entire sheet can pierced and then cleaned off prior to cutting."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2228
msgid ""
"It is possible to use near-end-of-life consumables for piercing and then "
"they can be swapped out for good consumables to be used while cutting."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2230
#, no-wrap
msgid "*Pierce Only* is one of two different <<qt_cut-types,cut types>>\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2232
msgid "[underline]*Puddle Jump*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2235
#, no-wrap
msgid ""
"*Puddle Jump* is the height that the torch will move to after piercing and prior to moving to *Cut Height* and is expressed as a percentage of *Pierce Height*.\n"
"This allows the torch to clear any puddle of molten material tht may be caused by piercing. The maximum allowable height is 200% of the *Pierce Height*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2237
msgid ""
"Setting for *Puddle Jump* are described in <<qt_material,cut parameters>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2239
msgid ""
"The recommended option is to use *Pierce Only* due to it being able to "
"utilise near end of life consumables."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2241
#, no-wrap
msgid "*PUDDLE JUMP* IS DISABLED DURING CUT RECOVERY\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2243
#, no-wrap
msgid "Mesh Mode (Expanded Metal Cutting)"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2246
msgid ""
"QtPlasmaC is capable of cutting of expand (mesh) metal provided the machine "
"has a pilot arc torch and it is capable of Constant Pilot Arc (CPA) mode."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2248
#, no-wrap
msgid "*Mesh Mode* disables the THC and also ignores a lost Arc OK signal during a cut. It can be selected by checking the *Mesh Mode* check button in the CONTROL section of the <<qt_main-tab,MAIN Tab>>.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2250
msgid ""
"If the machine has <<qt_pm_comms,RS485>> communications enabled with a "
"Hypertherm PowerMax plasma cutter, selecting *Mesh Mode* will automatically "
"override the *Cut Mode* for the currently selected material and set it to "
"cut mode 2 (CPA). When *Mesh Mode* is disabled, the *Cut Mode* will be "
"return to the default cut mode for the currently selected material."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2252
msgid ""
"It is also possible to start a *Mesh Mode* cut without receiving an Arc OK "
"signal by checking the *Ignore Arc OK* check button in the CONTROL section "
"of the <<qt_main-tab,MAIN Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2254 src/plasma/qtplasmac.adoc:2280
msgid ""
"Both *Mesh Mode* and *Ignore Arc OK* can be enabled/disabled at any time "
"during a job."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2256
#, no-wrap
msgid "Ignore Arc OK"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2259
#, no-wrap
msgid "*Ignore Arc OK* mode disables the THC, will begin a cut without requiring an Arc OK signal, and will ignore a lost Arc OK signal during a cut.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2261
msgid "This mode can be selected by:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2263
msgid ""
"Checking the *Ignore Arc OK* check button in the CONTROL section of the "
"<<qt_main-tab,MAIN Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2264
msgid "Setting HAL pin *motion.digital-out-01* to 1 via G-code."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2266
#, no-wrap
msgid "*M62 P1* will enable *Ignore Arc OK* (Synchronized with Motion)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2267
#, no-wrap
msgid "*M63 P1* will disable *Ignore Arc OK* (Synchronized with Motion)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2268
#, no-wrap
msgid "*M64 P1* will enable *Ignore Arc OK* (Immediately)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2269
#, no-wrap
msgid "*M65 P1* will disable *Ignore Arc OK* (Immediately)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2278
msgid ""
"This mode may also be used in conjunction with *Mesh Mode* if the user "
"doesn't require an Arc OK signal to begin the cut."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2282
#, no-wrap
msgid "Cut Recovery"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:2284
#, no-wrap
msgid "images/qtplasmac_cut_recovery.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2287
msgid ""
"This feature will produce a CUT RECOVERY panel that will allow the torch to "
"be moved away from the cut path during a <<qt_paused-motion,paused motion>> "
"event in order to position the torch over a scrap portion of the material "
"being cut so that the cut restarts with a minimized arc-divot. The CUT "
"RECOVERY panel will display automatically over top of the JOGGING panel when "
"motion is paused."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2289
msgid ""
"It is preferable to make torch position adjustments from the point at which "
"paused motion occurred, however if moving along the cut path is necessary "
"prior to setting the new start point, the user may use the paused motion "
"controls (*REV*, *FWD*, and a *JOG-SPEED* slider) at the top of the CUT "
"RECOVERY panel. Once the user is satisfied with the positioning of the torch "
"along the cut path, moving off the cut path is achieved by pressing the "
"*DIRECTION* buttons. Each press of the *DIRECTION* button will move the "
"torch a distance equivalent to the *Kerf Width* parameter of the currently "
"selected material."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2291
msgid ""
"The moment the torch has been moved off the cut path, the paused motion "
"controls (*REV*, *FWD*, and a *JOG-SPEED* slider) at the top of the CUT "
"RECOVERY panel will become disabled."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2293
msgid ""
"Once the torch position is satisfactory, press *CYCLE RESUME* and the cut "
"will resume from the new position and travel the shortest distance to the "
"original paused motion location. The CUT RECOVERY panel will close and the "
"JOGGING panel will display when the torch returns to the original paused "
"motion location."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2295
msgid ""
"Pressing *CANCEL MOVE* will cause the torch to move back to where it was "
"positioned before the direction keys were used to offset the torch. It will "
"not reset any *REV* or *FWD* motion."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2297
msgid ""
"Pressing *CYCLE STOP* will cause the torch to move back to where it was "
"positioned before the direction keys were used to offset the torch and the "
"CUT RECOVERY panel overlay will return to the JOGGING panel. It will not "
"reset any *REV* or *FWD* motion."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2299
msgid ""
"If an alignment laser has been set up then it is possible to use the laser "
"during cut recovery for very accurate positioning of the new start "
"coordinates. If either the X axis offset or Y axis offset for the laser "
"would cause the machine to move out of bounds then an error message will be "
"displayed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2301
#, no-wrap
msgid "*To use a laser for cut recovery when paused during a cut:*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2304
#, no-wrap
msgid "*LASER* button will change to disabled, the HAL pin named qtplasmac.laser_on will be turned on and the X and Y axis will offset so that the laser cross hairs will indicate the starting coordinates of the cut when it is resumed.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2305
#, no-wrap
msgid "Continue the cut recovery as described above.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2307
msgid ""
"If a laser offset is in effect when *CANCEL MOVE* is pressed then this "
"offset will also be cleared."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2310
msgid ""
"Cut recovery movements will be limited to a radius of 10mm (0.4\") from "
"either the point the program was paused, or from the last point on the cut "
"path if paused motion was used."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2312
msgid "PUDDLE JUMP IS DISABLED DURING CUT RECOVERY"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2317
msgid ""
"If the user has the Run From Line option enabled in the GUI SETTINGS section "
"of the <<qt_settings-tab, SETTINGS Tab>> they will have the ability to start "
"from any line in a G-code program via the following methods:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2319
msgid "Clicking any line in the Preview Window"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2320
msgid "Clicking any line in the G-code Window"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2322
msgid ""
"Note that the Run From Line function will run from the beginning of the "
"selected line."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2324
msgid ""
"It is important to note that G-code programs can be run from any selected "
"line using this method, however a leadin may not be possible depending on "
"the line selected. In this case, an error message will be displayed to let "
"the user know the leadin calculation was not possible."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2326
msgid ""
"Once the user has selected the starting place, the *CYCLE START* button will "
"blink *\"SELECTED nn\"* where nn is the corresponding line number selected. "
"Clicking this button will bring up the following Run From Line dialog box:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2328
msgid ""
"It is not possible to use Run From Line from within a subroutine. If the "
"user selects a line within a subroutine and clicks *\"SELECTED nn\"* then an "
"error message will be displayed that includes the O-Code name of the "
"subroutine."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2330
msgid ""
"It is not possible to use Run From Line if previous G-code has set cutter "
"compensation active. If the user selects a line while cutter compensation is "
"active and clicks *\"SELECTED nn\"* then an error message will be displayed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2332
msgid "It is possible to select a new line while Run From Line is active."
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:2333
#, no-wrap
msgid "images/qtplasmac_run_from_line.png"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2338
#, no-wrap
msgid "USE LEADIN"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2339
#, no-wrap
msgid "This radio button will allow the user to start the selected line with a leadin."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2339
#, no-wrap
msgid "LEADIN LENGTH"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2340
#, no-wrap
msgid "If USE LEADIN is selected, this will set the length of the lead in the machine units."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2340
#, no-wrap
msgid "LEADIN ANGLE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2346
#, no-wrap
msgid ""
"If USE LEADIN is selected, this will set the angle of approach for the leadin. +\n"
"The angle is measured such that positive increases in value move the leadin counter-clockwise: +\n"
"0 Degrees = 3 o'clock position +\n"
"90 Degrees = 12 o'clock position +\n"
"180 Degrees = 9 o'clock position +\n"
"270 Degrees = 6 o'clock position"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2346
#, no-wrap
msgid "CANCEL"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2347
#, no-wrap
msgid "This button will cancel the Run From Line dialog box and any selections."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2347
#, no-wrap
msgid "LOAD"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2351
#, no-wrap
msgid ""
"This button will load a temporary \"rfl.ngc\" program with any selected leadin parameters applied. +\n"
"If the leadin cannot be calculated for the selected line, the following error message will be displayed: +\n"
"\"Unable to calculate a leadin for this cut +\n"
"Program will run from selected line with no leadin applied\""
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2354
msgid ""
"After pressing *LOAD*, the blinking \"SELECTED nn\" button will change to "
"*RUN FROM LINE CYCLE START* button. Click this button to start the program "
"from the beginning of the selected line."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2356
#, no-wrap
msgid "*Run From Line selections may be canceled in the following ways:*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2358
msgid ""
"Click the background of the preview window - this method will cancel a "
"selection of either a cut line in the preview window, or a G-code line in "
"the G-code window."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2359
msgid ""
"Click the text of the first line of the G-code program in the G-code display "
"- this method will cancel a selection of either a cut line in the preview "
"window, or a G-code line in the G-code window."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2360
msgid ""
"Clicking *RELOAD* in the G-code window header - this method will cancel the "
"Run From Line process if LOAD was clicked on the Run From Line dialog box "
"and \"rfl.ngc\" is displayed as the loaded file name in the G-code window "
"header. This will return the user to the originally loaded file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2365
msgid "A scribe may be operated by QtPlasmaC in addition to the plasma torch."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2367
msgid ""
"Using a scribe requires the use of the LinuxCNC tool table. Tool 0 is "
"assigned to the plasma torch and Tool 1 is assigned to the scribe. The "
"scribe X and Y axes offsets from the plasma torch need to be entered into "
"the LinuxCNC tool table. This is done by editing the tool table via the main "
"GUI, or by editing the *tool.tbl* file in the *<machine_name>* configuration "
"directory. This will be done after the scribe can move to the work piece to "
"help determine the appropriate offset."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2370
msgid ""
"The plasma torch offsets for X and Y will always be zero. The tools are "
"selected by the *T__n__ M6* command followed by a *G43 H0* command which is "
"required to apply the offsets.  The tool is then started with a *M3 $_n_ S1* "
"command. For _n_, use 0 for torch cutting or 1 for scribing."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2372
msgid "To stop the scribe, use the G-code command *M5 $1*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2375
msgid ""
"If the user has not yet assigned the HAL pins for the scribe in the "
"configuration wizard then they may do so by using the appropriate "
"<<configuring,configuration wizard>> or by manually editing the HAL file, "
"see <<qt_modify-config,modifying QtPlasmaC>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2378
msgid ""
"There are two HAL output pins used to operate the scribe, the first pin is "
"used to arm the scribe which moves the scribe to the surface of the "
"material.  After the <<qt_scribe-config,Arm Delay>> has elapsed, the second "
"pin is used to start the scribe. After the <<qt_scribe-config,On Delay>> has "
"elapsed, motion will begin."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2380
msgid ""
"Using QtPlasmaC after enabling the scribe requires the selection of either "
"the torch or the scribe in each G-code file as a LinuxCNC tool."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2382
msgid ""
"The first step is to set the offsets for the scribe by following the "
"procedure described in <<peripheral-offsets,Peripheral Offsets>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2384
msgid ""
"The final step is to set the <<qt_scribe-config,scribe delays>> required:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2386
#, no-wrap
msgid "*Arm Delay* - allows time for the scribe to descend to the surface of the material.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2387
#, no-wrap
msgid "*On Delay* - allows time for the scribe to start before motion begins.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2389
msgid "Save the parameters in the Config tab."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2391
msgid ""
"After the above directions are completed, the scribe may be tested manually "
"by issuing a *M3 $1 S1* command in the MDI input. The user may find it "
"helpful to use this method to scribe a small divot and then try to pulse the "
"torch in the same location to align the offsets between the scribe and the "
"torch."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2393
msgid "To use the scribe from G-code:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2409
#, no-wrap
msgid ""
"...\n"
"M52 P1 (paused motion on)\n"
"F#<_hal[plasmac.cut-feed-rate]>\n"
"T1 M6 (select scribe)\n"
"G43 H0 (apply offsets for current tool)\n"
"M3 $1 S1 (start the scribe)\n"
".\n"
"M5 $1 (stop the scribe)\n"
".\n"
"T0 M6 (select torch)\n"
"G43 H0 (apply offsets for current tool)\n"
"G0 X0 Y0 (parking position)\n"
"M5 $-1 (end all)\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2412
msgid ""
"It is a good idea to switch back to the torch at the end of the program "
"before the final rapid parking move so the machine is always in the same "
"state at idle."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2414
msgid ""
"The user can switch between the torch and the scribe any number of times "
"during a program by using the appropriate G-codes."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2416
msgid ""
"Issuing *M3 S1* (without $_n_) will cause the machine to behave as if an *M3 "
"$0 S1* had been issued and issuing *M5* (without $_n_) will cause the "
"machine to behave as if an *M5 $0* had been issued. This will control the "
"torch firing by default in order to provide backward compatibility for "
"previous G-code files."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2418
msgid ""
"If there is an existing manual tool change parameter set in the "
"<machine_name>.hal file then QtPlasmaC will convert it to an automatic tool "
"change."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2420
#, no-wrap
msgid "Spotting"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2423
msgid ""
"To achieve spotting to mark the material prior to drilling etc., QtPlasmaC "
"can pulse the torch for a short duration to mark the spot to drill."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2425
msgid "Spotting can be configured by following these steps:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2427
msgid ""
"Set the arc voltage *Threshold* in the Spotting section of the "
"<<qt_parameters-tab,PARAMETERS Tab>>. Setting the voltage threshold to zero "
"will cause the delay timer to begin immediately upon starting the torch. "
"Setting the voltage threshold above zero will cause the delay timer to begin "
"when the arc voltage reaches the threshold voltage."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2428
msgid ""
"Set the *Time On* in the Spotting section of the <<qt_parameters-tab,"
"PARAMETERS Tab>>. When the *Time On* timer has elapsed, the torch will turn "
"off. Times are adjustable from 0 to 9999 milliseconds."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2430
msgid ""
"The torch is then turned on in G-code with the *M3 $2 S1* command which "
"selects the plasma torch as a spotting tool."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2432
msgid "To turn the torch off, use the G-code command *M5 $2*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2434
msgid ""
"For more information on multiple tools, see <<qt_multi-tool,multiple tools>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2436
msgid ""
"LinuxCNC (QtPlasmaC) requires some motion between any *M3* and *M5* "
"commands. For this reason, a minimal movement at a high speed is required to "
"be programmed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2438
msgid "An example G-code is:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2456
#, no-wrap
msgid ""
"G21 (metric)\n"
"F99999 (high feed rate)\n"
".\n"
".\n"
"G0 X10 Y10\n"
"M3 $2 S1 (spotting on)\n"
"G91 (relative distance mode)\n"
"G1 X0.000001\n"
"G90 (absolute distance mode)\n"
"M5 $2 (spotting off)\n"
".\n"
".\n"
"G0 X0 Y0\n"
"G90\n"
"M2\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2460
msgid ""
"The *high feed rate* of 99999 is to ensure that the motion is at the "
"machine's highest feed rate."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2463
#, no-wrap
msgid ""
"SOME PLASMA CUTTERS WILL NOT BE SUITABLE FOR THIS FEATURE.\n"
"IT IS RECOMMENDED THAT THE USER CARRY OUT SOME TEST SPOTTING TO ENSURE THAT THE PLASMA CUTTER IS CAPABLE OF UTILIZING THIS FEATURE."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2465
#, no-wrap
msgid "Virtual Keyboard Custom Layouts"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2468
msgid ""
"Virtual keyboard support is available for only the \"onboard\" onscreen "
"keyboard. If it is not already on the system it may be installed by typing "
"the following in a terminal:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2471
#, no-wrap
msgid "sudo apt install onboard\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2474
msgid "The following two custom layouts are used for soft key support:"
msgstr ""

#. type: Named 'title' AttributeList argument for macro 'image'
#: src/plasma/qtplasmac.adoc:2475
#, no-wrap
msgid "Number keypad - used for the CONVERSATIONAL Tab and the PARAMETERS Tab"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:2475
#, no-wrap
msgid "images/qtplasmac_numpad.png"
msgstr ""

#. type: Named 'title' AttributeList argument for macro 'image'
#: src/plasma/qtplasmac.adoc:2477
#, no-wrap
msgid "Alpha-numeric keypad - used for G-code editing and file management."
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:2477
#, no-wrap
msgid "images/qtplasmac_keypad.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2480
msgid ""
"If the virtual keyboard has been repositioned and on the next opening of a "
"virtual keyboard it is not visible then clicking twice on the onboard icon "
"in the system tray will reposition the virtual keyboard so the move handle "
"is visible."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2482
#, no-wrap
msgid "Keyboard Shortcuts"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2485
msgid "Below is a list of all available keyboard shortcuts in QtPlasmaC."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2488
msgid "All keyboard shortcuts are disabled by default."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2490
msgid ""
"In order to utilize them, *KB Shortcuts* must be enabled in the *GUI "
"SETTINGS* section of the <<qt_settings-tab, SETTINGS Tab>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2493
#, no-wrap
msgid "Keyboard Shortcut"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2495
#, no-wrap
msgid "Aborts current automated motion (example: a running program, a probe test, etc.) as well as an active torch pulse (behaves the same as clicking CYCLE STOP)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2496
#, no-wrap
msgid "Toggles the GUI E-STOP button (if the GUI E-STOP button is enabled)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2497
#, no-wrap
msgid "Toggles the GUI power button."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2497
#, no-wrap
msgid "F9"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2498
#, no-wrap
msgid "Toggles the \"Cutting\" command, used to begin or end a manual cut."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2498
#, no-wrap
msgid "F12"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2499
#, no-wrap
msgid "Show stylesheet editor."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2499
#, no-wrap
msgid "ALT+RETURN"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2502
#, no-wrap
msgid ""
"Places QtPlasmaC into Manual Data Input (MDI) mode. +\n"
"Note that ALT + ENTER will achieve the same result. +\n"
"In addition, pressing RETURN (or ENTER) with no entry in the MDI will close the MDI window."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2502
#, no-wrap
msgid "`, 1-9, 0"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2503
#, no-wrap
msgid "Changes jog speed to 0%, 10%-90%, 100% of the value present in the DEFAULT_LINEAR_VELOCITY variable in the *[DISPLAY]* section of the <machine_name>.ini file."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2503
#, no-wrap
msgid "SHIFT+`, 1-9, 0"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2504
#, no-wrap
msgid "Changes rapid speed to 0%, 10%-90%, 100%."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2504
#, no-wrap
msgid "CTRL+1-9, 0"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2505
#, no-wrap
msgid "Changes feed rate to 10%-90%, 100%."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2505
#, no-wrap
msgid "CTRL+HOME"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2506
#, no-wrap
msgid "Homes all axes if they are not yet homed and have a homing sequence set in the <machine_name>.ini file. If they are already homed, they will no longer be homed."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2506
#, no-wrap
msgid "CTRL+R"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2507
#, no-wrap
msgid "Cycle Start if the program is not already running. Cycle Resume if the program is paused."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2507
#, no-wrap
msgid "END"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2508
#, no-wrap
msgid "Touches off X and Y to 0."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2508
#, no-wrap
msgid "DEL"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2509
#, no-wrap
msgid "Allows the user to use a laser to set an origin with or without rotation. See the <<qt_laser,LASER section>> for detailed instructions."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2509
#, no-wrap
msgid "SPACE BAR"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2510
#, no-wrap
msgid "Pauses motion."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2510
#, no-wrap
msgid "CTRL+SPACE BAR"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2511
#, no-wrap
msgid "Clears notifications."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2512
#, no-wrap
msgid "Opens a new program."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2513
#, no-wrap
msgid "Loads the previously opened program if no program is loaded. Reloads the current program if there is a program loaded."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2514
#, no-wrap
msgid "Jogs the X axis positive."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2515
#, no-wrap
msgid "Jogs the X axis negative."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2516
#, no-wrap
msgid "Jogs the Y axis positive."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2517
#, no-wrap
msgid "Jogs the Y axis negative."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2517
#, no-wrap
msgid "PAGE UP"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2518
#, no-wrap
msgid "Jogs the Z axis positive."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2518
#, no-wrap
msgid "PAGE DOWN"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2519
#, no-wrap
msgid "Jogs the Z axis negative."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2519
#, no-wrap
msgid "["
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2520
#, no-wrap
msgid "Jogs the A axis positive."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2520
#, no-wrap
msgid "]"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2521
#, no-wrap
msgid "Jogs the A axis negative."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2521
#, no-wrap
msgid "."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2522
#, no-wrap
msgid "Jogs the B axis positive."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2522
#, no-wrap
msgid ","
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2523
#, no-wrap
msgid "Jogs the B axis negative."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2523
#, no-wrap
msgid "SHIFT (+ Jog Key)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2524
#, no-wrap
msgid "The shift key is used with any jog key to invoke a rapid jog."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2524
#, no-wrap
msgid "+ (+Jog Key)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2525
#, no-wrap
msgid "The plus key can be used with any jog key to invoke a rapid jog (behaves the same as SHIFT)."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2525
#, no-wrap
msgid "- (+Jog Key)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2527
#, no-wrap
msgid ""
"The minus key can be used with any jog key to invoke a slow jog (10% of the displayed jog speed) +\n"
"If SLOW jogging is already active, the axis will jog at the displayed jog speed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2534
msgid ""
"In addition to the typical G and M codes that are allowed by LinuxCNC in MDI "
"mode, the MDI in QtPlasmaC can be used to access several other handy "
"features.  The following link outlines the features and their use: <<sub:"
"qtvcp:widgets:mdiline>>[MDILine Widget]"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2537
msgid "M3, M4, and M5 are not allowed in the QtPlasmaC MDI."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2539
#, no-wrap
msgid "*In addition, pressing RETURN (or ENTER) with no entry in the MDI will close the MDI window.*\n"
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:2541
#, no-wrap
msgid "Conversational Shape Library"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2547
msgid ""
"The *Conversational Shape Library* consists of several basic shapes and "
"functions to assist the user with generating quick G-code at the machine to "
"cut simple shapes quickly.  This feature is found on the <<qt_conversational-"
"tab,CONVERSATIONAL Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2550
msgid ""
"The Conversational Library is not meant to be a CAD/CAM replacement as there "
"are limitations to what can be achieved."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2552
msgid ""
"Blank entries in the shape input boxes will use the current setting at the "
"time the G-code was generated. For example, if *X start* was left blank then "
"the current X axis position would be used."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2554
msgid "All leadins and leadouts are arcs except for *Circles* and *Stars*:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2556
#, no-wrap
msgid "*Circles:*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2558
msgid "If the circle is external then any leadin or leadout will be an arc."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2559
msgid ""
"If the circle is internal and a *small hole* then any leadin will be "
"perpendicular and there will be no lead out."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2562
msgid ""
"If the circle is internal and not a *small hole* then any leadin and leadout "
"will be an arc.  If the leadin has a length greater than half the radius "
"then the leadin will revert to perpendicular and there will be no leadout.  "
"If the leadout has a length greater than half the radius then there will be "
"no leadout."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2564
#, no-wrap
msgid "*Stars:*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2566
msgid ""
"The leadin is at the same angle as the first cut and the leadout is at the "
"same angle as the last cut."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2568
msgid ""
"A *small hole* is a circle that is smaller than the SMALL HOLE DIAMETER "
"specified in the CONVERSATIONAL SETTINGS page."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2570
msgid "The holes in a BOLT CIRCLE shape will also abide by the above rules."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2572
#, no-wrap
msgid "*The cut order will occur in the same order as the shape was built.*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2575
msgid ""
"Pressing *Return* on the keyboard while editing parameters will "
"automatically show the preview of the shape if there are enough parameters "
"entered to create the shape.  Clicking any of the available check boxes will "
"do the same."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2577
msgid "The general functions are as follows:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2581
#, no-wrap
msgid "Material Drop Down"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2584
#, no-wrap
msgid ""
"Allows the user to select the desired material for cutting. +\n"
"If \"VIEW MATERIAL\" is selected on the <<qt_settings-tab, SETTINGS Tab>>, a visual reference showing key material cut settings will be displayed on the Conversational Preview Window. +\n"
"Examples are:  Feed Rate, Pierce Height, Pierce Delay, Cut Height, and Kerf Width (for Conversational only). Cut Amps will be shown if PowerMax communications are enabled."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2584
#, no-wrap
msgid "NEW"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2585
#, no-wrap
msgid "Removes the current G-code file and load a blank G-code file."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2585
#, no-wrap
msgid "SAVE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2586
#, no-wrap
msgid "Opens a dialog box allowing the current shape to be saved as a G-code file."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2586
#, no-wrap
msgid "SETTINGS"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2587
#, no-wrap
msgid "Allows the changing of the global settings."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2587
#, no-wrap
msgid "SEND"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2588
#, no-wrap
msgid "Loads the current shape into LinuxCNC (QtPlasmaC). If the last edit was not added then it will be discarded."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2588
#, no-wrap
msgid "PREVIEW"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2589
#, no-wrap
msgid "Displays a preview of the current shape provided the required information is present."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2589
#, no-wrap
msgid "CONTINUE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2590
#, no-wrap
msgid "This button is used for lines and arcs only. Allows another segment to be added to the current segment/segments."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2590
#, no-wrap
msgid "ADD"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2591
#, no-wrap
msgid "Stores the current shape into the current job."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2591
#, no-wrap
msgid "UNDO"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2592
#, no-wrap
msgid "Reverts to the previously stored state. +"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:2593
#, no-wrap
msgid "Reloads the original G-code file or a blank file if none was loaded."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2598
msgid ""
"If there is a G-code file loaded in LinuxCNC (QtPlasmaC) when the "
"<<qt_conversational-tab,CONVERSATIONAL Tab>> is selected, that code will be "
"imported into the conversational as the first shape of the job.  If this "
"code is not required then it can be removed by pressing the *NEW* button."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2601
msgid ""
"If there is an added shape that is unsaved or unsent then it is not possible "
"to switch tabs in the GUI.  To re-enable switching tabs it is necessary to "
"either *SAVE* the shape, *SEND* the shape, or press *NEW* to remove the "
"shape."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2603
msgid ""
"If *NEW* is pressed to remove an added shape that is unsaved or unsent then "
"a warning dialog will be displayed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2606
msgid ""
"All distances are in machine units relative to the current User Coordinate "
"System and all angles are in degrees."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2607
#, no-wrap
msgid "Conversational Settings"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2611
msgid ""
"Global settings for the shape library can be set by pressing the *SETTINGS* "
"button in the <<qt_conversational-tab,CONVERSATIONAL Tab>>.  This will "
"display all of the available settings parameters that are used for G-code "
"program creation. These include:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2613
#, no-wrap
msgid "*Preamble*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2614
#, no-wrap
msgid "*Postamble*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2615
#, no-wrap
msgid "*Origin (Center or Bottom Left)*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2616
#, no-wrap
msgid "*Leadin length*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2617
#, no-wrap
msgid "*Leadout length*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2618
#, no-wrap
msgid "*Small hole diameter*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2619
#, no-wrap
msgid "*Small hole speed*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2620
#, no-wrap
msgid "*Preview Window Grid Size*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2622
msgid ""
"Any internal circle that has a diameter less than *Small hole diameter* is "
"classified as a small hole and will have a straight leadin with a length "
"that is the lesser of either the radius of the hole or the specified leadin "
"length. It will also have its feed rate set to *Small hole speed*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2625
msgid ""
"Preamble and Postamble may be entered as a string of G-Codes and M-Codes "
"separate by spaces.  If the user wishes for the generated G-code to have "
"each code on an individual line then this is made possible by separating the "
"codes with *\\n*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2627
msgid "This will place all codes on the same line:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2634
msgid "This will place each code on its own line:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2638
#, no-wrap
msgid "G21\\nG40\\nG49\\nG64p0.1\\nG80\\nG90\\nG92.1\\nG94\\nG97\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2641
msgid ""
"Pressing the *RELOAD* button will discard any changed but unsaved settings."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2643
msgid "Pressing the *SAVE* button will save all the settings as displayed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2645
msgid ""
"Pressing the *EXIT* button will close the setting panel and return to the "
"previous shape."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2646
#, no-wrap
msgid "Conversational Lines And Arcs"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:2648
#, no-wrap
msgid "images/qtplasmac_conv_line.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2651
msgid ""
"Lines and arcs have an additional option in that they may be strung together "
"to create a complex shape."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2653
msgid "There are two line types and three arc types available:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2655
#, no-wrap
msgid "*Line* given a start point and an end point.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2656
#, no-wrap
msgid "*Line* given a start point, length, and angle.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2657
#, no-wrap
msgid "*Arc* given a start point, way point, and end point.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2658
#, no-wrap
msgid "*Arc* given a start point, end point, and radius.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2659
#, no-wrap
msgid "*Arc* given a start point, length, angle, and radius.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2661
msgid "To use lines and arcs:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2663
msgid "Select the *Lines and Arcs* icon."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2664
msgid "Select the type of line or arc to create."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2666 src/plasma/qtplasmac.adoc:2689
msgid ""
"Choose the material from the MATERIAL drop down.  If no material is chosen, "
"the default material (00000) will be used."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2667
msgid "Enter the desired parameters."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2668
msgid "Press *PREVIEW* to see the shape."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2669
msgid "If satisfied with the shape press *CONTINUE*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2670
msgid ""
"Change the line or arc type if needed and continue this procedure until the "
"shape is complete."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2671 src/plasma/qtplasmac.adoc:2693
#: src/plasma/qtplasmac.adoc:2726
msgid ""
"Press *SEND* to send the G-code file to LinuxCNC (QtPlasmaC) for cutting."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2673
msgid ""
"If the user wishes to create a closed shape, they will need to create any "
"required leadin as the first segment of the shape. If a leadout is required "
"it will need to be the last segment of the shape."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2676
msgid ""
"At this stage there is no automatic option for a leadin/leadout creation if "
"the shape is closed."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2677
#, no-wrap
msgid "Conversational Single Shape"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2680
msgid "The following shapes are available for creation:"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:2681
#, no-wrap
msgid "images/qtplasmac_conv_shapes.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2684
msgid "To create a shape:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2687
msgid ""
"Select the corresponding icon for the shape to create.  The available "
"parameters will be displayed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2690
msgid "Enter the appropriate values and press *PREVIEW* to display the shape."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2691
msgid ""
"If the shape is not correct, edit the values and press *PREVIEW* and the new "
"shape will be displayed. Repeat until satisfied with the shape."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2692
msgid "Press *ADD* to add the shape to the G-code file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2696
msgid ""
"For *CIRCLE*, the *OVER CUT* button will become valid when a CUT TYPE of "
"INTERNAL is selected and the value entered in the DIAMETER field is less "
"than the Small Hole Diameter parameter in the Conversational SETTINGS "
"section."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2698
msgid ""
"For *BOLT CIRCLE* the *OVER CUT* button will become valid if the value "
"entered in the HOLE DIA field is less than the SMALL HOLES DIAMETER "
"parameter in the Conversational SETTINGS section."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2700
msgid ""
"For the following shapes, KERF OFFSET will become active once a LEAD IN is "
"specified:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2702
msgid "TRIANGLE"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2703
msgid "RECTANGLE"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2704
msgid "POLYGON"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2705
msgid "SLOT"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2706
msgid "STAR"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2707
msgid "GUSSET"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2708
#, no-wrap
msgid "Conversational Group Of Shapes"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2711
msgid "Multiple shapes can be added together to create a complex group."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2713
msgid ""
"The cut order of the group is determined by the order in which the "
"individual shapes are added to the group."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2715
msgid "Once a shape is added to the group it cannot be edited or removed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2717
msgid "Groups cannot have shapes removed, only added to."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2719
msgid "To create a group of shapes:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2721
msgid "Create the first shape as in *Single Shape*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2722
msgid "Press *ADD* and the shape will be added to the group."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2723
msgid ""
"If the user wishes to add another version of the same shape then edit the "
"required parameters and press *ADD* when satisfied with the shape."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2724
msgid ""
"If the user wishes to add a different shape, select that shape and create it "
"as in *Single Shape*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2725
msgid ""
"Repeat until all the required shapes to complete the group have been added."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2727
#, no-wrap
msgid "Conversational Block"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:2729
#, no-wrap
msgid "images/qtplasmac_conv_block.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2733
msgid ""
"The Conversational Block feature allows block operations to be performed on "
"the current shape or group of shapes displayed in the <<qt_conversational-"
"tab,CONVERSATIONAL Tab>>.  This can include a G-code file not created using "
"the Conversational Shape Library that has been previously loaded from the "
"<<qt_main-tab,MAIN Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2735
msgid ""
"A previously saved Block G-code file may also be loaded from the <<qt_main-"
"tab,MAIN Tab>> and then have any of its operations edited using the "
"Conversational Block feature."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2737
msgid "Block operations:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2739
msgid "Rotate"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2741
msgid "Array"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2742
msgid "Mirror"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2743
msgid "Flip"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2745
msgid "To create a block:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2747
msgid "Create a shape, a group, or use a previously loaded G-code file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2748
msgid "Click the *Block* icon to open the Block tab."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2749
msgid ""
"Enter the appropriate values in the Block tab and press *PREVIEW* to display "
"the resulting changes."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2750
msgid ""
"If the result is not correct, edit the values and press *PREVIEW* and the "
"new result will be shown. Repeat until satisfied with the result."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2751
msgid "Press *ADD* to complete the procedure."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2752
msgid ""
"Press *SEND* to send the G-code file to LinuxCNC (QtPlasmaC) for cutting, or "
"*SAVE* to save the G-code file."
msgstr ""

#. type: Labeled list
#: src/plasma/qtplasmac.adoc:2753
#, no-wrap
msgid "COLUMNS & ROWS"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2754
msgid ""
"specifies the number of duplicates of the original shape arranged in columns "
"and rows as well as the offset distance from the original shape."
msgstr ""

#. type: Labeled list
#: src/plasma/qtplasmac.adoc:2754
#, no-wrap
msgid "ORIGIN"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2755
msgid "offset the result from the origin coordinates."
msgstr ""

#. type: Labeled list
#: src/plasma/qtplasmac.adoc:2755
#, no-wrap
msgid "ANGLE"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2756
msgid "rotate the result."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2757
msgid "scale the result."
msgstr ""

#. type: Labeled list
#: src/plasma/qtplasmac.adoc:2757
#, no-wrap
msgid "ROTATION"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2758
msgid "rotate the shape within the result."
msgstr ""

#. type: Labeled list
#: src/plasma/qtplasmac.adoc:2758
#, no-wrap
msgid "MIRROR"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2759
msgid "mirror the shape about its X coordinates within the result."
msgstr ""

#. type: Labeled list
#: src/plasma/qtplasmac.adoc:2759
#, no-wrap
msgid "FLIP"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2760
msgid "flip the shape about its Y coordinates within the result."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2762
msgid ""
"If the result is an array of shapes then the cut order of the result is from "
"the left column to the right column, starting at the bottom row and ending "
"at the top row."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2763
#, no-wrap
msgid "Conversational Saving A Job"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2768
msgid ""
"The current job displayed in the Preview Panel may be saved at any time by "
"using the bottom *SAVE* button.  If the G-code has been sent to LinuxCNC "
"(QtPlasmaC) and the user has left the <<qt_conversational-tab,CONVERSATIONAL "
"Tab>>, the user may still save the G-code file from the GUI.  Alternatively, "
"the user could click the <<qt_conversational-tab,CONVERSATIONAL Tab>> which "
"will reload the job, at which time they can press the *SAVE* button."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2771
#, no-wrap
msgid "Error Logging"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2777
msgid ""
"All errors are logged into the machine log which is able to be viewed in the "
"<<qt_statistics-tab,STATISTICS Tab>>.  The log file is saved into the "
"configuration directory when QtPlasmaC is shutdown.  The five last logfiles "
"are kept, after which the oldest logfile is deleted each time a new log file "
"is created.  These saved log files may be viewed with any text editor."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2778
#, no-wrap
msgid "Error Message Display"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2782
msgid ""
"By default, QtPlasmaC will display error messages via a Operator Error popup "
"window.  In addition, QtPlasmaC will alert the user that an error has been "
"sent to the machine log by displaying the message *\"ERROR SENT TO MACHINE "
"LOG\"* in the lower left portion of the status bar."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2786
msgid ""
"The user may opt to disable the Operator Error popup window, and view the "
"error messages by going to the <<qt_statistics-tab,STATISTICS Tab>> by "
"changing the following preference to *False* in the *[SCREEN_OPTIONS]* of "
"the <machine_name>.prefs file in the <machine_name> directory:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2789
#, no-wrap
msgid "desktop_notify\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2793
msgid ""
"<machine_name>.prefs must be edited with QtPlasmaC closed or any changes "
"will be overwritten on exit."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2795
msgid ""
"Additionally, it is possible for *ERROR SENT TO MACHINE LOG* to flash to get "
"the user's attention by adding or editing the following line in the "
"*[GUI_OPTIONS]* section of the <machine_name>.prefs file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2799
#, no-wrap
msgid "Flash error = True\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2801
#, no-wrap
msgid "Critical Errors"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2804
msgid ""
"There are a number of error messages printed by QtPlasmaC to inform the user "
"of faults as they occur. The messages can be split into two groups, "
"*Critical* and *Warning*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2806
msgid ""
"Critical Errors will cause the running program to pause, and the operator "
"will need to clear the cause of the error before proceeding."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2808
msgid ""
"If the error was received during cutting then forward or reverse motion is "
"allowed while the machine is paused to enable the user to reposition the "
"machine prior to resuming the cut."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2810
msgid "When the error is cleared the program may be resumed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2812
msgid ""
"These errors indicate the corresponding sensor was activated during cutting:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2814
#, no-wrap
msgid "*breakaway switch activated program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2815
#, no-wrap
msgid "*float switch activated program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2816
#, no-wrap
msgid "*ohmic probe activated program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2818
msgid ""
"These errors indicate the corresponding sensor was activated before probing "
"commenced:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2820
#, no-wrap
msgid "*ohmic probe detected before probing program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2821
#, no-wrap
msgid "*float switch detected before probing program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2822
#, no-wrap
msgid "*breakaway switch detected before probing program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2824
msgid ""
"The Arc OK signal was lost during cutting motion, before the *M5* command "
"was reached:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2826
#, no-wrap
msgid "*valid arc lost program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2828
msgid "The Z axis reached the bottom limit before the work piece was detected:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2830
#, no-wrap
msgid "*bottom limit reached while probing down program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2832
msgid "The work piece is too high for any safe rapid removes:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2834
#, no-wrap
msgid "*material too high for safe traverse program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2836
msgid ""
"One of these values in MATERIAL section of the <<qt_parameters-tab,"
"PARAMETERS Tab>> is invalid (For example: if they are set to zero):"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2838
#, no-wrap
msgid "*invalid pierce height or invalid cut height or invalid cut volts program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2840
msgid ""
"No arc has been detected after attempting to start the number of times "
"indicated by *Max Starts* in the ARC frame of the CONFIGURATION section of "
"the <<qt_parameters-tab,PARAMETERS Tab>>:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2842
#, no-wrap
msgid "*no arc detected after __<n>__d start attempts program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2843
#, no-wrap
msgid "*no arc detected after __<n>__d start attempts manual cut is stopped*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2845
msgid "THC has caused the bottom limit to be reached while cutting:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2847
#, no-wrap
msgid "*bottom limit reached while THC moving down program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2849
msgid "THC has caused the top limit to be reached while cutting:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2851
#, no-wrap
msgid "*top limit reached while THC moving up program is paused*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2853
msgid ""
"These errors indicate move to pierce height would exceed the Z Axis "
"MAX_LIMIT for the corresponding probe method:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2855
#, no-wrap
msgid "*pierce height would exceed Z axis maximum limit condition found while moving to probe height during float switch probing*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2856
#, no-wrap
msgid "*pierce height would exceed Z axis maximum limit condition found while moving to probe height during ohmic probing*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2858
msgid ""
"These errors indicate the move to pierce height would exceed the Z axis "
"maximum safe height for the corresponding probe method:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2860
#, no-wrap
msgid "*pierce height would exceed Z axis maximum safe height condition found while float switch probing*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2861
#, no-wrap
msgid "*pierce height would exceed Z axis maximum safe height condition found while ohmic probing*\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2862
#, no-wrap
msgid "Warning Errors"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2865
msgid ""
"Warning errors will not pause a running program and are informational only."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2867
msgid ""
"These errors indicate the corresponding sensor was activated before a probe "
"test commenced:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2869
#, no-wrap
msgid "*ohmic probe detected before probing probe test aborted*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2870
#, no-wrap
msgid "*float switch detected before probing probe test aborted*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2871
#, no-wrap
msgid "*breakaway switch detected before probing probe test aborted*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2873
msgid ""
"This indicates that the corresponding sensor was activated during a "
"consumable change:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2876
#, no-wrap
msgid ""
"*breakaway, float, or ohmic activated during consumable change, motion is paused* +\n"
"*WARNING: MOTION WILL RESUME IMMEDIATELY UPON RESOLVING THIS CONDITION!*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2878
msgid ""
"CONSUMABLE CHANGE MOTION WILL RESUME IMMEDIATELY UPON RESOLVING THE "
"CORRESPONDING SENSOR ACTIVATION."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2880
msgid ""
"This indicates that the corresponding sensor was activated during probe "
"testing:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2882
#, no-wrap
msgid "*breakaway switch detected during probe test*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2884
msgid ""
"This indicates that probe contact was lost before probing up to find the "
"zero point:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2886
#, no-wrap
msgid "*probe trip error while probing*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2888
msgid "This indicates that the bottom limit was reached during a probe test:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2890
#, no-wrap
msgid "*bottom limit reached while probe testing*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2892
msgid ""
"This indicates that the move to pierce height would exceed the Z Axis "
"MAX_LIMIT during the corresponding probe method:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2894
#, no-wrap
msgid "*pierce height would exceed Z axis maximum limit condition found while moving to probe height during float switch probe testing*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2895
#, no-wrap
msgid "*pierce height would exceed Z axis maximum limit condition found while moving to probe height during ohmic probe testing*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2897
msgid ""
"This indicates that the safe height has been reduced due to THC raising the "
"Z axis during cutting:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2899
#, no-wrap
msgid "*safe traverse height has been reduced*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2901
msgid ""
"This indicates that the value for the Arc Voltage was invalid (NAN or INF) "
"when QtPlasmaC launched."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2903
#, no-wrap
msgid "*invalid arc-voltage-in*\n"
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:2905
#, no-wrap
msgid "Updating QtPlasmaC"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2907
#, no-wrap
msgid "Standard Update"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2910
msgid ""
"QtPlasmaC update notices are posted at: https://forum.linuxcnc.org/"
"plasmac/37233-plasmac-updates"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2912
#, no-wrap
msgid "*Users are strongly encouraged to create a Username and subscribe to the above thread to receive update notices.*\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2915
msgid ""
"For a standard ISO installation, LinuxCNC will only be updated when a new "
"minor release has been released.  QtPlasmaC will then automatically update "
"its configuration the first time it is run after a LinuxCNC update."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2917
msgid ""
"LinuxCNC is normally updated by entering the following commands into a "
"terminal window (one at a time):"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2921
#, no-wrap
msgid ""
"sudo apt update\n"
"sudo apt dist-upgrade\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2923
#, no-wrap
msgid "Continuous Update"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2927
msgid ""
"Enhancements and bug fixes will not be available on a standard installation "
"until a new minor release of LinuxCNC has been released.  If the user wishes "
"to update whenever a new QtPlasmaC version has been pushed, they could use "
"the LinuxCNC Buildbot repository rather than the standard LinuxCNC "
"repository by following the instructions at: http://buildbot.linuxcnc.org/"
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:2928
#, no-wrap
msgid "Modify An Existing QtPlasmaC Configuration"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2931
msgid "There are two ways to modify an existing QtPlasmaC configuration:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2933
msgid ""
"Running the appropriate <<configuring,configuration wizard>> and loading the "
"conf file saved by the wizard."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2934
msgid "Manually edit the INI and/or the HAL file of the configuration."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2936
msgid ""
"Any manual modification to the <machine_name>.ini and <machine_name>.hal "
"files will not be registered in PnCconf or StepConf."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2939
msgid ""
"If unsure of the HAL pin's full name, the user may start LinuxCNC and run "
"*HalShow* for a full listing of all HAL pins."
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:2940
#, no-wrap
msgid "Customizing QtPlasmaC GUI"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2944
msgid ""
"Styling of the QtPlasmaC GUI is done with Qt stylesheets and some "
"customization may be achieved by the use of a custom stylesheet.  This "
"allows the user to change some GUI items such as color, border, size, etc. "
"It cannot change the layout of the GUI."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2946
msgid ""
"Information on Qt stylesheets is available link:https://doc.qt.io/archives/"
"qt-5.11/stylesheet.html[here]."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2948
msgid "There are two methods available to apply custom styles:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2950
msgid "Add A Custom Style: use this for minor style changes."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2952
msgid "Create A New Style use this for a complete style change."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2953
#, no-wrap
msgid "Add A Custom Style"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2957
msgid ""
"Adding style changes to the default stylesheet is achieved by creating a "
"file in the <machine_name> configuration directory.  This file MUST be named "
"qtplasmac_custom.qss. Any required style changes are then added to this file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2960
msgid ""
"For example the user may want the arc voltage display in red, a green Torch "
"On LED of a larger size and a larger Torch Enable button.  This would be "
"done with the following code in qtplasmac_custom.qss:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2964
#, no-wrap
msgid ""
"#arc_voltage {\n"
"    color: #ff0000 }\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2968
#, no-wrap
msgid ""
"#led_torch_on {\n"
"    qproperty-diameter: 30;\n"
"    qproperty-color: green }\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2972
#, no-wrap
msgid ""
"#torch_enable::indicator {\n"
"    width: 30;\n"
"    height: 30}\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:2974
#, no-wrap
msgid "Create A New Style"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2977
msgid ""
"Custom stylesheets are enable by a setting in the *[GUI_OPTIONS]* section of "
"the <machine_name>.prefs file giving the filename of the stylesheet."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2981
#, no-wrap
msgid "Custom style = the_cool_style.qss\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2984
msgid ""
"The filename may be any valid filename. The standard extension name is .qss "
"but this is not mandatory."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2986
msgid ""
"There are some constraints on the custom stylesheet for QtPlasmaC, e.g., the "
"jog buttons, cut-recovery buttons, and the conversational shape buttons are "
"image files and are not able to be custom styled."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:2988
msgid "The custom style file requires a header in the following format:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2992
#, no-wrap
msgid ""
"/*****************************\n"
"Custom Stylesheet Header\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2995
#, no-wrap
msgid ""
"color1 = #000000\n"
"#QtPlasmaC default = #ffee06\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:2998
#, no-wrap
msgid ""
"color2 = #e0e0e0\n"
"#QtPlasmaC default = #16160e\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3001
#, no-wrap
msgid ""
"color3 = #c0c0c0\n"
"#QtPlasmaC default = #ffee06\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3004
#, no-wrap
msgid ""
"color4 = #e0e0e0\n"
"#QtPlasmaC default = #26261e\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3007
#, no-wrap
msgid ""
"color5 = #808080\n"
"#QtPlasmaC default = #b0b0b0\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3009
#, no-wrap
msgid "*****************************/\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3012
msgid "The colors may be expressed in any valid stylesheet format."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3015
msgid ""
"The above colors are used for the following widgets. So any custom styling "
"will need to take these into account.  The colors shown below are the "
"defaults used in QtPlasmaC along with the color name from the <<qt_settings-"
"tab, SETTINGS Tab>>."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3019
#, no-wrap
msgid "Affects"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3019
#, no-wrap
msgid "color1 (#ffee06)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3024
#, no-wrap
msgid ""
"foreground of jog buttons +\n"
"foreground of latching user buttons +\n"
"foreground of camera/laser buttons +\n"
"foreground of conversational shape buttons +\n"
"background of active conversational shape buttons"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3024
#, no-wrap
msgid "color2 (#16160e)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3028
#, no-wrap
msgid ""
"background of latching user buttons +\n"
"background of camera/laser buttons +\n"
"background of G-code editor active line +\n"
"background of conversational shape buttons"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3028
#, no-wrap
msgid "color3 (#ffee06)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3031
#, no-wrap
msgid ""
"background of active latching user buttons +\n"
"background of active camera/laser buttons +\n"
"foreground of G-code editor cursor"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3031
#, no-wrap
msgid "color4 (#36362e)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3032
#, no-wrap
msgid "background of G-code display active line"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3032
#, no-wrap
msgid "color5 (#b0b0b0)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3033
#, no-wrap
msgid "foreground of disabled buttons"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3036
#, no-wrap
msgid "Returning To The Default Styling"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3039
msgid ""
"The user may return to the default styling at any time by following the "
"following steps:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3041
msgid "Close QtPlasmaC if open."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3042
msgid "Delete qtplasmac.qss from the machine config directory."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3043
msgid ""
"Delete qtplasmac_custom.qss from the machine config directory (if it exists)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3044
msgid "Open <machine_name>.prefs file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3045
msgid "Delete the *[COLOR_OPTIONS]* section."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3046
msgid "Delete the Custom style line from the *[GUI_OPTIONS]* section."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3047
msgid "Save the file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3049
msgid ""
"The next time QtPlasmaC is loaded all custom styling will be removed and the "
"default styling will return."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3051
msgid ""
"Below is an example of the section to be deleted from <machine_name>.prefs:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3063
#, no-wrap
msgid ""
"[COLOR_OPTIONS]\n"
"Foreground = #ffee06\n"
"Highlight = #ffee06\n"
"LED = #ffee06\n"
"Background = #16160e\n"
"Background Alt = #36362e\n"
"Frames = #ffee06\n"
"Estop = #ff0000\n"
"Disabled = #b0b0b0\n"
"Preview = #000000\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3065
#, no-wrap
msgid "Custom Python Code"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3069
msgid ""
"It is possible to add custom python code to change some existing functions "
"or to add new ones.  Custom code can be added in two different way, a user "
"command file or a user periodic file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3071
msgid ""
"A user command file is specified in the DISPLAY section of the "
"<machine_name>.ini file and contains python code that is processed during "
"startup."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3075
#, no-wrap
msgid "n USER_COMMAND_FILE = my_custom_code.py\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3078
msgid ""
"A user periodic file must be named user_periodic.py and must be loated in "
"the machines config directory. This file is processed every cycle (usually "
"100mS) and is used for functions that require regular updating."
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:3079
#, no-wrap
msgid "QtPlasmaC Advanced Topics"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3082
#, no-wrap
msgid "Custom User Buttons"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3085
msgid ""
"The QtPlasmaC GUI offers user buttons that can be customized by adding "
"commands in the <<qt_button_entries, USER BUTTON ENTRIES>> section of the "
"<<qt_settings-tab, SETTINGS Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3087
msgid ""
"The number of user buttons varies by display type and resolution as follows:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3089
msgid "16:9 and 4:3 - Minimum 8, Maximum 20"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3090
msgid "9:16 - Minimum 15, Maximum 20"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3092
msgid ""
"The user will need to run QtPlasmaC at the desired screen size to determine "
"how many user buttons are available for use."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3094
msgid ""
"All <machine_name>.prefs file settings for the buttons are found in the "
"*[BUTTONS]* section."
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:3095
#, no-wrap
msgid "Button Names"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3098
msgid "The text that appears on the button is set the following way:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3102
#, no-wrap
msgid "n Name = HAL Show\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3105
msgid "Where _n_ is the button number and *HAL Show* is the text."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3107
msgid "For text on multiple lines, split the text with a \\ (backslash):"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3111
#, no-wrap
msgid "n Name = HAL\\Show\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3114
msgid ""
"If an ampersand is required to be displayed as text then two consecutive "
"ampersands are required:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3118
#, no-wrap
msgid "n Name = PIERCE\\&&CUT\n"
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:3120
#, no-wrap
msgid "Button Code"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3123
msgid "Buttons can run the following:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3125
msgid "<<qt_button-cmds,External commands>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3126
msgid "<<qt_button-py,External python scripts>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3127
msgid "<<qt_button-code,G-code commands>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3128
msgid "<<qt_button-toggle,Toggle a HAL pin>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3129
msgid "<<qt_button-laser,Toggle the alignment laser HAL pin>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3130
msgid "<<qt_button-pulse,Pulse a HAL pin>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3131
msgid "<<qt_button-probe,Probe test>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3132
msgid "<<qt_button-ohmic,Ohmic Test>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3133
msgid "<<qt_button-cut,Cut Type>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3134
msgid "<<qt_button-consumables,Change consumables>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3135
msgid "<<qt_button-load,Load a G-code program>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3136
msgid "<<qt_button-torch,Pulse the torch on>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3137
msgid "<<qt_button-single,Single unidirectional cut>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3138
msgid "<<qt_button-framing,Framing a job>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3139
msgid "<<qt_button-mancut,Begin/End a manual cut>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3140
msgid "<<qt_button-offsets,Display/Hide an offsets viewer>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3141
msgid ""
"<<qt_button-latest,Load the latest modified NGC file found in a directory>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3144
msgid "[underline]*External Commands*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3146
msgid "To run an external command, the command is preceded by a % character."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3150
#, no-wrap
msgid "n Code = %halshow\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3154
msgid "[underline]*External Python Scripts*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3157
msgid ""
"To run an external python script, the script name is preceded by a % "
"character and it also requires a .py extension.  It is valid to use the ~ "
"character as a shortcut for the users home directory."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3161
#, no-wrap
msgid "n Code = %my_python_script.py\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3165
msgid "[underline]*G-code*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3167
msgid "To run G-code, just enter the code to be run."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3171
#, no-wrap
msgid "n Code = G0 X100\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3174
msgid "To run an existing subroutine."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3178
#, no-wrap
msgid "n Code = o<the_subroutine> call\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3181
msgid ""
"<machine_name>.ini file variables can be entered by using {} (a space must "
"be placed after the })"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3186
#, no-wrap
msgid ""
"n Code = G0 X{JOINT_0 HOME} Y1\n"
"n Code = G53 G0 Z[{AXIS_Z MAX_LIMIT} - 1.001]\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3190
msgid ""
"Multiple codes can be run by separating the codes with a \"\\\" (backslash) "
"character.  The exception is the special commands which are required to be a "
"single command per button."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3194
#, no-wrap
msgid "n Code = G0 X0 Y0 \\ G1 X5 \\ G1 Y5\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3197
msgid "External commands and G-code may be mixed on the same button."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3201
#, no-wrap
msgid "n Code = %halshow \\ g0x.5y.5 \\ %halmeter\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3205
msgid "[underline]*Toggle HAL Pin*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3207
msgid ""
"The following code will allow the user to use a button to invert the current "
"state of a HAL bit pin:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3211
#, no-wrap
msgid "n Code = toggle-halpin the-hal-pin-name\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3214 src/plasma/qtplasmac.adoc:3265
msgid ""
"This code is required to be used as a single command and may only control "
"one HAL bit pin per button."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3216 src/plasma/qtplasmac.adoc:3269
msgid "The button colors will follow the state of the HAL pin."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3219
msgid ""
"After setting the code, upon clicking, the button will invert colors and the "
"HAL pin will invert pin state.  The button will stay \"latched\" until the "
"button is clicked again, which will return the button to the original colors "
"and the HAL pin to the original pin state."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3221
msgid ""
"There are three <<qt_ext-hal-pin,External HAL Pins>> that are available to "
"toggle as an output, the pin names are `qtplasmac.ext_out_0`, `qtplasmac."
"ext_out_1`, and `qtplasmac.ext_out_2`. HAL connections to these HAL pins "
"need to be specified in a postgui HAL file as the HAL pins are not available "
"until the QtPlasmac GUI has loaded."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3223
msgid ""
"It is possible for the user to mark a toggle-halpin button's associated HAL "
"pin as being required to be turned \"ON\" before *CYCLE START* can be "
"pressed by adding \"runcritical\" after the HAL pin in the button code."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3227
#, no-wrap
msgid "n Code = toggle-halpin the-hal-pin-name runcritical\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3231
msgid "[underline]*Toggle Alignment Laser HAL Pin*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3233
msgid ""
"The following code will allow the user to use a button to invert the current "
"state of the alignment laser HAL bit pin:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3237
#, no-wrap
msgid "n Code = toggle-laser\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3240
msgid ""
"This code is also able to be used as a multiple command with G-code or "
"external commands but may control only the alignment laser HAL bit pin."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3242
msgid "The button colors will follow the state of the alignment laser HAL pin."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3244
msgid ""
"After setting the code, upon clicking, the button will invert colors and the "
"alignment laser HAL pin will invert pin state. The button will stay \"latched"
"\" until the button is clicked again, which will return the button to the "
"original colors and the alignment laser HAL pin to the original pin state."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3246
msgid ""
"The following code would allow the user to use a button to invert the "
"current state of the alignment laser HAL bit pin and then move the X and Y "
"axes to the offset for the alignment laser as specified in the "
"<machine_name>.prefs file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3250
#, no-wrap
msgid "n Code = G0 {QTPLASMAC LASER_TOUCHOFF} \\ toggle-laser\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3253
msgid ""
"The position of the \"toggle-laser\" command is not important as it is "
"always the first command actioned regardless of position."
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:3255
#, no-wrap
msgid "Pulse HAL Pin"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3258
msgid ""
"The following code will allow the user to use a button to pulse a HAL bit "
"pin for a duration of 0.5 seconds:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3262
#, no-wrap
msgid "n Code = pulse-halpin the-hal-pin-name 0.5\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3267
msgid ""
"The pulse duration is specified in seconds, if the pulse duration is not "
"specified then it will default to one second."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3271
msgid ""
"After setting the code, upon clicking the button, the button will invert "
"colors, the HAL pin will invert pin state, and the time remaining will be "
"displayed on the button. The button color and the pin state will stay "
"inverted until the pulse duration timer has completed, which will return the "
"button to the original colors, the HAL pin to the original pin state, and "
"the original button name."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3273
msgid "An active pulse can be canceled by clicking the button again."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3276
msgid ""
"There are three <<qt_ext-hal-pin,External HAL Pins>> that are available to "
"pulse as an output, the pin names are qtplasmac.ext_out_0, qtplasmac."
"ext_out_1, and qtplasmac.ext_out_2.  HAL connections to these HAL pins need "
"to be specified in a postgui HAL file as the HAL pins are not available "
"until the QtPlasmac GUI has loaded."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3278 src/plasma/qtplasmac.adoc:3577
#, no-wrap
msgid "Probe Test"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3282
msgid ""
"QtPlasmaC will begin a probe and when the material is detected, the Z axis "
"will rise to the Pierce Height currently displayed in the MATERIAL section "
"of the <<qt_parameters-tab,PARAMETERS Tab>>.  If the user has \"View Material"
"\" selected in the GUI SETTINGS section of the <<qt_settings-tab, SETTINGS "
"Tab>>, this value will be displayed in the top left corner of the PREVIEW "
"Window next to *PH:*."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3285
msgid ""
"QtPlasmaC will then wait in this state for the time specified (rounded to no "
"decimal places) before returning the Z axis to the starting position.  An "
"example of a 6 second delay is below. If there is no time specified then the "
"probe time will default to 10 seconds."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3289
#, no-wrap
msgid "n Code = probe-test 6\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3294
msgid ""
"Enabling a user button as a Probe Test button will add an <<qt_ext-hal-pin,"
"external HAL pin>> that may be connected from a pendant etc.  HAL "
"connections to this HAL pin needs to be specified in a postgui HAL file as "
"the HAL pin is not available until the QtPlasmac GUI has loaded."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3296 src/plasma/qtplasmac.adoc:3579
#, no-wrap
msgid "Ohmic Test"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3299
msgid ""
"QtPlasmaC will enable the Ohmic Probe Enable output signal and if the Ohmic "
"Probe input is sensed, the LED indicator in the SENSOR Panel will light. The "
"main purpose of this is to allow a quick test for a shorted torch tip."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3303
#, no-wrap
msgid "n Code = ohmic-test\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3308
msgid ""
"Enabling a user button as an Ohmic Test button will add an <<qt_ext-hal-pin,"
"external HAL pin>> that may be connected from a pendant etc.  HAL "
"connections to this HAL pin needs to be specified in a postgui HAL file as "
"the HAL pin is not available until the QtPlasmac GUI has loaded."
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:3310
#, no-wrap
msgid "Cut Type"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3313
msgid ""
"This button if selected will toggle between the two <<qt_cut-types,cut "
"types>>, Pierce and Cut (default cutting mode) or Pierce Only."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3317
#, no-wrap
msgid "n Code = cut-type\n"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3320 src/plasma/qtplasmac.adoc:3580
#, no-wrap
msgid "Change Consumables"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3323
msgid ""
"Pressing this button moves the torch to the specified coordinates when the "
"machine is paused to allow the user easy access to change the torch "
"consumables."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3325
msgid ""
"Valid entries are Xnnn Ynnn Fnnn. Feed Rate (F) is mandatory and at least "
"one of the X or Y coordinates are required."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3327
msgid ""
"The X and Y coordinates are in absolute machine coordinates. If X or Y are "
"missing then the current coordinate for that axis will be used."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3329
msgid "There are three methods to return to the previous coordinates:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3331
msgid ""
"Press the *Change Consumables* button again - the torch will return to the "
"original coordinates and the machine will wait in this position for the user "
"to resume the program."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3332
msgid ""
"Press *CYCLE RESUME* - the torch to return to the original coordinates and "
"the program will resume."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3333
msgid ""
"Press *CYCLE STOP* - the torch to return to the original coordinates and the "
"program will abort."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3337
#, no-wrap
msgid "n Code = change-consumables X10 Y10 F1000\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3342
msgid ""
"Enabling a user button as a Change Consumables button will add an <<qt_ext-"
"hal-pin,external HAL pin>> that may be connected from a pendant etc.  HAL "
"connections to this HAL pin needs to be specified in a postgui HAL file as "
"the HAL pin is not available until the QtPlasmac GUI has loaded."
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:3344
#, no-wrap
msgid "Load"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3347
msgid ""
"Loading a G-code program from the directory specified by the "
"*PROGRAM_PREFIX* variable in the <machine_name>.ini file (usually ~/linuxcnc/"
"nc_files) is possible by using the following format:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3351
#, no-wrap
msgid "n Code = load G-code.ngc\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3354
msgid ""
"If the user's G-code file is located in a sub-directory of the "
"*PROGRAM_PREFIX* directory, it would be accessed by adding the sub-directory "
"name to the beginning of the G-code file name. Example for a sub-directory "
"named *plasma*:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3358
#, no-wrap
msgid "n Code = load plasma/G-code.ngc\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3361
msgid ""
"Note that the first \"/\" is not necessary as it will be added automatically."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3363 src/plasma/qtplasmac.adoc:3578
#, no-wrap
msgid "Torch Pulse"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3366
msgid ""
"Pulse the torch on for a predetermined time. The time must be specified in "
"seconds using up to one decimal place. The maximum allowable time is 3 "
"seconds, anything specified above that value will be limited to 3 seconds. "
"An example of a 0.5 second pulse is below. It there is no time specified "
"then it will default to 1 second. Pulse times with more than one decimal "
"place will be rounded to one decimal place."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3368
msgid ""
"Pressing the button again during the countdown will cause the torch to be "
"turned off, as will pressing Esc if keyboard shortcuts are enabled in the "
"<<qt_settings-tab, SETTINGS Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3371
msgid ""
"If the button is released before the countdown is complete then the torch "
"will turn off at countdown completion, holding the button on until after the "
"countdown has completed will cause the torch to remain on until the button "
"has been released."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3375
#, no-wrap
msgid "n Code = torch-pulse 0.5\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3380
msgid ""
"Enabling a user button as a Torch Pulse button will add an <<qt_ext-hal-pin,"
"external HAL pin>> that may be connected from a pendant etc.  HAL "
"connections to this HAL pin needs to be specified in a postgui HAL file as "
"the HAL pin is not available until the QtPlasmac GUI has loaded."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3385
msgid ""
"Run a single unidirectional cut. This utilises the automatic <<qt_single-cut,"
"Single Cut>> feature."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3389
#, no-wrap
msgid "n Code = single-cut\n"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3392 src/plasma/qtplasmac.adoc:3581
#, no-wrap
msgid "Framing"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3395
msgid ""
"Framing is the ability to move the torch around the perimeter of a rectangle "
"that encompasses the bounds of the current job."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3399
msgid ""
"The laser enable HAL pin (qtplasmac.laser_on) will be turned on during the "
"framing moves and any X/Y offsets for the laser pointer in the "
"<machine_name>.prefs file will also be applied to the X/Y motion.  After the "
"framing motion is completed, the torch will move to the X0 Y0 position to "
"clear any applied laser offsets and qtplasmac.laser_on will be turned off."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3401
msgid ""
"Upon starting a Framing cycle, it is important to note that by default the Z "
"axis will be moved to a height of [AXIS_Z]MAX_LIMIT - 5mm (0.2\") before X/Y "
"motion begins."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3405
msgid ""
"The velocity for the XY movements of the Framing motion can be specified so "
"that Framing motion always occurs at a set velocity.  This can be achieved "
"by adding the feed rate (F) as the as the last portion of the button code.  "
"If the feed rate is omitted from the button code, framing motion velocity "
"will default to the feed rate for the currently selected material."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3407
msgid ""
"The following GUI buttons and Keyboard Shortcuts (if enabled in the "
"<<qt_settings-tab, SETTINGS Tab>>) are valid during Framing motion:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3409
msgid ""
"Pressing *CYCLE STOP* or the ESC <<qt_keyboard-shortcuts,keyboard shortcut>> "
"- Stops Framing motion."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3410
msgid ""
"Pressing *CYCLE PAUSE* or the SPACE BAR <<qt_keyboard-shortcuts,keyboard "
"shortcut>>- Pauses Framing motion."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3411
msgid ""
"Pressing *CYCLE RESUME* or the CTRL+r <<qt_keyboard-shortcuts,keyboard "
"shortcut>>- Resumes paused Framing motion."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3412
msgid ""
"Changing the *FEED SLIDER* or any of the CTRL+0-9 <<qt_keyboard-shortcuts,"
"keyboard shortcuts>> - Slows the feed rate."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3415
msgid ""
"IF THE FEED RATE IS CHANGED FOR THE FRAMING MOTION, IT WILL BE NECESSARY TO "
"RETURN THE FEED SLIDER TO 100% BEFORE PRESSING CYCLE START AND CUTTING THE "
"LOADED JOB."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3419
#, no-wrap
msgid "n Code = framing\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3422
msgid ""
"It is possible for the user to omit the initial default Z movement and run "
"the framing sequence at the current Z height by adding \"usecurrentzheight\" "
"after \"framing\"."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3426
#, no-wrap
msgid "n Code = framing usecurrentzheight\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3429
msgid "To specify a feed rate:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3433
#, no-wrap
msgid "n Code = framing F100\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3440
#, no-wrap
msgid "n Code = framing usecurrentzheight F100\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3444
msgid ""
"Enabling a user button as a framing button will add an <<qt_ext-hal-pin,"
"external HAL pin>> that may be connected from a pendant etc.  HAL "
"connections to this HAL pin needs to be specified in a postgui HAL file as "
"the HAL pin is not available until the QtPlasmac GUI has loaded."
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:3446
#, no-wrap
msgid "Manual Cut"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3449
msgid ""
"Manual Cut functions identically to the *F9* button to begin or end a "
"<<qt_manual-single-cut,manual cut>>."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3453
#, no-wrap
msgid "n Code = manual-cut\n"
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:3456
#, no-wrap
msgid "Offset Viewer"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3459
msgid ""
"This allows the showing/hiding of an offset viewing screen that displays all "
"machine offsets. All relative offsets can be edited and the G54 ~ G59.3 work "
"system coordinates are able to be given custom names."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3463
#, no-wrap
msgid "n Code = offsets-view\n"
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:3466
#, no-wrap
msgid "Load Latest File"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3469
msgid ""
"this allows the loading of the last modified file in a directory. The "
"directory name is optional and if omitted will default to the last directory "
"a file was loaded from."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3473
#, no-wrap
msgid "n Code = latest-file /home/me/linuxcnc/nc_files/qtplasmac-test\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3476
#, no-wrap
msgid "Peripheral Offsets (Laser, Camera, Scribe, Offset Probe)"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:3478
#, no-wrap
msgid "images/qtplasmac_peripheral_offsets.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3481
msgid ""
"Use the following sequence to set the offsets for a laser, camera, scribe, "
"or offset probe:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3483
msgid "Place a piece of scrap material under the torch."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3484
msgid "The machine must be homed and idle before proceeding."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3485
msgid "Open the <<qt_settings-tab, SETTINGS Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3486
msgid ""
"Click the SET OFFSETS button which opens the Set Peripheral Offsets dialog."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3487
msgid "Click the X0Y0 button to set the torch position to zero."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3488
msgid "Make a mark on the material by one of:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3489
msgid ""
"Jog the torch down to pierce height then pulse the torch on to make a dimple "
"in the material."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3490
msgid ""
"Place marking dye on the torch shield then jog the torch down to mark the "
"material."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3491
msgid "Raise the Z axis so the torch and peripheral are clear of the material"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3492
msgid ""
"Jog the X/Y axes so that the peripheral is close to the mark from the torch."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3493
msgid "Click the appropriate button to activate the peripheral."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3494
msgid ""
"Jog the X/Y axes so that the peripheral is centered in the mark from the "
"torch."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3495
msgid ""
"Click the GET OFFSETS button to get the offsets and a confirmation dialog "
"will open."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3496
msgid "Click SET OFFSETS and the offsets will now be saved."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3498
msgid ""
"Canceling may be done at any stage by pressing the CANCEL button which will "
"close the dialog and no changes will be saved."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3502
msgid ""
"It may be necessary to click the preview window to enable jogging.  By "
"following the above procedure the offsets are available for use immediately "
"and no restart of LinuxCNC is required."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3503
#, no-wrap
msgid "Keep Z Motion"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3508
msgid ""
"By default, QtPlasmaC will remove all Z motion from a loaded G-code file and "
"add an initial Z movement to bring the torch near the top of travel at the "
"beginning of the file.  If the user wishes to use their table with a marker, "
"a drag knife, diamond scribe, etc. mounted in the torch holder, QtPlasmaC "
"has the ability to retain the Z movements when executing a program by adding "
"the following command in a G-code file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3512
#, no-wrap
msgid "#<keep-z-motion> = 1\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3516
msgid ""
"Omitting this command, or setting this value to anything but 1 will cause "
"QtPlasmaC to revert to the default behavior of stripping all Z motion from a "
"loaded G-code file and making an initial Z movement to bring the torch near "
"the top of travel at the beginning of the file."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3518
#, no-wrap
msgid "External HAL Pins"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3521
msgid ""
"QtPlasmaC creates some HAL pins that may be used to connect a momentary "
"external button or pendant etc."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3523
msgid ""
"HAL connections to these HAL pins need to be specified in a postgui HAL file "
"as the HAL pins are not available until the QtPlasmac GUI has loaded."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3525
msgid ""
"The following HAL bit pins are always created. The HAL pin has the identical "
"behaviour of the related QtPlasmaC GUI button."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3528 src/plasma/qtplasmac.adoc:3576
#, no-wrap
msgid "User Button Function"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3528 src/plasma/qtplasmac.adoc:3567
#: src/plasma/qtplasmac.adoc:3577 src/plasma/qtplasmac.adoc:3589
#, no-wrap
msgid "HAL Pin"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3529
#, no-wrap
msgid "GUI Function"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3529
#, no-wrap
msgid "Toggle machine power"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3529
#, no-wrap
msgid "qtplasmac.ext_power"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3530
#, no-wrap
msgid "Run the loaded G-code program"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3530
#, no-wrap
msgid "qtplasmac.ext_run"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3531
#, no-wrap
msgid "Pause/Resume the loaded G-code program"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3531
#, no-wrap
msgid "qtplasmac.ext_pause"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3532
#, no-wrap
msgid "Abort the loaded G-code program"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3532
#, no-wrap
msgid "qtplasmac.ext_abort"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3533
#, no-wrap
msgid "Touchoff X & Y axes to zero"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3533
#, no-wrap
msgid "qtplasmac.ext_touchoff"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3534
#, no-wrap
msgid "X0Y0"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3534
#, no-wrap
msgid "Use a laser to set an origin with or without rotation"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3534
#, no-wrap
msgid "qtplasmac.ext_laser_touchoff"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3535
#, no-wrap
msgid "Run/Pause/Resume the loaded G-code program"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3535
#, no-wrap
msgid "qtplasmac.ext_run_pause"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3536
#, no-wrap
msgid "CYCLE START, CYCLE PAUSE, CYCLE RESUME in sequence"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3536
#, no-wrap
msgid "Torch height override plus"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3536
#, no-wrap
msgid "qtplasmac.ext_height_ovr_plus"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3537
#, no-wrap
msgid "OVERRIDE +"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3537
#, no-wrap
msgid "Torch height override minus"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3537
#, no-wrap
msgid "qtplasmac.ext_height_ovr_minus"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3538
#, no-wrap
msgid "OVERRIDE -"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3538
#, no-wrap
msgid "Torch height override reset"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3538
#, no-wrap
msgid "qtplasmac.ext_height_ovr_reset"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3539
#, no-wrap
msgid "OVERRIDE RESET TO 0.00"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3539
#, no-wrap
msgid "Torch height override scale"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3539
#, no-wrap
msgid "qtplasmac.ext_height_ovr_scale"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3540
#, no-wrap
msgid "N/A"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3540
#, no-wrap
msgid "Toggle jogging speed between fast and slow"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3540
#, no-wrap
msgid "qtplasmac.ext_jog_slow"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3541
#, no-wrap
msgid "JOGGING FAST/SLOW"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3541
#, no-wrap
msgid "Toggle THC enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3541
#, no-wrap
msgid "qtplasmac.ext_thc_enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3542
#, no-wrap
msgid "THC ENABLE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3542
#, no-wrap
msgid "Toggle torch enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3542
#, no-wrap
msgid "qtplasmac.ext_torch_enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3543
#, no-wrap
msgid "TORCH ENABLE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3543
#, no-wrap
msgid "Toggle corner Lock enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3543
#, no-wrap
msgid "qtplasmac.ext_cornerlock_enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3544
#, no-wrap
msgid "Toggle voidlock enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3544
#, no-wrap
msgid "qtplasmac.ext_voidlock_enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3545
#, no-wrap
msgid "Toggle use auto volts"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3545
#, no-wrap
msgid "qtplasmac.ext_auto_volts_enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3546
#, no-wrap
msgid "Toggle ohmic probe enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3546
#, no-wrap
msgid "qtplasmac.ext_ohmic_probe_enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3547
#, no-wrap
msgid "OHMIC ENABLE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3547
#, no-wrap
msgid "Toggle mesh mode"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3547
#, no-wrap
msgid "qtplasmac.ext_mesh_mode"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3548
#, no-wrap
msgid "Toggle arc ignore OK"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3548
#, no-wrap
msgid "qtplasmac.ext_ignore_arc_ok"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3549
#, no-wrap
msgid "Forward along the programmed path"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3549
#, no-wrap
msgid "qtplasmac.ext_cutrec_fwd"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3550
#, no-wrap
msgid "CUT RECOVERY FWD"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3550
#, no-wrap
msgid "Reverse along the programmed path"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3550
#, no-wrap
msgid "qtplasmac.ext_cutrec_rev"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3551
#, no-wrap
msgid "CUT RECOVERY REV"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3551
#, no-wrap
msgid "Cancel any Cut Recovery movement"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3551
#, no-wrap
msgid "qtplasmac.ext_cutrec_cancel"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3552
#, no-wrap
msgid "CUT RECOVERY CANCEL MOVE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3552
#, no-wrap
msgid "Move up"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3552
#, no-wrap
msgid "qtplasmac.ext_cutrec_n"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3553
#, no-wrap
msgid "CUT RECOVERY arrow up"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3553
#, no-wrap
msgid "Move down"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3553
#, no-wrap
msgid "qtplasmac.ext_cutrec_s"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3554
#, no-wrap
msgid "CUT RECOVERY arrow down"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3554
#, no-wrap
msgid "Move right"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3554
#, no-wrap
msgid "qtplasmac.ext_cutrec_e"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3555
#, no-wrap
msgid "CUT RECOVERY arrow right"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3555
#, no-wrap
msgid "Move left"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3555
#, no-wrap
msgid "qtplasmac.ext_cutrec_w"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3556
#, no-wrap
msgid "CUT RECOVERY arrow left"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3556
#, no-wrap
msgid "Move up-right"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3556
#, no-wrap
msgid "qtplasmac.ext_cutrec_ne"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3557
#, no-wrap
msgid "CUT RECOVERY arrow up-right"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3557
#, no-wrap
msgid "Move up-left"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3557
#, no-wrap
msgid "qtplasmac.ext_cutrec_nw"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3558
#, no-wrap
msgid "CUT RECOVERY arrow up-left"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3558
#, no-wrap
msgid "Move down-right"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3558
#, no-wrap
msgid "qtplasmac.ext_cutrec_se"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3559
#, no-wrap
msgid "CUT RECOVERY arrow down-right"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3559
#, no-wrap
msgid "Move down-left"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3559
#, no-wrap
msgid "qtplasmac.ext_cutrec_sw"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3560
#, no-wrap
msgid "CUT RECOVERY arrow down-left"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3563
msgid ""
"The following HAL pins which allow the use of an MPG to control height "
"override are always created."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3567
#, no-wrap
msgid "Enable MPG height control"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3568
#, no-wrap
msgid "qtplasmac.ext_height_ovr_count_enable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3568
#, no-wrap
msgid "MPG height change"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3569
#, no-wrap
msgid "qtplasmac.ext_height_ovr_counts"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3573
msgid ""
"The following HAL bit pins are only created if the function is specified in "
"a <<qt_custom-user-buttons,custom user button>>.  The HAL pin has the "
"identical behaviour of the related custom user button."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3578
#, no-wrap
msgid "qtplasmac.ext_probe"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3579
#, no-wrap
msgid "qtplasmac.ext_pulse"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3580
#, no-wrap
msgid "qtplasmac.ext_ohmic"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3581
#, no-wrap
msgid "qtplasmac.ext_consumables"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3582
#, no-wrap
msgid "qtplasmac.ext_frame_job"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3585
msgid ""
"The following HAL bit output pins are always created and can be used by "
"either the <<qt_button-toggle,Toggle HAL Pin>> or <<qt_button-pulse,Pulse "
"HAL Pin>> custom user buttons to change the state of an output."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3590
#, no-wrap
msgid "qtplasmac.ext_out_0"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3591
#, no-wrap
msgid "qtplasmac.ext_out_1"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3592
#, no-wrap
msgid "qtplasmac.ext_out_2"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3594
#, no-wrap
msgid "Hide Program Buttons"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3598
msgid ""
"If the user has external buttons and/or a pendant that emulates any of the "
"program buttons, CYCLE START, CYCLE PAUSE, or CYCLE STOP then it is possible "
"to hide any or all of these GUI program buttons by adding the following code "
"to the *[GUI_OPTIONS]* section of the <machine_name>.prefs file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3604
#, no-wrap
msgid ""
"Hide run = True\n"
"Hide pause = True\n"
"Hide abort = True\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3607
msgid ""
"For the 16:9 or 4:3 GUIs, the hiding of each of these GUI buttons will "
"expose two more custom user buttons in the GUI."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3609
#, no-wrap
msgid "Tuning Mode 0 Arc OK"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3615
msgid ""
"Mode 0 Arc OK relies on the arc voltage to set the Arc OK signal.  This is "
"accomplished by sampling the arc voltage every servo thread cycle.  There "
"needs to be a specified number of consecutive samples, all within a "
"specified threshold for the Arc OK signal to be set.  These voltages are "
"also required to be within a specified range."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3617
msgid ""
"There are two settings in the <<qt_parameters-tab,PARAMETERS Tab>> for "
"setting the range, these are:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3619
#, no-wrap
msgid "*OK High Volts* which is the upper value of the voltage range. The default is 250&thinsp;V.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3621
#, no-wrap
msgid "*OK Low Volts* which is the lower value of the voltage range. The default is 60&thinsp;V.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3623
msgid ""
"Both of these values may be changed by direct entry or by the use of the "
"increment/decrement buttons."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3625
msgid ""
"There are also two HAL pins that have been provided to allow the user to "
"tune the set point. These HAL pins are:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3627
msgid ""
"`plasmac.arc-ok-counts` which is the number of consecutive readings within "
"the threshold that are required to set the Arc OK signal. The default is 10."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3629
msgid ""
"`plasmac.arc-ok-threshold` which is the maximum voltage deviation that is "
"allowed for a valid voltage to set the Arc OK signal. The default is 10."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3631
msgid ""
"The following example would set the number of valid consecutive readings "
"required to 6:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3635
#, no-wrap
msgid "setp plasmac.arc-ok-counts 6\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3638 src/plasma/qtplasmac.adoc:3694
msgid ""
"These settings if used should be in the custom.hal file of the configuration."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3639
#, no-wrap
msgid "Lost Arc Delay"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3642
msgid ""
"Some plasma power sources/machine configurations may lose the Arc OK signal "
"either momentarily during a cut, or permanently near the end of a cut "
"causing QtPlasmaC to pause the program and report a \"valid arc lost\" error."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3644
msgid ""
"There is a HAL pin named `plasmac.arc-lost-delay` that may be used to set a "
"delay (in seconds) that will prevent a paused program/error if the lost Arc "
"OK signal is regained, or the *M5* command is reached before the set delay "
"period expires."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3646
msgid ""
"It is important to note that the THC will be disabled and locked at the "
"cutting height at the time the Arc OK signal was lost."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3648
msgid "The following code would set a delay of 0.1 seconds:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3652
#, no-wrap
msgid "setp plasmac.arc-lost-delay 0.1\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3655
msgid "It is recommended that the user set this pin in the custom.hal file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3658
msgid ""
"This setting should only be used if the user experiences the above "
"symptoms.  It should also be noted that the user could use the appropriate "
"<<qt_ignore-ok,Ignore Arc OK>> G-code commands to achieve a similar result."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3659
#, no-wrap
msgid "Zero Window"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3662
msgid ""
"Small fluctuations in the arc voltage displayed while the machine is at idle "
"are possible depending on many different variables (electrical noise, "
"incorrect THCAD tuning, etc.)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3664
msgid ""
"After all contributing factors have been mitigated, if a small fluctuation "
"still exists it is possible to eliminate it by widening the voltage window "
"for which QtPlasmaC will display 0&thinsp;V."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3667
msgid ""
"The pin for adjusting this value is named plasmac.zero-window and the "
"default value is set to 0.1.  To change this value, add the pin and the "
"required value to the custom.hal file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3669
msgid ""
"The following example would set the voltage window to be displayed as "
"0&#8239;V from -5&#8239;V to +5&#8239;V:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3673
#, no-wrap
msgid "setp plasmac.zero-window 5\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3675
#, no-wrap
msgid "Tuning Void Sensing"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3678
msgid ""
"In addition to the *Void Slope* setting in the <<qt_parameters-tab,"
"PARAMETERS Tab>> there are two HAL pins to aid in the fine tuning of void "
"anti-dive. These HAL pins are:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3680
#, no-wrap
msgid "*plasmac.void-on-cycles* which is the number of times the slope rate needs to be exceeded to activate void anti-dive. The default is 2.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3682
#, no-wrap
msgid "*plasmac.void-off-cycles* which is the number of cycles without the slope rate being exceeded to deactivate void anti-dive. The default is 10.\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3684
msgid "The following example would set the number of on cycles required to 3:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3688
#, no-wrap
msgid "setp plasmac.void-on-cycles 3\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3692
msgid ""
"The objective is to have as low a value of Void Slope as possible without "
"any false triggering then adjust on and off cycles to ensure clean "
"activation and deactivation of void anti-dive.  In most cases it should not "
"be necessary to change on and off cycles from the default value."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3695
#, no-wrap
msgid "Max Offset"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3698
msgid ""
"Max Offset is the distance (in millimeters) away from the Z MAX_LIMIT that "
"QtPlasmaC will allow the Z axis to travel while under machine control."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3702
msgid ""
"The pin for adjusting this value is named plasmac.max-offset and the default "
"value (in millimeters) is set to 5.  To change this value, add the pin and "
"the required value to the custom.hal file.  It is not recommended to use "
"values less than 5mm as offset overrun may cause unforeseen issues."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3704
msgid ""
"The following example would set the distance from Z MAX_LIMIT to 10&#8239;mm:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3708
#, no-wrap
msgid "setp plasmac.max-offset 10\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3710
#, no-wrap
msgid "Enable Tabs During Automated Motion"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3714
msgid ""
"By default, all tabs except the <<qt_main-tab,MAIN Tab>> are disabled during "
"automated motion.  It is possible for every tab but the <<qt_conversational-"
"tab,CONVERSATIONAL Tab>> to be enabled during automated motion by setting "
"the following HAL pin True:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3718
#, no-wrap
msgid "setp qtplasmac.tabs_always_enabled 1\n"
msgstr ""

#. type: delimited block =
#: src/plasma/qtplasmac.adoc:3724
msgid ""
"It is the responsibility of the operator to ensure that the machine is "
"equipped with a suitable, working hardware ESTOP.  If using only a "
"touchscreen to navigate the QtPlasmaC GUI, there is no way to stop automated "
"machine motion on any tab but the MAIN tab."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3726
#, no-wrap
msgid "Override Jog Inhibit Via Z+ Jog"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3729
msgid ""
"It is possible to override the jog inhibit by using the GUI or keyboard to "
"jog in the Z+ direction rather than checking the Override Jog box on the "
"<<qt_settings-tab, SETTINGS Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3731
msgid ""
"This is done by changing the following preference to *True* in the "
"*[GUI_OPTIONS]* of the <machine_name>.prefs file in the <machine_name> "
"folder:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3734
#, no-wrap
msgid "Override jog inhibit via Z+\n"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3736
#, no-wrap
msgid "QtPlasmaC State Outputs"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3739
msgid ""
"The plasmac HAL component has a HAL pin named *plasmac.state-out* which can "
"be used to interface with user-coded components to provide the current state "
"of the component."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3741
msgid "The different states QtPlasmaC could encounter are as follows:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3745
#, no-wrap
msgid "IDLE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3746
#, no-wrap
msgid "idle and waiting for a start command"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3746
#, no-wrap
msgid "PROBE_HEIGHT"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3747
#, no-wrap
msgid "move down to probe height"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3747
#, no-wrap
msgid "PROBE_DOWN"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3748
#, no-wrap
msgid "probe down until material sensed"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3748
#, no-wrap
msgid "PROBE_UP"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3749
#, no-wrap
msgid "probe up until material not sensed, this sets the zero height"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3749
#, no-wrap
msgid "ZERO_HEIGHT"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3750
#, no-wrap
msgid "not used at present"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3751
#, no-wrap
msgid "move up to pierce height"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3751
#, no-wrap
msgid "TORCH_ON"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3752
#, no-wrap
msgid "turn the torch on"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3752
#, no-wrap
msgid "ARC_OK"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3753
#, no-wrap
msgid "wait until arc ok detected"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3754
#, no-wrap
msgid "wait for pierce delay time"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3754
#, no-wrap
msgid "PUDDLE_JUMP"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3755
#, no-wrap
msgid "xy motion begins, move to puddle jump height"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3756
#, no-wrap
msgid "move to cut height"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3756
#, no-wrap
msgid "CUT_MODE_01"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3757
#, no-wrap
msgid "cutting in either mode 0 or mode 1"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3757
#, no-wrap
msgid "CUT_MODE_2"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3758
#, no-wrap
msgid "cutting in mode 2"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3759
#, no-wrap
msgid "pause motion at end of cut"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3759
#, no-wrap
msgid "SAFE_HEIGHT"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3760
#, no-wrap
msgid "move to safe height"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3760
#, no-wrap
msgid "MAX_HEIGHT"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3761
#, no-wrap
msgid "move to maximum height"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3761
#, no-wrap
msgid "END_CUT"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3762
#, no-wrap
msgid "end the current cut"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3762
#, no-wrap
msgid "END_JOB"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3763
#, no-wrap
msgid "end the current job"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3763 src/remap/remap.adoc:2166
#, no-wrap
msgid "18"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3763
#, no-wrap
msgid "TORCHPULSE"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3764
#, no-wrap
msgid "a torch pulse is active"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3764 src/remap/remap.adoc:2167
#, no-wrap
msgid "19"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3764
#, no-wrap
msgid "PAUSED_MOTION"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3765
#, no-wrap
msgid "cut recovery motion is active while paused"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3765
#, no-wrap
msgid "OHMIC_TEST"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3766
#, no-wrap
msgid "an ohmic test is active"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3766 src/remap/remap.adoc:2175
#, no-wrap
msgid "21"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3766
#, no-wrap
msgid "PROBE_TEST"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3767
#, no-wrap
msgid "a probe test is active"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3767 src/remap/remap.adoc:2176
#, no-wrap
msgid "22"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3767
#, no-wrap
msgid "SCRIBING"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3768
#, no-wrap
msgid "a scribing job is active"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3768 src/remap/remap.adoc:2177
#, no-wrap
msgid "23"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3768
#, no-wrap
msgid "CONSUMABLE_CHANGE_ON"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3769
#, no-wrap
msgid "move to consumable change coordinates"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3769
#, no-wrap
msgid "CONSUMABLE_CHANGE_OFF"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3770
#, no-wrap
msgid "return from consumable change coordinates"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3770 src/remap/remap.adoc:2179
#, no-wrap
msgid "25"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3770
#, no-wrap
msgid "CUT_RECOVERY_ON"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3771
#, no-wrap
msgid "cut recovery is active"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3771 src/remap/remap.adoc:2180
#, no-wrap
msgid "26"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3771
#, no-wrap
msgid "CUT_RECOVERY_OFF"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3772
#, no-wrap
msgid "cut recovery is deactivated"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3772 src/remap/remap.adoc:2181
#, no-wrap
msgid "27"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3776
msgid ""
"The DEBUG state is for testing purposes only and will not normally be "
"encountered."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3777
#, no-wrap
msgid "QtPlasmaC Debug Print"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3780
msgid ""
"The plasmac HAL component has a HAL pin named *plasmac.debug-print* which if "
"set to 1 (true) will print to terminal every state change as a debug aid."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3782
#, no-wrap
msgid "Hypertherm PowerMax Communications"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3787
msgid ""
"Communications can be established with a Hypertherm PowerMax plasma cutter "
"that has a RS485 port.  This feature enables the setting of *Cut Mode*, "
"*Cutting Amperage* and *Gas Pressure* automatically from the *Cut "
"Parameters* of the material file.  In addition, the user will be able to "
"view the PowerMax's *Arc On Time* in hh:mm:ss format on the <<qt_statistics-"
"tab,STATISTICS Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3789
msgid ""
"If *Gas Pressure* is set to Zero then the PowerMax will automatically "
"calculate the required pressure from the *Cut Mode*, *Cut Current*, torch "
"type, and torch length."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3791
msgid ""
"Changing the cutting mode will set the gas pressure to zero causing the "
"machine to use its automatic gas pressure mode."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3794
msgid ""
"The maximum and minimum values of these parameters are read from the plasma "
"cutter and the related spin-buttons in the Cut Parameters are then limited "
"by these values.  Gas pressure cannot be changed from zero until "
"communications have been established."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3797
msgid ""
"This feature is enabled by setting the correct port name for the PM_PORT "
"option in the *[POWERMAX]* section of the <machine_name>.prefs file.  If the "
"PM_PORT option is not set in the <machine_name>.prefs file then the widgets "
"associated with this feature will not be visible."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3799
msgid ""
"Example showing enabling the Hypertherm PowerMax Communications on USB0:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3804
#, no-wrap
msgid ""
"[POWERMAX]\n"
"Port = /dev/ttyusb0\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3808
msgid ""
"If the user is unsure of the name of the port, there is a python script in "
"the configuration directory that will show all available ports and can also "
"be used to test communications with the plasma unit prior to enabling this "
"feature in the QtPlasmaC GUI."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3810
msgid "To use the test script follow these instructions:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3815
#, no-wrap
msgid "pmx485-test\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3822
#, no-wrap
msgid ""
"source ~/linuxcnc-dev/scripts/rip-environment\n"
"pmx485-test\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3826
msgid ""
"The gas pressure units display (psi or bar) is determined by the data "
"received during initial setup of the communication link and is then shown "
"next to the Gas Pressure setting in the MATERIAL section of the "
"<<qt_parameters-tab,PARAMETERS Tab>>."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3829
msgid ""
"The PowerMax machine will go into remote mode after communications have been "
"established and may only be controlled remotely (via the QtPlasmaC GUI) at "
"this point.  The connection can be validated by observing the PowerMax "
"display."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3831
msgid "To switch the PowerMax back to local mode the user can either:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3833
msgid "Disable PowerMax Comms from the <<qt_main-tab, MAIN Tab>>"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3834
msgid ""
"Close LinuxCNC which will put the PowerMax into local mode during shutdown."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3835
msgid "Turn the PowerMax off for 30 seconds and then power it back on."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3837
msgid ""
"If PowerMax communications is active then selecting <<qt_mesh-mode,Mesh "
"Mode>> will automatically select CPA mode on the PowerMax unit."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3841
#, no-wrap
msgid ""
"To use the PowerMax communications feature it is necessary to have the python pyserial module installed.\n"
"If pyserial is not installed an error message will be displayed."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3843
msgid ""
"To install pyserial, enter the following command into a terminal window:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3846
#, no-wrap
msgid "sudo apt install python-serial\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3849
msgid ""
"A typical <<qt_rs485_connections,connection diagram>> is shown in the "
"appendix of this document as well as confirmed working interfaces."
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:3850
#, no-wrap
msgid "Internationalisation"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3853
msgid ""
"It is possible to create translation files for QtPlasmaC to display in the "
"language of the current locale."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3855
msgid ""
"To create and or edit a translation file requires that LinuxCNC has been "
"installed as run in place."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3857
msgid ""
"The following assumes that the linuxcnc git directory is ~/linuxcnc-dev."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3859
msgid "The *$* indicates a terminal prompt."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3861
msgid ""
"All language files are kept in ~/linuxcnc-dev/share/screens/qtplasmac/"
"languages."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3863
msgid ""
"The qtplasmac.py file is a python version of the GUI file used for "
"translation purposes."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3866
msgid ""
"The .ts files are the translation source files for the translations.  These "
"are the files that require creating/editing for each language."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3868
msgid "The .qm files are the compiled translation files used by pyqt."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3872
msgid ""
"The language is determined by an underscore plus the first two letters of "
"the locale, for example if an Italian translation was being done then it "
"would be \"\\_it\".  It will be referred to as \"_xx\" in this document, so "
"\"qtplasmac_xx.ts\" in this document would actually be \"qtplasmac_it.ts\" "
"for an Italian translation."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3874
msgid ""
"The default locale for QtPlasmaC is \"_en\" which means that any translation "
"files created as \"qtplasmac_en.*\" will not be used for translations."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3876
msgid ""
"If any of the required utilities (pyuic5, pylupdate5, linguist) are not "
"installed then the user will need to install pyqt5-dev-tools:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3879
#, no-wrap
msgid "$ sudo apt install pyqt5-dev-tools\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3882
msgid "Change to the languages directory:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3884
#, no-wrap
msgid "$ cd ~/linuxcnc-dev/share/qtvcp/screens/qtplasmac/languages\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3887
msgid ""
"If any text changes have been made to the GUI then run the following to "
"update the GUI python file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3889
#, no-wrap
msgid "$ pyuic5 ../qtplasmac.ui > qtplasmac.py\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3894
msgid ""
"The user can either create a new translation source file for a non-existing "
"language translation or modify an existing translation source file due to "
"changes being made to some text in a QtPlasmaC source file.  If modifying an "
"existing translation that has had no source file changes then this step is "
"not required."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3896
msgid "Create or edit a .ts file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3898
#, no-wrap
msgid "$ langfile xx\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3902
msgid ""
"this command is a script which runs the following: $ pylupdate5 *.py ../*."
"py ../../../../../lib/python/qtvcp/lib/qtplasmac/*.py -ts qtplasmac_xx.ts"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3904
msgid "The editing of the translation is done with the linguist application:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3906
#, no-wrap
msgid "$ linguist\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3909
msgid "Then open the required translation file."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3912
msgid ""
"It is not necessary to provide a translation for every text string, if no "
"translation is specified for a string then the original string will be used "
"in the application.  The user needs to be careful with the length of strings "
"that appear on widgets as space is limited. If possible try to make the "
"translation no longer than the original."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3914
msgid "When editing is complete save the file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3916
#, no-wrap
msgid "File > Save\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3919
msgid "Then create the .qm file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3921
#, no-wrap
msgid "File > Release\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3924
msgid ""
"Then create links to the compiled .qm file for the other QtPlasmaC GUIs."
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:3927
#, no-wrap
msgid ""
"$ ln -s qtplasmac_en.qm ../../qtplasmac_4x3/languages/\n"
"$ ln -s qtplasmac_en.qm ../../qtplasmac_9x16/languages/\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3930
msgid ""
"QtPlasmaC will be translated to the language of the current locale on the "
"next start so long as a .qm file exists in that language."
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:3931
#, no-wrap
msgid "Appendix"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3936
msgid ""
"There are example configuration files which use the QtPlasmaC GUI to "
"simulate plasma cutting machines."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3938
msgid ""
"They can be found in the LinuxCNC chooser under: Sample Configurations -> "
"by_machine -> qtplasmac"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3940
msgid "Three versions are available in both metric and imperial units:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3942
msgid "qtplasmac_l - 16:9 format, minimum resolution 1366x768"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3943
msgid "qtplasmac_p - 9:16 format, minimum resolution 786x1366"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3944
msgid "qtplasmac_s - 4:3 format, minimum resolution 1024x768"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3946
msgid ""
"Each sample configuration includes a popup control panel to simulate various "
"inputs to the GUI such as:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3948
msgid "ARC VOLTAGE"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3949
msgid "OHMIC SENSE"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3950
msgid "FLOAT SWITCH"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3951
msgid "BREAKAWAY SWITCH"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3953
#, no-wrap
msgid "NGC Samples"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:3956
msgid ""
"There are some sample G-code files in the ~/linuxcnc/nc_files/examples/"
"plasmac directory."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:3957
#, no-wrap
msgid "QtPlasmaC Specific G-codes"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3962
#, no-wrap
msgid "Begin <<qt_multi-tool,cut>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3963
#, no-wrap
msgid "M3 $0 S1"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3963
#, no-wrap
msgid "End <<qt_multi-tool,cut>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3964
#, no-wrap
msgid "M5 $0"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3964
#, no-wrap
msgid "Begin <<qt_scribe,scribe>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3965
#, no-wrap
msgid "M3 $1 S1"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3965
#, no-wrap
msgid "End <<qt_scribe,scribe>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3966
#, no-wrap
msgid "M5 $1"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3966
#, no-wrap
msgid "Begin <<qt_spotting,center spot>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3967
#, no-wrap
msgid "M3 $2 S1"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3967
#, no-wrap
msgid "End <<qt_spotting,center spot>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3968
#, no-wrap
msgid "M5 $2"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3968
#, no-wrap
msgid "End all the above"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3969
#, no-wrap
msgid "M5 $-1"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3969
#, no-wrap
msgid "Select a <<qt_material-handling,material>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3971
#, no-wrap
msgid ""
"M190 P__n__ +\n"
"_n_ denotes the material number."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3971
#, no-wrap
msgid "Wait for <<qt_material-handling,material>> change confirmation"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3974
#, no-wrap
msgid ""
"M66 P3 L3 Qn +\n"
"_n_ is delay time (in seconds). +\n"
"This value may need to be increased for very large material files."
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3974
#, no-wrap
msgid "Set feed rate from <<qt_material-handling,material>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3975
#, no-wrap
msgid "F#<_hal[plasmac.cut-feed-rate]>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3975
#, no-wrap
msgid "Enable <<qt_ignore-ok,Ignore Arc OK>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3977
#, no-wrap
msgid ""
"M62 P1 (synchronized with motion) +\n"
"    M64 P1 (immediate)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3977
#, no-wrap
msgid "Disable <<qt_ignore-ok,Ignore Arc OK>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3979
#, no-wrap
msgid ""
"M63 P1 (synchronized with motion) +\n"
"    M65 P1 (immediate)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3979
#, no-wrap
msgid "Disable <<qt_thc,THC>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3981
#, no-wrap
msgid ""
"M62 P2 (synchronized with motion) +\n"
"    M64 P2 (immediate)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3981
#, no-wrap
msgid "Enable <<qt_thc,THC>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3983
#, no-wrap
msgid ""
"M63 P2 (synchronized with motion) +\n"
"    M65 P2 (immediate)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3983
#, no-wrap
msgid "Disable <<qt_overcut,Torch>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3985
#, no-wrap
msgid ""
"M62 P3 (synchronized with motion) +\n"
"    M64 P3 (immediate)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3985
#, no-wrap
msgid "Enable <<qt_overcut,Torch>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3987
#, no-wrap
msgid ""
"M63 P3 (synchronized with motion) +\n"
"    M65 P3 (immediate)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3987
#, no-wrap
msgid "Set <<qt_velocity_thc,velocity>> to a percentage of feed rate"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3993
#, no-wrap
msgid ""
"M67 E3 Qn (synchronized with motion) +\n"
"M68 E3 Qn (immediate) +\n"
"_n_ is the percentage to set +\n"
"10 is the minimum, below this will be set to 100% +\n"
"100 is the maximum, above this will be set to 100% +\n"
"*It is recommended to have M68 E3 Q0 in both the preamble and postamble*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3993
#, no-wrap
msgid "Cutter <<qt_cutter-compensation,compensation>> - left of path"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3994
#, no-wrap
msgid "G41.1 D#<_hal[plasmac.kerf-width]>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3994
#, no-wrap
msgid "Cutter <<qt_cutter-compensation,compensation>> - right of path"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3995
#, no-wrap
msgid "G42.1 D#<_hal[plasmac.kerf-width]>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3995
#, no-wrap
msgid "Cutter <<qt_cutter-compensation,compensation>> off"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3997
#, no-wrap
msgid ""
"G40 +\n"
"*Note that M62 through M68 are invalid while cutter compensation is on*"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3997
#, no-wrap
msgid "Cut <<qt_hole-cutting,holes>> at 60% feed rate"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3999
#, no-wrap
msgid ""
"#<holes> = 1 +\n"
"for holes less than 32&#8239;mm (1.26\") diameter"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:3999
#, no-wrap
msgid "Cut <<qt_hole-cutting,holes>> at 60% feed rate, turn torch off at hole end, continue hole path for over cut"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4002
#, no-wrap
msgid ""
"#<holes> = 2 +\n"
"for holes less than 32&#8239;mm (1.26\") diameter +\n"
"over cut length = 4&#8239;mm (0.157\")"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4002
#, no-wrap
msgid "Cut <<qt_hole-cutting,holes>> and arcs at 60% feed rate"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4005
#, no-wrap
msgid ""
"#<holes> = 3 +\n"
"for holes less than 32&#8239;mm (1.26\") diameter +\n"
"for arcs less than 16&#8239;mm (0.63\") radius"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4005
#, no-wrap
msgid "Cut <<qt_hole-cutting,holes>> and arcs at 60% feed rate, turn torch off at hole end, continue hole path for over cut"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4009
#, no-wrap
msgid ""
"#<holes> = 4 +\n"
"for holes less than 32&#8239;mm (1.26\") diameter +\n"
"for arcs less than 16&#8239;mm (0.63\") radius +\n"
"over cut length = 4&#8239;mm (0.157\")"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4010
#, no-wrap
msgid ""
"Specify <<qt_hole-cutting,hole>> diameter for +\n"
" #<holes> = 1-4"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4012
#, no-wrap
msgid ""
"#<h_diameter> = _n_ +\n"
"(_n_ is the diameter, use the same units system as the rest of the G-code file)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4013
#, no-wrap
msgid ""
"Specify <<qt_hole-cutting,hole>> velocity for +\n"
" #<holes>=1-4"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4015
#, no-wrap
msgid ""
"#<h_velocity> = _n_ +\n"
"(_n_ is the percentage, set the percentage of the current feed rate)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4015
#, no-wrap
msgid "Specify <<qt_overcut,over cut>> length"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4017
#, no-wrap
msgid ""
"#<oclength> = _n_ +\n"
"    (_n_ is the length, use the same units system as the rest of the G-code file)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4017
#, no-wrap
msgid "Specify <<qt_cut-types,pierce-only>> mode"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4019
#, no-wrap
msgid ""
"#<pierce-only> = _n_ +\n"
"(_n_ is the mode, 0=normal cut mode, 1=pierce only mode)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4023
#, no-wrap
msgid ""
"Create or edit materials. +\n"
" options: +\n"
" 0 - Create temporary default +\n"
" 1 - Add if not existing +\n"
" 2 - Overwrite if existing else add new"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4027
#, no-wrap
msgid ""
"mandatory parameters: +\n"
"(o=<option>, nu=<nn>, na=<ll>, ph=<nn>, pd=<nn>, ch=<nn>, fr=<nn>) +\n"
"optional parameters: +\n"
"(kw=<nn>, th=<nn>, ca=<nn>, cv=<nn>, pe=<nn>, gp=<nn>, cm=<nn>, jh=<nn>, jd=<nn>)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4027
#, no-wrap
msgid "<<qt_magic-comments,Keep Z Motion>>"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4028
#, no-wrap
msgid "#<keep-z-motion> = 1"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:4030
#, no-wrap
msgid "QtPlasmaC G-code Examples"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4035
#, no-wrap
msgid "Select material and do a normal cut"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4042
#, no-wrap
msgid ""
"M190 P3 +\n"
"M66 P3 L3 Q1 +\n"
"F#<_hal[plasmac.cut-feed-rate]> +\n"
"M3 $0 S1 +\n"
". +\n"
". +\n"
"M5 $0"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4042
#, no-wrap
msgid "Set velocity to 100% of CutFeedRate"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4043
#, no-wrap
msgid "M67 E3 Q0 or M67 E3 Q100"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4043
#, no-wrap
msgid "Set velocity to 60% of CutFeedRate"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4044
#, no-wrap
msgid "M67 E3 Q60"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4044
#, no-wrap
msgid "Set velocity to 40% of CutFeedRate"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4045
#, no-wrap
msgid "M67 E3 Q40"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4045
#, no-wrap
msgid "Cut a hole with 60% reduced speed using velocity setting"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4058
#, no-wrap
msgid ""
"G21 (metric) +\n"
"G64 P0.05 +\n"
"M52 P1 (allow paused motion) +\n"
"F#<_hal[plasmac.cut-feed-rate]> +\n"
"G0 X10 Y10 +\n"
"M3 $0 S1 (start cut) +\n"
"G1 X0 +\n"
"M67 E3 Q60 (reduce feed rate to 60%) +\n"
"G3 I10 (the hole) +\n"
"M67 E3 Q100 (restore feed rate to 100%) +\n"
"M5 $0 (end cut) +\n"
"G0 X0 Y0 +\n"
"M2 (end job)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4058
#, no-wrap
msgid "Cut a hole with 60% reduced speed using the #<holes> command"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4070
#, no-wrap
msgid ""
"G21 (metric) +\n"
"G64 P0.05 +\n"
"M52 P1 (allow paused motion) +\n"
"\\#<holes> = 1 (velocity reduction for holes) +\n"
"F#<_hal[plasmac.cut-feed-rate]> +\n"
"G0 X10 Y10 +\n"
"M3 $0 S1 (start cut) +\n"
"G1 X0 +\n"
"G3 I10 (the hole) +\n"
"M5 $0 (end cut) +\n"
"G0 X0 Y0 +\n"
"M2 (end job)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4070
#, no-wrap
msgid "Cut a hole with over cut using torch disable"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4086
#, no-wrap
msgid ""
"G21 (metric) +\n"
"G64 P0.05 +\n"
"M52 P1 (allow paused motion) +\n"
"F#<_hal[plasmac.cut-feed-rate]> +\n"
"G0 X10 Y10 +\n"
"M3 $0 S1 (start cut) +\n"
"G1 X0 +\n"
"M67 E3 Q60 (reduce feed rate to 60%) +\n"
"G3 I10 (the hole) +\n"
"M62 P3 (turn torch off) +\n"
"G3 X0.8 Y6.081 I10 (continue motion for 4mm) +\n"
"M63 P3 (allow torch to be turned on) +\n"
"M67 E3 Q0 (restore feed rate to 100%) +\n"
"M5 $0 (end cut) +\n"
"G0 X0 Y0 +\n"
"M2 (end job)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4086
#, no-wrap
msgid "Cut a hole with over cut using the #<holes> command"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4098
#, no-wrap
msgid ""
"G21 (metric) +\n"
"G64 P0.05 +\n"
"M52 P1 (allow paused motion) +\n"
"\\#<holes> = 2 (over cut for holes) +\n"
"F#<_hal[plasmac.cut-feed-rate]> +\n"
"G0 X10 Y10 +\n"
"M3 $0 S1 (start cut) +\n"
"G1 X0 +\n"
"G3 I10 (the hole) +\n"
"M5 $0 (end cut) +\n"
"G0 X0 Y0 +\n"
"M2 (end job) +"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4098
#, no-wrap
msgid "Cut a hole with 6.5mm over cut using the #<holes> command"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4111
#, no-wrap
msgid ""
"G21 (metric) +\n"
"G64 P0.05 +\n"
"M52 P1 (allow paused motion) +\n"
"\\#<holes> = 2 (over cut for holes) +\n"
"#<oclength> = 6.5 (6.5mm over cut length) +\n"
"F#<_hal[plasmac.cut-feed-rate]> +\n"
"G0 X10 Y10 +\n"
"M3 $0 S1 (start cut) +\n"
"G1 X0 +\n"
"G3 I10 (the hole) +\n"
"M5 $0 (end cut) +\n"
"G0 X0 Y0 +\n"
"M2 (end job)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4111
#, no-wrap
msgid "Select scribe and select torch at end of scribing"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4124
#, no-wrap
msgid ""
". +\n"
". +\n"
"M52 P1 (paused motion on) +\n"
"F#<_hal[plasmac.cut-feed-rate]> +\n"
"T1 M6 (select scribe) +\n"
"G43 H0 (apply offsets) +\n"
"M3 $1 S1 (start plasmac with scribe) +\n"
". +\n"
". +\n"
"T0 M6 (select torch) +\n"
"G43 H0 (apply offsets) +\n"
"G0 X0 Y0 (parking position) +\n"
"M5 $1 (end)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4125
#, no-wrap
msgid "Hole center spotting. +"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4137
#, no-wrap
msgid ""
"(Requires a small motion command or nothing happens) +\n"
"G21 (metric) +\n"
"F99999 (high feed rate) +\n"
"G0 X10 Y10 +\n"
"M3 $2 S1 (spotting on) +\n"
"G91 (relative distance mode) +\n"
"G1 X0.000001 +\n"
"G90 (absolute distance mode) +\n"
"M5 $2 (spotting off) +\n"
"G0 X0 Y0 +\n"
"G90 +\n"
"M2"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4137
#, no-wrap
msgid "Create temporary default material"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4138
#, no-wrap
msgid "(o=0, nu=2, na=5mm Mild Steel 40A, ph=3.1, pd=0.1, ch=0.75, fr=3000)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4138
#, no-wrap
msgid "Edit material, if not existing create a new one"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4139
#, no-wrap
msgid "(o=2, nu=2, na=5mm Mild Steel 40A, ph=3.1, pd=0.1, ch=0.75, fr=3000, kw=1.0)"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:4142
#, no-wrap
msgid "Mesa THCAD"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4147
msgid ""
"The Mesa THCAD is a common way of obtaining the arc voltage from a plasma "
"cutter and is also useful for ohmic sensing of the material during probing.  "
"The THCAD may be used for parallel port configurations as well as "
"configurations using Mesa Electronics hardware.  The THCAD is available in "
"three different models, THCAD-5, THCAD-10, and THCAD-300."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4149
msgid ""
"There is a mode jumper on each THCAD card which should be set to *UNIPOLAR*"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4151
msgid ""
"There is a frequency divider jumper on each THCAD card which should be set "
"according to the hardware type:"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4154
#, no-wrap
msgid "Input Device"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4155
#, no-wrap
msgid "Recommended Setting"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4155
#, no-wrap
msgid "Parallel Port with very low latency"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4156 src/plasma/qtplasmac.adoc:4159
#, no-wrap
msgid "F/32"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4156
#, no-wrap
msgid "Parallel Port recommended starting point"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4157
#, no-wrap
msgid "F/64"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4157
#, no-wrap
msgid "Parallel Port with higher latency, or when cutting thick material"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4158
#, no-wrap
msgid "F/128"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4158
#, no-wrap
msgid "Mesa Card"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4162
msgid "This value is required to be entered into PNcConf during installation."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4166
msgid ""
"If using a parallel port it may be necessary for the user to adjust the "
"jumper setting and the subsequent scaling values on the <<qt_parameters-tab,"
"Parameters Tab>> to achieve optimal results.  Symptoms may include random "
"torch raises or dives during otherwise stable cutting. Halscope plots may be "
"useful in diagnosing these issues."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4169
msgid "Located on the rear of the THCAD is a calibration sticker showing:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:4173
#, no-wrap
msgid "    THCAD-nnn\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:4176
#, no-wrap
msgid ""
" 0V  121.1 kHz\n"
" 5V  925.3 kHz\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4179
msgid ""
"or similar values, these values are required to be entered into PNcConf "
"during installation."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4181
msgid ""
"PNcConf has entries for all required THCAD parameters and will calculate and "
"configure any required settings. The calculations used are as follows:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:4186
#, no-wrap
msgid "vs = r / ((f - z) / d / v)\n"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:4192
#, no-wrap
msgid "vo = z / d\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4195
msgid "_r_ = divider ratio (see below)."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4197
msgid "_f_ = full scale value from calibration sticker."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4199
msgid "_z_ = 0&thinsp;V value from calibration sticker."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4201
msgid "_d_ = value from jumper above."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4203
msgid "_v_ = full scale voltage of THCAD"
msgstr ""

#. type: Block title
#: src/plasma/qtplasmac.adoc:4204
#, no-wrap
msgid "Divider Ratio"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4207
msgid "_THCAD-5 or THCAD-10_"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4209
msgid ""
"If connecting to a plasma CNC port then the divider ratio is selected from "
"the plasma machine. A common ratio used is 20:1"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4212
msgid ""
"If connecting to the plasma machines full arc voltage then a common setup "
"for a THCAD-10 is to use a 1 M&ohm; resistor from arc negative to THCAD "
"negative and a 1 M&ohm; resistor from arc positive to THCAD positive.  The "
"divider ratio is obtained by:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:4215
#, no-wrap
msgid "r = (total_resistance + 100000) / 100000\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4218
msgid "_THCAD-300_"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:4221
#, no-wrap
msgid "r = 1\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4224
msgid ""
"IF THE USER IS USING A HF START PLASMA POWER SUPPLY THEN EACH OF THESE "
"RESISTANCES SHOULD BE MADE UP OF SEVERAL HIGH VOLTAGE RESISTORS."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4226
msgid ""
"IF THE USER IS USING A HF START PLASMA POWER SUPPLY THEN OHMIC SENSING IS "
"NOT RECOMMENDED."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4229
msgid ""
"These values can be calculated by using https://jscalc.io/calc/"
"NTr5QDX6WgMThBVb[this online calculator]."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4232
msgid ""
"There is a <<qt_lowpass, lowpass filter>> available which may be useful if "
"using a THCAD and there is a lot of noise on the returned arc voltage."
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:4234
#, no-wrap
msgid "RS485 Connections"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4237
msgid ""
"Hypertherm RS485 Wiring Diagram (wire colors inside the Hypertherm in "
"parentheses):"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4240
#, no-wrap
msgid "Connection at Machine Pin #"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4241
#, no-wrap
msgid "Connection at Breakout Board"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4241
#, no-wrap
msgid "*1* - Tx+ (Red)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4242
#, no-wrap
msgid "->RXD+"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4242
#, no-wrap
msgid "*2* - Tx- (Black)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4243
#, no-wrap
msgid "->RXD-"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4243
#, no-wrap
msgid "*3* - Rx+ (Brown)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4244
#, no-wrap
msgid "->T/R+"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4244
#, no-wrap
msgid "*4* - Rx- (White)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4245
#, no-wrap
msgid "->T/R-"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4245
#, no-wrap
msgid "*5* - GND (Green)"
msgstr ""

#. type: Table
#: src/plasma/qtplasmac.adoc:4246
#, no-wrap
msgid "->GND"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:4248
#, no-wrap
msgid "images/qtplasmac_rs485_pmx.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4251
msgid "RS485 interfaces that are known to work:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4253
msgid "DTECH DT-5019 USB to RS-485 converter adapter:"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:4254
#, no-wrap
msgid "images/qtplasmac_rs485_dtech.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4257
msgid ""
"The following is necessary to convert a motherboard Serial connection or "
"Serial card (RS232) to RS485:"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4259
msgid "DTECH RS-232 to RS-485 converter:"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:4260
#, no-wrap
msgid "images/qtplasmac_rs485_converter.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4263
msgid ""
"Serial card example (Sunnix SER5037A PCI Card shown with Breakout Board):"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:4264
#, no-wrap
msgid "images/qtplasmac_rs485_sunnix.png"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:4267
#, no-wrap
msgid "Arc OK With A Reed Relay"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4271
msgid ""
"An effective and very reliable method of obtaining an Arc OK signal from a "
"plasma power supply without a CNC port is to mount a reed relay inside a non-"
"conductive tube and wrap and secure three turns of the work lead around the "
"tube."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4273
msgid ""
"This assembly will now act as a relay that will switch on when current is "
"flowing through the work lead which only occurs when a cutting arc has been "
"established."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4275
msgid ""
"This will require that QtPlasmaC be operated in Mode 1 rather than Mode 0. "
"See the <<qt_mode,QtPlasmaC Modes>> sections for more information."
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:4276
#, no-wrap
msgid "images/qtplasmac_reed_arc_ok.png"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:4279
#, no-wrap
msgid "Contact Load Schematics"
msgstr ""

#. type: Target for macro image
#: src/plasma/qtplasmac.adoc:4281
#, no-wrap
msgid "images/qtplasmac_relay_contact.png"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4284
msgid "A full description is at <<qt-contact-load,Contact Load>>"
msgstr ""

#. type: Title ===
#: src/plasma/qtplasmac.adoc:4287
#, no-wrap
msgid "Keyboard Jogging"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4295
msgid ""
"There is a known issue with some combinations of hardware and keyboards that "
"may affect the autorepeat feature of the keyboard and will then affect "
"keyboard jogging by intermittent stopping and starting during jogging.  This "
"issue can be prevented by disabling the Operating System's autorepeat "
"feature for all keys.  QtPlasmaC uses this disabling feature by default for "
"all keys only when the <<qt_main-tab,MAIN Tab>> is visible, with the "
"following exceptions when autorepeat is allowed with the <<qt_main-tab,MAIN "
"Tab>> visible: G-code editor is active, MDI is active. When QtPlasmaC is "
"shut down, the Operating System's autorepeat feature will be enabled for all "
"keys."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4297
msgid ""
"If the user wishes to prevent QtPlasmaC from changing the Operating System's "
"autorepeat settings, enter the following in the *[GUI_OPTIONS]* section of "
"the <machine_name>.prefs file:"
msgstr ""

#. type: delimited block -
#: src/plasma/qtplasmac.adoc:4301
#, no-wrap
msgid "Autorepeat all == True\n"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4304
msgid "This issue does not affect any jogging using the GUI jog buttons."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4308
msgid ""
"Disconnecting and reconnecting a keyboard during an active QtPlasmaC session "
"will cause the autorepeat feature to re-enable itself automatically which "
"may cause intermittent stopping and starting during jogging.  The user must "
"restart QtPlasmaC to disable the autorepeat feature again."
msgstr ""

#. type: Title ==
#: src/plasma/qtplasmac.adoc:4309
#, no-wrap
msgid "Support"
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4312
msgid ""
"Online help and support is available from the https://forum.linuxcnc.org/"
"plasmac[PlasmaC section] of the https://forum.linuxcnc.org/[LinuxCNC Forum]."
msgstr ""

#. type: Plain text
#: src/plasma/qtplasmac.adoc:4315
msgid ""
"The user can create a compressed file containing the complete machine "
"configuration to aid in fault diagnosis by pressing following the directions "
"in the <<qt_backup,backup>> section.  The resulting file is suitable for "
"attaching to a post on the LinuxCNC Forum to help the community diagnose "
"specific issues."
msgstr ""

#. type: Title =
#: src/remap/remap.adoc:5
#, no-wrap
msgid "Remap Extending G-code"
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:11
#, no-wrap
msgid "Introduction: Extending the RS274NGC Interpreter by Remapping Codes"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:13
#, no-wrap
msgid "A Definition: Remapping Codes"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:16
msgid "By 'remapping codes' we mean one of the following:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:18
msgid ""
"Define the semantics of new - that is, currently unallocated - M- or G-codes"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:19
msgid ""
"Redefine the semantics of a - currently limited - set of existing codes."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:20
#, no-wrap
msgid "Why would you want to extend the RS274NGC Interpreter?"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:24
msgid ""
"The set of codes (M,G,T,S,F) currently understood by the RS274NGC "
"interpreter is fixed and cannot be extended by configuration options."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:30
msgid ""
"In particular, some of these codes implement a fixed sequence of steps to be "
"executed. While some of these, like M6, can be moderately configured by "
"activating or skipping some of these steps through INI file options, overall "
"the behavior is fairly rigid. So - if your are happy with this situation, "
"then this manual section is not for you."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:39
msgid ""
"In many cases, this means that supporting a non 'out of the box' "
"configuration or machine is either cumbersome or impossible, or requires "
"resorting to changes at the 'C/C\\+\\+' language level. The latter is "
"unpopular for good reasons - changing internals requires in-depth "
"understanding of interpreter internals, and moreover brings its own set of "
"support issues. While it is conceivable that certain patches might make "
"their way into the main LinuxCNC distribution, the result of this approach "
"is a hodge-podge of special-case solutions."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:47
msgid ""
"A good example for this deficiency is tool change support in LinuxCNC: While "
"random tool changers are well supported, it is next to impossible to "
"reasonably define a configuration for a manual-tool change machine with, for "
"example, an automatic tool length offset switch being visited after a tool "
"change, and offsets set accordingly. Also, while a patch for a very specific "
"rack tool changer exists, it has not found its way back into the main code "
"base."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:54
msgid ""
"However, many of these things may be fixed by using an O-word procedure "
"instead of a built in code - whenever the - insufficient - built in code is "
"to be executed, call the O-word procedure instead. While possible, it is "
"cumbersome - it requires source-editing of NGC programs, replacing all calls "
"to the deficient code by a an O-word procedure call."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:59
msgid ""
"In its simplest form, a remapped code isn't much more than a spontaneous "
"call to an O-word procedure. This happens behind the scenes - the procedure "
"is visible at the configuration level, but not at the NGC program level."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:61
msgid ""
"Generally, the behavior of a remapped code may be defined in the following "
"ways:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:63
msgid "You define a O-word subroutine which implements the desired behavior"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:64
msgid ""
"Alternatively, you may employ a Python function which extends the "
"interpreter's behavior."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:65
#, no-wrap
msgid "How to glue things together"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:67
msgid ""
"M- and G-codes, and O-words subroutine calls have some fairly different "
"syntax."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:70
msgid ""
"O-word procedures, for example, take positional parameters with a specific "
"syntax like so:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:74
#, no-wrap
msgid "o<test> call [1.234] [4.65]\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:79
msgid ""
"whereas M- or G-codes typically take required or optional 'word' parameters. "
"For instance, G76 (threading) requires the P,Z,I,J and K words, and "
"optionally takes the R,Q,H, E and L words."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:85
msgid ""
"So it isn't simply enough to say 'whenever you encounter code X, please call "
"procedure Y' - at least some checking and conversion of parameters needs to "
"happen. This calls for some 'glue code' between the new code, and its "
"corresponding NGC procedure to execute before passing control to the NGC "
"procedure."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:91
msgid ""
"This glue code is impossible to write as an O-word procedure itself since "
"the RS274NGC language lacks the introspective capabilities and access into "
"interpreter internal data structures to achieve the required effect. Doing "
"the glue code in - again - 'C/C\\+\\+' would be an inflexible and therefore "
"unsatisfactory solution."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:92
#, no-wrap
msgid "How Embedded Python fits in"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:96
msgid ""
"To make a simple situation easy and a complex situation solvable, the glue "
"issue is addressed as follows:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:99
msgid ""
"for simple situations, a built-in glue procedure (`argspec`) covers most "
"common parameter passing requirements"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:101
msgid ""
"for remapping T,M6,M61,S,F there is some standard Python glue which should "
"cover most situations, see <<remap:standard-glue,Standard Glue>>"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:103
msgid ""
"for more complex situations, one can write your own Python glue to implement "
"new behavior."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:109
msgid ""
"Embedded Python functions in the Interpreter started out as glue code, but "
"turned out very useful well beyond that. Users familiar with Python will "
"likely find it easier to write remapped codes, glue, O-word procedures, etc. "
"in pure Python, without resorting to the somewhat cumbersome RS274NGC "
"language at all."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:110
#, no-wrap
msgid "A Word on Embedded Python"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:118
msgid ""
"Many people are familiar with 'extending' the Python interpreter by 'C/C\\+\\"
"+' modules, and this is heavily used in LinuxCNC to access Task, HAL and "
"Interpreter internals from Python scripts. 'Extending Python' basically "
"means: your Python script executes as 'it is in the driver seat', and may "
"access non-Python code by importing and using extension modules written in "
"'C/C\\+\\+'. Examples for this are the LinuxCNC `hal`, `gcode` and `emc` "
"modules."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:125
msgid ""
"Embedded Python is a bit different and less commonly known: The main program "
"is written in C/C++ and may use Python like a subroutine. This is powerful "
"extension mechanism and the basis for the 'scripting extensions' found in "
"many successful software packages. Embedded Python code may access 'C/C\\+\\"
"+' variables and functions through a similar extension module method."
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:127
#, no-wrap
msgid "Getting started"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:130
msgid "Defining a code involves the following steps:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:132
msgid ""
"Pick a code - either use an unallocated code, or redefine an existing code."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:133
msgid "Decide how parameters are handled."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:134
msgid "Decide if and how results are handled."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:135
msgid "Decide about the execution sequence."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:136
#, no-wrap
msgid "Builtin Remaps"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:144
msgid ""
"Please note that currently only some existing codes can be redefined, while "
"there are many 'free' codes that may be available for remapping. When "
"developing redefined existing code, it is a good idea to start with an "
"unassigned G- or M- code, so that you can use both an existing behavior as "
"well as a new one. When you're done, redefine the existing code to use your "
"remapping configuration."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:147
msgid ""
"The current set of unused M-codes, available for user definition, can be "
"found in the <<remap:unallocated-m-codes,unallocated M-codes section>>,"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:148
msgid ""
"For G-codes, see the <<remap:unallocated-g-codes,unallocated G-codes list>>."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:150
msgid ""
"Existing codes that can be reassigned are listed in the <<remap:remappable-"
"codes,remappable codes section>>."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:153
msgid ""
"There are currently two complete Python-only remaps that are available in "
"stdglue.py:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:155
msgid "ignore_m6"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:156
msgid "index_lathe_tool_with_wear"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:159
msgid ""
"These are meant for use with lathe.  Lathes don't use M6 to index the tools, "
"they use the T command."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:164
msgid ""
"This remap also adds wear offsets to the tool offset, ie. T201 would index "
"to tool 2 (with tool 2's tool offset) and adds wear offset 1.  In the tool "
"table, tools numbers above 10000 are wear offsets, ie in the tool table, "
"tool 10001 would be wear offset 1."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:166
msgid "Here is what you need in the INI to use them:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:172
#, no-wrap
msgid ""
"[RS274NGC]\n"
"REMAP=T python=index_lathe_tool_with_wear\n"
"REMAP=M6 python=ignore_m6\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:175
#, no-wrap
msgid ""
"[PYTHON]\n"
"# where to find the Python code:\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:178
#, no-wrap
msgid ""
"# code specific for this configuration\n"
"PATH_PREPEND=./\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:181
#, no-wrap
msgid ""
"# generic support code - make sure this actually points to Python-stdglue\n"
"PATH_APPEND=../../nc_files/remap_lib/python-stdglue/\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:184
#, no-wrap
msgid ""
"# import the following Python module\n"
"TOPLEVEL=toplevel.py\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:187
#, no-wrap
msgid ""
"# the higher the more verbose tracing of the Python plugin\n"
"LOG_LEVEL = 0\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:190
msgid ""
"You must also add the required Python file in your configuration folder."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:192
msgid "<<remap:upgrading-an-existing,Upgrade an existing configuration>>"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:193
#, no-wrap
msgid "Picking a code"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:201
msgid ""
"Note that currently only a few existing codes may be redefined, whereas "
"there are many 'free' codes which might be made available by remapping. When "
"developing a redefined existing code, it might be a good idea to start with "
"an unallocated G- or M-code so both the existing and new behavior can be "
"exercised. When done, redefine the existing code to use your remapping setup."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:204
msgid ""
"the current set of unused M-codes open to user definition can be found "
"<<remap:unallocated-m-codes,here>>,"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:205
msgid "unallocated G-codes are listed <<remap:unallocated-g-codes,here>>."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:206
msgid ""
"Existing codes which may be remapped are listed <<remap:remappable-codes,"
"here>>."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:208
#, no-wrap
msgid "Parameter handling"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:214
msgid ""
"Let's assume the new code will be defined by an NGC procedure, and needs "
"some parameters, some of which might be required, others might be optional. "
"We have the following options to feed values to the procedure:"
msgstr ""

#.  . <<remap:extracting-words,extracting words from the current block>>
#. type: Plain text
#: src/remap/remap.adoc:218
msgid ""
"extracting words from the current block and pass them to the procedure as "
"parameters (like `X22.34` or `P47`)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:219
msgid "referring to <<gcode:ini-hal-params,INI file variables>>"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:221
msgid ""
"referring to global variables (like `#2200 = 47.11` or `#<_global_param> = "
"315.2`)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:228
msgid ""
"The first method is preferred for parameters of dynamic nature, like "
"positions. You need to define which words on the current block have any "
"meaning for your new code, and specify how that is passed to the NGC "
"procedure. Any easy way is to use the <<sub:argspec-parameter,argspec "
"statement>>. A custom prolog might provide better error messages."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:234
msgid ""
"Using to INI file variables is most useful for referring to setup "
"information for your machine, for instance a fixed position like a tool-"
"length sensor position. The advantage of this method is that the parameters "
"are fixed for your configuration regardless which NGC file you're currently "
"executing."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:237
msgid ""
"Referring to global variables is always possible, but they are easily "
"overlooked."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:241
msgid ""
"Note there's a limited supply of words which may be used as parameters, so "
"one might need to fall back to the second and third methods if many "
"parameters are needed."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:243
#, no-wrap
msgid "Handling results"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:248
msgid ""
"Your new code might succeed or fail, for instance if passed an invalid "
"parameter combination. Or you might choose to 'just execute' the procedure "
"and disregard results, in which case there isn't much work to do."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:251
msgid ""
"Epilog handlers help in processing results of remap procedures - see the "
"reference section."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:253
#, no-wrap
msgid "Execution sequencing"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:257
msgid ""
"Executable G-code words are classified into <<gcode:modal-groups,modal "
"groups>>, which also defines their relative execution behavior."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:261
msgid ""
"If a G-code block contains several executable words on a line, these words "
"are executed in a predefined <<gcode:order-of-execution,order of "
"execution>>, not in the order they appear in block."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:266
msgid ""
"When you define a new executable code, the interpreter does not yet know "
"where your code fits into this scheme. For this reason, you need to choose "
"an appropriate modal group for your code to execute in."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:267
#, no-wrap
msgid "An minimal example remapped code"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:272
msgid ""
"To give you an idea how the pieces fit together, let's explore a fairly "
"minimal but complete remapped code definition. We choose an unallocated M-"
"code and add the following option to the INI file:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:277
#, no-wrap
msgid ""
"[RS274NGC]\n"
"REMAP=M400  modalgroup=10 argspec=Pq ngc=myprocedure\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:280
msgid "In a nutshell, this means:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:285
msgid ""
"The `M400` code takes a required parameter `P` and an optional parameter "
"`Q`. Other words in the current block are ignored with respect to the `M400` "
"code. If the `P` word is not present, fail execution with an error."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:289
msgid ""
"when an `M400` code is encountered, execute `myprocedure.ngc` along the "
"other <<gcode:modal-groups,modal group>> 10 M-codes as per <<gcode:order-of-"
"execution,order of execution>>."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:294
msgid ""
"the value of `P`, and `Q` are available in the procedure as local named "
"parameters. The may be referred to as `#<P>` and `#<Q>`. The procedure may "
"test whether the `Q` word was present with the <<gcode:functions,`EXISTS`>> "
"built in function."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:297
msgid ""
"The file `myprocedure.ngc` is expected to exists in the `[DISPLAY]NC_FILES` "
"or `[RS274NGC]SUBROUTINE_PATH` directory."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:300
msgid ""
"A detailed discussion of REMAP parameters is found in the reference section "
"below."
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:301
#, no-wrap
msgid "Configuring Remapping"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:303
#, no-wrap
msgid "The REMAP statement"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:307
msgid ""
"To remap a code, define it using the `REMAP` option in `RS274NG` section of "
"your INI file. Use one `REMAP` line per remapped code."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:309
msgid "The syntax of the `REMAP` is:"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:310
#, no-wrap
msgid "`REMAP=`'<code>' '<options>'"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:313
msgid ""
"where '<code>' may be one of `T`,`M6`,`M61`,`S`,`F` (existing codes) or any "
"of the unallocated <<remap:unallocated-m-codes,M-codes>> or <<remap:"
"unallocated-g-codes,G-codes>>."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:315
msgid "It is an error to omit the '<code>' parameter."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:318
msgid ""
"The options of the REMAP statement are separated by whitespace. The options "
"are keyword-value pairs and currently are:"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:319
#, no-wrap
msgid "`modalgroup=`'<modal group>'"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:323
msgid ""
"the only currently supported modal group is 1, which is also the default "
"value if no group is given. Group 1 means 'execute alongside other G-codes'."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:327
msgid ""
"currently supported modal groups are: 5,6,7,8,9,10. If no modalgroup is "
"give, it defaults to 10 ('execute after all other words in the block')."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:328
#, no-wrap
msgid "T,S,F"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:330
msgid ""
"for these the modal group is fixed and any `modalgroup=` option is ignored."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:331
#, no-wrap
msgid "`argspec=`'<argspec>'"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:334
msgid ""
"See <<sub:argspec-parameter, description of the argspec parameter options>>. "
"Optional."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:335
#, no-wrap
msgid "`ngc=`'<ngc_basename>'"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:341
msgid ""
"Basename of an O-word subroutine file name. Do not specify an .ngc "
"extension. Searched for in the directories specified in the directory "
"specified in `[DISPLAY]PROGRAM_PREFIX`, then in `[RS274NGC]SUBROUTINE_PATH`. "
"Mutually exclusive with `python=`. It is an error to omit both `ngc=` and "
"`python=`."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:342
#, no-wrap
msgid "`python=`'<Python function name>'"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:347
msgid ""
"Instead of calling an ngc O-word procedure call a Python function. The "
"function is expected to be defined in the `module_basename.oword` module. "
"Mutually exclusive with `ngc=`."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:348
#, no-wrap
msgid "`prolog=`'<Python function name>'"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:353
msgid ""
"Before executing an ngc procedure, call this Python function.  The function "
"is expected to be defined in the `module_basename.remap` module. Optional."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:354
#, no-wrap
msgid "`epilog=`'<Python function name>'"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:359
msgid ""
"After executing an ngc procedure, call this Python function.  The function "
"is expected to be defined in the `module_basename.remap` module. Optional."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:364
msgid ""
"The `python`, `prolog` and `epilog` options require the Python Interpreter "
"plugin to be <<remap:embedded-python,configured>>, and appropriate Python "
"functions to be defined there so they can be referred to with these options."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:367
msgid ""
"The syntax for defining a new code, and redefining an existing code is "
"identical."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:368
#, no-wrap
msgid "Useful REMAP option combinations"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:372
msgid ""
"Note that while many combinations of argspec options are possible, not all "
"of them make sense. The following combinations are useful idioms:"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:373
#, no-wrap
msgid "`argspec=`'<words>' `ngc=`'<procname>' `modalgroup=`'<group>'"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:377
msgid ""
"The recommended way to call an NGC procedure with a standard argspec "
"parameter conversion. Used if argspec is good enough. Note it's not good "
"enough for remapping the Tx and M6/M61 tool change codes."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:378
#, no-wrap
msgid "`prolog=`'<pythonprolog>' `ngc=`'<procname>' `epilog=`'<pythonepilog>' `modalgroup=`'<group>'"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:386
msgid ""
"Call a Python prolog function to take any preliminary steps, then call the "
"NGC procedure. When done, call the Python epilog function to do any cleanup "
"or result extraction work which cannot be handled in G-code.  The most "
"flexible way of remapping a code to an NGC procedure, since almost all of "
"the Interpreter internal variables, and some internal functions may be "
"accessed from the prolog and epilog handlers. Also, a longer rope to hang "
"yourselves."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:387
#, no-wrap
msgid "`python=`'<pythonfunction>' `modalgroup=`'<group>'"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:392
msgid ""
"Directly call to a Python function without any argument conversion.  The "
"most powerful way of remapping a code and going straight to Python. Use this "
"if you don't need an NGC procedure, or NGC is just getting in your way."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:393
#, no-wrap
msgid "`argspec=`'<words>' `python=`'<pythonfunction>' `modalgroup=`'<group>'"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:397
msgid ""
"Convert the argspec words and pass them to a Python function as keyword "
"argument dictionary. Use it when you're too lazy to investigate words passed "
"on the block yourself."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:401
msgid ""
"Note that if all you want to achieve is to call some Python code from G-"
"code, there is the somewhat easier way of <<remap:python-o-word-procs, "
"calling Python functions like O-word procedures>>."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:403
#, no-wrap
msgid "The argspec parameter"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:408
msgid ""
"The argument specification (keyword `argspec`) describes required and "
"optional words to be passed to an ngc procedure, as well as optional "
"preconditions for that code to execute."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:411
msgid ""
"An argspec consists of 0 or more characters of the class `[@A-KMNP-Za-kmnp-"
"z^>]` . It can by empty (like `argspec=`)."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:415
msgid ""
"An empty argspec, or no argspec argument at all implies the remapped code "
"does not receive any parameters from the block. It will ignore any extra "
"parameters present."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:418
msgid ""
"Note that RS274NGC rules still apply - for instance you may use axis words "
"(eg X,Y,Z) only in the context of a G-code."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:421
msgid ""
"Axis words may also only be used if the axis is enabled.  If only XYZ are "
"enabled, ABCUVW will not be available to be used in argspec."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:426
msgid ""
"Words FST will have the normal functions but will be available as variables "
"in the remapped function. F will set feedrate, S will set spindle RPM, T "
"will trigger the tool prepare function.  Words FST should not be used if "
"this behavior is not desired."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:429
msgid ""
"Words DEIJKPQR have no predefined function and are recommended for use as "
"argspec parameters."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:430
#, no-wrap
msgid "`ABCDEFHIJKPQRSTUVWXYZ`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:438
msgid ""
"Defines a required word parameter: an uppercase letter specifies that the "
"corresponding word *must* be present in the current block. The word`s value "
"will be passed as a local named parameter with a corresponding name.  If the "
"`@` character is present in the argspec, it will be passed as positional "
"parameter, see below."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:439
#, no-wrap
msgid "`abcdefhijkpqrstuvwxyz`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:446
msgid ""
"Defines an optional word parameter: a lowercase letter specifies that the "
"corresponding word *may* be present in the current block.  If the word is "
"present, the word's value will be passed as a local named parameter. If the "
"`@` character is present in the argspec, it will be passed as positional "
"parameter, see below."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:447
#, no-wrap
msgid "`@`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:453
msgid ""
"The `@` (at-sign) tells argspec to pass words as positional parameters, in "
"the order defined following the `@` option. Note that when using positional "
"parameter passing, a procedure cannot tell whether a word was present or "
"not, see example below."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:458
msgid ""
"this helps with packaging existing NGC procedures as remapped codes. "
"Existing procedures do expect positional parameters. With the `@` option, "
"you can avoid rewriting them to refer to local named parameters."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:459
#, no-wrap
msgid "`^`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:463
msgid ""
"The `^` (caret) character specifies that the current spindle speed must be "
"greater than zero (spindle running), otherwise the code fails with an "
"appropriate error message."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:464
#, no-wrap
msgid "`>`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:468
msgid ""
"The `>` (greater-than) character specifies that the current feed must be "
"greater than zero, otherwise the code fails with an appropriate error "
"message."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:469
#, no-wrap
msgid "`n`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:472
msgid ""
"The `n` (greater-than) character specifies to pass the current line number "
"in the `n`local named parameter."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:478
msgid ""
"By default, parameters are passed as local named parameter to an NGC "
"procedure. These local parameters appear as 'already set' when the procedure "
"starts executing, which is different from existing semantics (local "
"variables start out with value 0.0 and need to be explicitly assigned a "
"value)."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:480
msgid ""
"Optional word parameters may be tested for presence by the `EXISTS(#<word>)` "
"idiom."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:481
#, no-wrap
msgid "Example for named parameter passing to NGC procedures"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:484 src/remap/remap.adoc:509 src/remap/remap.adoc:536
msgid "Assume the code is defined as"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:486
msgid "`REMAP=M400 modalgroup=10 argspec=Pq ngc=m400`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:488
msgid "and `m400.ngc` looks as follows:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:500
#, no-wrap
msgid ""
"o<m400> sub\n"
"(P is required since it's uppercase in the argspec)\n"
"(debug, P word=#<P>)\n"
"(the q argspec is optional since its lowercase in the argspec. Use as follows:)\n"
"o100 if [EXISTS[#<q>]]\n"
"    (debug, Q word set: #<q>)\n"
"o100 endif\n"
"o<m400> endsub\n"
"M2\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:503
msgid ""
"executing `M400` will fail with the message `user-defined M400: missing: P`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:504
msgid "executing `M400 P123` will display `P word=123.000000`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:505
msgid ""
"executing `M400 P123 Q456` will display `P word=123.000000` and `Q word set: "
"456.000000`"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:506
#, no-wrap
msgid "Example for positional parameter passing to NGC procedures"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:511
msgid "`REMAP=M410 modalgroup=10 argspec=@PQr ngc=m410`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:513
msgid "and `m410.ngc` looks as follows:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:520
#, no-wrap
msgid ""
"o<m410> sub\n"
"(debug, [1]=#1 [2]=#2 [3]=#3)\n"
"o<m410> endsub\n"
"M2\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:523
msgid ""
"executing `M410 P10` will display `m410.ngc: [1]=10.000000 [2]=0.000000`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:524
msgid ""
"executing `M410 P10 Q20` will display `m410.ngc: [1]=10.000000 [2]=20.000000`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:528
msgid ""
"you lose the capability to distinguish more than one optional parameter "
"word, and you cannot tell whether an optional parameter was present but had "
"the value 0, or was not present at all."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:529
#, no-wrap
msgid "Simple example for named parameter passing to a Python function"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:534
msgid ""
"It's possible to define new codes 'without' any NGC procedure. Here's a "
"simple first example, a more complex one can be found in the next section."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:538
msgid "`REMAP=G88.6 modalgroup=1 argspec=XYZp python=g886`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:542
msgid ""
"This instructs the interpreter to execute the Python function `g886` in the "
"`module_basename.remap` module which might look like so:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:547
#, no-wrap
msgid ""
"from interpreter import INTERP_OK\n"
"from emccanon import MESSAGE\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:555
#, no-wrap
msgid ""
"def g886(self, **words):\n"
"    for key in words:\n"
"        MESSAGE(\"word '%s' = %f\" % (key, words[key]))\n"
"    if words.has_key('p'):\n"
"        MESSAGE(\"the P word was present\")\n"
"    MESSAGE(\"comment on this line: '%s'\" % (self.blocks[self.remap_level].comment))\n"
"    return INTERP_OK\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:560
#, no-wrap
msgid ""
"Try this with out with:\n"
"  g88.6 x1 y2 z3\n"
"  g88.6 x1 y2 z3 p33 (a comment here)\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:566
msgid ""
"You'll notice the gradual introduction of the embedded Python environment - "
"see <<remap:programming-embedded-python,here>> for details.  Note that with "
"Python remapping functions, it make no sense to have Python prolog or epilog "
"functions since it's executing a Python function in the first place."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:567
#, no-wrap
msgid "Advanced example: Remapped codes in pure Python"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:572
msgid ""
"The `interpreter` and `emccanon` modules expose most of the Interpreter and "
"some Canon internals, so many things which so far required coding in 'C/C\\+"
"\\+' can be now be done in Python."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:576
msgid ""
"The following example is based on the `nc_files/involute.py` script - but "
"canned as a G-code with some parameter extraction and checking. It also "
"demonstrates calling the interpreter recursively (see `self.execute()`)."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:578
msgid "Assuming a definition like so (NB: this does not use argspec):"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:580
msgid "`REMAP=G88.1 modalgroup=1 py=involute`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:585
msgid ""
"The `involute` function in `python/remap.py` listed below does all word "
"extraction from the current block directly. Note that interpreter errors can "
"be translated to Python exceptions. Remember this is 'readahead time' - "
"execution time errors cannot be trapped this way."
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:591
#, no-wrap
msgid ""
"import sys\n"
"import traceback\n"
"from math import sin,cos\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:597
#, no-wrap
msgid ""
"from interpreter import *\n"
"from emccanon import MESSAGE\n"
"from util import lineno, call_pydevd\n"
"# raises InterpreterException if execute() or read() fails\n"
"throw_exceptions = 1\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:600
#, no-wrap
msgid ""
"def involute(self, **words):\n"
"    \"\"\" remap function with raw access to Interpreter internals \"\"\"\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:602
#, no-wrap
msgid "    if self.debugmask & 0x20000000: call_pydevd() # USER2 debug flag\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:605
#, no-wrap
msgid ""
"    if equal(self.feed_rate,0.0):\n"
"        return \"feedrate > 0 required\"\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:608
#, no-wrap
msgid ""
"    if equal(self.speed,0.0):\n"
"        return \"spindle speed > 0 required\"\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:610
#, no-wrap
msgid "    plunge = 0.1 # if Z word was given, plunge - with reduced feed\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:617
#, no-wrap
msgid ""
"    # inspect controlling block for relevant words\n"
"    c = self.blocks[self.remap_level]\n"
"    x0 = c.x_number if c.x_flag else 0\n"
"    y0 = c.y_number if c.y_flag else 0\n"
"    a  = c.p_number if c.p_flag else 10\n"
"    old_z = self.current_z\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:620
#, no-wrap
msgid ""
"    if self.debugmask & 0x10000000:\n"
"        print(\"x0=%f y0=%f a=%f old_z=%f\" % (x0,y0,a,old_z))\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:626
#, no-wrap
msgid ""
"    try:\n"
"        #self.execute(\"G3456\")  # would raise InterpreterException\n"
"        self.execute(\"G21\",lineno())\n"
"        self.execute(\"G64 P0.001\",lineno())\n"
"        self.execute(\"G0 X%f Y%f\" % (x0,y0),lineno())\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:631
#, no-wrap
msgid ""
"        if c.z_flag:\n"
"            feed = self.feed_rate\n"
"            self.execute(\"F%f G1 Z%f\" % (feed * plunge, c.z_number),lineno())\n"
"            self.execute(\"F%f\" % (feed),lineno())\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:637
#, no-wrap
msgid ""
"        for i in range(100):\n"
"            t = i/10.\n"
"            x = x0 + a * (cos(t) + t * sin(t))\n"
"            y = y0 + a * (sin(t) - t * cos(t))\n"
"            self.execute(\"G1 X%f Y%f\" % (x,y),lineno())\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:640
#, no-wrap
msgid ""
"        if c.z_flag: # retract to starting height\n"
"            self.execute(\"G0 Z%f\" % (old_z),lineno())\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:644
#, no-wrap
msgid ""
"    except InterpreterException,e:\n"
"        msg = \"%d: '%s' - %s\" % (e.line_number,e.line_text, e.error_message)\n"
"  return msg\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:646
#, no-wrap
msgid "    return INTERP_OK\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:651
msgid ""
"The examples described so far can be found in 'configs/sim/axis/remap/"
"getting-started' with complete working configurations."
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:653
#, no-wrap
msgid "Upgrading an existing configuration for remapping"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:656
msgid "The minimal prerequisites for using `REMAP` statements are as follows:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:659
msgid ""
"the Python plug in must be activated by specifying a `[PYTHON]TOPLEVEL=<path-"
"to-toplevel-script>` in the INI file."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:661
msgid ""
"the toplevel script needs to import the `remap` module, which can be "
"initially empty, but the import needs to be in place."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:664
msgid ""
"The Python interpreter needs to find the remap.py module above, so the path "
"to the directory where your Python modules live needs to be added with "
"`[PYTHON]PATH_APPEND=<path-to-your-local-Python-directory>`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:669
msgid ""
"Recommended: import the `stdglue` handlers in the `remap` module. In this "
"case Python also needs to find `stdglue.py` - we just copy it from the "
"distribution so you can make local changes as needed. Depending on your "
"installation the path to `stdglue.py` might vary."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:672
msgid ""
"Assuming your configuration lives under `/home/user/xxx` and the INI file is "
"`/home/user/xxx/xxx.ini`, execute the following commands."
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:681
#, no-wrap
msgid ""
"$ cd /home/user/xxx\n"
"$ mkdir python\n"
"$ cd python\n"
"$ cp /usr/share/linuxcnc/ncfiles/remap_lib/python-stdglue/stdglue.py .\n"
"$ echo 'from stdglue import *' >remap.py\n"
"$ echo 'import remap' >toplevel.py\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:684
msgid "Now edit `/home/user/xxx/xxx.ini` and add the following:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:690
#, no-wrap
msgid ""
"[PYTHON]\n"
"TOPLEVEL=/home/user/xxx/python/toplevel.py\n"
"PATH_APPEND=/home/user/xxx/python\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:694
msgid ""
"Now verify that LinuxCNC comes up with no error messages - from a terminal "
"window execute:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:699
#, no-wrap
msgid ""
"$ cd /home/user/xxx\n"
"$ linuxcnc xxx.ini\n"
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:701
#, no-wrap
msgid "Remapping tool change-related codes: T, M6, M61"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:708
msgid ""
"If you are unfamiliar with LinuxCNC internals, first read the <<remap:how-"
"tool-change-currently-works,How tool change currently works>> section (dire "
"but necessary)."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:712
msgid ""
"Note than when remapping an existing code, we completely disable <<remap:"
"interpreter-action-on-m6,this codes' built in functionality>> of the "
"interpreter."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:717
msgid ""
"So our remapped code will need to do a bit more than just generating some "
"commands to move the machine as we like - it will also need to replicate "
"those steps from this sequence which are needed to keep the interpreter and "
"`task` happy."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:722
msgid ""
"However, this does *not* affect the processing of tool change-related "
"commands in `task` and `iocontrol`. This means when we execute <<remap:send-"
"tool-load-msg,step 6b>> this will still cause <<remap:iocontrol-action-on-"
"load,iocontrol to do its thing>>."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:724
msgid "Decisions, decisions:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:726
msgid "Do we want to use an O-word procedure or do it all in Python code?"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:730
msgid ""
"Is the `iocontrol` HAL sequence (tool-prepare/tool-prepared and tool-change/"
"tool-changed pins) good enough or do we need a different kind of HAL "
"interaction for our tool changer (for example: more HAL pins involved with a "
"different interaction sequence)?"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:732
msgid "Depending on the answer, we have four different scenarios:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:734
msgid "When using an O-word procedure, we need prolog and epilog functions"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:736
msgid ""
"if using all Python code and no O-word procedure, a Python function is enough"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:738
msgid ""
"when using the `iocontrol` pins, our O-word procedure or Python code will "
"contain mostly moves"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:742
msgid ""
"when we need a more complex interaction than offered by `iocontrol`, we need "
"to completely define our own interaction, using `motion.digital*` and "
"`motion.analog*` pins, and essentially ignore the `iocontrol` pins by "
"looping them."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:748
msgid ""
"If you hate O-word procedures and love Python, you're free to do it all in "
"Python, in which case you would just have a `python=_<function>_` spec in "
"the REMAP statement. But assuming most folks would be interested in using O-"
"word procedures because they are more familiar with that, we'll do that as "
"the first example."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:750
msgid "So the overall approach for our first example will be:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:755
msgid ""
"We'd like to do as much as possible with G-code in an O-word procedure for "
"flexibility. That includes all HAL interaction which would normally be "
"handled by `iocontrol` - because we rather would want to do clever things "
"with moves, probes, HAL pin I/O and so forth."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:759
msgid ""
"We'll try to minimize Python code to the extent needed to keep the "
"interpreter happy, and cause `task` to actually do anything. That will go "
"into the `prolog` and `epilog` Python functions."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:760
#, no-wrap
msgid "Understanding the role of `iocontrol` with remapped tool change codes"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:764
msgid ""
"`iocontrol` provides two HAL interaction sequences we might or might not use:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:769
msgid ""
"When the NML message queued by a SELECT_TOOL() canon command is executed, "
"this triggers the \"raise tool-prepare and wait for tool-prepared to become "
"high\" HAL sequence in `iocontrol`, besides setting the XXXX pins"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:773
msgid ""
"When the NML message queued by the CHANGE_TOOL() canon command is executed, "
"this triggers the \"raise tool-change and wait for tool-changed to become "
"high\" HAL sequence in `iocontrol`, besides setting the XXXX pins"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:779
msgid ""
"What you need to decide is whether the existing `iocontrol` HAL sequences "
"are sufficient to drive your changer. Maybe you need a different interaction "
"sequence - for instance more HAL pins, or maybe a more complex interaction. "
"Depending on the answer, we might continue to use the existing `iocontrol` "
"HAL sequences, or define our own ones."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:784
msgid ""
"For the sake of documentation, we'll disable these `iocontrol` sequences, "
"and roll our own - the result will look and feel like the existing "
"interaction, but now we have complete control over them because they are "
"executed in our own O-word procedure."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:793
msgid ""
"So what we'll do is use some `motion.digital-*` and `motion.analog-*` pins, "
"and the associated `M62` .. `M68` commands to do our own HAL interaction in "
"our O-word procedure, and those will effectively replace the `iocontrol` "
"'tool-prepare/tool-prepared' and 'tool-change/tool-changed' sequences. So "
"we'll define our pins replacing existing `iocontrol` pins functionally, and "
"go ahead and make the `iocontrol` interactions a loop. We'll use the "
"following correspondence in our example:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:795
msgid "`iocontrol` pin correspondence in the examples"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:800
#, no-wrap
msgid "iocontrol.0 pin"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:801
#, no-wrap
msgid "motion pin"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:801
#, no-wrap
msgid "tool-prepar"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:802
#, no-wrap
msgid "digital-out-00"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:802
#, no-wrap
msgid "tool-prepare"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:803
#, no-wrap
msgid "digital-in-00"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:803
#, no-wrap
msgid "tool-chang"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:804
#, no-wrap
msgid "digital-out-01"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:804
#, no-wrap
msgid "tool-change"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:805
#, no-wrap
msgid "digital-in-01"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:805
#, no-wrap
msgid "tool-prep-number"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:806
#, no-wrap
msgid "analog-out-00"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:806
#, no-wrap
msgid "tool-prep-pocket"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:807
#, no-wrap
msgid "analog-out-01"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:807
#, no-wrap
msgid "tool-number"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:808
#, no-wrap
msgid "analog-out-02"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:813
msgid ""
"Let us assume you want to redefine the M6 command, and replace it by an O-"
"word procedure, but other than that things 'should continue to work'."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:819
msgid ""
"So what our O-word procedure would do is to replace the steps <<remap:"
"interpreter-action-on-m6,outlined here>>. Looking through these steps you'll "
"find that NGC code can be used for most of them, but not all. So the stuff "
"NGC can't handle will be done in Python prolog and epilog functions."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:820
#, no-wrap
msgid "Specifying the M6 replacement"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:825
msgid ""
"To convey the idea, we just replace the built in M6 semantics with our own. "
"Once that works, you may go ahead and place any actions you see fit into the "
"O-word procedure."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:827
msgid "Going through the <<remap:interpreter-action-on-m6,steps>>, we find:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:829
msgid "check for T command already executed - *execute in Python prolog*"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:830
msgid "check for cutter compensation being active - *execute in Python prolog*"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:831
msgid "stop the spindle if needed - *can be done in NGC*"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:832
msgid "quill up - *can be done in NGC*"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:833 src/remap/remap.adoc:2651
msgid "if TOOL_CHANGE_AT_G30 was set:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:834
msgid "move the A, B and C indexers if applicable - *can be done in NGC*"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:835
msgid "generate rapid move to the G30 position - *can be done in NGC*"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:836
msgid "send a CHANGE_TOOL Canon command to `task` - *execute in Python epilog*"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:837
msgid ""
"set the numberer parameters 5400-5413 according to the new tool - *execute "
"in Python epilog*"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:839
msgid ""
"signal to `task` to stop calling the interpreter for readahead until tool "
"change complete - *execute in Python epilog*"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:841
msgid ""
"So we need a prolog, and an epilog. Lets assume our INI file incantation of "
"the M6 remap looks as follows:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:844
#, no-wrap
msgid "REMAP=M6   modalgroup=6  prolog=change_prolog ngc=change epilog=change_epilog\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:851
msgid ""
"So the prolog covering steps 1 and 2 would look like so - we decide to pass "
"a few variables to the remap procedure which can be inspected and changed "
"there, or used in a message. Those are: `tool_in_spindle`, `selected_tool` "
"(tool numbers) and their respective tooldata indices `current_pocket` and "
"`selected_pocket`:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:856
msgid ""
"The legacy names *selected_pocket* and *current_pocket* actually reference a "
"sequential tooldata index for tool items loaded from a tool table "
"([EMCIO]TOOL_TABLE) or via a tooldata database ([EMCIO]DB_PROGRAM)"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:863
#, no-wrap
msgid ""
"def change_prolog(self, **words):\n"
"    try:\n"
"        if self.selected_pocket < 0:\n"
"            return \"M6: no tool prepared\"\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:866
#, no-wrap
msgid ""
"        if self.cutter_comp_side:\n"
"            return \"Cannot change tools with cutter radius compensation on\"\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:874
#, no-wrap
msgid ""
"        self.params[\"tool_in_spindle\"] = self.current_tool\n"
"        self.params[\"selected_tool\"] = self.selected_tool\n"
"        self.params[\"current_pocket\"] = self.current_pocket\n"
"        self.params[\"selected_pocket\"] = self.selected_pocket\n"
"        return INTERP_OK\n"
"    except Exception, e:\n"
"        return \"M6/change_prolog: %s\" % (e)\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:881
msgid ""
"You will find that most prolog functions look very similar: first test that "
"all preconditions for executing the code hold, then prepare the environment "
"- inject variables and/or do any preparatory processing steps which cannot "
"easily be done in NGC code; then hand off to the NGC procedure by returning "
"INTERP_OK."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:887
msgid ""
"Our first iteration of the O-word procedure is unexciting - just verify we "
"got parameters right, and signal success by returning a positive value; "
"steps 3-5 would eventually be covered here (see <<gcode:ini-hal-params,"
"here>> for the variables referring to INI file settings):"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:899
#, no-wrap
msgid ""
"O<change> sub\n"
"(debug, change: current_tool=#<current_tool>)\n"
"(debug, change: selected_pocket=#<selected_pocket>)\n"
";\n"
"; insert any G-code which you see fit here, eg:\n"
"; G0  #<_ini[setup]tc_x>  #<_ini[setup]tc_y>  #<_ini[setup]tc_z>\n"
";\n"
"O<change> endsub [1]\n"
"m2\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:902
msgid "Assuming success of `change.ngc`, we need to mop up steps 6-8:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:917
#, no-wrap
msgid ""
"def change_epilog(self, **words):\n"
"    try:\n"
"        if self.return_value > 0.0:\n"
"            # commit change\n"
"            self.selected_pocket =  int(self.params[\"selected_pocket\"])\n"
"            emccanon.CHANGE_TOOL(self.selected_pocket)\n"
"            # cause a sync()\n"
"            self.tool_change_flag = True\n"
"            self.set_tool_parameters()\n"
"            return INTERP_OK\n"
"        else:\n"
"            return \"M6 aborted (return code %.1f)\" % (self.return_value)\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:920
#, no-wrap
msgid ""
"    except Exception, e:\n"
"        return \"M6/change_epilog: %s\" % (e)\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:924
msgid ""
"This replacement M6 is compatible with the built in code, except steps 3-5 "
"need to be filled in with your NGC code."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:928
msgid ""
"Again, most epilogs have a common scheme: first, determine whether things "
"went right in the remap procedure, then do any commit and cleanup actions "
"which can't be done in NGC code."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:929
#, no-wrap
msgid "Configuring `iocontrol` with a remapped M6"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:937
msgid ""
"Note that the sequence of operations has changed: we do everything required "
"in the O-word procedure - including any HAL pin setting/reading to get a "
"changer going, and to acknowledge a tool change - likely with `motion."
"digital-*` and `motion-analog-*` IO pins. When we finally execute the "
"`CHANGE_TOOL()` command, all movements and HAL interactions are already "
"completed."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:942
msgid ""
"Normally only now `iocontrol` would do its thing as outlined <<remap:"
"iocontrol-action-on-load,here>>. However, we don't need the HAL pin wiggling "
"anymore - all `iocontrol` is left to do is to accept we're done with prepare "
"and change."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:946
msgid ""
"This means that the corresponding `iocontrol` pins have no function any "
"more. Therefore, we configure `iocontrol` to immediately acknowledge a "
"change by configuring like so:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:951
#, no-wrap
msgid ""
"# loop change signals when remapping M6\n"
"net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:954
msgid ""
"If you for some reason want to remap `T__x__` (prepare), the corresponding "
"`iocontrol` pins need to be looped as well."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:955
#, no-wrap
msgid "Writing the change and prepare O-word procedures"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:960
msgid ""
"The standard prologs and epilogs found in `ncfiles/remap_lib/python-stdglue/"
"stdglue.py` pass a few 'exposed parameters' to the remap procedure."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:967
msgid ""
"An 'exposed parameter' is a named local variable visible in a remap "
"procedure which corresponds to interpreter-internal variable which is "
"relevant for the current remap. Exposed parameters are set up in the "
"respective prolog, and inspected in the epilog. They can be changed in the "
"remap procedure and the change will be picked up in the epilog. The exposed "
"parameters for remappable built in codes are:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:969
msgid "`T` (prepare_prolog): `#__<tool>__` , `#__<pocket>__`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:970
msgid ""
"`M6` (change_prolog): `#__<tool_in_spindle>__`, `#__<selected_tool>__`, "
"`#__<current_pocket>__`, `#__<selected_pocket>__`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:971
msgid "`M61` (settool_prolog): `#__<tool>__` , `#__<pocket>__`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:972
msgid "`S` (setspeed_prolog): `#__<speed>__`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:973
msgid "`F` (setfeed_prolog): `#__<feed>__`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:977
msgid ""
"If you have specific needs for extra parameters to be made visible, that can "
"simply be added to the prolog - practically all of the interpreter internals "
"are visible to Python."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:978
#, no-wrap
msgid "Making minimal changes to the built in codes, including `M6`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:982
msgid ""
"Remember that normally remapping a code completely disables all internal "
"processing for that code."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:986
msgid ""
"However, in some situations it might be sufficient to add a few codes around "
"the existing `M6` built in implementation, like a tool length probe, but "
"other than that retain the behavior of the built in `M6`."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:995
msgid ""
"Since this might be a common scenario, the built in behavior of remapped "
"codes has been made available within the remap procedure. The interpreter "
"detects that you are referring to a remapped code within the procedure which "
"is supposed to redefine its behavior. In this case, the built in behavior is "
"used - this currently is enabled for the set: `M6`, `M61`,`T`, `S`, `F`. "
"Note that otherwise referring to a code within its own remap procedure would "
"be a error - a `remapping recursion`."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:997
msgid "Slightly twisting a built in would look like so (in the case of `M6`):"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1000
#, no-wrap
msgid "REMAP=M6   modalgroup=6  ngc=mychange\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1009
#, no-wrap
msgid ""
"o<mychange> sub\n"
"M6 (use built in M6 behavior)\n"
"(.. move to tool length switch, probe and set tool length..)\n"
"o<mychange> endsub\n"
"m2\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1014
msgid ""
"when redefining a built in code, *do not specify any leading zeroes in G- or "
"M-codes* - for example, say `REMAP=M1 ..`, not `REMAP=M01 ...`."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1018
msgid ""
"See the `configs/sim/axis/remap/extend-builtins` directory for a complete "
"configuration which is the recommended starting point for own work when "
"extending built in codes."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1019
#, no-wrap
msgid "Specifying the T (prepare) replacement"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1025
msgid ""
"If you're confident with the <<remap:interpreter-action-on-t,default "
"implementation>>, you wouldn't need to do this. But remapping is also a way "
"to work around deficiencies in the current implementation, for instance to "
"not block until the \"tool-prepared\" pin is set."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1027
msgid "What you could do, for instance, is:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1029
msgid ""
"in a remapped T, just set the equivalent of the \"tool-prepare\" pin, but "
"*not* wait for \"tool-prepared\" here"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1031
msgid ""
"in the corresponding remapped M6, wait for the \"tool-prepared\" at the very "
"beginning of the O-word procedure."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1034
msgid ""
"Again, the `iocontrol` tool-prepare/tool-prepared pins would be unused and "
"replaced by `motion.*` pins, so those would pins must be looped:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1039
#, no-wrap
msgid ""
"# loop prepare signals when remapping T\n"
"net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1042
msgid "So, here's the setup for a remapped T:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1045
#, no-wrap
msgid "REMAP=T  prolog=prepare_prolog epilog=prepare_epilog ngc=prepare\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1054
#, no-wrap
msgid ""
"def prepare_prolog(self,**words):\n"
"    try:\n"
"        cblock = self.blocks[self.remap_level]\n"
"        if not cblock.t_flag:\n"
"            return \"T requires a tool number\"\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1062
#, no-wrap
msgid ""
"        tool  = cblock.t_number\n"
"        if tool:\n"
"            (status, pocket) = self.find_tool_pocket(tool)\n"
"            if status != INTERP_OK:\n"
"                return \"T%d: pocket not found\" % (tool)\n"
"        else:\n"
"            pocket = -1 # this is a T0 - tool unload\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1069
#, no-wrap
msgid ""
"        # these variables will be visible in the ngc O-word sub\n"
"        # as #<tool> and #<pocket> local variables, and can be\n"
"        # modified there - the epilog will retrieve the changed\n"
"        # values\n"
"        self.params[\"tool\"] = tool\n"
"        self.params[\"pocket\"] = pocket\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1073
#, no-wrap
msgid ""
"        return INTERP_OK\n"
"    except Exception, e:\n"
"        return \"T%d/prepare_prolog: %s\" % (int(words['t']), e)\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1077
msgid "The minimal ngc prepare procedure again looks like so:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1084
#, no-wrap
msgid ""
"o<prepare> sub\n"
"; returning a positive value to commit:\n"
"o<prepare> endsub [1]\n"
"m2\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1087
msgid "And the epilog:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1099
#, no-wrap
msgid ""
"def prepare_epilog(self, **words):\n"
"    try:\n"
"        if self.return_value > 0:\n"
"            self.selected_tool = int(self.params[\"tool\"])\n"
"            self.selected_pocket = int(self.params[\"pocket\"])\n"
"            emccanon.SELECT_TOOL(self.selected_tool)\n"
"            return INTERP_OK\n"
"        else:\n"
"            return \"T%d: aborted (return code %.1f)\" % (int(self.params[\"tool\"]),self.return_value)\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1102
#, no-wrap
msgid ""
"    except Exception, e:\n"
"        return \"T%d/prepare_epilog: %s\" % (tool,e)\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1109
msgid ""
"prepare_prolog and prepare_epilog are part of the 'standard glue' provided "
"by 'nc_files/remap_lib/python-stdglue/stdglue.py'.  This module is intended "
"to cover most standard remapping situations in a common way."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1110
#, no-wrap
msgid "Error handling: dealing with abort"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1122
msgid ""
"The built in tool change procedure has some precautions for dealing with a "
"program abort (e.g. hitting Escape in Axis during a change). Your remapped "
"function has none of this, therefore some explicit cleanup might be needed "
"if a remapped code is aborted. In particular, a remap procedure might "
"establish modal settings which are undesirable to have active after an "
"abort. For instance, if your remap procedure has motion codes (G0,G1,G38..) "
"and the remap is aborted, then the last modal code will remain active. "
"However, you very likely want to have any modal motion canceled when the "
"remap is aborted."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1129
msgid ""
"The way to do this is by using the `[RS274NGC]ON_ABORT_COMMAND` feature. "
"This INI option specifies a O-word procedure call which is executed if "
"`task` for some reason aborts program execution.  `on_abort` receives a "
"single parameter indicating the cause for calling the abort procedure, which "
"might be used for conditional cleanup."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1131
msgid "The reasons are defined in nml_intf/emc.hh"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1145
#, no-wrap
msgid ""
"EMC_ABORT_TASK_EXEC_ERROR = 1,\n"
"EMC_ABORT_AUX_ESTOP = 2,\n"
"EMC_ABORT_MOTION_OR_IO_RCS_ERROR = 3,\n"
"EMC_ABORT_TASK_STATE_OFF = 4,\n"
"EMC_ABORT_TASK_STATE_ESTOP_RESET = 5,\n"
"EMC_ABORT_TASK_STATE_ESTOP = 6,\n"
"EMC_ABORT_TASK_STATE_NOT_ON = 7,\n"
"EMC_ABORT_TASK_ABORT = 8,\n"
"EMC_ABORT_INTERPRETER_ERROR = 9,\t// interpreter failed during readahead\n"
"EMC_ABORT_INTERPRETER_ERROR_MDI = 10,\t// interpreter failed during MDI execution\n"
"EMC_ABORT_USER = 100  // user-defined abort codes start here\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1152
#, no-wrap
msgid ""
"[RS274NGC]\n"
"ON_ABORT_COMMAND=O <on_abort> call\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1156
msgid ""
"The suggested on_abort procedure would look like so (adapt to your needs):"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1170
#, no-wrap
msgid ""
"G54 (origin offsets are set to the default)\n"
"G17 (select XY plane)\n"
"G90 (absolute)\n"
"G94 (feed mode: units/minute)\n"
"M48 (set feed and speed overrides)\n"
"G40 (cutter compensation off)\n"
"M5  (spindle off)\n"
"G80 (cancel modal motion)\n"
"M9  (mist and coolant off)\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1182
#, no-wrap
msgid ""
"o100 if [#1 eq 5]\n"
"    (machine on)\n"
"o100 elseif [#1 eq 6]\n"
"    (machine off)\n"
"o100 elseif [#1 eq 7]\n"
"    (estopped)\n"
"o100 elseif [#1 eq 8]\n"
"    (msg, abort pressed)\n"
"o100 else\n"
"    (DEBUG, error parameter is [#1])\n"
"o100 endif\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1191
msgid ""
"Never use an `M2` in a O-word subroutine, including this one. It will cause "
"hard-to-find errors. For instance, using an `M2` in a subroutine will not "
"end the subroutine properly and will leave the subroutine NGC file open, not "
"your main program."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1195
msgid ""
"Make sure `on_abort.ngc` is along the interpreter search path (recommended "
"location: `SUBROUTINE_PATH` so as not to clutter your `NC_FILES` directory "
"with internal procedures)."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1199
msgid ""
"Statements in that procedure typically would assure that post-abort any "
"state has been cleaned up, like HAL pins properly reset. For an example, see "
"`configs/sim/axis/remap/rack-toolchange`."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1203
msgid ""
"Note that terminating a remapped code by returning INTERP_ERROR from the "
"epilog (see previous section) will also cause the `on_abort` procedure to be "
"called."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1204
#, no-wrap
msgid "Error handling: failing a remapped code NGC procedure"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1208
msgid ""
"If you determine in your handler procedure that some error condition "
"occurred, do not use `M2` to end your handler - see above:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1214
msgid ""
"If displaying an operator error message and stopping the current program is "
"good enough, use the `(abort, <message>)` feature to terminate the handler "
"with an error message. Note that you can substitute numbered, named, INI and "
"HAL parameters in the text like in this example (see also `tests/interp/"
"abort-hot-comment/test.ngc`):"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1220
#, no-wrap
msgid ""
"o100 if [..] (some error condition)\n"
"     (abort, Bad Things! p42=#42 q=#<q> INI=#<_ini[a]x> pin=#<_hal[component.pin])\n"
"o100 endif\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1224
msgid ""
"INI and HAL variable expansion is optional and can be disabled in the <<sub:"
"ini:sec:rs274ngc,INI file>>"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1227
msgid ""
"If more fine grained recovery action is needed, use the idiom laid out in "
"the previous example:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1230
msgid ""
"define an epilog function, even if it's just to signal an error condition"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1232
msgid "pass a negative value from the handler to signal the error"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1233
msgid "inspect the return value in the epilog function."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1234
msgid "take any recovery action needed"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1237
msgid ""
"return the error message string from the handler, which will set the "
"interpreter error message and abort the program (pretty much like `abort, "
"message=`)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1240
msgid ""
"This error message will be displayed in the UI, and returning INTERP_ERROR "
"will cause this error handled like any other runtime error."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1244
msgid ""
"Note that both `(abort, msg)` and returning INTERP_ERROR from an epilog will "
"cause any ON_ABORT handler to be called as well if defined (see previous "
"section)."
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:1245
#, no-wrap
msgid "Remapping other existing codes: S, M0, M1, M60"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1247
#, no-wrap
msgid "Automatic gear selection be remapping  S (set spindle speed)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1253
msgid ""
"A potential use for a remapped S code would be 'automatic gear selection' "
"depending on speed. In the remap procedure one would test for the desired "
"speed attainable given the current gear setting, and change gears "
"appropriately if not."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1254
#, no-wrap
msgid "Adjusting the behavior of M0, M1, M60"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1260
msgid ""
"A use case for remapping M0/M1 would be to customize the behavior of the "
"existing code. For instance, it could be desirable to turn off the spindle, "
"mist and flood during an M0 or M1 program pause, and turn these settings "
"back on when the program is resumed."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1263
msgid ""
"For a complete example doing just that, see 'configs/sim/axis/remap/extend-"
"builtins/', which adapts M1 as laid out above."
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:1264
#, no-wrap
msgid "Creating new G-code cycles"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1267
msgid "A G-code cycle as used here is meant to behave as follows:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1270
msgid ""
"On first invocation, the associated words are collected and the G-code cycle "
"is executed."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1273
msgid ""
"If subsequent lines just continue parameter words applicable to this code, "
"but no new G-code, the previous G-code is re-executed with the parameters "
"changed accordingly."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1277
msgid ""
"An example: Assume you have `G84.3` defined as remapped G-code cycle with "
"the following INI segment (see <<remap:cycle-stdglue,here>> for a detailed "
"description of +cycle_prolog+ and +cycle_epilog+):"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1283
#, no-wrap
msgid ""
"[RS274NGC]\n"
"# A cycle with an O-word procedure: G84.3 <X- Y- Z- Q- P->\n"
"REMAP=G84.3 argspec=xyzabcuvwpr prolog=cycle_prolog ngc=g843 epilog=cycle_epilog modalgroup=1\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1286
msgid "Executing the following lines:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1294
#, no-wrap
msgid ""
"g17\n"
"(1)   g84.3 x1 y2 z3  r1\n"
"(2)   x3 y4 p2\n"
"(3)   x6 y7 z5\n"
"(4)   G80\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1297
msgid ""
"causes the following (note 'R' is sticky, and 'Z' is sticky since the plane "
"is 'XY'):"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1299
msgid "`g843.ngc` is called with words x=1, y=2, z=3, r=1"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1300
msgid "`g843.ngc` is called with words x=3, y=4, z=3, p=2, r=1"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1301
msgid "`g843.ngc` is called with words x=6, y=7, z=3, r=1"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1302
msgid "The `G84.3` cycle is canceled."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1308
msgid ""
"Besides creating new cycles, this provides an easy method for repackaging "
"existing G-codes which do not behave as cycles. For instance, the `G33.1` "
"Rigid Tapping code does not behave as a cycle. With such a wrapper, a new "
"code can be easily created which uses `G33.1` but behaves as a cycle."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1312
msgid ""
"See 'configs/sim/axis/remap/cycle' for a complete example of this feature. "
"It contains two cycles, one with an NGC procedure like above, and a cycle "
"example using just Python."
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:1314
#, no-wrap
msgid "Configuring  Embedded Python"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1318
msgid ""
"The Python plugin serves both the interpreter, and `task` if so configured, "
"and hence has its own section `PYTHON` in the INI file."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1319
#, no-wrap
msgid "Python plugin : INI file configuration"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1321
#, no-wrap
msgid "`[PYTHON]`"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1322
#, no-wrap
msgid "`TOPLEVEL =` <filename>"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1326
#, no-wrap
msgid ""
"filename of the initial Python script to execute on\n"
"startup. This script is responsible for setting up the package\n"
"name structure, see below.\n"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1326
#, no-wrap
msgid "`PATH_PREPEND =` <directory>"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1329
#, no-wrap
msgid ""
"prepend this directory to `PYTHON_PATH`. A repeating\n"
"group.\n"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1329
#, no-wrap
msgid "`PATH_APPEND =`<directory>"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1332
#, no-wrap
msgid ""
"append this directory to `PYTHON_PATH`. A repeating\n"
"group.\n"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1332
#, no-wrap
msgid "`LOG_LEVEL =` <integer>"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1335
#, no-wrap
msgid ""
"log level of plugin-related actions. Increase this if you\n"
"suspect problems. Can be very verbose.\n"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1335
#, no-wrap
msgid "`RELOAD_ON_CHANGE =` [0|1]"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1339
#, no-wrap
msgid ""
"reload the 'TOPLEVEL' script if the file was changed. Handy\n"
"for debugging but currently incurs some runtime overhead. Turn\n"
"this off for production configurations.\n"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1339
#, no-wrap
msgid "`PYTHON_TASK =` [0|1]"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1341
#, no-wrap
msgid "Start the Python task plug in. Experimental. See xxx.\n"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1343
#, no-wrap
msgid "Executing Python statements from the interpreter"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1349
msgid ""
"For ad-hoc execution of commands the Python 'hot comment' has been added. "
"Python output by default goes to stdout, so you need to start LinuxCNC from "
"a terminal window to see results. Example (eg. in the MDI window):"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1352
#, no-wrap
msgid ";py,print(2*3)\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1356
msgid ""
"Note that the interpreter instance is available here as `self`, so you could "
"also run:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1359
#, no-wrap
msgid ";py,print(self.tool_table[0].toolno)\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1362
msgid "The `emcStatus` structure is accessible, too:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1366
#, no-wrap
msgid ""
";py,from emctask import *\n"
";py,print(emcstat.io.aux.estop)\n"
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:1369
#, no-wrap
msgid "Programming Embedded Python in the RS274NGC Interpreter"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1371
#, no-wrap
msgid "The Python plugin namespace"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1374
msgid "The namespace is expected to be laid out as follows:"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1375
#, no-wrap
msgid "`oword`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1381
msgid ""
"Any callables in this module are candidates for Python O-word procedures. "
"Note that the Python `oword` module is checked *before* testing for a NGC "
"procedure with the same name - in effect names in `oword` will hide NGC "
"files of the same basename."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1382
#, no-wrap
msgid "`remap`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1385
msgid ""
"Python callables referenced in an argspec `prolog`,`epilog` or `python` "
"option are expected to be found here."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1386
#, no-wrap
msgid "`namedparams`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1390
msgid ""
"Python funtcions int this module extend or redefine the namespace of "
"predefined named parameters, see <<remap:adding-predefined-named-parameters,"
"adding predefined parameters>>."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1391
#, no-wrap
msgid "`task`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1393
msgid "Task-related callables are expected here."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1394
#, no-wrap
msgid "The Interpreter as seen from Python"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1402
msgid ""
"The interpreter is an existing C++ class ('Interp') defined in 'src/emc/"
"rs274ngc'. Conceptually all `oword.<function>` and `remap.<function>` Python "
"calls are methods of this Interp class, although there is no explicit Python "
"definition of this class (it's a 'Boost.Python' wrapper instance) and hence "
"receive the as the first parameter `self` which can be used to access "
"internals."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1403
#, no-wrap
msgid "The Interpreter `__init__` and `__delete__` functions"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1408
msgid ""
"If the `TOPLEVEL` module defines a function `__init__`, it will be called "
"once the interpreter is fully configured (INI file read, and state "
"synchronized with the world model)."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1412
msgid ""
"If the `TOPLEVEL` module defines a function `__delete__`, it will be called "
"once before the interpreter is shutdown and after the persistent parameters "
"have been saved to the `PARAMETER_FILE`."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1417
msgid ""
"Note_ at this time, the `__delete__` handler does not work for interpreter "
"instances created by importing the `gcode` module. If you need an equivalent "
"functionality there (which is quite unlikely), please consider the Python "
"`atexit` module."
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1421
#, no-wrap
msgid "# this would be defined in the TOPLEVEL module\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1430
#, no-wrap
msgid ""
"def __init__(self):\n"
"    # add any one-time initialization here\n"
"    if self.task:\n"
"  # this is the milltask instance of interp\n"
"  pass\n"
"    else:\n"
"  # this is a non-milltask instance of interp\n"
"        pass\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1437
#, no-wrap
msgid ""
"def __delete__(self):\n"
"    # add any cleanup/state saving actions here\n"
"    if self.task: # as above\n"
"  pass\n"
"    else:\n"
"        pass\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1442
msgid ""
"This function may be used to initialize any Python-side attributes which "
"might be needed later, for instance in remap or oword functions, and save or "
"restore state beyond what `PARAMETER_FILE` provides."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1448
msgid ""
"If there are setup or cleanup actions which are to happen only in the "
"milltask Interpreter instance (as opposed to the interpreter instance which "
"sits in the `gcode` Python module and serves preview/progress display "
"purposes but nothing else), this can be tested for by <<remap:axis-preview-"
"and-remapped-code-execution,evaluating 'self.task'>>."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1453
msgid ""
"An example use of `__init__` and `__delete__` can be found in 'configs/sim/"
"axis/remap/cycle/python/toplevel.py' initialising attributes needed to "
"handle cycles in 'ncfiles/remap_lib/python-stdglue/stdglue.py' (and imported "
"into 'configs/sim/axis/remap/cycle/python/remap.py')."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1454
#, no-wrap
msgid "Calling conventions: NGC to Python"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1457
msgid "Python code is called from NGC in the following situations:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1459
msgid "during normal program execution:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1461
msgid ""
"when an O-word call like `O<proc> call` is executed and the name `oword."
"proc` is defined and callable"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1462
msgid "when a comment like `;py,<Python statement>` is executed"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1464
msgid ""
"during execution of a remapped code: any `prolog=`, `python=` and `epilog=` "
"handlers."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1466
#, no-wrap
msgid "Calling O-word Python subroutines"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1469
msgid "Arguments:"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1470 src/remap/remap.adoc:1514
#: src/remap/remap.adoc:1553
#, no-wrap
msgid "`self`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1472 src/remap/remap.adoc:1516
#: src/remap/remap.adoc:1555
msgid "the interpreter instance"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1473
#, no-wrap
msgid "`*args`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1476
msgid ""
"the list of actual positional parameters. Since the number of actual "
"parameters may vary, it is best to use this style of declaration:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1484
#, no-wrap
msgid ""
"# this would be defined in the oword module\n"
"def mysub(self, *args):\n"
"    print(\"number of parameters passed:\", len(args))\n"
"    for a in args:\n"
"  print(a)\n"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1486
#, no-wrap
msgid "Return values of O-word Python subroutines"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1489
msgid ""
"Just as NGC procedures may return values, so do O-word Python subroutines. "
"They are expected to either return"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1491
msgid "no value (no `return` statement or the value `None`),"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1492
msgid "a float or int value,"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1493
msgid ""
"a string, this means 'this is an error message, abort the program'. Works "
"like `(abort, msg)`."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1495
msgid "Any other return value type will raise a Python exception."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1498
msgid ""
"In a calling NGC environment, the following predefined named parameters are "
"available:"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1499
#, no-wrap
msgid "`#__<_value>__`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1502
msgid ""
"value returned by the last procedure called. Initialized to 0.0 on startup. "
"Exposed in Interp as `self.return_value` (float)."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1503
#, no-wrap
msgid "`#__<_value_returned>__`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1507
msgid ""
"indicates the last procedure called did `return`or `endsub` with an explicit "
"value. 1.0 if true. Set to 0.0 on each `call`. Exposed in Interp was `self."
"value_returned` (int)."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1509
msgid "See also `tests/interp/value-returned` for an example."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1510
#, no-wrap
msgid "Calling conventions for 'prolog=' and 'epilog=' subroutines"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1513 src/remap/remap.adoc:1552
msgid "Arguments are:"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1517 src/remap/remap.adoc:1556
#, no-wrap
msgid "`words`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1526
msgid ""
"keyword parameter dictionary. If an argspec was present, words are collected "
"from the current block accordingly and passed in the dictionary for "
"convenience (the words could as well be retrieved directly from the calling "
"block, but this requires more knowledge of interpreter internals). If no "
"argspec was passed, or only optional values were specified and none of these "
"was present in the calling block, this dict is empty. Word names are "
"converted to lowercase."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1528
msgid "Example call:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1538
#, no-wrap
msgid ""
"def minimal_prolog(self, **words): # in remap module\n"
"    print(len(words),\" words passed\")\n"
"    for w in words:\n"
"        print(\"%s: %s\" % (w, words[w]))\n"
"    if words['p'] < 78: # NB: could raise an exception if p were optional\n"
"       return \"failing miserably\"\n"
"    return INTERP_OK\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1541 src/remap/remap.adoc:1569
msgid "Return values:"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1542 src/remap/remap.adoc:1570
#, no-wrap
msgid "`INTERP_OK`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1544
msgid "return this on success. You need to import this from `interpreter`."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1545 src/remap/remap.adoc:1573
#, no-wrap
msgid "`\"a message text\"`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1548 src/remap/remap.adoc:1576
msgid ""
"returning a string from a handler means 'this is an error message, abort the "
"program'. Works like `(abort, msg)`."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1549
#, no-wrap
msgid "Calling conventions for 'python=' subroutines"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1559
msgid ""
"keyword parameter dictionary. the same kwargs dictionary as prologs and "
"epilogs (see above)."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1561
msgid "The minimum `python=` function example:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1566
#, no-wrap
msgid ""
"def useless(self,  **words): # in remap module\n"
"    return INTERP_OK\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1572
msgid "return this on success"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1580
msgid ""
"If the handler needs to execute a 'queuebuster operation' (tool change, "
"probe, HAL pin reading) it is supposed to suspend execution with the "
"following statement:"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1581
#, no-wrap
msgid "`yield INTERP_EXECUTE_FINISH`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1587
msgid ""
"This signals `task` to stop read ahead, execute all queued operations, "
"execute the 'queue-buster' operation, synchronize interpreter state with "
"machine state, and then signal the interpreter to continue. At this point "
"the function is resumed at the statement following the `yield ..` statement."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1588
#, no-wrap
msgid "Dealing with queue-buster: Probe, Tool change and waiting for a HAL pin"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1595
msgid ""
"Queue busters interrupt a procedure at the point where such an operation is "
"called, hence the procedure needs to be restarted after the interpreter "
"synch(). When this happens the procedure needs to know if it is restarted, "
"and where to continue. The Python generator method is used to deal with "
"procedure restart."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1597
msgid "This demonstrates call continuation with a single point-of-restart:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1608
#, no-wrap
msgid ""
"def read_pin(self,*args):\n"
"    # wait 5secs for digital-input 00 to go high\n"
"    emccanon.WAIT(0,1,2,5.0)\n"
"    # cede control after executing the queue buster:\n"
"    yield INTERP_EXECUTE_FINISH\n"
"    # post-sync() execution resumes here:\n"
"    pin_status = emccanon.GET_EXTERNAL_DIGITAL_INPUT(0,0);\n"
"    print(\"pin status=\",pin_status)\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1612
msgid ""
"The 'yield' feature is fragile. The following restrictions apply to the "
"usage of 'yield INTERP_EXECUTE_FINISH':"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1615
msgid ""
"Python code executing a 'yield INTERP_EXECUTE_FINISH' must be part of a "
"remap procedure. Yield does not work in a Python oword procedure."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1617
msgid ""
"A Python remap subroutine containing 'yield INTERP_EXECUTE_FINISH' statement "
"may not return a value, as with normal Python yield statements."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1620
msgid ""
"Code following a yield may not recursively call the interpreter, like with "
"self.execute(\"<mdi command>\"). This is an architectural restriction of the "
"interpreter and is not fixable without a major redesign."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1621
#, no-wrap
msgid "Calling conventions: Python to NGC"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1624
msgid "NGC code is executed from Python when"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1626
msgid "the method `self.execute(<NGC code>[,<line number>])` is executed, or"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1629
msgid ""
"during execution of a remapped code, if a `prolog=` function is defined, the "
"NGC procedure given in `ngc=` is executed immediately thereafter."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1632
msgid ""
"The prolog handler does not call the handler, but it prepares its call "
"environment, for instance by setting up predefined local parameters."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1633
#, no-wrap
msgid "Inserting parameters in a prolog, and retrieving  them in an epilog"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1638
msgid ""
"Conceptually a prolog and an epilog execute at the same call level like the "
"O-word procedure, that is: after the subroutine call is set up, and before "
"the subroutine endsub or return."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1642
msgid ""
"This means that any local variable created in a prolog will be a local "
"variable in the O-word procedure, and any local variables created in the O-"
"word procedure are still accessible when the epilog executes."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1649
msgid ""
"The `self.params` array handles reading and setting numbered and named "
"parameters. If a named parameter begins with `_` (underscore), it is assumed "
"to be a global parameter; if not, it is local to the calling procedure. "
"Also, numbered parameters in the range 1..30 are treated like local "
"variables; their original values are restored on return/endsub from an O-"
"word procedure."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1652
msgid ""
"Here is an example remapped code demonstrating insertion and extraction of "
"parameters into/from the O-word procedure:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1655
#, no-wrap
msgid "REMAP=m300 prolog=insert_param ngc=testparam epilog=retrieve_param modalgroup=10\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1665
#, no-wrap
msgid ""
"def insert_param(self, **words): # in the remap module\n"
"    print(\"insert_param call level=\",self.call_level)\n"
"    self.params[\"myname\"] = 123\n"
"    self.params[1] = 345\n"
"    self.params[2] = 678\n"
"    return INTERP_OK\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1675
#, no-wrap
msgid ""
"def retrieve_param(self, **words):\n"
"    print(\"retrieve_param call level=\",self.call_level)\n"
"    print(\"#1=\", self.params[1])\n"
"    print(\"#2=\", self.params[2])\n"
"    try:\n"
"        print(\"result=\", self.params[\"result\"])\n"
"    except Exception,e:\n"
"  return \"testparam forgot to assign #<result>\"\n"
"    return INTERP_OK\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1687
#, no-wrap
msgid ""
"o<testparam> sub\n"
"(debug, call_level=#<_call_level> myname=#<myname>)\n"
"; try commenting out the next line and run again\n"
"#<result> = [#<myname> * 3]\n"
"#1 = [#1 * 5]\n"
"#2 = [#2 * 3]\n"
"o<testparam> endsub\n"
"m2\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1691
msgid ""
"`self.params()` returns a list of all variable names currently defined.  "
"Since `myname` is local, it goes away after the epilog finishes."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1692
#, no-wrap
msgid "Calling the interpreter from Python"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1695
msgid "You can recursively call the interpreter from Python code as follows:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1698
#, no-wrap
msgid "self.execute(<NGC code>[,<line number>])\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1706
#, no-wrap
msgid ""
"  self.execute(\"G1 X%f Y%f\" % (x,y))\n"
"  self.execute(\"O <myprocedure> call\", currentline)\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1711
msgid ""
"You might want to test for the return value being `< INTERP_MIN_ERROR`. If "
"you're using lots of execute() statements, it's probably easier to trap "
"InterpreterException as per below."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1717
msgid ""
"The parameter insertion/retrieval method described in the previous section "
"does not work in this case. It is good enough for just executing simple NGC "
"commands or a procedure call and advanced introspection into the procedure, "
"and passing of local named parameters is not needed. The recursive call "
"feature is fragile."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1718
#, no-wrap
msgid "Interpreter Exception during execute()"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1723
msgid ""
"if `interpreter.throw_exceptions` is nonzero (default 1), and self.execute() "
"returns an error, the exception `InterpreterException` is raised. "
"InterpreterException has the following attributes:"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1724
#, no-wrap
msgid "`line_number`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1726
msgid "where the error occurred"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1726
#, no-wrap
msgid "`line_text`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1728
msgid "the NGC statement causing the error"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1728
#, no-wrap
msgid "`error_message`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1730
msgid "the interpreter's error message"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1732
msgid "Errors can be trapped in the following Pythonic way:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1740
#, no-wrap
msgid ""
"import interpreter\n"
"interpreter.throw_exceptions = 1\n"
"   ...\n"
"   try:\n"
"        self.execute(\"G3456\")  #  raise InterpreterException\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1744
#, no-wrap
msgid ""
"   except InterpreterException,e:\n"
"        msg = \"%d: '%s' - %s\" % (e.line_number,e.line_text, e.error_message)\n"
"        return msg  # replace builtin error message\n"
msgstr ""

#.  NOTE: to iterate is human, to recurse: divine.
#. type: Block title
#: src/remap/remap.adoc:1748
#, no-wrap
msgid "Canon"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1752
msgid "The canon layer is practically all free functions.  Example:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1762
#, no-wrap
msgid ""
"import emccanon\n"
"def example(self,*args):\n"
"    ....\n"
"    emccanon.STRAIGHT_TRAVERSE(line,x0,y0,z0,0,0,0,0,0,0)\n"
"    emccanon.STRAIGHT_FEED(line,x1,y1,z1,0,0,0,0,0,0)\n"
"    ...\n"
"    return INTERP_OK\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1767
msgid ""
"The actual canon functions are declared in `src/emc/nml_intf/canon.hh` and "
"implemented in `src/emc/task/emccanon.cc`.  The implementation of the Python "
"functions can be found in `src/emc/rs274ncg/canonmodule.cc`."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1768
#, no-wrap
msgid "Built in modules"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1771
msgid "The following modules are built in:"
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1772
#, no-wrap
msgid "`interpreter`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1776
msgid ""
"exposes internals of the Interp class. See `src/emc/rs274ngc/interpmodule."
"cc`, and the `tests/remap/introspect` regression test."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1777
#, no-wrap
msgid "`emccanon`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1779
msgid "exposes most calls of `src/emc/task/emccanon.cc`."
msgstr ""

#. type: Labeled list
#: src/remap/remap.adoc:1780
#, no-wrap
msgid "`emctask`"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1784
msgid ""
"exposes the `emcStatus` class instance. See `src/emc/task/taskmodule.cc`.  "
"Not present when using the `gcode` module used for user interfaces - only "
"present in the milltask instance of the interpreter."
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:1786
#, no-wrap
msgid "Adding Predefined Named Parameters"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1791
msgid ""
"The interpreter comes with a set of predefined named parameters for "
"accessing internal state from the NGC language level. These parameters are "
"read-only and global, and hence cannot be assigned to."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1796
msgid ""
"Additional parameters may be added by defining a function in the "
"`namedparams` module. The name of the function defines the name of the new "
"predefined named parameter, which now can be referenced in arbitrary "
"expressions."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1798
msgid "To add or redefine a named parameter:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1800
msgid "add a `namedparams` module so it can be found by the interpreter"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1803
msgid ""
"define new parameters by functions (see below). These functions receive "
"`self` (the interpreter instance) as parameter and so can access arbitrary "
"state. Arbitrary Python capabilities can be used to return a value."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1804
msgid "import that module from the `TOPLEVEL` script"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1811
#, no-wrap
msgid ""
"# namedparams.py\n"
"# trivial example\n"
"def _pi(self):\n"
"    return 3.1415926535\n"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1816
#, no-wrap
msgid "#<circumference> = [2 * #<radius> * #<_pi>]\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1821
msgid ""
"Functions in `namedparams.py` are expected to return a float or int value. "
"If a string is returned, this sets the interpreter error message and aborts "
"execution."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1824
msgid ""
"Ònly functions with a leading underscore are added as parameters, since this "
"is the RS274NGC convention for globals."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1828
msgid ""
"It is possible to redefine an existing predefined parameter by adding a "
"Python function of the same name to the `namedparams` module. In this case, "
"a warning is generated during startup."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1833
msgid ""
"While the above example isn't terribly useful, note that pretty much all of "
"the interpreter internal state is accessible from Python, so arbitrary "
"predicates may be defined this way. For a slightly more advanced example, "
"see `tests/remap/predefined-named-params`."
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:1835
#, no-wrap
msgid "Standard Glue routines"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1842
msgid ""
"Since many remapping tasks are very similar, I've started collecting working "
"prolog and epilog routines in a single Python module. These can currently be "
"found in 'ncfiles/remap_lib/python-stdglue/stdglue.py' and provide the "
"following routines:"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1843
#, no-wrap
msgid "T: +prepare_prolog+ and +prepare_epilog+"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1846
msgid "These wrap a NGC procedure for Tx Tool Prepare."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1847
#, no-wrap
msgid "Actions of +prepare_prolog+"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1850
msgid "The following parameters are made visible to the NGC procedure:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1852
msgid "`#<tool>` - the parameter of the `T` word"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1853
msgid "`#<pocket>` - the corresponding pocket"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1856
msgid ""
"If tool number zero is requested (meaning Tool unload), the corresponding "
"pocket is passed as -1."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1860
msgid "no tool number is given as T parameter"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1861
msgid "the tool cannot be found in the tool table."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1865
msgid ""
"Note that unless you set the `[EMCIO] RANDOM_TOOLCHANGER=1` parameter, tool "
"and pocket number are identical, and the pocket number from the tool table "
"is ignored. This is currently a restriction."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1866
#, no-wrap
msgid "Actions of +prepare_epilog+"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1871 src/remap/remap.adoc:1910
msgid ""
"The NGC procedure is expected to return a positive value, otherwise and "
"error message containing the return value is given and the interpreter "
"aborts."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1875
msgid ""
"In case the NGC procedure executed the T command (which then refers to the "
"built in T behavior), no further action is taken. This can be used for "
"instance to minimally adjust the built in behavior be preceding or following "
"it with some other statements."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1879
msgid ""
"Otherwise, the `#<tool>` and `#<pocket>` parameters are extracted from the "
"subroutine's parameter space. This means that the NGC procedure could change "
"these values, and the epilog takes the changed values in account."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1880
msgid "then, the Canon command `SELECT_TOOL(#<tool>)` is executed."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1881
#, no-wrap
msgid "M6: +change_prolog+ and +change_epilog+"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1884
msgid "These wrap a NGC procedure for M6 Tool Change."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1885
#, no-wrap
msgid "Actions of +change_prolog+"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1888
msgid ""
"The following three steps are applicable only if the `iocontrol-v2` "
"component is used:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1890
msgid ""
"If parameter 5600 (fault indicator) is greater than zero, this indicates a "
"Toolchanger fault, which is handled as follows:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1892
msgid ""
"if parameter 5601 (error code) is negative, this indicates a hard fault and "
"the prolog aborts with an error message."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1894
msgid ""
"if parameter 5601 (error code) is greater equal zero, this indicates a soft "
"fault. An informational message is displayed and the prolog continues."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1896
msgid ""
"If there was no preceding T command which caused a pocket to be selected, "
"the prolog aborts with an error message."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1898
msgid ""
"If cutter radius compensation is on, the prolog aborts with an error message."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1900
msgid "Then, the following parameters are exported to the NGC procedure:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1902
msgid "`#<tool_in_spindle>` : the tool number of the currently loaded tool"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1903
msgid "`#<selected_tool>` : the tool number selected"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1904
msgid "`#<selected_pocket>` : the selected tool's tooldata index"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1905
#, no-wrap
msgid "Actions of +change_epilog"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1912
msgid ""
"If parameter 5600 (fault indicator) is greater than zero, this indicates a "
"Toolchanger fault, which is handled as follows (`iocontrol-v2`-only):"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1914
msgid ""
"If parameter 5601 (error code) is negative, this indicates a hard fault and "
"the epilog aborts with an error message."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1916
msgid ""
"If parameter 5601 (error code) is greater equal zero, this indicates a soft "
"fault. An informational message is displayed and the epilog continues."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1920
msgid ""
"In case the NGC procedure executed the M6 command (which then refers to the "
"built in M6 behavior), no further action is taken. This can be used for "
"instance to minimally adjust the built in behavior be preceding or following "
"it with some other statements."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1925
msgid ""
"Otherwise, the `#<selected_pocket>` parameter is extracted from the "
"subroutine's parameter space, and used to set the interpreter's "
"`current_pocket` variable. Again, the procedure could change this value, and "
"the epilog takes the changed value in account."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1927
msgid "Then, the Canon command `CHANGE_TOOL(#<selected_pocket>)` is executed."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1928
msgid "The new tool parameters (offsets, diameter etc) are set."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1930
#, no-wrap
msgid "G-code Cycles: +cycle_prolog+ and +cycle_epilog+"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1937
msgid ""
"These wrap a NGC procedure so it can act as a cycle, meaning the motion code "
"is retained after finishing execution. If the next line just contains "
"parameter words (e.g. new X,Y values), the code is executed again with the "
"new parameter words merged into the set of the parameters given in the first "
"invocation."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1943
msgid ""
"These routines are designed to work in conjunction with an <<sub:argspec-"
"parameter,`argspec=<words>` parameter>>. While this is easy to use, in a "
"realistic scenario you would avoid argspec and do a more thorough "
"investigation of the block manually in order to give better error messages."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1945
msgid "The suggested argspec is as follows:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:1949
#, no-wrap
msgid "REMAP=G<somecode> argspec=xyzabcuvwqplr prolog=cycle_prolog ngc=<ngc procedure> epilog=cycle_epilog modalgroup=1\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1953
msgid ""
"This will permit +cycle_prolog+ to determine the compatibility of any axis "
"words give in the block, see below."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1954
#, no-wrap
msgid "Actions of +cycle_prolog+"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1957
msgid ""
"Determine whether the words passed in from the current block fulfill the "
"conditions outlined under <<gcode:canned-cycle-errors,Canned Cycle Errors>>."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1959
msgid ""
"Export the axis words as +<x>+, +#<y>+ etc; fail if axis words from "
"different groups (XYZ) (UVW) are used together, or any of (ABC) is given."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1960
msgid "Export 'L-' as +#<l>+; default to 1 if not given."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1961
msgid "Export 'P-' as +#<p>+; fail if p less than 0."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1962
msgid "Export 'R-' as +#<r>+; fail if r not given, or less equal 0 if given."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1964
msgid ""
"Fail if feed rate is zero, or inverse time feed or cutter compensation is on."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1965
msgid ""
"Determine whether this is the first invocation of a cycle G-code, if so:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1967
msgid ""
"Add the words passed in (as per argspec) into a set of sticky parameters, "
"which is retained across several invocations."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1968
msgid "If not (a continuation line with new parameters) then"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1969
msgid "merge the words passed in into the existing set of sticky parameters."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1970
msgid "Export the set of sticky parameters to the NGC procedure."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:1971
#, no-wrap
msgid "Actions of +cycle_epilog+"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1973
msgid "Determine if the current code was in fact a cycle, if so, then"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1975
msgid ""
"retain the current motion mode so a continuation line without a motion code "
"will execute the same motion code."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1976
#, no-wrap
msgid "S (Set Speed) : +setspeed_prolog+ and +setspeed_epilog+"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1979 src/remap/remap.adoc:1983
#: src/remap/remap.adoc:1987
msgid "TBD"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1980
#, no-wrap
msgid "F (Set Feed) : +setfeed_prolog+ and +setfeed_epilog+"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1984
#, no-wrap
msgid "M61 Set tool number : +settool_prolog+ and +settool_epilog+"
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:1988
#, no-wrap
msgid "Remapped code execution"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1990
#, no-wrap
msgid "NGC procedure call environment during remaps"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1996
msgid ""
"Normally, an O-word procedure is called with positional parameters.  This "
"scheme is very limiting in particular in the presence of optional "
"parameters. Therefore, the calling convention has been extended to use "
"something remotely similar to the Python keyword arguments model."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:1998
msgid "see LINKTO gcode/main Subroutines: sub, endsub, return, call."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:1999
#, no-wrap
msgid "Nested remapped codes"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2004
msgid ""
"Remapped codes may be nested just like procedure calls - that is, a remapped "
"code whose NGC procedure refers to some other remapped code will execute "
"properly."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2006
msgid "The maximum nesting level remaps is currently 10."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2007
#, no-wrap
msgid "Sequence number  during remaps"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2013
msgid ""
"Sequence numbers are propagated and restored like with O-word calls. See "
"`tests/remap/nested-remaps/word` for the regression test, which shows "
"sequence number tracking during nested remaps three levels deep."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2014
#, no-wrap
msgid "Debugging flags"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2018
msgid ""
"The following flags are relevant for remapping and Python - related "
"execution:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2026
#, no-wrap
msgid ""
"  EMC_DEBUG_OWORD             0x00002000  traces execution of O-word subroutines\n"
"  EMC_DEBUG_REMAP             0x00004000  traces execution of remap-related code\n"
"  EMC_DEBUG_PYTHON            0x00008000  calls to the Python plug in\n"
"  EMC_DEBUG_NAMEDPARAM        0x00010000  trace named parameter access\n"
"  EMC_DEBUG_PYTHON_TASK       0x00040000  trace the task Python plug in\n"
"  EMC_DEBUG_USER1             0x10000000  user-defined - not interpreted by LinuxCNC\n"
"  EMC_DEBUG_USER2             0x20000000  user-defined - not interpreted by LinuxCNC\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2029
msgid ""
"'or' these flags into the `[EMC]DEBUG` variable as needed. For a current "
"list of debug flags see 'src/emc/nml_intf/debugflags.h'."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2030
#, no-wrap
msgid "Debugging Embedded Python code"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2039
msgid ""
"Debugging of embedded Python code is harder than debugging normal Python "
"scripts, and only a limited supply of debuggers exists. A working open-"
"source based solution is to use the http://www.eclipse.org[Eclipse IDE], and "
"the http://www.pydev.org[PydDev] Eclipse plug in and its http://pydev.org/"
"manual_adv_remote_debugger.html[remote debugging feature]."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2041
msgid "To use this approach:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2043
msgid ""
"Install Eclipse via the the 'Ubuntu Software Center' (choose first "
"selection)."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2044
msgid ""
"Install the PyDev plug in from the http://pydev.org/updates[Pydev Update "
"Site]."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2045
msgid "Setup the LinuxCNC source tree as an Eclipse project."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2046
msgid "Start the Pydev Debug Server in Eclipse."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2050
msgid ""
"Make sure the embedded Python code can find the `pydevd.py` module which "
"comes with that plug in - it's buried somewhere deep under the Eclipse "
"install directory. Set the the `pydevd` variable in `util.py` to reflect "
"this directory location."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2051
msgid ""
"Add `import pydevd` to your Python module - see example `util.py` and `remap."
"py`."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2054
msgid ""
"Call `pydevd.settrace()` in your module at some point to connect to the "
"Eclipse Python debug server - here you can set breakpoints in your code, "
"inspect variables, step etc as usual."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2057
msgid ""
"`pydevd.settrace()` will block execution if Eclipse and the Pydev debug "
"server have not been started."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2061
msgid ""
"To cover the last two steps: the `o<pydevd>` procedure helps to get into the "
"debugger from MDI mode. See also the `call_pydevd` function in `util.py` and "
"its usage in `remap.involute` to set a breakpoint."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2064
msgid ""
"Here's a screen-shot of Eclipse/PyDevd debugging the `involute` procedure "
"from above:"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/remap/remap.adoc:2065
#, no-wrap
msgid "Debugging with Eclipse"
msgstr ""

#. type: Target for macro image
#: src/remap/remap.adoc:2065
#, no-wrap
msgid "images/debug_embedded_python.png"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2068
msgid ""
"See the Python code in `configs/sim/axis/remap/getting-started/python` for "
"details."
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:2070
#, no-wrap
msgid "Axis Preview and Remapped code execution"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2076
msgid ""
"For complete preview of a remapped code's tool path some precautions need to "
"be taken. To understand what is going on, let's review the preview and "
"execution process (this covers the Axis case, but others are similar):"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2079
msgid ""
"First, note that there are *two* independent interpreter instances involved:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2082
msgid ""
"One instance in the milltask program, which executes a program when you hit "
"the 'Start' button, and actually makes the machine move."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2085
msgid ""
"A second instance in the user interface whose primary purpose is to generate "
"the tool path preview. This one 'executes' a program once it is loaded, but "
"it doesn't actually cause machine movements."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2090
msgid ""
"Now assume that your remap procedure contains a G38 probe operation, for "
"example as part of a tool change with automatic tool length touch off. If "
"the probe fails, that would clearly be an error, so you'd display a message "
"and abort the program."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2097
msgid ""
"Now, what about preview of this procedure? At preview time, of course it's "
"not known whether the probe succeeds or fails - but you would likely want to "
"see what the maximum depth of the probe is, and assume it succeeds and "
"continues execution to preview further movements. Also, there is no point in "
"displaying a 'probe failed' message and aborting *during preview*."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2105
msgid ""
"The way to address this issue is to test in your procedure whether it "
"executes in preview or execution mode. This can be checked for by testing "
"the `#<_task>` <<gcode:predefined-named-parameters,predefined named "
"parameter>> - it will be 1 during actual execution and 0 during preview. See "
"'configs/sim/axis/remap/manual-toolchange-with-tool-length-switch/"
"nc_subroutines/manual_change.ngc' for a complete usage example."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2109
msgid ""
"Within Embedded Python, the `task` instance can be checked for by testing "
"'self.task' - this will be 1 in the milltask instance, and 0 in the preview "
"instance(s)."
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:2111
#, no-wrap
msgid "Remappable Codes"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2114
#, no-wrap
msgid "Existing codes which can be remapped"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2117
msgid "The current set of *existing* codes open to redefinition is:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2119
msgid "T__x__ (Prepare)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2120
msgid "M6 (Change tool)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2121
msgid "M61 (Set tool number)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2122
msgid "M0 (pause a running program temporarily)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2123
msgid ""
"M1 (pause a running program temporarily if the optional stop switch is on)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2124
msgid ""
"M60 (exchange pallet shuttles and then pause a running program temporarily)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2125
msgid "S (set spindle speed)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2126
msgid "F (set feed)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2128
msgid "Note that the use of M61 currently requires the use of `iocontrol-v2`."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2130
#, no-wrap
msgid "Currently unallocated G-codes:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2137
msgid ""
"Currently unallocated G-codes (for remapping) must be selected from the "
"blank areas of the following tables. All the listed G-codes are already "
"defined in the current implementation of LinuxCNC and may *not* be used to "
"remap new G-codes. (Developers who add new G-codes to LinuxCNC are "
"encouraged to also add their new G-codes to these tables.)"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2138
#, no-wrap
msgid "Table of Allocated G-codes 00-09"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2141 src/remap/remap.adoc:2157
#: src/remap/remap.adoc:2173 src/remap/remap.adoc:2189
#: src/remap/remap.adoc:2205 src/remap/remap.adoc:2221
#: src/remap/remap.adoc:2237 src/remap/remap.adoc:2253
#: src/remap/remap.adoc:2269 src/remap/remap.adoc:2285
#, no-wrap
msgid "Gxx"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2141 src/remap/remap.adoc:2157
#: src/remap/remap.adoc:2173 src/remap/remap.adoc:2189
#: src/remap/remap.adoc:2205 src/remap/remap.adoc:2221
#: src/remap/remap.adoc:2237 src/remap/remap.adoc:2253
#: src/remap/remap.adoc:2269 src/remap/remap.adoc:2285
#, no-wrap
msgid "Gxx.1"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2141 src/remap/remap.adoc:2157
#: src/remap/remap.adoc:2173 src/remap/remap.adoc:2189
#: src/remap/remap.adoc:2205 src/remap/remap.adoc:2221
#: src/remap/remap.adoc:2237 src/remap/remap.adoc:2253
#: src/remap/remap.adoc:2269 src/remap/remap.adoc:2285
#, no-wrap
msgid "Gxx.2"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2141 src/remap/remap.adoc:2157
#: src/remap/remap.adoc:2173 src/remap/remap.adoc:2189
#: src/remap/remap.adoc:2205 src/remap/remap.adoc:2221
#: src/remap/remap.adoc:2237 src/remap/remap.adoc:2253
#: src/remap/remap.adoc:2269 src/remap/remap.adoc:2285
#, no-wrap
msgid "Gxx.3"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2141 src/remap/remap.adoc:2157
#: src/remap/remap.adoc:2173 src/remap/remap.adoc:2189
#: src/remap/remap.adoc:2205 src/remap/remap.adoc:2221
#: src/remap/remap.adoc:2237 src/remap/remap.adoc:2253
#: src/remap/remap.adoc:2269 src/remap/remap.adoc:2285
#, no-wrap
msgid "Gxx.4"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2141 src/remap/remap.adoc:2157
#: src/remap/remap.adoc:2173 src/remap/remap.adoc:2189
#: src/remap/remap.adoc:2205 src/remap/remap.adoc:2221
#: src/remap/remap.adoc:2237 src/remap/remap.adoc:2253
#: src/remap/remap.adoc:2269 src/remap/remap.adoc:2285
#, no-wrap
msgid "Gxx.5"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2141 src/remap/remap.adoc:2157
#: src/remap/remap.adoc:2173 src/remap/remap.adoc:2189
#: src/remap/remap.adoc:2205 src/remap/remap.adoc:2221
#: src/remap/remap.adoc:2237 src/remap/remap.adoc:2253
#: src/remap/remap.adoc:2269 src/remap/remap.adoc:2285
#, no-wrap
msgid "Gxx.6"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2141 src/remap/remap.adoc:2157
#: src/remap/remap.adoc:2173 src/remap/remap.adoc:2189
#: src/remap/remap.adoc:2205 src/remap/remap.adoc:2221
#: src/remap/remap.adoc:2237 src/remap/remap.adoc:2253
#: src/remap/remap.adoc:2269 src/remap/remap.adoc:2285
#, no-wrap
msgid "Gxx.7"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2141 src/remap/remap.adoc:2157
#: src/remap/remap.adoc:2173 src/remap/remap.adoc:2189
#: src/remap/remap.adoc:2205 src/remap/remap.adoc:2221
#: src/remap/remap.adoc:2237 src/remap/remap.adoc:2253
#: src/remap/remap.adoc:2269 src/remap/remap.adoc:2285
#, no-wrap
msgid "Gxx.8"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2142 src/remap/remap.adoc:2158
#: src/remap/remap.adoc:2174 src/remap/remap.adoc:2190
#: src/remap/remap.adoc:2206 src/remap/remap.adoc:2222
#: src/remap/remap.adoc:2238 src/remap/remap.adoc:2254
#: src/remap/remap.adoc:2270 src/remap/remap.adoc:2286
#, no-wrap
msgid "Gxx.9"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2142
#, no-wrap
msgid "00"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2142
#, no-wrap
msgid "G00"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2143
#, no-wrap
msgid "01"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2143
#, no-wrap
msgid "G01"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2144
#, no-wrap
msgid "02"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2144
#, no-wrap
msgid "G02"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2145
#, no-wrap
msgid "03"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2145
#, no-wrap
msgid "G03"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2146
#, no-wrap
msgid "04"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2146
#, no-wrap
msgid "G04"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2147
#, no-wrap
msgid "05"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2147
#, no-wrap
msgid "G05"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2147
#, no-wrap
msgid "G05.1"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2147
#, no-wrap
msgid "G05.2"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2147
#, no-wrap
msgid "G05.3"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2148
#, no-wrap
msgid "06"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2149
#, no-wrap
msgid "07"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2149
#, no-wrap
msgid "G07"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2150
#, no-wrap
msgid "08"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2150
#, no-wrap
msgid "G08"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2151
#, no-wrap
msgid "09"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2154
#, no-wrap
msgid "Table of Allocated G-codes 10-19"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2158
#, no-wrap
msgid "G10"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2170
#, no-wrap
msgid "Table of Allocated G-codes 20-29"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2182
#, no-wrap
msgid "28"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2182
#, no-wrap
msgid "G28"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2182
#, no-wrap
msgid "G28.1"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2183
#, no-wrap
msgid "29"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2186
#, no-wrap
msgid "Table of Allocated G-codes 30-39"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2190 src/remap/remap.adoc:2193
#, no-wrap
msgid "G30"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2190 src/remap/remap.adoc:2193
#, no-wrap
msgid "G30.1"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2191
#, no-wrap
msgid "31"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2192
#, no-wrap
msgid "32"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2193
#, no-wrap
msgid "33"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2194
#, no-wrap
msgid "34"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2195
#, no-wrap
msgid "35"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2196
#, no-wrap
msgid "36"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2197
#, no-wrap
msgid "37"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2198
#, no-wrap
msgid "38"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2199
#, no-wrap
msgid "39"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2202
#, no-wrap
msgid "Table of Allocated G-codes 40-49"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2206
#, no-wrap
msgid "40"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2207
#, no-wrap
msgid "41"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2208
#, no-wrap
msgid "42"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2209
#, no-wrap
msgid "43"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2209
#, no-wrap
msgid "G43"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2209
#, no-wrap
msgid "G43.1"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2210
#, no-wrap
msgid "44"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2211
#, no-wrap
msgid "45"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2212
#, no-wrap
msgid "46"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2213
#, no-wrap
msgid "47"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2215
#, no-wrap
msgid "49"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2218
#, no-wrap
msgid "Table of Allocated G-codes 50-59"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2223
#, no-wrap
msgid "51"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2225
#, no-wrap
msgid "53"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2226
#, no-wrap
msgid "54"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2227
#, no-wrap
msgid "55"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2228
#, no-wrap
msgid "56"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2229
#, no-wrap
msgid "57"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2230
#, no-wrap
msgid "58"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2231
#, no-wrap
msgid "59"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2234
#, no-wrap
msgid "Table of Allocated G-codes 60-69"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2238
#, no-wrap
msgid "60"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2238
#, no-wrap
msgid "G60"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2239
#, no-wrap
msgid "61"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2239
#, no-wrap
msgid "G61.1"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2240
#, no-wrap
msgid "62"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2241
#, no-wrap
msgid "63"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2242
#, no-wrap
msgid "64"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2243
#, no-wrap
msgid "65"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2244
#, no-wrap
msgid "66"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2245
#, no-wrap
msgid "67"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2246
#, no-wrap
msgid "68"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2247
#, no-wrap
msgid "69"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2250
#, no-wrap
msgid "Table of Allocated G-codes 70-79"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2254
#, no-wrap
msgid "70"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2254
#, no-wrap
msgid "G70"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2255
#, no-wrap
msgid "71"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2255
#, no-wrap
msgid "G71"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2255
#, no-wrap
msgid "G71.1"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2255
#, no-wrap
msgid "G71.2"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2256
#, no-wrap
msgid "G72"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2256
#, no-wrap
msgid "G72.1"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2256
#, no-wrap
msgid "G72.2"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2257
#, no-wrap
msgid "73"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2258
#, no-wrap
msgid "74"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2259
#, no-wrap
msgid "75"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2260
#, no-wrap
msgid "76"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2261
#, no-wrap
msgid "77"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2262
#, no-wrap
msgid "78"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2263
#, no-wrap
msgid "79"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2266
#, no-wrap
msgid "Table of Allocated G-codes 80-89"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2270
#, no-wrap
msgid "80"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2271
#, no-wrap
msgid "81"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2272
#, no-wrap
msgid "82"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2273
#, no-wrap
msgid "83"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2274
#, no-wrap
msgid "84"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2275
#, no-wrap
msgid "85"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2276
#, no-wrap
msgid "86"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2277
#, no-wrap
msgid "87"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2278
#, no-wrap
msgid "88"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2279
#, no-wrap
msgid "89"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2282
#, no-wrap
msgid "Table of Allocated G-codes 90-99"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2286
#, no-wrap
msgid "90"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2286
#, no-wrap
msgid "G90.1"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2287
#, no-wrap
msgid "91"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2287
#, no-wrap
msgid "G91.1"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2288
#, no-wrap
msgid "92"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2288
#, no-wrap
msgid "G92"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2288
#, no-wrap
msgid "G92.1"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2288
#, no-wrap
msgid "G92.2"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2288
#, no-wrap
msgid "G92.3"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2289
#, no-wrap
msgid "93"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2290
#, no-wrap
msgid "94"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2291
#, no-wrap
msgid "95"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2291
#, no-wrap
msgid "G95"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2292
#, no-wrap
msgid "96"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2292
#, no-wrap
msgid "G96"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2293
#, no-wrap
msgid "97"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2293
#, no-wrap
msgid "G97"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2294
#, no-wrap
msgid "98"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2294
#, no-wrap
msgid "G98"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2295
#, no-wrap
msgid "99"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2295
#, no-wrap
msgid "G99"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2299
#, no-wrap
msgid "Currently unallocated M-codes:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2304
msgid ""
"These M-codes are currently undefined in the current implementation of "
"LinuxCNC and may be used to define new M-codes. (Developers who define new M-"
"codes in LinuxCNC are encouraged to remove them from this table.)"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2305
#, no-wrap
msgid "Table of Unallocated M-codes 00-99"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2308
#, no-wrap
msgid "Mx0"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2308
#, no-wrap
msgid "Mx1"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2308
#, no-wrap
msgid "Mx2"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2308
#, no-wrap
msgid "Mx3"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2308
#, no-wrap
msgid "Mx4"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2308
#, no-wrap
msgid "Mx5"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2308
#, no-wrap
msgid "Mx6"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2308
#, no-wrap
msgid "Mx7"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2308
#, no-wrap
msgid "Mx8"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2309
#, no-wrap
msgid "Mx9"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2309
#, no-wrap
msgid "00-09"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2310
#, no-wrap
msgid "10-19"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2310
#, no-wrap
msgid "M10"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2310
#, no-wrap
msgid "M11"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2310
#, no-wrap
msgid "M12"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2310
#, no-wrap
msgid "M13"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2310
#, no-wrap
msgid "M14"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2310
#, no-wrap
msgid "M15"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2310
#, no-wrap
msgid "M16"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2310
#, no-wrap
msgid "M17"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2310
#, no-wrap
msgid "M18"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2311
#, no-wrap
msgid "20-29"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2311
#, no-wrap
msgid "M20"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2311
#, no-wrap
msgid "M21"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2311
#, no-wrap
msgid "M22"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2311
#, no-wrap
msgid "M23"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2311
#, no-wrap
msgid "M24"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2311
#, no-wrap
msgid "M25"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2311
#, no-wrap
msgid "M26"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2311
#, no-wrap
msgid "M27"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2311
#, no-wrap
msgid "M28"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2312
#, no-wrap
msgid "M29"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2312
#, no-wrap
msgid "30-39"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2312
#, no-wrap
msgid "M31"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2312
#, no-wrap
msgid "M32"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2312
#, no-wrap
msgid "M33"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2312
#, no-wrap
msgid "M34"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2312
#, no-wrap
msgid "M35"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2312
#, no-wrap
msgid "M36"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2312
#, no-wrap
msgid "M37"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2312
#, no-wrap
msgid "M38"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2313
#, no-wrap
msgid "M39"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2313
#, no-wrap
msgid "40-49"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2313
#, no-wrap
msgid "M40"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2313
#, no-wrap
msgid "M41"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2313
#, no-wrap
msgid "M42"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2313
#, no-wrap
msgid "M43"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2313
#, no-wrap
msgid "M44"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2313
#, no-wrap
msgid "M45"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2313
#, no-wrap
msgid "M46"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2313
#, no-wrap
msgid "M47"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2314
#, no-wrap
msgid "50-59"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2314
#, no-wrap
msgid "M54"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2314
#, no-wrap
msgid "M55"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2314
#, no-wrap
msgid "M56"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2314
#, no-wrap
msgid "M57"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2314
#, no-wrap
msgid "M58"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2315
#, no-wrap
msgid "M59"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2315
#, no-wrap
msgid "60-69"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2316
#, no-wrap
msgid "70-79"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2316
#, no-wrap
msgid "M74"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2316
#, no-wrap
msgid "M75"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2316
#, no-wrap
msgid "M76"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2316
#, no-wrap
msgid "M77"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2316
#, no-wrap
msgid "M78"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2317
#, no-wrap
msgid "M79"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2317
#, no-wrap
msgid "80-89"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2317
#, no-wrap
msgid "M80"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2317
#, no-wrap
msgid "M81"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2317
#, no-wrap
msgid "M82"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2317
#, no-wrap
msgid "M83"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2317
#, no-wrap
msgid "M84"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2317
#, no-wrap
msgid "M85"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2317
#, no-wrap
msgid "M86"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2317
#, no-wrap
msgid "M87"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2317
#, no-wrap
msgid "M88"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2318
#, no-wrap
msgid "M89"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2318
#, no-wrap
msgid "90-99"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2318
#, no-wrap
msgid "M90"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2318
#, no-wrap
msgid "M91"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2318
#, no-wrap
msgid "M92"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2318
#, no-wrap
msgid "M93"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2318
#, no-wrap
msgid "M94"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2318
#, no-wrap
msgid "M95"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2318
#, no-wrap
msgid "M96"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2318
#, no-wrap
msgid "M97"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2318
#, no-wrap
msgid "M98"
msgstr ""

#. type: Table
#: src/remap/remap.adoc:2319
#, no-wrap
msgid "M99"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2323
msgid ""
"All M-codes from `M100` to `M199` are user-defined M-codes already, and "
"should not be remapped."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2325
msgid "All M-codes from `M200` to `M999` are available for remapping."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2326
#, no-wrap
msgid "readahead time and execution time"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2329 src/remap/remap.adoc:2333
#: src/remap/remap.adoc:2337 src/remap/remap.adoc:2341
#: src/remap/remap.adoc:2345 src/remap/remap.adoc:2349
#: src/remap/remap.adoc:2353 src/remap/remap.adoc:2357
#: src/remap/remap.adoc:2361 src/remap/remap.adoc:2365
msgid "FIXME Write missing information"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2330
#, no-wrap
msgid "plugin/pickle hack"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2334
#, no-wrap
msgid "Module, methods, classes, etc reference"
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:2338
#, no-wrap
msgid "Introduction: Extending Task Execution"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2342
#, no-wrap
msgid "Why would you want to change Task Execution?"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2346
#, no-wrap
msgid "A diagram: `task`, `interp`, `iocontrol`, `UI` (??)"
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:2350
#, no-wrap
msgid "Models of Task execution"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2354
#, no-wrap
msgid "Traditional `iocontrol`/`iocontrolv2` execution"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2358
#, no-wrap
msgid "Redefining IO procedures"
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2362
#, no-wrap
msgid "Execution-time Python procedures"
msgstr ""

#.  setup examples
#. type: Title ==
#: src/remap/remap.adoc:2368
#, no-wrap
msgid "A short survey of LinuxCNC program execution"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2372
msgid ""
"To understand remapping of codes it might be helpful to survey the execution "
"of `task` and interpreter as far as it relates to remapping."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2373
#, no-wrap
msgid "Interpreter state"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2377
msgid ""
"Conceptually, the interpreter's state consist of variables which fall into "
"the following categories:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2379
msgid "_Configuration information_ (typically from INI file)"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2380
msgid "_The 'World model'_ - a representation of actual machine state"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2386
msgid ""
"_Modal state and settings_ - Refers to state which is 'carried over' between "
"executing individual NGC codes - for instance, once the spindle is turned on "
"and the speed is set, it remains at this setting until turned off. The same "
"goes for many codes, like feed, units, motion modes (feed or rapid)  and so "
"forth."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2391
msgid ""
"_Interpreter execution state_ - Holds information about the block currently "
"executed, whether we are in a subroutine, interpreter variables, etc. .  "
"Most of this state is aggregated in a - fairly unsystematic - `structure "
"_setup` (see interp_internals.hh)."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2392
#, no-wrap
msgid "Task and Interpreter interaction, Queuing and Read-Ahead"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2399
msgid ""
"The `task` part of LinuxCNC is responsible for coordinating actual machine "
"commands - movement, HAL interactions and so forth. It does not by itself "
"handle the RS274NGC language. To do so, `task` calls upon the interpreter to "
"parse and execute the next command - either from MDI or the current file."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2405
msgid ""
"The interpreter execution generates canonical machine operations, which "
"actually move something. These are, however, not immediately executed but "
"put on a queue. The actual execution of these codes happens in the `task` "
"part of LinuxCNC: canon commands are pulled off that interpreter queue, and "
"executed resulting in actual machine movements."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2410
msgid ""
"This means that typically the interpreter is far ahead of the actual "
"execution of commands - the parsing of the program might well be finished "
"before any noticeable movement starts. This behavior is called 'read-ahead'."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2411
#, no-wrap
msgid "Predicting the machine position"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2416
msgid ""
"To compute canonical machine operations in advance during read ahead, the "
"interpreter must be able to predict the machine position after each line of "
"G-code, and that is not always possible."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2421
msgid ""
"Let's look at a simple example program which does relative moves (G91), and "
"assume the machine starts at x=0,y=0,z=0. Relative moves imply that the "
"outcome of the next move relies on the position of the previous one:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:2429
#, no-wrap
msgid ""
"N10 G91\n"
"N20 G0 X10 Y-5 Z20\n"
"N30 G1 Y20 Z-5\n"
"N40 G0 Z30\n"
"N50 M2\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2432
msgid ""
"Here the interpreter can clearly predict machine positions for each line:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2434
msgid ""
"After N20: x=10 y=-5 z=20; after N30: x=10 y=15 z=15; after N40: x=10 y=15 "
"z=45"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2437
msgid ""
"and so can parse the whole program and generate canonical operations well in "
"advance."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2438
#, no-wrap
msgid "Queue-busters break position prediction"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2443
msgid ""
"However, complete read ahead is only possible when the interpreter can "
"predict the position impact for *every* line in the program in advance. "
"Let's look at a modified example:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:2456
#, no-wrap
msgid ""
"N10 G91\n"
"N20 G0 X10 Y-5 Z20\n"
"N30 G38.3 Z-10\n"
"N40 O100 if [#5070 EQ 0]\n"
"N50    G1 Y20 Z-5\n"
"N60 O100 else\n"
"N70    G0 Z30\n"
"N80 O100 endif\n"
"N90 G1 Z10\n"
"N95 M2\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2462
msgid ""
"To pre-compute the move in N90, the interpreter would need to know where the "
"machine is after line N80 - and that depends on whether the probe command "
"succeeded or not, which is not known until it's actually executed."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2465
msgid ""
"So, some operations are incompatible with further read-ahead. These are "
"called 'queue busters', and they are:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2467
msgid "Reading a HAL pin's value with M66: value of HAL pin not predictable."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2468
msgid "Loading a new tool with M6: tool geometry not predictable."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2469
msgid ""
"Executing a probe with G38._n_: final position and success/failure not "
"predictable."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2470
#, no-wrap
msgid "How queue-busters are dealt with"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2475
msgid ""
"Whenever the interpreter encounters a queue-buster, it needs to stop read "
"ahead and wait until the relevant result is available. The way this works is:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2478
msgid ""
"When such a code is encountered, the interpreter returns a special return "
"code to `task` ('INTERP_EXECUTE_FINISH')."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2484
msgid ""
"This return code signals to `task` to stop read ahead for now, execute all "
"queued canonical commands built up so far (including the last one, which is "
"the queue buster), and then 'synchronize the interpreter state with the "
"world model'. Technically, this means updating internal variables to reflect "
"HAL pin values, reload tool geometries after an M6, and convey results of a "
"probe."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2487
msgid ""
"The interpreter's 'synch()' method is called by `task` and does just that - "
"read all the world model 'actual' values which are relevant for further "
"execution."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2489
msgid ""
"At this point, `task` goes ahead and calls the interpreter for more read "
"ahead - until either the program ends or another queue-buster is encountered."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2490
#, no-wrap
msgid "Word order and execution order"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2497
msgid ""
"One or several 'words' may be present on an NGC 'block' if they are "
"compatible (some are mutually exclusive and must be on different lines).  "
"The execution model however prescribes a strict ordering of execution of "
"codes, regardless of their appearance on the source line (<<gcode:order-of-"
"execution,G-code Order of Execution>>)."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2498
#, no-wrap
msgid "Parsing"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2508
msgid ""
"Once a line is read (in either MDI mode, or from the current NGC file), it "
"is parsed and flags and parameters are set in a 'struct block' (struct "
"_setup, member block1). This struct holds all information about the current "
"source line, but independent of different ordering of codes on the current "
"line: as long as several codes are compatible, any source ordering will "
"result in the same variables set in the struct block. Right after parsing, "
"all codes on a block are checked for compatibility."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2509
#, no-wrap
msgid "Execution"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2513
msgid ""
"After successful parsing the block is executed by execute_block(), and here "
"the different items are handled according to execution order."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2521
msgid ""
"If a \"queue buster\" is found, a corresponding flag is set in the "
"interpreter state (toolchange_flag, input_flag, probe_flag) and the "
"interpreter returns an INTERP_EXECUTE_FINISH return value, signaling 'stop "
"readahead for now, and resynch' to the caller ('`task`').  If no queue "
"busters are found after all items are executed, INTERP_OK is returned, "
"signalling that read-ahead may continue."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2528
msgid ""
"When read ahead continues after the synch, `task` starts executing "
"interpreter read() operations again.  During the next read operation, the "
"above mentioned flags are checked and corresponding variables are set "
"(because the a synch() was just executed, the values are now current). This "
"means that the next command already executes in the properly set variable "
"context."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2529
#, no-wrap
msgid "Procedure execution"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2537
msgid ""
"O-word procedures complicate handling of queue busters a bit. A queue buster "
"might be found somewhere in a nested procedure, resulting in a semi-finished "
"procedure call when INTERP_EXECUTE_FINISH is returned. Task makes sure to "
"synchronize the world model, and continue parsing and execution as long as "
"there is still a procedure executing (call_level > 0)."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2539
#, no-wrap
msgid "How tool change currently works"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2544
msgid ""
"The actions happening in LinuxCNC are a bit involved, but it's necessary to "
"get the overall idea what currently happens before you set out to adapt "
"those workings to your own needs."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2551
msgid ""
"Note that remapping an existing code completely disables all internal "
"processing for that code. That means that beyond your desired behavior - "
"probably described through an NGC Oword or Python procedure, you need to "
"replicate those internal actions of the interpreter which together result in "
"a complete replacement of the existing code. The prolog and epilog code is "
"the place to do this."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2552
#, no-wrap
msgid "How tool information is communicated"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2555
msgid ""
"Several processes are 'interested' in tool information: `task` and its "
"interpreter, as well as the user interface. Also, the 'halui' process."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2561
msgid ""
"Tool information is held in the 'emcStatus' structure, which is shared by "
"all parties. One of its fields is the 'toolTable' array, which holds the "
"description as loaded from the tool table file (tool number, diameter, "
"frontangle, backangle and orientation for lathe, tool offset information)."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2566
msgid ""
"The authoritative source and only process actually 'setting' tool "
"information in this structure is the 'iocontrol' process. All others "
"processes just consult this structure. The interpreter holds actually a "
"local copy of the tool table."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2571
msgid ""
"For the curious, the current emcStatus structure can be accessed by <<remap:"
"executing-python-statements,Python statements>>. The interpreter's "
"perception of the tool currently loaded for instance is accessed by:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:2575
#, no-wrap
msgid ""
";py,from interpreter import *\n"
";py,print(this.tool_table[0])\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2578
msgid "To see fields in the global emcStatus structure, try this:"
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:2584
#, no-wrap
msgid ""
";py,from emctask import *\n"
";py,print(emcstat.io.tool.pocketPrepped)\n"
";py,print(emcstat.io.tool.toolInSpindle)\n"
";py,print(emcstat.io.tool.toolTable[0])\n"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2588
msgid ""
"You need to have LinuxCNC started from a terminal window to see the results."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2589
#, no-wrap
msgid "How Tx (Prepare Tool) works"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2592
#, no-wrap
msgid "Interpreter action on a Tx command"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2597
msgid ""
"All the interpreter does is evaluate the toolnumber parameter, looks up its "
"corresponding tooldata index, remembers it in the `selected_pocket` variable "
"for later, and queues a canon command (SELECT_TOOL).  See 'Interp::"
"convert_tool_select' in 'src/emc/rs274/interp_execute.cc'."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2599
#, no-wrap
msgid "Task action on SELECT_TOOL"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2603
msgid ""
"When `task` gets around to handle a SELECT_TOOL, it sends a EMC_TOOL_PREPARE "
"message to the `iocontrol` process, which handles most tool-related actions "
"in LinuxCNC."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2608
msgid ""
"In the current implementation, `task` actually waits for `iocontrol` to "
"complete the changer positioning operation, which is not necessary IMO since "
"it defeats the idea that changer preparation and code execution can proceed "
"in parallel."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2609
#, no-wrap
msgid "Iocontrol action on EMC_TOOL_PREPARE"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2614
msgid ""
"When `iocontrol` sees the select pocket command, it does the related HAL pin "
"wiggling - it sets the \"tool-prep-number\" pin to indicate which tool is "
"next, raises the \"tool-prepare\" pin, and waits for the \"tool-prepared\" "
"pin to go high."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2618
msgid ""
"When the changer responds by asserting \"tool-prepared\", it considers the "
"prepare phase to be completed and signals `task` to continue. (again, this "
"'wait' istn strictly necessary IMO)"
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2619
#, no-wrap
msgid "Building the prolog and epilog for Tx"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2622
msgid ""
"See the Python functions `prepare_prolog` and `prepare_epilog` in `configs/"
"sim/axis/remap/toolchange/python/toolchange.py`."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2623
#, no-wrap
msgid "How M6 (Change tool) works"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2630
msgid ""
"You need to understand this fully before you can adapt it. It is very "
"relevant to writing a prolog and epilog handler for a remapped M6. Remapping "
"an existing codes means you disable the internal steps taken normally, and "
"replicate them as far as needed for your own purposes."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2634
msgid ""
"Even if you are not familiar with C, I suggest you look at the 'Interp::"
"convert_tool_change' code in 'src/emc/rs274/interp_convert.cc'."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2636
#, no-wrap
msgid "Interpreter action on a M6 command"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2639
msgid "When the interpreter sees an M6, it:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2644
msgid ""
"checks whether a T command has already been executed (test 'settings-"
">selected_pocket' to be >= 0) and fail with 'Need tool prepared -Txx- for "
"toolchange' message if not."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2646
msgid ""
"check for cutter compensation being active, and fail with 'Cannot change "
"tools with cutter radius compensation on' if so."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2648
msgid ""
"stop the spindle except if the \"TOOL_CHANGE_WITH_SPINDLE_ON\" INI option is "
"set."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2650
msgid ""
"generate a rapid 'Z up' move if if the \"TOOL_CHANGE_QUILL_UP\" INI option "
"is set."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2652
msgid "move the A, B and C indexers if applicable"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2653
msgid "generate rapid move to the G30 position"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2655
msgid ""
"execute a CHANGE_TOOL canon command,with the selected pocket as parameter. "
"CHANGE_TOOL will:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2656
msgid "generate a rapid move to TOOL_CHANGE_POSITION if so set in INI"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2657
msgid "enqueue an EMC_TOOL_LOAD NML message to `task`."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2658
msgid "set the numberer parameters 5400-5413 according to the new tool"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2660
msgid ""
"signal to `task` to stop calling the interpreter for readahead by returning "
"INTERP_EXECUTE_FINISH since M6 is a queue buster."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2661
#, no-wrap
msgid "What `task` does when it sees a CHANGE_TOOL command"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2665
msgid ""
"Again, not much more than passing the buck to `iocontrol` by sending it an "
"EMC_TOOL_LOAD message, and waiting until `iocontrol` has done its thing."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2667
#, no-wrap
msgid "Iocontrol action on EMC_TOOL_LOAD"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2669
msgid "it asserts the \"tool-change\" pin"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2670
msgid "it waits for the \"tool-changed\" pin to become active"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2671
msgid "when that has happened:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2672
msgid "deassert \"tool-change\""
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2673
msgid "set \"tool-prep-number\" and \"tool-prep-pocket\" pins to zero"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2674
msgid "execute the 'load_tool()' function with the pocket as parameter."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2678
msgid ""
"The last step actually sets the tooltable entries in the 'emcStatus' "
"structure.  The actual action taken depends on whether the "
"RANDOM_TOOLCHANGER INI option was set, but at the end of the process "
"'toolTable[0]' reflects the tool currently in the spindle."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2680
msgid "When that has happened:"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2682
msgid "`iocontrol` signals `task` to go ahead."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2683
msgid ""
"`task` tells the interpreter to execute a 'synch()' operation, to see what "
"has changed."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2684
msgid ""
"The interpreter 'synch()' pulls all information from the world model needed, "
"among it the changed tool table."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2686
msgid ""
"From there on, the interpreter has complete knowledge of the world model and "
"continues with read ahead."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2687
#, no-wrap
msgid "Building the prolog and epilog for M6"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2690
msgid ""
"See the Python functions `change_prolog` and `change_epilog` in `configs/sim/"
"axis/remap/toolchange/python/toolchange.py`."
msgstr ""

#. type: Title ===
#: src/remap/remap.adoc:2691
#, no-wrap
msgid "How M61 (Change tool number) works"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2695
msgid ""
"M61 requires a non-negative `Q`parameter (tool number).  If zero, this means "
"'unload tool', else 'set current tool number to Q'."
msgstr ""

#. type: Block title
#: src/remap/remap.adoc:2696
#, no-wrap
msgid "Building the replacement for M61"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2700
msgid ""
"An example Python redefinition for M61 can be found in the `set_tool_number` "
"function in `configs/sim/axis/remap/toolchange/python/toolchange.py`."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2706
msgid ""
"The RELOAD_ON_CHANGE feature is fairly broken.  Restart after changing a "
"Python file."
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2707
msgid ""
"M61 (remapped or not) is broken in `iocontrol` and requires `iocontrol-v2` "
"to actually work."
msgstr ""

#.  A short survey of LinuxCNC execution
#.  Interpreter internals access - Python view
#.  Task internals access - Python view
#. type: Title ==
#: src/remap/remap.adoc:2712
#, no-wrap
msgid "Changes"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2719
msgid ""
"the method to return error messages and fail used to be 'self."
"set_errormsg(text)' followed by 'return INTERP_ERROR'.  This has been "
"replaced by merely returning a string from a Python handler or oword "
"subroutine.  This sets the error message and aborts the program. Previously "
"there was no clean way to abort a Python oword subroutine."
msgstr ""

#. type: Title ==
#: src/remap/remap.adoc:2720
#, no-wrap
msgid "Debugging"
msgstr ""

#. type: Plain text
#: src/remap/remap.adoc:2724
msgid ""
"In the '[EMC]' section of the INI file the 'DEBUG' parameter can be changed "
"to get various levels of debug messages when LinuxCNC is started from a "
"terminal."
msgstr ""

#. type: delimited block -
#: src/remap/remap.adoc:2741
#, no-wrap
msgid ""
"Debug level, 0 means no messages. See src/emc/nml_intf/debugflags.h for others\n"
"DEBUG = 0x00000002 # configuration\n"
"DEBUG = 0x7FFFDEFF # no interp,oword\n"
"DEBUG = 0x00008000 # py only\n"
"DEBUG = 0x0000E000 # py + remap + Oword\n"
"DEBUG = 0x0000C002 # py + remap + config\n"
"DEBUG = 0x0000C100 # py + remap + Interpreter\n"
"DEBUG = 0x0000C140 # py + remap + Interpreter + NML msgs\n"
"DEBUG = 0x0000C040 # py + remap + NML\n"
"DEBUG = 0x0003E100 # py + remap + Interpreter + oword + signals + namedparams\n"
"DEBUG = 0x10000000 # EMC_DEBUG_USER1 - trace statements\n"
"DEBUG = 0x20000000 # EMC_DEBUG_USER2 - trap into Python debugger\n"
"DEBUG = 0x10008000 # USER1, PYTHON\n"
"DEBUG = 0x30008000 # USER1,USER2, PYTHON # USER2 will cause involute to try to connect to pydev\n"
"DEBUG = 0x7FFFFFFF # All debug messages\n"
msgstr ""

#. type: Title =
#: src/source-highlight/hal-demo.adoc:3 src/source-highlight/ini-demo.adoc:3
#: src/source-highlight/ngc-demo.adoc:3
#, no-wrap
msgid "Source Highlight Filter Test"
msgstr ""

#.  Begin a listing of ini/hal/ngc files like so:
#. [source,{ini}]
#. [source,{hal}]
#. [source,{ngc}]
#. type: Plain text
#: src/source-highlight/hal-demo.adoc:21 src/source-highlight/ini-demo.adoc:6
#: src/source-highlight/ngc-demo.adoc:21
msgid ""
"Details of the filter can be found in `./doc/source-highlight-filter.txt`."
msgstr ""

#. type: delimited block -
#: src/source-highlight/hal-demo.adoc:25
#, no-wrap
msgid "# note this is for highlighting demo only - there aint any use to it\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/hal-demo.adoc:27
#, no-wrap
msgid "loadusr -W [MYSECTION]MYMODULE\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/hal-demo.adoc:30
#, no-wrap
msgid ""
"loadrt conv_float_s32 names=f2s32\n"
"addf f2s32 servo-thread\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/hal-demo.adoc:32
#, no-wrap
msgid "# in case they were linked already\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/hal-demo.adoc:35
#, no-wrap
msgid ""
"unlinkp motion.digital-out-01 471.11 $(envvar)\n"
"unlinkp motion.digital-in-01  815  $VAR\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/hal-demo.adoc:44
#, no-wrap
msgid ""
"net tool-prep-number-f  motion.0.analog-out-00 => motion.0.analog-out-00 f2s32.in [FOO]bAR\n"
"net tool-prep-number-f  motion.0.analog-out-00 => motion.0.analog-out-00 f2s32.0.in\n"
"net tool-prep-number-f  motion.0.analog-out-00 => motion.0.analog-out-00 f2s32x.0.in\n"
"net tool-prep-number-f  motion.0.analog-out-00 => motion.0.analog-out-00 motion.0.in\n"
"net tool-prep-number-f  motion.0.analog-out-00 => motion.0.analog-out-00 motion.in\n"
"net tool-change hal_manualtoolchange.56.change <= motion.digital-out-01\n"
"net tool-changed hal_manualtoolchange.changed motion.digital-in-01\n"
"net tool-prep-number hal_manualtoolchange.number f2s32.out\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/hal-demo.adoc:47
#, no-wrap
msgid ""
"# prepare loopback\n"
"net tool-prepare motion.digital-out-00 motion.digital-in-00\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:26
#, no-wrap
msgid "# EMC controller parameters for a simulated machine.\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:29
#, no-wrap
msgid ""
"# General note: Comments can either be preceded with a # or ; - either is\n"
"# acceptable, although # is in keeping with most Linux config files.\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:32
#, no-wrap
msgid ""
"# General section -------------------------------------------------------------\n"
"[EMC]\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:35
#, no-wrap
msgid ""
"# Version of this INI file\n"
"VERSION =               $Revision$\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:38
#, no-wrap
msgid ""
"# Name of machine, for use with display, etc.\n"
"MACHINE =               EMC-HAL-SIM-AXIS\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:42
#, no-wrap
msgid ""
"# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others\n"
"# DEBUG =               0x7FFFFFFF\n"
"DEBUG = 0\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:45
#, no-wrap
msgid ""
"# Sections for display options ------------------------------------------------\n"
"[DISPLAY]\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:48
#, no-wrap
msgid ""
"# Name of display program, e.g., axis\n"
"DISPLAY =             axis\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:51
#, no-wrap
msgid ""
"# Cycle time, in seconds, that display will sleep between polls\n"
"CYCLE_TIME =            0.100\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:54
#, no-wrap
msgid ""
"# Path to help file\n"
"HELP_FILE =             doc/help.txt\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:57
#, no-wrap
msgid ""
"# Initial display setting for position, RELATIVE or MACHINE\n"
"POSITION_OFFSET =       RELATIVE\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:60
#, no-wrap
msgid ""
"# Initial display setting for position, COMMANDED or ACTUAL\n"
"POSITION_FEEDBACK =     ACTUAL\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:66
#, no-wrap
msgid ""
"# Highest value that will be allowed for feed override, 1.0 = 100%\n"
"MAX_FEED_OVERRIDE =     1.2\n"
"MAX_SPINDLE_OVERRIDE =  1.0\n"
"# Prefix to be used\n"
"PROGRAM_PREFIX = ../../nc_files/\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:70
#, no-wrap
msgid ""
"# Introductory graphic\n"
"INTRO_GRAPHIC = emc2.gif\n"
"INTRO_TIME = 5\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:72
#, no-wrap
msgid "EDITOR = gedit\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:77
#, no-wrap
msgid ""
"INCREMENTS = 1 mm, .01 in, .1mm, 1 mil, .1 mil, 1/8000 in\n"
"[FILTER]\n"
"PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image\n"
"PROGRAM_EXTENSION = .py Python Script\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:82
#, no-wrap
msgid ""
"png = image-to-gcode\n"
"gif = image-to-gcode\n"
"jpg = image-to-gcode\n"
"py = python\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:85
#, no-wrap
msgid ""
"# Task controller section -----------------------------------------------------\n"
"[TASK]\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:88
#, no-wrap
msgid ""
"# Name of task controller program, e.g., milltask\n"
"TASK =                  milltask\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:91
#, no-wrap
msgid ""
"# Cycle time, in seconds, that task controller will sleep between polls\n"
"CYCLE_TIME =            0.001\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:94
#, no-wrap
msgid ""
"# Part program interpreter section --------------------------------------------\n"
"[RS274NGC]\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:97
#, no-wrap
msgid ""
"# File containing interpreter variables\n"
"PARAMETER_FILE =        sim_mm.var\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:100
#, no-wrap
msgid ""
"# Motion control section ------------------------------------------------------\n"
"[EMCMOT]\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:102
#, no-wrap
msgid "EMCMOT =              motmod\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:105
#, no-wrap
msgid ""
"# Timeout for comm to emcmot, in seconds\n"
"COMM_TIMEOUT =          1.0\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:110
#, no-wrap
msgid ""
"# BASE_PERIOD is unused in this configuration but specified in core_sim.hal\n"
"BASE_PERIOD  =               0\n"
"# Servo task period, in nano-seconds\n"
"SERVO_PERIOD =               1000000\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:113
#, no-wrap
msgid ""
"# Hardware Abstraction Layer section --------------------------------------------------\n"
"[HAL]\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:117
#, no-wrap
msgid ""
"# The run script first uses halcmd to execute any HALFILE\n"
"# files, and then to execute any individual HALCMD commands.\n"
"#\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:124
#, no-wrap
msgid ""
"# list of HAL config files to run through halcmd\n"
"# files are executed in the order in which they appear\n"
"HALFILE =                    core_sim.hal\n"
"HALFILE =\t\t     axis_manualtoolchange.hal\n"
"HALFILE = simulated_home.hal\n"
"#HALFILE = gamepad.hal\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:128
#, no-wrap
msgid ""
"# list of halcmd commands to execute\n"
"# commands are executed in the order in which they appear\n"
"#HALCMD =                    save neta\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:132
#, no-wrap
msgid ""
"# Single file that is executed after the GUI has started.  Only supported by\n"
"# AXIS at this time (only AXIS creates a HAL component of its own)\n"
"#POSTGUI_HALFILE = test_postgui.hal\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:145
#, no-wrap
msgid ""
"# Trajectory planner section --------------------------------------------------\n"
"[TRAJ]\n"
"COORDINATES =           X Y Z\n"
"LINEAR_UNITS =          mm\n"
"ANGULAR_UNITS =         degree\n"
"DEFAULT_VELOCITY =      30.48\n"
"MAX_VELOCITY =          53.34\n"
"DEFAULT_ACCELERATION =  508\n"
"MAX_ACCELERATION =      508\n"
"POSITION_FILE = position_mm.txt\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:152
#, no-wrap
msgid ""
"# Axes sections ---------------------------------------------------------------\n"
"[AXIS_X]\n"
"MAX_VELOCITY =                  4\n"
"MAX_ACCELERATION =              100.0\n"
"MIN_LIMIT =                     -10.0\n"
"MAX_LIMIT =                     10.0\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:158
#, no-wrap
msgid ""
"[AXIS_Y]\n"
"MAX_VELOCITY =                  4\n"
"MAX_ACCELERATION =              100.0\n"
"MIN_LIMIT =                     -10.0\n"
"MAX_LIMIT =                     10.0\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:164
#, no-wrap
msgid ""
"[AXIS_Z]\n"
"MAX_VELOCITY =                  4\n"
"MAX_ACCELERATION =              100.0\n"
"MIN_LIMIT =                     -8.0\n"
"MAX_LIMIT =                     0.12\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:166
#, no-wrap
msgid "# Joint sections ---------------------------------------------------------------\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:187
#, no-wrap
msgid ""
"# First joint\n"
"[JOINT_0]\n"
"TYPE =                          LINEAR\n"
"HOME =                          0.000\n"
"MAX_VELOCITY =                  30.48\n"
"MAX_ACCELERATION =              508\n"
"BACKLASH = 0.000\n"
"INPUT_SCALE =                   157.48\n"
"OUTPUT_SCALE = 1.000\n"
"MIN_LIMIT =                     -254\n"
"MAX_LIMIT =                     254\n"
"FERROR = 1.27\n"
"MIN_FERROR = .254\n"
"HOME_OFFSET =                    0.0\n"
"HOME_SEARCH_VEL =                127\n"
"HOME_LATCH_VEL =                 25.4\n"
"HOME_USE_INDEX =                 NO\n"
"HOME_IGNORE_LIMITS =             NO\n"
"HOME_SEQUENCE = 1\n"
"HOME_IS_SHARED = 1\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:207
#, no-wrap
msgid ""
"# Second joint\n"
"[JOINT_1]\n"
"TYPE =                          LINEAR\n"
"HOME =                          0.000\n"
"MAX_VELOCITY =                  30.48\n"
"MAX_ACCELERATION =              508\n"
"BACKLASH = 0.000\n"
"INPUT_SCALE =                   157.48\n"
"OUTPUT_SCALE = 1.000\n"
"MIN_LIMIT =                     -254\n"
"MAX_LIMIT =                     254\n"
"FERROR = 1.27\n"
"MIN_FERROR = .254\n"
"HOME_OFFSET =                    0.0\n"
"HOME_SEARCH_VEL =                127\n"
"HOME_LATCH_VEL =                 25.4\n"
"HOME_USE_INDEX =                 NO\n"
"HOME_IGNORE_LIMITS =             NO\n"
"HOME_SEQUENCE = 1\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:228
#, no-wrap
msgid ""
"# Third joint\n"
"[JOINT_2]\n"
"TYPE =                          LINEAR\n"
"HOME =                          0.0\n"
"MAX_VELOCITY =                  30.48\n"
"MAX_ACCELERATION =              508\n"
"BACKLASH = 0.000\n"
"INPUT_SCALE =                   157.48\n"
"OUTPUT_SCALE = 1.000\n"
"MIN_LIMIT =                     -50.8\n"
"MAX_LIMIT =                     101.6\n"
"FERROR = 1.27\n"
"MIN_FERROR = .254\n"
"HOME_OFFSET =                    25.4\n"
"HOME_SEARCH_VEL =                127\n"
"HOME_LATCH_VEL =                 25.4\n"
"HOME_USE_INDEX =                 NO\n"
"HOME_IGNORE_LIMITS =             NO\n"
"HOME_SEQUENCE = 0\n"
"HOME_IS_SHARED = 1\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:231
#, no-wrap
msgid ""
"# section for main IO controller parameters -----------------------------------\n"
"[EMCIO]\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:234
#, no-wrap
msgid ""
"# Name of IO controller program, e.g., io\n"
"EMCIO = \t\tio\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:237
#, no-wrap
msgid ""
"# cycle time, in seconds\n"
"CYCLE_TIME =    0.100\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ini-demo.adoc:241
#, no-wrap
msgid ""
"# tool table file\n"
"TOOL_TABLE =    sim_mm.tbl\n"
"TOOL_CHANGE_POSITION = 0 0 50.8\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ngc-demo.adoc:40
#, no-wrap
msgid ""
"; G-code highlighting stresstest - useless otherwise\n"
";\n"
"#<tool_change_at_g30> = 0\n"
"G0 (Rapid to start) X1 Y1\n"
"G0 X1 Y1 (Rapid to start; but don't forget the coolant)\n"
"M2 ; End of program.\n"
"M66 P1 L3 Q[#<timeout>]\n"
"M66 P1 L3 Q[#<timeout> + [#4711]]\n"
"M66 P1 L3 Q#<timeout>\n"
"M66 P1 L3 Q#3\n"
"M66 P1 L3 Q#5999\n"
"G5  X23.5 a 19.2\n"
"(debug, foo!)\n"
"(Debug, some text and a substitution: #23 and some more thereafter)\n"
"(DEBUG, #<_a_param>)\n"
"(DEBUG, #<xxx>)\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ngc-demo.adoc:68
#, no-wrap
msgid ""
"G0 G53 Z0 X[#19]\n"
"G 3 0\n"
"G00\n"
"G01\n"
"G 0 1\n"
"G3 0\n"
"G30\n"
"G53\n"
"G5 3\n"
"G 5 3\n"
"G0\n"
"G1\n"
";\n"
"; To activate, incantate as follows in the INI file:\n"
";\n"
"; [RS274NGC]\n"
"; # Remap M6 to a named O-word subroutine.\n"
"; # The tool number currently loaded (in spindle) is passed as parameter #1\n"
"; M6_COMMAND=o<m6demo>call\n"
";\n"
";\n"
"N4711 O<m6demo> sub\n"
";\n"
";\n"
"N 0815 #<tool_change_with_spindle_on> = 0\n"
"#<tool_change_quill_up> = 0\n"
"#<tool_change_at_g30> = 0\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ngc-demo.adoc:70
#, no-wrap
msgid "#4711 = 8.15\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ngc-demo.adoc:79
#, no-wrap
msgid ""
"; number of seconds to wait for 'tool-changed' equivalent\n"
"#<timeout> = 9999\n"
";\n"
"(DEBUG, executing M6 O-word sub, tool=#1)\n"
";\n"
"O<m6demo_spindle_off> if [#<tool_change_with_spindle_on>] EQ 0\n"
"    M5\n"
"O<m6demo_spindle_off> endif\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ngc-demo.adoc:83
#, no-wrap
msgid ""
"O<m6demo_quill_up> if [#<tool_change_quill_up>] NE 0\n"
"    G0 G53 Z0\n"
"O<m6demo_quill_up> endif\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ngc-demo.adoc:87
#, no-wrap
msgid ""
"O<m6demo_tc_at_g30> if [#<tool_change_at_g30>] NE 0\n"
"    G30\n"
"O<m6demo_tc_at_g30> endif\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ngc-demo.adoc:108
#, no-wrap
msgid ""
"; Set analog output pin #2 to signal the pocket number.\n"
"; iocontrol.tool-number becomes motion.analog-out-02.\n"
"M68 E2 Q[#1]\n"
"(DEBUG, set current tool number on motion.analog-out-02: #1)\n"
";\n"
"; Assert the equivalent of the iocontrol.tool-change pin,\n"
"; which is now motion.digital-out-01.\n"
"M64 P1\n"
"(DEBUG, motion.digital-out-01 set high, waiting for motion.digital-in-01)\n"
";\n"
"; Wait for the equivalent of the iocontrol.tool-changed pin to go high.\n"
"; We use motion.digital-in-01.\n"
";\n"
"M66 P1 L3 Q#<timeout>\n"
";\n"
"O<m6demo_timeout> if [#5399] EQ -1\n"
"    (DEBUG, timeout waiting for motion.digital-in-01 to become true: #5399 )\n"
"O<m6demo_timeout> else\n"
"    (DEBUG, motion.digital-in-01 became true: #5399)\n"
"O<m6demo_timeout> endif\n"
msgstr ""

#. type: delimited block -
#: src/source-highlight/ngc-demo.adoc:118
#, no-wrap
msgid ""
"; Retract iocontrol.tool-change equivalent.\n"
"(DEBUG, deasserting motion.digital-out-01)\n"
";\n"
"M65 P1\n"
";\n"
"(DEBUG, done with M6 sub)\n"
";\n"
"O<m6demo> endsub\n"
"m2\n"
msgstr ""

#. type: Title =
#: src/tooldatabase/tooldatabase.adoc:5
#, no-wrap
msgid "Tool Database Interface"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:17
msgid ""
"Tool data is conventionally described by a tool table file specified by an "
"inifile setting: [EMCIO]TOOL_TABLE=tooltable_filename.  A tool table file "
"consists of a text line for each available tool describing the tool's "
"parameters, see <<sec:tool-table,Tool Table Format>>."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:21
msgid ""
"The tool database interface provides an alternative method for obtaining "
"tool data via a separate program that manages a database of tools."
msgstr ""

#. type: Title ==
#: src/tooldatabase/tooldatabase.adoc:22
#, no-wrap
msgid "Interface"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:28
msgid ""
"INI file settings enable the (optional) operation of a user-provided tool "
"database program:"
msgstr ""

#. type: delimited block -
#: src/tooldatabase/tooldatabase.adoc:33
#, no-wrap
msgid ""
"[EMCIO]\n"
"DB_PROGRAM = db_program [args]\n"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:39
msgid ""
"When included, *db_program* specifies the path to a user-provided executable "
"program that provides tooldata.  Up to 10 space-separated args may be "
"included and passed to the *db_program* at startup."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:43
msgid ""
"INI file settings for [EMCIO]TOOL_TABLE are ignored when a *db_program* is "
"specified."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:51
msgid ""
"The *db_program* may be implemented in any language currently supported in "
"LinuxCNC (e.g., BASH scripts, Python or Tcl scripts, C/C++ programs) as long "
"as it conforms to the interface messages received on stdin and replied on "
"stdout.  A *db_program* could manage data from a flat file, a relational "
"database (SQLite for example), or other data sources."
msgstr ""

#. type: Title ===
#: src/tooldatabase/tooldatabase.adoc:52
#, no-wrap
msgid "*db_program* operation (v2.1)"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:55
msgid "When a *db_progam* is specified, operation is as follows:"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:58
msgid ""
"At startup, LinuxCNC starts the *db_program* and connects to its stdin and "
"stdout."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:63
msgid ""
"The *db_program* must respond by writing a single line acknowledgement "
"consisting of a version string (e.g., \"v2.1\").  No tools will be available "
"if the version is not compatible with the LinuxCNC database interface "
"version."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:69
msgid ""
"Upon a successful acknowledgement, LinuxCNC issues a 'g' (*get*)  command to "
"request all tools.  The *db_program* must respond with a sequence of replies "
"to identify each available tool.  The textual reply format is identical to "
"the text line format used in conventional tool table files.  A final "
"response of \"FINI\" terminates the reply."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:73
msgid ""
"The *db_program* then enters an event wait loop to receive commands that "
"indicate that tool data has been changed by LinuxCNC.  Tool data changes "
"include:"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:74
msgid "a) spindle loading(T__n__ M6)/unloading(T0 M6)"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:75
msgid "b) tool parameter changes (G10L1P__n__ for example)"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:76
msgid "c) tool substitutions (M61Q__n__)."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:85
msgid ""
"When a tool data change occurs, LinuxCNC sends a command to the *db_program* "
"consisting of an identifying command letter followed by a full or "
"abbreviated tool data line.  The *db_program* must respond with a reply to "
"confirm receipt.  If the reply includes the text \"'NAK'\", a message is "
"printed to stdout but execution continues.  The \"'NAK'\" message signifies "
"a lack of synchronization between the *db_program* and LinuxCNC -- "
"accompanying text should give an indication for the cause of the fault."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:87
msgid "The commands issued for tool data changes are:"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:91
msgid ""
"\"p\" put data changes caused by G10L1, G10L10, G10L11 G-codes.  The tool "
"data line will include all elements of a tool table text line."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:94
msgid ""
"\"l\" spindle_load (T__n__M6). The tool data line includes only the 'T' and "
"'P' items identifying the relevant tool number and pocket number."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:97
msgid ""
"\"u\" spindle_unload (T0M6).  The tool data line includes only the 'T' and "
"'P' items identifying the relevant tool number and pocket number"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:103
msgid ""
"When a NON_RANDOM tool changer is specified using "
"[EMCIO]RANDOM_TOOL_CHANGER=0 (the default), the spindle_load command issued "
"for T__n__M6 (or M61Q__n__) is: 'l T__n__ P0' (pocket 0 is the spindle).  "
"The spindle_unload command issued for T0M6 is 'u T0 P0'."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:112
msgid ""
"When a RANDOM tool changer is specified using [EMCIO]RANDOM_TOOL_CHANGER=1, "
"a pair of spindle_unload/spindle_load commands are issued at each tool "
"exchange.  The pair of commands issued for T__n__M6 (or M61Q__n__) are 'u "
"T__u__ P__m__' followed by 'l T__n__ P0' where __u__ is the current tool to "
"be sent to pocket __m__ and __n__ is the new tool to load in the spindle "
"(pocket '0').  By convention, a tool number of 0 is used to specify an empty "
"tool,"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:117
msgid ""
"Using a *db_program* does not change the way LinuxCNC operates but provides "
"support for new database functionality for tool management."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:125
msgid ""
"For example, a *db_program* database application can maintain the operating "
"hours for all tools by tracking each load/unload of a tool.  A machine could "
"then have three 6&thinsp;mm endmills in pockets 111, 112, and 113 with the "
"database application programmed to assign tool number 110 to the 6&thinsp;mm "
"endmill with the fewest operating hours.  Then, when a LinuxCNC program "
"requests tool 110, the database would specify the appropriate pocket based "
"on tool usage history."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:137
msgid ""
"Tool data changes made within LinuxCNC ('p','u','l' commands) are pushed "
"immediately to the *db_program* which is expected to synchronize its source "
"data.  By default, LinuxCNC requests for tool data ('g' commands) are made "
"at startup only.  A database program may update tool usage data on a "
"continuous basis so long-lived LinuxCNC applications may benefit by "
"refreshing the tool data provided by the *db_program*.  The G-code command "
"*G10L0* can be used to request a tool data reload ('g' command) from within "
"G-code programs or by MDI.  A reload operation is also typically provided by "
"a Graphical User Interface (GUI) so that on-demand reloads can be "
"requested.  For example, a Python GUI application can use:"
msgstr ""

#. type: delimited block -
#: src/tooldatabase/tooldatabase.adoc:143
#, no-wrap
msgid ""
"#!/usr/bin/env python3\n"
"from  linuxcnc import command\n"
"command().load_tool_table()\n"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:150
msgid ""
"Alternatively, a *db_program* may push its local data changes to synchronize "
"its data with LinuxCNC by using the load_tool_table()  interface command.  "
"Commands which push changes to LinuxCNC may be rejected if the interpreter "
"is running.  The interpreter state can be checked before issuing a "
"load_tool_table() command.  Example:"
msgstr ""

#. type: delimited block -
#: src/tooldatabase/tooldatabase.adoc:161
#, no-wrap
msgid ""
"#! /usr/bin/env python3\n"
"import linuxcnc\n"
"s = linuxcnc.stat()\n"
"s.poll()\n"
"if s.interp_state == linuxcnc.INTERP_IDLE:\n"
"    linuxcnc.command().load_tool_table()\n"
"else: # defer until interp not idle\n"
"   ...\n"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:168
msgid ""
"If the database application adds or removes tools after initialization, a "
"call to tooldb_tools() must be issued with an updated user_tools list.  The "
"updated list of tools will be used on subsequent get commands or "
"load_tool_table()  requests."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:172
msgid ""
"Removal of a tool number should only be done if the tool number is not "
"currently loaded in spindle."
msgstr ""

#. type: Title ====
#: src/tooldatabase/tooldatabase.adoc:174
#, no-wrap
msgid "Debug Environmental Variables"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:179
msgid ""
"Exporting the environmental variable DB_SHOW enables LinuxCNC prints (to "
"stdout) that show tool data retrieved from the *db_program* at startup and "
"at subsequent reloading of tool data."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:182
msgid ""
"Exporting the environmental variable DB_DEBUG enables LinuxCNC prints (to "
"stdout) for additional debugging information about interface activity."
msgstr ""

#. type: Title ===
#: src/tooldatabase/tooldatabase.adoc:183
#, no-wrap
msgid "Example program"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:188
msgid ""
"An example *db_program* (implemented as a Python script) is provided with "
"the simulation examples.  The program demonsrates the required operations to:"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:190
msgid "acknowledge startup version"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:191
msgid "receive tool data requests: 'g' (*get* command)"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:192
#, no-wrap
msgid "receive tool data updates:   'p' (*put* command)\n"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:193
#, no-wrap
msgid "receive tool load updates:   'l' (*load_spindle* command)\n"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:194
#, no-wrap
msgid "receive tool unload updates: 'u' (*unload_spindle* command)\n"
msgstr ""

#. type: Title ===
#: src/tooldatabase/tooldatabase.adoc:195
#, no-wrap
msgid "Python tooldb module"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:202
msgid ""
"The example program uses a LinuxCNC provided Python module ('tooldb')  that "
"manages the low-level details for communication and version verification.  "
"This module uses callback functions specified by the *db_program* to respond "
"to the 'g' (get) command and the commands that indicate tool data changes "
"('p', 'l', 'u')."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:205
msgid ""
"The *db_program* uses the 'tooldb' module by implementing the following "
"Python code:"
msgstr ""

#. type: delimited block -
#: src/tooldatabase/tooldatabase.adoc:209
#, no-wrap
msgid "user_tools = list(...)   # list of available tool numbers\n"
msgstr ""

#. type: delimited block -
#: src/tooldatabase/tooldatabase.adoc:223
#, no-wrap
msgid ""
"def user_get_tool(toolno):\n"
"    # function to respond to 'g' (get) commands\n"
"    # called once for each toolno in user_tools\n"
"    ...\n"
"def user_put_tool(toolno,params):\n"
"    # function to respond to 'p' (put) commands\n"
"    ...\n"
"def user_load_spindle(toolno,params):\n"
"    # function to respond to 'l' (put) commands\n"
"    ...\n"
"def user_unload_spindle(toolno,params):\n"
"    # function to respond to 'u' (put) commands\n"
"    ...\n"
msgstr ""

#. type: delimited block -
#: src/tooldatabase/tooldatabase.adoc:229
#, no-wrap
msgid ""
"#------------------------------------------------------------\n"
"# Begin:\n"
"from tooldb import tooldb_tools     # identify known tools\n"
"from tooldb import tooldb_callbacks # identify functions\n"
"from tooldb import tooldb_loop      # main loop\n"
msgstr ""

#. type: delimited block -
#: src/tooldatabase/tooldatabase.adoc:237
#, no-wrap
msgid ""
"tooldb_tools(user_tools)\n"
"tooldb_callbacks(user_get_tool,\n"
"                 user_put_tool,\n"
"                 user_load_spindle,\n"
"                 user_unload_spindle,\n"
"                )\n"
"tooldb_loop()\n"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:243
msgid ""
"Use of 'tooldb' is not required -- it is provided as a demonstration of the "
"required interface and as a convenience for implementing Python-based "
"applications that interface with an external database."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:247
msgid "Simulation configs using the axis gui:"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:249
#, no-wrap
msgid "configs/sim/axis/db_demo/*db_ran*.ini    (random_toolchanger)\n"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:250
#, no-wrap
msgid "configs/sim/axis/db_demo/*db_nonran*.ini (nonrandom_toolchanger)\n"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:253
msgid ""
"Each sim config simulates a *db_program* implementing a database with 10 "
"tools numbered 10--19."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:259
msgid ""
"The *db_program* is provided by a single script (db.py) and symbolic links "
"to it for alternative uses: db_ran.py and db_nonran.py.  By default, the "
"script implements random_toolchanger functionality.  Nonrandom toolchanger "
"functions are substituted if the link name includes the text \"'nonran'\"."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:264
msgid ""
"The sim configs demonstrate the use of the Python 'tooldb' interface module "
"and implement a basic flat-file database that tracks tool time usage for "
"multiple tools having equal diameters.  The database rules support selection "
"of the tool having the lowest operating time."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:272
msgid ""
"The sim configs use a primary task to monitor and respond to tool updates "
"initiated from within LinuxCNC.  A periodic task updates tool time usage at "
"reguar intervals.  Separate, concurrent tasks are implemented as threads to "
"demonstrate the code required when changes are initiated by the *db_program* "
"and demonstrate methods for synchronizing LinuxCNC internal tooldata.  "
"Examples include:"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:274
msgid "updates of tool parameters"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:275
msgid "addition and removal of tool numbers"
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:279
msgid ""
"A mutual exclusion lock is used to protect data from inconsistencies due to "
"race conditions between LinuxCNC tooldata updates and the database "
"application updates."
msgstr ""

#. type: Plain text
#: src/tooldatabase/tooldatabase.adoc:286
msgid ""
"When a *db_program* is used in conjunction with a random tool changer "
"([EMCIO]RANDOM_TOOLCHANGER), LinuxCNC maintains a file ('db_spindle.tbl' in "
"the configuration directory) that consists of a single tool table line "
"identifying the current tool in the spindle."
msgstr ""

#. type: Title =
#: src/user/starting-linuxcnc.adoc:5
#, no-wrap
msgid "Starting LinuxCNC(((Starting LinuxCNC)))"
msgstr ""

#. type: Title ==
#: src/user/starting-linuxcnc.adoc:7
#, no-wrap
msgid "Running LinuxCNC"
msgstr ""

#. type: Plain text
#: src/user/starting-linuxcnc.adoc:10
msgid "LinuxCNC is started with the script file 'linuxcnc'."
msgstr ""

#. type: delimited block -
#: src/user/starting-linuxcnc.adoc:13
#, no-wrap
msgid "linuxcnc [options] [<INI-file>]\n"
msgstr ""

#. type: Block title
#: src/user/starting-linuxcnc.adoc:15
#, no-wrap
msgid "linuxcnc script options"
msgstr ""

#. type: delimited block -
#: src/user/starting-linuxcnc.adoc:18
#, no-wrap
msgid "linuxcnc: Run LINUXCNC\n"
msgstr ""

#. type: delimited block -
#: src/user/starting-linuxcnc.adoc:22
#, no-wrap
msgid ""
"Usage:\n"
"  $ linuxcnc -h\n"
"    This help\n"
msgstr ""

#. type: delimited block -
#: src/user/starting-linuxcnc.adoc:25
#, no-wrap
msgid ""
"  $ linuxcnc [Options]\n"
"    Choose the configuration inifile graphically\n"
msgstr ""

#. type: delimited block -
#: src/user/starting-linuxcnc.adoc:28
#, no-wrap
msgid ""
"  $ linuxcnc [Options] path/to/your_ini_file\n"
"    Name the configuration inifile using its path\n"
msgstr ""

#. type: delimited block -
#: src/user/starting-linuxcnc.adoc:31
#, no-wrap
msgid ""
"  $ linuxcnc [Options] -l\n"
"    Use the previously used configuration inifile\n"
msgstr ""

#. type: delimited block -
#: src/user/starting-linuxcnc.adoc:47
#, no-wrap
msgid ""
"Options:\n"
"    -d: Turn on \"debug\" mode\n"
"    -v: Turn on \"verbose\" mode\n"
"    -k: Continue in the presence of errors in .hal files\n"
"    -t \"tpmodulename [parameters]\"\n"
"            specify custom trajectory_planning_module\n"
"            overrides optional ini setting [TRAJ]TPMOD\n"
"    -m \"homemodulename [parameters]\"\n"
"            specify custom homing_module\n"
"            overrides optional ini setting [EMCMOT]HOMEMOD\n"
"    -H \"dirname\": search dirname for Halfiles before searching\n"
"                  ini directory and system library:\n"
"                  /home/git/linuxcnc-dev/lib/hallib\n"
"Note:\n"
"    The -H \"dirname\" option may be specified multiple times\n"
msgstr ""

#. type: Plain text
#: src/user/starting-linuxcnc.adoc:56
msgid ""
"If the linuxcnc script is passed an INI file it reads the INI file and "
"starts LinuxCNC. The INI file [HAL] section specifies the order of loading "
"up HAL files if more than one is used. Once the HAL=xxx.hal files are loaded "
"then the GUI is loaded then the POSTGUI=.xxx.hal file is loaded. If you "
"create PyVCP or GladeVCP objects with HAL pins you must use the postgui HAL "
"file to make any connections to those pins. See the <<sub:ini:sec:hal,"
"[HAL]>> section of the INI configuration for more information."
msgstr ""

#. type: Title ===
#: src/user/starting-linuxcnc.adoc:58
#, no-wrap
msgid "Configuration Selector(((Configuration Selection)))"
msgstr ""

#. type: Plain text
#: src/user/starting-linuxcnc.adoc:64
msgid ""
"If no INI file is passed to the linuxcnc script it loads the configuration "
"selector so you can choose and save a sample configuration. Once a sample "
"configuration has been saved it can be modified to suit your application.  "
"The configuration files are saved in linuxcnc/configs directory."
msgstr ""

#. type: Title =
#: src/user/user-concepts.adoc:5
#, no-wrap
msgid "Important User Concepts(((User Concepts)))"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:15
msgid ""
"This chapter covers important user concepts that should be understood before "
"attempting to run a CNC machine with G-code."
msgstr ""

#. type: Title ==
#: src/user/user-concepts.adoc:17
#, no-wrap
msgid "Trajectory Control(((Trajectory Control)))"
msgstr ""

#. type: Title ===
#: src/user/user-concepts.adoc:20
#, no-wrap
msgid "Trajectory Planning(((Trajectory Planning,TP)))"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:25
msgid ""
"Trajectory planning, in general, is the means by which LinuxCNC follows the "
"path specified by your G-code program, while still operating within the "
"limits of your machinery."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:28
msgid ""
"A G-code program can never be fully obeyed. For example, imagine you specify "
"as a single-line program the following move:"
msgstr ""

#. type: delimited block -
#: src/user/user-concepts.adoc:32
#, no-wrap
msgid "G1 X1 F10 (G1 is linear move, X1 is the destination, F10 is the speed)\n"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:41
msgid ""
"In reality, the whole move can't be made at F10, since the machine must "
"accelerate from a stop, move toward X=1, and then decelerate to stop again. "
"Sometimes part of the move is done at F10, but for many moves, especially "
"short ones, the specified feed rate is never reached at all. Having short "
"moves in your G-code can cause your machine to slow down and speed up for "
"the longer moves if the 'naive cam detector' is not employed with G64 P__n__."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:46
msgid ""
"The basic acceleration and deceleration described above is not complex and "
"there is no compromise to be made. In the INI file the specified machine "
"constraints such as maximum axis velocity and axis acceleration must be "
"obeyed by the trajectory planner."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:49
msgid ""
"For more information on the Trajectory Planner INI options see the <<sub:ini:"
"sec:traj,Trajectory Section>> in the INI chapter."
msgstr ""

#. type: Title ===
#: src/user/user-concepts.adoc:51
#, no-wrap
msgid "Path Following(((Trajectory Planning:Path Following)))"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:56
msgid ""
"A less straightforward problem is that of path following. When you program a "
"corner in G-code, the trajectory planner can do several things, all of which "
"are right in some cases:"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:59
msgid ""
"It can decelerate to a stop exactly at the coordinates of the corner, and "
"then accelerate in the new direction."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:62
msgid ""
"It can also do what is called blending, which is to keep the feed rate up "
"while going through the corner, making it necessary to round the corner off "
"in order to obey machine constraints."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:67
msgid ""
"You can see that there is a trade off here: you can slow down to get better "
"path following, or keep the speed up and have worse path following. "
"Depending on the particular cut, the material, the tooling, etc., the "
"programmer may want to compromise differently."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:71
msgid ""
"Rapid moves also obey the current trajectory control. With moves long enough "
"to reach maximum velocity on a machine with low acceleration and no path "
"tolerance specified, you can get a fairly round corner."
msgstr ""

#. type: Title ===
#: src/user/user-concepts.adoc:73
#, no-wrap
msgid "Programming the Planner(((Trajectory Planning:Programming the Planner)))"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:76
msgid "The trajectory control commands are as follows:"
msgstr ""

#. type: Labeled list
#: src/user/user-concepts.adoc:77
#, no-wrap
msgid "`G61`"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:80
msgid ""
"(Exact Path Mode) `G61` visits the programmed point exactly, even though "
"that means it might temporarily come to a complete stop in order to change "
"direction to the next programmed point."
msgstr ""

#. type: Labeled list
#: src/user/user-concepts.adoc:81
#, no-wrap
msgid "`G61.1`"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:83
msgid ""
"(Exact Stop Mode) `G61.1` tells the planner to come to an exact stop at "
"every segment's end. The path will be followed exactly but complete feed "
"stops can be destructive for the part or tool, depending on the specifics of "
"the machining."
msgstr ""

#. type: Labeled list
#: src/user/user-concepts.adoc:84
#, no-wrap
msgid "`G64`"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:94
msgid ""
"(Blend Without Tolerance Mode) `G64` is the default setting when you start "
"LinuxCNC. G64 is just blending and the naive cam detector is not enabled. "
"G64 and G64 P0 tell the planner to sacrifice path following accuracy in "
"order to keep the feed rate up. This is necessary for some types of material "
"or tooling where exact stops are harmful, and can work great as long as the "
"programmer is careful to keep in mind that the tool's path will be somewhat "
"more curvy than the program specifies.  When using G0 (rapid) moves with G64 "
"use caution on clearance moves and allow enough distance to clear obstacles "
"based on the acceleration capabilities of your machine."
msgstr ""

#. type: Labeled list
#: src/user/user-concepts.adoc:95
#, no-wrap
msgid "`G64 P- Q-`"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:108
msgid ""
"(Blend With Tolerance Mode) This enables the 'naive cam detector' and "
"enables blending with a tolerance. If you program G64 P0.05, you tell the "
"planner that you want continuous feed, but at programmed corners you want it "
"to slow down enough so that the tool path can stay within 0.05 user units of "
"the programmed path. The exact amount of slowdown depends on the geometry of "
"the programmed corner and the machine constraints, but the only thing the "
"programmer needs to worry about is the tolerance. This gives the programmer "
"complete control over the path following compromise. The blend tolerance can "
"be changed throughout the program as necessary. Beware that a specification "
"of G64 P0 has the same effect as G64 alone (above), which is necessary for "
"backward compatibility for old G-code programs. See the <<gcode:g64,G64 "
"section>> of the G-code chapter."
msgstr ""

#. type: Labeled list
#: src/user/user-concepts.adoc:109
#, no-wrap
msgid "Blending without tolerance"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:115
msgid ""
"The controlled point will touch each specified movement at at least one "
"point. The machine will never move at such a speed that it cannot come to an "
"exact stop at the end of the current movement (or next movement, if you "
"pause when blending has already started). The distance from the end point of "
"the move is as large as it needs to be to keep up the best contouring feed."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/user/user-concepts.adoc:116 src/user/user-concepts.adoc:143
#: src/user/user-concepts.adoc:144
#, no-wrap
msgid "Naive CAM Detector"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:132
msgid ""
"Successive G1 moves that involve only the XYZ axes that deviate less than Q- "
"from a straight line are merged into a single straight line. This merged "
"movement replaces the individual G1 movements for the purposes of blending "
"with tolerance. Between successive movements, the controlled point will pass "
"no more than P- from the actual endpoints of the movements. The controlled "
"point will touch at least one point on each movement. The machine will never "
"move at such a speed that it cannot come to an exact stop at the end of the "
"current movement (or next movement, if you pause when blending has already "
"started) On G2/3 moves in the G17 (XY) plane when the maximum deviation of "
"an arc from a straight line is less than the G64 Q- tolerance the arc is "
"broken into two lines (from start of arc to midpoint, and from midpoint to "
"end).  those lines are then subject to the naive cam algorithm for lines.  "
"Thus, line-arc, arc-arc, and arc-line cases as well as line-line benefit "
"from the 'naive cam detector'. This improves contouring performance by "
"simplifying the path."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:142
msgid ""
"In the following figure the blue line represents the actual machine "
"velocity. The red lines are the acceleration capability of the machine.  The "
"horizontal lines below each plot is the planned move. The upper plot shows "
"how the trajectory planner will slow the machine down when short moves are "
"encountered to stay within the limits of the machines acceleration setting "
"to be able to come to an exact stop at the end of the next move. The bottom "
"plot shows the effect of the Naive Cam Detector to combine the moves and do "
"a better job of keeping the velocity as planned."
msgstr ""

#. type: Target for macro image
#: src/user/user-concepts.adoc:144
#, no-wrap
msgid "images/naive-cam.png"
msgstr ""

#. type: Title ===
#: src/user/user-concepts.adoc:147
#, no-wrap
msgid "Planning Moves(((Trajectory Planning:Planning Moves)))"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:155
msgid ""
"Make sure moves are 'long enough' to suit your machine/material.  "
"Principally because of the rule that the machine will never move at such a "
"speed that it cannot come to a complete stop at the end of the current "
"movement, there is a minimum movement length that will allow the machine to "
"keep up a requested feed rate with a given acceleration setting."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:161
msgid ""
"The acceleration and deceleration phase each use half the ini file "
"MAX_ACCELERATION. In a blend that is an exact reversal, this causes the "
"total axis acceleration to equal the ini file MAX_ACCELERATION. In other "
"cases, the actual machine acceleration is somewhat less than the ini file "
"acceleration"
msgstr ""

#. NOTE This is a duplicate paragraph to the one below without latexmath.
#. type: Plain text
#: src/user/user-concepts.adoc:172
msgid ""
"To keep up the feed rate, the move must be longer than the distance it takes "
"to accelerate from 0 to the desired feed rate and then stop again. Using A "
"as *1/2* the ini file MAX_ACCELERATION and F as the feed rate *in units per "
"second*, the acceleration time is *t~a~ = F/A* and the acceleration distance "
"is *d~a~ = F*t~a~/2*. The deceleration time and distance are the same, "
"making the critical distance *d = d~a~ + d~d~ = 2 * d~a~ = F^2^/A*."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:176
msgid ""
"For example, for a feed rate of 1 inch per second and an acceleration of *10 "
"inches/sec^2^*, the critical distance is *1^2^/10 = 1/10 = 0.1 inches*."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:179
msgid ""
"For a feed rate of 0.5 inch per second, the critical distance is *5^2^/100 = "
"25/100 = 0.025* inches."
msgstr ""

#
#
#. This section has been commented out until latexmath is working again.
#. To keep up the feed rate, the move must be longer than the distance it
#. takes to accelerate from 0 to the desired feed rate and then stop
#. again. Using A as latexmath:[$\frac{1}{2}$] the ini file MAX_ACCELERATION
#. and F as the feed rate *in units per second*, the acceleration time is
#. latexmath:[$ ta = \frac{F}{A} $] and the acceleration distance is
#. latexmath:[$ da = \frac{1}{2} \times F \times ta $]. The deceleration time
#. and distance are the same, making the critical distance
#. latexmath:[$ d = da + dd = 2 \times da = \frac{F^{2}}{A} $].
#. For example, for a feed rate of 1 inch per second and an acceleration of
#. latexmath:[$ 10 \frac{inch}{sec^{2}} $], the critical distance is
#. latexmath:[$\frac{1^{2}}{10} = \frac{1}{10} = 0.1$] inch.
#. For a feed rate of 0.5 inch per second, the critical distance is
#. latexmath:[$ \frac{0.5^{2}}{10} = \frac{0.25}{10} = 0.025$] inch.
#. type: Title ==
#: src/user/user-concepts.adoc:200
#, no-wrap
msgid "G-code(((G-code)))"
msgstr ""

#. type: Title ===
#: src/user/user-concepts.adoc:202
#, no-wrap
msgid "Defaults"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:215
msgid ""
"When LinuxCNC first starts up many G- and M-codes are loaded by default. The "
"current active G- and M-codes can be viewed on the MDI tab in the 'Active G-"
"Codes:' window in the AXIS interface. These G- and M-codes define the "
"behavior of LinuxCNC and it is important that you understand what each one "
"does before running LinuxCNC. The defaults can be changed when running a G-"
"Code file and left in a different state than when you started your LinuxCNC "
"session. The best practice is to set the defaults needed for the job in the "
"preamble of your G-Code file and not assume that the defaults have not "
"changed. Printing out the G-Code <<gcode:quick-reference-table,Quick "
"Reference>> page can help you remember what each one is."
msgstr ""

#. type: Title ===
#: src/user/user-concepts.adoc:216
#, no-wrap
msgid "Feed Rate"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:221
msgid ""
"How the feed rate is applied depends on if an axis involved with the move is "
"a rotary axis. Read and understand the <<sub:feed-rate,Feed Rate>> section "
"if you have a rotary axis or a lathe."
msgstr ""

#. type: Title ===
#: src/user/user-concepts.adoc:222
#, no-wrap
msgid "Tool Radius Offset"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:232
msgid ""
"Tool Radius Offset (G41/42) requires that the tool be able to touch "
"somewhere along each programmed move without gouging the two adjacent moves. "
"If that is not possible with the current tool diameter you will get an "
"error. A smaller diameter tool may run without an error on the same path. "
"This means you can program a cutter to pass down a path that is narrower "
"than the cutter without any errors. See the <<sec:cutter-radius-compensation,"
"Cutter Compensation>> Section for more information."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:237
msgid ""
"After starting LinuxCNC each axis must be homed prior to running a program "
"or running a MDI command."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:240
msgid ""
"If your machine does not have home switches a match mark on each axis can "
"aid in homing the machine coordinates to the same place each time."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:242
msgid "Once homed your soft limits that are set in the ini file will be used."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:247
msgid ""
"If you want to deviate from the default behavior, or want to use the Mini "
"interface you will need to set the option NO_FORCE_HOMING = 1 in the [TRAJ] "
"section of your ini file.  More information on homing can be found in the "
"Integrator Manual."
msgstr ""

#. type: Title ==
#: src/user/user-concepts.adoc:248
#, no-wrap
msgid "Tool Changes"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:254
msgid ""
"There are several options when doing manual tool changes. See the <<sub:ini:"
"sec:emcio,[EMCIO] section>> for information on configuration of these "
"options. Also see the <<gcode:g28-g28.1,G28>> and <<gcode:g30-g30.1,G30>> "
"section of the G-code chapter."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:262
msgid ""
"The Coordinate Systems can be confusing at first. Before running a CNC "
"machine you must understand the basics of the coordinate systems used by "
"LinuxCNC. In depth information on the LinuxCNC Coordinate Systems is in the "
"<<cha:coordinate-system,Coordinate System>> Section of this manual."
msgstr ""

#. type: Title ===
#: src/user/user-concepts.adoc:263
#, no-wrap
msgid "G53 Machine Coordinate"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:267
msgid ""
"When you home LinuxCNC you set the G53 Machine Coordinate System to 0 for "
"each axis homed."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:269
msgid "No other coordinate systems or tool offsets are changed by homing."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:273
msgid ""
"The only time you move in the G53 machine coordinate system is when you "
"program a G53 on the same line as a move. Normally you are in the G54 "
"coordinate system."
msgstr ""

#. type: Title ===
#: src/user/user-concepts.adoc:274
#, no-wrap
msgid "G54-59.3 User Coordinates"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:283
msgid ""
"Normally you use the G54 Coordinate System. When an offset is applied to a "
"current user coordinate system a small blue ball with lines will be at the "
"<<sec:machine-coordinate-system, machine origin>> when your DRO is "
"displaying 'Position: Relative Actual' in Axis. If your offsets are "
"temporary use the Zero Coordinate System from the Machine menu or program "
"'G10 L2 P1 X0 Y0 Z0' at the end of your G-code file. Change the 'P' number "
"to suit the coordinate system you wish to clear the offset in."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:286
msgid ""
"Offsets stored in a user coordinate system are retained when LinuxCNC is "
"shut down."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:288
msgid ""
"Using the 'Touch Off' button in Axis sets an offset for the chosen User "
"Coordinate System."
msgstr ""

#. type: Title ===
#: src/user/user-concepts.adoc:289
#, no-wrap
msgid "When You Are Lost"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:294
msgid ""
"If you're having trouble getting 0,0,0 on the DRO when you think you should, "
"you may have some offsets programmed in and need to remove them."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:296
msgid "Move to the Machine origin with G53 G0 X0 Y0 Z0"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:297
msgid "Clear any G92 offset with G92.1"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:298
msgid "Use the G54 coordinate system with G54"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:300
msgid ""
"Set the G54 coordinate system to be the same as the machine coordinate "
"system with G10 L2 P1 X0 Y0 Z0 R0"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:301
msgid "Turn off tool offsets with G49"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:302
msgid "Turn on the Relative Coordinate Display from the menu"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:305
msgid ""
"Now you should be at the machine origin X0 Y0 Z0 and the relative coordinate "
"system should be the same as the machine coordinate system."
msgstr ""

#. type: Title ==
#: src/user/user-concepts.adoc:307
#, no-wrap
msgid "Machine Configurations"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:314
msgid ""
"The following diagram shows a typical mill showing direction of travel of "
"the tool and the mill table and limit switches. Notice how the mill table "
"moves in the opposite direction of the Cartesian coordinate system arrows "
"shown by the 'Tool Direction' image. This makes the 'tool' move in the "
"correct direction in relation to the material."
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:322
msgid ""
"Note also the position of the limit switches and the direction of activation "
"of their cams. Several combinations are possible, for example it is possible "
"(contrary to the drawing) to place a single fixed limit switch in the middle "
"of the table and two mobile cams to activate it. In this case the limits "
"will be reversed, +X will be on the right of the table and -X on the left. "
"This inversion does not change anything from the point of view of the "
"direction of movement of the tool."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/user/user-concepts.adoc:323 src/user/user-concepts.adoc:324
#, no-wrap
msgid "Typical Mill Configuration"
msgstr ""

#. type: Target for macro image
#: src/user/user-concepts.adoc:324
#, no-wrap
msgid "images/mill-diagram_en.svg"
msgstr ""

#. type: Plain text
#: src/user/user-concepts.adoc:328
msgid ""
"The following diagram shows a typical lathe showing direction of travel of "
"the tool and limit switches."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/user/user-concepts.adoc:329 src/user/user-concepts.adoc:330
#, no-wrap
msgid "Typical Lathe Configuration"
msgstr ""

#. type: Target for macro image
#: src/user/user-concepts.adoc:330
#, no-wrap
msgid "images/lathe-diagram_en.svg"
msgstr ""

#. type: Title =
#: src/user/user-foreword.adoc:5
#, no-wrap
msgid "User Foreword(((User Foreword)))"
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:11
msgid ""
"LinuxCNC is modular and flexible. These attributes lead many to see it as a "
"confusing jumble of little things and wonder why it is the way it is.  This "
"page attempts to answer that question before you get into the thick of "
"things."
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:17
msgid ""
"LinuxCNC started at the National Institute of Standards and Technology in "
"the USA. It grew up using Unix as its operating system. Unix made it "
"different. Among early Unix developers there grew a set of code writing "
"ideas that some call the Unix way. These early LinuxCNC authors followed "
"those ways."
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:24
msgid ""
"Eric S. Raymond, in his book The Art of Unix Programming, summarizes the "
"Unix philosophy as the widely-used engineering philosophy, \"Keep it Simple, "
"Stupid\" (KISS Principle). He then describes how he believes this overall "
"philosophy is applied as a cultural Unix norm, although unsurprisingly it is "
"not difficult to find severe violations of most of the following in actual "
"Unix practice:"
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:26
msgid "Rule of Modularity: Write simple parts connected by clean interfaces."
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:27
msgid "Rule of Clarity: Clarity is better than cleverness."
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:28
msgid "Rule of Composition: Design programs to be connected to other programs."
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:30
msgid ""
"Rule of Separation: Separate policy from mechanism; separate interfaces from "
"engines.footnote:[Found at http://en.wikipedia.org/wiki/Unix_philosophy, "
"07/06/2008]"
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:33
msgid ""
"Mr. Raymond offered several more rules but these four describe essential "
"characteristics of the LinuxCNC motion control system."
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:39
msgid ""
"The *Modularity* rule is critical. Throughout these handbooks you will find "
"talk of the interpreter or task planner or motion or HAL. Each of these is a "
"module or collection of modules. It's modularity that allows you to connect "
"together just the parts you need to run your machine."
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:46
msgid ""
"The *Clarity* rule is essential. LinuxCNC is a work in progress -- it is not "
"finished nor will it ever be. It is complete enough to run most of the "
"machines we want it to run. Much of that progress is achieved because many "
"users and code developers are able to look at the work of others and build "
"on what they have done."
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:52
msgid ""
"The *Composition* rule allows us to build a predictable control system from "
"the many modules available by making them connectable. We achieve "
"connectability by setting up standard interfaces to sets of modules and "
"following those standards."
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:57
msgid ""
"The *Separation* rule requires that we make distinct parts that do little "
"things. By separating functions debugging is much easier and replacement "
"modules can be dropped into the system and comparisons easily made."
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:66
msgid ""
"What does the Unix way mean for you as a user of LinuxCNC. It means that you "
"are able to make choices about how you will use the system. Many of these "
"choices are a part of machine integration, but many also affect the way you "
"will use your machine. As you read you will find many places where you will "
"need to make comparisons. Eventually you will make choices, \"I'll use this "
"interface rather than that” or, “I'll write part offsets this way rather "
"than that way.\" Throughout these handbooks we describe the range of "
"abilities currently available."
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:69
msgid ""
"As you begin your journey into using LinuxCNC we offer two cautionary notes:"
"footnote:[Found at http://en.wikipedia.org/wiki/Unix_philosophy, 07/06/2008]"
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:73
msgid ""
"Paraphrasing the words of Doug Gwyn on UNIX: \"LinuxCNC was not designed to "
"stop its users from doing stupid things, as that would also stop them from "
"doing clever things.\""
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:75
msgid ""
"Likewise the words of Steven King: \"LinuxCNC is user-friendly. It just "
"isn't promiscuous about which users it's friendly with.\""
msgstr ""

#. type: Plain text
#: src/user/user-foreword.adoc:82
msgid ""
"A series of videos on YouTube provide plenty of evidence a transition to "
"LinuxCNC is possible no matter what your regular computer operating system "
"may be. That said, with the advent of additive manufacturing like 3D "
"printing there is an increasing interest by the broader IT community in CNC "
"machining and it should be possible to find someone with complementary "
"skills/equipment near to you to jointly overcome the initial hurdles."
msgstr ""

#. type: Title =
#: src/user/user-intro.adoc:5
#, no-wrap
msgid "LinuxCNC User Introduction(((LinuxCNC User Introduction,User Introduction)))"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:14
msgid ""
"This document is focused on the use of LinuxCNC, it is intended for readers "
"who have already installed and configured it. Some information on "
"installation is given in the following chapters.  The complete documentation "
"on installation and configuration can be found in the integrator's manual."
msgstr ""

#. type: Title ==
#: src/user/user-intro.adoc:16
#, no-wrap
msgid "How LinuxCNC Works"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:21
msgid ""
"LinuxCNC is a suite of highly-customisable applications for the control of a "
"Computer Numerically Controlled (CNC) mills and lathes, 3D printers, robots, "
"laser cutters, plasma cutters and other automated devices. It is capable of "
"providing coordinated control of up to 9 axes of movement."
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:24
msgid ""
"At its heart, LinuxCNC consists of several key components that are "
"integrated together to form one complete system:"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:27
msgid ""
"a Graphical User Interface (GUI), which forms the basic interface between "
"the operator, the software and the CNC machine itself;"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:29
msgid ""
"the <<cha:hal-introduction,Hardware Abstraction Layer>> (HAL), which "
"provides a method of linking all the various internal virtual signals "
"generated and received by LinuxCNC with the outside world, and"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:32
msgid ""
"the high level controllers that coordinate the generation and execution of "
"motion control of the CNC machine, namely the motion controller (EMCMOT), "
"the discrete input/output controller (EMCIO) and the task executor (EMCTASK)."
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:35
msgid ""
"The below illustration is a simple block diagram showing what a typical 3-"
"axis, CNC mill with stepper motors might look like:"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/user/user-intro.adoc:36 src/user/user-intro.adoc:37
#, no-wrap
msgid "Simple LinuxCNC Controlled Machine"
msgstr ""

#. type: Target for macro image
#: src/user/user-intro.adoc:37
#, no-wrap
msgid "images/whatstep1.png"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:43
msgid ""
"A computer running LinuxCNC sends a sequence of pulses via the parallel port "
"to the stepper drives, each of which has one stepper motor connected to it. "
"Each drive receives two independent signals; one signal to command the drive "
"to move its associated stepper motor in a clockwise or anti-clockwise "
"direction, and a second signal that defines the speed at which that stepper "
"motor rotates."
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:49
msgid ""
"While a stepper motor system under parallel port control is illustrated, a "
"LinuxCNC system can also take advantage of a wide variety of dedicated "
"hardware motion control interfaces for increased speed and I/O capabilities. "
"A full list of interfaces supported by LinuxCNC can be found on the http://"
"http://wiki.linuxcnc.org/cgi-bin/wiki.pl?"
"LinuxCNC_Supported_Hardware[Supported Hardware] page of the Wiki."
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:56
msgid ""
"In most circumstances, users will create a configuration specific to their "
"mill setup using either the <<cha:stepconf-wizard,Stepper Configuration "
"Wizard>> (for CNC systems operating using the computers' parallel port) or "
"the <<cha:pncconf-wizard,Mesa Hardware Wizard>> (for more advanced systems "
"utilising a Mesa Anything I/O PCI card). Running either wizard will create "
"several folders on the computers' hard drive containing a number of "
"configuration files specific to that CNC machine, and an icon placed on the "
"desktop to allow easy launching of LinuxCNC."
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:60
msgid ""
"For example, if the Stepper Configuration Wizard was used to create a setup "
"for the 3-axis CNC mill illustrated above entitled 'My_CNC', the folders "
"created by the wizard would typically contain the following files:"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:62
#, no-wrap
msgid "*Folder: `My_CNC`*\n"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:67
#, no-wrap
msgid ""
"*`My_CNC.ini`* +\n"
"The INI file contains all the basic hardware information regarding the operation of the CNC mill such\n"
"as the number of steps each stepper motor must turn to complete one full revolution, the maximum rate at\n"
"which each stepper may operate at, the limits of travel of each axis or the configuration and behaviour of\n"
"limit switches on each axis.\n"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:72
#, no-wrap
msgid ""
"*`My_CNC.hal`* +\n"
"This HAL file contains information that tells LinuxCNC how to link the internal virtual signals to\n"
"physical connections beyond the computer. For example, specifying pin 4 on the parallel port to send out\n"
"the Z axis step direction signal, or directing LinuxCNC to cease driving the X axis motor when a limit\n"
"switch is triggered on parallel port pin 13.\n"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:77
#, no-wrap
msgid ""
"*`custom.HAL`* +\n"
"Customisations to the mill configuration beyond the scope of the wizard may be performed by including\n"
"further links to other virtual points within LinuxCNC in this HAL file. When starting a LinuxCNC session,\n"
"this file is read and processed before the GUI is loaded. An example may include initiating Modbus\n"
"communications to the spindle motor so that it is confirmed as operational before the GUI is displayed.\n"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:82
#, no-wrap
msgid ""
"*`custom_postgui.hal`* +\n"
"The custom_postgui HAL file allows further customisation of LinuxCNC, but differs from custom.HAL in\n"
"that it is processed after the GUI is displayed. For example, after establishing Modbus communications to\n"
"the spindle motor in custom.hal, LinuxCNC can use the custom_postgui file to link the spindle speed readout\n"
"from the motor drive to a bargraph displayed on the GUI.\n"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:88
#, no-wrap
msgid ""
"*`postgui_backup.hal`* +\n"
"This is provided as a backup copy of the custom_postgui.hal file to allow the user to quickly restore a\n"
"previously-working postgui HAL configuration. This is especially useful if the user wants to run the\n"
"Configuration Wizard again under the same 'My_CNC' name in order to modify some parameters of the mill.\n"
"Saving the mill configuration in the Wizard will overwrite the existing custom_postgui file while leaving\n"
"the postgui_backup file untouched.\n"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:92
#, no-wrap
msgid ""
"*`tool.tbl`* +\n"
"A tool table file contains a parameterised list of any cutting tools used by the mill. These parameters\n"
"can include cutter diameter and length, and is used to provide a catalogue of data that tells LinuxCNC how\n"
"to compensate its motion for different sized tools within a milling operation.\n"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:95
#, no-wrap
msgid ""
"*Folder: `nc_files`* +\n"
"The nc_files folder is provided as a default location to store the G-code programs used to drive the\n"
"mill. It also includes a number of subfolders with G-code examples.\n"
msgstr ""

#. type: Title ==
#: src/user/user-intro.adoc:97
#, no-wrap
msgid "Graphical User Interfaces(((Graphical User Interfaces)))"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:102
msgid ""
"A graphical user interface is the part of the LinuxCNC that the machine tool "
"operator interacts with.  LinuxCNC comes with several types of user "
"interfaces which may be chosen from by editing certain fields contained in "
"the <<cha:ini-configuration,INI file>>:"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:105
msgid ""
"<<cha:axis-gui,AXIS>>, the standard keyboard GUI interface. This is also the "
"default GUI launched when a Configuration Wizard is used to create a desktop "
"icon launcher:"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/user/user-intro.adoc:107 src/user/user-intro.adoc:108
#, no-wrap
msgid "AXIS, the standard keyboard GUI interface"
msgstr ""

#. type: Target for macro image
#: src/user/user-intro.adoc:108
#, no-wrap
msgid "../gui/images/axis.png"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:111
msgid "<<cha:touchy-gui,Touchy>>, a touch screens GUI:"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/user/user-intro.adoc:113 src/user/user-intro.adoc:114
#, no-wrap
msgid "Touchy, a touch screen GUI"
msgstr ""

#. type: Target for macro image
#: src/user/user-intro.adoc:114
#, no-wrap
msgid "../gui/images/touchy.png"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:117
msgid "<<cha:gscreen,Gscreen>>, a user-configurable touch screen GUI:"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/user/user-intro.adoc:119 src/user/user-intro.adoc:120
#, no-wrap
msgid "Gscreen, a configurable base touch screen GUI"
msgstr ""

#. type: Target for macro image
#: src/user/user-intro.adoc:120
#, no-wrap
msgid "../gui/images/gscreen-mill.png"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:124
msgid ""
"<<cha:gmoccapy,GMOCCAPY>>, a touch screen GUI based on Gscreen. GMOCCAPY is "
"also designed to work equally well in applications where a keyboard and "
"mouse are the preferred methods of controlling the GUI:"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/user/user-intro.adoc:126 src/user/user-intro.adoc:127
#, no-wrap
msgid "GMOCCAPY, a touch screen GUI based on Gscreen"
msgstr ""

#. type: Target for macro image
#: src/user/user-intro.adoc:127
#, no-wrap
msgid "../gui/images/gmoccapy_3_axis.png"
msgstr ""

#. type: TH
#: src/user/user-intro.adoc:129 man/man1/ngcgui.1:25
#, no-wrap
msgid "NGCGUI"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:132
msgid ""
"<<cha:ngcgui,NGCGUI>>, a subroutine GUI that provides wizard-style "
"programming of G code. NGCGUI may be run as a standalone program or embedded "
"into another GUI as a series of tabs. The following screen shot shows NGCGUI "
"embedded into Axis:"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/user/user-intro.adoc:134 src/user/user-intro.adoc:135
#, no-wrap
msgid "NGCGUI, a graphical interface integrated into AXIS"
msgstr ""

#. type: Target for macro image
#: src/user/user-intro.adoc:135
#, no-wrap
msgid "../gui/images/ngcgui.png"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:139
msgid ""
"<<sec:tklinuxcnc-intro,TkLinuxCNC>>, another interface based on Tcl/Tk.  "
"Once the most popular interface after AXIS."
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/user/user-intro.adoc:141 src/user/user-intro.adoc:142
#, no-wrap
msgid "TkLinuxCNC graphical interface"
msgstr ""

#. type: Target for macro image
#: src/user/user-intro.adoc:142
#, no-wrap
msgid "images/tklinuxcnc_fr.png"
msgstr ""

#. type: Labeled list
#: src/user/user-intro.adoc:144
#, no-wrap
msgid "Xemc"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:145
msgid "an X-Window program"
msgstr ""

#. type: Labeled list
#: src/user/user-intro.adoc:146
#, no-wrap
msgid "halui"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:148
msgid ""
"A HAL based user interface allowing to control LinuxCNC using buttons and "
"switches"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:151
msgid ""
"A telnet based user interface allowing to send commands from remote "
"computers."
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:157
msgid ""
"As mentioned above, many of LinuxCNC's GUIs may be customized by the user. "
"This may be done to add indicators, readouts, switches or sliders to the "
"basic appearance of one of the GUIs for increased flexibility or "
"functionality. Two styles of Virtual Control Panel are offered in LinuxCNC:"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:162
msgid ""
"<<cha:pyvcp,'PyVCP'>>, a Python-based virtual control panel that can be "
"added to the Axis GUI. PyVCP only utilises virtual signals contained within "
"the Hardware Abstraction Layer, such as the spindle-at-speed indicator or "
"the Emergency Stop output signal, and has a simple no-frills appearance. "
"This makes it an excellent choice if the user wants to add a Virtual Control "
"Panel with minimal fuss."
msgstr ""

#. type: Block title
#: src/user/user-intro.adoc:163
#, no-wrap
msgid "PyVCP Example Embedded Into AXIS GUI"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/user/user-intro.adoc:164
#, no-wrap
msgid "PyVCP embedded into Axis"
msgstr ""

#. type: Target for macro image
#: src/user/user-intro.adoc:164
#, no-wrap
msgid "../gui/images/axis-pyvcp.png"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:170
msgid ""
"<<cha:glade-vcp,'GladeVCP'>>, a Glade-based virtual control panel that can "
"be added to the Axis or Touchy GUIs. GladeVCP has the advantage over PyVCP "
"in that it is not limited to the display or control of HAL virtual signals, "
"but can include other external interfaces outside LinuxCNC such as window or "
"network events. GladeVCP is also more flexible in how it may be configured "
"to appear on the GUI:"
msgstr ""

#. type: Block title
#: src/user/user-intro.adoc:171
#, no-wrap
msgid "GladeVCP Example Embedded Into AXIS GUI"
msgstr ""

#. type: Positional ($1) AttributeList argument for macro 'image'
#: src/user/user-intro.adoc:172
#, no-wrap
msgid "GladeVCP embedded into Axis"
msgstr ""

#. type: Target for macro image
#: src/user/user-intro.adoc:172
#, no-wrap
msgid "../gui/images/axis-gladevcp.png"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:181
msgid ""
"LinuxCNC uses translation files to translate LinuxCNC User Interfaces into "
"many languages including French, German, Italian, Finnish, Russian, "
"Romanian, Portuguese and Chinese.  Assuming a translation has been created, "
"LinuxCNC will automatically use whatever native language you log in with "
"when starting the Linux operating system. If your language has not been "
"translated, contact a developer on the IRC, the mailing list or the User "
"Forum for assistance."
msgstr ""

#. type: Title ==
#: src/user/user-intro.adoc:183
#, no-wrap
msgid "Think Like a CNC Operator"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:192
msgid ""
"This manual does not pretend to teach you how to use a lathe or a milling "
"machine. Becoming an experienced operator takes a lot of time and requires a "
"lot of work. An author once said, _We learn by experience, if one possesses "
"it all_.  Broken tools, vices attacked and the scars are evidence of the "
"lessons learned. A beautiful finish, tight tolerances and caution during the "
"work are evidence of lessons learned. No machine nor program can replace "
"human experience."
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:199
msgid ""
"Now that you start working with the LinuxCNC software, you have to put "
"yourself in the shoes of an operator. You must be in the role of someone in "
"charge of a machine. It's a machine that will wait for your commands and "
"then execute the orders that you will give it. In these pages, we will give "
"the explanations which will help you to become a good CNC operator with "
"LinuxCNC."
msgstr ""

#. type: Title ==
#: src/user/user-intro.adoc:201
#, no-wrap
msgid "Modes of Operation"
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:208
msgid ""
"When LinuxCNC is running, there are three different major modes used for "
"inputting commands. These are Manual, Auto, and Manual Data Input (MDI). "
"Changing from one mode to another makes a big difference in the way that the "
"LinuxCNC control behaves. There are specific things that can be done in one "
"mode that cannot be done in another. An operator can home an axis in manual "
"mode but not in auto or MDI modes. An operator can cause the machine to "
"execute a whole file full of G-codes in the auto mode but not in manual or "
"MDI."
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:216
msgid ""
"In manual mode, each command is entered separately. In human terms a manual "
"command might be \"turn on coolant\" or \"jog X at 25 inches per minute\". "
"These are roughly equivalent to flipping a switch or turning the hand wheel "
"for an axis. These commands are normally handled on one of the graphical "
"interfaces by pressing a button with the mouse or holding down a key on the "
"keyboard. In auto mode, a similar button or key press might be used to load "
"or start the running of a whole program of G-code that is stored in a file. "
"In the MDI mode the operator might type in a block of code and tell the "
"machine to execute it by pressing the <return> or <enter> key on the "
"keyboard."
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:220
msgid ""
"Some motion control commands are available concurrently and will cause the "
"same changes in motion in all modes. These include Abort, Emergency Stop, "
"and Feed Rate Override. Commands like these should be self explanatory."
msgstr ""

#. type: Plain text
#: src/user/user-intro.adoc:225
msgid ""
"The AXIS user interface hides some of the distinctions between Auto and the "
"other modes by making Auto-commands available at most times. It also blurs "
"the distinction between Manual and MDI because some Manual commands like "
"Touch Off are actually implemented by sending MDI commands. It does this by "
"automatically changing to the mode that is needed for the action the user "
"has requested."
msgstr ""

#. type: Plain text
#: src/gui/panelui_handler.py:4
#, no-wrap
msgid ""
"# standard handler call - This will always be required\n"
"def get_handlers(linuxcnc_stat, linucnc_cmd, commands, master):\n"
"     return [HandlerClass(linuxcnc_stat, linucnc_cmd, commands, master)]\n"
msgstr ""

#. type: Plain text
#: src/gui/panelui_handler.py:7
msgid "# Also required - handler class class HandlerClass:"
msgstr ""

#. type: Plain text
#: src/gui/panelui_handler.py:13
#, no-wrap
msgid ""
"    # This will be pretty standard to gain access to everything\n"
"    # linuxcnc_stat: is the python status instance of linuxcnc\n"
"    # linuxcnc_cmd: is the python command instance of linuxcnc\n"
"    # commands: is the command instance so one can call the internal routines\n"
"    # master: give access to the master functions/data\n"
msgstr ""

#. type: Plain text
#: src/gui/panelui_handler.py:17
#, no-wrap
msgid ""
"    def __init__(self, linuxcnc_stat, linuxcnc_cmd, commands, master):\n"
"        self.parent = commands\n"
"        self.current_mode = 0\n"
msgstr ""

#. type: Plain text
#: src/gui/panelui_handler.py:28
#, no-wrap
msgid ""
"    # command functions are expected to have this layout:\n"
"    # def some_name(self, widget_instance, arguments from widget):\n"
"    # widget_instance gives access to the calling widget's function/data\n"
"    # arguments can be a list of arguments, a single argument, or None\n"
"    # depending on what was given in panelui's INI file.\n"
"    def hello_world(self, wname, m):\n"
"        # print to terminal so we know it worked\n"
"        print('\\nHello world\\n')\n"
"        print(m)     # print the argument(s)\n"
"        print(wname.metadata)    # Print the calling widgets internal metadata (from config file)\n"
msgstr ""

#. type: Plain text
#: src/gui/panelui_handler.py:33
#, no-wrap
msgid ""
"        # call a mdi command to print a msg in linuxcnc\n"
"        # This requires linuxcnc to be homed, but does not check for that.\n"
"        # parent commands expect a widget_instance - None is substituted\n"
"        self.parent.mdi(None,'(MSG, Hello Linuxcnc World!)')\n"
msgstr ""

#. type: Plain text
#: src/gui/panelui_handler.py:46
#, no-wrap
msgid ""
"    # Each call to this function will cycle the mode of linuxcnc\n"
"    def cycle_mode(self, wname, m):\n"
"        if self.current_mode == 0:\n"
"            self.current_mode = 1\n"
"            self.parent.set_mdi_mode()\n"
"        elif self.current_mode == 1:\n"
"            self.current_mode = 2\n"
"            self.parent.set_auto_mode()\n"
"        else:\n"
"            self.current_mode = 0\n"
"            self.parent.set_manual_mode()\n"
"        print(self.current_mode)\n"
msgstr ""

#. type: Plain text
#: src/gui/panelui_handler.py:51
#, no-wrap
msgid ""
"    # Boiler code, often required\n"
"    def __getitem__(self, item):\n"
"        return getattr(self, item)\n"
"    def __setitem__(self, item, value):\n"
"        return setattr(self, item, value)\n"
msgstr ""

#. type: TH
#: man/man1/5axisgui.1:25
#, no-wrap
msgid "5Axisgui"
msgstr ""

#. type: TH
#: man/man1/5axisgui.1:25 man/man1/debuglevel.1:25 man/man1/gladevcp_demo.1:25
#: man/man1/gmoccapy.1:25 man/man1/gremlin_view.1:25 man/man1/gscreen.1:25
#: man/man1/halcmd_twopass.1:25 man/man1/hal-histogram.1:25
#: man/man1/halreport.1:25 man/man1/halrmt.1:25 man/man1/halscope.1:25
#: man/man1/halshow.1:25 man/man1/hbmgui.1:25 man/man1/hexagui.1:25
#: man/man1/image-to-gcode.1:25 man/man1/inivar.1:25 man/man1/latency-test.1:25
#: man/man1/lineardelta.1:25 man/man1/linuxcnc_info.1:25
#: man/man1/linuxcnclcd.1:25 man/man1/linuxcncmkdesktop.1:25
#: man/man1/linuxcnc_module_helper.1:25 man/man1/linuxcncsvr.1:25
#: man/man1/linuxcnctop.1:25 man/man1/linuxcnc_var.1:25
#: man/man1/maho600gui.1:25 man/man1/max5gui.1:25 man/man1/mdi.1:25
#: man/man1/monitor-xhc-hb04.1:25 man/man1/motion-logger.1:25
#: man/man1/ngcgui.1:25 man/man1/panelui.1:25 man/man1/pncconf.1:25
#: man/man1/puma560gui.1:25 man/man1/pumagui.1:25 man/man1/pyngcgui.1:25
#: man/man1/pyui.1:25 man/man1/pyvcp_demo.1:25 man/man1/qtvcp.1:25
#: man/man1/rotarydelta.1:25 man/man1/rs274.1:25 man/man1/rtapi_app.1:25
#: man/man1/scaragui.1:25 man/man1/schedrmt.1:25 man/man1/scorbot-er-3.1:25
#: man/man1/simulate_probe.1:25 man/man1/stepconf.1:25 man/man1/teach-in.1:25
#: man/man1/tooledit.1:25 man/man1/touchy.1:25 man/man1/update_ini.1:25
#: man/man1/xhc-hb04-accels.1:25 man/man1/xyzac-trt-gui.1:25
#: man/man1/xyzbc-trt-gui.1:25
#, no-wrap
msgid "2020-08-26"
msgstr ""

#. type: TH
#: man/man1/5axisgui.1:25 man/man1/axis.1:26 man/man1/axis-remote.1:26
#: man/man1/debuglevel.1:25 man/man1/elbpcom.1:2 man/man1/gladevcp.1:22
#: man/man1/gladevcp_demo.1:25 man/man1/gmoccapy.1:25
#: man/man1/gremlin_view.1:25 man/man1/gs2_vfd.1:26 man/man1/gscreen.1:25
#: man/man1/halcmd.1:30 man/man1/halcmd_twopass.1:25 man/man1/halcompile.1:25
#: man/man1/hal-histogram.1:25 man/man1/hal_input.1:1
#: man/man1/hal_manualtoolchange.1:23 man/man1/halmeter.1:26
#: man/man1/hal_parport.1:23 man/man1/halreport.1:25 man/man1/halrmt.1:25
#: man/man1/halrun.1:30 man/man1/halsampler.1:26 man/man1/halscope.1:25
#: man/man1/halshow.1:25 man/man1/haltcl.1:30 man/man1/halui.1:26
#: man/man1/hbmgui.1:25 man/man1/hexagui.1:25 man/man1/hy_vfd.1:25
#: man/man1/image-to-gcode.1:25 man/man1/inivar.1:25 man/man1/io.1:1
#: man/man1/iocontrol.1:1 man/man1/iov2.1:25 man/man1/latency-histogram.1:25
#: man/man1/latency-plot.1:25 man/man1/latency-test.1:25
#: man/man1/lineardelta.1:25 man/man1/linuxcnc_info.1:25
#: man/man1/linuxcnclcd.1:25 man/man1/linuxcncmkdesktop.1:25
#: man/man1/linuxcnc_module_helper.1:25 man/man1/linuxcncsvr.1:25
#: man/man1/linuxcnctop.1:25 man/man1/linuxcnc_var.1:25
#: man/man1/maho600gui.1:25 man/man1/max5gui.1:25 man/man1/mb2hal.1:29
#: man/man1/mdi.1:25 man/man1/mitsub_vfd.1:1 man/man1/monitor-xhc-hb04.1:25
#: man/man1/motion-logger.1:25 man/man1/moveoff_gui.1:25 man/man1/ngcgui.1:25
#: man/man1/panelui.1:25 man/man1/pi500_vfd.1:9 man/man1/pmx485.1:25
#: man/man1/pmx485-test.1:25 man/man1/pncconf.1:25 man/man1/puma560gui.1:25
#: man/man1/pumagui.1:25 man/man1/pyngcgui.1:25 man/man1/pyui.1:25
#: man/man1/pyvcp.1:22 man/man1/pyvcp_demo.1:25
#: man/man1/qtplasmac-cfg2prefs.1:25 man/man1/qtplasmac-materials.1:25
#: man/man1/qtplasmac-plasmac2qt.1:25 man/man1/qtplasmac-setup.1:25
#: man/man1/qtvcp.1:25 man/man1/rotarydelta.1:25 man/man1/rs274.1:25
#: man/man1/rtapi_app.1:25 man/man1/scaragui.1:25 man/man1/schedrmt.1:25
#: man/man1/scorbot-er-3.1:25 man/man1/shuttle.1:1 man/man1/sim_pin.1:25
#: man/man1/simulate_probe.1:25 man/man1/stepconf.1:25 man/man1/teach-in.1:25
#: man/man1/thermistor.1:9 man/man1/tooledit.1:25 man/man1/touchy.1:25
#: man/man1/update_ini.1:25 man/man1/vfdb_vfd.1:26 man/man1/vfs11_vfd.1:25
#: man/man1/wj200_vfd.1:9 man/man1/xhc-hb04.1:1 man/man1/xhc-hb04-accels.1:25
#: man/man1/xyzac-trt-gui.1:25 man/man1/xyzbc-trt-gui.1:25
#: man/man3/hal_add_funct_to_thread.3hal:1 man/man3/hal_create_thread.3hal:1
#: man/man3/hal_exit.3hal:1 man/man3/hal_export_funct.3hal:1
#: man/man3/hal_init.3hal:1 man/man3/hal_malloc.3hal:1
#: man/man3/hal_param_alias.3hal:1 man/man3/hal_param_new.3hal:1
#: man/man3/hal_parport.3hal:1 man/man3/hal_pin_alias.3hal:1
#: man/man3/hal_pin_new.3hal:1 man/man3/hal_port.3hal:1
#: man/man3/hal_ready.3hal:1 man/man3/hal_set_constructor.3hal:1
#: man/man3/hal_set_lock.3hal:1 man/man3/hal_signal_new.3hal:1
#: man/man3/hal_start_threads.3hal:1 man/man3/hal_stream.3hal:1
#: man/man3/hal_type_t.3hal:1 man/man3/hm2_allocate_bspi_tram.3hm2:4
#: man/man3/hm2_bspi_set_read_function.3hm2:4
#: man/man3/hm2_bspi_setup_chan.3hm2:3
#: man/man3/hm2_bspi_set_write_function.3hm2:4
#: man/man3/hm2_bspi_write_chan.3hm2:3 man/man3/hm2_pktuart_read.3hm2:3
#: man/man3/hm2_pktuart_send.3hm2:3 man/man3/hm2_pktuart_setup.3hm2:3
#: man/man3/hm2_tram_add_bspi_frame.3hm2:3 man/man3/hm2_uart_read.3hm2:3
#: man/man3/hm2_uart_send.3hm2:3 man/man3/hm2_uart_setup.3hm2:3
#: man/man3/intro.3hal:1 man/man3/intro.3rtapi:1
#: man/man3/PM_ROTATION_VECTOR.3:1 man/man3/rtapi_app_exit.3rtapi:1
#: man/man3/rtapi_app_main.3rtapi:1 man/man3/rtapi_atomic.3rtapi:1
#: man/man3/rtapi_bool.3rtapi:22 man/man3/rtapi_byteorder.3rtapi:22
#: man/man3/rtapi_clock_set_period.3rtapi:1 man/man3/rtapi_delay.3rtapi:1
#: man/man3/rtapi_device.3rtapi:22 man/man3/rtapi_div_u64.3rtapi:16
#: man/man3/rtapi_exit.3rtapi:1 man/man3/rtapi_firmware.3rtapi:22
#: man/man3/rtapi_get_time.3rtapi:1 man/man3/rtapi_gfp.3rtapi:22
#: man/man3/rtapi_init.3rtapi:1 man/man3/rtapi_io.3rtapi:22
#: man/man3/rtapi_is.3rtapi:22 man/man3/rtapi_list.3rtapi:22
#: man/man3/rtapi_module_param.3rtapi:1 man/man3/rtapi_mutex.3rtapi:1
#: man/man3/rtapi_open_as_root.3rtapi:1 man/man3/rtapi_outb.3rtapi:1
#: man/man3/rtapi_parport.3rtapi:22 man/man3/rtapi_pci.3rtapi:22
#: man/man3/rtapi_print.3rtapi:1 man/man3/rtapi_prio.3rtapi:1
#: man/man3/rtapi_region.3rtapi:1 man/man3/rtapi_set_msg_level.3rtapi:1
#: man/man3/rtapi_shmem.3rtapi:1 man/man3/rtapi_slab.3rtapi:22
#: man/man3/rtapi_snprintf.3rtapi:1 man/man3/rtapi_stdint.3rtapi:22
#: man/man3/rtapi_string.3rtapi:22 man/man3/rtapi_strlcpy.3rtapi:22
#: man/man3/rtapi_task_new.3rtapi:1 man/man3/rtapi_task_pause.3rtapi:1
#: man/man3/rtapi_task_self.3rtapi:1 man/man3/rtapi_task_start.3rtapi:1
#: man/man3/rtapi_task_wait.3rtapi:1 man/man3/undocumented.3hal:1
#: man/man3/undocumented.3rtapi:1 man/man9/abs.9:9 man/man9/abs_s32.9:9
#: man/man9/and2.9:9 man/man9/at_pid.9:1 man/man9/axistest.9:9
#: man/man9/bin2gray.9:9 man/man9/biquad.9:9 man/man9/bitslice.9:9
#: man/man9/bitwise.9:9 man/man9/bldc.9:9 man/man9/blend.9:9
#: man/man9/carousel.9:9 man/man9/charge_pump.9:9 man/man9/clarke2.9:9
#: man/man9/clarke3.9:9 man/man9/clarkeinv.9:9 man/man9/classicladder.9:2
#: man/man9/comp.9:9 man/man9/constant.9:9 man/man9/conv_bit_float.9:9
#: man/man9/conv_bit_s32.9:9 man/man9/conv_bit_u32.9:9
#: man/man9/conv_float_s32.9:9 man/man9/conv_float_u32.9:9
#: man/man9/conv_s32_bit.9:9 man/man9/conv_s32_float.9:9
#: man/man9/conv_s32_u32.9:9 man/man9/conv_u32_bit.9:9
#: man/man9/conv_u32_float.9:9 man/man9/conv_u32_s32.9:9
#: man/man9/corexy_by_hal.9:9 man/man9/counter.9:1 man/man9/dbounce.9:9
#: man/man9/ddt.9:9 man/man9/deadzone.9:9 man/man9/debounce.9:1
#: man/man9/demux.9:9 man/man9/differential.9:9 man/man9/edge.9:9
#: man/man9/encoder.9:1 man/man9/encoder_ratio.9:1
#: man/man9/eoffset_per_angle.9:9 man/man9/estop_latch.9:9
#: man/man9/feedcomp.9:9 man/man9/filter_kalman.9:9 man/man9/flipflop.9:9
#: man/man9/gantry.9:9 man/man9/gantrykins.9:1 man/man9/gearchange.9:9
#: man/man9/gentrivkins.9:1 man/man9/gladevcp.9:2 man/man9/gray2bin.9:9
#: man/man9/hal_bb_gpio.9:1 man/man9/histobins.9:9 man/man9/hm2_7i43.9:1
#: man/man9/hm2_7i90.9:1 man/man9/hm2_eth.9:22 man/man9/hm2_pci.9:1
#: man/man9/hm2_rpspi.9:23 man/man9/hm2_spi.9:22 man/man9/hostmot2.9:1
#: man/man9/hypot.9:9 man/man9/ilowpass.9:9 man/man9/integ.9:9
#: man/man9/invert.9:9 man/man9/joyhandle.9:9 man/man9/kins.9:1
#: man/man9/knob2float.9:9 man/man9/latencybins.9:9 man/man9/lcd.9:1
#: man/man9/limit1.9:9 man/man9/limit2.9:9 man/man9/limit3.9:9
#: man/man9/lincurve.9:9 man/man9/lineardeltakins.9:1 man/man9/logic.9:9
#: man/man9/lowpass.9:9 man/man9/lut5.9:9 man/man9/maj3.9:9 man/man9/match8.9:9
#: man/man9/matrix_kb.9:3 man/man9/max31855.9:9 man/man9/mesa_7i65.9:9
#: man/man9/mesa_pktgyro_test.9:9 man/man9/message.9:9 man/man9/millturn.9:9
#: man/man9/minmax.9:9 man/man9/motion.9:1 man/man9/moveoff.9:9
#: man/man9/mult2.9:9 man/man9/multiclick.9:9 man/man9/multiswitch.9:9
#: man/man9/mux16.9:9 man/man9/mux2.9:9 man/man9/mux4.9:9 man/man9/mux8.9:9
#: man/man9/mux_generic.9:3 man/man9/near.9:9 man/man9/not.9:9
#: man/man9/offset.9:9 man/man9/ohmic.9:9 man/man9/oneshot.9:9
#: man/man9/opto_ac5.9:2 man/man9/or2.9:9 man/man9/orient.9:9 man/man9/pid.9:1
#: man/man9/plasmac.9:9 man/man9/pwmgen.9:1 man/man9/rosekins.9:1
#: man/man9/sample_hold.9:9 man/man9/sampler.9:26 man/man9/scale.9:9
#: man/man9/select8.9:9 man/man9/serport.9:9 man/man9/setsserial.9:3
#: man/man9/siggen.9:1 man/man9/sim_axis_hardware.9:9 man/man9/sim_encoder.9:1
#: man/man9/sim_home_switch.9:9 man/man9/sim_matrix_kb.9:9
#: man/man9/sim_parport.9:9 man/man9/simple_tp.9:9 man/man9/sim_spindle.9:9
#: man/man9/sphereprobe.9:9 man/man9/spindle.9:9 man/man9/spindle_monitor.9:9
#: man/man9/sserial.9:3 man/man9/stepgen.9:1 man/man9/steptest.9:9
#: man/man9/streamer.9:10 man/man9/sum2.9:9 man/man9/supply.9:1
#: man/man9/thc.9:9 man/man9/thcud.9:9 man/man9/threads.9:1
#: man/man9/threadtest.9:9 man/man9/time.9:9 man/man9/timedelay.9:9
#: man/man9/timedelta.9:9 man/man9/toggle2nist.9:9 man/man9/toggle.9:9
#: man/man9/tristate_bit.9:9 man/man9/tristate_float.9:9 man/man9/updown.9:9
#: man/man9/userkins.9:9 man/man9/watchdog.9:1 man/man9/wcomp.9:9
#: man/man9/weighted_sum.9:1 man/man9/xhc_hb04_util.9:9 man/man9/xor2.9:9
#, no-wrap
msgid "LinuxCNC Documentation"
msgstr ""

#. type: TH
#: man/man1/5axisgui.1:25 man/man1/axis.1:26 man/man1/axis-remote.1:26
#: man/man1/debuglevel.1:25 man/man1/gladevcp.1:22 man/man1/gladevcp_demo.1:25
#: man/man1/gmoccapy.1:25 man/man1/gremlin_view.1:25 man/man1/gscreen.1:25
#: man/man1/halcmd_twopass.1:25 man/man1/halcompile.1:25
#: man/man1/hal-histogram.1:25 man/man1/halreport.1:25 man/man1/halrmt.1:25
#: man/man1/halscope.1:25 man/man1/halshow.1:25 man/man1/hbmgui.1:25
#: man/man1/hexagui.1:25 man/man1/image-to-gcode.1:25 man/man1/inivar.1:25
#: man/man1/iov2.1:25 man/man1/latency-histogram.1:25
#: man/man1/latency-plot.1:25 man/man1/latency-test.1:25
#: man/man1/lineardelta.1:25 man/man1/linuxcnc_info.1:25
#: man/man1/linuxcnclcd.1:25 man/man1/linuxcncmkdesktop.1:25
#: man/man1/linuxcnc_module_helper.1:25 man/man1/linuxcncrsh.1:1
#: man/man1/linuxcncsvr.1:25 man/man1/linuxcnctop.1:25
#: man/man1/linuxcnc_var.1:25 man/man1/maho600gui.1:25 man/man1/max5gui.1:25
#: man/man1/mdi.1:25 man/man1/milltask.1:1 man/man1/monitor-xhc-hb04.1:25
#: man/man1/motion-logger.1:25 man/man1/ngcgui.1:25 man/man1/panelui.1:25
#: man/man1/pncconf.1:25 man/man1/puma560gui.1:25 man/man1/pumagui.1:25
#: man/man1/pyngcgui.1:25 man/man1/pyui.1:25 man/man1/pyvcp.1:22
#: man/man1/pyvcp_demo.1:25 man/man1/qtvcp.1:25 man/man1/rotarydelta.1:25
#: man/man1/rs274.1:25 man/man1/rtapi_app.1:25 man/man1/scaragui.1:25
#: man/man1/schedrmt.1:25 man/man1/scorbot-er-3.1:25
#: man/man1/simulate_probe.1:25 man/man1/stepconf.1:25 man/man1/teach-in.1:25
#: man/man1/tooledit.1:25 man/man1/touchy.1:25 man/man1/update_ini.1:25
#: man/man1/xhc-hb04-accels.1:25 man/man1/xyzac-trt-gui.1:25
#: man/man1/xyzbc-trt-gui.1:25
#, no-wrap
msgid "The Enhanced Machine Controller"
msgstr ""

#. type: Plain text
#: man/man1/5axisgui.1:28
msgid "5axisgui - Vismach Virtual Machine GUI"
msgstr ""

#. type: Plain text
#: man/man1/5axisgui.1:31
msgid "B<5axisgui> is one of the sample B<Vismach> GUIs for LinuxCNC"
msgstr ""

#. type: Plain text
#: man/man1/5axisgui.1:33 man/man1/hbmgui.1:34 man/man1/hexagui.1:34
#: man/man1/maho600gui.1:34 man/man1/max5gui.1:34 man/man1/puma560gui.1:34
#: man/man1/pumagui.1:34 man/man1/scaragui.1:34 man/man1/xyzac-trt-gui.1:34
#: man/man1/xyzbc-trt-gui.1:34
msgid "See the main LinuxCNC documentation for more details."
msgstr ""

#. type: Plain text
#: man/man1/5axisgui.1:35 man/man1/hbmgui.1:36 man/man1/hexagui.1:36
#: man/man1/maho600gui.1:36 man/man1/max5gui.1:36 man/man1/puma560gui.1:36
#: man/man1/pumagui.1:36 man/man1/scaragui.1:36
msgid "http://linuxcnc.org/docs/html/gui/vismach.html"
msgstr ""

#. type: Plain text
#: man/man1/5axisgui.1:38 man/man1/axis.1:47 man/man1/gmoccapy.1:46
#: man/man1/gscreen.1:46 man/man1/hal-histogram.1:39 man/man1/halreport.1:55
#: man/man1/halrmt.1:289 man/man1/halscope.1:38 man/man1/halshow.1:52
#: man/man1/hbmgui.1:39 man/man1/hexagui.1:39 man/man1/image-to-gcode.1:40
#: man/man1/inivar.1:46 man/man1/latency-test.1:40 man/man1/lineardelta.1:38
#: man/man1/linuxcnc_info.1:38 man/man1/linuxcnclcd.1:47
#: man/man1/linuxcncmkdesktop.1:36 man/man1/linuxcnc_module_helper.1:38
#: man/man1/linuxcncsvr.1:37 man/man1/linuxcnctop.1:41
#: man/man1/linuxcnc_var.1:52 man/man1/maho600gui.1:39 man/man1/max5gui.1:39
#: man/man1/mdi.1:54 man/man1/motion-logger.1:40 man/man1/ngcgui.1:38
#: man/man1/panelui.1:44 man/man1/pncconf.1:39 man/man1/puma560gui.1:39
#: man/man1/pumagui.1:39 man/man1/pyui.1:39 man/man1/pyvcp_demo.1:42
#: man/man1/qtvcp.1:38 man/man1/rotarydelta.1:38 man/man1/rs274.1:83
#: man/man1/rtapi_app.1:38 man/man1/scaragui.1:39 man/man1/schedrmt.1:210
#: man/man1/scorbot-er-3.1:45 man/man1/simulate_probe.1:37
#: man/man1/stepconf.1:39 man/man1/teach-in.1:43 man/man1/tooledit.1:39
#: man/man1/touchy.1:46 man/man1/update_ini.1:41 man/man1/xhc-hb04-accels.1:36
#: man/man1/xyzac-trt-gui.1:39 man/man1/xyzbc-trt-gui.1:39
msgid "B<LinuxCNC(1)>"
msgstr ""

#. type: Plain text
#: man/man1/5axisgui.1:41 man/man1/axis.1:50 man/man1/debuglevel.1:41
#: man/man1/gladevcp_demo.1:42 man/man1/gmoccapy.1:49
#: man/man1/gremlin_view.1:85 man/man1/gscreen.1:49
#: man/man1/halcmd_twopass.1:42 man/man1/hal-histogram.1:42
#: man/man1/halreport.1:58 man/man1/halrmt.1:292 man/man1/halscope.1:41
#: man/man1/halshow.1:55 man/man1/hbmgui.1:42 man/man1/hexagui.1:42
#: man/man1/image-to-gcode.1:43 man/man1/inivar.1:49 man/man1/latency-test.1:43
#: man/man1/lineardelta.1:41 man/man1/linuxcnc_info.1:41
#: man/man1/linuxcnclcd.1:50 man/man1/linuxcncmkdesktop.1:39
#: man/man1/linuxcnc_module_helper.1:41 man/man1/linuxcncsvr.1:40
#: man/man1/linuxcnctop.1:44 man/man1/linuxcnc_var.1:55
#: man/man1/maho600gui.1:42 man/man1/max5gui.1:42 man/man1/mdi.1:57
#: man/man1/monitor-xhc-hb04.1:45 man/man1/motion-logger.1:43
#: man/man1/ngcgui.1:41 man/man1/panelui.1:47 man/man1/pncconf.1:42
#: man/man1/puma560gui.1:42 man/man1/pumagui.1:42 man/man1/pyngcgui.1:41
#: man/man1/pyui.1:42 man/man1/pyvcp_demo.1:45 man/man1/qtvcp.1:41
#: man/man1/rotarydelta.1:41 man/man1/rs274.1:86 man/man1/rtapi_app.1:41
#: man/man1/scaragui.1:42 man/man1/schedrmt.1:213 man/man1/scorbot-er-3.1:48
#: man/man1/simulate_probe.1:40 man/man1/stepconf.1:42 man/man1/teach-in.1:46
#: man/man1/tooledit.1:42 man/man1/touchy.1:49 man/man1/update_ini.1:44
#: man/man1/xhc-hb04-accels.1:39 man/man1/xyzac-trt-gui.1:42
#: man/man1/xyzbc-trt-gui.1:42
msgid ""
"Much more information about LinuxCNC and HAL is available in the LinuxCNC "
"and HAL User Manuals, found at /usr/share/doc/LinuxCNC/."
msgstr ""

#. type: Plain text
#: man/man1/5axisgui.1:44 man/man1/axis.1:53 man/man1/axis-remote.1:65
#: man/man1/debuglevel.1:44 man/man1/gladevcp_demo.1:45 man/man1/gmoccapy.1:52
#: man/man1/gremlin_view.1:88 man/man1/gscreen.1:52 man/man1/halcmd.1:413
#: man/man1/halcmd_twopass.1:45 man/man1/hal-histogram.1:45
#: man/man1/halreport.1:61 man/man1/halrun.1:89 man/man1/halscope.1:44
#: man/man1/halshow.1:67 man/man1/halui.1:571 man/man1/hbmgui.1:45
#: man/man1/hexagui.1:45 man/man1/image-to-gcode.1:46 man/man1/inivar.1:52
#: man/man1/latency-histogram.1:112 man/man1/latency-plot.1:79
#: man/man1/latency-test.1:46 man/man1/lineardelta.1:44
#: man/man1/linuxcnclcd.1:53 man/man1/linuxcncmkdesktop.1:42
#: man/man1/linuxcnc_module_helper.1:44 man/man1/linuxcncsvr.1:43
#: man/man1/linuxcnctop.1:47 man/man1/linuxcnc_var.1:58
#: man/man1/maho600gui.1:45 man/man1/max5gui.1:45 man/man1/mdi.1:60
#: man/man1/monitor-xhc-hb04.1:48 man/man1/motion-logger.1:46
#: man/man1/ngcgui.1:44 man/man1/panelui.1:50 man/man1/pncconf.1:45
#: man/man1/puma560gui.1:45 man/man1/pumagui.1:45 man/man1/pyngcgui.1:44
#: man/man1/pyui.1:45 man/man1/pyvcp_demo.1:48 man/man1/qtvcp.1:44
#: man/man1/rotarydelta.1:44 man/man1/rs274.1:89 man/man1/rtapi_app.1:44
#: man/man1/scaragui.1:45 man/man1/schedrmt.1:216 man/man1/scorbot-er-3.1:51
#: man/man1/simulate_probe.1:43 man/man1/stepconf.1:45 man/man1/teach-in.1:49
#: man/man1/tooledit.1:45 man/man1/touchy.1:52 man/man1/update_ini.1:47
#: man/man1/xhc-hb04-accels.1:42 man/man1/xyzac-trt-gui.1:45
#: man/man1/xyzbc-trt-gui.1:45
msgid "None known at this time."
msgstr ""

#. type: Plain text
#: man/man1/5axisgui.1:47 man/man1/debuglevel.1:47 man/man1/gladevcp_demo.1:48
#: man/man1/gmoccapy.1:55 man/man1/gremlin_view.1:91 man/man1/gscreen.1:55
#: man/man1/halcmd_twopass.1:48 man/man1/hal-histogram.1:48
#: man/man1/halreport.1:64 man/man1/halrmt.1:298 man/man1/halscope.1:47
#: man/man1/halshow.1:70 man/man1/hbmgui.1:48 man/man1/hexagui.1:48
#: man/man1/image-to-gcode.1:49 man/man1/inivar.1:55
#: man/man1/latency-histogram.1:114 man/man1/latency-plot.1:81
#: man/man1/latency-test.1:49 man/man1/lineardelta.1:47
#: man/man1/linuxcnc_info.1:47 man/man1/linuxcnclcd.1:56
#: man/man1/linuxcncmkdesktop.1:45 man/man1/linuxcnc_module_helper.1:47
#: man/man1/linuxcncsvr.1:46 man/man1/linuxcnctop.1:50
#: man/man1/linuxcnc_var.1:61 man/man1/maho600gui.1:48 man/man1/max5gui.1:48
#: man/man1/mdi.1:63 man/man1/monitor-xhc-hb04.1:51 man/man1/motion-logger.1:49
#: man/man1/ngcgui.1:47 man/man1/panelui.1:53 man/man1/pncconf.1:48
#: man/man1/puma560gui.1:48 man/man1/pumagui.1:48 man/man1/pyngcgui.1:47
#: man/man1/pyui.1:48 man/man1/pyvcp_demo.1:51 man/man1/qtvcp.1:47
#: man/man1/rotarydelta.1:47 man/man1/rs274.1:92 man/man1/rtapi_app.1:47
#: man/man1/scaragui.1:48 man/man1/schedrmt.1:219 man/man1/scorbot-er-3.1:54
#: man/man1/simulate_probe.1:46 man/man1/stepconf.1:48 man/man1/teach-in.1:52
#: man/man1/tooledit.1:48 man/man1/touchy.1:55 man/man1/update_ini.1:50
#: man/man1/xhc-hb04-accels.1:45 man/man1/xyzac-trt-gui.1:48
#: man/man1/xyzbc-trt-gui.1:48
msgid "This man page written by andypugh, as part of the LinuxCNC project."
msgstr ""

#. type: Plain text
#: man/man1/5axisgui.1:49 man/man1/debuglevel.1:49 man/man1/gladevcp_demo.1:50
#: man/man1/gmoccapy.1:57 man/man1/gremlin_view.1:93 man/man1/gscreen.1:57
#: man/man1/halcmd_twopass.1:50 man/man1/hal-histogram.1:50
#: man/man1/halreport.1:66 man/man1/halrmt.1:300 man/man1/halscope.1:49
#: man/man1/halshow.1:72 man/man1/hbmgui.1:50 man/man1/hexagui.1:50
#: man/man1/image-to-gcode.1:51 man/man1/inivar.1:57 man/man1/latency-test.1:51
#: man/man1/lineardelta.1:49 man/man1/linuxcnc_info.1:49
#: man/man1/linuxcnclcd.1:58 man/man1/linuxcncmkdesktop.1:47
#: man/man1/linuxcnc_module_helper.1:49 man/man1/linuxcncsvr.1:48
#: man/man1/linuxcnctop.1:52 man/man1/linuxcnc_var.1:63
#: man/man1/maho600gui.1:50 man/man1/max5gui.1:50 man/man1/mdi.1:65
#: man/man1/monitor-xhc-hb04.1:53 man/man1/motion-logger.1:51
#: man/man1/ngcgui.1:49 man/man1/panelui.1:55 man/man1/pncconf.1:50
#: man/man1/puma560gui.1:50 man/man1/pumagui.1:50 man/man1/pyngcgui.1:49
#: man/man1/pyui.1:50 man/man1/pyvcp_demo.1:53 man/man1/qtvcp.1:49
#: man/man1/rotarydelta.1:49 man/man1/rs274.1:94 man/man1/rtapi_app.1:49
#: man/man1/scaragui.1:50 man/man1/schedrmt.1:221 man/man1/scorbot-er-3.1:56
#: man/man1/simulate_probe.1:48 man/man1/stepconf.1:50 man/man1/teach-in.1:54
#: man/man1/tooledit.1:50 man/man1/touchy.1:57 man/man1/update_ini.1:52
#: man/man1/xhc-hb04-accels.1:47 man/man1/xyzac-trt-gui.1:50
#: man/man1/xyzbc-trt-gui.1:50
msgid "Report bugs at https://github.com/LinuxCNC/linuxcnc/issues"
msgstr ""

#. type: Plain text
#: man/man1/5axisgui.1:51 man/man1/debuglevel.1:51 man/man1/gladevcp_demo.1:52
#: man/man1/gmoccapy.1:59 man/man1/gremlin_view.1:95 man/man1/gscreen.1:59
#: man/man1/halcmd_twopass.1:52 man/man1/hal-histogram.1:52
#: man/man1/halreport.1:68 man/man1/halrmt.1:302 man/man1/halscope.1:51
#: man/man1/halshow.1:74 man/man1/hbmgui.1:52 man/man1/hexagui.1:52
#: man/man1/image-to-gcode.1:53 man/man1/inivar.1:59
#: man/man1/latency-histogram.1:119 man/man1/latency-plot.1:86
#: man/man1/latency-test.1:53 man/man1/lineardelta.1:51
#: man/man1/linuxcnc_info.1:51 man/man1/linuxcnclcd.1:60
#: man/man1/linuxcncmkdesktop.1:49 man/man1/linuxcnc_module_helper.1:51
#: man/man1/linuxcncsvr.1:50 man/man1/linuxcnctop.1:54
#: man/man1/linuxcnc_var.1:65 man/man1/maho600gui.1:52 man/man1/max5gui.1:52
#: man/man1/mdi.1:67 man/man1/monitor-xhc-hb04.1:55 man/man1/motion-logger.1:53
#: man/man1/ngcgui.1:51 man/man1/panelui.1:57 man/man1/pncconf.1:52
#: man/man1/puma560gui.1:52 man/man1/pumagui.1:52 man/man1/pyngcgui.1:51
#: man/man1/pyui.1:52 man/man1/pyvcp_demo.1:55 man/man1/qtvcp.1:51
#: man/man1/rotarydelta.1:51 man/man1/rs274.1:96 man/man1/rtapi_app.1:51
#: man/man1/scaragui.1:52 man/man1/schedrmt.1:223 man/man1/scorbot-er-3.1:58
#: man/man1/simulate_probe.1:50 man/man1/stepconf.1:52 man/man1/teach-in.1:56
#: man/man1/tooledit.1:52 man/man1/touchy.1:59 man/man1/update_ini.1:54
#: man/man1/xhc-hb04-accels.1:49 man/man1/xyzac-trt-gui.1:52
#: man/man1/xyzbc-trt-gui.1:52
msgid "Copyright \\(co 2020 andypugh."
msgstr ""

#. type: Plain text
#: man/man1/5axisgui.1:53 man/man1/axis.1:62 man/man1/axis-remote.1:74
#: man/man1/debuglevel.1:53 man/man1/gladevcp_demo.1:54 man/man1/gmoccapy.1:61
#: man/man1/gremlin_view.1:97 man/man1/gscreen.1:61 man/man1/halcmd.1:424
#: man/man1/halcmd_twopass.1:54 man/man1/hal-histogram.1:54
#: man/man1/halmeter.1:116 man/man1/halreport.1:70 man/man1/halrmt.1:304
#: man/man1/halrun.1:101 man/man1/halsampler.1:159 man/man1/halscope.1:53
#: man/man1/halshow.1:76 man/man1/haltcl.1:91 man/man1/halui.1:580
#: man/man1/hbmgui.1:54 man/man1/hexagui.1:54 man/man1/image-to-gcode.1:55
#: man/man1/inivar.1:61 man/man1/io.1:131 man/man1/iov2.1:192
#: man/man1/latency-histogram.1:121 man/man1/latency-plot.1:88
#: man/man1/latency-test.1:55 man/man1/lineardelta.1:53
#: man/man1/linuxcnc_info.1:53 man/man1/linuxcnclcd.1:62
#: man/man1/linuxcncmkdesktop.1:51 man/man1/linuxcnc_module_helper.1:53
#: man/man1/linuxcncsvr.1:52 man/man1/linuxcnctop.1:56
#: man/man1/linuxcnc_var.1:67 man/man1/maho600gui.1:54 man/man1/max5gui.1:54
#: man/man1/mdi.1:69 man/man1/monitor-xhc-hb04.1:57 man/man1/motion-logger.1:55
#: man/man1/ngcgui.1:53 man/man1/panelui.1:59 man/man1/pncconf.1:54
#: man/man1/puma560gui.1:54 man/man1/pumagui.1:54 man/man1/pyngcgui.1:53
#: man/man1/pyui.1:54 man/man1/pyvcp_demo.1:57 man/man1/qtvcp.1:53
#: man/man1/rotarydelta.1:53 man/man1/rs274.1:98 man/man1/rtapi_app.1:53
#: man/man1/scaragui.1:54 man/man1/schedrmt.1:225 man/man1/scorbot-er-3.1:60
#: man/man1/simulate_probe.1:52 man/man1/stepconf.1:54 man/man1/teach-in.1:58
#: man/man1/tooledit.1:54 man/man1/touchy.1:61 man/man1/update_ini.1:56
#: man/man1/xhc-hb04-accels.1:51 man/man1/xyzac-trt-gui.1:54
#: man/man1/xyzbc-trt-gui.1:54 man/man9/sampler.9:147
msgid ""
"This is free software; see the source for copying conditions.  There is NO "
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
msgstr ""

#. type: TH
#: man/man1/axis.1:26 man/man1/axis-remote.1:26 man/man1/pyvcp.1:22
#, no-wrap
msgid "2007-04-01"
msgstr ""

#. type: Plain text
#: man/man1/axis.1:29
msgid "axis - AXIS LinuxCNC Graphical User Interface"
msgstr ""

#. type: Plain text
#: man/man1/axis.1:32
msgid "B<axis> I<-ini> I<INIFILE>"
msgstr ""

#. type: Plain text
#: man/man1/axis.1:35
msgid ""
"B<axis> is one of the Graphical User Interfaces (GUI) for LinuxCNC It gets "
"run by the runscript usually."
msgstr ""

#. type: TP
#: man/man1/axis.1:36 man/man1/gscreen.1:35 man/man1/linuxcnclcd.1:36
#, no-wrap
msgid "B<INIFILE>"
msgstr ""

#. type: Plain text
#: man/man1/axis.1:44 man/man1/gscreen.1:43 man/man1/linuxcnclcd.1:44
msgid ""
"The ini file is the main piece of an LinuxCNC configuration. It is not the "
"entire configuration; there are various other files that go with it (NML "
"files, HAL files, TBL files, VAR files). It is, however, the most important "
"one, because it is the file that holds the configuration together. It can "
"adjust a lot of parameters itself, but it also tells B<LinuxCNC> which other "
"files to load and use."
msgstr ""

#. type: Plain text
#: man/man1/axis.1:56 man/man1/axis-remote.1:68
msgid "This man page written by Alex Joni, as part of the LinuxCNC project."
msgstr ""

#. type: Plain text
#: man/man1/axis.1:58 man/man1/axis-remote.1:70 man/man1/halui.1:576
msgid "Report bugs to alex_joni AT users DOT sourceforge DOT net"
msgstr ""

#. type: Plain text
#: man/man1/axis.1:60 man/man1/axis-remote.1:72
msgid "Copyright \\(co 2007 Alex Joni."
msgstr ""

#. type: Plain text
#: man/man1/axis-remote.1:29
msgid "axis-remote - AXIS Remote Interface"
msgstr ""

#. type: Plain text
#: man/man1/axis-remote.1:31
msgid "B<axis-remote >I<OPTIONS>|I<FILENAME>"
msgstr ""

#. type: Plain text
#: man/man1/axis-remote.1:33
msgid ""
"B<axis-remote> is a small script that triggers commands in a running AXIS "
"GUI."
msgstr ""

#. type: TP
#: man/man1/axis-remote.1:33
#, no-wrap
msgid "Use B<axis-remote --help> for further information."
msgstr ""

#. type: TP
#: man/man1/axis-remote.1:36
#, no-wrap
msgid "B<--ping>, B<-p>"
msgstr ""

#. type: Plain text
#: man/man1/axis-remote.1:39
msgid "Check whether AXIS is running."
msgstr ""

#. type: TP
#: man/man1/axis-remote.1:39
#, no-wrap
msgid "B<--reload>, B<-r>"
msgstr ""

#. type: Plain text
#: man/man1/axis-remote.1:42
msgid "Make AXIS reload the currently loaded file."
msgstr ""

#. type: TP
#: man/man1/axis-remote.1:42
#, no-wrap
msgid "B<--clear>, B<-c>"
msgstr ""

#. type: Plain text
#: man/man1/axis-remote.1:45
msgid "Make AXIS clear the backplot."
msgstr ""

#. type: TP
#: man/man1/axis-remote.1:45
#, no-wrap
msgid "B<--quit>, B<-q>"
msgstr ""

#. type: Plain text
#: man/man1/axis-remote.1:48
msgid "Make AXIS quit."
msgstr ""

#. type: TP
#: man/man1/axis-remote.1:48
#, no-wrap
msgid "B<--help>, B<-h>, B<-?>"
msgstr ""

#. type: Plain text
#: man/man1/axis-remote.1:51
msgid "Display a list of valid parameters for B<axis-remote>."
msgstr ""

#. type: TP
#: man/man1/axis-remote.1:51
#, no-wrap
msgid "B<--mdi COMMAND>, B<-m COMMAND>"
msgstr ""

#. type: Plain text
#: man/man1/axis-remote.1:54
msgid "Run the MDI command B<COMMAND>."
msgstr ""

#. type: TP
#: man/man1/axis-remote.1:54 man/man1/halsampler.1:70
#, no-wrap
msgid "B<FILENAME>"
msgstr ""

#. type: Plain text
#: man/man1/axis-remote.1:57
msgid "Load the G-code file B<FILENAME>."
msgstr ""

#. type: Plain text
#: man/man1/axis-remote.1:59
msgid "B<axis(1)>"
msgstr ""

#. type: Plain text
#: man/man1/axis-remote.1:62
msgid ""
"Much more information about LinuxCNC and HAL is available in the LinuxCNC "
"and HAL User Manuals, found at /usr/share/doc/linuxcnc/."
msgstr ""

#. type: TH
#: man/man1/debuglevel.1:25
#, no-wrap
msgid "DEBUGLEVEL"
msgstr ""

#. type: Plain text
#: man/man1/debuglevel.1:28
msgid "debuglevel - sets the debug level for the userspace part of LinuxCNC"
msgstr ""

#. type: Plain text
#: man/man1/debuglevel.1:31
msgid "B<debuglevel> I<-ini> I<INIFILE>"
msgstr ""

#. type: Plain text
#: man/man1/debuglevel.1:34
msgid ""
"B<debuglevel> displays a checkbox gui to select the current debug level of "
"some parts of LinuxCNC."
msgstr ""

#. type: Plain text
#: man/man1/debuglevel.1:38
msgid "halcmd(1) - debug subcommand B<LinuxCNC(1)>"
msgstr ""

#. type: TH
#: man/man1/elbpcom.1:2 man/man3/rtapi_task_self.3rtapi:1
#, no-wrap
msgid "2015-04-18"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:5
msgid "elbpcom - Communicate with Mesa ethernet cards"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:7
msgid "Common options:"
msgstr ""

#. type: SY
#: man/man1/elbpcom.1:8 man/man1/elbpcom.1:16 man/man1/elbpcom.1:26
#: man/man1/elbpcom.1:35
#, no-wrap
msgid "elbpcom"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:12
msgid "B<[--ip=>I<IP>B<]> B<[--port=>I<PORT>B<]> B<[--timeout=>I<TIMEOUT>B<]>"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:15
msgid "Reading data:"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:22
msgid ""
"B<[>I<common\\ options>B<]> B<--space=>I<SPACE> B<[--info]> B<--"
"address=>I<ADDRESS> B<--read=>I<LENGTH>"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:25
msgid "Writing data:"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:31
msgid ""
"B<[>I<common\\ options>B<]> B<--space=>I<SPACE> B<--address=>I<ADDRESS> B<--"
"write=>I<HEXDATA>"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:34
msgid "Sending arbitrary packets:"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:38
msgid "B<[>I<common\\ options>B<]> I<HEXDATA>"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:43
msgid ""
"Read or write data from a Mesa ethernet card that uses the LBP16 protocol, "
"such as the 7i80.  This can be useful for performing certain low-level tasks."
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:51
msgid ""
"For more information about the meaning of each address space, see the card "
"documentation.  Incorrect use of this utility can have negative effects such "
"as changing the board's IP address or even corrupting the FPGA bitfile in "
"the eeprom.  For some tasks, such as updating FPGA bitfiles and setting IP "
"addresses, B<mesaflash>(1)  is a more appropriate tool."
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:53
msgid "If not specified, the default values are"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:57
msgid "B<--ip=>I<192.168.1.121> B<--port=>I<27181> B<--timeout=>I<.2>"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:61
msgid ""
"This example demonstrates reading the HOSTMOT2 identifying string from the "
"IDROM in space 0:"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:67
#, no-wrap
msgid ""
"$ elbpcom --space 0 --address 0x104 --read 8\n"
"E<gt> 82420401\n"
"E<lt> 484f53544d4f5432\n"
"      HOSTMOT2\n"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:72
msgid ""
"First the request is shown in hex.  Then the response (if any) is shown in "
"hex.  Finally, the response is shown in ASCII, with \".\" replacing any non-"
"ASCII characters.  This is similar to the following invocations of mesaflash:"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:78
#, no-wrap
msgid ""
"$ ./mesaflash  --device 7i80 --rpo 0x104\n"
"54534F48\n"
"$ ./mesaflash  --device 7i80 --rpo 0x108\n"
"32544F4D\n"
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:81
msgid "but notice its different treatment of byte order."
msgstr ""

#. type: Plain text
#: man/man1/elbpcom.1:88
msgid ""
"B<mesaflash>(1), B<hostmot2>(9), B<hm2_eth>(9), E<.UR http://www.mesanet."
"com> Mesa's documentation for the Anything I/O boards E<.UE .>"
msgstr ""

#. type: TH
#: man/man1/gladevcp.1:22
#, no-wrap
msgid "GLADEVCP"
msgstr ""

#. type: TH
#: man/man1/gladevcp.1:22
#, no-wrap
msgid "2010-12-20"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:25
msgid ""
"GladeVCP - Virtual Control Panel for LinuxCNC based on Glade, Gtk and HAL "
"widgets"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:27
msgid ""
"B<gladevcp> [-g I<WxH+X+Y>] [-c I<component-name>] [-u I<handler>] [-U "
"I<useroption>] [-H I<halfile>] [-d] I<myfile.ui>"
msgstr ""

#. type: TP
#: man/man1/gladevcp.1:28 man/man1/pyvcp.1:28
#, no-wrap
msgid "B<-g> I<WxH+X+Y>"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:33 man/man1/pyvcp.1:33
msgid ""
"This sets the initial geometry of the root window.  Use 'WxH' for just size, "
"'+X+Y' for just position, or 'WxH+X+Y' for both.  Size / position use pixel "
"units. Position is referenced from top left."
msgstr ""

#. type: TP
#: man/man1/gladevcp.1:33 man/man1/pyvcp.1:33
#, no-wrap
msgid "B<-c> I<component-name>"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:37
msgid ""
"Use I<component-name> as the HAL component name.  If the component name is "
"not specified, the basename of the ui file is used."
msgstr ""

#. type: TP
#: man/man1/gladevcp.1:37
#, no-wrap
msgid "B<-u> I<handler>"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:41
msgid ""
"Instructs GladeVCP to inspect the Python script I<handler> for event "
"handlers, and connect them to signals in the ui file."
msgstr ""

#. type: TP
#: man/man1/gladevcp.1:41
#, no-wrap
msgid "B<-U> I<useroption>"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:45
msgid ""
"GladeVCP collects all I<useroption> strings and passes them to the handler "
"init()  method as a list of strings without further inspection."
msgstr ""

#. type: TP
#: man/man1/gladevcp.1:45
#, no-wrap
msgid "B<-x> I<XID>"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:49
msgid ""
"Reparent GladeVCP into an existing window I<XID> instead of creating a new "
"top level window."
msgstr ""

#. type: TP
#: man/man1/gladevcp.1:49
#, no-wrap
msgid "B<-H> I<halfile>"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:53
msgid ""
"GladeVCP runs I<halfile> - a list of HAL commands - by executing I<halcmd -c "
"halfile> after the HAL component is finalized."
msgstr ""

#. type: TP
#: man/man1/gladevcp.1:54
#, no-wrap
msgid "B<-d>"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:57
msgid "enable debug output."
msgstr ""

#. type: TP
#: man/man1/gladevcp.1:58
#, no-wrap
msgid "B<-R> I<gtkrcfile>"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:61
msgid "explicitly load a gtkrc file."
msgstr ""

#. type: TP
#: man/man1/gladevcp.1:62
#, no-wrap
msgid "B<-t> I<THEME>"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:65
msgid ""
"set gtk theme. Default is I<system> theme. Different panels can have "
"different themes."
msgstr ""

#. type: TP
#: man/man1/gladevcp.1:66
#, no-wrap
msgid "B<-m> I<MAXIMUM>"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:70
msgid ""
"force panel window to maxumize.  Together with the I<-g geometry> option one "
"can move the panel to a second monitor and force it to use all of the screen"
msgstr ""

#. type: TP
#: man/man1/gladevcp.1:71 man/man1/halcmd.1:79
#, no-wrap
msgid "B<-R>"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:75
msgid ""
"explicitly deactivate workaround for a GTK bug which makes matches of widget "
"and widget_class matches in GTK theme and gtkrc files fail. Normally not "
"needed."
msgstr ""

#. type: Plain text
#: man/man1/gladevcp.1:78
msgid ""
"I<GladeVCP> in the LinuxCNC documentation for a description of GladeVCP's "
"capabilities and the associated HAL widget set, along with examples."
msgstr ""

#. type: TH
#: man/man1/gladevcp_demo.1:25
#, no-wrap
msgid "GLADEVCP_DEMO"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp_demo.1:28
msgid "gladevcp - used by sample configs to deonstrate Glade Virtual_demo"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp_demo.1:31
msgid "B<gladevcp_demo> Control Panels"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp_demo.1:34
msgid "B<gladevcp_demo> is a sample GladeVCP handler"
msgstr ""

#. type: Plain text
#: man/man1/gladevcp_demo.1:39
msgid "B<https://linuxcnc.org/docs/html/gui/gladevcp.html> B<LinuxCNC(1)>"
msgstr ""

#. type: Plain text
#: man/man1/gmoccapy.1:28
msgid "gmoccapy - TOUCHY LinuxCNC Graphical User Interface"
msgstr ""

#. type: Plain text
#: man/man1/gmoccapy.1:31
msgid "B<gmoccapy> I<-ini> I<E<lt>INI fileE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/gmoccapy.1:34
msgid ""
"B<gmoccapy> is one of the Graphical User Interfaces (GUI) for LinuxCNC It "
"gets run by the runscript usually."
msgstr ""

#. type: TP
#: man/man1/gmoccapy.1:35 man/man1/touchy.1:35
#, no-wrap
msgid "B<INI file>"
msgstr ""

#. type: Plain text
#: man/man1/gmoccapy.1:43
msgid ""
"The I<INI file> is the main piece of an LinuxCNC configuration. It is not "
"the entire configuration; there are various other files that go with it (NML "
"files, HAL files, TBL files, VAR files). It is, however, the most important "
"one, because it is the file that holds the configuration together. It can "
"adjust a lot of parameters itself, but it also tells B<LinuxCNC> which other "
"files to load and use."
msgstr ""

#. type: TH
#: man/man1/gremlin_view.1:25
#, no-wrap
msgid "GREMLIN_VIEW"
msgstr ""

#. type: Plain text
#: man/man1/gremlin_view.1:28
msgid "gremlin_view - G-code graphical preview"
msgstr ""

#. type: Plain text
#: man/man1/gremlin_view.1:30
msgid "B<gremlin_view>"
msgstr ""

#. type: Plain text
#: man/man1/gremlin_view.1:34
msgid ""
"B<gremlin_view> is a Python wrapper for the gremlin G-code graphical preview"
msgstr ""

#. type: Plain text
#: man/man1/gremlin_view.1:78
#, no-wrap
msgid ""
"PGremlinView for gremlin with buttons for simpler embedding\n"
"Standalone functionality if linuxcnc running\n"
"A default ui file (gremlin_view.ui) is provided for a default\n"
"button arrangement but a user may provide their own by supplying\n"
"the glade_file argument.\n"
"The following objects are mandatory:\n"
"  'gremlin_view_window'      toplevel window\n"
"  'gremlin_view_hal_gremlin' hal_gremlin\n"
"  'gremlin_view_box'         HBox or VBox' containing hal_gremlin\n"
"Optional radiobutton group names:\n"
"  'select_p_view'\n"
"  'select_x_view'\n"
"  'select_y_view'\n"
"  'select_z_view'\n"
"  'select_z2_view'\n"
"Optional checkbuttons names:\n"
"  'enable_dro'\n"
"  'show_machine_speed\n"
"  'show_distance_to_go'\n"
"  'show_limits'\n"
"  'show_extents'\n"
"  'show_tool'\n"
"  'show_metric'\n"
"Callbacks are provided for the following button actions\n"
"  on_clear_live_plotter_clicked\n"
"  on_enable_dro_clicked\n"
"  on_zoomin_pressed\n"
"  on_zoomout_pressed\n"
"  on_pan_x_minus_pressed\n"
"  on_pan_x_plus_pressed\n"
"  on_pan_y_minus_pressed\n"
"  on_pan_y_plus_pressed\n"
"  on_show_tool_clicked\n"
"  on_show_metric_clicked\n"
"  on_show_extents_clicked\n"
"  on_select_p_view_clicked\n"
"  on_select_x_view_clicked\n"
"  on_select_y_view_clicked\n"
"  on_select_z_view_clicked\n"
"  on_select_z2_view_clicked\n"
"  on_show_distance_to_go_clicked\n"
"  on_show_machine_speed_clicked\n"
"  on_show_limits_clicked\n"
msgstr ""

#. type: Plain text
#: man/man1/gremlin_view.1:82
msgid "B<http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Gremlin> B<LinuxCNC(1)>"
msgstr ""

#. type: TH
#: man/man1/gs2_vfd.1:26
#, no-wrap
msgid "gs2_vfd"
msgstr ""

#. type: TH
#: man/man1/gs2_vfd.1:26
#, no-wrap
msgid "January 1, 2009"
msgstr ""

#. type: TH
#: man/man1/gs2_vfd.1:26
#, no-wrap
msgid "GS2 VFD"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:30
msgid "B<gs2_vfd> - HAL userspace component for Automation Direct GS2 VFD's"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:34
msgid "B<gs2_vfd> [OPTIONS]"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:40
msgid ""
"This manual page explains the B<gs2_vfd> component. This component reads and "
"writes to the GS2 via a modbus connection."
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:42
msgid "B<gs2_vfd> is for use with LinuxCNC"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:45 man/man1/hy_vfd.1:137
#, no-wrap
msgid "B<-b,\\ --bits\\ E<lt>nE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:48
msgid ""
"(default 8) Set number of data bits to E<lt>nE<gt>, where n must be from 5 "
"to 8 inclusive"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:48 man/man1/hy_vfd.1:121
#, no-wrap
msgid "B<-d,\\ --device\\ E<lt>pathE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:51 man/man1/hy_vfd.1:124
msgid "(default /dev/ttyS0) Set the name of the serial device node to use."
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:51
#, no-wrap
msgid "B<-v,\\ --verbose>"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:54 man/man1/hy_vfd.1:124
#, no-wrap
msgid "B<-g,\\ --debug>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:59
msgid ""
"Turn on debug messages. Note that if there are serial errors, this may "
"become annoying.  Debug mode will cause all modbus messages to be printed in "
"hex on the terminal."
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:59 man/man1/hy_vfd.1:133
#, no-wrap
msgid "B<-n,\\ --name\\ E<lt>stringE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:63
msgid ""
"(default gs2_vfd) Set the name of the HAL module.  The HAL comp name will be "
"set to E<lt>stringE<gt>, and all pin and parameter names will begin with "
"E<lt>stringE<gt>."
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:63 man/man1/hy_vfd.1:142
#, no-wrap
msgid "B<-p,\\ --parity\\ [even,odd,none]>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:66
msgid "(default odd) Set serial parity to even, odd, or none."
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:66 man/man1/hy_vfd.1:146
#, no-wrap
msgid "B<-r,\\ --rate\\ E<lt>nE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:69
msgid ""
"(default 38400) Set baud rate to E<lt>nE<gt>. It is an error if the rate is "
"not one of the following: 110, 300, 600, 1200, 2400, 4800, 9600, 19200, "
"38400, 57600, 115200"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:69 man/man1/hy_vfd.1:152
#, no-wrap
msgid "B<-s,\\ --stopbits\\ [1,2]>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:72
msgid "(default 1) Set serial stop bits to 1 or 2"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:72 man/man1/hy_vfd.1:156
#, no-wrap
msgid "B<-t,\\ --target\\ E<lt>nE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:75
msgid ""
"(default 1) Set MODBUS target (slave) number. This must match the device "
"number you set on the GS2."
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:75
#, no-wrap
msgid "B<-A,\\ --accel-seconds\\ E<lt>nE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:78
msgid "(default 10.0) Seconds to accelerate the spindle from 0 to Max RPM."
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:78
#, no-wrap
msgid "B<-D,\\ --decel-seconds\\ E<lt>nE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:83
msgid ""
"(default 0.0) Seconds to decelerate the spindle from Max RPM to 0.  If set "
"to 0.0 the spindle will be allowed to coast to a stop without controlled "
"deceleration."
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:83
#, no-wrap
msgid "B<-R,\\ --braking-resistor>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:92
msgid ""
"This argument should be used when a braking resistor is installed on the GS2 "
"VFD (see Appendix A of the GS2 manual).  It disables deceleration over-"
"voltage stall prevention (see GS2 modbus Parameter 6.05), allowing the VFD "
"to keep braking even in situations where the motor is regenerating high "
"voltage.  The regenerated voltage gets safely dumped into the braking "
"resistor.  B<\\&\\&>"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:94
#, no-wrap
msgid "B<E<lt>nameE<gt>.DC-bus-volts\\ (float,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:97 man/man1/gs2_vfd.1:106 man/man1/gs2_vfd.1:109
#: man/man1/gs2_vfd.1:112 man/man1/gs2_vfd.1:118 man/man1/gs2_vfd.1:121
#: man/man1/gs2_vfd.1:124 man/man1/gs2_vfd.1:127 man/man1/gs2_vfd.1:130
#: man/man1/gs2_vfd.1:133 man/man1/vfs11_vfd.1:148 man/man1/vfs11_vfd.1:151
#: man/man1/vfs11_vfd.1:154
msgid "from the VFD"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:97 man/man1/vfdb_vfd.1:135 man/man1/vfs11_vfd.1:77
#, no-wrap
msgid "B<E<lt>nameE<gt>.at-speed\\ (bit,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:100
msgid "when drive is at commanded speed"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:100 man/man1/vfs11_vfd.1:93
#, no-wrap
msgid "B<E<lt>nameE<gt>.err-reset\\ (bit,\\ in)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:103
msgid "reset errors sent to VFD"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:103
#, no-wrap
msgid "B<E<lt>nameE<gt>.firmware-revision\\ (s32,\\ out)>"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:106 man/man1/vfdb_vfd.1:145 man/man1/vfs11_vfd.1:103
#, no-wrap
msgid "B<E<lt>nameE<gt>.frequency-command\\ (float,\\ out)>"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:109 man/man1/vfdb_vfd.1:149 man/man1/vfs11_vfd.1:106
#, no-wrap
msgid "B<E<lt>nameE<gt>.frequency-out\\ (float,\\ out)>"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:112 man/man1/vfdb_vfd.1:158 man/man1/vfs11_vfd.1:119
#, no-wrap
msgid "B<E<lt>nameE<gt>.is-stopped\\ (bit,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:115
msgid "when the VFD reports 0 Hz output"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:115
#, no-wrap
msgid "B<E<lt>nameE<gt>.load-percentage\\ (float,\\ out)>"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:118 man/man1/vfdb_vfd.1:182 man/man1/vfs11_vfd.1:142
#, no-wrap
msgid "B<E<lt>nameE<gt>.motor-RPM\\ (float,\\ out)>"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:121 man/man1/vfdb_vfd.1:191
#, no-wrap
msgid "B<E<lt>nameE<gt>.output-current\\ (float,\\ out)>"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:124 man/man1/vfdb_vfd.1:188 man/man1/vfs11_vfd.1:151
#, no-wrap
msgid "B<E<lt>nameE<gt>.output-voltage\\ (float,\\ out)>"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:127
#, no-wrap
msgid "B<E<lt>nameE<gt>.power-factor\\ (float,\\ out)>"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:130
#, no-wrap
msgid "B<E<lt>nameE<gt>.scale-frequency\\ (float,\\ out)>"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:133 man/man1/vfdb_vfd.1:194 man/man1/vfs11_vfd.1:154
#, no-wrap
msgid "B<E<lt>nameE<gt>.speed-command\\ (float,\\ in)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:136
msgid ""
"speed sent to VFD in RPM It is an error to send a speed faster than the "
"Motor Max RPM as set in the VFD"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:136 man/man1/vfs11_vfd.1:158
#, no-wrap
msgid "B<E<lt>nameE<gt>.spindle-fwd\\ (bit,\\ in)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:139
msgid "1 for FWD and 0 for REV sent to VFD"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:139 man/man1/vfdb_vfd.1:198 man/man1/vfs11_vfd.1:161
#, no-wrap
msgid "B<E<lt>nameE<gt>.spindle-on\\ (bit,\\ in)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:142 man/man1/vfs11_vfd.1:164
msgid "1 for ON and 0 for OFF sent to VFD, only on when running"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:142 man/man1/vfs11_vfd.1:164
#, no-wrap
msgid "B<E<lt>nameE<gt>.spindle-rev\\ (bit,\\ in)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:145
msgid "1 for ON and 0 for OFF, only on when running"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:145
#, no-wrap
msgid "B<E<lt>nameE<gt>.status-1\\ (s32,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:148
msgid "Drive Status of the VFD (see the GS2 manual)"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:148
#, no-wrap
msgid "B<E<lt>nameE<gt>.status-2\\ (s32,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:150
msgid ""
"Drive Status of the VFD (see the GS2 manual) Note that the value is a sum of "
"all the bits that are on. So a 163 which means the drive is in the run mode "
"is the sum of 3 (run) + 32 (freq set by serial) + 128 (operation set by "
"serial)."
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:153 man/man1/vfs11_vfd.1:179
#, no-wrap
msgid "B<E<lt>nameE<gt>.error-count\\ (s32,\\ RW)>"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:155 man/man1/vfdb_vfd.1:221 man/man1/vfs11_vfd.1:188
#, no-wrap
msgid "B<E<lt>nameE<gt>.loop-time\\ (float,\\ RW)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:158
msgid "how often the modbus is polled (default 0.1)"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:158 man/man1/vfdb_vfd.1:224 man/man1/vfs11_vfd.1:191
#, no-wrap
msgid "B<E<lt>nameE<gt>.nameplate-HZ\\ (float,\\ RW)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:161
msgid "Nameplate Hz of motor (default 60)"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:161 man/man1/vfdb_vfd.1:230 man/man1/vfs11_vfd.1:197
#, no-wrap
msgid "B<E<lt>nameE<gt>.nameplate-RPM\\ (float,\\ RW)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:164
msgid "Nameplate RPM of motor (default 1730)"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:164
#, no-wrap
msgid "B<E<lt>nameE<gt>.retval\\ (s32,\\ RW)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:167
msgid "the return value of an error in HAL"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:167 man/man1/vfdb_vfd.1:238 man/man1/vfs11_vfd.1:205
#, no-wrap
msgid "B<E<lt>nameE<gt>.tolerance\\ (float,\\ RW)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:170
#, no-wrap
msgid " speed tolerance (default 0.01)\n"
msgstr ""

#. type: IP
#: man/man1/gs2_vfd.1:170
#, no-wrap
msgid "B<E<lt>nameE<gt>.ack-delay\\ (s32,\\ RW)>"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:172
#, no-wrap
msgid " number of read/write cycles before checking at-speed (default 2)\n"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:175
msgid ""
"I<GS2 Driver> in the LinuxCNC documentation for a full description of the "
"B<GS2> syntax"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:177
msgid ""
"I<GS2 Examples> in the LinuxCNC documentation for examples using the B<GS2> "
"component"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:182 man/man9/thc.9:132 man/man9/thcud.9:129
msgid "John Thornton"
msgstr ""

#. type: Plain text
#: man/man1/gs2_vfd.1:184 man/man1/hy_vfd.1:338 man/man1/mb2hal.1:113
#: man/man1/pmx485.1:40 man/man1/pmx485-test.1:47
#: man/man1/qtplasmac-cfg2prefs.1:42 man/man1/qtplasmac-materials.1:43
#: man/man1/qtplasmac-plasmac2qt.1:41 man/man1/qtplasmac-setup.1:42
#: man/man1/thermistor.1:66 man/man1/vfdb_vfd.1:262 man/man1/vfs11_vfd.1:227
#: man/man9/abs.9:41 man/man9/abs_s32.9:41 man/man9/and2.9:57
#: man/man9/axistest.9:83 man/man9/bin2gray.9:35 man/man9/biquad.9:73
#: man/man9/bldc.9:468 man/man9/blend.9:42 man/man9/carousel.9:225
#: man/man9/charge_pump.9:47 man/man9/clarke2.9:58 man/man9/clarke3.9:62
#: man/man9/clarkeinv.9:58 man/man9/comp.9:48 man/man9/constant.9:31
#: man/man9/conv_bit_float.9:32 man/man9/conv_bit_s32.9:32
#: man/man9/conv_bit_u32.9:32 man/man9/conv_float_s32.9:41
#: man/man9/conv_float_u32.9:41 man/man9/conv_s32_bit.9:41
#: man/man9/conv_s32_float.9:32 man/man9/conv_s32_u32.9:41
#: man/man9/conv_u32_bit.9:41 man/man9/conv_u32_float.9:32
#: man/man9/conv_u32_s32.9:41 man/man9/corexy_by_hal.9:84 man/man9/dbounce.9:42
#: man/man9/ddt.9:49 man/man9/deadzone.9:39 man/man9/differential.9:50
#: man/man9/edge.9:52 man/man9/eoffset_per_angle.9:138
#: man/man9/estop_latch.9:114 man/man9/feedcomp.9:45 man/man9/flipflop.9:44
#: man/man9/gantry.9:78 man/man9/gearchange.9:66 man/man9/gray2bin.9:35
#: man/man9/hal_bb_gpio.9:70 man/man9/histobins.9:146 man/man9/hm2_7i43.9:89
#: man/man9/hm2_7i90.9:76 man/man9/hm2_eth.9:213 man/man9/hm2_pci.9:34
#: man/man9/hm2_rpspi.9:204 man/man9/hm2_spi.9:81 man/man9/hostmot2.9:1801
#: man/man9/hypot.9:41 man/man9/ilowpass.9:61 man/man9/integ.9:46
#: man/man9/invert.9:37 man/man9/joyhandle.9:72 man/man9/knob2float.9:45
#: man/man9/latencybins.9:106 man/man9/lcd.9:166 man/man9/limit1.9:40
#: man/man9/limit2.9:47 man/man9/limit3.9:64 man/man9/lincurve.9:67
#: man/man9/logic.9:123 man/man9/lowpass.9:73 man/man9/lut5.9:189
#: man/man9/maj3.9:43 man/man9/match8.9:96 man/man9/max31855.9:77
#: man/man9/mesa_7i65.9:59 man/man9/mesa_pktgyro_test.9:65
#: man/man9/millturn.9:53 man/man9/minmax.9:39 man/man9/moveoff.9:204
#: man/man9/mult2.9:37 man/man9/multiclick.9:97 man/man9/multiswitch.9:49
#: man/man9/mux16.9:80 man/man9/mux2.9:39 man/man9/mux4.9:66 man/man9/mux8.9:98
#: man/man9/mux_generic.9:88 man/man9/near.9:48 man/man9/not.9:41
#: man/man9/offset.9:44 man/man9/ohmic.9:125 man/man9/oneshot.9:62
#: man/man9/or2.9:52 man/man9/orient.9:96 man/man9/sample_hold.9:36
#: man/man9/scale.9:41 man/man9/select8.9:35 man/man9/serport.9:88
#: man/man9/setsserial.9:107 man/man9/sim_axis_hardware.9:516
#: man/man9/sim_home_switch.9:53 man/man9/sim_matrix_kb.9:53
#: man/man9/sim_parport.9:410 man/man9/simple_tp.9:46 man/man9/sim_spindle.9:43
#: man/man9/sphereprobe.9:53 man/man9/spindle.9:153 man/man9/steptest.9:86
#: man/man9/sum2.9:51 man/man9/threadtest.9:31 man/man9/time.9:126
#: man/man9/timedelay.9:45 man/man9/timedelta.9:53 man/man9/toggle2nist.9:68
#: man/man9/toggle.9:47 man/man9/tristate_bit.9:35 man/man9/tristate_float.9:35
#: man/man9/updown.9:51 man/man9/userkins.9:84 man/man9/watchdog.9:50
#: man/man9/wcomp.9:47 man/man9/xhc_hb04_util.9:138 man/man9/xor2.9:56
msgid "GPL"
msgstr ""

#. type: TH
#: man/man1/gscreen.1:25
#, no-wrap
msgid "GSCREEN"
msgstr ""

#. type: Plain text
#: man/man1/gscreen.1:28
msgid "gscreen - TOUCHY LinuxCNC Graphical User Interface"
msgstr ""

#. type: Plain text
#: man/man1/gscreen.1:31
msgid "B<gscreen> I<-ini> I<INIFILE>"
msgstr ""

#. type: Plain text
#: man/man1/gscreen.1:34
msgid ""
"B<gscreen> is one of the Graphical User Interfaces (GUI) for LinuxCNC It "
"gets run by the runscript usually."
msgstr ""

#. type: groff code
#: man/man1/halcmd.1:26 man/man1/halrun.1:26 man/man1/haltcl.1:26
#, no-wrap
msgid ""
".de  URL\n"
"\\\\$2 \\(laURL: \\\\$1 \\(ra\\\\$3\n"
"..\n"
msgstr ""

#. type: groff code
#: man/man1/halcmd.1:29 man/man1/halrun.1:29 man/man1/haltcl.1:29
#: man/man9/millturn.9:19 man/man9/userkins.9:19
#, no-wrap
msgid ".if  \\n[.g] .mso www.tmac\n"
msgstr ""

#. type: TH
#: man/man1/halcmd.1:30
#, no-wrap
msgid "HALCMD"
msgstr ""

#. type: TH
#: man/man1/halcmd.1:30
#, no-wrap
msgid "2003-12-18"
msgstr ""

#. type: TH
#: man/man1/halcmd.1:30 man/man1/hal_input.1:1 man/man1/halmeter.1:26
#: man/man1/halrun.1:30 man/man1/halsampler.1:26 man/man1/haltcl.1:30
#: man/man1/shuttle.1:1 man/man1/xhc-hb04.1:1 man/man9/sampler.9:26
#, no-wrap
msgid "HAL User's Manual"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:33
msgid "halcmd - manipulate the LinuxCNC HAL from the command line"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:36
msgid "B<halcmd> [I<OPTIONS>] [I<COMMAND> [I<ARG>]]"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:42
msgid ""
"B<halcmd> is used to manipulate the HAL (Hardware Abstraction Layer) from "
"the command line.  B<halcmd> can optionally read commands from a file, "
"allowing complex HAL configurations to be set up with a single command."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:47
msgid ""
"If the B<readline> library is available when LinuxCNC is compiled, then "
"B<halcmd> offers commandline editing and completion when running "
"interactively.  Use the up arrow to recall previous commands, and press tab "
"to complete the names of items such as pins and signals."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:48 man/man1/halrun.1:73
#, no-wrap
msgid "B<-I>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:53
msgid ""
"Before tearing down the realtime environment, run an interactive halcmd.  "
"B<halrun> only.  If B<-I> is used, it must precede all other commandline "
"arguments."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:53
#, no-wrap
msgid "B<-f> [I<E<lt>fileE<gt>>]"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:57
msgid ""
"Ignore commands on command line, take input from I<file> instead.  If "
"I<file> is not specified, take input from I<stdin>."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:57
#, no-wrap
msgid "B<-i >I<E<lt>INI fileE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:61
msgid ""
"Use variables from the specified I<INI file> for substitutions.  See "
"B<SUBSTITUTION> below."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:61
#, no-wrap
msgid "B<-k>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:65
msgid ""
"Keep going after failed command(s).  The default is to stop and return "
"failure if any command fails."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:65
#, no-wrap
msgid "B<-q>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:68
msgid "display errors only (default)"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:68
#, no-wrap
msgid "B<-Q>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:71
msgid "display nothing, execute commands silently"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:71 man/man1/halmeter.1:48
#, no-wrap
msgid "B<-s>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:79
msgid ""
"Script-friendly mode.  In this mode, I<show> will not output titles for the "
"items shown.  Also, module names will be printed instead of ID codes in pin, "
"param, and funct listings.  Threads are printed on a single line, with the "
"thread period, FP usage and name first, followed by all of the functions in "
"the thread, in execution order.  Signals are printed on a single line, with "
"the type, value, and signal name first, followed by a list of pins connected "
"to the signal, showing both the direction and the pin name."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:83
msgid ""
"Release the HAL mutex.  This is useful for recovering when a HAL component "
"has crashed while holding the HAL mutex."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:83
#, no-wrap
msgid "B<-v>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:86
msgid "display results of each command"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:86
#, no-wrap
msgid "B<-V>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:89
msgid "display lots of debugging junk"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:89
#, no-wrap
msgid "B<-h> [I<E<lt>commandE<gt>>]"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:92
msgid ""
"display a help screen and exit, displays extended help on I<command> if "
"specified"
msgstr ""

#. type: SH
#: man/man1/halcmd.1:92 man/man1/haltcl.1:68
#, no-wrap
msgid "COMMANDS"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:98
msgid ""
"Commands tell B<halcmd> what to do.  Normally B<halcmd> reads a single "
"command from the command line and executes it.  If the 'B<-f>' option is "
"used to read commands from a file, B<halcmd> reads each line of the file as "
"a new command.  Anything following 'B<#>' on a line is a comment."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:98
#, no-wrap
msgid "B<loadrt> I<modname>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:103
msgid ""
"(I<load> I<r>ealI<t>ime module)  Loads a realtime HAL module called "
"I<modname>.  B<halcmd> looks for the module in a directory specified at "
"compile time."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:114
msgid ""
"In systems with realtime, B<halcmd> calls the B<linuxcnc_module_helper> to "
"load realtime modules.  B<linuxcnc_module_helper> is a setuid program and is "
"compiled with a whitelist of modules it is allowed to load.  This is "
"currently just a list of B<LinuxCNC>-related modules.  The "
"B<linuxcnc_module_helper> execs insmod, so return codes and error messages "
"are those from insmod.  Administrators who wish to restrict which users can "
"load these B<LinuxCNC>-related kernel modules can do this by setting the "
"permissions and group on B<linuxcnc_module_helper> appropriately."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:119
msgid ""
"In systems without realtime B<halcmd> calls the B<rtapi_app> which creates "
"the simulated realtime environment if it did not yet exist, and then loads "
"the requested component with a call to B<dlopen(3)>."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:119
#, no-wrap
msgid "B<unloadrt> I<modname>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:126
msgid ""
"(I<unload> I<r>ealI<t>ime module)  Unloads a realtime HAL module called "
"I<modname>.  If I<modname> is \"all\", it will unload all currently loaded "
"realtime HAL modules.  B<unloadrt> also works by execing "
"B<linuxcnc_module_helper> or B<rtapi_app>, just like B<loadrt>."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:126
#, no-wrap
msgid "B<loadusr> I<[flags]> I<unix-command>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:131
msgid ""
"(I<load> I<Us>eI<r>space component) Executes the given I<unix-command>, "
"usually to load a userspace component.  I<[flags]> may be one or more of:"
msgstr ""

#. type: IP
#: man/man1/halcmd.1:132 man/man1/halcmd.1:135 man/man1/halcmd.1:138
#: man/man1/halcmd.1:140 man/man1/halcompile.1:61 man/man1/halcompile.1:63
#: man/man1/halcompile.1:65 man/man1/halcompile.1:67 man/man1/halcompile.1:69
#: man/man1/halcompile.1:71 man/man1/halcompile.1:73 man/man1/halcompile.1:75
#: man/man1/halcompile.1:77 man/man1/hal_input.1:58 man/man1/hal_input.1:60
#: man/man1/hal_input.1:62 man/man1/hal_input.1:64 man/man3/hal_type_t.3hal:52
#: man/man3/hal_type_t.3hal:54 man/man9/estop_latch.9:36
#: man/man9/estop_latch.9:39 man/man9/estop_latch.9:42
#: man/man9/estop_latch.9:59 man/man9/estop_latch.9:62 man/man9/logic.9:37
#: man/man9/logic.9:39 man/man9/logic.9:41 man/man9/logic.9:43
#: man/man9/logic.9:45 man/man9/logic.9:47
#, no-wrap
msgid "\\(bu"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:135
msgid ""
"B<-W> to wait for the component to become ready.  The component is assumed "
"to have the same name as the first argument of the command."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:138
msgid "B<-Wn name> to wait for the component, which will have the given name."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:140
msgid "B<-w> to wait for the program to exit"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:142
msgid "B<-i> to ignore the program return value (with -w)"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:143
#, no-wrap
msgid "B<waitusr> I<name>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:150
msgid ""
"(I<wait> for I<Us>eI<r>space component) Waits for user space component "
"I<name> to disconnect from HAL (usually on exit).  The component must "
"already be loaded.  Useful near the end of a HAL file to wait until the user "
"closes some user interface component before cleaning up and exiting."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:150
#, no-wrap
msgid "B<unloadusr> I<compname>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:156
msgid ""
"(I<unload> I<Us>eI<r>space component)  Unloads a userspace component called "
"I<compname>.  If I<compname> is \"all\", it will unload all userspace "
"components.  B<unloadusr> works by sending SIGTERM to all userspace "
"components."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:156
#, no-wrap
msgid "B<unload> I<compname>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:160
msgid ""
"Unloads a userspace component or realtime module.  If I<compname> is \"all"
"\", it will unload all userspace components and realtime modules."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:160
#, no-wrap
msgid "B<newsig> I<signame> I<type>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:168
msgid ""
"(OBSOLETE - use B<net> instead) (I<new> I<sig>nal)  Creates a new HAL signal "
"called I<signame> that may later be used to connect two or more HAL "
"component pins.  I<type> is the data type of the new signal, and must be one "
"of \"B<bit>\", \"B<s32>\", \"B<u32>\", or \"B<float>\".  Fails if a signal "
"of the same name already exists."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:168
#, no-wrap
msgid "B<delsig> I<signame>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:173
msgid ""
"(I<del>ete I<sig>nal)  Deletes HAL signal I<signame>.  Any pins currently "
"linked to the signal will be unlinked.  Fails if I<signame> does not exist."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:173
#, no-wrap
msgid "B<sets> I<signame> I<value>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:179
msgid ""
"(I<set> I<s>ignal)  Sets the value of signal I<signame> to I<value>.  Fails "
"if I<signame> does not exist, if it already has a writer, or if I<value> is "
"not a legal value.  Legal values depend on the signals's type."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:179
#, no-wrap
msgid "B<stype> I<name>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:183
msgid ""
"(I<s>ignal type)  Gets the type of signal I<name>.  Fails if I<name> does "
"not exist as a signal."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:183
#, no-wrap
msgid "B<gets> I<signame>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:187
msgid ""
"(I<get> I<s>ignal)  Gets the value of signal I<signame>.  Fails if "
"I<signame> does not exist."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:187
#, no-wrap
msgid "B<linkps> I<pinname> [I<arrow>] I<signame>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:198
msgid ""
"(OBSOLETE - use B<net> instead) (I<link> I<p>in to I<s>ignal)  Establishes a "
"link between a HAL component pin I<pinname> and a HAL signal I<signame>.  "
"Any previous link to I<pinname> will be broken.  I<arrow> can be \"B<=E<gt>>"
"\", \"B<E<lt>=>\", \"B<E<lt>=E<gt>>\", or omitted.  B<halcmd> ignores "
"arrows, but they can be useful in command files to document the direction of "
"data flow.  Arrows should not be used on the command line since the shell "
"might try to interpret them.  Fails if either I<pinname> or I<signame> does "
"not exist, or if they are not the same type type."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:198
#, no-wrap
msgid "B<linksp> I<signame> [I<arrow>] I<pinname>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:204
msgid ""
"(OBSOLETE - use B<net> instead) (I<link> I<s>ignal to I<p>in)  Works like "
"B<linkps> but reverses the order of the arguments.  B<halcmd> treats both "
"link commands exactly the same.  Use whichever you prefer."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:204
#, no-wrap
msgid "B<linkpp> I<pinname1> [I<arrow>] I<pinname2>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:213
#, no-wrap
msgid ""
"(OBSOLETE - use B<net> instead) (I<link> I<p>in to I<p>in)\n"
"Shortcut for B<linkps> that creates the signal (named like the\n"
"first pin), then links them both to that signal.  B<halcmd> treats\n"
"this just as if it were:\n"
"   B<halcmd> B<newsig> pinname1\n"
"   B<halcmd> B<linksp> pinname1 pinname1\n"
"   B<halcmd> B<linksp> pinname1 pinname2\n"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:213
#, no-wrap
msgid "B<net> I<signame> I<pinname> I<...>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:219
msgid ""
"Create I<signname> to match the type of I<pinname> if it does not yet "
"exist.  Then, link I<signame> to each I<pinname> in turn.  Arrows may be "
"used as in B<linkps>. When linking a pin to a signal for the first time, the "
"signal value will inherit the pin's default value."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:220
#, no-wrap
msgid "B<unlinkp> I<pinname>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:225
msgid ""
"(I<unlink> I<p>in)  Breaks any previous link to I<pinname>.  Fails if "
"I<pinname> does not exist. An unlinked pin will retain the last value of the "
"signal it was linked to."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:226
#, no-wrap
msgid "B<setp> I<name> I<value>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:235
msgid ""
"(I<set> I<p>arameter or I<p>in)  Sets the value of parameter or pin I<name> "
"to I<value>.  Fails if I<name> does not exist as a pin or parameter, if it "
"is a parameter that is not writable, if it is a pin that is an output, if it "
"is a pin that is already attached to a signal, or if I<value> is not a legal "
"value.  Legal values depend on the type of the pin or parameter.  If a pin "
"and a parameter both exist with the given name, the parameter is acted on."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:235
#, no-wrap
msgid "I<paramname> B<=> I<value>"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:237
#, no-wrap
msgid "I<pinname> B<=> I<value>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:241
msgid ""
"Identical to B<setp>.  This alternate form of the command may be more "
"convenient and readable when used in a file."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:241
#, no-wrap
msgid "B<ptype> I<name>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:247
msgid ""
"(I<p>arameter or I<p>in I<type>)  Gets the type of parameter or pin "
"I<name>.  Fails if I<name> does not exist as a pin or parameter.  If a pin "
"and a parameter both exist with the given name, the parameter is acted on."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:247
#, no-wrap
msgid "B<getp> I<name>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:253
msgid ""
"(I<get> I<p>arameter or I<p>in)  Gets the value of parameter or pin "
"I<name>.  Fails if I<name> does not exist as a pin or parameter.  If a pin "
"and a parameter both exist with the given name, the parameter is acted on."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:253
#, no-wrap
msgid "B<addf> I<functname> I<threadname>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:260
msgid ""
"(I<add> I<f>unction)  Adds function I<functname> to realtime thread "
"I<threadname>.  I<functname> will run after any functions that were "
"previously added to the thread.  Fails if either I<functname> or "
"I<threadname> does not exist, or if they are incompatible."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:260
#, no-wrap
msgid "B<delf> I<functname> I<threadname>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:266
msgid ""
"(I<del>ete I<f>unction)  Removes function I<functname> from realtime thread "
"I<threadname>.  Fails if either I<functname> or I<threadname> does not "
"exist, or if I<functname> is not currently part of I<threadname>."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:266
#, no-wrap
msgid "B<start>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:271
msgid ""
"Starts execution of realtime threads.  Each thread periodically calls all of "
"the functions that were added to it with the B<addf> command, in the order "
"in which they were added."
msgstr ""

#. type: IP
#: man/man1/halcmd.1:271 man/man3/hal_port.3hal:106
#, no-wrap
msgid "B<stop>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:275
msgid ""
"Stops execution of realtime threads.  The threads will no longer call their "
"functions."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:275
#, no-wrap
msgid "B<show> [I<item>]"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:283
msgid ""
"Prints HAL items to I<stdout> in human readable format.  I<item> can be one "
"of \"B<comp>\" (components), \"B<pin>\", \"B<sig>\" (signals), \"B<param>"
"\" (parameters), \"B<funct>\" (functions), \"B<thread>\", or \"B<alias>\".  "
"The type \"B<all>\" can be used to show matching items of all the preceding "
"types.  If I<item> is omitted, B<show> will print everything."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:284
#, no-wrap
msgid "B<save> [I<item>]"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:290
msgid ""
"Prints HAL items to I<stdout> in the form of HAL commands.  These commands "
"can be redirected to a file and later executed using B<halcmd -f> to restore "
"the saved configuration.  I<item> can be one of the following:"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:293
msgid "\"B<comp>\" generates a B<loadrt> command for realtime component."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:296
msgid ""
"\"B<alias>\" generates an B<alias> command for each pin or parameter alias "
"pairing"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:301
msgid ""
"\"B<sig>\" (or \"B<signal>\")  generates a B<newsig> command for each "
"signal, and \"B<sigu>\" generates a B<newsig> command for each unlinked "
"signal (for use with B<netl> and B<netla>)."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:305
msgid ""
"\"B<link>\" and \"B<linka>\" both generate B<linkps> commands for each link. "
"(B<linka> includes arrows, while B<link> does not.)"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:309
#, no-wrap
msgid ""
" \"B<net>\" and \"B<neta>\" both generate one B<newsig> command for\n"
"each signal, followed by B<linksp> commands for each pin linked to that\n"
"signal.  (B<neta> includes arrows.)\n"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:314
msgid ""
"\"B<netl>\" generates one B<net> command for each linked signal, and "
"\"B<netla>\" (or \"B<netal>\")  generates a similar command using arrows."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:317
msgid ""
"\"B<param>\" (or \"B<parameter>) \"generates one B<setp> command for each "
"parameter."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:320
msgid ""
"\"B<thread>\" generates one B<addf> command for each function in each "
"realtime thread."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:323
msgid ""
"\"B<unconnectedinpins>\" generates a setp command for each unconnected HAL "
"input pin."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:327
msgid ""
"If I<item> is B<allu>), B<save> does the equivalent of B<comp>, B<alias>, "
"B<sigu>, B<netla>, B<param>, B<thread>, and B<unconnectedinpins>."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:331
msgid ""
"If I<item> is omitted (or B<all>), B<save> does the equivalent of B<comp>, "
"B<alias>, B<sigu>, B<netla>, B<param>, and B<thread>."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:332
#, no-wrap
msgid "B<source>  I<filename.hal>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:335
msgid "Execute the commands from I<filename.hal>."
msgstr ""

#. type: TP
#: man/man1/halcmd.1:335
#, no-wrap
msgid "B<alias> I<type> I<name> I<alias>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:347
#, no-wrap
msgid ""
"Assigns \"B<alias>\" as a second name for the pin or parameter\n"
"\"name\".  For most operations, an alias provides a second\n"
"name that can be used to refer to a pin or parameter, both the\n"
"original name and the alias will work.\n"
"   \"type\" must be B<pin> or B<param>.\n"
"   \"name\" must be an existing name or B<alias> of the specified type.\n"
"Note that the \"show\" command will only show the aliased name, but the\n"
"original name is still valid to use in HAL. The original names can still\n"
"be seen with \"show all\" or \"show alias\"\n"
"Existing nets will be preserved when a pin name is aliased.\n"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:347
#, no-wrap
msgid "B<unalias> I<type> I<alias>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:352
#, no-wrap
msgid ""
"Removes any alias from the pin or parameter alias.\n"
"  \"type\" must be B<pin> or B<param>\n"
"  \"alias\" must be an existing name or B<alias> of the specified type.\n"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:352
#, no-wrap
msgid "B<list> I<type> [I<pattern>]"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:364
#, no-wrap
msgid ""
"  Prints the names of HAL items of the specified type.\n"
"  'type' is 'B<comp>', 'B<pin>', 'B<sig>', 'B<param>', 'B<funct>', or\n"
"  'B<thread>'.  If 'pattern' is specified it prints only\n"
"  those names that match the pattern, which may be a\n"
"  'shell glob'.\n"
"  For 'B<sig>', 'B<pin>' and 'B<param>', the first pattern may be\n"
"  -tB<datatype> where datatype is the data type (e.g., 'float')\n"
"  in this case, the listed pins, signals, or parameters\n"
"  are restricted to the given data type\n"
"  Names are printed on a single line, space separated.\n"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:364
#, no-wrap
msgid "B<print> [I<message>]"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:368
#, no-wrap
msgid ""
"  Prints the filename, linenumber and an optional message.\n"
"  wrap the message in quotes if it has spaces.\n"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:368
#, no-wrap
msgid "B<lock> [I<all>|I<tune>|I<none>]"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:374
#, no-wrap
msgid ""
"  Locks HAL to some degree.\n"
"  none - no locking done.\n"
"  tune - some tuning is possible (B<setp> & such).\n"
"  all  - HAL completely locked.\n"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:374
#, no-wrap
msgid "B<unlock> [I<all>|I<tune>]"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:379
#, no-wrap
msgid ""
"  Unlocks HAL to some degree.\n"
"  tune - some tuning is possible (B<setp> & such).\n"
"  all  - HAL completely unlocked.\n"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:379
#, no-wrap
msgid "B<status> [I<type>]"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:384
#, no-wrap
msgid ""
"  Prints status info about HAL.\n"
"  'type' is 'B<lock>', 'B<mem>', or 'B<all>'.\n"
"  If 'type' is omitted, it assumes 'B<all>'.\n"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:384
#, no-wrap
msgid "B<debug> [I<level>]"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:387
#, no-wrap
msgid "  Sets the rtapi messaging level (see man3 rtapi_set_msg_level).\n"
msgstr ""

#. type: TP
#: man/man1/halcmd.1:387
#, no-wrap
msgid "B<help> [I<command>]"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:391
#, no-wrap
msgid ""
"  Give help information for command.\n"
"  If 'command' is omitted, list command and brief description.\n"
msgstr ""

#. type: SH
#: man/man1/halcmd.1:391
#, no-wrap
msgid "SUBSTITUTION"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:394
msgid ""
"After a command is read but before it is executed, several types of variable "
"substitution take place."
msgstr ""

#. type: SS
#: man/man1/halcmd.1:394
#, no-wrap
msgid "Environment Variables"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:396
msgid "Environment variables have the following formats:"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:398
msgid "B<$ENVVAR> followed by end-of-line or whitespace"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:400
msgid "B<$(ENVVAR)>"
msgstr ""

#. type: SS
#: man/man1/halcmd.1:400
#, no-wrap
msgid "INI file variables"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:403
msgid ""
"INI file variables are available only when an INI file was specified with "
"the halcmd B<-i> flag.  They have the following formats:"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:405
msgid "B<[SECTION]VAR> followed by end-of-line or whitespace"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:407
msgid "B<[SECTION](VAR)>"
msgstr ""

#. type: SH
#: man/man1/halcmd.1:407
#, no-wrap
msgid "LINE CONTINUATION"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:411
msgid ""
"The backslash character (B<\\e>) may be used to indicate the line is "
"extended to the next line.  The backslash character must be the last "
"character before the newline."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:416
msgid ""
"Original version by John Kasunich, as part of the LinuxCNC project.  Now "
"includes major contributions by several members of the project."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:419 man/man1/halrun.1:96 man/man1/haltcl.1:87
msgid ""
"Report bugs to the E<.URL http://sf.net/p/emc/bugs/ \"LinuxCNC bug tracker"
"\" .>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:421 man/man1/halmeter.1:114 man/man1/halrun.1:98
msgid "Copyright \\(co 2003 John Kasunich."
msgstr ""

#. type: Plain text
#: man/man1/halcmd.1:427
msgid ""
"B<halrun(1)> -- a convenience script to start a realtime environment, "
"process a HAL or a .tcl file, and optionally start an interactive command "
"session using B<halcmd> (described here) or B<haltcl>(1)."
msgstr ""

#. type: TH
#: man/man1/halcmd_twopass.1:25
#, no-wrap
msgid "HALCMD_TWOPASS"
msgstr ""

#. type: Plain text
#: man/man1/halcmd_twopass.1:28
msgid "halcmd_twopass - short description"
msgstr ""

#. type: Plain text
#: man/man1/halcmd_twopass.1:30
msgid "B<{name}>"
msgstr ""

#. type: Plain text
#: man/man1/halcmd_twopass.1:35
msgid ""
"B<halcmd_twopass> is a utility script used when parsing HAL files.  It is of "
"little relevance to normal users and is used internally by the system."
msgstr ""

#. type: Plain text
#: man/man1/halcmd_twopass.1:39
#, no-wrap
msgid ""
" B<http://linuxcnc.org/docs/html/hal/twopass.html>\n"
" B<LinuxCNC(1)>\n"
msgstr ""

#. type: TH
#: man/man1/halcompile.1:25
#, no-wrap
msgid "2007-10-17"
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:28
msgid "halcompile - Build, compile and install LinuxCNC HAL components"
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:33
msgid ""
"B<halcompile> [B<--compile>|B<--preprocess>|B<--document>|B<--view-doc>] "
"compfile..."
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:36
msgid "I<sudo> B<halcompile> [B<--install>|B<--install-doc>] compfile..."
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:39
msgid "B<halcompile> B<--compile> B<--userspace> cfile..."
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:42
msgid "I<sudo> B<halcompile> B<--install> B<--userspace> cfile..."
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:44
msgid "I<sudo> B<halcompile> B<--install> B<--userspace> pyfile..."
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:52
msgid ""
"When personalities are used in a comp file, HAL instances are exported "
"sequentially (typically by the mutually exclusive count= or names= "
"parameters).  If the number of exports exceeds the maximum number of "
"personalities, subsequent personalities are assigned modulo the maximum "
"number of personalities allowed."
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:57
#, no-wrap
msgid ""
"By default, the maximum number of personalities is 64.  To alter this\n"
"limit, use the B<--personalities=> option with halcompile.  For example,\n"
"to set the maximum of  personality items to 4:\n"
"   [sudo] B<halcompile --personalities=4> --install ...\n"
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:61
msgid "B<halcompile> performs many different functions:"
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:63
msgid ""
"Compile B<.comp> and B<.c> files into B<.so> or B<.ko> HAL realtime "
"components (the B<--compile> flag)"
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:65
msgid ""
"Compile B<.comp> and B<.c> files into HAL userspace components (the B<--"
"compile --userspace> flag)"
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:67 man/man1/halcompile.1:79
msgid "Preprocess B<.comp> files into B<.c> files (the B<--preprocess> flag)"
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:69
msgid ""
"Extract documentation from B<.comp> files into B<.9> manpage files (the B<--"
"document> flag)"
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:71
msgid ""
"Display documentation from B<.comp> files onscreen (the B<--view-doc> flag)"
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:73
msgid ""
"Compile and install B<.comp> and B<.c> files into the proper directory for "
"HAL realtime components (the B<--install> flag), which may require I<sudo> "
"to write to system directories."
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:75
msgid ""
"Install B<.c> and B<.py> files into the proper directory for HAL userspace "
"components (the B<--install --userspace> flag), which may require I<sudo> to "
"write to system directories."
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:77
msgid ""
"Extract documentation from B<.comp> files into B<.9> manpage files in the "
"proper system directory (the B<--install> flag), which may require I<sudo> "
"to write to system directories."
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:81
msgid ""
"I<Halcompile HAL Component Generator> in the LinuxCNC documentation for a "
"full description of the B<.comp> syntax, along with examples"
msgstr ""

#. type: Plain text
#: man/man1/halcompile.1:82
msgid ""
"B<pydoc, HAL> and I<Creating Userspace Python Components> in the LinuxCNC "
"documentation for documentation on the Python interface to HAL components"
msgstr ""

#. type: TH
#: man/man1/hal-histogram.1:25
#, no-wrap
msgid "HAL-HISTOGRAM"
msgstr ""

#. type: Plain text
#: man/man1/hal-histogram.1:28
msgid "hal-histogram - plots the value of a HAL pin as a histogram"
msgstr ""

#. type: Plain text
#: man/man1/hal-histogram.1:30
msgid "B<hal-histogram>"
msgstr ""

#. type: Plain text
#: man/man1/hal-histogram.1:33
msgid "B<hal-histogram> represents the values of a HAL pin graphically."
msgstr ""

#. type: Plain text
#: man/man1/hal-histogram.1:35 man/man1/pncconf.1:35
msgid "Details:"
msgstr ""

#. type: TH
#: man/man1/hal_input.1:1
#, no-wrap
msgid "HAL_INPUT"
msgstr ""

#. type: TH
#: man/man1/hal_input.1:1
#, no-wrap
msgid "2007-02-25"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:4
msgid ""
"hal_input - control HAL pins with any Linux input device, including USB HID "
"devices"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:6
msgid "I<loadusr> B<hal_input> I<[-KRAL] inputspec ...>"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:11
msgid ""
"hal_input is an interface between HAL and any Linux input device, including "
"USB HID devices.  For each device named, B<hal_input> creates pins "
"corresponding to its keys, absolute axes, and LEDs.  At a fixed rate of "
"approximately 10ms, it synchronizes the device and the HAL pins."
msgstr ""

#. type: SH
#: man/man1/hal_input.1:11
#, no-wrap
msgid "INPUT SPECIFICATION"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:13
msgid "The I<inputspec> may be in one of several forms:"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:13
#, no-wrap
msgid "A string I<S>"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:19
msgid ""
"A substring or shell-style pattern match will be tested against the \"name\" "
"of the device, the \"phys\" (which gives information about how it is "
"connected), and the \"id\", which is a string of the form \"Bus=... "
"Vendor=... Product=...  Version=...\".  You can view the name, phys, and id "
"of attached devices by executing B<less /proc/bus/input/devices>.  Examples:"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:22
msgid "SpaceBall"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:24
msgid "Vendor=001f Product=0001"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:26
msgid "serio*/input0"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:28
#, no-wrap
msgid "A number I<N>"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:33
msgid ""
"This opens B</dev/input/event>I<N>.  Except for devices that are always "
"attached to the system, this number may change over reboots or when the "
"device is removed.  For this reason, using an integer is not recommended."
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:38
msgid ""
"When several devices are identified by the same string, add \"B<:>I<N>\" "
"where I<N> is the index of the desired device.  For example, if B<Mouse> "
"matches B<input3> and B<input10>, then B<Mouse> and B<Mouse:0> select "
"B<input3>.  Specifying B<mouse:1> selects input10."
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:44
msgid ""
"For devices that appear as multiple entries in /dev/input, these indices are "
"likely to stay the same every time.  For multiple identical devices, these "
"indices are likely to depend on the insertion order, but stay the same "
"across reboots as long as the devices are not moved to different ports or "
"unplugged while the machine is booted."
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:48
msgid ""
"If the first character of the I<inputspec> is a \"+\", then B<hal_input> "
"requests exclusive access to the device.  The first device matching an "
"I<inputspec> is used.  Any number of I<inputspec>s may be used."
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:53
msgid ""
"A I<subset option may precede each inputspec>.  The subset option begins "
"with a dash.  Each letter in the subset option specifies a device feature to "
"B<include>.  Features that are not specified are excluded.  For instance, to "
"export keyboard LEDs to HAL without exporting keys, use"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:55
msgid "hal_input -L I<keyboard> ..."
msgstr ""

#. type: SH
#: man/man1/hal_input.1:57
#, no-wrap
msgid "DEVICE FEATURES SUPPORTED"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:60
msgid "EV_KEY (buttons and keys).  Subset -K"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:62
msgid "EV_ABS (absolute analog inputs).  Subset -A"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:64
msgid "EV_REL (relative analog inputs).  Subset -R"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:66
msgid "EV_LED (LED outputs).  Subset -L"
msgstr ""

#. type: SH
#: man/man1/hal_input.1:66
#, no-wrap
msgid "HAL PINS AND PARAMETERS"
msgstr ""

#. type: SS
#: man/man1/hal_input.1:67
#, no-wrap
msgid "For buttons"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:68
#, no-wrap
msgid "B<input.>I<N>B<.btn->I<name> bit out"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:72
#, no-wrap
msgid "B<input.>I<N>B<.btn->I<name>B<-not> bit out"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:75
msgid "Created for each button on the device."
msgstr ""

#. type: SS
#: man/man1/hal_input.1:75
#, no-wrap
msgid "For keys"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:76
#, no-wrap
msgid "B<input.>I<N>B<.key->I<name>"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:80
#, no-wrap
msgid "B<input.>I<N>B<.key->I<name>B<-not>"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:83
msgid "Created for each key on the device."
msgstr ""

#. type: SS
#: man/man1/hal_input.1:83
#, no-wrap
msgid "For absolute axes"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:84
#, no-wrap
msgid "B<input.>I<N>B<.abs->I<name>B<-counts> s32 out"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:88
#, no-wrap
msgid "B<input.>I<N>B<.abs->I<name>B<-position> float out"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:92
#, no-wrap
msgid "B<input.>I<N>B<.abs->I<name>B<-scale> parameter float rw"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:96
#, no-wrap
msgid "B<input.>I<N>B<.abs->I<name>B<-offset> parameter float rw"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:100
#, no-wrap
msgid "B<input.>I<N>B<.abs->I<name>B<-fuzz> parameter s32 rw"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:104
#, no-wrap
msgid "B<input.>I<N>B<.abs->I<name>B<-flat> parameter s32 rw"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:108
#, no-wrap
msgid "B<input.>I<N>B<.abs->I<name>B<-min> parameter s32 r"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:112
#, no-wrap
msgid "B<input.>I<N>B<.abs->I<name>B<-max> parameter s32 r"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:123
msgid ""
"Created for each absolute axis on the device.  Device positions closer than "
"B<flat> to B<offset> are reported as B<offset> in B<counts>, and B<counts> "
"does not change until the device position changes by at least B<fuzz>.  The "
"position is computed as B<position> = (B<counts> - B<offset>) / B<scale>.  "
"The default value of B<scale> and B<offset> map the range of the axis "
"reported by the operating system to [-1,1].  The default values of B<fuzz> "
"and B<flat> are those reported by the operating system.  The values of "
"B<min> and B<max> are those reported by the operating system."
msgstr ""

#. type: SS
#: man/man1/hal_input.1:123
#, no-wrap
msgid "For relative axes"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:124
#, no-wrap
msgid "B<input.>I<N>B<.rel->I<name>B<-counts> s32 out"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:128
#, no-wrap
msgid "B<input.>I<N>B<.rel->I<name>B<-position> float out"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:132
#, no-wrap
msgid "B<input.>I<N>B<.rel->I<name>B<-reset> bit in"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:136
#, no-wrap
msgid "B<input.>I<N>B<.rel->I<name>B<-scale> parameter float rw"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:140
#, no-wrap
msgid "B<input.>I<N>B<.rel->I<name>B<-absolute> parameter s32 rw"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:144
#, no-wrap
msgid "B<input.>I<N>B<.rel->I<name>B<-precision> parameter s32 rw"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:148
#, no-wrap
msgid "B<input.>I<N>B<.rel->I<name>B<-last> parameter s32 rw"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:162
msgid ""
"Created for each relative axis on the device.  As long as B<reset> is true, "
"B<counts> is reset to zero regardless of any past or current axis movement.  "
"Otherwise, B<counts> increases or decreases according to the motion of the "
"axis.  B<counts> is divided by position-scale to give B<position>.  The "
"default value of B<position> is 1.  There are some devices, notably scroll "
"wheels, which return signed values with less resolution than 32 bits.  The "
"default value of B<precision> is 32.  B<precision> can be set to 8 for a "
"device that returns signed 8 bit values, or any other value from 1 to 32.  "
"B<absolute>, when set true, ignores duplicate events with the same value.  "
"This allows for devices that repeat events without any user action to work "
"correctly.  B<last> shows the most recent count value returned by the "
"device, and is used in the implementation of B<absolute>."
msgstr ""

#. type: SS
#: man/man1/hal_input.1:162
#, no-wrap
msgid "For LEDs"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:163
#, no-wrap
msgid "B<input.>I<N>B<.led->I<name> bit out"
msgstr ""

#. type: TP
#: man/man1/hal_input.1:167
#, no-wrap
msgid "B<input.>I<N>B<.led->I<name>B<-invert> parameter bit rw"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:170
msgid "Created for each LED on the device."
msgstr ""

#. type: SH
#: man/man1/hal_input.1:170
#, no-wrap
msgid "PERMISSIONS AND UDEV"
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:174
msgid ""
"By default, the input devices may not be accessible to regular users--"
"B<hal_input> requires read-write access, even if the device has no outputs."
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:182
msgid ""
"Different versions of udev have slightly different, incompatible syntaxes.  "
"For this reason, it is not possible for this manual page to give an accurate "
"example.  The B<udev(7)> manual page documents the syntax used on your Linux "
"distribution.  To view it in a terminal, the command is B<man 7 udev>."
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:186
msgid ""
"The initial state of keys, buttons, and absolute axes are erroneously "
"reported as FALSE or 0 until an event is received for that key, button, or "
"axis."
msgstr ""

#. type: Plain text
#: man/man1/hal_input.1:187
msgid "B<udev(8)>, B<udev(7)>"
msgstr ""

#. type: TH
#: man/man1/hal_manualtoolchange.1:23
#, no-wrap
msgid "hal_manualtoolchange"
msgstr ""

#. type: TH
#: man/man1/hal_manualtoolchange.1:23
#, no-wrap
msgid "04 APR 2017"
msgstr ""

#. type: TH
#: man/man1/hal_manualtoolchange.1:23
#, no-wrap
msgid "HAL Userspace Component"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:26
msgid ""
"hal_manualtoolchange - HAL userspace component to enable manual tool changes."
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:28
msgid "loadusr hal_manualtoolchange"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:33
msgid ""
"hal_manualtoolchange is a LinuxCNC userspace component that allows users "
"with machines lacking automatic tool changers to make manual tool changes.  "
"In use when a M6 tool change is encountered, the motion component will stop "
"the spindle and pause the program.  The hal_manualtoolchange component will "
"then receive a signal from the motion component causing it to display a tool "
"change window prompting the user which tool number to load based on the last "
"T- number programmed.  The dialog will stay active until the \"continue\" "
"button is pressed.  When the \"continue\" button is pressed, "
"hal_manualtoolchange will then signal the motion component that the tool "
"change is complete thus allowing motion to turn the spindle back on and "
"resume program execution."
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:35
msgid ""
"Additionally, the hal_manualtoolchange component includes a hal pin for a "
"button that can be connected to a physical button to complete the tool "
"change and remove the window prompt (hal_manualtoolchange.change_button)."
msgstr ""

#. type: TP
#: man/man1/hal_manualtoolchange.1:39
#, no-wrap
msgid "B<hal_manualtoolchange.number> s32 in"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:42
msgid "Receives last programmed T- number."
msgstr ""

#. type: TP
#: man/man1/hal_manualtoolchange.1:42
#, no-wrap
msgid "B<hal_manualtoolchange.change> bit in"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:45
msgid "Receives signal to do tool change."
msgstr ""

#. type: TP
#: man/man1/hal_manualtoolchange.1:45
#, no-wrap
msgid "B<hal_manualtoolchange.changed> bit out"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:48
msgid "Signifies that the tool change is complete."
msgstr ""

#. type: TP
#: man/man1/hal_manualtoolchange.1:48
#, no-wrap
msgid "B<hal_manualtoolchange.change_button> bit in"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:51
msgid ""
"Pin to allow an external switch to signify that the tool change is complete."
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:54
msgid ""
"Normal usage is to load the component in your HAL file and net the "
"appropriate pins from theI< motion> andI< io> components.  The following "
"lines are typical in a HAL file when using the hal_manualtoolchange "
"userspace component."
msgstr ""

#. type: TP
#: man/man1/hal_manualtoolchange.1:54
#, no-wrap
msgid "B<loadusr -W hal_manualtoolchange>"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:57
msgid ""
"This will load the hal_manualtoolchange userspace component waiting for the "
"component to be ready before continuing."
msgstr ""

#. type: TP
#: man/man1/hal_manualtoolchange.1:57
#, no-wrap
msgid "B<net tool-change iocontrol.0.tool-change =E<gt> hal_manualtoolchange.change>"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:62
msgid ""
"When an M6 code is run, motion sets I< iocontrol.0.tool-change > to high "
"indicating a tool change.  This pin should be netted to I< "
"hal_manualtoolchange.change>.  This causes the Tool change dialog to be "
"displayed on screen and wait for the user to either click the continue "
"button on the dialog or press an externally connected button."
msgstr ""

#. type: TP
#: man/man1/hal_manualtoolchange.1:62
#, no-wrap
msgid "B<net tool-changed iocontrol.0.tool-changed E<lt>= hal_manualtoolchange.changed>"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:69
msgid ""
"When the Tool change dialog's continue button is pressed, it will set the "
"I<hal_manualtoolchange.changed> pin to high, this should be netted to the "
"I<iocontrol.0.tool-changed> pin, indicating to the motion controller that "
"the tool change has been completed and can continue with the execution of "
"the G-code program."
msgstr ""

#. type: TP
#: man/man1/hal_manualtoolchange.1:69
#, no-wrap
msgid "B<net tool-number iocontrol.0.tool-prep-number =E<gt> hal_manualtoolchange.number>"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:76
msgid ""
"When a T- command is executed in a G-code program, the tool number will held "
"in the I<iocontrol.0.tool-prep-number>.  This pin should be netted to "
"I<hal_manualtoolchange.number>.  The value of this pin, the tool number is "
"displayed in the tool change dialog to let the user know which tool should "
"be loaded."
msgstr ""

#. type: TP
#: man/man1/hal_manualtoolchange.1:76
#, no-wrap
msgid "B<net tool-prepare-loopback iocontrol.0.tool-prepare =E<gt> iocontrol.0.tool-prepared>"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:80
msgid ""
"The I< iocontrol.0.tool-prepare > pin will go true when a TI<n> tool prepare "
"is requested.  Since there is not automated tool changer this pin should be "
"netted to I< iocontrol.0.tool-prepared > to indocate that the tool has been "
"prepared."
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:83
msgid ""
"If you wish to use an external button to signal the hal_manualtoolchange "
"component that the tool change is complete simply bring the button into HAL "
"(via a parport input pin or a hostmot2 gpio input or similar), and wire it "
"directly to the I< hal_manualtoolchange.change_button > pin.  For Example:"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:85
msgid ""
"B<net tool-changed-btn hal_manualtoolchange.change_button E<lt>= parport.0."
"pin-15-in>"
msgstr ""

#. type: Plain text
#: man/man1/hal_manualtoolchange.1:86
msgid "motion(1), iocontrol(1), halcmd(1)."
msgstr ""

#. type: TH
#: man/man1/halmeter.1:26
#, no-wrap
msgid "HALMETER"
msgstr ""

#. type: TH
#: man/man1/halmeter.1:26
#, no-wrap
msgid "2006-03-13"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:29
msgid "halmeter - observe HAL pins, signals, and parameters"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:32
msgid ""
"B<halmeter> [B<-s>] [B<pin>|B<sig>|B<param> I<name>] [B<-g> I<X-position Y-"
"position [Width]>]"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:36
msgid ""
"B<halmeter> is used to observe HAL (Hardware Abstraction Layer) pins, "
"signals, or parameters.  It serves the same purpose as a multimeter does "
"when working on physical systems."
msgstr ""

#. type: TP
#: man/man1/halmeter.1:37
#, no-wrap
msgid "B<pin> I<name>"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:40
msgid "Display the HAL pin I<name>."
msgstr ""

#. type: TP
#: man/man1/halmeter.1:40
#, no-wrap
msgid "B<sig> I<name>"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:43
msgid "Display the HAL signal I<name>."
msgstr ""

#. type: TP
#: man/man1/halmeter.1:43
#, no-wrap
msgid "B<param> I<name>"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:46
msgid "Display the HAL parameter I<name>."
msgstr ""

#. type: TP
#: man/man1/halmeter.1:46
#, no-wrap
msgid "If neither B<pin>, B<sig>, or B<param> are specified, the window starts out blank and the user must select an item to observe."
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:54
msgid ""
"Small window.  Non-interactive, must be used with B<pin>, B<sig>, or "
"B<param> to select the item to display.  The item name is displayed in the "
"title bar instead of the window, and there are no \"Select\" or \"Exit\" "
"buttons.  Handy when you want a lot of meters in a small space."
msgstr ""

#. type: TP
#: man/man1/halmeter.1:54
#, no-wrap
msgid "B<-g>"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:61
msgid ""
"Geometry position.  Allows one to specify the initial starting position and "
"optionally the width of the meter. Referenced from top left of screen in "
"pixel units.  Handy when you want to load a lot of meters in a script with "
"out them displaying on top of each other."
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:65
msgid ""
"Unless B<\\e-s> is specified, there are two buttons, \"Select\" and \"Exit"
"\".  \"Select\" opens a dialog box to select the item (pin, signal, or "
"parameter)  to be observed.  \"Exit\" does what you expect."
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:70
msgid ""
"The selection dialog has \"OK\", \"Apply\", and \"Cancel\" buttons.  OK "
"displays the selected item and closes the dialog.  \"Apply\" displays the "
"selected item but keeps the selection dialog open.  \"Cancel\" closes the "
"dialog without changing the displayed item."
msgstr ""

#. type: TP
#: man/man1/halmeter.1:73
#, no-wrap
msgid "B<halmeter>"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:78
msgid ""
"Opens a meter window, with nothing initially displayed.  Use the \"Select\" "
"button to choose an item to observe.  Does not return until the window is "
"closed."
msgstr ""

#. type: TP
#: man/man1/halmeter.1:78
#, no-wrap
msgid "B<halmeter &>"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:83
msgid ""
"Open a meter window, with nothing initially displayed.  Use the \"Select\" "
"button to choose an item.  Runs in the background leaving the shell free for "
"other commands."
msgstr ""

#. type: TP
#: man/man1/halmeter.1:83
#, no-wrap
msgid "B<halmeter pin> I<parport.0.pin-03-out> B<&>"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:87
msgid ""
"Open a meter window, initially displaying HAL pin I<parport.0.pin-03-out>.  "
"The \"Select\" button can be used to display other items.  Runs in "
"background."
msgstr ""

#. type: TP
#: man/man1/halmeter.1:88
#, no-wrap
msgid "B<halmeter -s pin> I<parport.0.pin-03-out> B<&>"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:92
msgid ""
"Open a small meter window, displaying HAL pin I<parport.0.pin-03-out>.  The "
"displayed item cannot be changed.  Runs in background."
msgstr ""

#. type: TP
#: man/man1/halmeter.1:93
#, no-wrap
msgid "B<halmeter -s pin> I<parport.0.pin-03-out> B<-g> I<100 500> B<&>"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:98
msgid ""
"Open a small meter window, displaying HAL pin I<parport.0.pin-03-out>.  "
"places it 100 pixels to the left and 500 pixels down from top of screen.  "
"The displayed item cannot be changed.  Runs in background."
msgstr ""

#. type: TP
#: man/man1/halmeter.1:99
#, no-wrap
msgid "B<halmeter -s pin> I<parport.0.pin-03-out> B<-g> I<100 500 400> B<&>"
msgstr ""

#. type: Plain text
#: man/man1/halmeter.1:105
msgid ""
"Open a small meter window, displaying HAL pin I<parport.0.pin-03-out>.  "
"places it 100 pixels to the left and 500 pixels down from top of screen.  "
"The width will be 400 pixels (270 is default)  The displayed item cannot be "
"changed.  Runs in background."
msgstr ""

#. type: TH
#: man/man1/hal_parport.1:23
#, no-wrap
msgid "hal_parport"
msgstr ""

#. type: TH
#: man/man1/hal_parport.1:23
#, no-wrap
msgid "12 APR 2017"
msgstr ""

#. type: TH
#: man/man1/hal_parport.1:23
#, no-wrap
msgid "HAL Realtime Component"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:26
msgid ""
"hal_parport - Realtime HAL component to communicate with one or more pc "
"parallel ports."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:28
msgid ""
"B<loadrt hal_parport cfg=\">I<port_addr >[I<type>] [[I<port_addr "
">[I<type>] ...]B<\">"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:30
msgid ""
"The hal_parport component is a realtime component that provides connections "
"from HAL via halpins to the physical pins of one or more parallel ports.  It "
"provides a read and write function to send and receive data to the attached "
"parallel port(s)."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:32
msgid "The hal_parport component supports up to B<8 >physical parallel ports."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:33
#, no-wrap
msgid "B<cfg=\"port_addr [type] [[port_addr [type] ...]\">"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:38
msgid ""
"The cfg string tells hal_parport the address(es) of the parallel port(s) and "
"whether the port(s) is/are used as an input or output port(s).  Up to eight "
"parallel ports are supported by the component."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:41
msgid ""
"The B<port_addr >parameter of the configuration string may be either the "
"physical base address of a parallel port or specified as the detected "
"parallel port via Linux parport_pc driver.  In which case, a B<port_addr >of "
"I<0 >is the first parallel port detected on the system, I<1 >is the next, "
"and so on."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:44
msgid ""
"The B<type >parameter of the configuration string determines how the I/O "
"bits of the port are used.  There are four possible options and if none is "
"specified will default to out."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:47
msgid ""
"I<in >- Sets the 8 bits of the data port to input.  In this mode the "
"parallel port has a total of 13 input pins and 4 output pins."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:50
msgid ""
"I<out >- Sets the 8 bits of the data port to output.  In this mode the "
"parallel port has a total of 5 input pins and 12 output pins."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:52
msgid ""
"I<epp >- This option is the same as setting to out, but can cause the "
"computer to change the electrical characteristics of the port, see USAGE "
"below."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:54
msgid ""
"I<x >- The option allows ports with open collectorts on the control group "
"pins to be configured as inputs resulting in 8 output pins and 9 input pins, "
"see USAGE below."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:55
#, no-wrap
msgid "The pins created by the hal_parport component depends on how it is configured in the B<cfg=\"\" >string passed to it, see OPTIONS."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:59
msgid ""
"B<parport.E<lt>pE<gt>.pin-E<lt>nE<gt>-out (bit) >Drives a physical output "
"pin."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:61
msgid ""
"B<parport.E<lt>pE<gt>.pin-E<lt>nE<gt>-in (bit) >Tracks a physical input pin."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:63
msgid ""
"B<parport.E<lt>pE<gt>.pin-E<lt>nE<gt>-in-not (bit) >Tracks a physical input "
"pin, but inverted."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:65
msgid ""
"For each pin created, B<E<lt>pE<gt> >is the port number, and B<E<lt>nE<gt> "
">is the physical pin number in the 25 pin D-shell connector."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:67
msgid ""
"For each physical output pin, the driver creates a single HAL pin, for "
"example: B<parport.0.pin-14-out>."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:69
msgid ""
"For each physical input pin, the driver creates two HAL pins, for example: "
"B<parport.0.pin-12-in >and B<parport.0.pin-12-in-not>."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:71
msgid ""
"The B<-in >HAL pin is TRUE if the physical pin is high, and FALSE if the "
"physical pin is low. The B<-in-not >HAL pin is inverted and is FALSE if the "
"physical pin is high."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:73
msgid ""
"The following lists the input and output pins by the type setting used in "
"the cfg=\"\" string."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:75
msgid ""
"B<in>: Pins 2,3,4,5,6,7,8,9,10,11,12,13,15 are input pins and pins 1,14,16 "
"and 17 are output pins."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:77
msgid ""
"B<out/epp>: Pins 10,11,12,13 and 15 are input pins and pins "
"1,2,3,4,5,6,7,8,9,14,16 and 17 are output pins."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:79
msgid ""
"B<x>: Pins 1,10,11,12,13,14,15,16 and 17 are input pins and pins "
"2,3,4,5,6,7,8,9 are output pins. (I<See USAGE section>.)"
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:80
#, no-wrap
msgid "B<parport.E<lt>pE<gt>.pin-E<lt>nE<gt>-out-invert (bit)>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:83
msgid "Inverts an output pin."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:83
#, no-wrap
msgid "B<parport.E<lt>pE<gt>.pin-E<lt>nE<gt>-out-reset (bit)>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:86
msgid ""
"(only for out pins) TRUE if this pin should be reset when the .reset "
"function is executed."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:86
#, no-wrap
msgid "B<parport.E<lt>pE<gt>.reset-time' (U32)>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:89
msgid ""
"The time (in nanoseconds) between a pin is set by write and reset by the "
"reset function if it is enabled."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:90
#, no-wrap
msgid "B<parport.E<lt>pE<gt>.read(funct)>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:93
msgid ""
"Reads physical input pins of port E<lt>portnumE<gt> and updates HAL -in and -"
"in-not pins."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:93
#, no-wrap
msgid "B<parport.read-all (funct)>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:96
msgid ""
"Reads physical input pins of all ports and updates HAL -in and -in-not pins."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:96
#, no-wrap
msgid "B<parport.E<lt>pE<gt>.write (funct)>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:99
msgid ""
"Reads HAL -out pins of port E<lt>pE<gt> and updates that port's physical "
"output pins."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:99
#, no-wrap
msgid "B<parport.write-all (funct)>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:102
msgid "Reads HAL -out pins of all ports and updates all physical output pins."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:102
#, no-wrap
msgid "B<parport.E<lt>pE<gt>.reset (funct)>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:108
msgid ""
"Waits until I<reset-time >has elapsed since the associated write, then "
"resets pins to values indicated by I<-out-reset >and I<-out-invert "
">settings.  Reset must be later in the same thread as write. 'If 'I<-out-"
"reset >is TRUE, then the reset function will set the pin to the value of I<-"
"out-invert>.  This can be used in conjunction with stepgen's doublefreq to "
"produce one step per period.  The stepgen stepspace for that pin must be set "
"to 0 to enable doublefreq."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:113
msgid ""
"The hal_parport component is a driver for the traditional PC parallel port.  "
"The port has a total of 25 physical pins of which 17 are used for signals.  "
"The original parallel port divided those pins into three groups: data, "
"control, and status.  The data group consists of 8 output pins, the control "
"group consists of 4 output pins, and the status group consists of 5 input "
"pins."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:118
msgid ""
"In the early 1990's, the bidirectional parallel port was introduced, which "
"allows the data group to be used for output or input.  The HAL driver "
"supports the bidirectional port, and allows the user to set the data group "
"as either input or output.  If configured as I<out>, a port provides a total "
"of 12 outputs and 5 inputs.  If configured as I<in>, it provides 4 outputs "
"and 13 inputs."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:121
msgid ""
"In some parallel ports, the control group pins are open collectors, which "
"may also be driven low by an external gate.  On a board with open collector "
"control pins, if configured as I<x>, it provides 8 outputs, and 9 inputs."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:123
#, no-wrap
msgid "B<Note: HAL and Open Collectors>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:127
msgid ""
"HAL cannot automatically determine if the x mode bidirectional pins are "
"actually open collectors (OC).  If they are not, they cannot be used as "
"inputs, and attempting to drive them LOW from an external source can damage "
"the hardware."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:133
msgid ""
"To determine whether your port has open collector pins, load hal_parport in "
"x mode.  With no device attached, HAL should read the pin as TRUE.  Next, "
"insert a 470 ohm resistor from one of the control pins to GND.  If the "
"resulting voltage on the control pin is close to 0V, and HAL now reads the "
"pin as FALSE, then you have an OC port.  If the resulting voltage is far "
"from 0V, or HAL does not read the pin as FALSE, then your port cannot be "
"used in x mode."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:137
msgid ""
"On some computers, BIOS settings may affect whether x mode can be used. SPP "
"mode is most likely to work."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:142
msgid ""
"The parport driver can control up to 8 ports (defined by MAX_PORTS in "
"hal_parport.c).  The ports are numbered starting at zero."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:142
#, no-wrap
msgid "B<Loading the hal_parport component>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:148
msgid ""
"The hal_parport driver is a real time component so it must be loaded into "
"the real time thread with loadrt.  The configuration string describes the "
"parallel ports to be used, and (optionally) their types.  If the "
"configuration string does not describe at least one port, it is an error."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:150
msgid "B<loadrt hal_parport cfg=\"port [type] [port [type] ...]\">"
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:150
#, no-wrap
msgid "B<Specifying the Port>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:156
msgid ""
"Numbers below 16 refer to parallel ports detected by the system.  This is "
"the simplest way to configure the hal_parport driver, and cooperates with "
"the Linux parport_pc driver if it is loaded.  A port of 0 is the first "
"parallel port detected on the system, 1 is the next, and so on."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:156
#, no-wrap
msgid "B<Basic configuration>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:162
#, no-wrap
msgid "      B<loadrt hal_parport cfg=\"0\">\n"
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:162
#, no-wrap
msgid "B<Using the Port Address>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:166
msgid ""
"Instead, the port address may be specified using the hex notation 0x then "
"the address."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:168
#, no-wrap
msgid "      B<loadrt hal_parport cfg=\"0x378\">\n"
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:168
#, no-wrap
msgid "B<Specifying a port Type>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:172
msgid ""
"For each parallel port handled by the hal_parport driver, a type can "
"optionally be specified. The type is one of in, out, epp, or x."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:174
msgid "If the type is not specified, the default is out."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:178
msgid ""
"A type of epp is the same as out, but the hal_parport driver requests that "
"the port switch into EPP mode.  The hal_parport driver does not use the EPP "
"bus protocol, but on some systems EPP mode changes the electrical "
"characteristics of the port in a way that may make some marginal hardware "
"work better.  The Gecko G540's charge pump is known to require this on some "
"parallel ports."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:180
msgid "See the Note above about mode x."
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:180
#, no-wrap
msgid "B<Example with two parallel ports>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:186
#, no-wrap
msgid "      B<loadrt hal_parport cfg=\"0 out 1 in\">\n"
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:186
#, no-wrap
msgid "B<Functions single port>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:190
msgid "You must also direct LinuxCNC to run the read and write functions."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:193
#, no-wrap
msgid ""
"      B<addf parport.read-all base-thread\n"
"      addf parport.write-all base-thread>\n"
msgstr ""

#. type: TP
#: man/man1/hal_parport.1:193
#, no-wrap
msgid "B<Functions multiple ports>"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:197
msgid ""
"You can direct LinuxCNC to ruin the read and write functions for all the "
"attached ports."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:200
#, no-wrap
msgid ""
"      B<addf parport.0.read base-thread\n"
"      addf parport.0.write base-thread>\n"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:203
msgid ""
"The individual functions are provided for situations where one port needs to "
"be updated in a very fast thread, but other ports can be updated in a slower "
"thread to save CPU time.  It is probably not a good idea to use both an -all "
"function and an individual function at the same time."
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:206
msgid ""
"Parallel Port Driver (Hardware Drivers Section of LinuxCNC Docs), "
"B<PCI>ParallelB<Port>ExampleB<(Hardware>ExamplesB<Section>ofB<LinuxCNC>Docs)"
msgstr ""

#. type: Plain text
#: man/man1/hal_parport.1:209
msgid ""
"This man page written by Joe Hildreth as part of the LinuxCNC project.  Most "
"of this information was taken from the parallel-port docs located in the "
"Hardware Drivers section of the documentation.  To the best of my knowledge "
"that documentation was written by Sebastian Kuzminsky and Chris Radek."
msgstr ""

#. type: TH
#: man/man1/halreport.1:25
#, no-wrap
msgid "HALREPORT"
msgstr ""

#. type: Plain text
#: man/man1/halreport.1:28
msgid "halreport - creates a report on the status of the HAL"
msgstr ""

#. type: Plain text
#: man/man1/halreport.1:30
msgid "B<halreport [outfilename]>"
msgstr ""

#. type: Plain text
#: man/man1/halreport.1:33
msgid "B<halreport>"
msgstr ""

#. type: Plain text
#: man/man1/halreport.1:43
#, no-wrap
msgid ""
" 1) supports components made by halcompile and numerous\n"
"    legacy components\n"
" 2) Known unhandled components:\n"
"    at_pid   -- naming conflicts with pid, seldom used\n"
"    boss_plc -- no manpage or docs (any users?)\n"
"    watchdog -- seldom used (no users in-tree)\n"
" 3) deprecated/obsolete components\n"
"    counter\n"
"    supply\n"
msgstr ""

#. type: Plain text
#: man/man1/halreport.1:48
#, no-wrap
msgid ""
" Identificaion of functions used according to pin name.\n"
" Default handling works for components that:\n"
" 1) use names=|count= (.comp components created with halcompile)\n"
" 2) have a *single* function\n"
msgstr ""

#. type: Plain text
#: man/man1/halreport.1:50
msgid "Full docs:"
msgstr ""

#. type: TH
#: man/man1/halrmt.1:25
#, no-wrap
msgid "HALRMT"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:28
msgid "halrmt - short description"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:30
msgid "B<halrmt>"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:33
msgid "B<halrmt> is a remote-control interface for LinuxCNC."
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:38
#, no-wrap
msgid ""
"  halrmt {-- --port E<lt>port numberE<gt> --name E<lt>server nameE<gt> --connectpw E<lt>passwordE<gt>\n"
"             --enablepw E<lt>passwordE<gt> --sessions E<lt>max sessionsE<gt> -ini E<lt>INI fileE<gt>}\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:47
#, no-wrap
msgid ""
"  With -- --port Waits for socket connections (telnet) on specified socket, without port\n"
"            uses default port 5006. (note: linuxcncrsh uses 5007 as default)\n"
"  With -- --name E<lt>server nameE<gt> Sets the server name to specified name for Hello.\n"
"  With -- --connectpw E<lt>passwordE<gt> Sets the connection password to 'password'. Default EMC\n"
"  With -- --enablepw E<lt>passwordE<gt> Sets the enable password to 'password'. Default EMCTOO\n"
"  With -- --sessions E<lt>max sessionsE<gt> Sets the maximum number of simultaneous connextions\n"
"            to max sessions. Default is no limit (-1).\n"
"  With -- -ini I<E<lt>INI fileE<gt>>, uses the specified I<INI file> instead of the default emc.ini. \n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:52
#, no-wrap
msgid ""
"  There are six commands supported, Where the commands set and get contain HAL\n"
"  specific sub-commands based on the commands supported by halcmd. Commands and \n"
"  most parameters are not case sensitive. The exceptions are passwords, \n"
"  file paths and text strings.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:54 man/man1/schedrmt.1:55
#, no-wrap
msgid "  The supported commands are as follows:\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:56 man/man1/schedrmt.1:57
#, no-wrap
msgid "  ==E<gt> HELLO E<lt>==\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:59 man/man1/schedrmt.1:60
#, no-wrap
msgid ""
"  Hello E<lt>passwordE<gt> E<lt>clientE<gt> E<lt>versionE<gt>\n"
"  If a valid password was entered the server will respond with\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:61 man/man1/schedrmt.1:62
#, no-wrap
msgid "  HELLO ACK E<lt>Server NameE<gt> E<lt>Server VersionE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:65 man/man1/schedrmt.1:66
#, no-wrap
msgid ""
"  Where server name and server version are looked up from the implementation.\n"
"  if an invalid password or any other syntax error occurs then the server \n"
"  responds with:\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:67 man/man1/schedrmt.1:68
#, no-wrap
msgid "  HELLO NAK\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:69 man/man1/schedrmt.1:70
#, no-wrap
msgid "  ==E<gt> Get E<lt>==\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:72
#, no-wrap
msgid ""
"  The get command includes one of the HAL sub-commands, described below and\n"
"  zero or more additional parameters. \n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:74 man/man1/schedrmt.1:75
#, no-wrap
msgid "  ==E<gt> Set E<lt>==\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:77
#, no-wrap
msgid ""
"  The set command inclides one of the HAL sub-commands, described below and\n"
"  one or more additional parameters.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:79 man/man1/schedrmt.1:80
#, no-wrap
msgid "  ==E<gt> Quit E<lt>==\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:81 man/man1/schedrmt.1:82
#, no-wrap
msgid "  The quit command disconnects the associated socket connection.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:83 man/man1/schedrmt.1:84
#, no-wrap
msgid "  ==E<gt> Shutdown E<lt>==\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:88
#, no-wrap
msgid ""
"  The shutdown command tells LinuxCNC to shut down before quitting the connection. This\n"
"  command may only be issued if the Hello has been successfully negotiated and the\n"
"  connection has control of the CNC (see enable sub-command below). This command\n"
"  has no parameters.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:90 man/man1/schedrmt.1:91
#, no-wrap
msgid "  ==E<gt> Help E<lt>==\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:96 man/man1/schedrmt.1:97
#, no-wrap
msgid ""
"  The help command will return help information in text format over the telnet\n"
"  connection. If no parameters are specified, it will itemize the available commands.\n"
"  If a command is specified, it will provide usage information for the specified\n"
"  command. Help will respond regardless of whether a \"Hello\" has been\n"
"  successfully negotiated.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:99
#, no-wrap
msgid "  HAL sub-commands:\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:104 man/man1/schedrmt.1:105
#, no-wrap
msgid ""
"  echo on | off\n"
"  With get will return the current echo state, with set, sets the echo\n"
"  state. When echo is on, all commands will be echoed upon receipt. This\n"
"  state is local to each connection.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:111 man/man1/schedrmt.1:112
#, no-wrap
msgid ""
"  verbose on | off\n"
"  With get will return the current verbose state, with set, sets the\n"
"  verbose state. When in verbose mode is on, all set commands return\n"
"  positive acknowledgement in the form SET E<lt>COMMANDE<gt> ACK. In addition,\n"
"  text error messages will be issued when in verbose mode. This state\n"
"  is local to each connection.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:117 man/man1/schedrmt.1:118
#, no-wrap
msgid ""
"  enable E<lt>pwdE<gt> | off\n"
"  With get will return On or Off to indicate whether the current connection\n"
"  is enabled to perform control functions. With set and a valid password,\n"
"  the current connection is enabled for control functions. \"OFF\" may not\n"
"  be used as a password and disables control functions for this connection.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:119 man/man1/schedrmt.1:120
#, no-wrap
msgid "  config [TBD]\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:124 man/man1/schedrmt.1:125
#, no-wrap
msgid ""
"  comm_mode ascii | binary\n"
"  With get, will return the current communications mode. With set, will\n"
"  set the communications mode to the specified mode. The binary protocol \n"
"  is TBD.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:130 man/man1/schedrmt.1:131
#, no-wrap
msgid ""
"  comm_prot E<lt>version noE<gt>\n"
"  With get, returns the current protocol version used by the server,\n"
"  with set, sets the server to use the specified protocol version,\n"
"  provided it is lower than or equal to the highest version number\n"
"  supported by the server implementation.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:132
#, no-wrap
msgid "  Comps [E<lt>substringE<gt>]\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:135
#, no-wrap
msgid ""
"  Get only, returns all components beginning with the specified substring. \n"
"  If no substring is specified then it returns all components.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:137
#, no-wrap
msgid "  Pins [E<lt>substringE<gt>]\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:140
#, no-wrap
msgid ""
"  Get only, returns all information about all pins beginning with the\n"
"  specified substring. If no substring is specified then it returns all pins.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:142
#, no-wrap
msgid "  PinVals [E<lt>substringE<gt>]\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:145
#, no-wrap
msgid ""
"  Get only, returns only value information about all pins beginning with the\n"
"  specified substring. If no substring is specified then it returns all pins.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:147
#, no-wrap
msgid "  Signals [E<lt>substringE<gt>]\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:150
#, no-wrap
msgid ""
"  Get only, returns all information about all signals beginning with the\n"
"  specified substring. If no substring is specified then it returns all signals.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:152
#, no-wrap
msgid "  SigVals [E<lt>substringE<gt>]\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:155
#, no-wrap
msgid ""
"  Get only, returns only value information about all signals beginning with the\n"
"  specified substring. If no substring is specified then it returns all pins.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:157
#, no-wrap
msgid "  Params [E<lt>substringE<gt>]\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:161
#, no-wrap
msgid ""
"  Get only, returns all information about all parameters beginning with the\n"
"  specified substring. If no substring is specified then it returns all \n"
"  parameters.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:163
#, no-wrap
msgid "  ParamVals [E<lt>substringE<gt>]\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:167
#, no-wrap
msgid ""
"  Get only, returns only value information about all parameters beginning with the\n"
"  specified substring. If no substring is specified then it returns all pins\n"
"  parameters.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:169
#, no-wrap
msgid "  Functs [E<lt>substringE<gt>]\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:173
#, no-wrap
msgid ""
"  Get only, returns all information about all functions beginning with the\n"
"  specified substring. If no substring is specified then it returns all \n"
"  functions.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:175
#, no-wrap
msgid "  Threads\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:177
#, no-wrap
msgid "  Get only, returns all information about all functions.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:179
#, no-wrap
msgid "  Comp E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:181
#, no-wrap
msgid "  Get only, returns the component matching the specified name.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:183
#, no-wrap
msgid "  Pin E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:186 man/man1/halrmt.1:195
#, no-wrap
msgid ""
"  Get only, returns all information about the pin matching the specified \n"
"  name.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:188
#, no-wrap
msgid "  PinVal E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:190
#, no-wrap
msgid "  Get only, returns the value of the pin matching the specified name.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:192
#, no-wrap
msgid "  Sig E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:197
#, no-wrap
msgid "  SigVal E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:200
#, no-wrap
msgid ""
"  Get only, returns just the value of the signal matching the specified\n"
"  name.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:202
#, no-wrap
msgid "  Param E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:205 man/man1/halrmt.1:215
#, no-wrap
msgid ""
"  Get only, returns all information about the parameter matching the \n"
"  specified name.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:207
#, no-wrap
msgid "  ParamVal E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:210
#, no-wrap
msgid ""
"  Get only, returns just the value of the parameter matching the specified\n"
"  name.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:212
#, no-wrap
msgid "  Funct E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:217
#, no-wrap
msgid "  Thread E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:220
#, no-wrap
msgid ""
"  Get only, returns all information about the thread matching the \n"
"  specified name.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:222
#, no-wrap
msgid "  LoadRt E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:224
#, no-wrap
msgid "  Set only, loads the real time executable specified by name.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:226
#, no-wrap
msgid "  Unload E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:228
#, no-wrap
msgid "  Set only, unloads the executable specified by name.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:230
#, no-wrap
msgid "  LoadUsr E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:232
#, no-wrap
msgid "  Set only, loads the user executable specified by name.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:234
#, no-wrap
msgid "  Linkps E<lt>pin nameE<gt> E<lt>signal nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:236
#, no-wrap
msgid "  Set only, links the specified pin to the specified signal.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:238
#, no-wrap
msgid "  Linksp E<lt>signal nameE<gt> E<lt>pin nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:240
#, no-wrap
msgid "  Set only, links the specified signal to the specified pin.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:242
#, no-wrap
msgid "  Linkpp E<lt>pin name 1E<gt> E<lt>pin name 2E<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:244
#, no-wrap
msgid "  Set only, links the pin specified by pin 1 with the pin specified by pin 2.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:246
#, no-wrap
msgid "  Net E<lt>net listE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:248
#, no-wrap
msgid "  Set only, nets the specified net list.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:250
#, no-wrap
msgid "  Unlinkp E<lt>pin name 1E<gt> E<lt>pin name 2E<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:252
#, no-wrap
msgid "  Set only, unlinks the specified pins\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:254
#, no-wrap
msgid "  Lock\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:256
#, no-wrap
msgid "  Unlock\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:258
#, no-wrap
msgid "  NewSig E<lt>nameE<gt> E<lt>typeE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:260
#, no-wrap
msgid "  Set only, creates the signal specified by name and of type specified by type.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:262
#, no-wrap
msgid "  DelSig E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:264
#, no-wrap
msgid "  Set only, deletes the signal specified by name.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:266
#, no-wrap
msgid "  SetP E<lt>nameE<gt> E<lt>valueE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:268
#, no-wrap
msgid "  Set only, sets the parameter specified by name to the value specified by value.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:270
#, no-wrap
msgid "  SetS E<lt>nameE<gt> E<lt>valueE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:272
#, no-wrap
msgid "  Set only, sets the signal specified by name to the value specified by value.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:274
#, no-wrap
msgid "  AddF E<lt>nameE<gt> E<lt>threadE<gt> [E<lt>parametersE<gt>]\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:276
#, no-wrap
msgid "  Set only, adds the function specified by name, to the thread specified by thread, with the optional parameters specified by parameters.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:278
#, no-wrap
msgid "  DelF E<lt>nameE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:280
#, no-wrap
msgid "  Set only, deletes the function specified by name.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:282
#, no-wrap
msgid "  Save \n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:284
#, no-wrap
msgid "  Start\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:286
#, no-wrap
msgid "  Stop\n"
msgstr ""

#. type: Plain text
#: man/man1/halrmt.1:295
msgid "It is not known if this interface currently works."
msgstr ""

#. type: TH
#: man/man1/halrun.1:30
#, no-wrap
msgid "HALRUN"
msgstr ""

#. type: TH
#: man/man1/halrun.1:30 man/man1/haltcl.1:30
#, no-wrap
msgid "2012-01-31"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:33
msgid "halrun - manipulate the LinuxCNC HAL from the command line"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:35
msgid "B<halrun >I<-h>"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:37
msgid "B<halrun [>I<-I>] [I<halcmd_opts>] [I<filename[.hal|.tcl]>]"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:39
msgid "B<halrun >I<-T> [I<halcmd_opts>] [I<filename[.hal|.tcl]>]"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:41
msgid "B<halrun >I<-U>"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:44
msgid ""
"B<halrun> is a convenience script used to manipulate the HAL (Hardware "
"Abstraction Layer) from the command line.  When invoked, B<halrun>:"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:49
#, no-wrap
msgid ""
"    Sets up the realtime environment.\n"
"    Executes a command interpreter (B<halcmd> or B<haltcl>).\n"
"    (Optionally) runs an interactive session.\n"
"    Tears down the realtime environment.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:53
#, no-wrap
msgid ""
"    If no filename is specified, an interactive session is started.\n"
"    The session will use B<halcmd>(1) unless -T is specified in\n"
"    which case B<haltcl>(1) will be used.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:59
#, no-wrap
msgid ""
"    If a filename is specified and neither the -I nor the -T option\n"
"    is included, the filename will be processed by the command\n"
"    interpreter corresponding to the filename extension (B<halcmd>\n"
"    or B<haltcl>).  After processing, the realtime environment\n"
"    will be torn down.\n"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:64
#, no-wrap
msgid ""
"    If a filename is specified and the -I or -T option is included,\n"
"    the file is processed by the appropriate command interpreter and\n"
"    then an interactive session is started for B<halcmd> or\n"
"    B<haltcl> according to the -I or -T option.\n"
msgstr ""

#. type: TP
#: man/man1/halrun.1:66
#, no-wrap
msgid "B<halcmd_opts>"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:73
#, no-wrap
msgid ""
"When a .hal file is specified, the B<halcmd_opts> are\n"
"passed to B<halcmd>.  See the man page for B<halcmd>(1).\n"
"When a .tcl file is specified, the only valid options are:\n"
"    -i E<lt>INI fileE<gt>\n"
"    -f E<lt>filename[.tcl|.hal]E<gt>  (alternate means of specifying a file)\n"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:76
msgid "Run an interactive B<halcmd> session"
msgstr ""

#. type: TP
#: man/man1/halrun.1:76
#, no-wrap
msgid "B<-T>"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:79
msgid "Run an interactive B<haltcl> session."
msgstr ""

#. type: TP
#: man/man1/halrun.1:79
#, no-wrap
msgid "B<-U>"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:84
msgid ""
"Forcibly cause the realtime environment to exit.  It releases the HAL mutex, "
"requests that all HAL components unload, and stops the realtime system.  B<-"
"U> must be the only commandline argument."
msgstr ""

#. type: TP
#: man/man1/halrun.1:84
#, no-wrap
msgid "B<-h>"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:87
msgid "display a brief help screen and exit"
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:93
msgid ""
"Original version by John Kasunich, as part of the LinuxCNC Enhanced Machine "
"Controller project.  Now includes major contributions by several members of "
"the project."
msgstr ""

#. type: Plain text
#: man/man1/halrun.1:103
msgid "B<halcmd>(1), B<haltcl>(1)"
msgstr ""

#. type: TH
#: man/man1/halsampler.1:26
#, no-wrap
msgid "HALSAMPLER"
msgstr ""

#. type: TH
#: man/man1/halsampler.1:26 man/man9/sampler.9:26
#, no-wrap
msgid "2006-11-18"
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:29
msgid "halsampler - sample data from HAL in realtime"
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:32
msgid "B<halsampler> [I<options>]"
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:44
msgid ""
"B<sampler>(9)  and B<halsampler> are used together to sample HAL data in "
"real time and store it in a file.  B<sampler> is a realtime HAL component "
"that exports HAL pins and creates a FIFO in shared memory.  It then begins "
"sampling data from the HAL and storing it to the FIFO.  B<halsampler> is a "
"user space program that copies data from the FIFO to stdout, where it can be "
"redirected to a file or piped to some other program."
msgstr ""

#. type: TP
#: man/man1/halsampler.1:46
#, no-wrap
msgid "B<-c >I<CHAN>"
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:54
msgid ""
"instructs B<halsampler> to read from FIFO I<CHAN>.  FIFOs are numbered from "
"zero, and the default value is zero, so this option is not needed unless "
"multiple FIFOs have been created."
msgstr ""

#. type: TP
#: man/man1/halsampler.1:54
#, no-wrap
msgid "B<-n >I<COUNT>"
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:65
msgid ""
"instructs B<halsampler> to read I<COUNT> samples from the FIFO, then exit.  "
"If B<-n> is not specified, B<halsampler> will read continuously until it is "
"killed."
msgstr ""

#. type: TP
#: man/man1/halsampler.1:65
#, no-wrap
msgid "B<-t>"
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:70
msgid ""
"instructs B<halsampler> to tag each line by printing the sample number in "
"the first column."
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:75
msgid "instructs B<halsampler> to write to B<FILENAME> instead of to stdout."
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:85
msgid ""
"A FIFO must first be created by loading B<sampler>(9)  with B<halcmd loadrt> "
"or a B<loadrt> command in a HAL file.  Then B<halsampler> can be invoked to "
"begin printing data from the FIFO to stdout."
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:94
msgid ""
"Data is printed one line per sample.  If B<-t> was specified, the sample "
"number is printed first.  The data follows, in the order that the pins were "
"defined in the config string.  For example, if the B<sampler> config string "
"was \"ffbs\" then a typical line of output (without B<-t>)  would look like:"
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:96
msgid "123.55 33.4 0 -12"
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:105
msgid ""
"B<halsampler> prints data as fast as possible until the FIFO is empty, then "
"it retries at regular intervals, until it is either killed or has printed "
"I<COUNT> samples as requested by B<-n>.  Usually, but not always, data "
"printed by B<halsampler> will be redirected to a file or piped to some other "
"program."
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:116
msgid ""
"The FIFO size should be chosen to absorb samples captured during any "
"momentary disruptions in the flow of data, such as disk seeks, terminal "
"scrolling, or the processing limitations of subsequent program in a "
"pipeline.  If the FIFO gets full and B<sampler> is forced to overwrite old "
"data, B<halsampler> will print 'overrun' on a line by itself to mark each "
"gap in the sampled data.  If B<-t> was specified, gaps in the sequential "
"sample numbers in the first column can be used to determine exactly how many "
"samples were lost."
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:128
msgid ""
"The data format for B<halsampler> output is the same as for "
"B<halstreamer>(1)  input, so 'waveforms' captured with B<halsampler> can be "
"replayed using B<halstreamer>.  The B<-t> option should not be used in this "
"case."
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:133
msgid ""
"If a problem is encountered during initialization, B<halsampler> prints a "
"message to stderr and returns failure."
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:143
msgid ""
"Upon printing I<COUNT> samples (if B<-n> was specified) it will shut down "
"and return success.  If it is terminated before printing the specified "
"number of samples, it returns failure.  This means that when B<-n> is not "
"specified, it will always return failure when terminated."
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:148
msgid "B<sampler>(9)  B<streamer>(9)  B<halstreamer>(1)"
msgstr ""

#. type: Plain text
#: man/man1/halsampler.1:157 man/man9/sampler.9:145
msgid "Copyright \\(co 2006 John Kasunich."
msgstr ""

#. type: TH
#: man/man1/halscope.1:25
#, no-wrap
msgid "HALSCOPE"
msgstr ""

#. type: Plain text
#: man/man1/halscope.1:28
msgid "halscope - short description"
msgstr ""

#. type: Plain text
#: man/man1/halscope.1:30
msgid "B<halscope>"
msgstr ""

#. type: Plain text
#: man/man1/halscope.1:33
msgid "B<halscope> Software oscilloscope for LinuxCNC/HAL"
msgstr ""

#. type: Plain text
#: man/man1/halscope.1:35
msgid ""
"Digital oscilloscope for viewing real time waveforms of HAL pins and signals"
msgstr ""

#. type: TH
#: man/man1/halshow.1:25
#, no-wrap
msgid "HALSHOW"
msgstr ""

#. type: Plain text
#: man/man1/halshow.1:28
msgid "halshow - Show HAL parameters, pins and signals"
msgstr ""

#. type: Plain text
#: man/man1/halshow.1:30
msgid "B<halshow [Options] [watchfile]>"
msgstr ""

#. type: Plain text
#: man/man1/halshow.1:35
#, no-wrap
msgid ""
"           --help    (help)\n"
"           --fformat format_string_for_float\n"
"           --iformat format_string_for_int\n"
msgstr ""

#. type: Plain text
#: man/man1/halshow.1:39
msgid ""
"For format see E<.UR https://www.tcl.tk/man/tcl8.6.11/TclCmd/format.html> E<."
"UE>"
msgstr ""

#. type: Plain text
#: man/man1/halshow.1:42
msgid ""
"Example: \"%.5f\" displays a float with 5 digits right of the decimal point"
msgstr ""

#. type: Plain text
#: man/man1/halshow.1:49
msgid ""
"B<halshow> creates a GUI interface to view and interact with a running HAL "
"session.  It is documented in the PDF and HTML docs much more completely "
"than is possible in a manpage: E<.UR http://linuxcnc.org/docs/html/hal/"
"halshow.html> E<.UE>"
msgstr ""

#. type: TP
#: man/man1/halshow.1:57
#, no-wrap
msgid "LinuxCNC 2.9:"
msgstr ""

#. type: Plain text
#: man/man1/halshow.1:60
msgid "- Added buttons for pin/parameter/signal manipulation"
msgstr ""

#. type: Plain text
#: man/man1/halshow.1:62
msgid "- Added menu entries for setting update interval, adding manually"
msgstr ""

#. type: Plain text
#: man/man1/halshow.1:64
msgid "- Added right-click menu for copy, set, unlink pin and remove from view"
msgstr ""

#. type: TH
#: man/man1/haltcl.1:30
#, no-wrap
msgid "HALTCL"
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:34
msgid ""
"haltcl - manipulate the LinuxCNC HAL from the command line using a Tcl "
"interpreter."
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:37
msgid "B<haltcl [>I<-i E<lt>INI fileE<gt>>] [I<filename>\\]"
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:44
msgid ""
"B<haltcl> is used to manipulate the HAL (Hardware Abstraction Layer) from "
"the command line using a Tcl interpreter.  B<haltcl> can optionally read "
"commands from a file (filename), allowing complex HAL configurations to be "
"set up with a single command."
msgstr ""

#. type: TP
#: man/man1/haltcl.1:46
#, no-wrap
msgid "B<-i> I<E<lt>INI fileE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:51
msgid ""
"If specified, the INI file is read and used to create Tcl global variable "
"arrays.  An array is created for each SECTION of the INI file with elements "
"for each ITEM in the section."
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:56
#, no-wrap
msgid ""
"       For example, if the INI file contains:\n"
"       [SECTION_A]ITEM_1 =  1\n"
"       [SECTION_A]ITEM_2 =  2\n"
"       [SECTION_B]ITEM_1 = 10\n"
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:61
#, no-wrap
msgid ""
"       The corresponding Tcl variables are:\n"
"       SECTION_A(ITEM_1) =  1\n"
"       SECTION_A(ITEM_2) =  2\n"
"       SECTION_B(ITEM_1) = 10\n"
msgstr ""

#. type: TP
#: man/man1/haltcl.1:61
#, no-wrap
msgid "B<-ini> I<E<lt>INI fileE<gt>> -- declining usage, use B<-i> I<E<lt>INI fileE<gt>>"
msgstr ""

#. type: TP
#: man/man1/haltcl.1:63
#, no-wrap
msgid "B<filename>"
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:67
msgid ""
"If specified, the Tcl commands of B<filename> are executed.  If no filename "
"is specified, haltcl opens an interactive session."
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:72
msgid ""
"B<haltcl> includes the commands of a Tcl interpreter augmented with commands "
"for the hal language as described for B<halcmd>(1).  The augmented commands "
"can be listed with the command:"
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:74
#, no-wrap
msgid "   haltcl: hal --commands\n"
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:76
#, no-wrap
msgid "   addf alias delf delsig getp gets ptype stype help linkpp linkps linksp list loadrt loadusr lock net newsig save setexact_for_test_suite_only setp sets show source start status stop unalias unlinkp unload unloadrt unloadusr unlock waitusr\n"
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:80
msgid ""
"Two of the augmented commands, 'list' and 'gets', require special treatment "
"to avoid conflict with Tcl built-in commands having the same names.  To use "
"these commands, precede them with the keyword 'hal':"
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:83
#, no-wrap
msgid ""
"   hal list\n"
"   hal gets\n"
msgstr ""

#. type: Plain text
#: man/man1/haltcl.1:93
msgid "B<halcmd>(1), B<halrun>(1)"
msgstr ""

#. type: TH
#: man/man1/halui.1:26
#, no-wrap
msgid "HALUI"
msgstr ""

#. type: TH
#: man/man1/halui.1:26
#, no-wrap
msgid "2006-07-22"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:29
msgid "halui - observe HAL pins and command LinuxCNC through NML"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:32
msgid "B<halui> [B<-ini E<lt>path-to-INIE<gt>>]"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:36
msgid ""
"B<halui> is used to build a User Interface using hardware knobs and "
"switches. It exports a big number of pins, and acts accordingly when these "
"change."
msgstr ""

#. type: TP
#: man/man1/halui.1:37
#, no-wrap
msgid "B<-ini filename>"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:42
msgid ""
"use the I<filename> as the configuration file. Note: halui must find the nml "
"file specified in the INI, usually that file is in the same folder as the "
"INI, so it makes sense to run halui from that folder."
msgstr ""

#. type: Plain text
#: man/man1/halui.1:46
msgid ""
"When run, B<halui> will export a large number of pins. A user can connect "
"those to his physical knobs & switches & leds, and when a change is noticed "
"halui triggers an appropriate event."
msgstr ""

#. type: Plain text
#: man/man1/halui.1:48
msgid ""
"B<halui> expects the signals to be debounced, so if needed (bad knob "
"contact) connect the physical button to a HAL debounce filter first."
msgstr ""

#. type: SS
#: man/man1/halui.1:51
#, no-wrap
msgid "abort"
msgstr ""

#. type: TP
#: man/man1/halui.1:52
#, no-wrap
msgid "B<halui.abort> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:55
msgid "pin for clearing most errors"
msgstr ""

#. type: SS
#: man/man1/halui.1:56
#, no-wrap
msgid "tool"
msgstr ""

#. type: TP
#: man/man1/halui.1:57
#, no-wrap
msgid "B<halui.tool.length-offset.a> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:60
msgid "current applied tool length offset for the A axis"
msgstr ""

#. type: TP
#: man/man1/halui.1:60
#, no-wrap
msgid "B<halui.tool.length-offset.b> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:63
msgid "current applied tool length offset for the B axis"
msgstr ""

#. type: TP
#: man/man1/halui.1:63
#, no-wrap
msgid "B<halui.tool.length-offset.c> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:66
msgid "current applied tool length offset for the C axis"
msgstr ""

#. type: TP
#: man/man1/halui.1:66
#, no-wrap
msgid "B<halui.tool.length-offset.u> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:69
msgid "current applied tool length offset for the U axis"
msgstr ""

#. type: TP
#: man/man1/halui.1:69
#, no-wrap
msgid "B<halui.tool.length-offset.v> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:72
msgid "current applied tool length offset for the V axis"
msgstr ""

#. type: TP
#: man/man1/halui.1:72
#, no-wrap
msgid "B<halui.tool.length-offset.w> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:75
msgid "current applied tool length offset for the W axis"
msgstr ""

#. type: TP
#: man/man1/halui.1:75
#, no-wrap
msgid "B<halui.tool.length-offset.x> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:78
msgid "current applied tool length offset for the X axis"
msgstr ""

#. type: TP
#: man/man1/halui.1:78
#, no-wrap
msgid "B<halui.tool.length-offset.y> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:81
msgid "current applied tool length offset for the Y axis"
msgstr ""

#. type: TP
#: man/man1/halui.1:81
#, no-wrap
msgid "B<halui.tool.length-offset.z> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:84
msgid "current applied tool length offset for the Z axis"
msgstr ""

#. type: TP
#: man/man1/halui.1:84
#, no-wrap
msgid "B<halui.tool.diameter> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:87
msgid "Current tool diameter, or 0 if no tool is loaded."
msgstr ""

#. type: TP
#: man/man1/halui.1:87
#, no-wrap
msgid "B<halui.tool.number> u32 out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:90
msgid "current selected tool"
msgstr ""

#. type: SS
#: man/man1/halui.1:91
#, no-wrap
msgid "spindle"
msgstr ""

#. type: TP
#: man/man1/halui.1:92
#, no-wrap
msgid "B<halui.spindle.N.brake-is-on> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:95
msgid "status pin that tells us if brake is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:95
#, no-wrap
msgid "B<halui.spindle.N.brake-off> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:98
msgid "pin for deactivating the spindle brake"
msgstr ""

#. type: TP
#: man/man1/halui.1:98
#, no-wrap
msgid "B<halui.spindle.N.brake-on> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:101
msgid "pin for activating the spindle brake"
msgstr ""

#. type: TP
#: man/man1/halui.1:101
#, no-wrap
msgid "B<halui.spindle.N.decrease> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:104
msgid "a rising edge on this pin decreases the current spindle speed by 100"
msgstr ""

#. type: TP
#: man/man1/halui.1:104
#, no-wrap
msgid "B<halui.spindle.N.forward> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:107
msgid "a rising edge on this pin makes the spindle go forward"
msgstr ""

#. type: TP
#: man/man1/halui.1:107
#, no-wrap
msgid "B<halui.spindle.N.increase> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:110
msgid "a rising edge on this pin increases the current spindle speed by 100"
msgstr ""

#. type: TP
#: man/man1/halui.1:110
#, no-wrap
msgid "B<halui.spindle.N.is-on> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:113
msgid "status pin telling if the spindle is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:113
#, no-wrap
msgid "B<halui.spindle.N.reverse> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:116
msgid "a rising edge on this pin makes the spindle go reverse"
msgstr ""

#. type: TP
#: man/man1/halui.1:116
#, no-wrap
msgid "B<halui.spindle.N.runs-backward> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:119
msgid "status pin telling if the spindle is running backward"
msgstr ""

#. type: TP
#: man/man1/halui.1:119
#, no-wrap
msgid "B<halui.spindle.N.runs-forward> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:122
msgid "status pin telling if the spindle is running forward"
msgstr ""

#. type: TP
#: man/man1/halui.1:122
#, no-wrap
msgid "B<halui.spindle.N.start> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:125
msgid "a rising edge on this pin starts the spindle"
msgstr ""

#. type: TP
#: man/man1/halui.1:125
#, no-wrap
msgid "B<halui.spindle.N.stop> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:128
msgid "a rising edge on this pin stops the spindle"
msgstr ""

#. type: SS
#: man/man1/halui.1:129
#, no-wrap
msgid "spindle override"
msgstr ""

#. type: TP
#: man/man1/halui.1:130
#, no-wrap
msgid "(SO = Spindle Override. FO = Feed Override)"
msgstr ""

#. type: TP
#: man/man1/halui.1:132
#, no-wrap
msgid "B<halui.spindle.N.override.count-enable> bit in  (default: B<TRUE>)"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:135
msgid "When TRUE, modify spindle override when counts changes."
msgstr ""

#. type: TP
#: man/man1/halui.1:135
#, no-wrap
msgid "B<halui.spindle.N.override.counts> s32 in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:138
msgid "counts X scale = spindle override percentage"
msgstr ""

#. type: TP
#: man/man1/halui.1:138
#, no-wrap
msgid "B<halui.spindle.N.override.decrease> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:141
msgid "pin for decreasing the SO (-=scale)"
msgstr ""

#. type: TP
#: man/man1/halui.1:141
#, no-wrap
msgid "B<halui.spindle.N.override.direct-value> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:144
msgid "pin to enable direct spindle override value input"
msgstr ""

#. type: TP
#: man/man1/halui.1:144
#, no-wrap
msgid "B<halui.spindle.N.override.increase> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:147
msgid "pin for increasing the SO (+=scale)"
msgstr ""

#. type: TP
#: man/man1/halui.1:147
#, no-wrap
msgid "B<halui.spindle.N.override.reset> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:150
msgid "pin for resetting the scale SO value (scale=1.0)"
msgstr ""

#. type: TP
#: man/man1/halui.1:150
#, no-wrap
msgid "B<halui.spindle.N.override.scale> float in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:153
msgid "pin for setting the scale of counts for SO"
msgstr ""

#. type: TP
#: man/man1/halui.1:153
#, no-wrap
msgid "B<halui.spindle.N.override.value> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:156
msgid "current FO value"
msgstr ""

#. type: SS
#: man/man1/halui.1:157
#, no-wrap
msgid "program"
msgstr ""

#. type: TP
#: man/man1/halui.1:158
#, no-wrap
msgid "B<halui.program.block-delete.is-on> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:161
msgid "status pin telling that block delete is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:161
#, no-wrap
msgid "B<halui.program.block-delete.off> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:164
msgid "pin for requesting that block delete is off"
msgstr ""

#. type: TP
#: man/man1/halui.1:164
#, no-wrap
msgid "B<halui.program.block-delete.on> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:167
msgid "pin for requesting that block delete is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:167
#, no-wrap
msgid "B<halui.program.is-idle> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:170
msgid "status pin telling that no program is running"
msgstr ""

#. type: TP
#: man/man1/halui.1:170
#, no-wrap
msgid "B<halui.program.is-paused> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:173
msgid "status pin telling that a program is paused"
msgstr ""

#. type: TP
#: man/man1/halui.1:173
#, no-wrap
msgid "B<halui.program.is-running> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:176
msgid "status pin telling that a program is running"
msgstr ""

#. type: TP
#: man/man1/halui.1:176
#, no-wrap
msgid "B<halui.program.optional-stop.is-on> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:179
msgid "status pin telling that the optional stop is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:179
#, no-wrap
msgid "B<halui.program.optional-stop.off> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:182
msgid "pin requesting that the optional stop is off"
msgstr ""

#. type: TP
#: man/man1/halui.1:182
#, no-wrap
msgid "B<halui.program.optional-stop.on> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:185
msgid "pin requesting that the optional stop is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:185
#, no-wrap
msgid "B<halui.program.pause> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:188
msgid "pin for pausing a program"
msgstr ""

#. type: TP
#: man/man1/halui.1:188
#, no-wrap
msgid "B<halui.program.resume> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:191
msgid "pin for resuming a program"
msgstr ""

#. type: TP
#: man/man1/halui.1:191
#, no-wrap
msgid "B<halui.program.run> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:194
msgid "pin for running a program"
msgstr ""

#. type: TP
#: man/man1/halui.1:194
#, no-wrap
msgid "B<halui.program.step> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:197
msgid "pin for stepping in a program"
msgstr ""

#. type: TP
#: man/man1/halui.1:197
#, no-wrap
msgid "B<halui.program.stop> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:201
msgid ""
"pin for stopping a program (note: this pin does the same thing as halui."
"abort)"
msgstr ""

#. type: SS
#: man/man1/halui.1:202
#, no-wrap
msgid "mode"
msgstr ""

#. type: TP
#: man/man1/halui.1:203
#, no-wrap
msgid "B<halui.mode.auto> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:206
msgid "pin for requesting auto mode"
msgstr ""

#. type: TP
#: man/man1/halui.1:206
#, no-wrap
msgid "B<halui.mode.is-auto> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:209
msgid "pin for auto mode is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:209
#, no-wrap
msgid "B<halui.mode.is-joint> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:212
msgid "pin showing joint by joint jog mode is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:212
#, no-wrap
msgid "B<halui.mode.is-manual> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:215
msgid "pin for manual mode is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:215
#, no-wrap
msgid "B<halui.mode.is-mdi> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:218
msgid "pin for MDI mode is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:218
#, no-wrap
msgid "B<halui.mode.is-teleop> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:221
msgid "pin showing coordinated jog mode is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:221
#, no-wrap
msgid "B<halui.mode.joint> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:224
msgid "pin for requesting joint by joint jog mode"
msgstr ""

#. type: TP
#: man/man1/halui.1:224
#, no-wrap
msgid "B<halui.mode.manual> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:227
msgid "pin for requesting manual mode"
msgstr ""

#. type: TP
#: man/man1/halui.1:227
#, no-wrap
msgid "B<halui.mode.mdi> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:230
msgid "pin for requesting MDI mode"
msgstr ""

#. type: TP
#: man/man1/halui.1:230
#, no-wrap
msgid "B<halui.mode.teleop> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:233
msgid "pin for requesting coordinated jog mode"
msgstr ""

#. type: SS
#: man/man1/halui.1:234
#, no-wrap
msgid "mdi R<(optional)>"
msgstr ""

#. type: TP
#: man/man1/halui.1:235
#, no-wrap
msgid "B<halui.mdi-command-XX> bit in"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:242
msgid ""
"B<halui> looks for INI variables named [HALUI]MDI_COMMAND, and exports a pin "
"for each command it finds.  When the pin is driven TRUE, B<halui> runs the "
"specified MDI command.  XX is a two digit number starting at 00.  If no "
"[HALUI]MDI_COMMAND variables are set in the INI file, no halui.mdi-command-"
"XX pins will be exported by halui."
msgstr ""

#. type: SS
#: man/man1/halui.1:243
#, no-wrap
msgid "mist"
msgstr ""

#. type: TP
#: man/man1/halui.1:244
#, no-wrap
msgid "B<halui.mist.is-on> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:247
msgid "pin for mist is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:247
#, no-wrap
msgid "B<halui.mist.off> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:250
msgid "pin for stopping mist"
msgstr ""

#. type: TP
#: man/man1/halui.1:250
#, no-wrap
msgid "B<halui.mist.on> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:253
msgid "pin for starting mist"
msgstr ""

#. type: SS
#: man/man1/halui.1:254
#, no-wrap
msgid "max-velocity"
msgstr ""

#. type: TP
#: man/man1/halui.1:255
#, no-wrap
msgid "B<halui.max-velocity.count-enable> bit in  (default: B<TRUE>)"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:258
msgid "When True, modify max velocity when halui.max-velocity.counts changes."
msgstr ""

#. type: TP
#: man/man1/halui.1:258
#, no-wrap
msgid "B<halui.max-velocity.counts> s32 in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:264
msgid ""
"When .count-enable is True, halui changes the max velocity in response to "
"changes to this pin.  It's usually connected to an MPG encoder on an "
"operator's panel or jog pendant.  When .count-enable is False, halui ignores "
"this pin."
msgstr ""

#. type: TP
#: man/man1/halui.1:264
#, no-wrap
msgid "B<halui.max-velocity.direct-value> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:270
msgid ""
"When this pin is True, halui commands the max velocity directly to (.counts "
"* .scale).  When this pin is False, halui commands the max velocity in a "
"relative way: change max velocity by an amount equal to (change in .counts "
"* .scale)."
msgstr ""

#. type: TP
#: man/man1/halui.1:270
#, no-wrap
msgid "B<halui.max-velocity.increase> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:275
msgid ""
"A positive edge (a False to True transition) on this pin increases the max "
"velocity by the value of the .scale pin.  (Note that halui always responds "
"to this pin, independent of the .count-enable pin.)"
msgstr ""

#. type: TP
#: man/man1/halui.1:275
#, no-wrap
msgid "B<halui.max-velocity.decrease> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:280
msgid ""
"A positive edge (a False to True transition) on this pin decreases the max "
"velocity by the value of the .scale pin.  (Note that halui always responds "
"to this pin, independent of the .count-enable pin.)"
msgstr ""

#. type: TP
#: man/man1/halui.1:280
#, no-wrap
msgid "B<halui.max-velocity.scale> float in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:286
msgid ""
"This pin controls the scale of changes to the max velocity.  Each unit "
"change in .counts, and each positive edge on .increase and .decrease, "
"changes the max velocity by .scale.  The units of the .scale pin are machine-"
"units per second."
msgstr ""

#. type: TP
#: man/man1/halui.1:286
#, no-wrap
msgid "B<halui.max-velocity.value> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:289
msgid "Current value for maximum velocity, in machine-units per second."
msgstr ""

#. type: SS
#: man/man1/halui.1:290
#, no-wrap
msgid "machine"
msgstr ""

#. type: TP
#: man/man1/halui.1:291
#, no-wrap
msgid "B<halui.machine.units-per-mm> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:295
msgid ""
"pin for machine units-per-mm (inch:1/25.4, mm:1)  according to INI file "
"setting: [TRAJ]LINEAR_UNITS"
msgstr ""

#. type: TP
#: man/man1/halui.1:295
#, no-wrap
msgid "B<halui.machine.is-on> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:298
msgid "pin for machine is On/Off"
msgstr ""

#. type: TP
#: man/man1/halui.1:298
#, no-wrap
msgid "B<halui.machine.off> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:301
msgid "pin for setting machine Off"
msgstr ""

#. type: TP
#: man/man1/halui.1:301
#, no-wrap
msgid "B<halui.machine.on> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:304
msgid "pin for setting machine On"
msgstr ""

#. type: SS
#: man/man1/halui.1:305
#, no-wrap
msgid "lube"
msgstr ""

#. type: TP
#: man/man1/halui.1:306
#, no-wrap
msgid "B<halui.lube.is-on> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:309
msgid "pin for lube is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:309
#, no-wrap
msgid "B<halui.lube.off> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:312
msgid "pin for stopping lube"
msgstr ""

#. type: TP
#: man/man1/halui.1:312
#, no-wrap
msgid "B<halui.lube.on> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:315
msgid "pin for starting lube"
msgstr ""

#. type: SS
#: man/man1/halui.1:316
#, no-wrap
msgid "joint R<(>NR< = joint number (0 ... num_joints-1))>"
msgstr ""

#. type: TP
#: man/man1/halui.1:317
#, no-wrap
msgid "B<halui.joint.N.select> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:320
msgid "pin for selecting joint I<N>"
msgstr ""

#. type: TP
#: man/man1/halui.1:320
#, no-wrap
msgid "B<halui.joint.N.is-selected> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:323
msgid "status pin that joint I<N> is selected"
msgstr ""

#. type: TP
#: man/man1/halui.1:323
#, no-wrap
msgid "B<halui.joint.N.has-fault> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:326
msgid "status pin telling that joint I<N> has a fault"
msgstr ""

#. type: TP
#: man/man1/halui.1:326
#, no-wrap
msgid "B<halui.joint.N.home> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:329
msgid "pin for homing joint I<N>"
msgstr ""

#. type: TP
#: man/man1/halui.1:329
#, no-wrap
msgid "B<halui.joint.N.is-homed> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:332
msgid "status pin telling that joint I<N> is homed"
msgstr ""

#. type: TP
#: man/man1/halui.1:332
#, no-wrap
msgid "B<halui.joint.N.on-hard-max-limit> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:335
msgid "status pin telling that joint I<N> is on the positive hardware limit"
msgstr ""

#. type: TP
#: man/man1/halui.1:335
#, no-wrap
msgid "B<halui.joint.N.on-hard-min-limit> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:338
msgid "status pin telling that joint I<N> is on the negative hardware limit"
msgstr ""

#. type: TP
#: man/man1/halui.1:338
#, no-wrap
msgid "B<halui.joint.N.on-soft-max-limit> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:341
msgid "status pin telling that joint I<N> is on the positive software limit"
msgstr ""

#. type: TP
#: man/man1/halui.1:341
#, no-wrap
msgid "B<halui.joint.N.on-soft-min-limit> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:344
msgid "status pin telling that joint I<N> is on the negative software limit"
msgstr ""

#. type: TP
#: man/man1/halui.1:344
#, no-wrap
msgid "B<halui.joint.N.override-limits> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:347
msgid "status pin telling that joint I<N>'s limits are temporarily overridden"
msgstr ""

#. type: TP
#: man/man1/halui.1:347
#, no-wrap
msgid "B<halui.joint.N.unhome> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:350
msgid "pin for unhoming joint I<N>"
msgstr ""

#. type: TP
#: man/man1/halui.1:350
#, no-wrap
msgid "B<halui.joint.selected> u32 out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:353
msgid "selected joint number (0 ... num_joints-1)"
msgstr ""

#. type: TP
#: man/man1/halui.1:353
#, no-wrap
msgid "B<halui.joint.selected.has-fault> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:356
msgid "status pin selected joint is faulted"
msgstr ""

#. type: TP
#: man/man1/halui.1:356
#, no-wrap
msgid "B<halui.joint.selected.home> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:359
msgid "pin for homing the selected joint"
msgstr ""

#. type: TP
#: man/man1/halui.1:359
#, no-wrap
msgid "B<halui.joint.selected.is-homed> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:362
msgid "status pin telling that the selected joint is homed"
msgstr ""

#. type: TP
#: man/man1/halui.1:362
#, no-wrap
msgid "B<halui.joint.selected.on-hard-max-limit> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:365
msgid ""
"status pin telling that the selected joint is on the positive hardware limit"
msgstr ""

#. type: TP
#: man/man1/halui.1:365
#, no-wrap
msgid "B<halui.joint.selected.on-hard-min-limit> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:368
msgid ""
"status pin telling that the selected joint is on the negative hardware limit"
msgstr ""

#. type: TP
#: man/man1/halui.1:368
#, no-wrap
msgid "B<halui.joint.selected.on-soft-max-limit> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:371
msgid ""
"status pin telling that the selected joint is on the positive software limit"
msgstr ""

#. type: TP
#: man/man1/halui.1:371
#, no-wrap
msgid "B<halui.joint.selected.on-soft-min-limit> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:374
msgid ""
"status pin telling that the selected joint is on the negative software limit"
msgstr ""

#. type: TP
#: man/man1/halui.1:374
#, no-wrap
msgid "B<halui.joint.selected.override-limits> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:377
msgid ""
"status pin telling that the selected joint's limits are temporarily "
"overridden"
msgstr ""

#. type: TP
#: man/man1/halui.1:377
#, no-wrap
msgid "B<halui.joint.selected.unhome> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:380
msgid "pin for unhoming the selected joint"
msgstr ""

#. type: SS
#: man/man1/halui.1:381
#, no-wrap
msgid "joint jogging R<(>NR< = joint number (0 ... num_joints-1))>"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:385
msgid ""
"B<halui.joint.jog-deadband> float in pin for setting jog analog deadband "
"(jog analog inputs smaller/slower than this (in absolute value) are ignored)"
msgstr ""

#. type: TP
#: man/man1/halui.1:385
#, no-wrap
msgid "B<halui.joint.jog-speed> float in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:388 man/man1/halui.1:448
msgid "pin for setting jog speed for plus/minus jogging."
msgstr ""

#. type: TP
#: man/man1/halui.1:388
#, no-wrap
msgid "B<halui.joint.N.analog> float in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:392
msgid ""
"pin for jogging the joint I<N> using an float value (e.g. joystick).  The "
"value, typically set between 0.0 and \\(+-1.0, is used as a jog-speed "
"multiplier."
msgstr ""

#. type: TP
#: man/man1/halui.1:392
#, no-wrap
msgid "B<halui.joint.N.increment> float in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:395
msgid ""
"pin for setting the jog increment for joint I<N> when using increment-plus/"
"minus"
msgstr ""

#. type: TP
#: man/man1/halui.1:395
#, no-wrap
msgid "B<halui.joint.N.increment-minus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:398
msgid ""
"a rising edge will will make joint I<N> jog in the negative direction by the "
"increment amount"
msgstr ""

#. type: TP
#: man/man1/halui.1:398
#, no-wrap
msgid "B<halui.joint.N.increment-plus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:401
msgid ""
"a rising edge will will make joint I<N> jog in the positive direction by the "
"increment amount"
msgstr ""

#. type: TP
#: man/man1/halui.1:401
#, no-wrap
msgid "B<halui.joint.N.minus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:404
msgid ""
"pin for jogging joint I<N> in negative direction at the halui.joint.jog-"
"speed velocity"
msgstr ""

#. type: TP
#: man/man1/halui.1:404
#, no-wrap
msgid "B<halui.joint.N.plus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:407
msgid ""
"pin for jogging joint I<N> in positive direction at the halui.joint.jog-"
"speed velocity"
msgstr ""

#. type: TP
#: man/man1/halui.1:407
#, no-wrap
msgid "B<halui.joint.selected.increment> float in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:410
msgid ""
"pin for setting the jog increment for the selected joint when using "
"increment-plus/minus"
msgstr ""

#. type: TP
#: man/man1/halui.1:410
#, no-wrap
msgid "B<halui.joint.selected.increment-minus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:413
msgid ""
"a rising edge will will make the selected joint jog in the negative "
"direction by the increment amount"
msgstr ""

#. type: TP
#: man/man1/halui.1:413
#, no-wrap
msgid "B<halui.joint.selected.increment-plus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:416
msgid ""
"a rising edge will will make the selected joint jog in the positive "
"direction by the increment amount"
msgstr ""

#. type: TP
#: man/man1/halui.1:416
#, no-wrap
msgid "B<halui.joint.selected.minus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:419
msgid ""
"pin for jogging the selected joint in negative direction at the halui.joint."
"jog-speed velocity"
msgstr ""

#. type: TP
#: man/man1/halui.1:419
#, no-wrap
msgid "B<halui.joint.selected.plus>"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:422
msgid ""
"pin for jogging the selected joint bit in in positive direction at the halui."
"joint.jog-speed velocity"
msgstr ""

#. type: SS
#: man/man1/halui.1:423
#, no-wrap
msgid "axis (LR< = axis letter (xyzabcuvw)>"
msgstr ""

#. type: TP
#: man/man1/halui.1:424
#, no-wrap
msgid "B<halui.axis.L.select> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:427
msgid "pin for selecting axis by letter"
msgstr ""

#. type: TP
#: man/man1/halui.1:427
#, no-wrap
msgid "B<halui.axis.L.is-selected> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:430
msgid "status pin that axis I<L> is selected"
msgstr ""

#. type: TP
#: man/man1/halui.1:430
#, no-wrap
msgid "B<halui.axis.L.pos-commanded> float out  float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:433
msgid "Commanded axis position in machine coordinates"
msgstr ""

#. type: TP
#: man/man1/halui.1:433
#, no-wrap
msgid "B<halui.axis.L.pos-feedback> float out  float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:436
msgid "Feedback axis position in machine coordinates"
msgstr ""

#. type: TP
#: man/man1/halui.1:436
#, no-wrap
msgid "B<halui.axis.L.pos-relative> float out  float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:439
msgid "Commanded axis position in relative coordinates"
msgstr ""

#. type: SS
#: man/man1/halui.1:440
#, no-wrap
msgid "axis jogging R<(>LR< = axis letter (xyzabcuvw)>"
msgstr ""

#. type: TP
#: man/man1/halui.1:441
#, no-wrap
msgid "B<halui.axis.jog-deadband> float in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:445
msgid ""
"pin for setting jog analog deadband (jog analog inputs smaller/slower than "
"this (in absolute value) are ignored)"
msgstr ""

#. type: TP
#: man/man1/halui.1:445
#, no-wrap
msgid "B<halui.axis.jog-speed> float in "
msgstr ""

#. type: TP
#: man/man1/halui.1:448
#, no-wrap
msgid "B<halui.axis.L.analog> float in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:452
msgid ""
"pin for jogging the axis L using an float value (e.g. joystick).  The value, "
"typically set between 0.0 and \\(+-1.0, is used as a jog-speed multiplier."
msgstr ""

#. type: TP
#: man/man1/halui.1:452
#, no-wrap
msgid "B<halui.axis.L.increment> float in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:455
msgid ""
"pin for setting the jog increment for axis L when using increment-plus/minus"
msgstr ""

#. type: TP
#: man/man1/halui.1:455
#, no-wrap
msgid "B<halui.axis.L.increment-minus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:458
msgid ""
"a rising edge will will make axis I<L> jog in the negative direction by the "
"increment amount"
msgstr ""

#. type: TP
#: man/man1/halui.1:458
#, no-wrap
msgid "B<halui.axis.L.increment-plus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:461
msgid ""
"a rising edge will will make axis I<L> jog in the positive direction by the "
"increment amount"
msgstr ""

#. type: TP
#: man/man1/halui.1:461
#, no-wrap
msgid "B<halui.axis.L.minus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:464
msgid ""
"pin for jogging axis I<L> in negative direction at the halui.axis.jog-speed "
"velocity"
msgstr ""

#. type: TP
#: man/man1/halui.1:464
#, no-wrap
msgid "B<halui.axis.L.plus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:467
msgid ""
"pin for jogging axis I<L> in positive direction at the halui.axis.jog-speed "
"velocity"
msgstr ""

#. type: TP
#: man/man1/halui.1:467
#, no-wrap
msgid "B<halui.axis.selected> u32 out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:470
msgid "selected axis (by index: 0:x 1:y 2:z 3:a 4:b 5:cr 6:u 7:v 8:w)"
msgstr ""

#. type: TP
#: man/man1/halui.1:470
#, no-wrap
msgid "B<halui.axis.selected.increment> float in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:473
msgid ""
"pin for setting the jog increment for the selected axis when using increment-"
"plus/minus"
msgstr ""

#. type: TP
#: man/man1/halui.1:473
#, no-wrap
msgid "B<halui.axis.selected.increment-minus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:476
msgid ""
"a rising edge will will make the selected axis jog in the negative direction "
"by the increment amount"
msgstr ""

#. type: TP
#: man/man1/halui.1:476
#, no-wrap
msgid "B<halui.axis.selected.increment-plus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:479
msgid ""
"a rising edge will will make the selected axis jog in the positive direction "
"by the increment amount"
msgstr ""

#. type: TP
#: man/man1/halui.1:479
#, no-wrap
msgid "B<halui.axis.selected.minus> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:482
msgid ""
"pin for jogging the selected axis in negative direction at the halui.axis."
"jog-speed velocity"
msgstr ""

#. type: TP
#: man/man1/halui.1:482
#, no-wrap
msgid "B<halui.axis.selected.plus>"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:485
msgid ""
"pin for jogging the selected axis bit in in positive direction at the halui."
"axis.jog-speed velocity"
msgstr ""

#. type: SS
#: man/man1/halui.1:486
#, no-wrap
msgid "flood"
msgstr ""

#. type: TP
#: man/man1/halui.1:487
#, no-wrap
msgid "B<halui.flood.is-on> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:490
msgid "pin for flood is on"
msgstr ""

#. type: TP
#: man/man1/halui.1:490
#, no-wrap
msgid "B<halui.flood.off> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:493
msgid "pin for stopping flood"
msgstr ""

#. type: TP
#: man/man1/halui.1:493
#, no-wrap
msgid "B<halui.flood.on> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:496
msgid "pin for starting flood"
msgstr ""

#. type: SS
#: man/man1/halui.1:497
#, no-wrap
msgid "feed override"
msgstr ""

#. type: TP
#: man/man1/halui.1:498
#, no-wrap
msgid "B<halui.feed-override.count-enable> bit in  (default: B<TRUE>)"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:501
msgid "When TRUE, modify feed override when counts changes."
msgstr ""

#. type: TP
#: man/man1/halui.1:501
#, no-wrap
msgid "B<halui.feed-override.counts> s32 in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:504
msgid "counts X scale = feed override percentage"
msgstr ""

#. type: TP
#: man/man1/halui.1:504
#, no-wrap
msgid "B<halui.feed-override.decrease> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:507
msgid "pin for decreasing the FO (-=scale)"
msgstr ""

#. type: TP
#: man/man1/halui.1:507
#, no-wrap
msgid "B<halui.feed-override.direct-value> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:510
msgid "pin to enable direct value feed override input"
msgstr ""

#. type: TP
#: man/man1/halui.1:510
#, no-wrap
msgid "B<halui.feed-override.increase> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:513
msgid "pin for increasing the FO (+=scale)"
msgstr ""

#. type: TP
#: man/man1/halui.1:513
#, no-wrap
msgid "B<halui.feed-override.reset> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:516
msgid "pin for resetting the FO (scale=1.0)"
msgstr ""

#. type: TP
#: man/man1/halui.1:516
#, no-wrap
msgid "B<halui.feed-override.scale> float in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:519
msgid "pin for setting the scale on changing the FO"
msgstr ""

#. type: TP
#: man/man1/halui.1:519
#, no-wrap
msgid "B<halui.feed-override.value> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:522
msgid "current Feed Override value"
msgstr ""

#. type: SS
#: man/man1/halui.1:523
#, no-wrap
msgid "rapid override"
msgstr ""

#. type: TP
#: man/man1/halui.1:524
#, no-wrap
msgid "B<halui.rapid-override.count-enable> bit in  (default: B<TRUE>)"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:527
msgid "When TRUE, modify Rapid Override when counts changes."
msgstr ""

#. type: TP
#: man/man1/halui.1:527
#, no-wrap
msgid "B<halui.rapid-override.counts> s32 in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:530
msgid "counts X scale = Rapid Override percentage"
msgstr ""

#. type: TP
#: man/man1/halui.1:530
#, no-wrap
msgid "B<halui.rapid-override.decrease> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:533
msgid "pin for decreasing the Rapid Override (-=scale)"
msgstr ""

#. type: TP
#: man/man1/halui.1:533
#, no-wrap
msgid "B<halui.rapid-override.direct-value> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:536
msgid "pin to enable direct value Rapid Override input"
msgstr ""

#. type: TP
#: man/man1/halui.1:536
#, no-wrap
msgid "B<halui.rapid-override.increase> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:539
msgid "pin for increasing the Rapid Override (+=scale)"
msgstr ""

#. type: TP
#: man/man1/halui.1:539
#, no-wrap
msgid "B<halui.rapid-override.reset> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:542
msgid "pin for resetting the Rapid Override (scale=1.0)"
msgstr ""

#. type: TP
#: man/man1/halui.1:542
#, no-wrap
msgid "B<halui.rapid-override.scale> float in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:545
msgid "pin for setting the scale on changing the Rapid Override"
msgstr ""

#. type: TP
#: man/man1/halui.1:545
#, no-wrap
msgid "B<halui.rapid-override.value> float out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:548
msgid "current Rapid Override value"
msgstr ""

#. type: SS
#: man/man1/halui.1:549
#, no-wrap
msgid "estop"
msgstr ""

#. type: TP
#: man/man1/halui.1:550
#, no-wrap
msgid "B<halui.estop.activate> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:553
msgid "pin for setting Estop (LinuxCNC internal) On"
msgstr ""

#. type: TP
#: man/man1/halui.1:553
#, no-wrap
msgid "B<halui.estop.is-activated> bit out "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:556
msgid "pin for displaying Estop state (LinuxCNC internal) On/Off"
msgstr ""

#. type: TP
#: man/man1/halui.1:556
#, no-wrap
msgid "B<halui.estop.reset> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:559
msgid "pin for resetting Estop (LinuxCNC internal) Off"
msgstr ""

#. type: SS
#: man/man1/halui.1:561
#, no-wrap
msgid "home"
msgstr ""

#. type: TP
#: man/man1/halui.1:562
#, no-wrap
msgid "B<halui.home-all> bit in "
msgstr ""

#. type: Plain text
#: man/man1/halui.1:566
msgid ""
"pin for requesting home-all (only available when a valid homing sequence is "
"specified)"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:574
msgid ""
"Written by Alex Joni, as part of the LinuxCNC project. Updated by John "
"Thornton"
msgstr ""

#. type: Plain text
#: man/man1/halui.1:578
msgid "Copyright \\(co 2006 Alex Joni."
msgstr ""

#. type: TH
#: man/man1/hbmgui.1:25
#, no-wrap
msgid "hbmgui"
msgstr ""

#. type: Plain text
#: man/man1/hbmgui.1:28
msgid "hbmgui - Vismach Virtual Machine GUI"
msgstr ""

#. type: Plain text
#: man/man1/hbmgui.1:32
msgid ""
"B<hbmgui> is one of the sample B<Vismach> GUIs for LinuxCNC, simulating a "
"Horizontal Boring Machine."
msgstr ""

#. type: TH
#: man/man1/hexagui.1:25
#, no-wrap
msgid "hexagui"
msgstr ""

#. type: Plain text
#: man/man1/hexagui.1:32
msgid ""
"B<hexagui> is one of the sample B<Vismach> GUIs for LinuxCNC, simulating a "
"Horizontal Boring Machine."
msgstr ""

#. type: TH
#: man/man1/hy_vfd.1:25
#, no-wrap
msgid "hy_vfd"
msgstr ""

#. type: TH
#: man/man1/hy_vfd.1:25
#, no-wrap
msgid "April 25, 2015"
msgstr ""

#. type: TH
#: man/man1/hy_vfd.1:25
#, no-wrap
msgid "Huanyang VFD"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:29
msgid "B<hy_vfd> - HAL userspace component for Huanyang VFDs"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:33
msgid "B<hy_vfd> [OPTIONS]"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:38
msgid ""
"This component connects the Huanyang VFD to the LinuxCNC HAL via a serial "
"(RS-485) connection."
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:42
msgid ""
"The Huanyang VFD must be configured via the face plate user interface to "
"accept serial communications:"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:42
#, no-wrap
msgid "B<PD001\\ =\\ 2>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:45
msgid "Set register PD001 (source of run commands) to 2 (communication port)."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:45
#, no-wrap
msgid "B<PD002\\ =\\ 2>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:49
msgid ""
"Set register PD002 (source of operating frequency) to 2 (communication port)."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:49
#, no-wrap
msgid "B<PD004>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:54
msgid ""
"Set register PD004 (Base Frequency) according to motor specs.  This is the "
"rated frequency of the motor from the motor's name plate, in Hz."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:54
#, no-wrap
msgid "B<PD005>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:59
msgid ""
"Set register PD005 (max frequency) according to motor specs.  This is the "
"maximum frequency of the motor's power supply, in Hz."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:59
#, no-wrap
msgid "B<PD011>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:64
msgid ""
"Set register PD011 (min frequency) according to motor specs.  This is the "
"minimum frequency of the motor's power supply, in Hz."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:64
#, no-wrap
msgid "B<PD141>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:69
msgid ""
"Set register PD141 (rated motor voltage) according to motor name plate.  "
"This is the motor's maximum voltage, in Volts."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:69
#, no-wrap
msgid "B<PD142>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:74
msgid ""
"Set register PD142 (rated motor current) according to motor name plate.  "
"This is the motor's maximum current, in Ampere."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:74
#, no-wrap
msgid "B<PD143>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:78
msgid ""
"Set register PD143 (Number of Motor Poles) according to motor name plate."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:78
#, no-wrap
msgid "B<PD144>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:84
msgid ""
"Set register PD144 (rated motor revolutions) according to motor name plate.  "
"This is the motor's speed in RPM at 50 Hz.  Note: This is not the motor's "
"max speed (unless the max motor frequency happens to be 50 Hz)!"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:84
#, no-wrap
msgid "B<PD163\\ =\\ 1>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:88
msgid ""
"Set register PD163 (communication address) to 1.  This matches the default "
"in the hy_vfd driver, change this if your setup has special needs."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:88
#, no-wrap
msgid "B<PD164\\ =\\ 2>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:92
msgid ""
"Set register PD164 (baud rate) to 2 (19200 bps).  This matches the default "
"in the hy_vfd driver, change this if your setup has special needs."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:92
#, no-wrap
msgid "B<PD165\\ =\\ 3>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:97
msgid ""
"Set register PD165 (communication data method) to 3 (8n1 RTU).  This matches "
"the default in the hy_vfd driver, change this if your setup has special "
"needs.  Note that the hy_vfd driver only supports RTU communication, not "
"ASCII."
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:101
msgid ""
"Consult the Huanyang instruction manual for details on using the face plate "
"to program the VFDs registers, and alternative values for the above "
"registers."
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:104
msgid ""
"Access to devices such as /dev/ttyUSB0 is restricted to members of the "
"\"dialout\" group. If you see error messages such as"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:106
msgid "B<open: Permission denied>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:108
msgid "B<ERROR Can't open the device /dev/ttyUSB0 (errno 13)>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:110
msgid "Check your groups membership with the command"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:112
msgid "B<groups>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:114
msgid "Then add your user to the dialout group with"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:116
msgid "B<sudo addgroup your-username dialout>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:118
msgid "You will need to log out and back in again for this to take effect."
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:130
msgid ""
"Turn on debug messages. Note that if there are serial errors, this may "
"become annoying.  Debug mode will cause all serial communication messages to "
"be printed in hex on the terminal."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:130
#, no-wrap
msgid "B<-y,\\ --regdump>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:133
msgid "Print the current value of all registers as soon as the VFD is enabled."
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:137
msgid ""
"(default hy_vfd) Set the name of the HAL module. The HAL comp name will be "
"set to E<lt>stringE<gt>, and all pin and parameter names will begin with "
"E<lt>stringE<gt>."
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:142
msgid ""
"(default 8) Set number of data bits to E<lt>nE<gt>, where n must be from 5 "
"to 8 inclusive.  This must match the setting in register PD165 of the "
"Huanyang VFD."
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:146
msgid ""
"(default odd) Set serial parity to even, odd, or none.  This must match the "
"setting in register PD165 of the Huanyang VFD."
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:152
msgid ""
"(default 38400) Set baud rate to E<lt>nE<gt>. It is an error if the rate is "
"not one of the following: 110, 300, 600, 1200, 2400, 4800, 9600, 19200, "
"38400, 57600, 115200.  This must match the setting in register PD164 of the "
"Huanyang VFD."
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:156
msgid ""
"(default 1) Set serial stop bits to 1 or 2.  This must match the setting in "
"register PD165 of the HuanyangVFD."
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:160
msgid ""
"(default 1) Set HYCOMM target (slave) number. This must match the device "
"number you set on the Hyanyang VFD in register PD163."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:160
#, no-wrap
msgid "B<-F,\\ --max-frequency\\ E<lt>nE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:166
msgid ""
"(default: read from VFD) If specified, program register PD005 of the VFD "
"with the specified max frequency of E<lt>nE<gt> Hz (and use the same max "
"frequency in the hy_vfd driver).  If not specified, read the max frequency "
"to use from register PD005 of the VFD."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:166
#, no-wrap
msgid "B<-f,\\ --min-frequency\\ E<lt>nE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:172
msgid ""
"(default: read from VFD) If specified, program register PD011 of the VFD "
"with the specified minimum frequency of E<lt>nE<gt> Hz (and use the same "
"minimum frequency in the hy_vfd driver).  If not specified, read the minimum "
"frequency to use from register PD011 of the VFD."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:172
#, no-wrap
msgid "B<-V,\\ --motor-voltage\\ E<lt>nE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:177
msgid ""
"(default: read from VFD) If specified, program register PD141 of the VFD "
"with the specified max motor voltage of E<lt>nE<gt> Volts.  If not "
"specified, read the max motor voltage from register PD141 of the VFD."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:177
#, no-wrap
msgid "B<-I,\\ --motor-current\\ E<lt>nE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:182
msgid ""
"(default: read from VFD) If specified, program register PD142 of the VFD "
"with the specified max motor current of E<lt>nE<gt> Amps.  If not specified, "
"read the max motor current from register PD142 of the VFD."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:182
#, no-wrap
msgid "B<-S,\\ --motor-speed\\ E<lt>nE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:191
msgid ""
"(default: compute from value read from VFD P144) This command-line argument "
"is the motor's max speed.  If specified, compute the motor's speed at 50 Hz "
"from this argument and from the motor's max frequency (from the --max-"
"frequency argument or from P011 if --max-frequency is not specified) and "
"program register PD144 of the VFD.  If not specified, read the motor's speed "
"at 50 Hz from register P144 of the VFD, and use that and the max frequency "
"to compute the motor's max speed."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:191
#, no-wrap
msgid "B<-P,\\ --motor-poles\\ E<lt>nE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:197
msgid ""
"(default: read value from VFD P143) This command-line argument is the number "
"of poles in the motor.  If specified, this value is sent to the VFD's "
"register PD143.  If not specified, the value is read from PD143 and reported "
"on the corresponding HAL pin."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:197
#, no-wrap
msgid "B<-x,\\ --register\\ PDnnn=mmm\\ E<lt>nE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:205
msgid ""
"Set a specific register to a new value. Can be used to set up to 10 "
"registers. Parameters will \"stick\" (but only after hy_vfd.enable has been "
"set true) so to set more than ten parameters it is possible to repeatedly "
"load the driver with a set of registers to set then enable (setp hy_vfd."
"enable 1) and unload (unload hy_vfd) the driver at a halrun(1) prompt.  For "
"example:"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:207
msgid ""
"B<loadusr -W hy_vfd -d /ttyUSB0 --register PD014=30 --register PD015=30 >"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:213
msgid ""
"Will set both ramp1 times to 3 seconds. The values should be scaled "
"according to the manual data. The example above uses values with a "
"resolution of 0.1 seconds, so the numbers are 10x larger than the required "
"value."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:215
#, no-wrap
msgid "B<E<lt>nameE<gt>.enable>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:218
msgid "(bit, in) Enable communication from the hy_vfd driver to the VFD."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:218
#, no-wrap
msgid "B<E<lt>nameE<gt>.SetF>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:221 man/man1/hy_vfd.1:224 man/man1/hy_vfd.1:227
#: man/man1/hy_vfd.1:230 man/man1/hy_vfd.1:233 man/man1/hy_vfd.1:236
#: man/man1/hy_vfd.1:239 man/man1/hy_vfd.1:242 man/man1/hy_vfd.1:254
#: man/man1/hy_vfd.1:257 man/man1/hy_vfd.1:301 man/man1/hy_vfd.1:304
#: man/man1/hy_vfd.1:307 man/man1/hy_vfd.1:310 man/man1/hy_vfd.1:313
#: man/man1/hy_vfd.1:316 man/man1/hy_vfd.1:320
msgid "(float, out)"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:221
#, no-wrap
msgid "B<E<lt>nameE<gt>.OutF>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:224
#, no-wrap
msgid "B<E<lt>nameE<gt>.OutA>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:227
#, no-wrap
msgid "B<E<lt>nameE<gt>.Rott>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:230
#, no-wrap
msgid "B<E<lt>nameE<gt>.DCV>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:233
#, no-wrap
msgid "B<E<lt>nameE<gt>.ACV>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:236
#, no-wrap
msgid "B<E<lt>nameE<gt>.Cont>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:239
#, no-wrap
msgid "B<E<lt>nameE<gt>.Tmp>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:242
#, no-wrap
msgid "B<E<lt>nameE<gt>.spindle-forward>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:245
msgid "(bit, in)"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:245
#, no-wrap
msgid "B<E<lt>nameE<gt>.spindle-reverse>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:248 man/man1/hy_vfd.1:251
msgid "(bin, in)"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:248
#, no-wrap
msgid "B<E<lt>nameE<gt>.spindle-on>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:251
#, no-wrap
msgid "B<E<lt>nameE<gt>.CNTR>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:254
#, no-wrap
msgid "B<E<lt>nameE<gt>.CNST>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:257
#, no-wrap
msgid "B<E<lt>nameE<gt>.CNST-run>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:260 man/man1/hy_vfd.1:263 man/man1/hy_vfd.1:266
#: man/man1/hy_vfd.1:269 man/man1/hy_vfd.1:272 man/man1/hy_vfd.1:275
#: man/man1/hy_vfd.1:278 man/man1/hy_vfd.1:281 man/man1/hy_vfd.1:325
msgid "(bit, out)"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:260
#, no-wrap
msgid "B<E<lt>nameE<gt>.CNST-jog>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:263
#, no-wrap
msgid "B<E<lt>nameE<gt>.CNST-command-rf>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:266
#, no-wrap
msgid "B<E<lt>nameE<gt>.CNST-running>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:269
#, no-wrap
msgid "B<E<lt>nameE<gt>.CNST-jogging>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:272
#, no-wrap
msgid "B<E<lt>nameE<gt>.CNST-running-rf>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:275
#, no-wrap
msgid "B<E<lt>nameE<gt>.CNST-bracking>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:278
#, no-wrap
msgid "B<E<lt>nameE<gt>.CNST-track-start>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:281
#, no-wrap
msgid "B<E<lt>nameE<gt>.speed-command>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:284
msgid "(float, in)"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:284
#, no-wrap
msgid "B<E<lt>nameE<gt>.spindle-speed-fb>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:287
msgid "(float, out) Current spindle speed as reported by Huanyang VFD."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:287
#, no-wrap
msgid "B<E<lt>nameE<gt>.spindle-at-speed-tolerance>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:294
msgid ""
"(float, in) Spindle speed error tolerance.  If the actual spindle speed is "
"within .spindle-at-speed-tolerance of the commanded speed, then the .spindle-"
"at-speed pin will go True.  The default .spindle-at-speed-tolerance is 0.02, "
"which means the actual speed must be within 2% of the commanded spindle "
"speed."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:294
#, no-wrap
msgid "B<E<lt>nameE<gt>.spindle-at-speed>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:298
msgid ""
"(bit, out) True when the current spindle speed is within .spindle-at-speed-"
"tolerance of the commanded speed."
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:298
#, no-wrap
msgid "B<E<lt>nameE<gt>.frequency-command>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:301
#, no-wrap
msgid "B<E<lt>nameE<gt>.max-freq>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:304
#, no-wrap
msgid "B<E<lt>nameE<gt>.base-freq>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:307
#, no-wrap
msgid "B<E<lt>nameE<gt>.freq-lower-limit>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:310
#, no-wrap
msgid "B<E<lt>nameE<gt>.rated-motor-voltage>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:313
#, no-wrap
msgid "B<E<lt>nameE<gt>.rated-motor-current>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:316
#, no-wrap
msgid "B<E<lt>nameE<gt>.rated-motor-rev>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:320
#, no-wrap
msgid "B<E<lt>nameE<gt>.motor-poles>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:323
msgid "(u32, out)"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:323
#, no-wrap
msgid "B<E<lt>nameE<gt>.hycomm-ok>"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:328
#, no-wrap
msgid "B<E<lt>nameE<gt>.error-count>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:331
msgid "(s32, RW)"
msgstr ""

#. type: IP
#: man/man1/hy_vfd.1:331
#, no-wrap
msgid "B<E<lt>nameE<gt>.retval>"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:333
msgid "(float, RW)"
msgstr ""

#. type: Plain text
#: man/man1/hy_vfd.1:336 man/man9/abs_s32.9:39 man/man9/differential.9:48
#: man/man9/multiclick.9:95 man/man9/spindle_monitor.9:48
msgid "Sebastian Kuzminsky"
msgstr ""

#. type: TH
#: man/man1/image-to-gcode.1:25
#, no-wrap
msgid "IMAGE-TO-GCODE"
msgstr ""

#. type: Plain text
#: man/man1/image-to-gcode.1:28
msgid "image-to-gcode - converts bitmap images to G-code"
msgstr ""

#. type: Plain text
#: man/man1/image-to-gcode.1:30
msgid "B<image-to-gcode>"
msgstr ""

#. type: Plain text
#: man/man1/image-to-gcode.1:34
msgid ""
"B<image-to-gcode> converts a bitmap image to G-code inteerpreting the "
"brightness of each pixel as a Z-height."
msgstr ""

#. type: Plain text
#: man/man1/image-to-gcode.1:37
msgid ""
"Detailed docs: http://linuxcnc.org/docs/2.4/html/gui_image-to-gcode.html"
msgstr ""

#. type: TH
#: man/man1/inivar.1:25
#, no-wrap
msgid "INIVAR"
msgstr ""

#. type: Plain text
#: man/man1/inivar.1:28
msgid "inivar - Query an INI file"
msgstr ""

#. type: Plain text
#: man/man1/inivar.1:30
msgid ""
"B<inivar -var E<lt>variableE<gt> {-sec >I<E<lt>sectionE<gt>>} {-ini "
"I<E<lt>INI fileE<gt>>}"
msgstr ""

#. type: Plain text
#: man/man1/inivar.1:33
msgid "B<inivar> does stuff for LinuxCNC"
msgstr ""

#. type: Plain text
#: man/man1/inivar.1:36
msgid ""
"Prints to stdout the INI file result of a variable-in-section search, useful "
"for scripts that want to pick things out of INI files."
msgstr ""

#. type: Plain text
#: man/man1/inivar.1:38
msgid ""
"syntax: inivar -var E<lt>variableE<gt> {-sec E<lt>sectionE<gt>} {-ini "
"I<E<lt>INI fileE<gt>>}"
msgstr ""

#. type: Plain text
#: man/man1/inivar.1:43
msgid ""
"Uses emc.ini as default. E<lt>variableE<gt> needs to be supplied. If "
"E<lt>sectionE<gt> is omitted, first instance of E<lt>variableE<gt> will be "
"looked for in any section. Otherwise only a match of the variable in "
"E<lt>sectionE<gt> will be returned."
msgstr ""

#. type: TH
#: man/man1/io.1:1
#, no-wrap
msgid "IOCONTROL - IO"
msgstr ""

#. type: TH
#: man/man1/io.1:1
#, no-wrap
msgid "2007-08-25"
msgstr ""

#. type: TH
#: man/man1/io.1:1 man/man1/iocontrol.1:1 man/man1/mitsub_vfd.1:1
#: man/man1/pi500_vfd.1:9 man/man1/thermistor.1:9 man/man1/wj200_vfd.1:9
#: man/man9/abs.9:9 man/man9/abs_s32.9:9 man/man9/and2.9:9 man/man9/at_pid.9:1
#: man/man9/axistest.9:9 man/man9/bin2gray.9:9 man/man9/biquad.9:9
#: man/man9/bitslice.9:9 man/man9/bitwise.9:9 man/man9/bldc.9:9
#: man/man9/blend.9:9 man/man9/carousel.9:9 man/man9/charge_pump.9:9
#: man/man9/clarke2.9:9 man/man9/clarke3.9:9 man/man9/clarkeinv.9:9
#: man/man9/classicladder.9:2 man/man9/comp.9:9 man/man9/constant.9:9
#: man/man9/conv_bit_float.9:9 man/man9/conv_bit_s32.9:9
#: man/man9/conv_bit_u32.9:9 man/man9/conv_float_s32.9:9
#: man/man9/conv_float_u32.9:9 man/man9/conv_s32_bit.9:9
#: man/man9/conv_s32_float.9:9 man/man9/conv_s32_u32.9:9
#: man/man9/conv_u32_bit.9:9 man/man9/conv_u32_float.9:9
#: man/man9/conv_u32_s32.9:9 man/man9/corexy_by_hal.9:9 man/man9/counter.9:1
#: man/man9/dbounce.9:9 man/man9/ddt.9:9 man/man9/deadzone.9:9
#: man/man9/debounce.9:1 man/man9/demux.9:9 man/man9/differential.9:9
#: man/man9/edge.9:9 man/man9/encoder.9:1 man/man9/encoder_ratio.9:1
#: man/man9/eoffset_per_angle.9:9 man/man9/estop_latch.9:9
#: man/man9/feedcomp.9:9 man/man9/filter_kalman.9:9 man/man9/flipflop.9:9
#: man/man9/gantry.9:9 man/man9/gearchange.9:9 man/man9/gladevcp.9:2
#: man/man9/gray2bin.9:9 man/man9/hal_bb_gpio.9:1 man/man9/histobins.9:9
#: man/man9/hm2_7i43.9:1 man/man9/hm2_7i90.9:1 man/man9/hm2_eth.9:22
#: man/man9/hm2_pci.9:1 man/man9/hm2_rpspi.9:23 man/man9/hm2_spi.9:22
#: man/man9/hostmot2.9:1 man/man9/hypot.9:9 man/man9/ilowpass.9:9
#: man/man9/integ.9:9 man/man9/invert.9:9 man/man9/joyhandle.9:9
#: man/man9/knob2float.9:9 man/man9/latencybins.9:9 man/man9/lcd.9:1
#: man/man9/limit1.9:9 man/man9/limit2.9:9 man/man9/limit3.9:9
#: man/man9/lincurve.9:9 man/man9/logic.9:9 man/man9/lowpass.9:9
#: man/man9/lut5.9:9 man/man9/maj3.9:9 man/man9/match8.9:9
#: man/man9/matrix_kb.9:3 man/man9/max31855.9:9 man/man9/mesa_7i65.9:9
#: man/man9/mesa_pktgyro_test.9:9 man/man9/message.9:9 man/man9/millturn.9:9
#: man/man9/minmax.9:9 man/man9/motion.9:1 man/man9/moveoff.9:9
#: man/man9/mult2.9:9 man/man9/multiclick.9:9 man/man9/multiswitch.9:9
#: man/man9/mux16.9:9 man/man9/mux2.9:9 man/man9/mux4.9:9 man/man9/mux8.9:9
#: man/man9/mux_generic.9:3 man/man9/near.9:9 man/man9/not.9:9
#: man/man9/offset.9:9 man/man9/ohmic.9:9 man/man9/oneshot.9:9
#: man/man9/opto_ac5.9:2 man/man9/or2.9:9 man/man9/orient.9:9 man/man9/pid.9:1
#: man/man9/plasmac.9:9 man/man9/pwmgen.9:1 man/man9/sample_hold.9:9
#: man/man9/scale.9:9 man/man9/select8.9:9 man/man9/serport.9:9
#: man/man9/setsserial.9:3 man/man9/siggen.9:1 man/man9/sim_axis_hardware.9:9
#: man/man9/sim_encoder.9:1 man/man9/sim_home_switch.9:9
#: man/man9/sim_matrix_kb.9:9 man/man9/sim_parport.9:9 man/man9/simple_tp.9:9
#: man/man9/sim_spindle.9:9 man/man9/sphereprobe.9:9 man/man9/spindle.9:9
#: man/man9/spindle_monitor.9:9 man/man9/sserial.9:3 man/man9/stepgen.9:1
#: man/man9/steptest.9:9 man/man9/sum2.9:9 man/man9/supply.9:1 man/man9/thc.9:9
#: man/man9/thcud.9:9 man/man9/threads.9:1 man/man9/threadtest.9:9
#: man/man9/time.9:9 man/man9/timedelay.9:9 man/man9/timedelta.9:9
#: man/man9/toggle2nist.9:9 man/man9/toggle.9:9 man/man9/tristate_bit.9:9
#: man/man9/tristate_float.9:9 man/man9/updown.9:9 man/man9/userkins.9:9
#: man/man9/watchdog.9:1 man/man9/wcomp.9:9 man/man9/weighted_sum.9:1
#: man/man9/xhc_hb04_util.9:9 man/man9/xor2.9:9
#, no-wrap
msgid "HAL Component"
msgstr ""

#. type: Plain text
#: man/man1/io.1:9 man/man1/iocontrol.1:10 man/man1/iov2.1:31
msgid "B<[EMCIO]>"
msgstr ""

#. type: Plain text
#: man/man1/io.1:11 man/man1/iocontrol.1:12
msgid "B<EMCIO = io>"
msgstr ""

#. type: Plain text
#: man/man1/io.1:16 man/man1/iocontrol.1:21
msgid ""
"I/O control handles I/O tasks like coolant, toolchange, E-stop and lube.  "
"The signals are turned on and off in userspace with G-code or in the case of "
"E-stop in HAL."
msgstr ""

#. type: Plain text
#: man/man1/io.1:18
msgid ""
"The following pins are created by the userspace IO controller, usually found "
"in $LINUXCNC_HOME/bin/io"
msgstr ""

#. type: Plain text
#: man/man1/io.1:22
msgid ""
"iocontrol is a userspace process - if you have strict timing requirements or "
"simply need more I/O, consider using the realtime synchronized I/oO provided "
"by B<motion>(9) instead."
msgstr ""

#. type: Plain text
#: man/man1/io.1:25
msgid ""
"The INI file is searched for in the directory from which halcmd was run, "
"unless an absolute path is specified."
msgstr ""

#. type: TP
#: man/man1/io.1:28 man/man1/iov2.1:45
#, no-wrap
msgid "B<iocontrol.0.coolant-flood>"
msgstr ""

#. type: Plain text
#: man/man1/io.1:31 man/man1/iov2.1:48
msgid "(Bit, Out) TRUE when flood coolant is requested."
msgstr ""

#. type: TP
#: man/man1/io.1:32 man/man1/iov2.1:49
#, no-wrap
msgid "B<iocontrol.0.coolant-mist >"
msgstr ""

#. type: Plain text
#: man/man1/io.1:35 man/man1/iov2.1:52
msgid "(Bit, Out) TRUE when mist coolant is requested."
msgstr ""

#. type: TP
#: man/man1/io.1:36 man/man1/iov2.1:53
#, no-wrap
msgid "B<iocontrol.0.emc-enable-in >"
msgstr ""

#. type: Plain text
#: man/man1/io.1:39
msgid ""
"(Bit, In) Should be driven FALSE when an external E-stop condition exists."
msgstr ""

#. type: TP
#: man/man1/io.1:40 man/man1/iov2.1:57
#, no-wrap
msgid "B<iocontrol.0.lube >"
msgstr ""

#. type: Plain text
#: man/man1/io.1:46 man/man1/iov2.1:63
msgid ""
"(Bit, Out) TRUE when lube is requested.  This pin gets driven True when the "
"controller comes out of E-stop, and when the \"Lube On\" command gets sent "
"to the controller.  It gets driven False when the controller goes into E-"
"stop, and when the \"Lube Off\" command gets sent to the controller."
msgstr ""

#. type: TP
#: man/man1/io.1:47 man/man1/iov2.1:64
#, no-wrap
msgid "B<iocontrol.0.lube_level >"
msgstr ""

#. type: Plain text
#: man/man1/io.1:50 man/man1/iov2.1:67
msgid "(Bit, In) Should be driven FALSE when lubrication tank is empty."
msgstr ""

#. type: TP
#: man/man1/io.1:51 man/man1/iov2.1:68
#, no-wrap
msgid "B<iocontrol.0.tool-change >"
msgstr ""

#. type: Plain text
#: man/man1/io.1:54 man/man1/iov2.1:71
msgid "(Bit, Out) TRUE when a tool change is requested."
msgstr ""

#. type: TP
#: man/man1/io.1:55 man/man1/iov2.1:72
#, no-wrap
msgid "B<iocontrol.0.tool-changed >"
msgstr ""

#. type: Plain text
#: man/man1/io.1:58 man/man1/iov2.1:75
msgid "(Bit, In) Should be driven TRUE when a tool change is completed."
msgstr ""

#. type: TP
#: man/man1/io.1:59 man/man1/iov2.1:76
#, no-wrap
msgid "B<iocontrol.0.tool-number>"
msgstr ""

#. type: Plain text
#: man/man1/io.1:62 man/man1/iov2.1:79
msgid "(s32, Out) Current tool number."
msgstr ""

#. type: TP
#: man/man1/io.1:63 man/man1/iov2.1:80
#, no-wrap
msgid "B<iocontrol.0.tool-prep-number >"
msgstr ""

#. type: Plain text
#: man/man1/io.1:66 man/man1/iov2.1:83
msgid "(s32, Out) The number of the next tool, from the RS274NGC T-word."
msgstr ""

#. type: TP
#: man/man1/io.1:67 man/man1/iov2.1:84
#, no-wrap
msgid "B<iocontrol.0.tool-prep-pocket>"
msgstr ""

#. type: Plain text
#: man/man1/io.1:71 man/man1/iov2.1:88
msgid ""
"(s32, Out) This is the pocket number (location in the tool storage "
"mechanism) of the tool requested by the most recent T-word."
msgstr ""

#. type: TP
#: man/man1/io.1:72 man/man1/iov2.1:89
#, no-wrap
msgid "B<iocontrol.0.tool-prepare >"
msgstr ""

#. type: Plain text
#: man/man1/io.1:75 man/man1/iov2.1:92
msgid "(Bit, Out) TRUE when a TI<n> tool prepare is requested."
msgstr ""

#. type: TP
#: man/man1/io.1:76 man/man1/iov2.1:93
#, no-wrap
msgid "B<iocontrol.0.tool-prepared >"
msgstr ""

#. type: Plain text
#: man/man1/io.1:79 man/man1/iov2.1:96
msgid "(Bit, In) Should be driven TRUE when a tool prepare is completed."
msgstr ""

#. type: TP
#: man/man1/io.1:80 man/man1/iov2.1:97
#, no-wrap
msgid "B<iocontrol.0.user-enable-out >"
msgstr ""

#. type: Plain text
#: man/man1/io.1:83
msgid "(Bit, Out) FALSE when an internal E-stop condition exists."
msgstr ""

#. type: TP
#: man/man1/io.1:84 man/man1/iov2.1:101
#, no-wrap
msgid "B<iocontrol.0.user-request-enable >"
msgstr ""

#. type: Plain text
#: man/man1/io.1:87
msgid "(Bit, Out) TRUE when the user has requested that E-stop be cleared."
msgstr ""

#. type: TP
#: man/man1/io.1:88
#, no-wrap
msgid "B<iocontrol.0.tool-prep-index>"
msgstr ""

#. type: Plain text
#: man/man1/io.1:97
msgid ""
"(s32, Out) IO's internal array index of the prepped tool requested by the "
"most recent T-word.  0 if no tool is prepped.  On Random toolchanger "
"machines this is the tool's pocket number (ie, the same as the tool-prep-"
"pocket pin), on Non-random toolchanger machines this is a small integer "
"corresponding to the tool's location in the internal representation of the "
"tool table.  This parameter returns to 0 after a successful tool change (M6)."
msgstr ""

#. type: groff code
#: man/man1/io.1:100
#, no-wrap
msgid ""
".ie  '\\*[.T]'html' \\{\\\n"
"\n"
".UR io.1.html\n"
"\\fBio\\fR(1),\n"
".UE\n"
".UR iov2.1.html\n"
"\\fBiov2\\fR(1),\n"
".UE\n"
".UR ../man9/motion.9.html\n"
"\\fBmotion\\fR(9)\n"
".UE\n"
"\n"
"\\}\n"
".el \\{\\\n"
"\n"
"\\fBio\\fR(1)\n"
"\\fBiov2\\fR(1)\n"
"\\fBmotion\\fR(9)\n"
"\n"
"\\}\n"
msgstr ""

#. type: Plain text
#: man/man1/io.1:124 man/man1/iov2.1:184
msgid ""
"Report bugs at E<.UR https://github.com/LinuxCNC/linuxcnc/issues> E<.UE>"
msgstr ""

#. type: Plain text
#: man/man1/io.1:126 man/man1/iov2.1:186
msgid "Derived from a work by Fred Proctor & Will Shackleford."
msgstr ""

#. type: Plain text
#: man/man1/io.1:128
msgid "Copyright \\(co 2004 the LinuxCNC project."
msgstr ""

#. type: TH
#: man/man1/iocontrol.1:1
#, no-wrap
msgid "IOCONTROL"
msgstr ""

#. type: TH
#: man/man1/iocontrol.1:1 man/man1/iov2.1:25
#, no-wrap
msgid "2021-04"
msgstr ""

#. type: Plain text
#: man/man1/iocontrol.1:16 man/man1/iov2.1:33
msgid "B<EMCIO = iov2>"
msgstr ""

#. type: Plain text
#: man/man1/iocontrol.1:23 man/man1/iov2.1:39
msgid ""
"I/O Control V2 (iov2) adds more toolchager support for communication with "
"the toolchanger."
msgstr ""

#. type: Plain text
#: man/man1/iocontrol.1:25 man/man1/iov2.1:41
msgid ""
"Whether B<io> or B<iov2> is used can be chosen in the [EMCIO] section of the "
"INI file."
msgstr ""

#. type: Plain text
#: man/man1/iocontrol.1:29
msgid "See also E<.UR http://linuxcnc.org/docs/html/config/iov2.html> E<.UE>"
msgstr ""

#. type: groff code
#: man/man1/iocontrol.1:31
#, no-wrap
msgid ""
".ie  '\\*[.T]'html' \\{\\\n"
"\n"
".UR io.1.html\n"
"\\fBio\\fR(1),\n"
".UE\n"
".UR iov2.1.html \n"
"\\fBiov2\\fR(1)\n"
".UE\n"
"\\}\n"
".el \\{\\\n"
"\n"
"\\fBio\\fR(1)\n"
"\\fBiov2\\fR(1)\n"
"\n"
"\\}\n"
msgstr ""

#. type: TH
#: man/man1/iov2.1:25
#, no-wrap
msgid "IOCONTROL - IOV2"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:28
msgid "iov2 - interacts with HAL or G-code in userspace"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:37
msgid ""
"I/O control handles I/O tasks like coolant, toolchange, E-stop and lube. The "
"signals are turned on and off in userspace with G-code or in the case of E-"
"stop in HAL."
msgstr ""

#. type: SS
#: man/man1/iov2.1:43
#, no-wrap
msgid "Basic pins"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:56
msgid ""
"(Bit, In) Should be driven FALSE when an external estop condition exists."
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:100
msgid "(Bit, Out) FALSE when an internal estop condition exists."
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:104
msgid "(Bit, Out) TRUE when the user has requested that estop be cleared."
msgstr ""

#. type: SS
#: man/man1/iov2.1:106
#, no-wrap
msgid "Additional IO v2 pins"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:109
msgid ""
"B<iocontrol.0.emc-abort (BIT,OUT) Signals emc-originated abort to "
"toolchanger.>"
msgstr ""

#. type: TP
#: man/man1/iov2.1:109
#, no-wrap
msgid "B<iocontrol.0.emc-abort-ack>"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:113
msgid ""
"(BIT,IN) Acknowledge line from toolchanger for previous signal, or jumpered "
"to abort-tool-change if not used in toolchanger.  NB: after signaling an emc-"
"abort, iov2 will block until emc-abort-ack is raised."
msgstr ""

#. type: TP
#: man/man1/iov2.1:113
#, no-wrap
msgid "B<iocontrol.0.emc-reason>"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:117
msgid ""
"(S32,OUT) Convey cause for EMC-originated abort to toolchanger.  Usage: UI "
"informational. Valid during emc-abort True."
msgstr ""

#. type: TP
#: man/man1/iov2.1:117
#, no-wrap
msgid "B<iocontrol.0.start-change>"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:120
msgid ""
"(BIT,OUT) Asserted at the very beginning of an M6 operation, before any "
"spindle-off, quill-up, or move-to-toolchange-position oeprations are "
"executed."
msgstr ""

#. type: TP
#: man/man1/iov2.1:120
#, no-wrap
msgid "B<iocontrol.0.start-change-ack>"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:123
msgid "(BIT,IN) Acknowledgment line for start-change."
msgstr ""

#. type: TP
#: man/man1/iov2.1:123
#, no-wrap
msgid "B<iocontrol.0.toolchanger-fault>"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:128
msgid ""
"(BIT,IN) Toolchanger signals fault.  This line is contionuously monitored.  "
"A fault toggles a flag in iocontrol which is reflected in the toolchanger-"
"faulted pin."
msgstr ""

#. type: TP
#: man/man1/iov2.1:128
#, no-wrap
msgid "B<iocontrol.0.toolchanger-fault-ack>"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:133
msgid ""
"(BIT,OUT) Handshake line for above signal.  Will be set by iov2 after above "
"fault line True is recognized and deasserted when toolchanger-fault drops.  "
"Toolchanger is free to interpret the ack; reading the -ack lines assures "
"fault has been received and acted upon."
msgstr ""

#. type: TP
#: man/man1/iov2.1:133
#, no-wrap
msgid "B<iocontrol.0.toolchanger-reason>"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:136
msgid ""
"(S32,IN) Convey reason code for toolchanger-originated fault to iov2. Usage"
msgstr ""

#. type: TP
#: man/man1/iov2.1:136
#, no-wrap
msgid "B<iocontrol.0.toolchanger-faulted>"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:140
msgid ""
"(BIT,OUT) Signals toolchanger-notify line has toggled and toolchanger-reason-"
"code was in the fault range.  Next M6 will abort."
msgstr ""

#. type: TP
#: man/man1/iov2.1:140
#, no-wrap
msgid "B<iocontrol.0.toolchanger-clear-fault>"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:144
msgid ""
"(BIT,IN) Resets TC fault condition. Deasserts toolchanger-faulted if "
"toolchanger-notify is line False.  Usage: UI - e.g. clear fault condition "
"button."
msgstr ""

#. type: TP
#: man/man1/iov2.1:144
#, no-wrap
msgid "B<iocontrol.0.state>"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:147
msgid "(S32,OUT) Debugging pin reflecting internal state."
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:153
msgid ""
"See E<.UR http://wiki.linuxcnc.org/cgi-bin/wiki.pl?"
"ToolchangerProtocolProposal > E<.UE> for additional information."
msgstr ""

#. type: groff code
#: man/man1/iov2.1:157
#, no-wrap
msgid ""
".ie  '\\*[.T]'html' \\{\\\n"
"\n"
".UR io.1.html\n"
"\\fBio\\fR(1),\n"
".UE\n"
".UR iocontrol.1.html \n"
"\\fBiocontrol\\fR(1),\n"
".UE\n"
".UR linuxcnc.1.html \n"
"\\fBLinuxCNC(1)\\fR,\n"
".UE\n"
"\n"
"\\}\n"
".el \\{\\\n"
"\n"
"\\fBio\\fR(1)\n"
"\\fBiocontrol\\fR(1)\n"
"\\fBLinuxCNC(1)\\fR\n"
"\n"
"\\}\n"
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:188
msgid "Rework & adding v2 protocol support by Michael Haberler."
msgstr ""

#. type: Plain text
#: man/man1/iov2.1:190
msgid "Copyright \\(co 2011 Michael Haberler."
msgstr ""

#. type: TH
#: man/man1/latency-histogram.1:25
#, no-wrap
msgid "LATENCY-HISTOGRAM"
msgstr ""

#. type: TH
#: man/man1/latency-histogram.1:25 man/man1/latency-plot.1:25
#, no-wrap
msgid "2021-08-14"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:28
msgid "latency-histogram - plot a histogram of machine latency"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:43
msgid ""
"B<latency-histogram> [B<-?|--help>] [B<--base> I<ns>] [B<--servo> I<ns>] "
"[B<--bbinsize> I<ns>] [B<--sbinsize> I<ns>] [B<--bbins> I<ns>] [B<--sbins> "
"I<ns>] [B<--logscale> I<0|1>] [B<--text> I<note>] [B<--show>] [B<--nobase>] "
"[B<--verbose>] [B<--nox>]"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:48
msgid ""
"The latency test is important when configuring a LinuxCNC system.  An "
"adjunct to the standard latency-test latency-histogram plots the "
"distribution of latency. This can be useful to get a feel for how frequent "
"the high latency excursions are."
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:59
msgid ""
"LinuxCNC and HAL should not be running, stop with I<halrun -U>.  Large "
"number of bins and/or small binsizes will slow updates.  For single thread, "
"specify B<--nobase> (and options for servo thread).  Measured latencies "
"outside of the +/- bin range are reported with special end bars.  Use B<--"
"show> to show count for the off-chart [pos|neg] bin"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:62 man/man1/latency-plot.1:48
msgid ""
"More details: \\%https://linuxcnc.org/docs/html/install/latency-test.html"
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:63 man/man1/latency-plot.1:49
#, no-wrap
msgid "B<-?>, B<--help>"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:66 man/man1/latency-plot.1:52
msgid "Show options and exit."
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:66
#, no-wrap
msgid "B<--base>I< ns>"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:69
msgid "base thread interval, default: 25000, min: 5000"
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:69
#, no-wrap
msgid "B<--servo>I< ns>"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:72
msgid "servo thread interval, default: 1000000, min: 25000"
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:72
#, no-wrap
msgid "B<--bbinsize>I< ns>"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:75
msgid "base bin size, default: 100"
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:75
#, no-wrap
msgid "B<--sbinsize>I< ns>"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:78
msgid "servo bin size, default: 100"
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:78
#, no-wrap
msgid "B<--bbins>I< ns>"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:81
msgid "base bins, default: 200"
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:81
#, no-wrap
msgid "B<--sbins>I< ns>"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:84
msgid "servo bins, default: 200"
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:84
#, no-wrap
msgid "B<--logscale>I< 0|1>"
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:87
#, no-wrap
msgid "B<--text>I< note>"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:90
msgid "additional note, default: \"\""
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:90
#, no-wrap
msgid "B<--show>"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:93
msgid "show count of undisplayed bins"
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:93
#, no-wrap
msgid "B<--nobase>"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:96
msgid "servo thread only"
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:96
#, no-wrap
msgid "B<--verbose>"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:99
msgid "progress and debug"
msgstr ""

#. type: TP
#: man/man1/latency-histogram.1:99
#, no-wrap
msgid "B<--nox>"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:102
msgid "no GUI, display elapsed, min, max, sdev for each thread"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:106
msgid "B<latency-plot>(1), B<latency-test>(1), B<linuxcnc>(1)"
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:110 man/man1/latency-plot.1:77
msgid ""
"Much more information about LinuxCNC and HAL is available in the LinuxCNC "
"and HAL User Manuals, found at I</usr/share/doc/linuxcnc/>."
msgstr ""

#. type: Plain text
#: man/man1/latency-histogram.1:117 man/man1/latency-plot.1:84
msgid "Report bugs at \\%https://github.com/LinuxCNC/linuxcnc/issues"
msgstr ""

#. type: TH
#: man/man1/latency-plot.1:25
#, no-wrap
msgid "LATENCY-PLOT"
msgstr ""

#. type: Plain text
#: man/man1/latency-plot.1:28
msgid "latency-plot - another way to view latency numbers"
msgstr ""

#. type: Plain text
#: man/man1/latency-plot.1:37
msgid ""
"B<latency-plot> [B<-?|--help>] [B<-H|--hal>] [B<-b|--base> I<nS>] [B<-s|--"
"servo> I<nS>] [B<-t|--time> I<mS>] [B<--relative>] [B<--actual>]"
msgstr ""

#. type: Plain text
#: man/man1/latency-plot.1:42
msgid ""
"B<latency-plot> makes a strip chart recording for a base and a servo thread. "
"It may be useful to see spikes in latency when other applications are "
"started or used.  Mainly superseded by latency-histogram."
msgstr ""

#. type: Plain text
#: man/man1/latency-plot.1:45
msgid "LinuxCNC and HAL should not be running, stop with I<halrun -U>."
msgstr ""

#. type: TP
#: man/man1/latency-plot.1:52
#, no-wrap
msgid "B<-H>, B<--hal>"
msgstr ""

#. type: TP
#: man/man1/latency-plot.1:54
#, no-wrap
msgid "B<-b>, B<--base> I<nS>"
msgstr ""

#. type: Plain text
#: man/man1/latency-plot.1:57
msgid "base thread interval, default: 25000"
msgstr ""

#. type: TP
#: man/man1/latency-plot.1:57
#, no-wrap
msgid "B<-s>, B<--servo> I<nS>"
msgstr ""

#. type: Plain text
#: man/man1/latency-plot.1:60
msgid "servo thread interval, default: 1000000"
msgstr ""

#. type: TP
#: man/man1/latency-plot.1:60
#, no-wrap
msgid "B<-t>, B<--time> I<mS>"
msgstr ""

#. type: Plain text
#: man/man1/latency-plot.1:63
msgid "report interval, default: 1000, min: 100, max: 10000"
msgstr ""

#. type: TP
#: man/man1/latency-plot.1:63
#, no-wrap
msgid "B<--relative>"
msgstr ""

#. type: Plain text
#: man/man1/latency-plot.1:66
msgid "relative clock time (default)"
msgstr ""

#. type: TP
#: man/man1/latency-plot.1:66
#, no-wrap
msgid "B<--actual>"
msgstr ""

#. type: Plain text
#: man/man1/latency-plot.1:69
msgid "actual clock time"
msgstr ""

#. type: Plain text
#: man/man1/latency-plot.1:73
msgid "B<latency-histogram>(1), B<latency-test>(1), B<linuxcnc>(1)"
msgstr ""

#. type: TH
#: man/man1/latency-test.1:25
#, no-wrap
msgid "LATENCY-TEST"
msgstr ""

#. type: Plain text
#: man/man1/latency-test.1:28
msgid "latency-test - test the realtime system latency"
msgstr ""

#. type: Plain text
#: man/man1/latency-test.1:30
msgid "B<latency-test [base-period [servo-period]]>"
msgstr ""

#. type: Plain text
#: man/man1/latency-test.1:34
msgid ""
"B<latency-test> runs a simple latency test http://linuxcnc.org/docs/html/"
"install/latency-test.html"
msgstr ""

#. type: Plain text
#: man/man1/latency-test.1:38
msgid "B<latency-test --help> for a description of available options."
msgstr ""

#. type: TH
#: man/man1/lineardelta.1:25
#, no-wrap
msgid "lineardelta"
msgstr ""

#. type: Plain text
#: man/man1/lineardelta.1:28
msgid "lineardelta - Vismach Virtual Machine GUI"
msgstr ""

#. type: Plain text
#: man/man1/lineardelta.1:32
msgid ""
"B<lineardelta> is one of the sample B<Vismach> GUIs for LinuxCNC, simulating "
"a delta robot with linear actuators"
msgstr ""

#. type: Plain text
#: man/man1/lineardelta.1:35 man/man1/rotarydelta.1:35
msgid ""
"See the main LinuxCNC documentation for more details.  http://linuxcnc.org/"
"docs/html/gui/vismach.html"
msgstr ""

#. type: TH
#: man/man1/linuxcnc_info.1:25
#, no-wrap
msgid "LINUXCNC_INFO"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_info.1:28
msgid "linuxcnc_info - short description"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_info.1:30
msgid "B<linuxcnc_info>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_info.1:34
msgid ""
"B<linuxcnc_info> supplies information about the LinuxCNC version and system "
"info. It creates a text file and opens it in the default text editor."
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_info.1:44
msgid "It appears to hang until the text editor is closed."
msgstr ""

#. type: TH
#: man/man1/linuxcnclcd.1:25
#, no-wrap
msgid "LINUXCNCLCD"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnclcd.1:28
msgid ""
"linuxcnclcd - LinuxCNC Graphical User Interface for LCD character display"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnclcd.1:31
msgid "B<linuxcnclcd> I<-ini> I<INIFILE>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnclcd.1:35
msgid ""
"B<linuxcnclcd> is one of the Graphical User Interfaces (GUI) for LinuxCNC It "
"gets run by the runscript usually. Linuxcnclcd is designed to run on a 4 x "
"20 LCD character display. It is not clear if it has ever worked."
msgstr ""

#. type: TH
#: man/man1/linuxcncmkdesktop.1:25
#, no-wrap
msgid "LINUXCNCMKDESKTOP"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncmkdesktop.1:28
msgid "linuxcncmkdesktop - short description"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncmkdesktop.1:30
msgid "B<linuxcncmkdesktop>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncmkdesktop.1:33
msgid "B<linuxcncmkdesktop> Script used by pickconfig to create a desktop icon"
msgstr ""

#. type: TH
#: man/man1/linuxcnc_module_helper.1:25
#, no-wrap
msgid "LINUXCNC_MODULE_HELPER"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_module_helper.1:28
msgid "linuxcnc_module_helper - short description"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_module_helper.1:30
msgid "B<linuxcnc_module_helper>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_module_helper.1:35
msgid ""
"B<linuxcnc_module_helper> This module exists to give root access to system "
"hardware for LinuxCNC It is not directly useful to users."
msgstr ""

#. type: TH
#: man/man1/linuxcncrsh.1:1
#, no-wrap
msgid "May 31, 2011"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:4
msgid ""
"linuxcncrsh - text-mode interface for commanding LinuxCNC over the network"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:7 man/man1/linuxcncrsh.1:88
msgid "B<linuxcncrsh [OPTIONS] [-- LINUXCNC_OPTIONS]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:13
msgid ""
"B<linuxcncrsh> is a user interface for LinuxCNC.  Instead of popping up a "
"GUI window like AXIS(1) and Touchy(1) do, it processes text-mode commands "
"that it receives via the network.  A human (or a program) can interface with "
"B<linuxcncrsh> using telnet(1) or nc(1) or similar programs."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:15
msgid ""
"All features of LinuxCNC are available via the B<linuxcncrsh> interface."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:19
msgid "B<-p,--port PORT_NUMBER>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:21
msgid ""
"Specify the port for linuxcncrsh to listen on.  Defaults to 5007 if omitted."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:25
msgid "B<-n,--name SERVER_NAME>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:28
msgid ""
"Sets the server name that linuxcncrsh will use to identify itself during "
"handshaking with a new client.  Defaults to EMCNETSVR if omitted."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:32
msgid "B<-w,--connectpw PASSWORD>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:37
msgid ""
"Specify the connection password to use during handshaking with a new "
"client.  Note that the password is sent in the clear, so it can be read by "
"anyone who can read packets on the network between the server and the "
"client.  Defaults to EMC if omitted."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:41
msgid "B<-e,--enablepw PASSWORD>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:46
msgid ""
"Specify the password required to enable LinuxCNC via linuxcncrsh.  Note that "
"the password is sent in the clear, so it can be read by anyone who can read "
"packets on the network between the server and the client.  Defaults to "
"EMCTOO if omitted."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:50
msgid "B<-s,--sessions MAX_SESSIONS>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:53
msgid ""
"Specify the maximum number of simultaneous connections.  Defaults to -1 (no "
"limit) if not specified."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:57
msgid ""
"In addition to the options listed above, linuxcncrsh accepts an optional "
"special LINUXCNC_OPTION at the end:"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:60
msgid "B<-ini LINUXCNC_INI_FILE>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:63
msgid ""
"LinuxCNC INI file to use.  The -ini option B<must> be preceded by two "
"dashes: \"--\".  Defaults to emc.ini if omitted."
msgstr ""

#. type: SH
#: man/man1/linuxcncrsh.1:64
#, no-wrap
msgid "Starting linuxcncrsh"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:68
msgid ""
"To use linuxcncrsh instead of a normal LinuxCNC GUI like AXIS or Touchy, "
"specify it in your INI file like this:"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:71
msgid "B<[DISPLAY]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:73
msgid "B<DISPLAY=linuxcncrsh>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:77
msgid ""
"To use linuxcncrsh in addition to a normal GUI, you can either start it at "
"the end of your HAL file, or run it by hand in a terminal window."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:79
msgid "To start it from hal, add a line like this to the end of your HAL file:"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:82
msgid "B<loadusr linuxcncrsh [OPTIONS] [-- LINUXCNC_OPTIONS]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:85
msgid "To start it from the terminal, run linuxcncrsh manually like this:"
msgstr ""

#. type: SH
#: man/man1/linuxcncrsh.1:89
#, no-wrap
msgid "Connecting"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:93
msgid ""
"Once LinuxCNC is up and linuxcncrsh is running, you can connect to it using "
"B<telnet> or B<nc> or similar:"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:96
msgid "B<telnet HOST PORT>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:100
msgid ""
"HOST is the hostname or IP address of the computer running linuxcncrsh, and "
"PORT is the port it's listening on (5007 if you did not give linuxcncrsh the "
"--port option)."
msgstr ""

#. type: SH
#: man/man1/linuxcncrsh.1:102
#, no-wrap
msgid "Network protocol"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:106
msgid ""
"linuxcncrsh accepts TCP connections on the port specified by the --port "
"option, or 5007 if not specified."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:111
msgid ""
"The client sends requests, and the linuxcncrsh server returns replies.  "
"Requests consist of a command word followed by optional command-specific "
"parameters.  Requests and most request parameters are case insensitive. The "
"exceptions are passwords, file paths and text strings."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:115
msgid ""
"Requests to linuxcncrsh are terminated with line endings, any combination of "
"one or more '\\er' and '\\en' characters.  Replies from linuxcncrsh are "
"terminated with the sequence '\\er\\en'."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:117
msgid "The supported commands are as follows:"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:119
msgid "B<hello E<lt>passwordE<gt> E<lt>clientE<gt> E<lt>versionE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:123
msgid ""
"E<lt>passwordE<gt> must match linuxcncrsh's connect password, or \"EMC\" if "
"no --connectpw was supplied.  The three arguments may not contain "
"whitespace.  If a valid password was entered the server will respond with:"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:125
msgid "I<HELLO ACK E<lt>ServerNameE<gt> E<lt>ServerVersionE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:129
msgid ""
"If an invalid password or any other syntax error occurs then the server "
"responds with:"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:131
msgid "I<HELLO NAK>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:135
msgid "B<get E<lt>subcommandE<gt> [E<lt>parametersE<gt>]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:139
msgid ""
"The get command takes one of the LinuxCNC sub-commands (described in the "
"section B<LinuxCNC Subcommands>, below) and zero or more additional "
"subcommand-specific parameters."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:142
msgid "B<set E<lt>subcommandE<gt> E<lt>parametersE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:146
msgid ""
"The set command takes one of the LinuxCNC sub-commands (described in the "
"section B<LinuxCNC Subcommands>, below) and one or more additional "
"parameters."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:149
msgid "B<quit>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:151
msgid "The quit command disconnects the associated socket connection."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:154 man/man1/linuxcncrsh.1:754
msgid "B<shutdown>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:159
msgid ""
"The shutdown command tells LinuxCNC to shutdown and disconnect the session. "
"This command may only be issued if the Hello has been successfully "
"negotiated and the connection has control of the CNC (see B<enable> "
"subcommand in the B<LinuxCNC Subcommands> section, below)."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:162 man/man1/linuxcncrsh.1:730
msgid "B<help>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:168
msgid ""
"The help command will return help information in text format over the "
"connection. If no parameters are specified, it will itemize the available "
"commands.  If a command is specified, it will provide usage information for "
"the specified command. Help will respond regardless of whether a \"Hello\" "
"has been successfully negotiated."
msgstr ""

#. type: SH
#: man/man1/linuxcncrsh.1:169
#, no-wrap
msgid "LinuxCNC Subcommands"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:172
msgid "Subcommands for B<get> and B<set> are:"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:174
msgid "B<echo {on|off}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:179
msgid ""
"With get, any on/off parameter is ignored and the current echo state is "
"returned.  With set, sets the echo state as specified.  Echo defaults to on "
"when the connection is first established.  When echo is on, all commands "
"will be echoed upon receipt.  This state is local to each connection."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:182
msgid "B<verbose {on|off}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:189
msgid ""
"With get, any on/off parameter is ignored and the current verbose state is "
"returned.  With set, sets the verbose state as specified.  When verbose mode "
"is on, all set commands return positive acknowledgement in the form SET "
"E<lt>COMMANDE<gt> ACK, and text error messages will be issued (FIXME: I "
"don't know what this means).  The verbose state is local to each connection, "
"and starts out OFF on new connections."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:192
msgid "B<enable {E<lt>passwdE<gt>|off}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:199
msgid ""
"The session's enable state indicates whether the current connection is "
"enabled to perform control functions.  With get, any parameter is ignored, "
"and the current enable state is returned.  With set and a valid password "
"matching linuxcncrsh's --enablepw (EMCTOO if not specified), the current "
"connection is enabled for control functions.  \"OFF\" may not be used as a "
"password and disables control functions for this connection."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:202
msgid "B<config [TBD]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:204
msgid "Unused, ignore for now."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:207
msgid "B<comm_mode {ascii|binary}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:212
msgid ""
"With get, any parameter is ignored and the current communications mode is "
"returned.  With set, will set the communications mode to the specified "
"mode.  The ascii mode is the text request/reply mode, the binary protocol is "
"not currently designed or implemented."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:215
msgid "B<comm_prot E<lt>versionE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:220
msgid ""
"With get, any parameter is ignored and the current protocol version used by "
"the server is returned.  With set, sets the server to use the specified "
"protocol version, provided it is lower than or equal to the highest version "
"number supported by the server implementation."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:223
msgid "B<inifile>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:227
msgid ""
"Not currently implemented! With get, returns the string \"emc.ini\".  Should "
"return the full path and file name of the current configuration inifile.  "
"Setting this does nothing."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:230
msgid "B<plat>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:232
msgid "With get, returns the string \"Linux\"."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:235
msgid "B<ini E<lt>varE<gt> E<lt>sectionE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:238
msgid ""
"Not currently implemented, do not use! Should return the string value of "
"E<lt>varE<gt> in section E<lt>sectionE<gt> of the INI file."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:241
msgid "B<debug E<lt>valueE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:248
msgid ""
"With get, any parameter is ignored and the current integer value of "
"EMC_DEBUG is returned.  Note that the value of EMC_DEBUG returned is the "
"from the UI's ini file, which may be different than emc's ini file.  With "
"set, sends a command to the EMC to set the new debug level, and sets the "
"EMC_DEBUG global here to the same value. This will make the two values the "
"same, since they really ought to be the same."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:251
msgid "B<set_wait {received|done}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:257
msgid ""
"The set_wait setting controls the wait after receiving a command.  It can be "
"\"received\" (after the command was sent and received) or \"done\" (after "
"the command was done).  With get, any parameter is ignored and the current "
"set_wait setting is returned.  With set, set the set_wait setting to the "
"specified value."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:260
msgid "B<wait {received|done}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:263
msgid ""
"With set, force a wait for the previous command to be received, or done."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:266
msgid "B<set_timeout E<lt>timeoutE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:270
msgid ""
"With set, set the timeout for commands to return to E<lt>timeoutE<gt> "
"seconds. Timeout is a real number. If it's E<lt>= 0.0, it means wait "
"forever.  Default is 0.0, wait forever."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:273
msgid "B<update {none|auto}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:278
msgid ""
"The update mode controls whether to return fresh or stale values for \"get\" "
"requests.  When the update mode is \"none\" it returns stale values, when "
"it's \"auto\" it returns fresh values.  Defaults to \"auto\" for new "
"connections.  Set this to \"none\" if you like to be confused."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:281
msgid "B<error>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:283
msgid "With get, returns the current error string, or \"ok\" if no error."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:286
msgid "B<operator_display>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:288
msgid ""
"With get, returns the current operator display string, or \"ok\" if none."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:291
msgid "B<operator_text>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:293
msgid "With get, returns the current operator text string, or \"ok\" if none."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:296
msgid "B<time>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:299
msgid ""
"With get, returns the time, in seconds, from the start of the epoch. This "
"starting time depends on the platform."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:302
msgid "B<estop {on|off}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:306
msgid ""
"With get, ignores any parameters and returns the current estop setting as "
"\"on\" or \"off\".  With set, sets the estop as specified.  E-stop \"on\" "
"means the machine is in the estop state and won't run."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:309
msgid "B<machine {on|off}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:313
msgid ""
"With get, ignores any parameters and returns the current machine power "
"setting as \"on\" or \"off\".  With set, sets the machine on or off as "
"specified."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:316
msgid "B<mode {manual|auto|mdi}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:319
msgid ""
"With get, ignores any parameters and returns the current machine mode.  With "
"set, sets the machine mode as specified."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:322
msgid "B<mist {on|off}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:325
msgid ""
"With get, ignores any parameters and returns the current mist coolant "
"setting.  With set, sets the mist setting as specified."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:328
msgid "B<flood {on|off}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:331
msgid ""
"With get, ignores any parameters and returns the current flood coolant "
"setting.  With set, sets the flood setting as specified."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:334
msgid "B<lube {on|off}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:337
msgid ""
"With get, ignores any parameters and returns the current lube pump setting.  "
"With set, sets the lube pump setting as specified."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:340
msgid "B<lube_level>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:343
msgid ""
"With get, returns the lubricant level sensor reading as \"ok\" or \"low\".  "
"With set, mocks you for wishful thinking."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:346
msgid "B<spindle {forward|reverse|increase|decrease|constant|off}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:352
msgid ""
"With get, any parameter is ignored and the current spindle state is returned "
"as \"forward\", \"reverse\", \"increase\", \"decrease\", or \"off\". With "
"set, sets the spindle as specified.  Note that \"increase\" and \"decrease\" "
"will cause a speed change in the corresponding direction until a \"constant"
"\" command is sent."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:355
msgid "B<brake {on|off}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:358
msgid ""
"With get, any parameter is ignored and the current brake setting is "
"returned.  With set, the brake is set as specified."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:361
msgid "B<tool>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:363
msgid "With get, returns the id of the currently loaded tool."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:366
msgid "B<tool_offset>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:368
msgid "With get, returns the currently applied tool length offset."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:371
msgid "B<load_tool_table E<lt>fileE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:373
msgid "With set, loads the tool table specified by E<lt>fileE<gt>."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:376
msgid "B<home {0|1|2|...} | -1>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:378
msgid "With set, homes the indicated joint or if -1, Home All joints"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:381
msgid "B<jog_stop joint_number|axis_letter>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:385
msgid ""
"With set, stop any in-progress jog on the specified joint or axis.  If "
"TELEOP_ENABLE is NO, use joint_number; If TELEOP_ENABLE is YES, use "
"axis_letter."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:388
msgid "B<jog joint_number|axis_letter E<lt>speedE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:392
msgid ""
"With set, jog the specified joint or axis at E<lt>speedE<gt>; sign of speed "
"is direction.  If TELEOP_ENABLE is NO, use joint_number; If TELEOP_ENABLE is "
"YES, use axis_letter."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:395
msgid "B<jog_incr jog_number|axis_letter E<lt>speedE<gt> E<lt>incrE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:400
msgid ""
"With set, jog the indicated joint or axis by increment E<lt>incrE<gt> at the "
"E<lt>speedE<gt>; sign of speed is direction.  If TELEOP_ENABLE is NO, use "
"joint_number; If TELEOP_ENABLE is YES, use axis_letter."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:403
msgid "B<feed_override E<lt>percentE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:407
msgid ""
"With get, any parameter is ignored and the current feed override is returns "
"(as a percentage of commanded feed).  With set, sets the feed override as "
"specified."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:410
msgid "B<spindle_override E<lt>percentE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:414
msgid ""
"With get, any parameter is ignored and the current spindle override is "
"returned (as a percentage of commanded speed).  With set, sets the spindle "
"override as specified."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:417
msgid "B<abs_cmd_pos [{0|1|...}]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:421
msgid ""
"With get, returns the specified axis' commanded position in absolute "
"coordinates.  If no axis is specified, returns all axes' commanded absolute "
"position."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:424
msgid "B<abs_act_pos [{0|1|...}]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:428
msgid ""
"With get, returns the specified axis' actual position in absolute "
"coordinates.  If no axis is specified, returns all axes' actual absolute "
"position."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:431
msgid "B<rel_cmd_pos [{0|1|...}]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:435
msgid ""
"With get, returns the specified axis' commanded position in relative "
"coordinates, including tool length offset.  If no axis is specified, returns "
"all axes' commanded relative position."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:438
msgid "B<rel_act_pos [{0|1|...}]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:442
msgid ""
"With get, returns the specified axis' actual position in relative "
"coordinates, including tool length offset.  If no axis is specified, returns "
"all axes' actual relative position."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:445
msgid "B<joint_pos [{0|1|...}]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:449
msgid ""
"With get, returns the specified joint's actual position in absolute "
"coordinates, excluding tool length offset.  If no joint is specified, "
"returns all joints' actual absolute position."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:452
msgid "B<pos_offset [{X|Y|Z|R|P|W}]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:455
msgid ""
"With get, returns the position offset associated with the world coordinate "
"provided."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:458
msgid "B<joint_limit [{0|1|...}]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:462
msgid ""
"With get, returns limit status of the specified joint as \"ok\", \"minsoft"
"\", \"minhard\", \"maxsoft\", or \"maxhard\".  If no joint number is "
"specified, returns the limit status of all joints."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:465
msgid "B<joint_fault [{0|1|...}]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:469
msgid ""
"With get, returns the fault status of the specified joint as \"ok\" or "
"\"fault\".  If no joint number is specified, returns the fault status of all "
"joints."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:472
msgid "B<joint_homed [{0|1|...}]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:476
msgid ""
"With get, returns the homed status of the specified joint as \"homed\" or "
"\"not\".  If no joint number is specified, returns the homed status of all "
"joints."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:479
msgid "B<mdi E<lt>stringE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:481
msgid "With set, sends E<lt>stringE<gt> as an MDI command."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:484
msgid "B<task_plan_init>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:486
msgid "With set, initializes the program interpreter."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:489
msgid "B<open E<lt>filenameE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:493
msgid ""
"With set, opens the named file.  The E<lt>filenameE<gt> is opened by "
"linuxcnc, so it should either be an absolute path or a relative path "
"starting in the LinuxCNC working directory (the directory of the active INI "
"file)."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:496
msgid "B<run [E<lt>StartLineE<gt>]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:500
msgid ""
"With set, runs the opened program.  If no StartLine is specified, runs from "
"the beginning.  If a StartLine is specified, start line, runs from that "
"line. A start line of -1 runs in verify mode."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:503
msgid "B<pause>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:505
msgid "With set, pause program execution."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:508
msgid "B<resume>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:510
msgid "With set, resume program execution."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:513
msgid "B<abort>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:515
msgid "With set, abort program or MDI execution."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:518
msgid "B<step>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:520
msgid "With set, step the program one line."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:523
msgid "B<program>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:525
msgid ""
"With get, returns the name of the currently opened program, or \"none\"."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:528
msgid "B<program_line>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:530
msgid "With get, returns the currently executing line of the program."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:533
msgid "B<program_status>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:535
msgid "With get, returns \"idle\", \"running\", or \"paused\"."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:538
msgid "B<program_codes>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:540
msgid "With get, returns the string for the currently active program codes."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:543
msgid "B<joint_type [E<lt>jointE<gt>]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:546
msgid ""
"With get, returns \"linear\", \"angular\", or \"custom\" for the type of the "
"specified joint (or for all joints if none is specified)."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:549
msgid "B<joint_units [E<lt>jointE<gt>]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:559
msgid ""
"With get, returns \"inch\", \"mm\", \"cm\", or \"deg\", \"rad\", \"grad\", "
"or \"custom\", for the corresponding native units of the specified joint (or "
"for all joints if none is specified).  The type of the axis (linear or "
"angular) is used to resolve which type of units are returned. The units are "
"obtained heuristically, based on the EMC_AXIS_STAT::units numerical value of "
"user units per mm or deg.  For linear joints, something close to 0.03937 is "
"deemed \"inch\", 1.000 is \"mm\", 0.1 is \"cm\", otherwise it's \"custom\".  "
"For angular joints, something close to 1.000 is deemed \"deg\", PI/180 is "
"\"rad\", 100/90 is \"grad\", otherwise it's \"custom\"."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:562
msgid "B<program_units>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:564
msgid "Synonym for program_linear_units."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:567
msgid "B<program_linear_units>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:570
msgid ""
"With get, returns \"inch\", \"mm\", \"cm\", or \"none\", for the "
"corresponding linear units that are active in the program interpreter."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:573
msgid "B<program_angular_units>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:576
msgid ""
"With get, returns \"deg\", \"rad\", \"grad\", or \"none\" for the "
"corresponding angular units that are active in the program interpreter."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:579
msgid "B<user_linear_units>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:585
msgid ""
"With get, returns \"inch\", \"mm\", \"cm\", or \"custom\", for the "
"corresponding native user linear units of the LinuxCNC trajectory level. "
"This is obtained heuristically, based on the EMC_TRAJ_STAT::linearUnits "
"numerical value of user units per mm.  Something close to 0.03937 is deemed "
"\"inch\", 1.000 is \"mm\", 0.1 is \"cm\", otherwise it's \"custom\"."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:588
msgid "B<user_angular_units>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:592
msgid ""
"Returns \"deg\", \"rad\", \"grad\", or \"custom\" for the corresponding "
"native user angular units of the LinuxCNC trajectory level. Like with linear "
"units, this is obtained heuristically."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:595
msgid "B<display_linear_units>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:599
msgid ""
"With get, returns \"inch\", \"mm\", \"cm\", or \"custom\", for the linear "
"units that are active in the display.  This is effectively the value of "
"linearUnitConversion."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:601
msgid "B<display_angular_units>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:605
msgid ""
"With get, returns \"deg\", \"rad\", \"grad\", or \"custom\", for the angular "
"units that are active in the display.  This is effectively the value of "
"angularUnitConversion."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:608
msgid "B<linear_unit_conversion {inch|mm|cm|auto}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:612
msgid ""
"With get, any parameter is ignored and the active unit conversion is "
"returned.  With set, sets the unit to be displayed.  If it's \"auto\", the "
"units to be displayed match the program units."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:615
msgid "B<angular_unit_conversion {deg|rad|grad|auto}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:619
msgid ""
"With get, any parameter is ignored and the active unit conversion is "
"returned.  With set, sets the units to be displayed. If it's \"auto\", the "
"units to be displayed match the program units."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:622
msgid "B<probe_clear>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:624
msgid "With set, clear the probe tripped flag."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:627
msgid "B<probe_tripped>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:629
msgid ""
"With get, return the probe state - has the probe tripped since the last "
"clear?"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:632
msgid "B<probe_value>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:634
msgid "With get, return the current value of the probe signal."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:637
msgid "B<probe>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:640
msgid ""
"With set, move toward a certain location. If the probe is tripped on the way "
"stop motion, record the position and raise the probe tripped flag."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:643
msgid "B<teleop_enable [on|off]>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:646
msgid ""
"With get, any parameter is ignored and the current teleop mode is returned.  "
"With set, sets the teleop mode as specified."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:649
msgid "B<kinematics_type>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:652
msgid ""
"With get, returns the type of kinematics functions used (identity=1, "
"serial=2, parallel=3, custom=4)."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:655
msgid "B<override_limits {on|off}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:661
msgid ""
"With get, any parameter is ignored and the override_limits setting is "
"returned.  With set, the override_limits parameter is set as specified.  If "
"override_limits is on, disables end of travel hardware limits to allow "
"jogging off of a limit. If parameters is off, then hardware limits are "
"enabled."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:664
msgid "B<optional_stop {0|1}>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:667
msgid ""
"With get, any parameter is ignored and the current \"optional stop on M1\" "
"setting is returned.  With set, the setting is set as specified."
msgstr ""

#. type: SH
#: man/man1/linuxcncrsh.1:668
#, no-wrap
msgid "Example Session"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:674
msgid ""
"This section shows an example session to the local machine (B<localhost>).  "
"Bold items are typed by you, non-bold is machine output.  Default values are "
"shown for --port PORT_NUMBER (B<5007>), --conectpw PASSWORD (B<EMC>), and --"
"enablepw PASSWORD (B<EMCTOO>)."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:680
msgid ""
"The user connects to linuxcncrsh, handshakes with the server (hello), "
"enables machine commanding from this session (set enable), brings the "
"machine out of E-stop (set estop off) and turns it on (set machine on), "
"homes all the axes, switches the machine to mdi mode, sends an MDI G-code "
"command, then disconnects and shuts down LinuxCNC."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:682
msgid "E<gt> B<telnet localhost 5007>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:684
msgid "Trying 127.0.0.1..."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:686
msgid "Connected to 127.0.0.1"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:688
msgid "Escape character is '^]'."
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:690
msgid "B<hello EMC user-typing-at-telnet 1.0>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:692
msgid "HELLO ACK EMCNETSVR 1.1"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:694
msgid "B<set enable EMCTOO>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:696
msgid "set enable EMCTOO"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:698
msgid "B<set mode manual>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:700
msgid "set mode manual"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:702
msgid "B<set estop off>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:704
msgid "set estop off"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:706
msgid "B<set machine on>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:708
msgid "set machine on"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:710
msgid "B<set home 0>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:712
msgid "set home 0"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:714
msgid "B<set home 1>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:716
msgid "set home 1"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:718
msgid "B<set home 2>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:720
msgid "set home 2"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:722
msgid "B<set mode mdi>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:724
msgid "set mode mdi"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:726
msgid "B<set mdi g0x1>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:728
msgid "set mdi g0x1"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:732
msgid "help"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:739
#, no-wrap
msgid ""
"Available commands:\n"
"  Hello E<lt>passwordE<gt> E<lt>client nameE<gt> E<lt>protocol versionE<gt>\n"
"  Get E<lt>emc commandE<gt>\n"
"  Set E<lt>emc commandE<gt>\n"
"  Shutdown\n"
"  Help E<lt>commandE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:741
msgid "B<help get>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:743
msgid "help get"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:750
#, no-wrap
msgid ""
"Usage:\n"
"Get E<lt>emc commandE<gt>\n"
"  Get commands require that a hello has been successfully negotiated.\n"
"  Emc command may be one of:\n"
"    Abs_act_pos\n"
"    Abs_cmd_pos\n"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:752
#, no-wrap
msgid " B<... >\n"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:756
msgid "shutdown"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncrsh.1:757
msgid "Connection closed by foreign host."
msgstr ""

#. type: TH
#: man/man1/linuxcncsvr.1:25
#, no-wrap
msgid "LINUXCNCSVR"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncsvr.1:28
msgid "linuxcncsvr - short description"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncsvr.1:30
msgid "B<linuxcncsvr>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcncsvr.1:33
msgid "B<linuxcncsvr> Allows network access to LinuxCNC internals via NML"
msgstr ""

#. type: TH
#: man/man1/linuxcnctop.1:25
#, no-wrap
msgid "LINUXCNCTOP"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnctop.1:28
msgid "linuxcnctop - short description"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnctop.1:31
msgid "B<linuxcnctop> I<-ini> I<INIFILE>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnctop.1:34
msgid ""
"B<linuxcnctop> displays much of the LinuxCNC state in a live format similar "
"to the Linux \"top\" command."
msgstr ""

#. type: Plain text
#: man/man1/linuxcnctop.1:38
msgid ""
"It is more fully documented in the AXIS GUI documentation but can be run "
"standalone or with other GUIs.  http://linuxcnc.org/docs/html/gui/axis.html"
msgstr ""

#. type: TH
#: man/man1/linuxcnc_var.1:25
#, no-wrap
msgid "LINUXCNC_VAR"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_var.1:28
msgid "linuxcnc_var - short description"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_var.1:30
msgid "B<linuxcnc_var>"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_var.1:33
msgid "B<linuxcnc_var> Retrieve LinuxCNC variables"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_var.1:38
#, no-wrap
msgid ""
"Usage:\n"
"      linuxcnc_var [ varname | all ]\n"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_var.1:46
#, no-wrap
msgid ""
"Varnames supported:\n"
"         LINUXCNCVERSION\n"
"         LINUXCNC_AUX_GLADEVCP\n"
"         LINUXCNC_AUX_EXAMPLES\n"
"         REALTIME\n"
"         RTS\n"
"         HALLIB_DIR\n"
msgstr ""

#. type: Plain text
#: man/man1/linuxcnc_var.1:48
msgid "Option 'all' returns varname=value for all supported varnames"
msgstr ""

#. type: TH
#: man/man1/maho600gui.1:25
#, no-wrap
msgid "maho600gui"
msgstr ""

#. type: Plain text
#: man/man1/maho600gui.1:32
msgid ""
"B<maho600gui> is one of the sample B<Vismach> GUIs for LinuxCNC, simulating "
"a Maho 600 CNC Milling Machine."
msgstr ""

#. type: TH
#: man/man1/max5gui.1:25
#, no-wrap
msgid "max5gui"
msgstr ""

#. type: Plain text
#: man/man1/max5gui.1:32
msgid ""
"B<max5gui> is one of the sample B<Vismach> GUIs for LinuxCNC, simulating a 5 "
"axis CNC Milling Machine."
msgstr ""

#. type: TH
#: man/man1/mb2hal.1:29
#, no-wrap
msgid "mb2hal"
msgstr ""

#. type: TH
#: man/man1/mb2hal.1:29
#, no-wrap
msgid "November 20, 2021"
msgstr ""

#. type: TH
#: man/man1/mb2hal.1:29
#, no-wrap
msgid "Modbus to HAL"
msgstr ""

#. type: Plain text
#: man/man1/mb2hal.1:32
msgid "B<mb2hal> - HAL userspace component for Modbus"
msgstr ""

#. type: TP
#: man/man1/mb2hal.1:33
#, no-wrap
msgid "Default component name:"
msgstr ""

#. type: Plain text
#: man/man1/mb2hal.1:36
msgid "loadusr -W mb2hal config=config_file.ini"
msgstr ""

#. type: TP
#: man/man1/mb2hal.1:36
#, no-wrap
msgid "Custom component name: "
msgstr ""

#. type: Plain text
#: man/man1/mb2hal.1:39
msgid "loadusr -Wn mymodule mb2hal config=config_file.ini"
msgstr ""

#. type: Plain text
#: man/man1/mb2hal.1:44
msgid ""
"MB2HAL is a generic userspace HAL component to communicate with one or more "
"Modbus devices. It supoorts Modbus RTU and Modbus TCP."
msgstr ""

#. type: Plain text
#: man/man1/mb2hal.1:50
msgid ""
"See E<.UR http://linuxcnc.org/docs/html/drivers/mb2hal.html > E<.UE> for "
"more information."
msgstr ""

#. type: SS
#: man/man1/mb2hal.1:53
#, no-wrap
msgid "fnct_01_read_coils:"
msgstr ""

#. type: TP
#: man/man1/mb2hal.1:54 man/man1/mb2hal.1:59
#, no-wrap
msgid "B<mb2hal.m.n.bit> bit out"
msgstr ""

#. type: TQ
#: man/man1/mb2hal.1:56 man/man1/mb2hal.1:61
#, no-wrap
msgid "B<mb2hal.m.n.bit-inv> bit out"
msgstr ""

#. type: SS
#: man/man1/mb2hal.1:58
#, no-wrap
msgid "fnct_02_read_discrete_inputs:"
msgstr ""

#. type: SS
#: man/man1/mb2hal.1:63
#, no-wrap
msgid "fnct_03_read_holding_registers:"
msgstr ""

#. type: TP
#: man/man1/mb2hal.1:64 man/man1/mb2hal.1:69
#, no-wrap
msgid "B<mb2hal.m.n.float> float out"
msgstr ""

#. type: TQ
#: man/man1/mb2hal.1:66 man/man1/mb2hal.1:71
#, no-wrap
msgid "B<mb2hal.m.n.int> s32 out"
msgstr ""

#. type: SS
#: man/man1/mb2hal.1:68
#, no-wrap
msgid "fnct_04_read_input_registers:"
msgstr ""

#. type: SS
#: man/man1/mb2hal.1:73
#, no-wrap
msgid "fnct_05_write_single_coil:"
msgstr ""

#. type: TP
#: man/man1/mb2hal.1:74 man/man1/mb2hal.1:85
#, no-wrap
msgid "B<mb2hal.m.n.bit> bit in"
msgstr ""

#. type: Plain text
#: man/man1/mb2hal.1:77
#, no-wrap
msgid " NELEMENTS needs to be 1 or PIN_NAMES must contain just one name.\n"
msgstr ""

#. type: SS
#: man/man1/mb2hal.1:77
#, no-wrap
msgid "fnct_06_write_single_register:"
msgstr ""

#. type: TP
#: man/man1/mb2hal.1:78 man/man1/mb2hal.1:88
#, no-wrap
msgid "B<mb2hal.m.n.float> float in"
msgstr ""

#. type: TQ
#: man/man1/mb2hal.1:80 man/man1/mb2hal.1:90
#, no-wrap
msgid "B<mb2hal.m.n.int> s32 in"
msgstr ""

#. type: Plain text
#: man/man1/mb2hal.1:84
msgid ""
"NELEMENTS needs to be 1 or PIN_NAMES must contain just one name.  Both pin "
"values are added and limited to 65535 (UINT16_MAX). Use one and let the "
"other open (read as 0)."
msgstr ""

#. type: SS
#: man/man1/mb2hal.1:84
#, no-wrap
msgid "fnct_15_write_multiple_coils:"
msgstr ""

#. type: SS
#: man/man1/mb2hal.1:87
#, no-wrap
msgid "fnct_16_write_multiple_registers:"
msgstr ""

#. type: SS
#: man/man1/mb2hal.1:95
#, no-wrap
msgid "Each transaction"
msgstr ""

#. type: TQ
#: man/man1/mb2hal.1:96
#, no-wrap
msgid "B<mb2hal.m.num_errors> u32 in"
msgstr ""

#. type: Plain text
#: man/man1/mb2hal.1:99
msgid "Error counter"
msgstr ""

#. type: Plain text
#: man/man1/mb2hal.1:103
msgid ""
"m = HAL_TX_NAME or transaction number if not set, n = element number "
"(NELEMENTS)"
msgstr ""

#. type: Plain text
#: man/man1/mb2hal.1:107
msgid ""
"mb2hal.00.01.E<lt>typeE<gt> (transaction=00, second register=01 (00 is the "
"first one))"
msgstr ""

#. type: Plain text
#: man/man1/mb2hal.1:109
msgid ""
"mb2hal.TxName.01.E<lt>typeE<gt> (HAL_TX_NAME=TxName, second register=01 (00 "
"is the first one))"
msgstr ""

#. type: Plain text
#: man/man1/mb2hal.1:112
msgid "Victor Rocco"
msgstr ""

#. type: Plain text
#: man/man1/mdi.1:29
msgid ""
"mdi - Send G-code commands from the terminal to the running LinuxCNC instance"
msgstr ""

#. type: Plain text
#: man/man1/mdi.1:31
msgid "B<mdi>"
msgstr ""

#. type: Plain text
#: man/man1/mdi.1:36
msgid ""
"B<mdi> sends G-code commands to LinuxCNC.  The command starts an envirmonemt "
"in which G-code commands are sent to the interpreter and machine feedback is "
"displayed."
msgstr ""

#. type: Plain text
#: man/man1/mdi.1:41
#, no-wrap
msgid ""
" send a single command and exit\n"
" mdi m2 s1400\n"
msgstr ""

#. type: Plain text
#: man/man1/mdi.1:48
#, no-wrap
msgid ""
" interactive session\n"
" $mdi\n"
" MDIE<gt> m3 s1000\n"
" MDIE<gt> G0 X100\n"
" MDIE<gt> ^Z\n"
" $stopped\n"
msgstr ""

#. type: TH
#: man/man1/milltask.1:1
#, no-wrap
msgid "milltask"
msgstr ""

#. type: TH
#: man/man1/milltask.1:1
#, no-wrap
msgid "September 30, 2014"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:4
msgid "B<milltask> - Userspace task controller for LinuxCNC"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:12
msgid ""
"B<milltask> is an internal process of LinuxCNC.  It is generally not invoked "
"directly but by an INI file setting: B<[TASK]TASK=milltask>.  The "
"B<milltask> process creates the B<ini.*> HAL pins listed below and owned by "
"the B<inihal> user component.  These pins may be modified while LinuxCnC is "
"running to alter values that are typically specified in an INI file."
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:22
msgid ""
"The B<inihal> pins are sampled in every task cycle, however, commands "
"affected by their values typically use the value present at the time when "
"the command is processed.  Such commands include all codes handled by the "
"interpreter (B<G-code> programs and B<MDI> commands) and NML B<jogging> "
"commands issued by a GUI (including B<halui>).  B<Wheel jogging> is "
"implemented in the realtime motion module so B<inihal> pin changes (e.g., "
"ini.*.max_velocity, ini.*.max_acceleration) may be honored as soon as "
"altered values are propagated to the motion module."
msgstr ""

#. type: SS
#: man/man1/milltask.1:24
#, no-wrap
msgid "Per-joint pins (N == joint number)"
msgstr ""

#. type: TP
#: man/man1/milltask.1:25
#, no-wrap
msgid "B<ini.>I<N>B<.backlash>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:28
msgid "Allows adjustment of B<[JOINT_>I<N>B<]BACKLASH>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:28
#, no-wrap
msgid "B<ini.>I<N>B<.ferror>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:31
msgid "Allows adjustment of B<[JOINT_>I<N>B<]FERROR>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:31
#, no-wrap
msgid "B<ini.>I<N>B<.min_ferror>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:34
msgid "Allows adjustment of B<[JOINT_>I<N>B<]MIN_FERROR>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:34
#, no-wrap
msgid "B<ini.>I<N>B<.min_limit>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:37
msgid "Allows adjustment of B<[JOINT_>I<N>B<]MIN_LIMIT>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:37
#, no-wrap
msgid "B<ini.>I<N>B<.max_limit>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:40
msgid "Allows adjustment of B<[JOINT_>I<N>B<]MAX_LIMIT>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:40
#, no-wrap
msgid "B<ini.>I<N>B<.max_velocity>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:43
msgid "Allows adjustment of B<[JOINT_>I<N>B<]MAX_VELOCITY>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:43
#, no-wrap
msgid "B<ini.>I<N>B<.max_acceleration>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:46
msgid "Allows adjustment of B<[JOINT_>I<N>B<]MAX_ACCELERATION>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:46
#, no-wrap
msgid "B<ini.>I<N>B<.home>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:49
msgid "Allows adjustment of B<[JOINT_>I<N>B<]HOME>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:49 man/man1/milltask.1:52
#, no-wrap
msgid "B<ini.>I<N>B<.home_offset>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:52
msgid "Allows adjustment of B<[JOINT_>I<N>B<]HOME_OFFSET>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:55
msgid "Allows adjustment of B<[JOINT_>I<N>B<]HOME_SEQUENCE>"
msgstr ""

#. type: SS
#: man/man1/milltask.1:56
#, no-wrap
msgid "Per-axis pins (L == axis letter)"
msgstr ""

#. type: TP
#: man/man1/milltask.1:57
#, no-wrap
msgid "B<ini.>I<L>B<.min_limit>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:60
msgid "Allows adjustment of B<[AXIS_>I<L>B<]MIN_LIMIT>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:60
#, no-wrap
msgid "B<ini.>I<L>B<.max_limit>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:63
msgid "Allows adjustment of B<[AXIS_>I<L>B<]MAX_LIMIT>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:63
#, no-wrap
msgid "B<ini.>I<L>B<.max_velocity>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:66
msgid "Allows adjustment of B<[AXIS_>I<L>B<]MAX_VELOCITY>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:66
#, no-wrap
msgid "B<ini.>I<L>B<.max_acceleration>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:69
msgid "Allows adjustment of B<[AXIS_>I<L>B<]MAX_ACCELERATION>"
msgstr ""

#. type: SS
#: man/man1/milltask.1:70
#, no-wrap
msgid "Global pins"
msgstr ""

#. type: TP
#: man/man1/milltask.1:71
#, no-wrap
msgid "B<ini.traj_default_acceleration>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:74
msgid "Allows adjustment of B<[TRAJ]DEFAULT_ACCELERATION>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:74
#, no-wrap
msgid "B<ini.traj_default_velocity>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:77
msgid "Allows adjustment of B<[TRAJ]DEFAULT_VELOCITY>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:77
#, no-wrap
msgid "B<ini.traj_max_acceleration>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:80
msgid "Allows adjustment of B<[TRAJ]MAX_ACCELERATION>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:80
#, no-wrap
msgid "B<ini.traj_max_velocity>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:83
msgid "Allows adjustment of B<[TRAJ]MAX_VELOCITY>"
msgstr ""

#. type: SS
#: man/man1/milltask.1:84
#, no-wrap
msgid "Global pins (arc_blend trajectory planner)"
msgstr ""

#. type: TP
#: man/man1/milltask.1:85
#, no-wrap
msgid "B<ini.traj_arc_blend_enable>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:88
msgid "Allows adjustment of B<[TRAJ]ARC_BLEND_ENABLE>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:88
#, no-wrap
msgid "B<ini.traj_arc_blend_fallback_enable>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:91
msgid "Allows adjustment of B<[TRAJ]ARC_BLEND_FALLBACK_ENABLE>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:91
#, no-wrap
msgid "B<ini.traj_arc_blend_gap_cycles>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:94
msgid "Allows adjustment of B<[TRAJ]ARC_OPTIMIZATION_DEPTH>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:94
#, no-wrap
msgid "B<ini.traj_arc_blend_optimization_depth>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:97
msgid "Allows adjustment of B<[TRAJ]ARC_BLEND_GAP_CYCLES>"
msgstr ""

#. type: TP
#: man/man1/milltask.1:97
#, no-wrap
msgid "B<ini.traj_arc_blend_ramp_freq>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:100
msgid "Allows adjustment of B<[TRAJ]ARC_BLEND_RAMP_FREQ>"
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:109
msgid ""
"The B<inihal> pins cannot be linked or set in a HAL file that is specified "
"by an INI file B<[HAL]HALFILE> item because they are not created until "
"B<milltask> is started.  The B<inihal> pin values can be altered by "
"independent halcmd programs specified by B<[APPLICATION]APP> items or by "
"GUIs that support a B<[HAL]POSTGUI_HALFILE>."
msgstr ""

#. type: Plain text
#: man/man1/milltask.1:112
msgid ""
"The INI file is not automatically updated with values altered by B<inihal> "
"pin settings but can be updated using the calibration program (emccalib.tcl) "
"when using a B<[HAL]POSTGUI_HALFILE>."
msgstr ""

#. type: TH
#: man/man1/mitsub_vfd.1:1
#, no-wrap
msgid "mitsub_vfd"
msgstr ""

#. type: TH
#: man/man1/mitsub_vfd.1:1
#, no-wrap
msgid "2018-10-25"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:9
msgid ""
"mitsub_vfd - HAL userspace component for Mitsubishi A500 F500 E500 A500 D700 "
"E700 F700-series VFDs (others may work)  This uses the COMPUTER LINK "
"protocol _not_ MODBUS.  The connection is made through the PU connector."
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:13
msgid ""
"B<loadrt mitsub_vfd [--baud 4800] [--port /dev/ttyUSB0] name1=number1[,"
"name2=numer2...]>"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:16
msgid ""
"B<name1> is user selectable (usually a description of the controlled device)."
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:19
msgid ""
"B<number1> is the slave number that was set on the VFD.  must be two digits "
"(Parameter 117)"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:22
msgid "B<name=number> can be repeated for multiple VFD's connected together"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:25
#, no-wrap
msgid ""
"B<--baud> is optional as it defaults to 9600\n"
"  all networked vfds must be set to the same baudrate\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:27
msgid "B<--port> is optional as it defaults to ttyS0"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:33
msgid ""
"The mitsub_vfd component interfaces a Mitsubishi VFD to LinuxCNC. The VFD is "
"connected via RS-485 serial to the computer's USB or serial port using a "
"RS-232/RS-485 converter"
msgstr ""

#. type: SH
#: man/man1/mitsub_vfd.1:35
#, no-wrap
msgid "HARDWARE SETUP"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:39
msgid ""
"reference manual 'communication option reference manual' and A500 technical "
"manual for 500 series.  Fr-A700 F700 E700 D700 technical manual for the 700 "
"series"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:41
msgid "The inverter must be set manually for communication"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:43
msgid "( you may have to set PR 77 to 1 to unlock PR modification )"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:45
msgid "You must power cycle the inverter for some of these. (eg 79)"
msgstr ""

#. type: TP
#: man/man1/mitsub_vfd.1:46
#, no-wrap
msgid "B<VFD INTERNAL PARAMETERS: >"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:50
msgid "B<PARAMETER 79> - 1 or 0"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:52
msgid "B<PARAMETER 117> station number - 1"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:54
msgid "(can be optionally set 0 - 31) if component is also set"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:56
msgid "B<PARAMETER 118> communication speed 96"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:58
msgid "(can be optionally set 48,96,192 if component is also set)"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:60
msgid "B<PARAMETER 119> stop bit/data length - 1"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:62
msgid "(8 bits, two stop - don't change)"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:64
msgid "B<PARAMETER 120> parity - 0"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:66
msgid "(no parity - don't change)"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:68
msgid "B<PARAMETER 121> COM tries - 10"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:70
msgid "(if maximuim 10 COM errors then inverter faults- can change)"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:72
msgid "B<PARAMETER 122> COM check time interval 9999"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:75
msgid ""
"(never check - if communication is lost inverter will not know (can change)"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:77
msgid "B<PARAMETER 123> wait time - 9999"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:79
msgid "no wait time is added to the serial data frame (don't change)"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:81
msgid "B<PARAMETER 124> CR selection - 0"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:83
msgid "don't change"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:85
msgid "B<PARAMETER 549> communication protocol - 0"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:87
msgid "computer link protocol - don't change - (not all VFDs have this)"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:92
msgid ""
"This driver assumes certain other VFD settings: -That the motor frequency "
"status is set to show herts."
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:94
msgid "-That the status bit 3 is up to speed"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:96
msgid "-That the status bit 7 is alarm"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:98
msgid "some models (eg E500) cannot monitor status."
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:100
msgid "You must set set the monitor pin to false."
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:103
msgid ""
"In this case pins such as up-to-speed, amps, alarm and status bits are not "
"useful."
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:107
#, no-wrap
msgid ""
"B<[VFD NAME].fwd> (bit, in)::\n"
"      forward/reverse pin\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:110
#, no-wrap
msgid ""
"B<[VFD NAME].run> (bit, in)::\n"
"      run/stop pin\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:113
#, no-wrap
msgid ""
"B<[VFD NAME].debug> (bit, in)::\n"
"      set debug mode pin\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:115
#, no-wrap
msgid "      This will print many messages to the terminal\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:121
#, no-wrap
msgid ""
"B<[VFD NAME].monitor> (bit, in)::\n"
"      set monitor mode pin\n"
"      If false request-status command will not be sent to VFD.\n"
"      Status, amps, power, motor-feedback, and alarm would then not \n"
"        be useful.\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:124
#, no-wrap
msgid ""
"B<[VFD NAME].estop> (bit, in)::\n"
"      set E-stop mode pin\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:127
#, no-wrap
msgid ""
"      This will stop the VFD. \n"
"      Restarting requires the run pin to cycle.\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:131
#, no-wrap
msgid ""
"B<[VFD NAME].fwd> (bit, out)::\n"
"      up-to-speed status pin\n"
"      Motor is at requested speed within VFD's settings tolerance.\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:134
#, no-wrap
msgid ""
"B<[VFD NAME].alarm> (bit, out)::\n"
"      alarm status pin\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:138
#, no-wrap
msgid ""
"B<[VFD NAME].motor-cmd> (float, in)::\n"
"      The requested motor speed, is Hertz\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:142
#, no-wrap
msgid ""
"B<[VFD NAME].motor-fb> (float, out)::\n"
"      The motor feedback speed (from VFD) in Hertz (Hz)\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:145
#, no-wrap
msgid ""
"B<[VFD NAME].motor-amps> (float, out)::\n"
"      The motor current, in amps\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:148
#, no-wrap
msgid ""
"B<[VFD NAME].motor-power> (float, out)::\n"
"      The motor power\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:152 man/man1/mitsub_vfd.1:155
#: man/man1/mitsub_vfd.1:158
#, no-wrap
msgid ""
"B<[VFD NAME].scale-cmd> (float, in)::\n"
"      Motor command's scale setting defaults to 1\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:162
#, no-wrap
msgid ""
"B<[VFD NAME].stat-bit-0> (bit, out)::\n"
"      raw status bit\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:165
#, no-wrap
msgid ""
"B<[VFD NAME].stat-bit-1> (bit, out)::\n"
"      raw status bit\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:168
#, no-wrap
msgid ""
"B<[VFD NAME].stat-bit-2> (bit, out)::\n"
"      raw status bit\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:172
#, no-wrap
msgid ""
"B<[VFD NAME].stat-bit-3> (bit, out)::\n"
"      raw status bit\n"
"      set the VFD so this is motor-at-speed status\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:175
#, no-wrap
msgid ""
"B<[VFD NAME].stat-bit-4> (bit, out)::\n"
"      raw status bit\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:178
#, no-wrap
msgid ""
"B<[VFD NAME].stat-bit-5> (bit, out)::\n"
"      raw status bit\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:181
#, no-wrap
msgid ""
"B<[VFD NAME].stat-bit-6> (bit, out)::\n"
"      raw status bit\n"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:185
#, no-wrap
msgid ""
"B<[VFD NAME].stat-bit-7> (bit, out)::\n"
"      raw status bit\n"
"      Set the VFD so this in the alarm bit\n"
msgstr ""

#. type: SH
#: man/man1/mitsub_vfd.1:186
#, no-wrap
msgid "SAMPLE HAL"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:188
msgid ""
"loadusr -Wn coolant mitsub_vfd --port /dev/ttyUSB0 spindle=02 coolant=01"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:190
msgid "# **************** Spindle VFD setup slave 2 ****************"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:192
msgid "net spindle-vel-cmd spindle.motor-cmd"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:194
msgid "net spindle-cw spindle.fwd"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:196
msgid "net spindle-on spindle.run"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:198
msgid "net spindle-at-speed spindle.up-to-speed"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:200
msgid "net estop-out spindle.estop"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:202
msgid "# cmd scaled to RPM (belt/gearbox driven)"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:204
msgid "setp spindle.scale-cmd .135"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:206
msgid "# feedback is in rpm (recipicale of command)"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:208
msgid "setp spindle.scale-fb 7.411"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:210
msgid "# turn on monitoring so feedback works"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:212
msgid "setp spindle.monitor 1"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:214
msgid "net spindle-speed-indicator spindle.motor-fb"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:216
msgid "# *************** Coolant VFD setup slave 1 *****************"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:218
msgid "net coolant-flood coolant.run"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:220
msgid "net coolant-is-on coolant.up-to-speed"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:222
msgid "# cmd and feedback scaled to hertz"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:224
msgid "setp coolant.scale-cmd 1"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:226
msgid "setp coolant.scale-fb 1"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:228
msgid "# command full speed"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:230
msgid "setp coolant.motor-cmd 60"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:232
msgid "# allows us to see status"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:234
msgid "setp coolant.monitor 1"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:236
msgid "net estop-out coolant.estop"
msgstr ""

#. type: Plain text
#: man/man1/mitsub_vfd.1:242
msgid ""
"some models (eg E500) cannot monitor status, so set the monitor pin to "
"false. In this case, pins such as up-to-speed, amps, alarm and status bits "
"are not useful."
msgstr ""

#. type: TH
#: man/man1/monitor-xhc-hb04.1:25
#, no-wrap
msgid "MONITOR-XHC-HB04"
msgstr ""

#. type: Plain text
#: man/man1/monitor-xhc-hb04.1:28
msgid ""
"monitor-xhc-hb04 - monitors the XHC-HB04 pendant and warns of disconnection"
msgstr ""

#. type: Plain text
#: man/man1/monitor-xhc-hb04.1:30
msgid "B<monitor-xhc-hb04>"
msgstr ""

#. type: Plain text
#: man/man1/monitor-xhc-hb04.1:35
msgid ""
"B<monitor-xhc-hb04> is included to monitor disconnects and reconnects of the "
"pendant.  This script runs in the background and will pop up a message when "
"the pendant is disconnected or reconnected."
msgstr ""

#. type: Plain text
#: man/man1/monitor-xhc-hb04.1:38
#, no-wrap
msgid ""
"Usage is optional; if used it is specified with INI file entry:\n"
"  [APPLICATIONS]APP = monitor-xhc-hb04\n"
msgstr ""

#. type: Plain text
#: man/man1/monitor-xhc-hb04.1:42
msgid "B<xhc-hb04(1)> B<LinuxCNC(1)>"
msgstr ""

#. type: TH
#: man/man1/motion-logger.1:25
#, no-wrap
msgid "MOTION-LOGGER"
msgstr ""

#. type: Plain text
#: man/man1/motion-logger.1:29
msgid "motion-logger - log motion commands sent from LinuxCNC's Task module"
msgstr ""

#. type: Plain text
#: man/man1/motion-logger.1:31
msgid "B<motion-logger>"
msgstr ""

#. type: Plain text
#: man/man1/motion-logger.1:35
msgid ""
"B<motion-logger> is a test program to log motion commands sent from "
"LinuxCNC's Task module to the Motion module"
msgstr ""

#. type: Plain text
#: man/man1/motion-logger.1:37
msgid "It is largely used by the regression tests and is poorly documented."
msgstr ""

#. type: TH
#: man/man1/moveoff_gui.1:25
#, no-wrap
msgid "moveoff_gui"
msgstr ""

#. type: TH
#: man/man1/moveoff_gui.1:25 man/man1/sim_pin.1:25
#, no-wrap
msgid "2014-12-18"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:28
msgid "moveoff_gui - a GUI for the moveoff component"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:31
msgid "B<moveoff_gui [--help | -- -h | -?]>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:34
msgid "B<moveoff_gui [options>]"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:41
msgid ""
"Moveoff_gui is a sample graphical user interface (GUI) for controlling a HAL "
"moveoff component to implement HAL-only offsets.  See the manpage (man "
"moveoff) for B<IMPORTANT limitations and warnings>."
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:46
#, no-wrap
msgid ""
"Supported configurations must use a known kinematics module with\n"
"B<KINEMATICS_TYPE = KINEMATICS_IDENTITY>.  The modules currently\n"
"supported are:\n"
"   B<trivkins>\n"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:49
#, no-wrap
msgid "B<--help | -? | -- -h>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:52
msgid "Show options and exit"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:53
#, no-wrap
msgid "B<-mode> B<onpause> | always"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:57
msgid "onpause: popup GU to control offsets when program paused"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:59
msgid "always: show GUI to control offsets always"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:61
msgid "Default: B<onpause>"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:62
#, no-wrap
msgid "B<-axes> I<axis-names>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:66
msgid "Letters from set of {x y z a b c u v w}"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:68
msgid "Examples: -axes x, -axes xyz, -axes xz (no spaces)"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:70
msgid "Default: B<xyz>"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:71
#, no-wrap
msgid "B<-inc> I<incrementvalue>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:75
msgid "Specify one increment value per -inc (up to 4)"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:77
msgid "Defaults: B< 0.001 0.01 0.10 1.0>"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:78
#, no-wrap
msgid "B<-size> I<integer>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:82
msgid "Overall gui size is based on font size, typically 8 - 20"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:84
msgid "Default: B<14>"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:85
#, no-wrap
msgid "B<-loc> center | +x+y"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:89
msgid "Initial location on screen"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:91
msgid "Examples: -loc center, -loc +20+100"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:93
msgid "Default: B<center>"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:94
#, no-wrap
msgid "B<-autoresume>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:98
msgid "Resume program when move-enable deasserted"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:100 man/man1/moveoff_gui.1:116
#: man/man1/moveoff_gui.1:123 man/man1/moveoff_gui.1:130
#: man/man1/moveoff_gui.1:137 man/man1/moveoff_gui.1:144
msgid "Default: notused"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:101
#, no-wrap
msgid "B<-delay> I<delay secs>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:106
msgid ""
"Delay for autoresume (allow time to restore spindle speed etc)  Default: B<5>"
msgstr ""

#. type: SH
#: man/man1/moveoff_gui.1:107
#, no-wrap
msgid "OTHER OPTIONS"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:109
msgid "These options are available for special cases:"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:110
#, no-wrap
msgid "B<-noentry>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:114
msgid "Disables creation of entry widgets"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:117
#, no-wrap
msgid "B<-no_resume_inhibit>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:121
msgid "Disable use of resume-inhibit to controlling gui"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:124
#, no-wrap
msgid "B<-no_pause_requirement>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:128
msgid "Disable check for halui.program.is-paused"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:131
#, no-wrap
msgid "B<-no_cancel_autoresume>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:135
msgid "Useful for retracting offsets with simple external controls"
msgstr ""

#. type: TP
#: man/man1/moveoff_gui.1:138
#, no-wrap
msgid "B<-no_display>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:142
msgid "Use when both external controls and external displays are in use"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:147
msgid "LinuxCNC must be running."
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:150
#, no-wrap
msgid ""
"Halui must be loaded, typical INI file setting:\n"
"    B<[HAL]HALUI = halui>.\n"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:152
msgid "The moveoff component must be loaded with the name 'mv' as:"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:154
#, no-wrap
msgid "    B<loadrt moveoff names=mv personality=number_of_axes>\n"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:160
msgid ""
"If the pin mv.motion-enable is B<not> connected when moveoff_gui is started, "
"B<controls will be provided> to enable offsets and set offset values.  If "
"the pin B<is> connected, B<only a display> of offsets is shown and control "
"must be made by B<external> HAL connections."
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:165
msgid ""
"If a pin named *.resume-inhibit exists and is not connected, it will be set "
"while offsets are applied.  This pin may be provided by the controlling "
"LinuxCNC GUI in use.  Use of the pin may be disabled with the option -"
"no_resume_inhibit."
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:173
msgid ""
"The -autoresume option uses halui.program.resume to automatically resume "
"program execution when the move-enable pin is deactivated and all offsets "
"are removed.  The resume pin is not activated until an additional interval (-"
"delay delay_secs) elapses.  This delay interval may be useful for restarting "
"related equipment (a spindle motor for example)  While timing the delay, a "
"popup is offered to cancel the automatic program resumption."
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:181
msgid ""
"The INI file in the configuration directory must provide HALFILEs to loadrt "
"the moveoff component, connect its pins, and addf its read and write "
"functions in the proper order.  These steps can be done at runtime using an "
"existing configuration INI file and specifying a system library HALFILE "
"B<hookup_moveoff.tcl> as illustrated below:"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:183
msgid "B<[HAL]>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:185
msgid "HALUI = halui"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:187
msgid "HALFILE = user_halfile_1"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:189
msgid "etc ..."
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:191
msgid "HALFILE = user_halfile_n"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:193
msgid "B<HALFILE = LIB:hookup_moveoff.tcl>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:196
msgid ""
"The B<hookup_moveoff.tcl> HAL file will use INI file settings for the "
"moveoff component control pins:"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:198
msgid "B<[OFFSET]>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:200
msgid "EPSILON ="
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:202
msgid "WAYPOINT_SAMPLE_SECS ="
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:204
msgid "WAYPOINT_THRESHOLD ="
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:206
msgid "BACKTRACK_ENABLE ="
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:209
msgid ""
"The B<hookup_moveoff.tcl> will use INI file settings for the moveoff per-"
"axis limits:"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:211
msgid "B<[AXIS_m]>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:213
msgid "OFFSET_MAX_VELOCITY ="
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:215
msgid "OFFSET_MAX_ACCELERATION ="
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:217
msgid "OFFSET_MAX_LIMIT ="
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:219
msgid "OFFSET_MIN_LIMIT ="
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:222
msgid ""
"The moveoff_gui program should be specified in the APPLICATIONS stanza of "
"the INI file, for example:"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:224
msgid "B<[APPLICATIONS]>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:226
msgid "DELAY = delay_in_secs_to_allow_hal_connections"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:228
msgid "B<APP = moveoff_gui -option1 -option2 ...>"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:233
msgid ""
"Simulation configurations that demonstrate the moveoff_gui and the moveoff "
"component are located in:"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:235
#, no-wrap
msgid "   configs/sim/axis/moveoff     (axis-ui)\n"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:237
#, no-wrap
msgid "   configs/sim/touchy/ngcgui    (touchy-ui)\n"
msgstr ""

#. type: Plain text
#: man/man1/moveoff_gui.1:238
msgid "See also B<moveoff>(9) for details on the component."
msgstr ""

#. type: Plain text
#: man/man1/ngcgui.1:28
msgid ""
"ngcgui - a framework for conversational G-code generation on the controller"
msgstr ""

#. type: Plain text
#: man/man1/ngcgui.1:30
msgid "B<ngcgui>"
msgstr ""

#. type: Plain text
#: man/man1/ngcgui.1:35
msgid "B<ngcgui> details: http://linuxcnc.org/docs/html/gui/ngcgui.html"
msgstr ""

#. type: TH
#: man/man1/panelui.1:25
#, no-wrap
msgid "PANELUI"
msgstr ""

#. type: Plain text
#: man/man1/panelui.1:28
msgid "panelui - interface buttons to LinuxCNC or HAL"
msgstr ""

#. type: Plain text
#: man/man1/panelui.1:30
msgid "B<panelui>"
msgstr ""

#. type: Plain text
#: man/man1/panelui.1:38
msgid ""
"B<panelui> is a userspace component to interface buttons to LinuxCNC or "
"HAL.  It decodes MESA 7I73 style key-scan codes and calls the appropriate "
"routine.  It gets input from a realtime component - sampler.  Sampler gets "
"it's input from either the MESA 7i73 or sim_matrix_kb component.  Panelui is "
"configurable using an INI style text file to define button types, HAL pin "
"types, and/or commands."
msgstr ""

#. type: Plain text
#: man/man1/panelui.1:41
msgid ""
"Full documentation can be found in the HTML or PDF docs: http://linuxcnc.org/"
"docs/html/gui/panelui.html"
msgstr ""

#. type: TH
#: man/man1/pi500_vfd.1:9
#, no-wrap
msgid "PI500_VFD"
msgstr ""

#. type: TH
#: man/man1/pi500_vfd.1:9 man/man9/carousel.9:9 man/man9/gantry.9:9
#, no-wrap
msgid "2022-10-21"
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:13
msgid "pi500_vfd - Powtran PI500 Modbus driver"
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:15
msgid "B<pi500_vfd>"
msgstr ""

#. type: TP
#: man/man1/pi500_vfd.1:16
#, no-wrap
msgid "B<pi500-vfd.>I<N>B<.commanded-frequency> float in "
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:19 man/man1/wj200_vfd.1:19
msgid "Frequency of vfd"
msgstr ""

#. type: TP
#: man/man1/pi500_vfd.1:19
#, no-wrap
msgid "B<pi500-vfd.>I<N>B<.run> bit in "
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:22 man/man1/wj200_vfd.1:25
msgid "run the vfd"
msgstr ""

#. type: TP
#: man/man1/pi500_vfd.1:22
#, no-wrap
msgid "B<pi500-vfd.>I<N>B<.enable> bit in "
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:25 man/man1/wj200_vfd.1:28
msgid "1 to enable the vfd. 0 will remote trip the vfd, thereby disabling it."
msgstr ""

#. type: TP
#: man/man1/pi500_vfd.1:25
#, no-wrap
msgid "B<pi500-vfd.>I<N>B<.is-running> bit out "
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:28 man/man1/wj200_vfd.1:31
msgid "1 when running"
msgstr ""

#. type: TP
#: man/man1/pi500_vfd.1:28
#, no-wrap
msgid "B<pi500-vfd.>I<N>B<.is-at-speed> bit out "
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:31 man/man1/wj200_vfd.1:34
msgid "1 when running at assigned frequency"
msgstr ""

#. type: TP
#: man/man1/pi500_vfd.1:31
#, no-wrap
msgid "B<pi500-vfd.>I<N>B<.is-ready> bit out "
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:34 man/man1/wj200_vfd.1:37
msgid "1 when vfd is ready to run"
msgstr ""

#. type: TP
#: man/man1/pi500_vfd.1:34
#, no-wrap
msgid "B<pi500-vfd.>I<N>B<.is-alarm> bit out "
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:37 man/man1/wj200_vfd.1:40
msgid "1 when vfd alarm is set"
msgstr ""

#. type: TP
#: man/man1/pi500_vfd.1:37
#, no-wrap
msgid "B<pi500-vfd.>I<N>B<.motor-current> float out "
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:40 man/man1/wj200_vfd.1:43
msgid "Output current in amps"
msgstr ""

#. type: TP
#: man/man1/pi500_vfd.1:40
#, no-wrap
msgid "B<pi500-vfd.>I<N>B<.heatsink-temp> float out "
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:43 man/man1/wj200_vfd.1:46
msgid "Temperature of drive heatsink"
msgstr ""

#. type: TP
#: man/man1/pi500_vfd.1:43
#, no-wrap
msgid "B<pi500-vfd.>I<N>B<.watchdog-out> bit out "
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:46 man/man1/wj200_vfd.1:49
msgid ""
"Alternates between 1 and 0 after every update cycle. Feed into a watchdog "
"component to ensure vfd driver is communicating with the vfd properly."
msgstr ""

#. type: TP
#: man/man1/pi500_vfd.1:47
#, no-wrap
msgid "B<pi500-vfd.>I<N>B<.mbslaveaddr> u32 rw "
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:50 man/man1/wj200_vfd.1:53
msgid "Modbus slave address"
msgstr ""

#. type: Plain text
#: man/man1/pi500_vfd.1:52 man/man1/wj200_vfd.1:55 man/man9/plasmac.9:578
#: man/man9/thc.9:134 man/man9/thcud.9:131
msgid "GPLv2 or greater"
msgstr ""

#. type: TH
#: man/man1/pmx485.1:25
#, no-wrap
msgid "pmx485"
msgstr ""

#. type: TH
#: man/man1/pmx485.1:25
#, no-wrap
msgid "Feb 1 2020"
msgstr ""

#. type: TH
#: man/man1/pmx485.1:25
#, no-wrap
msgid "Powermax Modbus Communications"
msgstr ""

#. type: Plain text
#: man/man1/pmx485.1:28
msgid "B<pmx485> - Modbus communications with a Powermax Plasma Cutter."
msgstr ""

#. type: Plain text
#: man/man1/pmx485.1:30
msgid "B<loadusr -Wn pmx485 pmx485 /dev/ttyUSB0>"
msgstr ""

#. type: Plain text
#: man/man1/pmx485.1:34
msgid ""
"pmx485 is a userspace HAL component to communicate with a Hypertherm "
"Powermax plasma cutter using the Modbus ASCII protocol over RS485."
msgstr ""

#. type: Plain text
#: man/man1/pmx485.1:37
msgid ""
"See the Drivers section of the LinuxCNC Documentation for more information "
"on pmx485."
msgstr ""

#. type: Plain text
#: man/man1/pmx485.1:39 man/man1/pmx485-test.1:46
#: man/man1/qtplasmac-cfg2prefs.1:41 man/man1/qtplasmac-materials.1:42
#: man/man1/qtplasmac-plasmac2qt.1:40 man/man1/qtplasmac-setup.1:41
msgid "Phillip Carter"
msgstr ""

#. type: TH
#: man/man1/pmx485-test.1:25
#, no-wrap
msgid "pmx485-test"
msgstr ""

#. type: TH
#: man/man1/pmx485-test.1:25 man/man1/qtplasmac-cfg2prefs.1:25
#: man/man1/qtplasmac-materials.1:25 man/man1/qtplasmac-plasmac2qt.1:25
#: man/man1/qtplasmac-setup.1:25
#, no-wrap
msgid "Oct 28 2021"
msgstr ""

#. type: TH
#: man/man1/pmx485-test.1:25
#, no-wrap
msgid "Powermax Modbus Communications Testing"
msgstr ""

#. type: Plain text
#: man/man1/pmx485-test.1:28
msgid ""
"B<pmx485-test> - Modbus communications testing with a Powermax Plasma Cutter"
msgstr ""

#. type: Plain text
#: man/man1/pmx485-test.1:30
msgid "B<pmx485-test>"
msgstr ""

#. type: Plain text
#: man/man1/pmx485-test.1:34
msgid ""
"pmx485 is a python script for testing communications with a Hypertherm "
"Powermax plasma cutter using the Modbus ASCII protocol over RS485."
msgstr ""

#. type: Plain text
#: man/man1/pmx485-test.1:37
msgid "Select the correct port from the list of available ports."
msgstr ""

#. type: Plain text
#: man/man1/pmx485-test.1:39
msgid "Check RS485 to establish communications."
msgstr ""

#. type: Plain text
#: man/man1/pmx485-test.1:42
#, no-wrap
msgid ""
"Changing MODE, CURRENT, or PRESSURE will change the corresponding value on the\n"
" Powermax and the new value will be reported back to the test panel.\n"
msgstr ""

#. type: Plain text
#: man/man1/pmx485-test.1:44
msgid "Check PANEL to end communication."
msgstr ""

#. type: TH
#: man/man1/pncconf.1:25
#, no-wrap
msgid "PNCCONF"
msgstr ""

#. type: Plain text
#: man/man1/pncconf.1:28
msgid "pncconf - configuration wizard for Mesa cards"
msgstr ""

#. type: Plain text
#: man/man1/pncconf.1:30
msgid "B<pncconf>"
msgstr ""

#. type: Plain text
#: man/man1/pncconf.1:33
msgid "B<pncconf> is used to configure systems that use Mesa cards."
msgstr ""

#. type: TH
#: man/man1/puma560gui.1:25
#, no-wrap
msgid "puma560gui"
msgstr ""

#. type: Plain text
#: man/man1/puma560gui.1:32
msgid ""
"B<puma560gui> is one of the sample B<Vismach> GUIs for LinuxCNC, simulating "
"a Puma 560 robot arm."
msgstr ""

#. type: TH
#: man/man1/pumagui.1:25
#, no-wrap
msgid "pumagui"
msgstr ""

#. type: Plain text
#: man/man1/pumagui.1:28
msgid "pumagui - Vismach Virtual Machine GUI"
msgstr ""

#. type: Plain text
#: man/man1/pumagui.1:32
msgid ""
"B<pumagui> is one of the sample B<Vismach> GUIs for LinuxCNC, simulating a "
"generic Puma style robot arm."
msgstr ""

#. type: TH
#: man/man1/pyngcgui.1:25
#, no-wrap
msgid "PYNGCGUI"
msgstr ""

#. type: Plain text
#: man/man1/pyngcgui.1:28
msgid "PyNGCGUI - Python implementation of NGCGUI"
msgstr ""

#. type: Plain text
#: man/man1/pyngcgui.1:30
msgid "B<pyngcgui>"
msgstr ""

#. type: Plain text
#: man/man1/pyngcgui.1:33
msgid "B<pyngcgui> is an alternative implenentation of NGCGUI:"
msgstr ""

#. type: Plain text
#: man/man1/pyngcgui.1:38
msgid "B<ngcgui> B<LinuxCNC(1)>"
msgstr ""

#. type: TH
#: man/man1/pyui.1:25
#, no-wrap
msgid "PYUI"
msgstr ""

#. type: Plain text
#: man/man1/pyui.1:28
msgid "pyui - utility for panelui"
msgstr ""

#. type: Plain text
#: man/man1/pyui.1:30
msgid "B<loadusr pyui>"
msgstr ""

#. type: Plain text
#: man/man1/pyui.1:33
msgid "B<pyui> Validates panelui.ini files"
msgstr ""

#. type: TH
#: man/man1/pyvcp.1:22
#, no-wrap
msgid "PYVCP"
msgstr ""

#. type: Plain text
#: man/man1/pyvcp.1:25
msgid "pyvcp - Virtual Control Panel for LinuxCNC"
msgstr ""

#. type: Plain text
#: man/man1/pyvcp.1:27
msgid "B<pyvcp> [-g I<WxH+X+Y>] [-c I<component-name>] I<myfile.xml>"
msgstr ""

#. type: Plain text
#: man/man1/pyvcp.1:37
msgid ""
"Use I<component-name> as the HAL component name.  If the component name is "
"not specified, the basename of the xml file is used."
msgstr ""

#. type: Plain text
#: man/man1/pyvcp.1:39
msgid ""
"I<Python Virtual Control Panel> in the LinuxCNC documentation for a "
"description of the xml syntax, along with examples"
msgstr ""

#. type: TH
#: man/man1/pyvcp_demo.1:25
#, no-wrap
msgid "PYVCP_DEMO"
msgstr ""

#. type: Plain text
#: man/man1/pyvcp_demo.1:28
msgid "pyvcp_demo - Python Virtual Control Panel demonstration component"
msgstr ""

#. type: Plain text
#: man/man1/pyvcp_demo.1:30
msgid "B<pyvcp_demo>"
msgstr ""

#. type: Plain text
#: man/man1/pyvcp_demo.1:33
msgid "B<pyvcp_demo> is mainly used by sample configurations."
msgstr ""

#. type: Plain text
#: man/man1/pyvcp_demo.1:37
#, no-wrap
msgid "      pyvcp_demo filename1.xml filename2.hal [compname]\n"
msgstr ""

#. type: Plain text
#: man/man1/pyvcp_demo.1:39
#, no-wrap
msgid " If not provided, use compname == pyvcp\n"
msgstr ""

#. type: TH
#: man/man1/qtplasmac-cfg2prefs.1:25
#, no-wrap
msgid "qtplasmac-cfg2prefs"
msgstr ""

#. type: TH
#: man/man1/qtplasmac-cfg2prefs.1:25
#, no-wrap
msgid "QtPlasmaC Parameters Assistant"
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-cfg2prefs.1:28
msgid "B<qtplasmac-cfg2prefs> - Convert plasma parameters."
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-cfg2prefs.1:30
msgid "B<qtplasmac-cfg2prefs>"
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-cfg2prefs.1:34
msgid ""
"qtplasmac-cfg2prefs is a Python script for converting parameters from a "
"PlasmaC configuration to a QtPlasmaC configuration."
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-cfg2prefs.1:37 man/man1/qtplasmac-materials.1:38
#: man/man1/qtplasmac-plasmac2qt.1:36 man/man1/qtplasmac-setup.1:37
msgid ""
"See the QtPlasmaC section of the LinuxCNC Documentation for more information."
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-cfg2prefs.1:39 man/man1/qtplasmac-plasmac2qt.1:38
msgid ""
"http://linuxcnc.org/docs/devel/html/plasma/qtplasmac.html#qt_modify-config"
msgstr ""

#. type: TH
#: man/man1/qtplasmac-materials.1:25
#, no-wrap
msgid "qtplasmac-materials"
msgstr ""

#. type: TH
#: man/man1/qtplasmac-materials.1:25
#, no-wrap
msgid "QtPlasmaC Materials Assistant"
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-materials.1:28
msgid "B<qtplasmac-materials> - Create a plasma materials file."
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-materials.1:30
msgid "B<qtplasmac-materials>"
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-materials.1:33
msgid "qtplasmac-materials is a Python script for creating a materials file."
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-materials.1:35
msgid ""
"The file can be created by text entry or by importing text from a CAM tool "
"file."
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-materials.1:40
msgid ""
"http://linuxcnc.org/docs/devel/html/plasma/qtplasmac.html#_material_converter"
msgstr ""

#. type: TH
#: man/man1/qtplasmac-plasmac2qt.1:25
#, no-wrap
msgid "qtplasmac-plasmac2qt"
msgstr ""

#. type: TH
#: man/man1/qtplasmac-plasmac2qt.1:25
#, no-wrap
msgid "QtPlasmaC Migration Assistant"
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-plasmac2qt.1:28
msgid "B<qtplasmac-plasmac2qt> - Migrate a PlasmaC configuration."
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-plasmac2qt.1:30
msgid "B<qtplasmac-plasmac2qt>"
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-plasmac2qt.1:33
msgid ""
"qtplasmac-plasmac2qt is a Python script for migrating from PlasmaC to "
"QtPlasmac."
msgstr ""

#. type: TH
#: man/man1/qtplasmac-setup.1:25
#, no-wrap
msgid "qtplasmac-setup"
msgstr ""

#. type: TH
#: man/man1/qtplasmac-setup.1:25
#, no-wrap
msgid "QtPlasmaC Config Switcher"
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-setup.1:28
msgid "B<qtplasmac-setup> - Switch a QtPlasmaC installation type."
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-setup.1:30
msgid "B<qtplasmac-setup>"
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-setup.1:34
msgid ""
"qtplasmac-setup is a Python script for switching a QtPlasmac configuration "
"from package to run in place and vice-versa."
msgstr ""

#. type: Plain text
#: man/man1/qtplasmac-setup.1:39
msgid ""
"http://linuxcnc.org/docs/devel/html/plasma/qtplasmac."
"html#_change_type_of_linuxcnc_installation"
msgstr ""

#. type: TH
#: man/man1/qtvcp.1:25
#, no-wrap
msgid "QTVCP"
msgstr ""

#. type: Plain text
#: man/man1/qtvcp.1:28
msgid "qtvcp - Qt-based virtual control panels"
msgstr ""

#. type: Plain text
#: man/man1/qtvcp.1:30
msgid "B<qtvcp>"
msgstr ""

#. type: Plain text
#: man/man1/qtvcp.1:33
msgid "B<qtvcp> is a system for creating user interfaces for LinuxCNC."
msgstr ""

#. type: Plain text
#: man/man1/qtvcp.1:35
msgid "Full documentation at http://linuxcnc.org/docs/html/gui/qtvcp.html"
msgstr ""

#. type: TH
#: man/man1/rotarydelta.1:25
#, no-wrap
msgid "rotarydelta"
msgstr ""

#. type: Plain text
#: man/man1/rotarydelta.1:28
msgid "rotarydelta - Vismach Virtual Machine GUI"
msgstr ""

#. type: Plain text
#: man/man1/rotarydelta.1:32
msgid ""
"B<rotarydelta> is one of the sample B<Vismach> GUIs for LinuxCNC, simulating "
"a delta robot with rotary actuators"
msgstr ""

#. type: TH
#: man/man1/rs274.1:25
#, no-wrap
msgid "RS274"
msgstr ""

#. type: Plain text
#: man/man1/rs274.1:28
msgid "rs274 - standalone G-code interpreter"
msgstr ""

#. type: Plain text
#: man/man1/rs274.1:31
#, no-wrap
msgid ""
"B<rs274 >[-p interp.so] [-t tool.tbl] [-v var-file.var] [-n 0|1|2]\n"
"          [-b] [-s] [-g] [input file [output file]]\n"
msgstr ""

#. type: Plain text
#: man/man1/rs274.1:34
msgid "B<rs274> Standalone G-code interpreter interface"
msgstr ""

#. type: Plain text
#: man/man1/rs274.1:67
#, no-wrap
msgid ""
"test.ngc\n"
" ----\n"
" #E<lt>testE<gt> = 123.352\n"
" o101 while [[#E<lt>testE<gt> MOD 60 ] NE 0]\n"
" (debug,#E<lt>testE<gt>)\n"
"    #E<lt>testE<gt> = [#E<lt>testE<gt> + 1]\n"
" 101 endwhile\n"
" M2\n"
" ----\n"
msgstr ""

#. type: Plain text
#: man/man1/rs274.1:74
#, no-wrap
msgid ""
"test.tbl\n"
" ----\n"
" T1 P1 Z0.511 D0.125 ;1/8 end mill\n"
" T2 P2 Z0.1 D0.0625 ;1/16 end mill\n"
" T3 P3 Z1.273 D0.201 ;#7 tap drill\n"
" ----\n"
msgstr ""

#. type: Plain text
#: man/man1/rs274.1:79
#, no-wrap
msgid ""
"command\n"
" ----\n"
" rs274 -g test.ngc -t test.tbl\n"
" ----\n"
msgstr ""

#. type: TH
#: man/man1/rtapi_app.1:25
#, no-wrap
msgid "RTAPI_APP"
msgstr ""

#. type: Plain text
#: man/man1/rtapi_app.1:28
msgid "rtapi_app - creates a simulated real time environment"
msgstr ""

#. type: Plain text
#: man/man1/rtapi_app.1:30
msgid "B<rtapi_app>"
msgstr ""

#. type: Plain text
#: man/man1/rtapi_app.1:33
msgid "B<rtapi_app> Creates a simulated real time environment."
msgstr ""

#. type: Plain text
#: man/man1/rtapi_app.1:35
msgid ""
"Used for loading real time modules on systems without real time (for "
"simulation)."
msgstr ""

#. type: TH
#: man/man1/scaragui.1:25
#, no-wrap
msgid "scaragui"
msgstr ""

#. type: Plain text
#: man/man1/scaragui.1:28
msgid "scaragui - Vismach Virtual Machine GUI"
msgstr ""

#. type: Plain text
#: man/man1/scaragui.1:32
msgid ""
"B<scaragui> is one of the sample B<Vismach> GUIs for LinuxCNC, simulating a "
"SCARA style robot arm."
msgstr ""

#. type: TH
#: man/man1/schedrmt.1:25
#, no-wrap
msgid "SCHEDRMT"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:28
msgid "schedrmt - telnet based scheduler for LinuxCNC"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:30
msgid "B<schedrmt>"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:37
#, no-wrap
msgid ""
"  schedrmt {-- --port E<lt>port numberE<gt> --name E<lt>server nameE<gt> --connectpw E<lt>passwordE<gt>\n"
"             --enablepw E<lt>passwordE<gt> --sessions E<lt>max sessionsE<gt> --path E<lt>pathE<gt>\n"
"             -ini E<lt>INI fileE<gt>}\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:48
#, no-wrap
msgid ""
"  With -- --port Waits for socket connections (Telnet) on specified socket, without port\n"
"            uses default port 5007.\n"
"  With -- --name E<lt>server nameE<gt> Sets the server name to specified name for Hello.\n"
"  With -- --connectpw E<lt>passwordE<gt> Sets the connection password to 'password'. Default EMC\n"
"  With -- --enablepw E<lt>passwordE<gt> Sets the enable password to 'password'. Default EMCTOO\n"
"  With -- --sessions E<lt>max sessionsE<gt> Sets the maximum number of simultaneous connextions\n"
"            to max sessions. Default is no limit (-1).\n"
"  With -- --path Sets the base path to program (G-Code) files, default is \"../../nc_files/\".\n"
"            Make sure to include the final slash (/).\n"
"  With -- -ini I<E<lt>INI fileE<gt>>, uses specified I<INI file> instead of default emc.ini. \n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:53
#, no-wrap
msgid ""
"  There are six commands supported, Where the commands set and get contain\n"
"  LinuxCNC-specific sub-commands based on the commands supported by emcsh, but where the \"emc_\"\n"
"  prefix is omitted. Commands and most parameters are not case-sensitive.\n"
"  The exceptions are passwords, file paths and text strings.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:73
#, no-wrap
msgid ""
"  The get command includes one of the emc sub-commands, described below and\n"
"  zero or more additional parameters. \n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:78
#, no-wrap
msgid ""
"  The set command inclides one of the emc sub-commands, described below and\n"
"  one or more additional parameters.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:89
#, no-wrap
msgid ""
"  The shutdown command tells EMC to shutdown before quitting the connection. This\n"
"  command may only be issued if the Hello has been successfully negotiated and the\n"
"  connection has control of the CNC (see enable sub-command below). This command\n"
"  has no parameters.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:100
#, no-wrap
msgid "  EMC sub-commands:\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:134
#, no-wrap
msgid ""
"  INIFILE\n"
"  Returns the path and file name of the current configuration INI file.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:137
#, no-wrap
msgid ""
"  plat\n"
"  Returns the platform for which this was compiled, e.g., linux_2_0_36\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:140
#, no-wrap
msgid ""
"  ini E<lt>varE<gt> E<lt>sectionE<gt>\n"
"  Returns the string value of E<lt>varE<gt> in section E<lt>sectionE<gt>, in EMC_INIFILE\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:150
#, no-wrap
msgid ""
"  debug {E<lt>new valueE<gt>}\n"
"  With get, returns the integer value of EMC_DEBUG, in the EMC. Note that\n"
"  it may not be true that the local EMC_DEBUG variable here (in emcsh and\n"
"  the GUIs that use it) is the same as the EMC_DEBUG value in the EMC. This\n"
"  can happen if the EMC is started from one INI file, and the GUI is started\n"
"  with another that has a different value for DEBUG.\n"
"  With set, sends a command to the EMC to set the new debug level,\n"
"  and sets the EMC_DEBUG global here to the same value. This will make\n"
"  the two values the same, since they really ought to be the same.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:155
#, no-wrap
msgid ""
"  QMode E<lt>modeE<gt>\n"
"  stop | run | pause | resume (Set only) | error (Get only)\n"
"  With no arg, returns the program queue status as \"stop\", \"run\", \"pause\" or \"error\". Otherwise,\n"
"  sends a command to set the current mode to \"stop\", \"run\" or \"pause\".\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:162
#, no-wrap
msgid ""
"  QStatus E<lt>Queue SizeE<gt> E<lt>First Tag IdE<gt> E<lt>Last Tag IdE<gt> E<lt>Queue CRCE<gt>\n"
"  Get only, returns then number of programs in queue (Queue Size), the Tag id of the first \n"
"  program in the queue, the Tag id of the last program in the queue, and the CRC of all\n"
"  of the Tag Ids in the queue. The actual calculation of the CRC is not important, the\n"
"  purpose is to be able to compare the current CRC with the previous CRC. If they\n"
"  differ, then there has been a change to the size or order of the programs in queue.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:166
#, no-wrap
msgid ""
"  AutoTagId E<lt>Start IdE<gt>\n"
"  With get, returns the next autoincremented unique tag id to associate with a queue record.\n"
"  With set, resets auto tag generation to begin at the specified value.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:173
#, no-wrap
msgid ""
"  PgmAdd E<lt>priorityE<gt> E<lt>tag idE<gt> E<lt>xE<gt> E<lt>yE<gt> E<lt>zE<gt> E<lt>zoneE<gt> E<lt>file nameE<gt> E<lt>feed overrideE<gt> E<lt>spindle overrideE<gt> E<lt>toolE<gt>\n"
"  With set, adds a program to the queue with priority of the program, a unique tag identifying the \n"
"  program, the x, y and z offsets or zone for the origin of the program, the path + file name, the\n"
"  feed and spindle overrides to apply, and the default tool to use. If tag id is zero, the tag id\n"
"  will be generated automatically. If zone is zero, then the x, y, and z offsets will be used, \n"
"  otherwise zones 1 to 9 correspond to G54 to G59.3 respectively.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:179
#, no-wrap
msgid ""
"  PgmById E<lt>tag idE<gt>\n"
"  [priority] [tag id] [x] [y] [z] [zone] [file name] [feed override] [spindle override] [tool]\n"
"  With get, returns the queue entry matching the specified tag id, including the priority,\n"
"  tag id, x, y, and z coordinates, the zone, file name, feed and spindle overrides and the default\n"
"  tool.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:185
#, no-wrap
msgid ""
"  PgmByIndex E<lt>indexE<gt>\n"
"  [priority] [tag id] [x] [y] [z] [zone] [file name] [feed override] [spindle override] [tool]\n"
"  With get, returns the queue entry matching the specified index into the queue, including the priority,\n"
"  tag id, x, y, and z coordinates, the zone, file name, feed and spindle overrides and the default\n"
"  tool.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:189
#, no-wrap
msgid ""
"  PgmAll\n"
"  With get, performs effectively a PgmByIndex for every entry in the queue. Each result will be\n"
"  returned in the form: \"PGMBYINDEX ...\" with cr lf at the end of each record.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:193
#, no-wrap
msgid ""
"  PriorityById E<lt>tag idE<gt> E<lt>priorityE<gt>\n"
"  With get, returns the priority of the queue entry matching the specified tag. With set, changes the \n"
"  priority of the queue entry to the specified priority.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:197
#, no-wrap
msgid ""
"  PriorityByIndex E<lt>tag idE<gt> E<lt>priorityE<gt>\n"
"  With get, returns the priority of the queue entry matching the specified index into the queue. With \n"
"  set, changes the priority of the queue entry to the specified priority.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:200
#, no-wrap
msgid ""
"  DeleteById E<lt>tag idE<gt>\n"
"  With set, deletes the queue entry matching the specified tag id.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:203
#, no-wrap
msgid ""
"  DeleteByIndex E<lt>indexE<gt>\n"
"  With set, deletes the queue entry matching the specified index into the queue.\n"
msgstr ""

#. type: Plain text
#: man/man1/schedrmt.1:207
#, no-wrap
msgid ""
"  PollRate E<lt>rateE<gt>\n"
"  With set, sets the rate at which the scheduler polls for information. The default is 1.0 or one\n"
"  second. With get, returns the current poll rate.\n"
msgstr ""

#. type: TH
#: man/man1/scorbot-er-3.1:25
#, no-wrap
msgid "scorbot-er-3"
msgstr ""

#. type: Plain text
#: man/man1/scorbot-er-3.1:28
msgid ""
"scorbot-er-3 - to link the Intellitek Scorbot educational robot to LinuxCNC"
msgstr ""

#. type: Plain text
#: man/man1/scorbot-er-3.1:32
msgid ""
"B<scorbot-er-3> is a userspace, non-realtime component that interfaces the "
"control box of a Scorbot ER-3 robot arm to the LinuxCNC HAL."
msgstr ""

#. type: Plain text
#: man/man1/scorbot-er-3.1:41
#, no-wrap
msgid ""
" Joint 0: rotation around the base\n"
" Joint 1: shoulder\n"
" Joint 2: elbow\n"
" Joint 3: wrist (+ is wrist up & rotate hand)\n"
" Joint 4: wrist (+ is wrist down & rotate hand)\n"
" Joint 5: unused\n"
" Joint 6: unused\n"
" Joint 7: hand open/close (+ is close)\n"
msgstr ""

#. type: TH
#: man/man1/shuttle.1:1
#, no-wrap
msgid "SHUTTLE"
msgstr ""

#. type: TH
#: man/man1/shuttle.1:1
#, no-wrap
msgid "2011-01-13"
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:4
msgid ""
"shuttle - control HAL pins with the ShuttleXpress, ShuttlePRO, and "
"ShuttlePRO2 device made by Contour Design"
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:6
msgid "I<loadusr> B<shuttle> I<[DEVICE ...]>"
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:9
msgid ""
"shuttle is a non-realtime HAL component that interfaces Contour Design's "
"ShuttleXpress, ShuttlePRO, and ShuttlePRO2 devices with LinuxCNC's HAL."
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:15
msgid ""
"If the driver is started without command-line arguments, it will probe all /"
"dev/hidraw* device files for Shuttle devices, and use all devices found.  If "
"it is started with command-line arguments, it will only probe the devices "
"specified."
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:35
msgid ""
"The shuttle driver needs read permission to the Shuttle devices' /dev/"
"hidraw* device files.  This can be accomplished by adding a file B</etc/udev/"
"rules.d/99-shuttle.rules>, with the following contents:"
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:37
msgid ""
"SUBSYSTEM==\"hidraw\", ATTRS{idVendor}==\"0b33\", ATTRS{idProduct}=="
"\"0020\", MODE=\"0444\""
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:39
msgid ""
"SUBSYSTEM==\"hidraw\", ATTRS{idVendor}==\"05f3\", ATTRS{idProduct}=="
"\"0240\", MODE=\"0444\""
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:41
msgid ""
"SUBSYSTEM==\"hidraw\", ATTRS{idVendor}==\"0b33\", ATTRS{idProduct}=="
"\"0030\", MODE=\"0444\""
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:47
msgid ""
"The LinuxCNC Debian package installs an appropriate udev file automatically, "
"but if you are building LinuxCNC from source and are not using the Debian "
"packaging, you'll need to install this file by hand.  If you install the "
"file by hand you'll need to tell udev to reload its rules files by running "
"`udevadm control --reload-rules`."
msgstr ""

#. type: SH
#: man/man1/shuttle.1:48
#, no-wrap
msgid "A warning about the Jog Wheel"
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:54
msgid ""
"The Shuttle devices have an internal 8-bit counter for the current jog-wheel "
"position.  The shuttle driver can not know this value until the Shuttle "
"device sends its first event.  When the first event comes into the driver, "
"the driver uses the device's reported jog-wheel position to initialize "
"counts to 0."
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:62
msgid ""
"Any user interaction with the Shuttle device will generate an event, "
"informing the driver of the jog-wheel position.  So if you (for example)  "
"push one of the buttons at startup, the jog-wheel will work fine and notice "
"the first click."
msgstr ""

#. type: TP
#: man/man1/shuttle.1:69
#, no-wrap
msgid "(bit out) I<(prefix).button-(number)>"
msgstr ""

#. type: TP
#: man/man1/shuttle.1:71
#, no-wrap
msgid "(bit out) I<(prefix).button-(number)-not>"
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:78
#, no-wrap
msgid ""
"    The momentary buttons.  \"(number)\" identifies which button corresponds\n"
"    to the HAL pin.  The \"button-(number)\" pins are True when the button\n"
"    is pushed, the \"button-(number)-not\" pins are True when the button\n"
"    is not pushed.\n"
msgstr ""

#. type: TP
#: man/man1/shuttle.1:79
#, no-wrap
msgid "(s32 out) I<(prefix).counts>"
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:83
#, no-wrap
msgid "    Accumulated counts from the jog wheel (the inner wheel).\n"
msgstr ""

#. type: TP
#: man/man1/shuttle.1:84
#, no-wrap
msgid "(s32 out) I<(prefix).spring-wheel-s32>"
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:90
#, no-wrap
msgid ""
"    The current deflection of the spring-wheel (the outer wheel).\n"
"    It's 0 at rest, and ranges from -7 at the counter-clockwise\n"
"    extreme to +7 at the clockwise extreme.\n"
msgstr ""

#. type: TP
#: man/man1/shuttle.1:91
#, no-wrap
msgid "(float out) I<(prefix).spring-wheel-f>"
msgstr ""

#. type: Plain text
#: man/man1/shuttle.1:99
#, no-wrap
msgid ""
"    The current deflection of the spring-wheel (the outer wheel).\n"
"    It's 0.0 at rest, -1.0 at the counter-clockwise extreme, and +1.0 at\n"
"    the clockwise extreme.  (The Shuttle devices report the spring-wheel\n"
"    position as an integer from -7 to +7, so this pin reports only 15\n"
"    discrete values in its range.)\n"
msgstr ""

#. type: TH
#: man/man1/sim_pin.1:25
#, no-wrap
msgid "sim_pin"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:28
msgid "B<sim_pin> - GUI for displaying and setting one or more HAL inputs"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:31
msgid "B<sim_pin> I<[Options]> I<name1> [I<name2> [I<name3> ...]]"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:35
#, no-wrap
msgid ""
"I<Options>:\n"
"  B<--help> (shows help text)\n"
"  B<--title title_string>\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:39
#, no-wrap
msgid ""
"For bit items, the name may include a /mode= specifier:\n"
"    I<namei>B</mode=>[B<pulse> | B<toggle> | B<hold>]\n"
"    (default is toggle)\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:43
msgid ""
"HAL boolean items (bit) and numerical items (u32, s32, float) are supported."
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:45
msgid "If the named input is a numerical type, the GUI displays:"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:47
#, no-wrap
msgid "   B<Entry>  Entry widget for value or a valid Tcl expression.\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:49
#, no-wrap
msgid "   B<Set>    Pushbutton to set new value from Entry (or use E<lt>RETURNE<gt>)\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:51
#, no-wrap
msgid "   B<Reset>  Pushbutton to reset to the value present on initiation\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:54
msgid ""
"If the input is a B<bit> type, the GUI shows a single pushbutton that is "
"controlled by radio-button selectors:"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:56
#, no-wrap
msgid "   mode=B<pulse>   Pulse input to 1 for each pushbutton press\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:58
#, no-wrap
msgid "   mode=B<toggle>  Toggle input for each pushbutton press\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:60
#, no-wrap
msgid "   mode=B<hold>    Set input to 1 while pushbutton pressed\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:63
msgid ""
"If the bit item mode begins with an uppercase letter, the radio buttons for "
"selecting other modes are not shown"
msgstr ""

#. type: SH
#: man/man1/sim_pin.1:65 man/man9/debounce.9:14
#, no-wrap
msgid "NOTE"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:67
msgid "LinuxCNC or a standalone HAL application must be running"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:70
msgid ""
"A named item can specify a B<pin>, B<param>, or B<signal>.  The named item "
"must be writable:"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:72
#, no-wrap
msgid "  B<pin    IN or I/O> (and not connected to a signal with a writer)\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:74
#, no-wrap
msgid "  B<param  RW>\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:76
#, no-wrap
msgid "  B<signal connected to a writable pin>\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:80
msgid ""
"B<sim_pin> can be used interactively from a shell command line or started "
"automatically from a configuration INI file."
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:83
msgid "Example for INI file usage:"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:87
#, no-wrap
msgid ""
"   [APPLICATIONS]\n"
"   DELAY = 5\n"
"   APP = B<sim_pin> \\e\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:89
#, no-wrap
msgid "          halui.machine.off/mode=pulse \\e\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:91
#, no-wrap
msgid "          ini.traj_arc_blend_enable \\e\n"
msgstr ""

#. type: Plain text
#: man/man1/sim_pin.1:93
#, no-wrap
msgid "          motion-command-handler-tmax\n"
msgstr ""

#. type: TH
#: man/man1/simulate_probe.1:25
#, no-wrap
msgid "SIMULATE_PROBE"
msgstr ""

#. type: Plain text
#: man/man1/simulate_probe.1:28
msgid "simulate_probe - simulate a probe input"
msgstr ""

#. type: Plain text
#: man/man1/simulate_probe.1:30
msgid "B<simulate_probe>"
msgstr ""

#. type: Plain text
#: man/man1/simulate_probe.1:34
msgid ""
"B<simulate_probe> Creates an on-screen GUI button to simulate touch probe "
"input. Typically used in sim configs or debugging."
msgstr ""

#. type: TH
#: man/man1/stepconf.1:25
#, no-wrap
msgid "STEPCONF"
msgstr ""

#. type: Plain text
#: man/man1/stepconf.1:28
msgid "stepconf - A configuration wizard for parallel-port based machines."
msgstr ""

#. type: Plain text
#: man/man1/stepconf.1:30
msgid "B<stepconf>"
msgstr ""

#. type: Plain text
#: man/man1/stepconf.1:34
msgid ""
"B<stepconf> aids in the configuration of machines using the parallel port "
"interface."
msgstr ""

#. type: Plain text
#: man/man1/stepconf.1:37
msgid "Detailed docs: http://linuxcnc.org/docs/html/config/stepconf.html"
msgstr ""

#. type: TH
#: man/man1/teach-in.1:25
#, no-wrap
msgid "TEACH-IN"
msgstr ""

#. type: Plain text
#: man/man1/teach-in.1:28
msgid "teach-in - jog the machine to a position, and record the state"
msgstr ""

#. type: Plain text
#: man/man1/teach-in.1:30
msgid "B<teach-in [E<gt> outfile]>"
msgstr ""

#. type: Plain text
#: man/man1/teach-in.1:34
msgid ""
"B<teach-in> is a script to learn set positions for later use by a script."
msgstr ""

#. type: Plain text
#: man/man1/teach-in.1:40
msgid ""
"A dialog box is shown with options to choose the coordinate system.  each "
"press of the \"Learn\" button outputs a line of text to stdout or the file "
"chosen at load time.  line format: line-no X Y Z flood mist lube spindle"
msgstr ""

#. type: TH
#: man/man1/thermistor.1:9
#, no-wrap
msgid "THERMISTOR"
msgstr ""

#. type: TH
#: man/man1/thermistor.1:9 man/man1/wj200_vfd.1:9 man/man9/abs.9:9
#: man/man9/abs_s32.9:9 man/man9/and2.9:9 man/man9/axistest.9:9
#: man/man9/bin2gray.9:9 man/man9/biquad.9:9 man/man9/bitslice.9:9
#: man/man9/bitwise.9:9 man/man9/bldc.9:9 man/man9/blend.9:9
#: man/man9/charge_pump.9:9 man/man9/comp.9:9 man/man9/constant.9:9
#: man/man9/conv_bit_float.9:9 man/man9/conv_bit_s32.9:9
#: man/man9/conv_bit_u32.9:9 man/man9/conv_float_s32.9:9
#: man/man9/conv_float_u32.9:9 man/man9/conv_s32_bit.9:9
#: man/man9/conv_s32_float.9:9 man/man9/conv_s32_u32.9:9
#: man/man9/conv_u32_bit.9:9 man/man9/conv_u32_float.9:9
#: man/man9/conv_u32_s32.9:9 man/man9/corexy_by_hal.9:9 man/man9/dbounce.9:9
#: man/man9/ddt.9:9 man/man9/deadzone.9:9 man/man9/demux.9:9
#: man/man9/differential.9:9 man/man9/edge.9:9 man/man9/eoffset_per_angle.9:9
#: man/man9/estop_latch.9:9 man/man9/feedcomp.9:9 man/man9/filter_kalman.9:9
#: man/man9/flipflop.9:9 man/man9/gearchange.9:9 man/man9/gray2bin.9:9
#: man/man9/histobins.9:9 man/man9/hypot.9:9 man/man9/ilowpass.9:9
#: man/man9/integ.9:9 man/man9/invert.9:9 man/man9/joyhandle.9:9
#: man/man9/knob2float.9:9 man/man9/latencybins.9:9 man/man9/limit1.9:9
#: man/man9/limit2.9:9 man/man9/limit3.9:9 man/man9/lincurve.9:9
#: man/man9/logic.9:9 man/man9/lowpass.9:9 man/man9/lut5.9:9 man/man9/maj3.9:9
#: man/man9/match8.9:9 man/man9/max31855.9:9 man/man9/mesa_7i65.9:9
#: man/man9/mesa_pktgyro_test.9:9 man/man9/message.9:9 man/man9/millturn.9:9
#: man/man9/minmax.9:9 man/man9/moveoff.9:9 man/man9/mult2.9:9
#: man/man9/multiclick.9:9 man/man9/multiswitch.9:9 man/man9/mux16.9:9
#: man/man9/mux2.9:9 man/man9/mux4.9:9 man/man9/mux8.9:9 man/man9/near.9:9
#: man/man9/not.9:9 man/man9/offset.9:9 man/man9/ohmic.9:9 man/man9/oneshot.9:9
#: man/man9/or2.9:9 man/man9/orient.9:9 man/man9/sample_hold.9:9
#: man/man9/scale.9:9 man/man9/select8.9:9 man/man9/serport.9:9
#: man/man9/sim_axis_hardware.9:9 man/man9/sim_home_switch.9:9
#: man/man9/sim_matrix_kb.9:9 man/man9/sim_parport.9:9 man/man9/simple_tp.9:9
#: man/man9/sim_spindle.9:9 man/man9/sphereprobe.9:9 man/man9/spindle.9:9
#: man/man9/spindle_monitor.9:9 man/man9/steptest.9:9 man/man9/sum2.9:9
#: man/man9/thc.9:9 man/man9/thcud.9:9 man/man9/threadtest.9:9
#: man/man9/time.9:9 man/man9/timedelay.9:9 man/man9/tristate_bit.9:9
#: man/man9/tristate_float.9:9 man/man9/updown.9:9 man/man9/userkins.9:9
#: man/man9/wcomp.9:9 man/man9/xhc_hb04_util.9:9 man/man9/xor2.9:9
#, no-wrap
msgid "2022-09-23"
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:13
msgid "thermistor - compute temperature indicated by a thermistor"
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:15
msgid "B<thermistor>"
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:20
msgid ""
"This component computes the temperature indicated by a thermistor in a "
"voltage-divider ladder.  It uses the Beta-parameter variant of the Steinhart-"
"Hart equation, described here:"
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:22
#, no-wrap
msgid "    http://en.wikipedia.org/wiki/Thermistor\n"
msgstr ""

#. type: TP
#: man/man1/thermistor.1:23
#, no-wrap
msgid "B<thermistor.>I<N>B<.t0-c> float in "
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:29
msgid ""
"Reference temperature of the thermistor, in degrees Celsius (typically 25 "
"C).  This must be set before the component can compute the thermistor "
"temperature.  The reference temperature information is supplied by the "
"thermistor manufacturer."
msgstr ""

#. type: TP
#: man/man1/thermistor.1:29
#, no-wrap
msgid "B<thermistor.>I<N>B<.r0> float in "
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:35
msgid ""
"Resistance of the thermistor at the reference temperature.  This must be set "
"before the component can compute the thermistor temperature.  The reference "
"resistance information is supplied by the thermistor manufacturer."
msgstr ""

#. type: TP
#: man/man1/thermistor.1:35
#, no-wrap
msgid "B<thermistor.>I<N>B<.beta> float in "
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:41
msgid ""
"Beta parameter of the thermistor (sometimes just called B).  This must be "
"set before the component can compute the thermistor temperature.  The Beta "
"parameter is supplied by the thermistor manufacturer."
msgstr ""

#. type: TP
#: man/man1/thermistor.1:41
#, no-wrap
msgid "B<thermistor.>I<N>B<.r-other> float in "
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:46
msgid ""
"Resistance of the other resistor in the voltage-divider ladder.  This must "
"be set before the component can compute the thermistor temperature."
msgstr ""

#. type: TP
#: man/man1/thermistor.1:46
#, no-wrap
msgid "B<thermistor.>I<N>B<.v-total> float in "
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:49
msgid "Supply voltage of the voltage-divider ladder."
msgstr ""

#. type: TP
#: man/man1/thermistor.1:49
#, no-wrap
msgid "B<thermistor.>I<N>B<.v-thermistor> float in "
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:52
msgid "Voltage drop across the termistor."
msgstr ""

#. type: TP
#: man/man1/thermistor.1:52
#, no-wrap
msgid "B<thermistor.>I<N>B<.temperature-c> float out "
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:55
msgid "Temperature sensed by the thermistor, in degrees Celsius."
msgstr ""

#. type: TP
#: man/man1/thermistor.1:55
#, no-wrap
msgid "B<thermistor.>I<N>B<.temperature-k> float out "
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:58
msgid "Temperature sensed by the thermistor, in Kelvins."
msgstr ""

#. type: TP
#: man/man1/thermistor.1:58
#, no-wrap
msgid "B<thermistor.>I<N>B<.temperature-f> float out "
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:61
msgid "Temperature sensed by the thermistor, in degrees Fahrenheit."
msgstr ""

#. type: TP
#: man/man1/thermistor.1:61
#, no-wrap
msgid "B<thermistor.>I<N>B<.resistance> float out "
msgstr ""

#. type: Plain text
#: man/man1/thermistor.1:64
msgid "Computed resistance of the thermistor."
msgstr ""

#. type: TH
#: man/man1/tooledit.1:25
#, no-wrap
msgid "TOOLEDIT"
msgstr ""

#. type: Plain text
#: man/man1/tooledit.1:28
msgid "tooledit - tool table editor"
msgstr ""

#. type: Plain text
#: man/man1/tooledit.1:30
msgid "B<tooledit>"
msgstr ""

#. type: Plain text
#: man/man1/tooledit.1:33
msgid "B<tooledit> a graphical tool table editor"
msgstr ""

#. type: Plain text
#: man/man1/tooledit.1:36
msgid "details: http://linuxcnc.org/docs/html/gui/tooledit.html"
msgstr ""

#. type: TH
#: man/man1/touchy.1:25
#, no-wrap
msgid "TOUCHY"
msgstr ""

#. type: Plain text
#: man/man1/touchy.1:28
msgid "axis - TOUCHY LinuxCNC Graphical User Interface"
msgstr ""

#. type: Plain text
#: man/man1/touchy.1:31
msgid "B<touchy> I<-ini> I<E<lt>INI fileE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/touchy.1:34
msgid ""
"B<touchy> is one of the Graphical User Interfaces (GUI) for LinuxCNC It gets "
"run by the runscript usually."
msgstr ""

#. type: Plain text
#: man/man1/touchy.1:43
msgid ""
"The INI file is the main piece of an LinuxCNC configuration. It is not the "
"entire configuration; there are various other files that go with it (NML "
"files, HAL files, TBL files, VAR files). It is, however, the most important "
"one, because it is the file that holds the configuration together. It can "
"adjust a lot of parameters itself, but it also tells B<LinuxCNC> which other "
"files to load and use."
msgstr ""

#. type: TH
#: man/man1/update_ini.1:25
#, no-wrap
msgid "UPDATE_INI"
msgstr ""

#. type: Plain text
#: man/man1/update_ini.1:28
msgid "update_ini - converts 2.7 format INI files to 2.8 format"
msgstr ""

#. type: Plain text
#: man/man1/update_ini.1:30
msgid "B<update_ini [-f] [-d] >I<E<lt>INI fileE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/update_ini.1:34
msgid ""
"B<update_ini> is run automatically by the \"linuxcnc\" script when an INI "
"file in the pre-joints-axes format is opened."
msgstr ""

#. type: Plain text
#: man/man1/update_ini.1:36
msgid "-d causes a dialog box to be shown asking if the script should be run"
msgstr ""

#. type: Plain text
#: man/man1/update_ini.1:38
msgid "-f is designed for auto-conversion and will not create the backup files"
msgstr ""

#. type: TH
#: man/man1/vfdb_vfd.1:26
#, no-wrap
msgid "vfdb_vfd"
msgstr ""

#. type: TH
#: man/man1/vfdb_vfd.1:26 man/man1/vfs11_vfd.1:25
#, no-wrap
msgid "September 19, 2009"
msgstr ""

#. type: TH
#: man/man1/vfdb_vfd.1:26
#, no-wrap
msgid "VFD-B VFD"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:30
msgid ""
"B<vfdb_vfd> - HAL userspace component for Delta VFD-B Variable Frequency "
"Drives"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:34
msgid "B<vfdb_vfd> [OPTIONS]"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:41
msgid ""
"This manual page explains the B<vfdb_vfd> component. This component reads "
"and writes to the VFD-B device via a Modbus connection."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:43
msgid "B<vfdb_vfd> is for use with LinuxCNC."
msgstr ""

#. type: SH
#: man/man1/vfdb_vfd.1:44
#, no-wrap
msgid "QUICK START"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:49
msgid ""
"The VFD-B ships in a configuration that can not talk to this driver.  The "
"VFD-B must be reconfigured via the face plate by the integrator before it "
"will work.  This section gives a brief description of what changes need to "
"be made, consult your Delta VFD-B manual for more details."
msgstr ""

#. type: TP
#: man/man1/vfdb_vfd.1:50
#, no-wrap
msgid "Switch the VFD-B to Modbus RTU frame format:"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:55
msgid ""
"Switch parameter 09-04 from the factory default of 0 (Ascii framing)  to 3, "
"4, or 5 (RTU framing).  The setting you choose will determine several serial "
"parameters in addition to the Modbus framing protocol."
msgstr ""

#. type: TP
#: man/man1/vfdb_vfd.1:55
#, no-wrap
msgid "Set the frequency control source to be Modbus, not the keypad:"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:59
msgid ""
"Switch parameter 02-00 from factory default of 00 (keypad control) to 5 "
"(control from RS-485)."
msgstr ""

#. type: TP
#: man/man1/vfdb_vfd.1:59
#, no-wrap
msgid "Set the run/stop control source to be Modbus, not the keypad:"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:63
msgid ""
"Switch parameter 02-01 from the factory default of 0 (control from keypad)  "
"to 3 (control from Modbus, with Stop enabled on the keypad)."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:67 man/man1/vfs11_vfd.1:44
#, no-wrap
msgid "B<-n\\ --name\\ E<lt>halnameE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:70 man/man1/vfs11_vfd.1:47
msgid "set the HAL component name"
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:70 man/man1/vfs11_vfd.1:47
#, no-wrap
msgid "B<-d\\ --debug>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:74
msgid ""
"Turn on debugging messages. Also toggled by sending a USR1 signal to the "
"vfdb_vfd process."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:74 man/man1/vfs11_vfd.1:50
#, no-wrap
msgid "B<-m\\ --modbus-debug>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:79
msgid ""
"Turn on Modbus debugging messages. This will cause all Modbus messages to be "
"printed in hex on the terminal.  Also toggled by sending a USR2 signal to "
"the vfdb_vfd process."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:79 man/man1/vfs11_vfd.1:54
#, no-wrap
msgid "B<-I\\ --ini\\ E<lt>INI\\ fileE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:84
msgid ""
"take configuration from this I<INI file>.  Defaults to environment variable "
"INI_FILE_NAME.  Most vfdb_vfd configuration comes from the INI file, not "
"from command-line arguments."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:84 man/man1/vfs11_vfd.1:58
#, no-wrap
msgid "B<-S\\ --section\\ E<lt>section\\ nameE<gt>>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:88
msgid ""
"take configuration from this section in the INI file. Defaults to 'VFD-B'."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:88 man/man1/vfs11_vfd.1:62
#, no-wrap
msgid "B<-r\\ --report-device>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:90 man/man1/vfs11_vfd.1:64
msgid "report device propertiers on console at startup"
msgstr ""

#. type: SH
#: man/man1/vfdb_vfd.1:91
#, no-wrap
msgid "INI CONFIG VARIABLES"
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:93
#, no-wrap
msgid "B<DEBUG>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:97
msgid ""
"Set to a non-zero value to enable general debug output from the VFD-B "
"driver.  Optional."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:97
#, no-wrap
msgid "B<MODBUS_DEBUG>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:101
msgid ""
"Set to a non-zero value to enable modbus debug output from the VFD-B "
"driver.  Optional."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:101
#, no-wrap
msgid "B<DEVICE>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:105
msgid ""
"Serial port device file to use for Modbus communication with the VFD-B.  "
"Defaults to '/dev/ttyS0'."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:105
#, no-wrap
msgid "B<BAUD>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:108
msgid "Modbus baud rate.  Defaults to 19200."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:108
#, no-wrap
msgid "B<BITS>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:111
msgid "Modbus data bits.  Defaults to 8."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:111
#, no-wrap
msgid "B<PARITY>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:114
msgid "Modbus parity.  Defaults to Even.  Accepts 'Even', 'Odd', or 'None'."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:114
#, no-wrap
msgid "B<STOPBITS>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:117
msgid "Modbus stop bits.  Defaults to 1."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:117
#, no-wrap
msgid "B<TARGET>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:120
msgid "Modbus target number of the VFD-B to speak to.  Defaults to 1."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:120
#, no-wrap
msgid "B<POLLCYCLES>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:124
msgid ""
"Only read the less important variables from the VFD-B once in this many poll "
"cycles.  Defaults to 10."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:124
#, no-wrap
msgid "B<RECONNECT_DELAY>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:128
msgid ""
"If the connection to the VFD-B is broken, wait this many seconds before "
"reconnecting.  Defaults to 1."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:128
#, no-wrap
msgid "B<MOTOR_HZ,\\ MOTOR_RPM>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:132
msgid ""
"The frequency of the motor (in Hz) and the corresponding speed of the motor "
"(in RPM).  This information is provided by the motor manufacturer, and is "
"generally printed on the motor's name plate."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:141
msgid "True when drive is at commanded speed (see I<speed-tolerance> below)"
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:141 man/man1/vfs11_vfd.1:89
#, no-wrap
msgid "B<E<lt>nameE<gt>.enable\\ (bit,\\ in)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:145
msgid ""
"Enable the VFD. If False, all operating parameters are still read but "
"control is released and panel control is enabled (subject to VFD setup)."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:149
msgid ""
"Current target frequency in HZ as set through speed-command (which is in "
"RPM), from the VFD."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:152
msgid "Current output frequency of the VFD."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:152 man/man1/vfs11_vfd.1:109
#, no-wrap
msgid "B<E<lt>nameE<gt>.inverter-load-percentage\\ (float,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:155
msgid "Current load report from VFD."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:155 man/man1/vfs11_vfd.1:112
#, no-wrap
msgid "B<E<lt>nameE<gt>.is-e-stopped\\ (bit,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:158
msgid "The VFD is in emergency stop status (blinking \"E\" on panel)."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:161
msgid "True when the VFD reports 0 Hz output."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:161 man/man1/vfs11_vfd.1:122
#, no-wrap
msgid "B<E<lt>nameE<gt>.jog-mode\\ (bit,\\ in)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:165
msgid ""
"1 for ON and 0 for OFF, enables the VFD-B 'jog mode'. Speed control is "
"disabled.  This might be useful for spindle orientation."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:165
#, no-wrap
msgid "B<E<lt>nameE<gt>.max-rpm\\ (float,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:178
msgid ""
"Actual RPM limit based on maximum frequency the VFD may generate, and the "
"motors nameplate values. For instance, if I<nameplate-HZ> is 50, and "
"I<nameplate-RPM> is 1410, but the VFD may generate up to 80Hz, then I<max-"
"rpm> would read as 2256 (80*1410/50). The frequency limit is read from the "
"VFD at startup.  To increase the upper frequency limit, the UL and FH "
"parameters must be changed on the panel.  See the VFD-B manual for "
"instructions how to set the maximum frequency."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:178 man/man1/vfs11_vfd.1:139
#, no-wrap
msgid "B<E<lt>nameE<gt>.modbus-ok\\ (bit,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:182
msgid ""
"True when the Modbus session is successfully established and the last 10 "
"transactions returned without error."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:185
msgid "Estimated current RPM value, from the VFD."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:185
#, no-wrap
msgid "B<E<lt>nameE<gt>.motor-RPS\\ (float,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:188
msgid "Estimated current RPS value, from the VFD."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:191 man/man1/vfdb_vfd.1:194
msgid "From the VFD."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:198
msgid ""
"Speed sent to VFD in RPM. It is an error to send a speed faster than the "
"Motor Max RPM as set in the VFD."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:201
msgid "1 for ON and 0 for OFF sent to VFD, only on when running."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:201
#, no-wrap
msgid "B<E<lt>nameE<gt>.max-speed\\ (bit,\\ in)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:206
msgid ""
"Ignore the loop-time parameter and run Modbus at maximum speed, at the "
"expense of higher CPU usage. Suggested use during spindle positioning."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:206 man/man1/vfs11_vfd.1:173
#, no-wrap
msgid "B<E<lt>nameE<gt>.status\\ (s32,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:209
msgid "Drive Status of the VFD (see the VFD manual). A bitmap."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:209
#, no-wrap
msgid "B<E<lt>nameE<gt>.error-count\\ (s32,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:212
msgid "Total number of transactions returning a Modbus error."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:212
#, no-wrap
msgid "B<E<lt>nameE<gt>.error-code\\ (s32,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:215
msgid "Most recent Error Code from VFD."
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:215
#, no-wrap
msgid "B<E<lt>nameE<gt>.frequency-limit\\ (float,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:219
msgid "Upper limit read from VFD setup.  B<\\&\\&>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:224
msgid "How often the Modbus is polled (default interval 0.1 seconds)."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:230
msgid ""
"Nameplate Hz of motor (default 50). Used to calculate target frequency "
"(together with I<nameplate-RPM> ) for a target RPM value as given by speed-"
"command."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:233 man/man1/vfs11_vfd.1:200
msgid "Nameplate RPM of motor (default 1410)"
msgstr ""

#. type: IP
#: man/man1/vfdb_vfd.1:233 man/man1/vfs11_vfd.1:200
#, no-wrap
msgid "B<E<lt>nameE<gt>.rpm-limit\\ (float,\\ RW)>"
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:238
msgid "Do-not-exceed soft limit for motor RPM (defaults to I<nameplate-RPM> )."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:241
msgid ""
"Speed tolerance (default 0.01) for determining whether spindle is at speed "
"(0.01 meaning: output frequency is within 1% of target frequency)."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:251
msgid ""
"The vfdb_vfd driver takes precedence over panel control while it is enabled "
"(see I<.enable> pin), effectively disabling the panel. Clearing the I<."
"enable> pin re-enables the panel. Pins and parameters can still be set, but "
"will not be written to the VFD untile the .enable pin is set. Operating "
"parameters are still read while bus control is disabled."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:254
msgid ""
"Exiting the vfdb_vfd driver in a controlled way will release the VFD from "
"the bus and restore panel control."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:257
msgid ""
"See the LinuxCNC Integrators Manual for more information. For a detailed "
"register description of the Delta VFD-B, see the VFD manual."
msgstr ""

#. type: Plain text
#: man/man1/vfdb_vfd.1:261
msgid "Yishin Li; based on vfd11_vfd by Michael Haberler."
msgstr ""

#. type: TH
#: man/man1/vfs11_vfd.1:25
#, no-wrap
msgid "vfs11_vfd"
msgstr ""

#. type: TH
#: man/man1/vfs11_vfd.1:25
#, no-wrap
msgid "vfs11 VFD"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:29
msgid ""
"B<vfs11_vfd> - HAL userspace component for Toshiba-Schneider VF-S11 Variable "
"Frequency Drives"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:33
msgid "B<vfs11_vfd> [OPTIONS]"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:39
msgid ""
"This manual page explains the B<vfs11_vfd> component. This component reads "
"and writes to the vfs11 via a Modbus connection."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:41
msgid "B<vfs11_vfd> is for use with LinuxCNC."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:50
msgid ""
"Turn on debugging messages. Also toggled by sending a USR1 signal to the "
"vfs11_vfd process."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:54
msgid ""
"Turn on Modbus debugging messages. This will cause all Modbus messages to be "
"printed in hex on the terminal.  Also toggled by sending a USR2 signal to "
"the vfs11_vfd process."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:58
msgid ""
"takes configuration from this INI file.  Defaults to environment variable "
"INI_FILE_NAME."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:62
msgid ""
"take configuration from this section in the INI file. Defaults to 'VFS11'."
msgstr ""

#. type: IP
#: man/man1/vfs11_vfd.1:67
#, no-wrap
msgid "B<E<lt>nameE<gt>.acceleration-pattern\\ (bit,\\ in)>"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:71
msgid ""
"when true, set acceleration and deceleration times as defined in registers "
"F500 and F501 respectively.  Used in PID loops to choose shorter ramp times "
"to avoid oscillation."
msgstr ""

#. type: IP
#: man/man1/vfs11_vfd.1:71
#, no-wrap
msgid "B<E<lt>nameE<gt>.alarm-code\\ (s32,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:77
msgid ""
"non-zero if drive is in alarmed state. Bitmap describing alarm information "
"(see register FC91 description).  Use I<err-reset> (see below) to clear the "
"alarm."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:83
msgid "when drive is at commanded speed (see I<speed-tolerance> below)"
msgstr ""

#. type: IP
#: man/man1/vfs11_vfd.1:83
#, no-wrap
msgid "B<E<lt>nameE<gt>.current-load-percentage\\ (float,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:86
msgid "reported from the VFD"
msgstr ""

#. type: IP
#: man/man1/vfs11_vfd.1:86
#, no-wrap
msgid "B<E<lt>nameE<gt>.dc-brake\\ \\ (bit,\\ in)>"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:89
msgid "engage the DC brake. Also turns off spindle-on."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:93
msgid ""
"enable the VFD.  If false, all operating parameters are still read but "
"control is released and panel control is enabled (subject to VFD setup)."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:97
msgid ""
"reset errors (alarms a.k.a Trip and e-stop status).  Resetting the VFD may "
"cause a 2-second delay until it's rebooted and Modbus is up again."
msgstr ""

#. type: IP
#: man/man1/vfs11_vfd.1:97
#, no-wrap
msgid "B<E<lt>nameE<gt>.estop\\ (bit,\\ in)>"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:103
msgid ""
"put the VFD into emergency-stopped status. No operation possible until "
"cleared with I<err-reset> or powercycling."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:106
msgid ""
"current target frequency in Hz as set through speed-command (which is in "
"RPM), from the VFD"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:109
msgid "current output frequency of the VFD"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:112
msgid "current load report from VFD"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:119
msgid ""
"the VFD is in emergency stop status (blinking \"E\" on panel).  Use I<err-"
"reset> to reboot the VFD and clear the e-stop status."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:122
msgid "true when the VFD reports 0 Hz output"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:127
msgid ""
"1 for ON and 0 for OFF, enables the VF-S11 'jog mode'.  Speed control is "
"disabled, and the output frequency is determined by register F262 (preset to "
"5 Hz).  This might be useful for spindle orientation."
msgstr ""

#. type: IP
#: man/man1/vfs11_vfd.1:127
#, no-wrap
msgid "B<E<lt>nameE<gt>.max-rpm\\ (float,\\ R)>"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:139
msgid ""
"actual RPM limit based on maximum frequency the VFD may generate, and the "
"motors nameplate values.  For instance, if I<nameplate-HZ> is 50, and "
"I<nameplate-RPM_> is 1410, but the VFD may generate up to 80Hz, then I<max-"
"rpm> would read as 2256 (80*1410/50). The frequency limit is read from the "
"VFD at startup.  To increase the upper frequency limit, the UL and FH "
"parameters must be changed on the panel.  See the VF-S11 manual for "
"instructions how to set the maximum frequency."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:142
msgid ""
"true when the Modbus session is successfully established and the last 10 "
"transactions returned without error."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:145
msgid "estimated current RPM value, from the VFD"
msgstr ""

#. type: IP
#: man/man1/vfs11_vfd.1:145
#, no-wrap
msgid "B<E<lt>nameE<gt>.output-current-percentage\\ (float,\\ out)>"
msgstr ""

#. type: IP
#: man/man1/vfs11_vfd.1:148
#, no-wrap
msgid "B<E<lt>nameE<gt>.output-voltage-percentage\\ (float,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:158
msgid ""
"speed sent to VFD in RPM.  It is an error to send a speed faster than the "
"Motor Max RPM as set in the VFD"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:161
msgid "1 for FWD and 0 for REV, sent to VFD"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:168
msgid "1 for ON and 0 for OFF, only on when running B<\\&\\&>"
msgstr ""

#. type: IP
#: man/man1/vfs11_vfd.1:168
#, no-wrap
msgid "E<lt>nameE<gt>.max-speed\\ (bit,\\ in)"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:173
msgid ""
"ignore the loop-time parameter and run Modbus at maximum speed, at the "
"expense of higher CPU usage.  Suggested use during spindle positioning."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:176
msgid ""
"Drive Status of the VFD (see the TOSVERT VF-S11 Communications Function "
"Instruction Manual, register FD01). A bitmap."
msgstr ""

#. type: IP
#: man/man1/vfs11_vfd.1:176
#, no-wrap
msgid "B<E<lt>nameE<gt>.trip-code\\ (s32,\\ out)>"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:179
msgid "trip code if VF-S11 is in tripped state."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:183
msgid "total number of transactions returning a Modbus error B<\\&\\&>"
msgstr ""

#. type: IP
#: man/man1/vfs11_vfd.1:185
#, no-wrap
msgid "B<E<lt>nameE<gt>.frequency-limit\\ (float,\\ RO)>"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:188
msgid "upper limit read from VFD setup."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:191
msgid "how often the Modbus is polled (default interval 0.1 seconds)"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:197
msgid ""
"Nameplate Hz of motor (default 50).  Used to calculate target frequency "
"(together with I<nameplate-RPM> ) for a target RPM value as given by speed-"
"command."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:205
msgid "do-not-exceed soft limit for motor RPM (defaults to I<nameplate-RPM> )."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:207
msgid ""
"speed tolerance (default 0.01) for determining whether spindle is at speed "
"(0.01 meaning: output frequency is within 1% of target frequency)"
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:216
msgid ""
"The vfs11_vfd driver takes precedence over panel control while it is enabled "
"(see I<.enable> pin), effectively disabling the panel. Clearing the I<."
"enable> pin re-enableds the panel. Pins and parameters can still be set, but "
"will not be written to the VFD untile the .enable pin is set. Operating "
"parameters are still read while bus control is disabled."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:218
msgid ""
"Exiting the vfs11_vfd driver in a controlled will release the VFD from the "
"bus and restore panel control."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:222
msgid ""
"See the LinuxCNC Integrators Manual for more information. For a detailed "
"register description of the Toshiba VFD's, see the \"TOSVERT VF-S11 "
"Communications Function Instruction Manual\" (Toshiba document number "
"E6581222)  and the \"TOSVERT VF-S11 Instruction manual\" (Toshiba document "
"number E6581158)."
msgstr ""

#. type: Plain text
#: man/man1/vfs11_vfd.1:226
msgid "Michael Haberler; based on gs2_vfd by Steve Padnos and John Thornton."
msgstr ""

#. type: TH
#: man/man1/wj200_vfd.1:9
#, no-wrap
msgid "WJ200_VFD"
msgstr ""

#. type: Plain text
#: man/man1/wj200_vfd.1:13
msgid "wj200_vfd - Hitachi wj200 modbus driver"
msgstr ""

#. type: Plain text
#: man/man1/wj200_vfd.1:15
msgid "B<wj200_vfd>"
msgstr ""

#. type: TP
#: man/man1/wj200_vfd.1:16
#, no-wrap
msgid "B<wj200-vfd.>I<N>B<.commanded-frequency> float in "
msgstr ""

#. type: TP
#: man/man1/wj200_vfd.1:19
#, no-wrap
msgid "B<wj200-vfd.>I<N>B<.reverse> bit in "
msgstr ""

#. type: Plain text
#: man/man1/wj200_vfd.1:22
msgid "1 when reverse 0 when forward"
msgstr ""

#. type: TP
#: man/man1/wj200_vfd.1:22
#, no-wrap
msgid "B<wj200-vfd.>I<N>B<.run> bit in "
msgstr ""

#. type: TP
#: man/man1/wj200_vfd.1:25
#, no-wrap
msgid "B<wj200-vfd.>I<N>B<.enable> bit in "
msgstr ""

#. type: TP
#: man/man1/wj200_vfd.1:28
#, no-wrap
msgid "B<wj200-vfd.>I<N>B<.is-running> bit out "
msgstr ""

#. type: TP
#: man/man1/wj200_vfd.1:31
#, no-wrap
msgid "B<wj200-vfd.>I<N>B<.is-at-speed> bit out "
msgstr ""

#. type: TP
#: man/man1/wj200_vfd.1:34
#, no-wrap
msgid "B<wj200-vfd.>I<N>B<.is-ready> bit out "
msgstr ""

#. type: TP
#: man/man1/wj200_vfd.1:37
#, no-wrap
msgid "B<wj200-vfd.>I<N>B<.is-alarm> bit out "
msgstr ""

#. type: TP
#: man/man1/wj200_vfd.1:40
#, no-wrap
msgid "B<wj200-vfd.>I<N>B<.motor-current> float out "
msgstr ""

#. type: TP
#: man/man1/wj200_vfd.1:43
#, no-wrap
msgid "B<wj200-vfd.>I<N>B<.heatsink-temp> float out "
msgstr ""

#. type: TP
#: man/man1/wj200_vfd.1:46
#, no-wrap
msgid "B<wj200-vfd.>I<N>B<.watchdog-out> bit out "
msgstr ""

#. type: TP
#: man/man1/wj200_vfd.1:50
#, no-wrap
msgid "B<wj200-vfd.>I<N>B<.mbslaveaddr> u32 rw "
msgstr ""

#. type: TH
#: man/man1/xhc-hb04.1:1
#, no-wrap
msgid "XHC-HB04"
msgstr ""

#. type: TH
#: man/man1/xhc-hb04.1:1
#, no-wrap
msgid "2015-03-06"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:4
msgid "xhc-hb04 - User-space HAL component for the xhc-hb04 pendant."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:9
msgid ""
"The xhc-hb04 component supports a common USB pendant that provides a number "
"of pushbuttons, a manual pulse generator (mpg or jog wheel), and a selector "
"switch for the wheel."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:13
msgid ""
"There are at least two hardware versions -- one with 16 buttons and a more "
"common one with 18 buttons.  The information herein is based on the 18 "
"button device with a USB Vendor:Product code of 10CE:EB70."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:22
msgid ""
"In addition to buttons, the pendant provides an LCD display for the current "
"stepsize multiplier (from a set of available integer values), position "
"(absolute and relative, labeled MC and WC respectively), feedrate (override "
"percent and value in units per minute), and spindle speed (override percent "
"and value in revolutions per minute (RPM)).  The display is managed by a "
"rotary switch that selects one of four axes for wheel positioning, feed "
"override, spindle override, or OFF."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:27
msgid ""
"The pendant display, its rotary selector switch, and the component pin names "
"use designators x,y,z,a.  While this arrangement presumes a machine "
"configured as XYZA, the pins can be assigned independently as required in a "
"HAL configuration."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:33
msgid ""
"The xhc-hb04 executable needs permission for reading the pendant's USB "
"device.  Debian package installs (debs) handle this automatically but Run-In-"
"Place (RIP) builds may need a udev rules file.  This file should be created "
"(using sudo and a text editor) as:"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:36
#, no-wrap
msgid "B</etc/udev/rules.d/99-xhc-hb04.rules> with the single line:\n"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:38
#, no-wrap
msgid "ATTR{idProduct}==\"eb70\", ATTR{idVendor}==\"10ce\", MODE=\"0666\", OWNER=\"root\", GROUP=\"plugdev\"\n"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:48
msgid ""
"The xhc-hb04 program can be run from the command line without LinuxCNC to "
"test a pendant in a simulation mode.  This standalone mode is used to "
"identify the button codes produced for each button press and to verify "
"proper counting of the jog wheel.  The identified button codes can be used "
"to create a B<button-cfg-file>.  When a B<button-cfg-file> exists, pendant "
"operation can be verified using the -I option to specify the file."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:52
msgid "$ xhc-hb04 [options]"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:54
#, no-wrap
msgid "B<-h>    list command line options and exit"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:56
#, no-wrap
msgid "B<-I button-cfg-file> (see below for file format)"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:58
#, no-wrap
msgid "B<-H>    run in real-time HAL mode (simulation mode is default)"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:60
#, no-wrap
msgid "B<-x>    wait for pendant detection before creating HAL pins."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:62
#, no-wrap
msgid "B<-s >I<  n>  I<n> is one of the following stepsize sequences"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:71
#, no-wrap
msgid ""
"      1: 1,10,100,1000 (default)\n"
"      2: 1,5,10,20\n"
"      3: 1,10,100\n"
"      4: 1,5,10,20,50,100\n"
"      5: 1,10,50,100,1000\n"
"      The stepsize selected is always multiplied by 0.001\n"
msgstr ""

#. type: SH
#: man/man1/xhc-hb04.1:72
#, no-wrap
msgid "button-cfg-file format"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:75
msgid ""
"Standard configuration files are provided in the distribution for known "
"button configurations:"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:81
#, no-wrap
msgid ""
"   /usr/share/linuxcnc/hallib/xhc-hb04-layout1.cfg\n"
"   /usr/share/linuxcnc/hallib/xhc-hb04-layout2.cfg\n"
"or for a RIP build:\n"
"   rip_base_dir/lib/hallib/xhc-hb04-layout1.cfg\n"
"   rip_base_dir/lib/hallib/xhc-hb04-layout2.cfg\n"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:85
msgid ""
"layout1 describes the 16 button pendant, layout2 describes the more common "
"18 button pendant."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:88
msgid ""
"The button configuration file follows the same format as INI files but "
"should use a file suffix of .cfg."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:96
#, no-wrap
msgid ""
"File format:\n"
"  [XHC-HB04]\n"
"  BUTTON=X1:button-thename1\n"
"  BUTTON=X2:button-thename2\n"
"  BUTTON=X3:button-thename3\n"
"  etc.\n"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:100
msgid ""
"XN is the code reported for a button press and button-thenameN is the name "
"to be assigned to the pin created for the button."
msgstr ""

#. type: SH
#: man/man1/xhc-hb04.1:101
#, no-wrap
msgid "HAL Usage"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:103
msgid "Use the -H option to specify HAL mode and other options as required:"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:105
msgid "I<loadusr -W > B<xhc-hb04> I<-H [Options]>"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:108
msgid "Example: I<loadusr -W > B<xhc-hb04> I<-H -I path_to_cfg_file -s 2>"
msgstr ""

#. type: SH
#: man/man1/xhc-hb04.1:109
#, no-wrap
msgid "Input Pins (Control)"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:110
#, no-wrap
msgid "(bit in) I<xhc-hb04.stepsize-up> A 1 pulse on this pin changes the"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:114
msgid ""
"stepsize to the next higher stepsize in the stepsize sequence specified in "
"the xhc-hb04 (loadusr) command."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:114
#, no-wrap
msgid "(bit in) I<xhc-hb04.stepsize-down> A 1 pulse on this pin changes the"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:118
msgid ""
"stepsize to the next lower stepsize in the stepsize sequence specified in "
"the xhc-hb04 (loadusr) command."
msgstr ""

#. type: SH
#: man/man1/xhc-hb04.1:119
#, no-wrap
msgid "Input Pins (to the pendant LCD display)"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:120
#, no-wrap
msgid "(float in) I<xhc-hb04.[xyza].pos-absolute> Absolute position display."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:125
msgid ""
"(typically connect to: halui.axis.N.pos-feedback). The LCD display for pos-"
"absolute is fixed format with a sign, 4 number digits and 3 fraction digits "
"(+XXXX.XXX), require: -9999.999 E<lt>= value E<lt>= 9999.999."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:125
#, no-wrap
msgid "(float in) I<xhc-hb04.[xyza].pos-relative> Relative position display."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:130
msgid ""
"(typically connect to: halui.axis.N.pos-relative). The LCD display for pos-"
"relative is fixed format with a sign, 4 number digits and 3 fraction digits "
"(+XXXX.XXX), require: -9999.999 E<lt>= value E<lt>= 9999.999."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:131
#, no-wrap
msgid "(float in) I<xhc-hb04.feed-override> Feed-override value."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:136
msgid ""
"The float value is converted to a 16 bit integer and multiplied by 100 in "
"order to display as percent, require: 0 E<lt>= pinvalue E<lt>= 655 "
"(typically connect to: halui.feed-override.value)"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:136
#, no-wrap
msgid "(float in) I<xhc-hb04.feed-value> Current Feed-value (units/sec)."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:141
msgid ""
"The float value is converted to a 16 bit integer and multiplied by 60 in "
"order to display as units-per-minute, require: 0 E<lt>= pinvalue E<lt>= 1092 "
"(65520 units-per-minute) (typically connect to: motion.current-vel)"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:142
#, no-wrap
msgid "(float in) I<xhc-hb04.spindle-override> Spindle-override value."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:147
msgid ""
"The float value is converted to a 16 bit integer and multiplied by 100 in "
"order to display as percent, require: 0 E<lt>= pinvalue E<lt>= 655)  "
"(typically connect to: halui.spindle-override.value)"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:147
#, no-wrap
msgid "(float in) I<xhc-hb04.spindle-rps> Spindle speed in rps."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:153
msgid ""
"(revolutions per second).  The float value is converted to a 16 bit integer "
"and multiplied by 60 in order to display as RPMs, require: 0 E<lt>= pinvalue "
"E<lt>= 1092 (65520 RPM) (typically connect to: spindle.N.speed-out-rps-abs)"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:153
#, no-wrap
msgid "(bit in) I<xhc-hb04.inch-icon> Use inch icon (default is mm)"
msgstr ""

#. type: SH
#: man/man1/xhc-hb04.1:156
#, no-wrap
msgid "Output Pins (Status)"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:157
#, no-wrap
msgid "(bit out) I<xhc-hb04.sleeping> True when the driver receives a pendant"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:160
msgid "inactive (sleeping) message."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:160
#, no-wrap
msgid "(bit out) I<xhc-hb04.jog.enable-off> True when the pendant rotary"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:163
msgid "selector switch is in the OFF position or when the pendant is sleeping."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:163
#, no-wrap
msgid "(bit out) I<xhc-hb04.enable-[xyza]> True when the pendant rotary"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:166
msgid "selector switch is in the [xyza] position and not sleeping."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:166
#, no-wrap
msgid "(bit out) I<xhc-hb04.enable-spindle-override> True when the pendant"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:170
msgid ""
"rotary selector switch is in the Spindle position and not sleeping "
"(typically connect to: halui.spindle-override-count-enable)."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:170
#, no-wrap
msgid "(bit out) I<xhc-hb04.enable-feed-override> True when the pendant rotary"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:174
msgid ""
"selector switch is in the feed position and not sleeping (typically connect "
"to: halui.feed-override-count-enable)."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:174
#, no-wrap
msgid "(bit out) I<xhc-hb04.connected> True when connection to the pendant"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:177
msgid "is established over the USB interface."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:177
#, no-wrap
msgid "(bit out) I<xhc-hb04.require_pendant> True if driver started with"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:180
msgid "the -x option."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:180
#, no-wrap
msgid "(s32 out) I<xhc-hb04.stepsize> Current stepsize in the stepsize sequence"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:183
msgid "as controlled by the stepsize-up and/or stepsize-down pins."
msgstr ""

#. type: SH
#: man/man1/xhc-hb04.1:184
#, no-wrap
msgid "Output Pins (for jogging using axis.N.jog-counts)"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:185
#, no-wrap
msgid "(s32 out) I<xhc-hb04.jog.counts> Number of counts of the wheel since"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:189
msgid ""
"start-up (50 counts per wheel revolution)  (typically connect to axis.N.jog-"
"counts (lowpass filtering may be helpful))."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:189
#, no-wrap
msgid "(s32 out) I<xhc-hb04.jog.counts-neg> The value of the"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:192
msgid "xhc-hb04.jog.counts multiplied by -1."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:192
#, no-wrap
msgid "(float out) I<xhc-hb04.jog.scale>  Value is the current stepsize"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:196
msgid "multiplied by 0.001 (typically connect to axis.N.jog-scale)."
msgstr ""

#. type: SH
#: man/man1/xhc-hb04.1:197
#, no-wrap
msgid "Experimental: Pins for halui plus/minus jogging"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:199
msgid "These pins provide some support for non-trivkins, world mode jogging."
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:199
#, no-wrap
msgid "(float in) I<xhc-hb04.jog.max-velocity> Connect to halui.max-velocity.value"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:201
#, no-wrap
msgid "(float out) I<xhc-hb04.jog.velocity> Connect to halui.jog-speed"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:203
#, no-wrap
msgid "(bit out) I<xhc-hb04.jog.plus-[xyza]> Connect to halui.jog.N.plus"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:205
#, no-wrap
msgid "(bit out) I<xhc-hb04.jog.minus-[xyza]> Connect to halui.jog.N.minus"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:207
#, no-wrap
msgid "(float out) I<xhc-hb04.jog.increment> Debug pin -- abs(delta_pos)"
msgstr ""

#. type: SH
#: man/man1/xhc-hb04.1:210
#, no-wrap
msgid "Button output pins (for the 18 button, layout2 pendant)"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:212
msgid "The output bit type pins are TRUE when the button is pressed."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:217
#, no-wrap
msgid ""
"ROW 1\n"
"    (bit out) xhc-hb04.button-reset\n"
"    (bit out) xhc-hb04.button-stop\n"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:223
#, no-wrap
msgid ""
"ROW 2\n"
"    (bit out) xhc-hb04.button-goto-zero\n"
"    (bit out) xhc-hb04.button-rewind\n"
"    (bit out) xhc-hb04.button-start-pause\n"
"    (bit out) xhc-hb04.button-probe-z\n"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:229
#, no-wrap
msgid ""
"ROW 3\n"
"   (bit out) xhc-hb04.button-spindle\n"
"   (bit out) xhc-hb04.button-half\n"
"   (bit out) xhc-hb04.button-zero\n"
"   (bit out) xhc-hb04.button-safe-z\n"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:235
#, no-wrap
msgid ""
"ROW 4\n"
"   (bit out) xhc-hb04.button-home\n"
"   (bit out) xhc-hb04.button-macro-1\n"
"   (bit out) xhc-hb04.button-macro-2\n"
"   (bit out) xhc-hb04.button-macro-3\n"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:241
#, no-wrap
msgid ""
"ROW 5\n"
"   (bit out) xhc-hb04.button-step\n"
"   (bit out) xhc-hb04.button-mode\n"
"   (bit out) xhc-hb04.button-macro-6\n"
"   (bit out) xhc-hb04.button-macro-7\n"
msgstr ""

#. type: SH
#: man/man1/xhc-hb04.1:243
#, no-wrap
msgid "Synthesized button pins"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:248
msgid ""
"Additional buttons are synthesized for buttons named B<zero>, B<goto-zero>, "
"and B<half>.  These synthesized buttons are active when the button is "
"pressed AND the selector-switch is set to the corresponding axis [xyza]."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:253
#, no-wrap
msgid ""
"   (bit out) xhc-hb04.button-zero-[xyza]\n"
"   (bit out) xhc-hb04.button-goto-zero-[xyza]\n"
"   (bit out) xhc-hb04.button-half-[xyza]\n"
msgstr ""

#. type: SH
#: man/man1/xhc-hb04.1:255
#, no-wrap
msgid "DEBUGGING"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:257
msgid "For debugging USB activity, use environmental variable LIBUSB_DEBUG:"
msgstr ""

#. type: TP
#: man/man1/xhc-hb04.1:257
#, no-wrap
msgid "export LIBUSB_DEBUG=[2 | 3 | 4]; xhc-hb04 [options]"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:260
msgid "2:warning, 3:info, 4:debug"
msgstr ""

#. type: SH
#: man/man1/xhc-hb04.1:261
#, no-wrap
msgid "Sim Configs"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:264
msgid ""
"The distribution includes several simulation configurations in the directory:"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:268
#, no-wrap
msgid ""
"   /usr/share/doc/linuxcnc/examples/sample-configs/sim/axis/xhc-hb04/\n"
"or for a RIP build:\n"
"   rip_base_dir/configs/sim/axis/xhc-hb04/\n"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:275
msgid ""
"These configurations use a distribution-provided script (xhc-hb04.tcl)  to "
"configure the pendant and make necessary HAL connections according to a "
"number of INI file settings.  The script uses an additional HAL component "
"(xhc_hb04_util) to provide common functionality and includes support for a "
"standard method for the start-pause button."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:286
#, no-wrap
msgid ""
"The settings available include:\n"
"  1) specify button-cfg-file for standard layout1 or layout2\n"
"  2) select axes (up to 4 axes from set of x y z a b c u v w)\n"
"  3) implement per-axis filtering coefficients\n"
"  4) implement per-axis acceleration for mpg jogging\n"
"  5) implement per-axis scale settings\n"
"  6) select normal or velocity based jog modes\n"
"  7) select stepsize sequence\n"
"  8) option to initialize pin for inch or mm display icon\n"
"  9) option to require pendant on startup\n"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:291
#, no-wrap
msgid ""
"The sim configs illustrate button connections that:\n"
"  1) connect pendant stepsize-up button to the step input pin.\n"
"  2) connect buttons to halui.* pins\n"
"  3) connect buttons to motion.* pins\n"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:295
msgid ""
"Another script is included to monitor the pendant and report loss of USB "
"connectivity.  See the README and .txt files in the above directory for "
"usage."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:301
msgid ""
"B<Note:> The sim configs use the axis gui but the scripts are available with "
"any HAL configuration or gui.  The same scripts can be used to adapt the xhc-"
"hb04 to existing configurations provided that the halui, motion, and axis.N "
"pins needed are not otherwise claimed.  Instructions are included in README "
"file in the directory named above."
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:304
msgid ""
"Use halcmd to display the pins and signals used by the xhc-hb04.tcl script:"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:308
#, no-wrap
msgid ""
"  halcmd show pin xhc-hb04       (show all xhc-hb04 pins)\n"
"  halcmd show pin pendant_util   (show all pendant_util pins)\n"
"  halcmd show sig pendant:       (show all pendant signals)\n"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04.1:312
msgid "Frederick Rible (frible@teaser.fr)"
msgstr ""

#. type: TH
#: man/man1/xhc-hb04-accels.1:25
#, no-wrap
msgid "XHC-HB04-ACCELS"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04-accels.1:28
msgid "xhc-hb04-accels - Obsolete script for jogging wheel"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04-accels.1:30
msgid "B<xhc-hb04-accels>"
msgstr ""

#. type: Plain text
#: man/man1/xhc-hb04-accels.1:33
msgid ""
"B<xhc-hb04-accels> Obsolete script, xhc-hb04.tcl now controls reduced wheel "
"jogging accels."
msgstr ""

#. type: TH
#: man/man1/xyzac-trt-gui.1:25
#, no-wrap
msgid "xyzac-trt-gui"
msgstr ""

#. type: Plain text
#: man/man1/xyzac-trt-gui.1:28
msgid "xyzac-trt-gui - Vismach Virtual Machine GUI"
msgstr ""

#. type: Plain text
#: man/man1/xyzac-trt-gui.1:32
msgid ""
"B<xyzac-trt-gui> is one of the sample B<Vismach> GUIs for LinuxCNC, "
"simulating a 5-axis milling machine with tool-point kinematics"
msgstr ""

#. type: TH
#: man/man1/xyzbc-trt-gui.1:25
#, no-wrap
msgid "xyzbc-trt-gui"
msgstr ""

#. type: Plain text
#: man/man1/xyzbc-trt-gui.1:28
msgid "xyzbc-trt-gui - Vismach Virtual Machine GUI"
msgstr ""

#. type: Plain text
#: man/man1/xyzbc-trt-gui.1:32
msgid ""
"B<xyzbc-trt-gui> is one of the sample B<Vismach> GUIs for LinuxCNC, "
"simulating a 5-axis milling machine with tool-point kinematics"
msgstr ""

#. type: TH
#: man/man3/hal_add_funct_to_thread.3hal:1
#, no-wrap
msgid "hal_add_funct_to_thread"
msgstr ""

#. type: TH
#: man/man3/hal_add_funct_to_thread.3hal:1 man/man3/hal_create_thread.3hal:1
#: man/man3/hal_exit.3hal:1 man/man3/hal_export_funct.3hal:1
#: man/man3/hal_init.3hal:1 man/man3/hal_malloc.3hal:1
#: man/man3/hal_param_alias.3hal:1 man/man3/hal_param_new.3hal:1
#: man/man3/hal_parport.3hal:1 man/man3/hal_pin_alias.3hal:1
#: man/man3/hal_pin_new.3hal:1 man/man3/hal_port.3hal:1
#: man/man3/hal_ready.3hal:1 man/man3/hal_set_constructor.3hal:1
#: man/man3/hal_set_lock.3hal:1 man/man3/hal_signal_new.3hal:1
#: man/man3/hal_start_threads.3hal:1 man/man3/hal_stream.3hal:1
#: man/man3/hal_type_t.3hal:1 man/man3/intro.3hal:1
#: man/man3/PM_ROTATION_VECTOR.3:1 man/man3/rtapi_atomic.3rtapi:1
#: man/man3/rtapi_clock_set_period.3rtapi:1 man/man3/rtapi_delay.3rtapi:1
#: man/man3/rtapi_div_u64.3rtapi:16 man/man3/rtapi_exit.3rtapi:1
#: man/man3/rtapi_get_time.3rtapi:1 man/man3/rtapi_init.3rtapi:1
#: man/man3/rtapi_is.3rtapi:22 man/man3/rtapi_module_param.3rtapi:1
#: man/man3/rtapi_mutex.3rtapi:1 man/man3/rtapi_outb.3rtapi:1
#: man/man3/rtapi_parport.3rtapi:22 man/man3/rtapi_print.3rtapi:1
#: man/man3/rtapi_prio.3rtapi:1 man/man3/rtapi_region.3rtapi:1
#: man/man3/rtapi_set_msg_level.3rtapi:1 man/man3/rtapi_shmem.3rtapi:1
#: man/man3/rtapi_snprintf.3rtapi:1 man/man3/rtapi_task_new.3rtapi:1
#: man/man3/rtapi_task_pause.3rtapi:1 man/man3/rtapi_task_start.3rtapi:1
#: man/man3/rtapi_task_wait.3rtapi:1 man/man3/undocumented.3hal:1
#: man/man3/undocumented.3rtapi:1
#, no-wrap
msgid "2006-10-12"
msgstr ""

#. type: Plain text
#: man/man3/hal_add_funct_to_thread.3hal:5
msgid ""
"hal_add_funct_to_thread - cause a function to be executed at regular "
"intervals"
msgstr ""

#. type: SH
#: man/man3/hal_add_funct_to_thread.3hal:6 man/man3/hal_create_thread.3hal:6
#: man/man3/hal_exit.3hal:6 man/man3/hal_export_funct.3hal:6
#: man/man3/hal_init.3hal:6 man/man3/hal_malloc.3hal:6
#: man/man3/hal_param_alias.3hal:6 man/man3/hal_param_new.3hal:6
#: man/man3/hal_parport.3hal:6 man/man3/hal_pin_alias.3hal:6
#: man/man3/hal_pin_new.3hal:6 man/man3/hal_ready.3hal:6
#: man/man3/hal_set_constructor.3hal:6 man/man3/hal_set_lock.3hal:6
#: man/man3/hal_signal_new.3hal:6 man/man3/hal_start_threads.3hal:6
#: man/man3/hm2_allocate_bspi_tram.3hm2:9
#: man/man3/hm2_bspi_set_read_function.3hm2:9
#: man/man3/hm2_bspi_setup_chan.3hm2:8
#: man/man3/hm2_bspi_set_write_function.3hm2:9
#: man/man3/hm2_bspi_write_chan.3hm2:8 man/man3/hm2_pktuart_read.3hm2:8
#: man/man3/hm2_pktuart_send.3hm2:8 man/man3/hm2_pktuart_setup.3hm2:7
#: man/man3/hm2_tram_add_bspi_frame.3hm2:8 man/man3/hm2_uart_read.3hm2:8
#: man/man3/hm2_uart_send.3hm2:8 man/man3/hm2_uart_setup.3hm2:7
#: man/man3/PM_ROTATION_VECTOR.3:6 man/man3/rtapi_app_exit.3rtapi:6
#: man/man3/rtapi_app_main.3rtapi:6 man/man3/rtapi_atomic.3rtapi:6
#: man/man3/rtapi_bool.3rtapi:27 man/man3/rtapi_byteorder.3rtapi:27
#: man/man3/rtapi_clock_set_period.3rtapi:6 man/man3/rtapi_delay.3rtapi:6
#: man/man3/rtapi_device.3rtapi:27 man/man3/rtapi_div_u64.3rtapi:21
#: man/man3/rtapi_exit.3rtapi:6 man/man3/rtapi_firmware.3rtapi:27
#: man/man3/rtapi_get_time.3rtapi:6 man/man3/rtapi_gfp.3rtapi:27
#: man/man3/rtapi_init.3rtapi:6 man/man3/rtapi_io.3rtapi:27
#: man/man3/rtapi_is.3rtapi:27 man/man3/rtapi_list.3rtapi:27
#: man/man3/rtapi_module_param.3rtapi:6 man/man3/rtapi_mutex.3rtapi:6
#: man/man3/rtapi_open_as_root.3rtapi:6 man/man3/rtapi_outb.3rtapi:6
#: man/man3/rtapi_parport.3rtapi:27 man/man3/rtapi_pci.3rtapi:27
#: man/man3/rtapi_print.3rtapi:6 man/man3/rtapi_prio.3rtapi:6
#: man/man3/rtapi_region.3rtapi:6 man/man3/rtapi_set_msg_level.3rtapi:6
#: man/man3/rtapi_shmem.3rtapi:6 man/man3/rtapi_slab.3rtapi:27
#: man/man3/rtapi_snprintf.3rtapi:6 man/man3/rtapi_stdint.3rtapi:27
#: man/man3/rtapi_string.3rtapi:27 man/man3/rtapi_strlcpy.3rtapi:27
#: man/man3/rtapi_task_new.3rtapi:6 man/man3/rtapi_task_pause.3rtapi:6
#: man/man3/rtapi_task_self.3rtapi:6 man/man3/rtapi_task_start.3rtapi:6
#: man/man3/rtapi_task_wait.3rtapi:6
#, no-wrap
msgid "SYNTAX"
msgstr ""

#. type: Plain text
#: man/man3/hal_add_funct_to_thread.3hal:10
#, no-wrap
msgid ""
"int hal_add_funct_to_thread(const char *I<funct_name>, const char *I<thread_name>,\n"
" int position)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_add_funct_to_thread.3hal:12
msgid ""
"int hal_del_funct_from_thread(const char *I<funct_name>, const char "
"*I<thread_name>)"
msgstr ""

#. type: SH
#: man/man3/hal_add_funct_to_thread.3hal:13 man/man3/hal_create_thread.3hal:13
#: man/man3/hal_exit.3hal:10 man/man3/hal_export_funct.3hal:12
#: man/man3/hal_init.3hal:10 man/man3/hal_malloc.3hal:10
#: man/man3/hal_param_alias.3hal:11 man/man3/hal_param_new.3hal:35
#: man/man3/hal_parport.3hal:13 man/man3/hal_pin_alias.3hal:11
#: man/man3/hal_pin_new.3hal:41 man/man3/hal_port.3hal:93
#: man/man3/hal_ready.3hal:10 man/man3/hal_set_constructor.3hal:11
#: man/man3/hal_set_lock.3hal:13 man/man3/hal_signal_new.3hal:18
#: man/man3/hal_start_threads.3hal:13 man/man3/hal_stream.3hal:151
#: man/man3/rtapi_app_exit.3rtapi:12 man/man3/rtapi_app_main.3rtapi:12
#: man/man3/rtapi_atomic.3rtapi:20 man/man3/rtapi_clock_set_period.3rtapi:10
#: man/man3/rtapi_delay.3rtapi:12 man/man3/rtapi_div_u64.3rtapi:31
#: man/man3/rtapi_exit.3rtapi:10 man/man3/rtapi_init.3rtapi:10
#: man/man3/rtapi_module_param.3rtapi:37 man/man3/rtapi_mutex.3rtapi:15
#: man/man3/rtapi_open_as_root.3rtapi:12 man/man3/rtapi_outb.3rtapi:12
#: man/man3/rtapi_parport.3rtapi:34 man/man3/rtapi_print.3rtapi:19
#: man/man3/rtapi_prio.3rtapi:16 man/man3/rtapi_region.3rtapi:13
#: man/man3/rtapi_set_msg_level.3rtapi:13 man/man3/rtapi_shmem.3rtapi:16
#: man/man3/rtapi_snprintf.3rtapi:13 man/man3/rtapi_task_new.3rtapi:13
#: man/man3/rtapi_task_pause.3rtapi:12 man/man3/rtapi_task_start.3rtapi:9
#, no-wrap
msgid "ARGUMENTS"
msgstr ""

#. type: IP
#: man/man3/hal_add_funct_to_thread.3hal:14
#, no-wrap
msgid "I<funct_name>"
msgstr ""

#. type: Plain text
#: man/man3/hal_add_funct_to_thread.3hal:16
msgid "The name of the function"
msgstr ""

#. type: IP
#: man/man3/hal_add_funct_to_thread.3hal:17
#, no-wrap
msgid "I<thread_name>"
msgstr ""

#. type: Plain text
#: man/man3/hal_add_funct_to_thread.3hal:19 man/man3/hal_create_thread.3hal:16
msgid "The name of the thread"
msgstr ""

#. type: IP
#: man/man3/hal_add_funct_to_thread.3hal:20
#, no-wrap
msgid "I<position>"
msgstr ""

#. type: Plain text
#: man/man3/hal_add_funct_to_thread.3hal:27
msgid ""
"The desired location within the thread.  This determines when the function "
"will run, in relation to other functions in the thread.  A positive number "
"indicates the desired location as measured from the beginning of the thread, "
"and a negative is measured from the end.  So +1 means this function will "
"become the first one to run, +5 means it will be the fifth one to run, -2 "
"means it will be next to last, and -1 means it will be last.  Zero is "
"illegal."
msgstr ""

#. type: Plain text
#: man/man3/hal_add_funct_to_thread.3hal:32
msgid ""
"B<hal_add_funct_to_thread> adds a function exported by a realtime HAL "
"component to a realtime thread.  This determines how often and in what order "
"functions are executed."
msgstr ""

#. type: Plain text
#: man/man3/hal_add_funct_to_thread.3hal:34
msgid "B<hal_del_funct_from_thread> removes a function from a thread."
msgstr ""

#. type: SH
#: man/man3/hal_add_funct_to_thread.3hal:34 man/man3/hal_create_thread.3hal:39
#: man/man3/hal_exit.3hal:21 man/man3/hal_export_funct.3hal:46
#: man/man3/hal_init.3hal:26 man/man3/hal_malloc.3hal:29
#: man/man3/hal_param_alias.3hal:28 man/man3/hal_param_new.3hal:65
#: man/man3/hal_parport.3hal:50 man/man3/hal_pin_alias.3hal:28
#: man/man3/hal_pin_new.3hal:76 man/man3/hal_ready.3hal:20
#: man/man3/hal_set_constructor.3hal:31 man/man3/hal_set_lock.3hal:19
#: man/man3/hal_signal_new.3hal:48 man/man3/hal_start_threads.3hal:23
#: man/man3/hal_stream.3hal:207 man/man3/hm2_allocate_bspi_tram.3hm2:29
#: man/man3/hm2_bspi_set_read_function.3hm2:40
#: man/man3/hm2_bspi_setup_chan.3hm2:67
#: man/man3/hm2_bspi_set_write_function.3hm2:42
#: man/man3/hm2_bspi_write_chan.3hm2:31 man/man3/hm2_pktuart_read.3hm2:34
#: man/man3/hm2_pktuart_send.3hm2:32 man/man3/hm2_pktuart_setup.3hm2:94
#: man/man3/hm2_tram_add_bspi_frame.3hm2:32 man/man3/hm2_uart_read.3hm2:29
#: man/man3/hm2_uart_send.3hm2:29 man/man3/hm2_uart_setup.3hm2:57
#: man/man3/rtapi_app_main.3rtapi:20 man/man3/rtapi_atomic.3rtapi:59
#: man/man3/rtapi_byteorder.3rtapi:52 man/man3/rtapi_clock_set_period.3rtapi:33
#: man/man3/rtapi_delay.3rtapi:32 man/man3/rtapi_device.3rtapi:52
#: man/man3/rtapi_div_u64.3rtapi:44 man/man3/rtapi_exit.3rtapi:21
#: man/man3/rtapi_firmware.3rtapi:51 man/man3/rtapi_get_time.3rtapi:47
#: man/man3/rtapi_gfp.3rtapi:47 man/man3/rtapi_init.3rtapi:28
#: man/man3/rtapi_io.3rtapi:55 man/man3/rtapi_is.3rtapi:49
#: man/man3/rtapi_list.3rtapi:57 man/man3/rtapi_mutex.3rtapi:35
#: man/man3/rtapi_open_as_root.3rtapi:31 man/man3/rtapi_outb.3rtapi:26
#: man/man3/rtapi_parport.3rtapi:73 man/man3/rtapi_pci.3rtapi:82
#: man/man3/rtapi_print.3rtapi:54 man/man3/rtapi_prio.3rtapi:44
#: man/man3/rtapi_region.3rtapi:30 man/man3/rtapi_set_msg_level.3rtapi:25
#: man/man3/rtapi_shmem.3rtapi:62 man/man3/rtapi_slab.3rtapi:49
#: man/man3/rtapi_snprintf.3rtapi:27 man/man3/rtapi_stdint.3rtapi:67
#: man/man3/rtapi_string.3rtapi:47 man/man3/rtapi_strlcpy.3rtapi:51
#: man/man3/rtapi_task_new.3rtapi:33 man/man3/rtapi_task_pause.3rtapi:43
#: man/man3/rtapi_task_self.3rtapi:17 man/man3/rtapi_task_start.3rtapi:21
#: man/man3/rtapi_task_wait.3rtapi:17
#, no-wrap
msgid "RETURN VALUE"
msgstr ""

#. type: Plain text
#: man/man3/hal_add_funct_to_thread.3hal:36 man/man3/hal_create_thread.3hal:41
#: man/man3/hal_exit.3hal:23 man/man3/hal_export_funct.3hal:48
#: man/man3/hal_param_alias.3hal:30 man/man3/hal_param_new.3hal:67
#: man/man3/hal_pin_alias.3hal:30 man/man3/hal_ready.3hal:21
#: man/man3/hal_set_constructor.3hal:33 man/man3/hal_signal_new.3hal:50
#: man/man3/hal_start_threads.3hal:25
msgid "Returns a HAL status code."
msgstr ""

#. type: SH
#: man/man3/hal_add_funct_to_thread.3hal:37 man/man3/hal_create_thread.3hal:36
#: man/man3/hal_exit.3hal:18 man/man3/hal_init.3hal:23
#: man/man3/hal_port.3hal:116 man/man3/hal_stream.3hal:199
#: man/man3/hm2_allocate_bspi_tram.3hm2:26
#: man/man3/hm2_bspi_set_read_function.3hm2:37
#: man/man3/hm2_bspi_setup_chan.3hm2:64
#: man/man3/hm2_bspi_set_write_function.3hm2:39
#: man/man3/hm2_bspi_write_chan.3hm2:27
#: man/man3/hm2_tram_add_bspi_frame.3hm2:29 man/man3/intro.3hal:66
#: man/man3/intro.3rtapi:37 man/man3/rtapi_app_exit.3rtapi:27
#: man/man3/rtapi_app_main.3rtapi:25 man/man3/rtapi_atomic.3rtapi:57
#: man/man3/rtapi_bool.3rtapi:33 man/man3/rtapi_byteorder.3rtapi:49
#: man/man3/rtapi_clock_set_period.3rtapi:29 man/man3/rtapi_delay.3rtapi:29
#: man/man3/rtapi_device.3rtapi:50 man/man3/rtapi_div_u64.3rtapi:56
#: man/man3/rtapi_exit.3rtapi:18 man/man3/rtapi_firmware.3rtapi:49
#: man/man3/rtapi_get_time.3rtapi:62 man/man3/rtapi_gfp.3rtapi:45
#: man/man3/rtapi_init.3rtapi:25 man/man3/rtapi_io.3rtapi:51
#: man/man3/rtapi_is.3rtapi:45 man/man3/rtapi_list.3rtapi:53
#: man/man3/rtapi_module_param.3rtapi:84 man/man3/rtapi_mutex.3rtapi:29
#: man/man3/rtapi_open_as_root.3rtapi:37 man/man3/rtapi_outb.3rtapi:22
#: man/man3/rtapi_pci.3rtapi:80 man/man3/rtapi_print.3rtapi:47
#: man/man3/rtapi_prio.3rtapi:40 man/man3/rtapi_region.3rtapi:27
#: man/man3/rtapi_set_msg_level.3rtapi:22 man/man3/rtapi_shmem.3rtapi:54
#: man/man3/rtapi_slab.3rtapi:46 man/man3/rtapi_snprintf.3rtapi:24
#: man/man3/rtapi_stdint.3rtapi:65 man/man3/rtapi_string.3rtapi:44
#: man/man3/rtapi_task_new.3rtapi:30 man/man3/rtapi_task_pause.3rtapi:40
#: man/man3/rtapi_task_self.3rtapi:14 man/man3/rtapi_task_start.3rtapi:18
#: man/man3/rtapi_task_wait.3rtapi:14
#, no-wrap
msgid "REALTIME CONSIDERATIONS"
msgstr ""

#. type: Plain text
#: man/man3/hal_add_funct_to_thread.3hal:39 man/man3/hal_create_thread.3hal:38
#: man/man3/hm2_allocate_bspi_tram.3hm2:28
#: man/man3/hm2_bspi_set_read_function.3hm2:39
#: man/man3/hm2_bspi_set_write_function.3hm2:41
#: man/man3/hm2_tram_add_bspi_frame.3hm2:31
msgid ""
"Call only from realtime init code, not from user space or realtime code."
msgstr ""

#. type: Plain text
#: man/man3/hal_add_funct_to_thread.3hal:41
msgid "B<hal_thread_new(3hal)>, B<hal_export_funct(3hal)>"
msgstr ""

#. type: TH
#: man/man3/hal_create_thread.3hal:1
#, no-wrap
msgid "hal_create_thread"
msgstr ""

#. type: Plain text
#: man/man3/hal_create_thread.3hal:5
msgid "hal_create_thread - Create a HAL thread"
msgstr ""

#. type: Plain text
#: man/man3/hal_create_thread.3hal:9
msgid ""
"int hal_create_thread(const char *I<name>, unsigned long I<period>, int "
"I<uses_fp>)"
msgstr ""

#. type: Plain text
#: man/man3/hal_create_thread.3hal:12
msgid "int hal_thread_delete(const char *I<name>)"
msgstr ""

#. type: IP
#: man/man3/hal_create_thread.3hal:14 man/man3/hal_export_funct.3hal:13
#: man/man3/hal_param_new.3hal:36 man/man3/hal_pin_new.3hal:42
#: man/man3/rtapi_region.3rtapi:20
#, no-wrap
msgid "I<name>"
msgstr ""

#. type: IP
#: man/man3/hal_create_thread.3hal:17
#, no-wrap
msgid "I<period>"
msgstr ""

#. type: Plain text
#: man/man3/hal_create_thread.3hal:19
msgid "The interval, in nanoseconds, between iterations of the thread"
msgstr ""

#. type: IP
#: man/man3/hal_create_thread.3hal:20 man/man3/hal_export_funct.3hal:22
#: man/man3/rtapi_task_new.3rtapi:21
#, no-wrap
msgid "I<uses_fp>"
msgstr ""

#. type: Plain text
#: man/man3/hal_create_thread.3hal:23
msgid ""
"Must be nonzero if a function which uses floating-point will be attached to "
"this thread."
msgstr ""

#. type: Plain text
#: man/man3/hal_create_thread.3hal:27
msgid ""
"B<hal_create_thread> establishes a realtime thread that will execute one or "
"more HAL functions periodically."
msgstr ""

#. type: Plain text
#: man/man3/hal_create_thread.3hal:33
msgid ""
"All thread periods are rounded to integer multiples of the hardware timer "
"period, and the timer period is based on the first thread created.  Threads "
"must be created in order, from the fastest to the slowest.  HAL assigns "
"decreasing priorities to threads that are created later, so creating them "
"from fastest to slowest results in rate monotonic priority scheduling."
msgstr ""

#. type: Plain text
#: man/man3/hal_create_thread.3hal:35
msgid "B<hal_delete_thread> deletes a previously created thread."
msgstr ""

#. type: Plain text
#: man/man3/hal_create_thread.3hal:43
msgid "B<hal_export_funct(3hal)>"
msgstr ""

#. type: TH
#: man/man3/hal_exit.3hal:1
#, no-wrap
msgid "hal_exit"
msgstr ""

#. type: Plain text
#: man/man3/hal_exit.3hal:5
msgid "hal_exit - Shut down HAL"
msgstr ""

#. type: Plain text
#: man/man3/hal_exit.3hal:9
msgid "int hal_exit(int I<comp_id>)"
msgstr ""

#. type: IP
#: man/man3/hal_exit.3hal:11 man/man3/hal_export_funct.3hal:31
#: man/man3/hal_param_new.3hal:49 man/man3/hal_parport.3hal:14
#: man/man3/hal_pin_new.3hal:57 man/man3/hal_ready.3hal:11
#, no-wrap
msgid "I<comp_id>"
msgstr ""

#. type: Plain text
#: man/man3/hal_exit.3hal:13 man/man3/hal_export_funct.3hal:33
#: man/man3/hal_param_new.3hal:52 man/man3/hal_parport.3hal:16
#: man/man3/hal_ready.3hal:13
msgid "A HAL component identifier returned by an earlier call to B<hal_init>."
msgstr ""

#. type: Plain text
#: man/man3/hal_exit.3hal:17
msgid ""
"B<hal_exit> shuts down and cleans up HAL and RTAPI.  It must be called prior "
"to exit by any module that called B<hal_init>."
msgstr ""

#. type: Plain text
#: man/man3/hal_exit.3hal:20
msgid ""
"Call only from within user or init/cleanup code, not from realtime tasks."
msgstr ""

#. type: TH
#: man/man3/hal_export_funct.3hal:1
#, no-wrap
msgid "hal_export_funct"
msgstr ""

#. type: Plain text
#: man/man3/hal_export_funct.3hal:5
msgid "hal_export_funct - create a realtime function callable from a thread"
msgstr ""

#. type: Plain text
#: man/man3/hal_export_funct.3hal:9
msgid "typedef void(*hal_funct_t)(void * I<arg>, long I<period>)"
msgstr ""

#. type: Plain text
#: man/man3/hal_export_funct.3hal:11
msgid ""
"int hal_export_funct(const char *I<name>, hal_funct_t I<funct>, void "
"*I<arg>, int I<uses_fp>, int I<reentrant>, int I<comp_id>)"
msgstr ""

#. type: Plain text
#: man/man3/hal_export_funct.3hal:15
msgid "The name of the function."
msgstr ""

#. type: IP
#: man/man3/hal_export_funct.3hal:16
#, no-wrap
msgid "I<funct>"
msgstr ""

#. type: Plain text
#: man/man3/hal_export_funct.3hal:18
msgid "The pointer to the function"
msgstr ""

#. type: IP
#: man/man3/hal_export_funct.3hal:19 man/man3/rtapi_task_new.3rtapi:16
#, no-wrap
msgid "I<arg>"
msgstr ""

#. type: Plain text
#: man/man3/hal_export_funct.3hal:21
msgid "The argument to be passed as the first parameter of I<funct>"
msgstr ""

#. type: Plain text
#: man/man3/hal_export_funct.3hal:25
msgid ""
"Nonzero if the function uses floating-point operations, including assignment "
"of floating point values with \"=\"."
msgstr ""

#. type: IP
#: man/man3/hal_export_funct.3hal:26
#, no-wrap
msgid "I<reentrant>"
msgstr ""

#. type: Plain text
#: man/man3/hal_export_funct.3hal:30
msgid ""
"If reentrant is non-zero, the function may be preempted and called again "
"before the first call completes.  Otherwise, it may only be added to one "
"thread."
msgstr ""

#. type: Plain text
#: man/man3/hal_export_funct.3hal:38
msgid ""
"B<hal_export_funct> makes a realtime function provided by a component "
"available to the system.  A subsequent call to B<hal_add_funct_to_thread> "
"can be used to schedule the execution of the function as needed by the "
"system."
msgstr ""

#. type: Plain text
#: man/man3/hal_export_funct.3hal:43
msgid ""
"When this function is placed on a HAL thread, and HAL threads are started, "
"I<funct> is called repeatedly with two arguments: I<void *arg> is the same "
"value that was given to B<hal_export_funct>, and I<long period> is the "
"interval between calls in nanoseconds."
msgstr ""

#. type: Plain text
#: man/man3/hal_export_funct.3hal:45
msgid "Each call to the function should do a small amount of work and return."
msgstr ""

#. type: Plain text
#: man/man3/hal_export_funct.3hal:50
msgid "B<hal_create_thread(3hal)>, B<hal_add_funct_to_thread(3hal)>"
msgstr ""

#. type: TH
#: man/man3/hal_init.3hal:1
#, no-wrap
msgid "hal_init"
msgstr ""

#. type: Plain text
#: man/man3/hal_init.3hal:5
msgid "hal_init - Sets up HAL and RTAPI"
msgstr ""

#. type: Plain text
#: man/man3/hal_init.3hal:9
#, no-wrap
msgid " int hal_init(const char *I<modname>)\n"
msgstr ""

#. type: IP
#: man/man3/hal_init.3hal:11 man/man3/rtapi_init.3rtapi:11
#, no-wrap
msgid "I<modname>"
msgstr ""

#. type: Plain text
#: man/man3/hal_init.3hal:13
msgid "The name of this HAL module"
msgstr ""

#. type: Plain text
#: man/man3/hal_init.3hal:19
msgid ""
"B<hal_init> sets up HAL and RTAPI.  It must be called by any module that "
"intends to use the API, before any other RTAPI calls."
msgstr ""

#. type: Plain text
#: man/man3/hal_init.3hal:22
msgid ""
"I<modname> must point to a string that identifies the module.  The string "
"may be no longer than B<HAL_NAME_LEN> characters."
msgstr ""

#. type: Plain text
#: man/man3/hal_init.3hal:25 man/man3/hm2_bspi_setup_chan.3hm2:66
#: man/man3/rtapi_exit.3rtapi:20 man/man3/rtapi_init.3rtapi:27
msgid ""
"Call only from within user or init/cleanup code, not from relatime tasks."
msgstr ""

#. type: Plain text
#: man/man3/hal_init.3hal:29
msgid ""
"On success, returns a positive integer module ID, which is used for "
"subsequent calls to HAL and rtapi APIs.  On failure, returns a HAL error "
"code."
msgstr ""

#. type: TH
#: man/man3/hal_malloc.3hal:1
#, no-wrap
msgid "hal_malloc"
msgstr ""

#. type: Plain text
#: man/man3/hal_malloc.3hal:5
msgid "hal_malloc - Allocate space in the HAL shared memory area"
msgstr ""

#. type: Plain text
#: man/man3/hal_malloc.3hal:9
#, no-wrap
msgid " void *hal_malloc(long int I<size>)\n"
msgstr ""

#. type: IP
#: man/man3/hal_malloc.3hal:11 man/man3/rtapi_region.3rtapi:17
#: man/man3/rtapi_shmem.3rtapi:23
#, no-wrap
msgid "I<size>"
msgstr ""

#. type: Plain text
#: man/man3/hal_malloc.3hal:13
msgid "Gives the size, in bytes, of the block."
msgstr ""

#. type: Plain text
#: man/man3/hal_malloc.3hal:21
msgid ""
"B<hal_malloc> allocates a block of memory from the main HAL shared memory "
"area.  It should be used by all components to allocate memory for HAL pins "
"and parameters.  It allocates `size' bytes, and returns a pointer to the "
"allocated space, or NULL (0) on error.  The returned pointer will be "
"properly aligned for any type HAL supports.  A component should allocate "
"during initialization all the memory it needs."
msgstr ""

#. type: Plain text
#: man/man3/hal_malloc.3hal:28
msgid ""
"The allocator is very simple, and there is no `free'.  The entire HAL shared "
"memory area is freed when the last component calls B<hal_exit>.  This means "
"that if you continuously install and remove one component while other "
"components are present, you eventually will fill up the shared memory and an "
"install will fail.  Removing all components completely clears memory and you "
"start fresh."
msgstr ""

#. type: Plain text
#: man/man3/hal_malloc.3hal:31
msgid ""
"A pointer to the allocated space, which is properly aligned for any variable "
"HAL supports.  Returns NULL on error."
msgstr ""

#. type: TH
#: man/man3/hal_param_alias.3hal:1
#, no-wrap
msgid "hal_param_alias"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_alias.3hal:5
msgid "hal_param_alias - create an alternate name for a param"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_alias.3hal:10
msgid ""
"int B<hal_param_alias>(const char *B<original_name>, const char *B<alias>);"
msgstr ""

#. type: IP
#: man/man3/hal_param_alias.3hal:12 man/man3/hal_pin_alias.3hal:12
#, no-wrap
msgid "I<original_name>"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_alias.3hal:14
msgid "The original name of the param"
msgstr ""

#. type: IP
#: man/man3/hal_param_alias.3hal:15 man/man3/hal_pin_alias.3hal:15
#, no-wrap
msgid "I<alias>"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_alias.3hal:18
msgid ""
"The alternate name that may be used to refer to the param, or NULL to remove "
"any alternate name."
msgstr ""

#. type: Plain text
#: man/man3/hal_param_alias.3hal:22
msgid ""
"A param may have two names: the original name (the one that was passed to a "
"B<hal_param_new> function) and an alias."
msgstr ""

#. type: Plain text
#: man/man3/hal_param_alias.3hal:27
msgid ""
"Usually, aliases are for the convenience of users and should be created and "
"destroyed via halcmd.  However, in some cases it is sensible to create "
"aliases directly in a component.  These cases include the case where a param "
"is renamed, to preserve compatibility with old versions."
msgstr ""

#. type: Plain text
#: man/man3/hal_param_alias.3hal:32
msgid "B<hal_pin_alias>(3)"
msgstr ""

#. type: TH
#: man/man3/hal_param_new.3hal:1
#, no-wrap
msgid "hal_param_new"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:5
msgid "hal_param_new - creates a HAL parameter"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:10
#, no-wrap
msgid " int hal_param_bit_new(const char *I<name>, hal_param_dir_t I<dir>, hal_bit_t * I<data_addr>, int I<comp_id>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:13
#, no-wrap
msgid " int hal_param_float_new(const char *I<name>, hal_param_dir_t I<dir>, hal_float_t * I<data_addr>, int I<comp_id>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:16
#, no-wrap
msgid " int hal_param_u32_new(const char *I<name>, hal_param_dir_t I<dir>, hal_u32_t * I<data_addr>, int I<comp_id>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:19
#, no-wrap
msgid " int hal_param_s32_new(const char *I<name>, hal_param_dir_t I<dir>, hal_s32_t * I<data_addr>, int I<comp_id>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:22
#, no-wrap
msgid " int hal_param_bit_newf(hal_param_dir_t I<dir>, hal_bit_t * I<data_addr>, int I<comp_id>, const char *I<fmt>, I<...>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:25
#, no-wrap
msgid " int hal_param_float_newf(hal_param_dir_t I<dir>, hal_float_t * I<data_addr>, int I<comp_id>, const char *I<fmt>, I<...>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:28
#, no-wrap
msgid " int hal_param_u32_newf(hal_param_dir_t I<dir>, hal_u32_t * I<data_addr>, int I<comp_id>, const char *I<fmt>, I<...>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:31
#, no-wrap
msgid " int hal_param_s32_newf(hal_param_dir_t I<dir>, hal_s32_t * I<data_addr>, int I<comp_id>, const char *I<fmt>, I<...>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:34
#, no-wrap
msgid " int hal_param_new(const char *I<name>, hal_type_t I<type>, hal_param_dir_t I<dir>, void *I<data_addr>, int I<comp_id>) \n"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:39
msgid "The name to give to the created parameter"
msgstr ""

#. type: IP
#: man/man3/hal_param_new.3hal:39 man/man3/hal_pin_new.3hal:44
#, no-wrap
msgid "I<dir>"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:45
msgid ""
"The direction of the parameter, from the viewpoint of the component.  It may "
"be one of B<HAL_RO>, or B<HAL_RW> A component may assign a value to any "
"parameter, but other programs (such as halcmd) may only assign a value to a "
"parameter that is B<HAL_RW>."
msgstr ""

#. type: TP
#: man/man3/hal_param_new.3hal:45
#, no-wrap
msgid "I<data_addr>"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:49
msgid ""
"The address of the data, which must lie within memory allocated by "
"B<hal_malloc>."
msgstr ""

#. type: IP
#: man/man3/hal_param_new.3hal:52 man/man3/rtapi_print.3rtapi:28
#, no-wrap
msgid "I<fmt,\\ ...>"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:55
msgid "A printf-style format string and arguments"
msgstr ""

#. type: IP
#: man/man3/hal_param_new.3hal:55 man/man3/hal_pin_new.3hal:63
#: man/man3/hal_signal_new.3hal:25
#, no-wrap
msgid "I<type>"
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:58
msgid "The type of the parameter, as specified in B<hal_type_t(3hal)>."
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:61
msgid "The B<hal_param_new> family of functions create a new I<param> object."
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:64 man/man3/hal_pin_new.3hal:75
msgid ""
"There are functions for each of the data types that the HAL supports.  Pins "
"may only be linked to signals of the same type."
msgstr ""

#. type: Plain text
#: man/man3/hal_param_new.3hal:68 man/man3/hal_signal_new.3hal:52
msgid "B<hal_type_t(3hal)>"
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:5
msgid "hal_parport - portable access to PC-style parallel ports"
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:9
msgid "#include \"hal_parport.h\""
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:11
msgid ""
"int B<hal_parport_get>(int I<comp_id>, hal_parport_t *I<port>, unsigned "
"short I<base>, unsigned short I<base_hi>, unsigned int I<modes>)"
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:13
msgid "void B<hal_parport_release>(hal_parport_t *I<port>)"
msgstr ""

#. type: IP
#: man/man3/hal_parport.3hal:16 man/man3/rtapi_outb.3rtapi:13
#: man/man3/rtapi_parport.3rtapi:37
#, no-wrap
msgid "I<port>"
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:18
msgid "A pointer to a hal_parport_t structure"
msgstr ""

#. type: IP
#: man/man3/hal_parport.3hal:18 man/man3/rtapi_parport.3rtapi:39
#: man/man3/rtapi_region.3rtapi:14
#, no-wrap
msgid "I<base>"
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:21 man/man3/rtapi_parport.3rtapi:42
msgid ""
"The base address of the port (if port E<gt>= 16) or the linux port number of "
"the port (if port E<lt> 16)"
msgstr ""

#. type: IP
#: man/man3/hal_parport.3hal:21 man/man3/rtapi_parport.3rtapi:42
#, no-wrap
msgid "I<base_hi>"
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:24 man/man3/rtapi_parport.3rtapi:45
msgid ""
"The \"high\" address of the port (location of the ECP registers), 0 to use a "
"probed high address, or -1 to disable the high address"
msgstr ""

#. type: IP
#: man/man3/hal_parport.3hal:24 man/man3/rtapi_parport.3rtapi:45
#, no-wrap
msgid "I<modes>"
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:30 man/man3/rtapi_parport.3rtapi:51
msgid ""
"Advise the driver of the desired port modes, from E<lt>linux/parport."
"hE<gt>.  If a linux-detected port does not provide the requested modes, a "
"warning is printed with rtapi_print_msg.  This does not make the port "
"request fail, because unfortunately, many systems that have working EPP "
"parports are not detected as such by Linux."
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:34
msgid ""
"B<hal_parport_get> allocates a parallel port for exclusive use of the named "
"HAL component.  The port must be released with B<hal_parport_release> before "
"the component exits with B<hal_exit>."
msgstr ""

#. type: SH
#: man/man3/hal_parport.3hal:34 man/man3/rtapi_parport.3rtapi:57
#, no-wrap
msgid "HIGH ADDRESS PROBING"
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:39 man/man3/rtapi_parport.3rtapi:62
msgid ""
"If the port is a parallel port known to Linux, and Linux detected a high I/O "
"address, this value is used.  Otherwise, if base+0x400 is not registered to "
"any device, it is used.  Otherwise, no address is used.  If no high address "
"is detected, port-E<gt>base_hi is 0."
msgstr ""

#. type: SH
#: man/man3/hal_parport.3hal:39 man/man3/rtapi_parport.3rtapi:62
#, no-wrap
msgid "PARPORT STRUCTURE"
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:48
#, no-wrap
msgid ""
"typedef struct\n"
"{\n"
"    unsigned short base;\n"
"    unsigned short base_hi;\n"
"    .... // and further unspecified fields\n"
"} hal_parport_t;\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:55
msgid ""
"B<hal_parport_get> returns a HAL status code.  On success, I<port> is filled "
"out with information about the allocated port.  On failure, the contents of "
"I<port> are undefined except that it is safe (but not required) to pass this "
"port to B<hal_parport_release>."
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:57
msgid "B<hal_parport_release> does not return a value.  It always succeeds."
msgstr ""

#. type: Plain text
#: man/man3/hal_parport.3hal:58
msgid "In new code, prefer use of rtapi_parport to hal_parport."
msgstr ""

#. type: TH
#: man/man3/hal_pin_alias.3hal:1
#, no-wrap
msgid "hal_pin_alias"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_alias.3hal:5
msgid "hal_pin_alias - creates an alternate name for a pin"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_alias.3hal:10
msgid ""
"int B<hal_pin_alias>(const char *B<original_name>, const char *B<alias>);"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_alias.3hal:14
msgid "The original name of the pin"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_alias.3hal:18
msgid ""
"The alternate name that may be used to refer to the pin, or NULL to remove "
"any alternate name."
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_alias.3hal:22
msgid ""
"A pin may have two names: the original name (the one that was passed to a "
"B<hal_pin_new> function) and an alias."
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_alias.3hal:27
msgid ""
"Usually, aliases are for the convenience of users and should be created and "
"destroyed via halcmd.  However, in some cases it is sensible to create "
"aliases directly in a component.  These cases include the case where a pin "
"is renamed, to preserve compatibility with old versions."
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_alias.3hal:32
msgid "B<hal_param_alias>(3)"
msgstr ""

#. type: TH
#: man/man3/hal_pin_new.3hal:1
#, no-wrap
msgid "hal_pin_new"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:5
msgid "hal_pin_new - creates a HAL pin"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:10
#, no-wrap
msgid " int hal_pin_bit_new(const char *I<name>, hal_pin_dir_t I<dir>, hal_bit_t ** I<data_ptr_addr>, int I<comp_id>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:13
#, no-wrap
msgid " int hal_pin_float_new(const char *I<name>, hal_pin_dir_t I<dir>, hal_float_t ** I<data_ptr_addr>, int I<comp_id>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:16
#, no-wrap
msgid " int hal_pin_u32_new(const char *I<name>, hal_pin_dir_t I<dir>, hal_u32_t ** I<data_ptr_addr>, int I<comp_id>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:19
#, no-wrap
msgid " int hal_pin_s32_new(const char *I<name>, hal_pin_dir_t I<dir>, hal_s32_t ** I<data_ptr_addr>, int I<comp_id>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:22
#, no-wrap
msgid " int hal_pin_port_new(const char *I<name>, hal_pin_dir_t I<dir>, hal_port_t ** I<data_ptr_addr>, int I<comp_id>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:25
#, no-wrap
msgid " int hal_pin_bit_newf(hal_pin_dir_t I<dir>, hal_bit_t ** I<data_ptr_addr>, int I<comp_id>, const char *I<fmt>, I<...>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:28
#, no-wrap
msgid " int hal_pin_float_newf(hal_pin_dir_t I<dir>, hal_float_t ** I<data_ptr_addr>, int I<comp_id>, const char *I<fmt>, I<...>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:31
#, no-wrap
msgid " int hal_pin_u32_newf(hal_pin_dir_t I<dir>, hal_u32_t ** I<data_ptr_addr>, int I<comp_id>, const char *I<fmt>, I<...>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:34
#, no-wrap
msgid " int hal_pin_s32_newf(hal_pin_dir_t I<dir>, hal_s32_t ** I<data_ptr_addr>, int I<comp_id>, const char *I<fmt>, I<...>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:37
#, no-wrap
msgid " int hal_pin_port_newf(hal_pin_dir_t I<dir>, hal_port_t ** I<data_ptr_addr>, int I<comp_id>, const char *I<fmt>, I<...>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:40
#, no-wrap
msgid " int hal_pin_new(const char *I<name>, hal_type_t I<type>, hal_pin_dir_t I<dir>, void **I<data_ptr_addr>, int I<comp_id>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:44
msgid "name of the pin"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:52
msgid ""
"The direction of the pin, from the viewpoint of the component.  It may be "
"one of B<HAL_IN>, B<HAL_OUT>, or B<HAL_IO>.  Any number of B<HAL_IN> or "
"B<HAL_IO> pins may be connected to the same signal, but at most one "
"B<HAL_OUT> pin is permitted.  A component may assign a value to a pin that "
"is B<HAL_OUT> or B<HAL_IO>, but may not assign a value to a pin that is "
"B<HAL_IN>."
msgstr ""

#. type: IP
#: man/man3/hal_pin_new.3hal:53
#, no-wrap
msgid "I<data_ptr_addr>"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:56
msgid ""
"The address of the pointer-to-data, which must lie within memory allocated "
"by B<hal_malloc>."
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:59
msgid "HAL component identifier returned by an earlier call to B<hal_init>."
msgstr ""

#. type: IP
#: man/man3/hal_pin_new.3hal:60
#, no-wrap
msgid "I<fmt,>"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:62
msgid "printf-style format string and arguments"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:65
msgid "The type of the param, as specified in B<hal_type_t(3hal)>."
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:72
msgid ""
"The B<hal_pin_new> family of functions create a new I<pin> object.  Once a "
"pin has been created, it can be linked to a signal object using "
"B<hal_link>.  A pin contains a pointer, and the component that owns the pin "
"can dereference the pointer to access whatever signal is linked to the pin.  "
"(If no signal is linked, it points to a dummy signal.)"
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:78
msgid "Returns 0 on success, or a negative errno value on failure."
msgstr ""

#. type: Plain text
#: man/man3/hal_pin_new.3hal:80
msgid "B<hal_type_t(3hal)>, B<hal_link(3hal)>"
msgstr ""

#. type: TH
#: man/man3/hal_port.3hal:1
#, no-wrap
msgid "hal_port"
msgstr ""

#. type: groff code
#: man/man3/hal_port.3hal:2 man/man3/hal_stream.3hal:2
#, no-wrap
msgid ""
".de  FU\n"
".sp\n"
".ti -4\n"
"\\\\$*\n"
"..\n"
msgstr ""

#. type: groff code
#: man/man3/hal_port.3hal:7 man/man3/hal_stream.3hal:7
#, no-wrap
msgid ""
".de  FF\n"
".br\n"
".ti -4\n"
"\\\\$*\n"
"..\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:15
msgid ""
"hal_port - a HAL pin type that acts as an asynchronous one way byte stream"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:41
msgid ""
"A HAL port pin is a HAL pin that acts as a one way byte oriented data stream "
"in real-time.  An output port on any component may be connected to an input "
"port on any other component via a signal.  Data written on the output pin "
"becomes accessible to the input pin.  A HAL port signal may link only a "
"single writer and a single reader."
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:43
msgid ""
"A port also buffers data. Users should determine the proper buffer size "
"based upon their intended application."
msgstr ""

#. type: SS
#: man/man3/hal_port.3hal:45
#, no-wrap
msgid "hal_port_read"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:50
msgid ""
"Reads count bytes from the port into destination buffer dest.  hal_port_read "
"will read I<count> bytes if and only if I<count> bytes are available for "
"reading and otherwise it will leave the port unaffected.  Returns true if "
"count bytes were read and false otherwise.  This function should only be "
"called by the component that owns the IN PORT pin."
msgstr ""

#. type: SS
#: man/man3/hal_port.3hal:52
#, no-wrap
msgid "hal_port_peek"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:57
msgid ""
"Behaves the same as hal_port_read, however it does not consume bytes from "
"the HAL port.  Repeated calls to hal_port_peek will return the same data.  "
"Returns true if count bytes were read and false otherwise.  This function "
"should only be called by the component that owns the IN PORT pin."
msgstr ""

#. type: SS
#: man/man3/hal_port.3hal:59
#, no-wrap
msgid "hal_port_peek_commit"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:64
msgid ""
"Advances the read position in the port buffer by count bytes.  A "
"hal_port_peek followed by a hal_port_peek_commit would function equivalently "
"to hal_port_read given the same count value.  Returns true if count readable "
"bytes were skipped and are no longer accessible and false if no bytes wer "
"skipped.  This function should only be called by the component that owns the "
"IN PORT pin."
msgstr ""

#. type: SS
#: man/man3/hal_port.3hal:66
#, no-wrap
msgid "hal_port_readable"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:68
msgid ""
"Returns the number of bytes available for reading from port. It is safe to "
"call this function from any component."
msgstr ""

#. type: SS
#: man/man3/hal_port.3hal:69
#, no-wrap
msgid "hal_port_clear"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:72
msgid ""
"Emptys a given port of all data.  hal_port_clear should only be called by "
"the component that owns the IN PORT pin."
msgstr ""

#. type: SS
#: man/man3/hal_port.3hal:73
#, no-wrap
msgid "hal_port_write"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:77
msgid ""
"Writes count bytes from src into the port.  Returns true if count bytes were "
"written and false otherwise.  This function should only be called by the "
"component that owns the OUT PORT pin."
msgstr ""

#. type: SS
#: man/man3/hal_port.3hal:78
#, no-wrap
msgid "hal_port_writable"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:81
msgid ""
"Returns the number of bytes that can be written into the port.  It is safe "
"to call this function from any component."
msgstr ""

#. type: SS
#: man/man3/hal_port.3hal:82
#, no-wrap
msgid "hal_port_buffer_size"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:85
msgid ""
"Returns the maximum number of bytes that a port can buffer.  It is safe to "
"call this function from any component."
msgstr ""

#. type: SS
#: man/man3/hal_port.3hal:86
#, no-wrap
msgid "hal_port_wait_readable"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:88
msgid ""
"Waits until the port has count bytes or more available for reading or the "
"stop flag is set."
msgstr ""

#. type: SS
#: man/man3/hal_port.3hal:89
#, no-wrap
msgid "hal_port_wait_writable"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:91
msgid ""
"Waits until the port has count bytes or more available for writing or the "
"stop flag is set."
msgstr ""

#. type: IP
#: man/man3/hal_port.3hal:94
#, no-wrap
msgid "B<hal_port_t>"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:96
msgid "A handle to a port object. Created by hal_pin_new"
msgstr ""

#. type: IP
#: man/man3/hal_port.3hal:97
#, no-wrap
msgid "B<dest>"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:99
msgid ""
"An array of bytes that hal_port_read and hal_port_peek will copy data into. "
"This must be allocated by the caller and be at least count bytes long."
msgstr ""

#. type: IP
#: man/man3/hal_port.3hal:100
#, no-wrap
msgid "B<count>"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:102
msgid ""
"The number of bytes that hal_port_read, hal_port_peek, and hal_port_write "
"will copy in to dest or out from src"
msgstr ""

#. type: IP
#: man/man3/hal_port.3hal:103
#, no-wrap
msgid "B<src>"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:105
msgid ""
"An array of bytes that hal_port_write will copy data from into the port "
"buffer. This must be of size count bytes or larger."
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:110 man/man3/hal_stream.3hal:192
msgid ""
"A pointer to a value which is monitored while waiting.  If it is nonzero, "
"the wait operation returns early.  This allows a wait call to be safely "
"terminated in the case of a signal."
msgstr ""

#. type: SH
#: man/man3/hal_port.3hal:111 man/man3/hal_stream.3hal:193
#, no-wrap
msgid "SAMPLE CODE"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:115
#, no-wrap
msgid ""
"In the source tree under\n"
" src/hal/components/raster.comp is a realtime component intended for laser control.\n"
" src/tests/raster is a test program that also programs the raster component from python.\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:119
msgid ""
"B<hal_port_read>, B<hal_port_peek>, B<hal_port_peek_commit>, "
"B<hal_port_readable>, B<hal_port_clear>, B<hal_port_write>, "
"B<hal_port_writable>, B<hal_port_buffer_size> may be called from realtime "
"code."
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:122
msgid ""
"B<hal_port_wait_writable>, B<hal_port_wait_readable> may be called from "
"ULAPI code."
msgstr ""

#. type: Plain text
#: man/man3/hal_port.3hal:125
msgid "B<raster>(9),"
msgstr ""

#. type: TH
#: man/man3/hal_ready.3hal:1 man/man3/PM_ROTATION_VECTOR.3:1
#: man/man3/rtapi_atomic.3rtapi:1 man/man3/rtapi_bool.3rtapi:22
#: man/man3/rtapi_byteorder.3rtapi:22 man/man3/rtapi_device.3rtapi:22
#: man/man3/rtapi_firmware.3rtapi:22 man/man3/rtapi_gfp.3rtapi:22
#: man/man3/rtapi_io.3rtapi:22 man/man3/rtapi_list.3rtapi:22
#: man/man3/rtapi_pci.3rtapi:22 man/man3/rtapi_slab.3rtapi:22
#: man/man3/rtapi_stdint.3rtapi:22 man/man3/rtapi_string.3rtapi:22
#: man/man3/rtapi_strlcpy.3rtapi:22
#, no-wrap
msgid "funct"
msgstr ""

#. type: Plain text
#: man/man3/hal_ready.3hal:5
msgid "hal_ready - indicates that this component is ready"
msgstr ""

#. type: Plain text
#: man/man3/hal_ready.3hal:9
#, no-wrap
msgid " hal_ready(int I<comp_id>)\n"
msgstr ""

#. type: Plain text
#: man/man3/hal_ready.3hal:19
msgid ""
"B<hal_ready> indicates that this component is ready (has created all its "
"pins, parameters, and functions).  This must be called in any realtime HAL "
"component before its B<rtapi_app_init> exits, and in any userspace component "
"before it enters its main loop."
msgstr ""

#. type: TH
#: man/man3/hal_set_constructor.3hal:1
#, no-wrap
msgid "hal_set_constructor"
msgstr ""

#. type: Plain text
#: man/man3/hal_set_constructor.3hal:5
msgid "hal_set_constructor - sets the constructor function for this component"
msgstr ""

#. type: Plain text
#: man/man3/hal_set_constructor.3hal:10
msgid ""
"typedef int (*hal_constructor_t)(const char *prefix, const char *arg); int "
"hal_set_constructor(int I<comp_id>, hal_constructor_t I<constructor>)"
msgstr ""

#. type: Plain text
#: man/man3/hal_set_constructor.3hal:15
msgid ""
"I<comp_id> A HAL component identifier returned by an earlier call to "
"B<hal_init>."
msgstr ""

#. type: Plain text
#: man/man3/hal_set_constructor.3hal:20
msgid ""
"I<prefix> The prefix to be given to the pins, parameters, and functions in "
"the new instance"
msgstr ""

#. type: Plain text
#: man/man3/hal_set_constructor.3hal:24
msgid ""
"arg An argument that may be used by the component to customize this instance."
msgstr ""

#. type: Plain text
#: man/man3/hal_set_constructor.3hal:30
msgid ""
"As an experimental feature in HAL 2.1, components may be I<constructable>.  "
"Such a component may create pins and parameters not only at the time the "
"module is loaded, but it may create additional pins and parameters, and "
"functions on demand."
msgstr ""

#. type: Plain text
#: man/man3/hal_set_constructor.3hal:35
msgid "B<halcmd(1)>"
msgstr ""

#. type: TH
#: man/man3/hal_set_lock.3hal:1
#, no-wrap
msgid "hal_set_lock"
msgstr ""

#. type: Plain text
#: man/man3/hal_set_lock.3hal:5
msgid "hal_set_lock, hal_get_lock - Set or get the HAL lock level"
msgstr ""

#. type: Plain text
#: man/man3/hal_set_lock.3hal:9
msgid "int hal_set_lock(unsigned char I<lock_type>)"
msgstr ""

#. type: Plain text
#: man/man3/hal_set_lock.3hal:12
msgid "int hal_get_lock()"
msgstr ""

#. type: IP
#: man/man3/hal_set_lock.3hal:14
#, no-wrap
msgid "I<lock_type>"
msgstr ""

#. type: Plain text
#: man/man3/hal_set_lock.3hal:16
msgid ""
"The desired lock type, which may be a bitwise combination of: "
"B<HAL_LOCK_LOAD>, B<HAL_LOCK_CONFIG>, B<HAL_LOCK_PARAMS>, or "
"B<HAL_LOCK_PARAMS>.  B<HAL_LOCK_NONE> or 0 locks nothing, and B<HAL_LOCK_ALL "
"locks everything.>"
msgstr ""

#. type: Plain text
#: man/man3/hal_set_lock.3hal:21
msgid ""
"B<hal_set_lock> Returns a HAL status code.  B<hal_get_lock> returns the "
"current HAL lock level or a HAL status code."
msgstr ""

#. type: TH
#: man/man3/hal_signal_new.3hal:1
#, no-wrap
msgid "hal_signal_new"
msgstr ""

#. type: Plain text
#: man/man3/hal_signal_new.3hal:5
msgid ""
"hal_signal_new, hal_signal_delete, hal_link, hal_unlink - Manipulate HAL "
"signals"
msgstr ""

#. type: Plain text
#: man/man3/hal_signal_new.3hal:9
msgid "int hal_signal_new(const char *I<signal_name>, hal_type_t I<type>)"
msgstr ""

#. type: Plain text
#: man/man3/hal_signal_new.3hal:12
msgid "int hal_signal_delete(const char *I<signal_name>)"
msgstr ""

#. type: Plain text
#: man/man3/hal_signal_new.3hal:15
msgid "int hal_link(const char *I<pin_name>, const char *I<signal_name>)"
msgstr ""

#. type: Plain text
#: man/man3/hal_signal_new.3hal:18
msgid "int hal_unlink(const char *I<pin_name>)"
msgstr ""

#. type: IP
#: man/man3/hal_signal_new.3hal:19
#, no-wrap
msgid "I<signal_name>"
msgstr ""

#. type: Plain text
#: man/man3/hal_signal_new.3hal:21
msgid "The name of the signal"
msgstr ""

#. type: IP
#: man/man3/hal_signal_new.3hal:22
#, no-wrap
msgid "I<pin_name>"
msgstr ""

#. type: Plain text
#: man/man3/hal_signal_new.3hal:24
msgid "The name of the pin"
msgstr ""

#. type: Plain text
#: man/man3/hal_signal_new.3hal:27
msgid "The type of the signal, as specified in B<hal_type_t(3hal)>."
msgstr ""

#. type: Plain text
#: man/man3/hal_signal_new.3hal:35
msgid ""
"B<hal_signal_new> creates a new signal object.  Once a signal has been "
"created, pins can be linked to it with B<hal_link>.  The signal object "
"contains the actual storage for the signal data.  Pin objects linked to the "
"signal have pointers that point to the data.  'name' is the name of the new "
"signal.  It may be no longer than HAL_NAME_LEN characters.  If there is "
"already a signal with the same name the call will fail."
msgstr ""

#. type: Plain text
#: man/man3/hal_signal_new.3hal:42
msgid ""
"B<hal_link> links a pin to a signal.  If the pin is already linked to the "
"desired signal, the command succeeds.  If the pin is already linked to some "
"other signal, it is an error.  In either case, the existing connection is "
"not modified.  (Use 'hal_unlink' to break an existing connection.)  If the "
"signal already has other pins linked to it, they are unaffected - one signal "
"can be linked to many pins, but a pin can be linked to only one signal."
msgstr ""

#. type: Plain text
#: man/man3/hal_signal_new.3hal:44
msgid "B<hal_unlink> unlinks any signal from the specified pin."
msgstr ""

#. type: Plain text
#: man/man3/hal_signal_new.3hal:47
msgid ""
"B<hal_signal_delete> deletes a signal object.  Any pins linked to the object "
"are unlinked."
msgstr ""

#. type: TH
#: man/man3/hal_start_threads.3hal:1
#, no-wrap
msgid "hal_start_threads"
msgstr ""

#. type: Plain text
#: man/man3/hal_start_threads.3hal:5
msgid "hal_start_threads - Allow HAL threads to begin executing"
msgstr ""

#. type: Plain text
#: man/man3/hal_start_threads.3hal:9
msgid "int hal_start_threads()"
msgstr ""

#. type: Plain text
#: man/man3/hal_start_threads.3hal:12
msgid "int hal_stop_threads()"
msgstr ""

#. type: Plain text
#: man/man3/hal_start_threads.3hal:18
msgid ""
"B<hal_start_threads> starts all threads that have been created.  This is the "
"point at which realtime functions start being called."
msgstr ""

#. type: Plain text
#: man/man3/hal_start_threads.3hal:22
msgid ""
"B<hal_stop_threads> stops all threads that were previously started by "
"B<hal_start_threads>.  It should be called before any component that is part "
"of a system exits."
msgstr ""

#. type: Plain text
#: man/man3/hal_start_threads.3hal:28
msgid ""
"B<hal_export_funct(3hal)>, B<hal_create_thread(3hal)>, "
"B<hal_add_funct_to_thread(3hal)>"
msgstr ""

#. type: TH
#: man/man3/hal_stream.3hal:1
#, no-wrap
msgid "hal_stream"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:15
msgid "hal_stream - non-blocking realtime streams"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:56
msgid ""
"A HAL stream provides a limited ability for two components to communicate "
"data which does not fit within the model of HAL pins.  A reader and a writer "
"must agree on a I<key> (32-bit integer identifier) and a data structure "
"specified by I<typestring.> They must also agree which component (the first "
"one loaded) will B<hal_stream_create> the stream, and which component (the "
"second one loaded) will B<hal_stream_attach> to the already-created stream."
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:64
msgid ""
"The userspace part can be B<halstreamer> or B<halsampler>.  In the case of "
"B<halstreamer> the key is 0x48535430 plus the channel number.  In the case "
"of B<halsampler> the key is 0x48534130 plus the channel number."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:65
#, no-wrap
msgid "hal_stream_create"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:68
msgid ""
"Create the given stream, initializing the I<stream> which is passed by "
"reference.  It is an undiagnosed error if a stream has already been created "
"with the same I<key>."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:69
#, no-wrap
msgid "hal_stream_destroy"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:78
msgid ""
"Destroy the given stream.  It is an undiagnosed error if the stream is still "
"attached by another component.  It is an undiagnosed error if the stream was "
"attached with B<hal_stream_attach> rather than created with "
"B<hal_stream_create>.  It is an undiagnosed error if the call to "
"B<hal_stream_destroy> is omitted."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:79
#, no-wrap
msgid "hal_stream_attach"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:85
msgid ""
"Attach the given stream, which was already created by B<hal_stream_create>.  "
"If the typestring is specified, this call fails if it does not match the "
"typestring the stream was created with.  If the typestring argument is NULL, "
"then any typestring is accepted."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:86
#, no-wrap
msgid "hal_stream_detach"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:95
msgid ""
"Detach the given stream.  It is an undiagnosed error if the stream was "
"created with B<hal_stream_create> rather than attached with "
"B<hal_stream_attach>.  It is an undiagnosed error if the call to "
"B<hal_stream_detach> is omitted."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:96
#, no-wrap
msgid "hal_stream_element_count"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:98
msgid "Returns the number of pins."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:99
#, no-wrap
msgid "hal_stream_element_type"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:101
msgid "Returns the type of the given pin number."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:102
#, no-wrap
msgid "hal_stream_readable"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:104
msgid "Returns true if the stream has at least one sample to read"
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:104 man/man3/hal_stream.3hal:129
#, no-wrap
msgid "hal_stream_read"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:106
msgid "If the stream has one sample to read, stores it in buf."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:106
#, no-wrap
msgid "hal_stream_writable"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:108
msgid ""
"Returns true if the stream has room for at least one sample to be written."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:108
#, no-wrap
msgid "hal_stream_depth"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:110
msgid "Returns the number of samples waiting to be read."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:110
#, no-wrap
msgid "hal_stream_maxdepth"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:114
msgid "Returns the B<depth> argument that the stream was created with."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:114
#, no-wrap
msgid "hal_stream_num_overruns"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:118
msgid ""
"Returns a number which is incremented each time B<hal_stream_write> is "
"called without space available."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:118
#, no-wrap
msgid "hal_stream_num_underruns"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:122
msgid ""
"Returns a number which is incremented each time B<hal_stream_read> is called "
"without a sample available."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:123
#, no-wrap
msgid "hal_stream_wait_readable"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:125
msgid "Waits until the stream is readable or the stop flag is set."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:126
#, no-wrap
msgid "hal_stream_wait_writable"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:128
msgid "Waits until the stream is writable or the stop flag is set."
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:138
msgid ""
"Reads a record from stream.  If successful, it is stored in the given "
"buffer.  Optionally, the sample number can be retrieved.  If no sample is "
"available, I<num_underruns> is incremented.  It is an undetected error if "
"more than one component or real-time function calls B<hal_stream_read> "
"concurrently."
msgstr ""

#. type: SS
#: man/man3/hal_stream.3hal:139
#, no-wrap
msgid "hal_stream_write"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:150
#, no-wrap
msgid ""
"Writes a record to the stream.  If successful, it copied from the given\n"
"buffer.  If no room is available,\n"
"I<num_overruns>\n"
"is incremented.  In either case, the internal\n"
"I<sampleno>\n"
"value is incremented.\n"
"  It is an undetected error if more than one component or\n"
"real-time function calls\n"
"B<hal_stream_write>\n"
"concurrently.\n"
msgstr ""

#. type: IP
#: man/man3/hal_stream.3hal:152
#, no-wrap
msgid "I<stream>"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:157
msgid ""
"A pointer to a stream object.  In the case of B<hal_stream_create> and "
"B<hal_stream_attach> this is an uninitialized stream; in other cases, it "
"must be a stream created or attached by an earlier call and not yet detached "
"or destroyed."
msgstr ""

#. type: IP
#: man/man3/hal_stream.3hal:158
#, no-wrap
msgid "I<hal_id>"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:160
msgid "An HAL component identifier returned by an earlier call to B<hal_init>."
msgstr ""

#. type: IP
#: man/man3/hal_stream.3hal:161 man/man3/rtapi_shmem.3rtapi:17
#, no-wrap
msgid "I<key>"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:163
msgid "The key for the shared memory segment."
msgstr ""

#. type: IP
#: man/man3/hal_stream.3hal:164
#, no-wrap
msgid "I<depth>"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:166
msgid ""
"The number of samples that can be unread before any samples are lost "
"(overrun)"
msgstr ""

#. type: IP
#: man/man3/hal_stream.3hal:167
#, no-wrap
msgid "I<typestring>"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:169
msgid ""
"A typestring is a case-insensitive string which consists of one or more of "
"the following type characters:"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:172
msgid "for bool / hal_bit_t"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:174
msgid "for int32_t / hal_s32_t"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:176
msgid "for uint32_t / hal_u32_t"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:178
msgid "for real_t / hal_float_t"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:180
msgid "A typestring is limited to 16 characters."
msgstr ""

#. type: IP
#: man/man3/hal_stream.3hal:180
#, no-wrap
msgid "I<buf>"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:182
msgid "A buffer big enough to hold all the data in one sample."
msgstr ""

#. type: IP
#: man/man3/hal_stream.3hal:183
#, no-wrap
msgid "I<sampleno>"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:187
msgid ""
"If non-NULL, the last sample number is stored here.  Gaps in this sequence "
"indicate that an overrun occurred between the previous read and this one.  "
"May be NULL, in which case the sample number is not retrieved."
msgstr ""

#. type: IP
#: man/man3/hal_stream.3hal:188
#, no-wrap
msgid "I<stop>"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:198
msgid ""
"In the source tree under I<src/hal/components>, B<sampler.c> and B<streamer."
"c> are realtime components that read and write HAL streams."
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:202
msgid ""
"B<hal_stream_read>, B<hal_stream_readable>, B<hal_stream_write>, "
"B<hal_stream_writable>, B<hal_stream_element_count>, B<hal_tream_pin_type>, "
"B<hal_stream_depth>, B<hal_stream_maxdepth>, B<hal_stream_num_underruns>, "
"B<hal_stream_number_overruns> may be called from realtime code."
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:205
msgid ""
"B<hal_stream_wait_writable>, B<hal_stream_wait_writable> may be called from "
"ULAPI code."
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:207
msgid ""
"Other functions may be called in any context, including realtime contexts."
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:210
msgid ""
"B<hal_stream_create> , B<hal_stream_attach> , B<hal_stream_read> , "
"B<hal_stream_write> , B<hal_stream_detach> and B<hal_stream_destroy> return "
"an RTAPI status code.  Other functions' return values are explained above."
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:218
msgid ""
"The memory overhead of a stream can be large.  Each element in a record uses "
"8 bytes, and the implicit sample number also uses 8 bytes.  As a result, a "
"stream which is used to transport 8-bit values uses 94% of its memory as "
"overhead.  However, for modest stream sizes this overhead is not important.  "
"(this memory is part of its own shared memory region and does not count "
"against the HAL shared memory region used for pins, parameters and signals)"
msgstr ""

#. type: Plain text
#: man/man3/hal_stream.3hal:223
msgid "B<sampler>(9), B<streamer>(9), B<halsampler>(1), B<halstreamer>(1)"
msgstr ""

#. type: TH
#: man/man3/hal_type_t.3hal:1
#, no-wrap
msgid "hal_type_t"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:4
msgid "hal_type_t - typedefs for HAL datatypes"
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:5
#, no-wrap
msgid "typedef ... B<hal_bool;>"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:8
msgid "A type which may have a value of 0 or nonzero."
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:8
#, no-wrap
msgid "typedef ... B<hal_bit_t;>"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:11
msgid "A volatile type which may have a value of 0 or nonzero."
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:11
#, no-wrap
msgid "typedef ... B<hal_s32_t>;"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:14
msgid "A volatile type which may have a value from -2147483648 to 2147483647."
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:14
#, no-wrap
msgid "typedef ... B<hal_u32_t>;"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:17
msgid "A volatile type which may have a value from 0 to 4294967295."
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:17
#, no-wrap
msgid "typedef ... B<hal_port_t>;"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:20
msgid "A volatile handle to a port object. Used with hal_port* functions."
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:20
#, no-wrap
msgid "typedef ... B<hal_float_t>;"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:24
msgid ""
"A volatile floating-point type, which typically has the same precision and "
"range as the C type B<double>."
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:24
#, no-wrap
msgid "typedef ... B<real_t>;"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:28
msgid ""
"A nonvolatile floating-point type with at least as much precision as "
"B<hal_float_t>."
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:28
#, no-wrap
msgid "typedef ... B<ireal_t>;"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:31
msgid "A nonvolatile unsigned integral type the same size as B<hal_float_t>."
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:31
#, no-wrap
msgid "typedef enum B<hal_type_t>;"
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:34
#, no-wrap
msgid "B<HAL_BIT>"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:37
msgid "Corresponds to the type B<hal_bit_t>."
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:37
#, no-wrap
msgid "B<HAL_FLOAT>"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:40
msgid "Corresponds to the type B<hal_float_t>."
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:40
#, no-wrap
msgid "B<HAL_S32>"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:43
msgid "Corresponds to the type B<hal_s32_t>."
msgstr ""

#. type: TP
#: man/man3/hal_type_t.3hal:43
#, no-wrap
msgid "B<HAL_U32>"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:46
msgid "Corresponds to the type B<hal_u32_t>."
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:51
msgid ""
"B<hal_bit_t> is typically a typedef to an integer type whose range is larger "
"than just 0 and 1.  When testing the value of a B<hal_bit_t>, never compare "
"it to 1.  Prefer one of the following:"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:54
msgid "if(b)"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:56
msgid "if(b != 0)"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:61
msgid ""
"It is often useful to refer to a type that can represent all the values as a "
"HAL type, but without the volatile qualifier.  The following types "
"correspond with the HAL types:"
msgstr ""

#. type: IP
#: man/man3/hal_type_t.3hal:62
#, no-wrap
msgid "hal_bit_t"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:64 man/man3/hal_type_t.3hal:76
msgid "int"
msgstr ""

#. type: IP
#: man/man3/hal_type_t.3hal:65
#, no-wrap
msgid "hal_s32_t"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:67
msgid "__s32"
msgstr ""

#. type: IP
#: man/man3/hal_type_t.3hal:68
#, no-wrap
msgid "hal_u32_t"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:70
msgid "__u32"
msgstr ""

#. type: IP
#: man/man3/hal_type_t.3hal:71
#, no-wrap
msgid "hal_float_t"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:73
msgid "hal_real_t"
msgstr ""

#. type: IP
#: man/man3/hal_type_t.3hal:74
#, no-wrap
msgid "hal_port_t"
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:81
msgid ""
"Take care not to use the types B<s32> and B<u32>.  These will compile in "
"kernel modules but not in userspace, and not for \"realtime components\" "
"when using simulated (userspace) realtime."
msgstr ""

#. type: Plain text
#: man/man3/hal_type_t.3hal:83
msgid "B<hal_pin_new(3hal)>, B<hal_param_new(3hal)>"
msgstr ""

#. type: TH
#: man/man3/hm2_allocate_bspi_tram.3hm2:4
#, no-wrap
msgid "hm2_allocate_bspi_tram"
msgstr ""

#. type: TH
#: man/man3/hm2_allocate_bspi_tram.3hm2:4
#: man/man3/hm2_bspi_set_read_function.3hm2:4
#: man/man3/hm2_bspi_setup_chan.3hm2:3
#: man/man3/hm2_bspi_set_write_function.3hm2:4
#: man/man3/hm2_bspi_write_chan.3hm2:3 man/man3/hm2_tram_add_bspi_frame.3hm2:3
#: man/man3/hm2_uart_send.3hm2:3 man/man3/hm2_uart_setup.3hm2:3
#, no-wrap
msgid "2011-05-31"
msgstr ""

#. type: TH
#: man/man3/hm2_allocate_bspi_tram.3hm2:4
#: man/man3/hm2_bspi_set_read_function.3hm2:4
#: man/man3/hm2_bspi_setup_chan.3hm2:3
#: man/man3/hm2_bspi_set_write_function.3hm2:4
#: man/man3/hm2_bspi_write_chan.3hm2:3 man/man3/hm2_pktuart_read.3hm2:3
#: man/man3/hm2_pktuart_send.3hm2:3 man/man3/hm2_pktuart_setup.3hm2:3
#: man/man3/hm2_tram_add_bspi_frame.3hm2:3 man/man3/hm2_uart_read.3hm2:3
#: man/man3/hm2_uart_send.3hm2:3 man/man3/hm2_uart_setup.3hm2:3
#, no-wrap
msgid "Hostmot2"
msgstr ""

#. type: Plain text
#: man/man3/hm2_allocate_bspi_tram.3hm2:8
msgid "hm2_allocate_bspi_tram - Allocate the TRAM regions for a BSPI channel"
msgstr ""

#. type: Plain text
#: man/man3/hm2_allocate_bspi_tram.3hm2:12
#: man/man3/hm2_bspi_set_read_function.3hm2:12
#: man/man3/hm2_bspi_setup_chan.3hm2:11
#: man/man3/hm2_bspi_set_write_function.3hm2:12
#: man/man3/hm2_bspi_write_chan.3hm2:11 man/man3/hm2_pktuart_read.3hm2:11
#: man/man3/hm2_pktuart_send.3hm2:11 man/man3/hm2_pktuart_setup.3hm2:10
#: man/man3/hm2_tram_add_bspi_frame.3hm2:11 man/man3/hm2_uart_read.3hm2:11
#: man/man3/hm2_uart_send.3hm2:11 man/man3/hm2_uart_setup.3hm2:10
#, no-wrap
msgid "B<#include E<lt>hostmot2-serial.hE<gt>>\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_allocate_bspi_tram.3hm2:14
#, no-wrap
msgid "hm2_allocate_bspi_tram(char* name)\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_allocate_bspi_tram.3hm2:21
msgid ""
"B<hm2_allocate_bspi_tram> Allocate the TRAM memory for bspi instance \"name"
"\".  \"name\" is a unique string given to each bspi channel during hostmot2 "
"setup.  The names of the available channels are printed to standard output "
"during the driver loading process and take the form: hm2_E<lt>board "
"nameE<gt>.E<lt>board indexE<gt>.bspi.E<lt>indexE<gt> For example hm2_5i23.0."
"bspi.0"
msgstr ""

#. type: Plain text
#: man/man3/hm2_allocate_bspi_tram.3hm2:25
msgid ""
"This function allocates the TRAM memory and sets up the regular data "
"transfers.  It should be called only when all the frames have been defined "
"by calls to hm2_tram_add_bspi_frame()."
msgstr ""

#. type: Plain text
#: man/man3/hm2_allocate_bspi_tram.3hm2:31
#: man/man3/hm2_bspi_set_read_function.3hm2:42
#: man/man3/hm2_bspi_setup_chan.3hm2:69
#: man/man3/hm2_bspi_set_write_function.3hm2:44
#: man/man3/hm2_bspi_write_chan.3hm2:33
#: man/man3/hm2_tram_add_bspi_frame.3hm2:34
msgid "Returns 0 on success and -1 on failure."
msgstr ""

#. type: Plain text
#: man/man3/hm2_allocate_bspi_tram.3hm2:38
msgid ""
"B<hm2_bspi_set_read_function(3hm2)>, B<hm2_bspi_setup_chan(3hm2)>, "
"B<hm2_bspi_set_write_function(3hm2)>, B<hm2_bspi_write_chan(3hm2)>, "
"B<hm2_tram_add_bspi_frame(3hm2)>, See src/hal/drivers mesa_7i65.comp for an "
"example usage."
msgstr ""

#. type: TH
#: man/man3/hm2_bspi_set_read_function.3hm2:4
#, no-wrap
msgid "hm2_bspi_set_read_function"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_read_function.3hm2:9
msgid ""
"hm2_bspi_set_read_function - Register a function to handle the tram write "
"phase of a hostmot2 buffered SPI driver."
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_read_function.3hm2:14
#, no-wrap
msgid "int hm2_bspi_set_read_function(char *name, void *func, void *subdata)\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_read_function.3hm2:21
msgid ""
"B<hm2_bspi_set_read_function> registers a function in an external driver to "
"be called every time that the main Hostmot2 driver calls the generic "
"\"process_tram_read\" function.  The names of the available channels are "
"printed with rtapi_print_msg during the driver loading process and take the "
"form:"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_read_function.3hm2:23
#: man/man3/hm2_bspi_set_write_function.3hm2:23
msgid "hm2_E<lt>board nameE<gt>.E<lt>board indexE<gt>.bspi.E<lt>indexE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_read_function.3hm2:25
#: man/man3/hm2_bspi_set_write_function.3hm2:25
msgid "For example hm2_5i23.0.bspi.0."
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_read_function.3hm2:32
msgid ""
"\"func\" should be a pointer to a function in the sub driver which is to be "
"called to process the results of the BSPI TRAM read phase. The function must "
"take a single argument, a pointer to an individual instance of the internal "
"driver. If defined in comp then the function must B<not> use the FUNCTION()  "
"convenience macro, and the argument to the function in the definition must "
"B<always> be (struct state *inst)."
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_read_function.3hm2:36
msgid ""
"\"subdata\" is a pointer to the driver instance internal data. In the case "
"of a driver written in comp this will always be \"inst\" in the function "
"call and the call should be anywhere in the EXTRA_SETUP code."
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_read_function.3hm2:49
msgid ""
"B<hm2_allocate_bspi_tram(3hm2)>, B<hm2_bspi_setup_chan(3hm2)>, "
"B<hm2_bspi_set_write_function(3hm2)>, B<hm2_bspi_write_chan(3hm2)>, "
"B<hm2_tram_add_bspi_frame(3hm2)>, src/hal/drivers mesa_7i65.comp in the "
"LinuxCNC source distribution."
msgstr ""

#. type: TH
#: man/man3/hm2_bspi_setup_chan.3hm2:3
#, no-wrap
msgid "hm2_bspi_setup_chan"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:7
msgid "hm2_bspi_setup_chan - setup a Hostmot2 bspi channel"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:14
#, no-wrap
msgid ""
"int hm2_bspi_setup_chan(char *name, int chan, int cs, int bits, float mhz,\n"
"int delay, int cpol, int cpha, int noclear, int noecho)\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:18
msgid ""
"B<hm2_bspi_setup_chan> allows a realtime component to claim and configure a "
"BSPI channel on a previously configured hostmot2 board."
msgstr ""

#. type: IP
#: man/man3/hm2_bspi_setup_chan.3hm2:19
#, no-wrap
msgid "name"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:25
msgid ""
"A unique string given to the BSPI channel during hostmot2 setup.  The names "
"of the available channels are printed to standard output during the driver "
"loading process and take the form B<hm2_>I<board-name>B<.>I<board-index>B<."
"bspi.>I<bspi-index>.  For example, the first index on the first hm2_5i23 "
"board would be called hm2_5i23.0.bspi.0."
msgstr ""

#. type: IP
#: man/man3/hm2_bspi_setup_chan.3hm2:26
#, no-wrap
msgid "chan"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:29
msgid ""
"Channels are numbered 0 to 15.  The value on the chip-select lines is set by "
"cs and need not match the channel number."
msgstr ""

#. type: IP
#: man/man3/hm2_bspi_setup_chan.3hm2:30
#, no-wrap
msgid "cs"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:34
msgid ""
"The chip select line(s) to assert when accessing this channel.  BSPI "
"supports 4 chip select lines, so the valid range for cs is 0-15."
msgstr ""

#. type: IP
#: man/man3/hm2_bspi_setup_chan.3hm2:35
#, no-wrap
msgid "bits"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:39
msgid ""
"sets the bit-length of the SPI packet. The maximum supported length is 64 "
"bits but this will span two read FIFO entries and will need special "
"handling. (values 32 and below require no special handling)"
msgstr ""

#. type: IP
#: man/man3/hm2_bspi_setup_chan.3hm2:40
#, no-wrap
msgid "mhz"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:45
msgid ""
"sets the chip communication rate. The maximum value for this is half the "
"FPGA base frequency, so for example with a 48 MHz 5i23 the max SPI frequency "
"is 24 MHz. Values in excess of the max supported will be silently rounded "
"down."
msgstr ""

#. type: IP
#: man/man3/hm2_bspi_setup_chan.3hm2:46
#, no-wrap
msgid "delay"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:48
msgid "sets the chip select valid delay (in nS)"
msgstr ""

#. type: IP
#: man/man3/hm2_bspi_setup_chan.3hm2:49
#, no-wrap
msgid "cpha\\ and\\ cpol"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:51
msgid "Set the clock phase and polarity (according to the device datasheet)."
msgstr ""

#. type: IP
#: man/man3/hm2_bspi_setup_chan.3hm2:52
#, no-wrap
msgid "noclear"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:56
msgid ""
"controls whether the frame clear bit is set after the 32 bit buffer "
"transfer. This parameter should be set to 1 when the frame length is greater "
"than 32 bits and the next data in the FIFO contains the other bits."
msgstr ""

#. type: IP
#: man/man3/hm2_bspi_setup_chan.3hm2:57
#, no-wrap
msgid "noecho"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:59
msgid "Set to 1 for devices which do not return data (such as DACs)."
msgstr ""

#. type: IP
#: man/man3/hm2_bspi_setup_chan.3hm2:60
#, no-wrap
msgid "samplelate"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:63
msgid ""
"Set to 1 to sample the received SPI data 1/2 SPI clock later than normal.  "
"This is useful when high clock rates or isolation cause significant delays "
"from clock to received data."
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_setup_chan.3hm2:76
msgid ""
"B<hm2_allocate_bspi_tram(3hm2)>, B<hm2_bspi_set_read_function(3hm2)>, "
"B<hm2_bspi_set_write_function(3hm2)>, B<hm2_bspi_write_chan(3hm2)>, "
"B<hm2_tram_add_bspi_frame(3hm2)>, See src/hal/drivers mesa_7i65.comp for an "
"example usage."
msgstr ""

#. type: TH
#: man/man3/hm2_bspi_set_write_function.3hm2:4
#, no-wrap
msgid "hm2_bspi_set_write_function"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_write_function.3hm2:9
msgid ""
"hm2_bspi_set_write_function - Register a function to handle the tram write "
"phase of a hostmot2 buffered SPI driver."
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_write_function.3hm2:14
#, no-wrap
msgid "int hm2_bspi_set_write_function(char *name, void *func, void *subdata)\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_write_function.3hm2:21
msgid ""
"B<hm2_bspi_set_write_function> registers a function in an external driver to "
"be called every time that the main Hostmot2 driver calls the generic "
"\"prepare_tram_write\" functions.  The names of the available channels are "
"printed with rtapi_print_msg during the driver loading process and take the "
"form:"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_write_function.3hm2:32
msgid ""
"\"func\" should be a pointer to a function in the sub driver which is to be "
"called to process the pins into BSPI write registers prior to the regular "
"TRAM write phase. The function must take a single argument, a pointer to an "
"individual instance of the internal driver. If defined in comp then the "
"function must B<not> use the FUNCTION() convenience macro, and the argument "
"to the function in the definition must B<always> be (struct state *inst)."
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_write_function.3hm2:35
msgid ""
"\"subdata\" is a pointer to the driver instance internal data. In the case "
"of a driver written in comp this will always be \"inst\" in the function "
"call."
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_write_function.3hm2:38
msgid ""
"If using comp then the call to this function should be anywhere in the "
"EXTRA_SETUP code."
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_set_write_function.3hm2:51
msgid ""
"B<hm2_allocate_bspi_tram(3hm2)>, B<hm2_bspi_set_read_function(3hm2)>, "
"B<hm2_bspi_setup_chan(3hm2)>, B<hm2_bspi_write_chan(3hm2)>, "
"B<hm2_tram_add_bspi_frame(3hm2)>, src/hal/drivers mesa_7i65.comp in the "
"LinuxCNC source distribution."
msgstr ""

#. type: TH
#: man/man3/hm2_bspi_write_chan.3hm2:3
#, no-wrap
msgid "hm2_bspi_write_chan"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_write_chan.3hm2:7
msgid "hm2_bspi_write_chan - write data to a Hostmot2 Buffered SPI channel"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_write_chan.3hm2:13
#, no-wrap
msgid "hm2_bspi_write_chan(char* name, int chan, u32 val)\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_write_chan.3hm2:21
msgid ""
"B<hm2_bspi_write_chan> write one-time data to the bspi channel \"chan\" on "
"the bspi instance \"name\". \"name\" is a unique string given to each bspi "
"channel during hostmot2 setup. The names of the available channels are "
"printed to standard output during the driver loading process and take the "
"form: hm2_E<lt>board nameE<gt>.E<lt>board indexE<gt>.bspi.E<lt>indexE<gt> "
"For example hm2_5i23.0.bspi.0"
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_write_chan.3hm2:26
msgid ""
"This function performs a one-time write of data to the specified channel. It "
"is typically used for setup and chip enabling purposes. It should not be "
"used in the main loop for regular data transfers (but is appropriate to use "
"for on-the- fly setup changes)."
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_write_chan.3hm2:30 man/man3/rtapi_get_time.3rtapi:64
#: man/man3/rtapi_outb.3rtapi:25
msgid ""
"May be called from init/cleanup code and from within realtime tasks.  Not "
"available in userspace components."
msgstr ""

#. type: Plain text
#: man/man3/hm2_bspi_write_chan.3hm2:40
msgid ""
"B<hm2_allocate_bspi_tram(3hm2)>, B<hm2_bspi_set_read_function(3hm2)>, "
"B<hm2_bspi_setup_chan(3hm2)>, B<hm2_bspi_set_write_function(3hm2)>, "
"B<hm2_tram_add_bspi_frame(3hm2)>, See src/hal/drivers mesa_7i65.comp for an "
"example usage."
msgstr ""

#. type: TH
#: man/man3/hm2_pktuart_read.3hm2:3
#, no-wrap
msgid "hm2_pktuart_read"
msgstr ""

#. type: TH
#: man/man3/hm2_pktuart_read.3hm2:3
#, no-wrap
msgid "2016-02-26"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_read.3hm2:7
msgid "hm2_pktuart_read - read data from a Hostmot2 UART buffer"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_read.3hm2:13
#, no-wrap
msgid "int hm2_pktuart_read(char *name,  unsigned char data[], rtapi_u8 *num_frames, rtapi_u16 *max_frame_length, rtapi_u16 frame_sizes[])\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_read.3hm2:20
msgid ""
"B<hm2_pktuart_read> reads data from the PktUART \"name\".  \"name\" is a "
"unique string given to each PktUART during hostmot2 setup. The names of the "
"available channels are printed to standard output during the driver loading "
"process and take the form: hm2_E<lt>board nameE<gt>.E<lt>board indexE<gt>."
"pktuart.E<lt>indexE<gt> For example hm2_5i25.0.pktuart.0"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_read.3hm2:25
msgid ""
"This function reads a variable number of PktUART packets from the the "
"specified channel. It should be used inside a realtime HAL component "
"registered with the main hostmot2 driver using the function "
"hm2_pktuart_setup in the setup code."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_read.3hm2:30
msgid ""
"\"(*num_frames)*(*max_frame_length)\" should be E<lt>= sizeof \"data\", "
"which one tries to estimate or guess before calling the function.  If there "
"are more bytes in the buffer than the size of data array is, then "
"RxArraySizeError is returned."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_read.3hm2:32 man/man3/hm2_pktuart_send.3hm2:21
msgid ""
"Note that the PktUART MaxFrameSize is 1024 bytes as hard-coded in hostmot2."
"vhd ."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_read.3hm2:36
msgid ""
"Returns the number of bytes read on success and negative error codes on "
"failure."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_read.3hm2:39
msgid ""
"\"num_frames\" which pointer is passed by value is set to the number of "
"successfully datagrams read."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_read.3hm2:41 man/man3/hm2_pktuart_send.3hm2:39
msgid "Negative error codes are:"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_read.3hm2:41 man/man3/hm2_pktuart_send.3hm2:39
#, no-wrap
msgid "B<-1 - low level read/write error>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_read.3hm2:43 man/man3/hm2_pktuart_send.3hm2:41
#, no-wrap
msgid "B<-EINVAL - any PktUART configuration error per instance>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_read.3hm2:47
#, no-wrap
msgid "B<-HM2_PKTUART_RxStartbitError - Rx mode register error>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_read.3hm2:49
#, no-wrap
msgid "B<-HM2_PKTUART_RxOverrunError - Rx mode register error>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_read.3hm2:51
#, no-wrap
msgid "B<-HM2_PKTUART_RxRCFIFOError - Rx mode register error>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_read.3hm2:55
#, no-wrap
msgid "B<-HM2_PKTUART_RxPacketOverrrunError - Rx count register error>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_read.3hm2:57
#, no-wrap
msgid "B<-HM2_PKTUART_RxPacketStartbitError - Rx count register error>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_read.3hm2:61
#, no-wrap
msgid "B<-HM2_PKTUART_RxPacketSizeZero - the size of the received packet is zero>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_read.3hm2:63
#, no-wrap
msgid "B<-HM2_PKTUART_RxArraySizeError - data array is too small for all the data in the buffer>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_read.3hm2:65
#, no-wrap
msgid "Numeric values of the HM2_PKTUART_ error codes are defined in src/hal/drivers/mesa-hostmot2/pktuart_errno.h ."
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_read.3hm2:70
#, no-wrap
msgid "B<hm2_pktuart_setup>(3hm2), B<hm2_pktuart_send>(3hm2)"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_read.3hm2:73 man/man3/hm2_pktuart_send.3hm2:51
#, no-wrap
msgid "See src/hal/drivers/mesa_pktgyro_test.comp for an example usage."
msgstr ""

#. type: TH
#: man/man3/hm2_pktuart_send.3hm2:3
#, no-wrap
msgid "hm2_pktuart_send"
msgstr ""

#. type: TH
#: man/man3/hm2_pktuart_send.3hm2:3 man/man3/hm2_pktuart_setup.3hm2:3
#, no-wrap
msgid "2016-02-29"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_send.3hm2:7
msgid "hm2_pktuart_send - write data to a Hostmot2 PktUART"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_send.3hm2:13
#, no-wrap
msgid "int hm2_uart_send(char *name,  unsigned char data[], rtapi_u8 *num_frames, rtapi_u16 frame_sizes[])\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_send.3hm2:19
msgid ""
"B<hm2_pktuart_send> writes \"num_frames\" of data to the PktUART \"name\" "
"from the buffer \"data\" with frame sizes preset in \"frame_sizes[]\" "
"array.  \"frame_sizes[]\" array should not have more than 16 elements as "
"this is the highest number of frames that can be sent out in the so called "
"\"burst mode\"."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_send.3hm2:26
msgid ""
"\"name\" is a unique string given to each PktUART during hostmot2 setup. The "
"names of the available channels are printed to standard output during the "
"driver loading process and take the form: hm2_E<lt>board nameE<gt>."
"E<lt>board indexE<gt>.pktuart.E<lt>indexE<gt> For example hm2_5i25.0."
"pktuart.0 ."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_send.3hm2:31
msgid ""
"This function sends a variable number of PktUART packets (less or equal 16) "
"from the the specified channel. It should be used inside a realtime HAL "
"component registered with the main hostmot2 driver using the function "
"hm2_pktuart_setup in the setup code."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_send.3hm2:34
msgid ""
"Returns the number of bytes sent on success and negative error codes on "
"failure."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_send.3hm2:37
msgid ""
"\"num_frames\" which pointer is passed by value is set to the number of "
"successfully datagrams sent out."
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_send.3hm2:43
#, no-wrap
msgid "B<-HM2_PKTUART_TxSCFIFOError - Tx Send Count FIFO Error>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_send.3hm2:45
#, no-wrap
msgid "Numeric values of HM2_PKTUART_ error codes are defined in src/hal/drivers/mesa-hostmot2/pktuart_errno.h ."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_send.3hm2:51
msgid "B<hm2_pktuart_setup>(3hm2), B<hm2_pktuart_read>(3hm2)"
msgstr ""

#. type: TH
#: man/man3/hm2_pktuart_setup.3hm2:3
#, no-wrap
msgid "hm2_pktuart_setup"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:7
msgid "hm2_pktuart_setup - setup a Hostmot2 PktUART instance"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:12
#, no-wrap
msgid "int hm2_pktuart_setup(char *name, int bitrate, rtapi_s32 tx_mode, rtapi_s32 rx_mode, int txclear, int rxclear)\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:19
msgid ""
"B<hm2_pktuart_setup> Setup the bitrate for the PktUART named \"name\".  "
"\"name\" is a unique string given to each PktUART during hostmot2 setup. The "
"names of the available UARTs are printed to standard output during the "
"driver loading process and take the form: hm2_E<lt>board nameE<gt>."
"E<lt>board indexE<gt>.pktuart.E<lt>indexE<gt> For example hm2_5i25.0."
"pktuart.0 ."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:22
msgid ""
"Hostmot2 UARTs are good to about 10 Mb/sec, but higher data rates (with any "
"UART)  trade speed for susceptibility to impulse noise."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:26
msgid ""
"The PktUART function allows different RX and TX bitrates, but that is not "
"currently supported by this driver."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:29
msgid "tx_mode is bit mask defined in the Hostmot2 regmap:"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:29
#, no-wrap
msgid "B<Bit 21\t FrameBuffer Has Data>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:31
#, no-wrap
msgid "B<Bits 20..16 Frames to send>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:33 man/man3/hm2_pktuart_setup.3hm2:56
#, no-wrap
msgid "B<Bits 15..8 InterFrame delay in bit times>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:35
#, no-wrap
msgid "B<Bit 7\t Send busy, Transmit Logic active>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:37
#, no-wrap
msgid "B<Bit 6\t Drive Enable bit (enables external RS-422/485 Driver when set)>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:39
#, no-wrap
msgid "B<Bit 5\t Drive enable Auto (Automatic external drive enable)>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:41
#, no-wrap
msgid "B<Bit 4\t SCFIFO Error>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:43
#, no-wrap
msgid "B<Bits 3..0 Drive enable delay (delay from asserting drive enable>"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:48
#, no-wrap
msgid ""
"     \t           to start of data transmit. In CLock Low periods \n"
"\t\t\t\t   \n"
"\t\t\t\t   \n"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:50
#, no-wrap
msgid "rx_mode is bit mask defined in the Hostmot2 regmap:"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:52
#, no-wrap
msgid "B<Bit 21\t FrameBuffer has data \\&\t\\&>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:54
#, no-wrap
msgid "B<Bits 20..16 Frames received>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:58
#, no-wrap
msgid "B<Bit 7\t Rx Logic active>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:60
#, no-wrap
msgid "B<Bit 6\t RXMask>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:62
#, no-wrap
msgid "B<Bit 5 Unused>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:64
#, no-wrap
msgid "B<Bit 4\t RCFIFO Error>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:66
#, no-wrap
msgid "B<Bit 3\t RXEnable (must be set to receive packets)>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:68
#, no-wrap
msgid "B<Bit 2\t RXMask Enable (enables input data masking when transmitting)>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:70
#, no-wrap
msgid "B<Bit 1\t Overrun error (no stop bit when expected) (sticky)>"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:72
#, no-wrap
msgid "B<Bit 0\t False Start bit error (sticky)>"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:80
msgid ""
"rx_mode and tx_mode registers are currently write-only.  One can get the "
"instance number of a PktUART instance with the help of hm2_get_pktuart "
"function in order to read and write to Rx and Tx registers."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:85 man/man3/hm2_uart_setup.3hm2:56
msgid ""
"To write only to the tx_mode DriveEnable bit call this function with the "
"bitrate unchanged and -1 as the rx_mode To change bitrate without altering "
"mode settings send -1 to both modes."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:88
msgid ""
"txclear==1 aborts any sends in process, clears the data FIFO and clears the "
"send count FIFO."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:91
msgid ""
"rxclear==1 aborts any receives in process, clears the data FIFO and clears "
"the receive count FIFO."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:93
msgid "txclear!=1 or rxclear!=1 lets the corresponding registers unchanged."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:96
msgid "Returns 0 on success and -1 or -EINVAL on failure."
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:99
msgid "B<hm2_pktuart_send>(3hm2), B<hm2_pktuart_read>(3hm2)"
msgstr ""

#. type: TP
#: man/man3/hm2_pktuart_setup.3hm2:99
#, no-wrap
msgid "See src/hal/drivers/mesa_pktgyro_test.comp for an example usage. "
msgstr ""

#. type: SH
#: man/man3/hm2_pktuart_setup.3hm2:102
#, no-wrap
msgid "FUTURE DEVELOPMENT"
msgstr ""

#. type: Plain text
#: man/man3/hm2_pktuart_setup.3hm2:104
msgid ""
"This function is subject to change as digital filters will be added on the "
"Rx UART, and bit rate register will gain a 12 bit field for the input filter "
"constant."
msgstr ""

#. type: TH
#: man/man3/hm2_tram_add_bspi_frame.3hm2:3
#, no-wrap
msgid "hm2_tram_add_bspi_frame"
msgstr ""

#. type: Plain text
#: man/man3/hm2_tram_add_bspi_frame.3hm2:7
msgid "hm2_tram_add_bspi_frame - add a register-write to the Hostmot2 TRAM"
msgstr ""

#. type: Plain text
#: man/man3/hm2_tram_add_bspi_frame.3hm2:13
#, no-wrap
msgid "hm2_tram_add_bspi_frame(char *name, int chan, u32 **wbuff, u32 **rbuff)\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_tram_add_bspi_frame.3hm2:21
msgid ""
"B<hm2_tram_add_bspi_frame> Add a regular (every thread) write event to the "
"Hostmot2 tram for bspi instance \"name\". \"name\" is a unique string given "
"to each bspi channel during hostmot2 setup. The names of the available "
"channels are printed to standard output during the driver loading process "
"and take the form: hm2_E<lt>board nameE<gt>.E<lt>board indexE<gt>.bspi."
"E<lt>indexE<gt> For example hm2_5i23.0.bspi.0"
msgstr ""

#. type: Plain text
#: man/man3/hm2_tram_add_bspi_frame.3hm2:28
msgid ""
"This function is used to add a regular, every thread, write or write-read "
"transaction to the Translation RAM system. A write need not have a read (use "
"0 for **rbuff) but it is an error to have a read without a write. Note that "
"the TRAM list is not actioned until the hm2_allocate_bspi_tram function is "
"called.  The read and write parameters must be pointers to pointers, as TRAM "
"re-maps the buffers into contiguous memory."
msgstr ""

#. type: Plain text
#: man/man3/hm2_tram_add_bspi_frame.3hm2:41
msgid ""
"B<hm2_allocate_bspi_tram(3hm2)>, B<hm2_bspi_set_read_function(3hm2)>, "
"B<hm2_bspi_setup_chan(3hm2)>, B<hm2_bspi_set_write_function(3hm2)>, "
"B<hm2_bspi_write_chan(3hm2)>, See src/hal/drivers mesa_7i65.comp for an "
"example usage."
msgstr ""

#. type: TH
#: man/man3/hm2_uart_read.3hm2:3
#, no-wrap
msgid "hm2_uart_read"
msgstr ""

#. type: TH
#: man/man3/hm2_uart_read.3hm2:3
#, no-wrap
msgid "2012-05-23"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_read.3hm2:7
msgid "hm2_uart_read - read data from a Hostmot2 UART buffer"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_read.3hm2:13
#, no-wrap
msgid "int hm2_uart_read(char *name, unsigned char *data)\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_read.3hm2:20
msgid ""
"B<hm2_uart_read> read data from the UART \"name\".  \"name\" is a unique "
"string given to each UART during hostmot2 setup. The names of the available "
"channels are printed to standard output during the driver loading process "
"and take the form: hm2_E<lt>board nameE<gt>.E<lt>board indexE<gt>.uart."
"E<lt>indexE<gt> For example hm2_5i23.0.uart.0"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_read.3hm2:25
msgid ""
"This function reads a variable number of bytes from the the specified "
"channel. It should be used inside a realtime HAL component registered with "
"the main hostmot2 driver using the function hm2_uart_set_read_function in "
"the setup code."
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_read.3hm2:28
msgid ""
"Note that the UART Receive FIFO is only 16 bytes deep,(the transmit FIFO is "
"64 bytes) and \"data\" needs to be at least that large or undefined mayhem "
"will ensue."
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_read.3hm2:31
msgid "Returns the number of bytes read on success and -1 on failure."
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_read.3hm2:34
msgid "B<hm2_uart_setup>(3hm2), B<hm2_uart_send>(3hm2)"
msgstr ""

#. type: TP
#: man/man3/hm2_uart_read.3hm2:34 man/man3/hm2_uart_send.3hm2:34
#: man/man3/hm2_uart_setup.3hm2:62
#, no-wrap
msgid "See src/hal/drivers mesa_uart.comp for an example usage."
msgstr ""

#. type: TH
#: man/man3/hm2_uart_send.3hm2:3
#, no-wrap
msgid "hm2_uart_send"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_send.3hm2:7
msgid "hm2_uart_send - write data to a Hostmot2 UART"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_send.3hm2:13
#, no-wrap
msgid "int hm2_uart_send(char* name,  unsigned char data[], int count)\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_send.3hm2:17
msgid ""
"B<hm2_uart_send> write 'count' bytes of data to the UART \"name\" from the "
"buffer 'data'."
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_send.3hm2:20
msgid ""
"The UART FIFO is 64 bytes deep, attempts to transmit more than 64 bytes may "
"have unexpected effects."
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_send.3hm2:25
msgid ""
"\"name\" is a unique string given to each UART during hostmot2 setup. The "
"names of the available channels are printed to standard output during the "
"driver loading process and take the form: hm2_E<lt>board nameE<gt>."
"E<lt>board indexE<gt>.uart.E<lt>indexE<gt> For example hm2_5i23.0.uart.0"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_send.3hm2:28
msgid ""
"This function performs writes of data to the specified UART.  It should be "
"used inside a function in a realtime or userspace HAL component."
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_send.3hm2:31
msgid "Returns the number of bytes sent on success and -1 on failure."
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_send.3hm2:34
msgid "B<hm2_uart_setup>(3hm2), B<hm2_uart_read>(3hm2)"
msgstr ""

#. type: TH
#: man/man3/hm2_uart_setup.3hm2:3
#, no-wrap
msgid "hm2_uart_setup"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_setup.3hm2:7
msgid "hm2_uart_setup - setup a Hostmot2 UART"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_setup.3hm2:12
#, no-wrap
msgid "int hm2_uart_setup(char *name, int bitrate, s32 tx_mode, s32 rx_mode){\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_setup.3hm2:23
msgid ""
"B<hm2_uart_setup> Setup the bitrate for the UART named \"name\".  \"name\" "
"is a unique string given to each UART during hostmot2 setup. The names of "
"the available UARTs are printed to standard output during the driver loading "
"process and take the form: hm2_E<lt>board nameE<gt>.E<lt>board indexE<gt>."
"uart.E<lt>indexE<gt> For example hm2_5i23.0.uart.0 The minimum bitrate is "
"approximately 50bps, and the maximum around the FPGA frequency, 48 MHz for a "
"5i23.  The UART function allows different RX and TX bitrates, but that is "
"not currently supported by this driver"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_setup.3hm2:37
#, no-wrap
msgid ""
"tx_mode is bit mask defined in the Hostmot2 regmap:\n"
"Bit 0..3 = TXEnable delay. TXEnable delay specifies the transmit data \n"
"        holdoff time from the TXenable signal valid state. This is used for \n"
"        RS-485 (half duplex) operation, to delay transmit data until the driver \n"
"        is enabled, allowing for driver enable delays, isolation barrier delays \n"
"        etc. Delay is in units of ClockLow period.\n"
"Bit 4 = FIFOError, it indicates that a host push has overflowed the FIFO\n"
"        (Mainly for driver debugging)\n"
"Bit 5 = DriveEnableAuto, When set, enables Drive when any data is in FIFO or \n"
"        Xmit Shift register,removes drive when FIFO and Xmit shift register \n"
"        are empty.\n"
"Bit 6 = DriveEnableBit, If DriveEnableAuto is 0, controls Drive (\n"
"        for software control of Xmit drive)\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_setup.3hm2:49
#, no-wrap
msgid ""
"rx_mode is bit mask defined in the Hostmot2 regmap:\n"
"Bit 0 = FalseStart bit Status, 1 = false start bit detected\n"
"Bit 1 = OverRun Status, 1 = overrun condition detected (no valid stop bit)\n"
"Bit 2 = RXMaskEnable, 1= enable RXMask for half duplex operation,\n"
"    0 = ignore RXMask\n"
"Bit 4 = FIFOError, indicates that a host read has attempted to read more \n"
"        data than available. (mainly for driver debugging)\n"
"Bit 5 = LostDataError, indicates that data was received with no room in FIFO, \n"
"        therefore lost\n"
"Bit 6 = RXMask, RO RXMASK status\n"
"Bit 7 = FIFO Has Data\n"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_setup.3hm2:52
msgid ""
"rx_mode and tx_mode registers are currently write-only. There should "
"possibly be a get-status function."
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_setup.3hm2:59
msgid "Returns0 on success and -1 on failure"
msgstr ""

#. type: Plain text
#: man/man3/hm2_uart_setup.3hm2:62
msgid "B<hm2_uart_send>(3hm2), B<hm2_uart_read>(3hm2)"
msgstr ""

#. type: TH
#: man/man3/intro.3hal:1 man/man3/intro.3rtapi:1
#, no-wrap
msgid "intro"
msgstr ""

#. type: Plain text
#: man/man3/intro.3hal:5
msgid "HAL - Introduction to the HAL API"
msgstr ""

#. type: Plain text
#: man/man3/intro.3hal:10
msgid ""
"HAL stands for Hardware Abstraction Layer, and is used by LinuxCNC to "
"transfer realtime data to and from I/O devices and other low-level modules."
msgstr ""

#. type: Plain text
#: man/man3/intro.3hal:17
msgid ""
"B<hal.h> defines the API and data structures used by the HAL.  This file is "
"included in both realtime and non-realtime HAL components.  HAL uses the "
"RTPAI real-time interface, and the #define symbols RTAPI and ULAPI are used "
"to distinguish between realtime and non-realtime code.  The API defined in "
"this file is implemented in hal_lib.c and can be compiled for linking to "
"either realtime or user space HAL components."
msgstr ""

#. type: Plain text
#: man/man3/intro.3hal:26
msgid ""
"The HAL is a very modular approach to the low level parts of a motion "
"control system.  The goal of the HAL is to allow a systems integrator to "
"connect a group of software components together to meet whatever I/O "
"requirements he (or she) needs.  This includes realtime and non-realtime I/"
"O, as well as basic motor control up to and including a PID position loop.  "
"What these functions have in common is that they all process signals.  In "
"general, a signal is a data item that is updated at regular intervals.  For "
"example, a PID loop gets position command and feedback signals, and produces "
"a velocity command signal."
msgstr ""

#. type: Plain text
#: man/man3/intro.3hal:35
msgid ""
"HAL is based on the approach used to design electronic circuits.  In "
"electronics, off-the-shelf components like integrated circuits are placed on "
"a circuit board and their pins are interconnected to build whatever overall "
"function is needed.  The individual components may be as simple as an op-"
"amp, or as complex as a digital signal processor.  Each component can be "
"individually tested, to make sure it works as designed.  After the "
"components are placed in a larger circuit, the signals connecting them can "
"still be monitored for testing and troubleshooting."
msgstr ""

#. type: Plain text
#: man/man3/intro.3hal:38
msgid ""
"Like electronic components, HAL components have pins, and the pins can be "
"interconnected by signals."
msgstr ""

#. type: Plain text
#: man/man3/intro.3hal:47
msgid ""
"In the HAL, a I<signal> contains the actual data value that passes from one "
"pin to another.  When a signal is created, space is allocated for the data "
"value.  A I<pin> on the other hand, is a pointer, not a data value.  When a "
"pin is connected to a signal, the pin's pointer is set to point at the "
"signal's data value.  This allows the component to access the signal with "
"very little run-time overhead.  (If a pin is not linked to any signal, the "
"pointer points to a dummy location, so the realtime code doesn't have to "
"deal with null pointers or treat unlinked variables as a special case in any "
"way.)"
msgstr ""

#. type: Plain text
#: man/man3/intro.3hal:56
msgid ""
"There are three approaches to writing a HAL component.  Those that do not "
"require hard realtime performance can be written as a single user mode "
"process.  Components that need hard realtime performance but have simple "
"configuration and init requirements can be done as a single kernel module, "
"using either pre-defined init info, or insmod-time parameters.  Finally, "
"complex components may use both a kernel module for the realtime part, and a "
"user space process to handle INI file access, user interface (possibly "
"including GUI features), and other details."
msgstr ""

#. type: Plain text
#: man/man3/intro.3hal:65
msgid ""
"HAL uses the RTAPI/ULAPI interface.  If RTAPI is #defined hal_lib.c would "
"generate a kernel module hal_lib.o that is insmoded and provides the "
"functions for all kernel module based components.  The same source file "
"compiled with the ULAPI #define would make a user space hal_lib.o that is "
"statically linked to user space code to make user space executables.  The "
"variable lists and link information are stored in a block of shared memory "
"and protected with mutexes, so that kernel modules and any of several user "
"mode programs can access the data."
msgstr ""

#. type: Plain text
#: man/man3/intro.3hal:68
msgid "For an explanation of realtime considerations, see B<intro(3rtapi)>."
msgstr ""

#. type: SH
#: man/man3/intro.3hal:69
#, no-wrap
msgid "HAL STATUS CODES"
msgstr ""

#. type: Plain text
#: man/man3/intro.3hal:72
msgid ""
"Except as noted in specific manual pages, HAL returns negative errno values "
"for errors, and nonnegative values for success."
msgstr ""

#. type: Plain text
#: man/man3/intro.3hal:74
msgid "B<intro(3rtapi)>"
msgstr ""

#. type: TH
#: man/man3/intro.3rtapi:1
#, no-wrap
msgid "2006-10-02"
msgstr ""

#. type: Plain text
#: man/man3/intro.3rtapi:5
msgid "rtapi - Introduction to the RTAPI API"
msgstr ""

#. type: Plain text
#: man/man3/intro.3rtapi:9
msgid ""
"RTAPI is a library providing a uniform API for several real time operating "
"systems.  As of LinuxCNC 2.7, POSIX threads and RTAI are supported."
msgstr ""

#. type: SH
#: man/man3/intro.3rtapi:10
#, no-wrap
msgid "HEADER FILES"
msgstr ""

#. type: SS
#: man/man3/intro.3rtapi:11
#, no-wrap
msgid "rtapi.h"
msgstr ""

#. type: Plain text
#: man/man3/intro.3rtapi:17
msgid ""
"The file B<rtapi.h> defines the RTAPI for both realtime and non-realtime "
"code.  This is a change from Rev 2, where the non-realtime (user space) API "
"was defined in ulapi.h and used different function names.  The symbols RTAPI "
"and ULAPI are used to determine which mode is being compiled, RTAPI for "
"realtime and ULAPI for non-realtime."
msgstr ""

#. type: SS
#: man/man3/intro.3rtapi:18
#, no-wrap
msgid "rtapi_math.h"
msgstr ""

#. type: Plain text
#: man/man3/intro.3rtapi:21
msgid ""
"The file rtapi_math.h defines floating-point functions and constants.  It "
"should be used instead of E<lt>math.hE<gt> in rtapi real-time components."
msgstr ""

#. type: SS
#: man/man3/intro.3rtapi:22
#, no-wrap
msgid "rtapi_string.h"
msgstr ""

#. type: Plain text
#: man/man3/intro.3rtapi:25
msgid ""
"The file rtapi_string.h defines string-related functions.  It should be used "
"instead of E<lt>string.hE<gt> in rtapi real-time components."
msgstr ""

#. type: SS
#: man/man3/intro.3rtapi:26
#, no-wrap
msgid "rtapi_byteorder.h"
msgstr ""

#. type: Plain text
#: man/man3/intro.3rtapi:31
msgid ""
"This file defines the preprocessor macros RTAPI_BIG_ENDIAN, "
"RTAPI_LITTLE_ENDIAN, and RTAPI_FLOAT_BIG_ENDIAN as true or false depending "
"on the characteristics of the target system.  It should be used instead of "
"B<E<lt>endian.hE<gt>> (userspace) or B<E<lt>linux/byteorder.hE<gt>> (kernel "
"space)."
msgstr ""

#. type: SS
#: man/man3/intro.3rtapi:32
#, no-wrap
msgid "rtapi_limits.h"
msgstr ""

#. type: Plain text
#: man/man3/intro.3rtapi:36
msgid ""
"This file defines the minimum and maximum value of some fundamental integral "
"types, such as INT_MIN and INT_MAX.  This should be used instead of "
"B<E<lt>limits.hE<gt>> because that header file is not available to kernel "
"modules."
msgstr ""

#. type: SS
#: man/man3/intro.3rtapi:38
#, no-wrap
msgid "Userspace code"
msgstr ""

#. type: Plain text
#: man/man3/intro.3rtapi:41
msgid ""
"Certain functions are not available in userspace code.  This includes "
"functions that perform direct device access such as B<rtapi_inb(3)>."
msgstr ""

#. type: SS
#: man/man3/intro.3rtapi:42
#, no-wrap
msgid "Init/cleanup code"
msgstr ""

#. type: Plain text
#: man/man3/intro.3rtapi:46
msgid ""
"Certain functions may only be called from realtime init/cleanup code.  This "
"includes functions that perform memory allocation, such as "
"B<rtapi_shmem_new(3)>."
msgstr ""

#. type: SS
#: man/man3/intro.3rtapi:47
#, no-wrap
msgid "Realtime code"
msgstr ""

#. type: Plain text
#: man/man3/intro.3rtapi:52
msgid ""
"Only a few functions may be called from realtime code.  This includes "
"functions that perform direct device access such as B<rtapi_inb(3)>.  It "
"excludes most Linux kernel APIs such as do_gettimeofday(3) and many rtapi "
"APIs such as rtapi_shmem_new(3)."
msgstr ""

#. type: SS
#: man/man3/intro.3rtapi:53
#, no-wrap
msgid "Simulator"
msgstr ""

#. type: Plain text
#: man/man3/intro.3rtapi:60
msgid ""
"For an RTAPI module to be buildable in the \"sim\" environment (fake "
"realtime system without special privileges), it must not use B<any> linux "
"kernel APIs, and must not use the RTAPI APIs for direct device access such "
"as B<rtapi_inb(3)>.  This automatically includes any hardware device "
"drivers, and also devices which use Linux kernel APIs to do things like "
"create special devices or entries in the B</proc> filesystem."
msgstr ""

#. type: SH
#: man/man3/intro.3rtapi:61
#, no-wrap
msgid "RTAPI STATUS CODES"
msgstr ""

#. type: Plain text
#: man/man3/intro.3rtapi:64
msgid ""
"Except as noted in specific manual pages, RTAPI returns negative errno "
"values for errors, and nonnegative values for success."
msgstr ""

#. type: TH
#: man/man3/PM_ROTATION_VECTOR.3:1
#, no-wrap
msgid "libposemath"
msgstr ""

#. type: Plain text
#: man/man3/PM_ROTATION_VECTOR.3:5
msgid "PM_CARTESIAN - Three-axis cartesian position"
msgstr ""

#. type: Plain text
#: man/man3/PM_ROTATION_VECTOR.3:9
msgid "B<#include posemath.h>"
msgstr ""

#. type: Plain text
#: man/man3/PM_ROTATION_VECTOR.3:11
msgid "B<struct PM_CARTESIAN;>"
msgstr ""

#. type: SH
#: man/man3/PM_ROTATION_VECTOR.3:12
#, no-wrap
msgid "CONSTRUCTORS"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:13
#, no-wrap
msgid "B<PM_CARTESIAN()>"
msgstr ""

#. type: Plain text
#: man/man3/PM_ROTATION_VECTOR.3:16
msgid "Construct the point E<lt>0,0,0E<gt>"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:16
#, no-wrap
msgid "B<PMCARTESIAN(double >I<x>B<, double >I<y>B<, double >I<z>B<)>"
msgstr ""

#. type: Plain text
#: man/man3/PM_ROTATION_VECTOR.3:19
msgid "Construct the point E<lt>I<x>B<,>I<y>B<,>I<z>B<E<gt>>"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:19
#, no-wrap
msgid "B<PMCARTESIAN(const PM_CARTESIAN &v)>"
msgstr ""

#. type: Plain text
#: man/man3/PM_ROTATION_VECTOR.3:22
msgid "Construct a copy of the point I<v>"
msgstr ""

#. type: SH
#: man/man3/PM_ROTATION_VECTOR.3:23
#, no-wrap
msgid "DATA"
msgstr ""

#. type: Plain text
#: man/man3/PM_ROTATION_VECTOR.3:25
msgid "B<double >I<x>B<, >I<y>B<, >I<z>"
msgstr ""

#. type: SH
#: man/man3/PM_ROTATION_VECTOR.3:26
#, no-wrap
msgid "OPERATORS"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:27
#, no-wrap
msgid "B<operator[](int n);>"
msgstr ""

#. type: Plain text
#: man/man3/PM_ROTATION_VECTOR.3:30
msgid "Return the I<n>th component of the vector (x=0, y=1, z=2)"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:30
#, no-wrap
msgid "B<int operator==(PM_CARTESIAN >I<v1>B<, PM_CARTESIAN >I<v2>B<)>"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:34
#, no-wrap
msgid "B<int operator!=(PM_CARTESIAN >I<v1>B<, PM_CARTESIAN >I<v2>B<)>"
msgstr ""

#. type: Plain text
#: man/man3/PM_ROTATION_VECTOR.3:37
msgid "Elementwise equality and inequality operator"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:37
#, no-wrap
msgid "B<PM_CARTESIAN operator+(PM_CARTESIAN >I<v1>B<, PM_CARTESIAN>I<v2>B<)>"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:41
#, no-wrap
msgid "B<PM_CARTESIAN operator-(PM_CARTESIAN >I<v1>B<, PM_CARTESIAN>I<v2>B<)>"
msgstr ""

#. type: Plain text
#: man/man3/PM_ROTATION_VECTOR.3:44
msgid "Addition and subtraction of vectors"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:44
#, no-wrap
msgid "B<PM_CARTESIAN operator*(double >I<s>B<, PM_CARTESIAN >I<v>B<)>"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:48
#, no-wrap
msgid "B<PM_CARTESIAN operator*(PM_CARTESIAN >I<v>B<, double >I<s>B<)>"
msgstr ""

#. type: Plain text
#: man/man3/PM_ROTATION_VECTOR.3:51
msgid "Scalar multiplication"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:51
#, no-wrap
msgid "B<PM_CARTESIAN operator/(PM_CARTESIAN >I<v>B<, double >I<s>B<)>"
msgstr ""

#. type: Plain text
#: man/man3/PM_ROTATION_VECTOR.3:54
msgid "Scalar multiplication by I<1/s>"
msgstr ""

#. type: SH
#: man/man3/PM_ROTATION_VECTOR.3:54
#, no-wrap
msgid "OTHER FUNCTIONS ON PM_CARTESIAN OBJECTS"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:55
#, no-wrap
msgid "B<double dot(PM_CARTESIAN >I<v1>B<, PM_CARTESIAN >I<v2>B<)>"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:59
#, no-wrap
msgid "B<PM_CARTESIAN cross(PM_CARTESIAN >I<v1>B<, PM_CARTESIAN >I<v2>B<)>"
msgstr ""

#. type: TP
#: man/man3/PM_ROTATION_VECTOR.3:63
#, no-wrap
msgid "B<PM_CARTESIAN norm(PM_CARTESIAN >I<v>B<)>"
msgstr ""

#. type: TH
#: man/man3/rtapi_app_exit.3rtapi:1
#, no-wrap
msgid "rtapi_app_exit"
msgstr ""

#. type: TH
#: man/man3/rtapi_app_exit.3rtapi:1 man/man3/rtapi_app_main.3rtapi:1
#, no-wrap
msgid "2008-05-26"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_exit.3rtapi:5
msgid "rtapi_app_exit - User-provided function to shut down a component"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_exit.3rtapi:9 man/man3/rtapi_app_main.3rtapi:9
#, no-wrap
msgid "B<#include E<lt>rtapi_app.hE<gt>>\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_exit.3rtapi:11
#, no-wrap
msgid "B<void rtapi_app_exit(void) {>I<...>B<}>\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_exit.3rtapi:19
msgid ""
"The body of B<rtapi_app_exit>, which is provided by the component author, "
"generally consists of a call to rtapi_exit or hal_exit, preceded by other "
"component-specific shutdown code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_exit.3rtapi:23
msgid ""
"This code is called when unloading a component which successfully "
"initialized (i.e., returned zero from its B<rtapi_app_main>).  It is not "
"called when the component did not successfully initialize."
msgstr ""

#. type: SH
#: man/man3/rtapi_app_exit.3rtapi:24
#, no-wrap
msgid "RETURN CODE"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_exit.3rtapi:26 man/man3/rtapi_bool.3rtapi:35
#: man/man3/rtapi_print.3rtapi:56 man/man3/rtapi_stdint.3rtapi:67
msgid "None."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_exit.3rtapi:30 man/man3/rtapi_app_main.3rtapi:28
msgid ""
"Called automatically by the rtapi infrastructure in an initialization (not "
"realtime) context."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_exit.3rtapi:34
msgid "B<rtapi_app_main(3rtapi)>, B<rtapi_exit(3rtapi)>, B<hal_exit(3hal)>"
msgstr ""

#. type: TH
#: man/man3/rtapi_app_main.3rtapi:1
#, no-wrap
msgid "rtapi_app_main"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_main.3rtapi:5
msgid "rtapi_app_main - User-provided function to initialize a component"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_main.3rtapi:11
#, no-wrap
msgid "B<int rtapi_app_main(void) {>I<...>B<}>\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_main.3rtapi:19
msgid ""
"The body of B<rtapi_app_main>, which is provided by the component author, "
"generally consists of a call to rtapi_init or hal_init, followed by other "
"component-specific initialization code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_main.3rtapi:24
msgid ""
"Return 0 for success.  Return a negative errno value (e.g., -EINVAL) on "
"error.  Existing code also returns RTAPI or HAL error values, but using "
"negative errno values gives better diagnostics from insmod."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_app_main.3rtapi:32
msgid "B<rtapi_app_exit(3rtapi)>, B<rtapi_init(3rtapi)>, B<hal_init(3hal)>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:5
msgid "rtapi_atomic - subset of C11 E<lt>stdatomic.hE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:9
msgid "#include E<lt>rtapi_atomic.hE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:11
msgid "enum memory_order { ... };"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:13
msgid "#define atomic_store(obj, desired)..."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:15
msgid "#define atomic_store_explicit(obj, desired, order)..."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:17
msgid "#define atomic_load(obj)..."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:19
msgid "#define atomic_load_explicit(obj, order)..."
msgstr ""

#. type: IP
#: man/man3/rtapi_atomic.3rtapi:21
#, no-wrap
msgid "B<volatile A*> I<obj>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:27
msgid ""
"A pointer to a volatile object that is the destination of the store or the "
"source of the load.  The pointer must have an appropriate type and alignment "
"such that the underlying store or load operation itself is atomic; at a "
"minimum, a properly aligned \"int\" may be assumed to be such a type.  "
"Improper size or alignment are undiagnosed errors."
msgstr ""

#. type: IP
#: man/man3/rtapi_atomic.3rtapi:27
#, no-wrap
msgid "B<C> I<desired>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:29
msgid ""
"The value to be stored in the object.  \"*obj = desired\" must be well-"
"formed."
msgstr ""

#. type: IP
#: man/man3/rtapi_atomic.3rtapi:29
#, no-wrap
msgid "B<memory_order> order"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:31
msgid "The required memory ordering semantic."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:40
msgid ""
"This header provides at least the subset of C11's E<lt>stdatomic.hE<gt> "
"given above.  When there is an ordering requirement for multiple values read "
"or written in RTAPI shared memory areas by other threads of execution, "
"including the values of HAL pins and parameters, these functions (or "
"function-like macros) are the only way to ensure the ordering requirement is "
"obeyed.  Otherwise, according to architecture-specific rules, loads and "
"stores may be reordered from their normal source code order."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:44
msgid ""
"For example, to leave a message in a shared memory area from one thread and "
"retrieve it from another, the writer must use an atomic store for the "
"\"message is complete\" variable, and the reader must use an atomic load "
"when checking that variable:"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:50
#, no-wrap
msgid ""
"// producer\n"
"*message = 42;\n"
"atomic_store_explicit(message_ready, 1, memory_order_release);\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:54
#, no-wrap
msgid ""
"// consumer\n"
"while(atomic_load_explicit(message_ready, memory_order_acquire) == 0) sched_yield();\n"
"printf(\"message was %d\\en\", *message); // must print 42\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:59
msgid "May be called from any code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:66
msgid ""
"B<atomic_load> and B<atomic_load_explicit> return the value pointed to by "
"the I<obj> argument."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:71
msgid "B<atomic_store> and B<atomic_store_explicit> have no return value."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_atomic.3rtapi:74
msgid ""
"B<E<lt>stdatomic.hE<gt>> (C11), B<E<lt>rtapi_bitops.hE<gt>> (for other "
"atomic memory operations supported by rtapi)"
msgstr ""

#. type: TH
#: man/man3/rtapi_bool.3rtapi:22 man/man3/rtapi_byteorder.3rtapi:22
#: man/man3/rtapi_device.3rtapi:22 man/man3/rtapi_firmware.3rtapi:22
#: man/man3/rtapi_gfp.3rtapi:22 man/man3/rtapi_io.3rtapi:22
#: man/man3/rtapi_list.3rtapi:22 man/man3/rtapi_pci.3rtapi:22
#: man/man3/rtapi_slab.3rtapi:22 man/man3/rtapi_stdint.3rtapi:22
#: man/man3/rtapi_string.3rtapi:22
#, no-wrap
msgid "2014-06-28"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_bool.3rtapi:26
msgid "rtapi_bool.h - RTAPI wrappers for linux kernel functionality"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_bool.3rtapi:30
msgid "#include E<lt>rtapi_bool.hE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_bool.3rtapi:33
msgid ""
"Includes either E<lt>stdbool.hE<gt> or E<lt>linux/types.hE<gt> as "
"appropriate, to obtain suitable declarations of \"bool\", \"true\" and "
"\"false\"."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_bool.3rtapi:36
msgid "Also permitted in C++ programs, where including it has no effect."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_byteorder.3rtapi:26
msgid "rtapi_byteorder.h - RTAPI wrappers for linux kernel functionality"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_byteorder.3rtapi:30
msgid "#include E<lt>rtapi_byteorder.hE<gt>"
msgstr ""

#. type: TP
#: man/man3/rtapi_byteorder.3rtapi:30
#, no-wrap
msgid "RTAPI_BIG_ENDIAN"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_byteorder.3rtapi:33
msgid "Defined to 1 if the platform is big-endian, 0 otherwise"
msgstr ""

#. type: TP
#: man/man3/rtapi_byteorder.3rtapi:33
#, no-wrap
msgid "RTAPI_LITTLE_ENDIAN"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_byteorder.3rtapi:36
msgid "Defined to 1 if the platform is little-endian, 0 otherwise"
msgstr ""

#. type: TP
#: man/man3/rtapi_byteorder.3rtapi:36
#, no-wrap
msgid "RTAPI_FLOAT_BIG_ENDIAN"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_byteorder.3rtapi:39
msgid ""
"Defined to 1 if the platform double-precision value is big-endian, 0 "
"otherwise."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_byteorder.3rtapi:43 man/man3/rtapi_device.3rtapi:45
#: man/man3/rtapi_firmware.3rtapi:44 man/man3/rtapi_gfp.3rtapi:40
#: man/man3/rtapi_io.3rtapi:46 man/man3/rtapi_list.3rtapi:48
#: man/man3/rtapi_pci.3rtapi:75 man/man3/rtapi_slab.3rtapi:41
#: man/man3/rtapi_stdint.3rtapi:60 man/man3/rtapi_string.3rtapi:39
msgid ""
"In kernel space, each rtapi_xxx or RTAPI_XXX identifier is mapped to the "
"underlying kernel functionality, if available."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_byteorder.3rtapi:48
msgid ""
"In userspace, or in kernels where the underlying functionality is not "
"provided by a kernel, generally another implementation--possibly with "
"reduced functionality--is provided.  (For example, the userspace "
"implementation for rtapi_byteorder_register always succeeds)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_byteorder.3rtapi:51
msgid "May be used at any time."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_byteorder.3rtapi:54 man/man3/rtapi_device.3rtapi:54
#: man/man3/rtapi_firmware.3rtapi:53 man/man3/rtapi_gfp.3rtapi:49
#: man/man3/rtapi_io.3rtapi:57 man/man3/rtapi_list.3rtapi:59
#: man/man3/rtapi_pci.3rtapi:84 man/man3/rtapi_slab.3rtapi:51
#: man/man3/rtapi_stdint.3rtapi:69 man/man3/rtapi_string.3rtapi:49
msgid "As in Linux."
msgstr ""

#. type: TH
#: man/man3/rtapi_clock_set_period.3rtapi:1
#, no-wrap
msgid "rtapi_clock_set_period"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_clock_set_period.3rtapi:5
msgid "rtapi_clock_set_period - set the basic time interval for realtime tasks"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_clock_set_period.3rtapi:9
#, no-wrap
msgid " rtapi_clock_set_period(long int I<nsec>)\n"
msgstr ""

#. type: IP
#: man/man3/rtapi_clock_set_period.3rtapi:11 man/man3/rtapi_delay.3rtapi:13
#, no-wrap
msgid "I<nsec>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_clock_set_period.3rtapi:13
msgid "The desired basic time interval for realtime tasks."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_clock_set_period.3rtapi:28
msgid ""
"B<rtapi_clock_set_period> sets the basic time interval for realtime tasks.  "
"All periodic tasks will run at an integer multiple of this period.  The "
"first call to B<rtapi_clock_set_period> with I<nsec> greater than zero will "
"start the clock, using I<nsec> as the clock period in nano-seconds.  Due to "
"hardware and RTOS limitations, the actual period may not be exactly what was "
"requested.  On success, the function will return the actual clock period if "
"it is available, otherwise it returns the requested period.  If the "
"requested period is outside the limits imposed by the hardware or RTOS, it "
"returns B<-EINVAL> and does not start the clock.  Once the clock is started, "
"subsequent calls with non-zero I<nsec> return B<-EINVAL> and have no "
"effect.  Calling B<rtapi_clock_set_period> with I<nsec> set to zero queries "
"the clock, returning the current clock period, or zero if the clock has not "
"yet been started."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_clock_set_period.3rtapi:32 man/man3/rtapi_slab.3rtapi:49
#: man/man3/rtapi_string.3rtapi:47
msgid ""
"Call only from within init/cleanup code, not from realtime tasks.  This "
"function is not available from user (non-realtime) code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_clock_set_period.3rtapi:35
msgid ""
"The actual period provided by the RTOS, which may be different than the "
"requested period, or a RTAPI status code."
msgstr ""

#. type: TH
#: man/man3/rtapi_delay.3rtapi:1
#, no-wrap
msgid "rtapi_delay"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_delay.3rtapi:5
msgid "rtapi_delay - Busy-loop for short delays"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_delay.3rtapi:9
msgid "void rtapi_delay(long int I<nsec>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_delay.3rtapi:11
msgid "void rtapi_delay_max()"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_delay.3rtapi:15
msgid "The desired delay length in nanoseconds"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_delay.3rtapi:19
msgid ""
"B<rtapi_delay> is a simple delay.  It is intended only for short delays, "
"since it simply loops, wasting CPU cycles."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_delay.3rtapi:23
msgid ""
"B<rtapi_delay_max> returns the max delay permitted (usually approximately "
"1/4 of the clock period).  Any call to B<rtapi_delay> requesting a delay "
"longer than the max will delay for the max time only."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_delay.3rtapi:28
msgid ""
"B<rtapi_delay_max> should be called before using B<rtapi_delay> to make sure "
"the required delays can be achieved.  The actual resolution of the delay may "
"be as good as one nano-second, or as bad as a several microseconds."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_delay.3rtapi:31 man/man3/rtapi_task_pause.3rtapi:42
#: man/man3/rtapi_task_self.3rtapi:16
msgid "May be called from init/cleanup code, and from within realtime tasks."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_delay.3rtapi:34
msgid "B<rtapi_delay_max returns the maximum delay permitted.>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_delay.3rtapi:36
msgid "B<rtapi_clock_set_period(3rtapi)>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_device.3rtapi:26
msgid "rtapi_device.h - RTAPI wrappers for linux kernel functionality"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_device.3rtapi:30
msgid "#include E<lt>rtapi_device.hE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_device.3rtapi:32
msgid "struct rtapi_device;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_device.3rtapi:34
msgid ""
"int rtapi_dev_set_name(struct rtapi_device *dev, const char *name, ...);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_device.3rtapi:36
msgid "int rtapi_device_register(struct rtapi_device *dev);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_device.3rtapi:38
msgid "int rtapi_device_unregister(struct rtapi_device *dev);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_device.3rtapi:50 man/man3/rtapi_firmware.3rtapi:49
#: man/man3/rtapi_gfp.3rtapi:45 man/man3/rtapi_io.3rtapi:51
#: man/man3/rtapi_list.3rtapi:53 man/man3/rtapi_slab.3rtapi:46
#: man/man3/rtapi_stdint.3rtapi:65 man/man3/rtapi_string.3rtapi:44
msgid ""
"In userspace, or in kernels where the underlying functionality is not "
"provided by a kernel, generally another implementation--possibly with "
"reduced functionality--is provided.  (For example, the userspace "
"implementation for rtapi_device_register always succeeds)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_device.3rtapi:52 man/man3/rtapi_firmware.3rtapi:51
#: man/man3/rtapi_gfp.3rtapi:47 man/man3/rtapi_pci.3rtapi:82
msgid ""
"Typically, these functions may be called from realtime init/cleanup code."
msgstr ""

#. type: TH
#: man/man3/rtapi_div_u64.3rtapi:16
#, no-wrap
msgid "rtapi_div_u64"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:20
msgid "rtapi_div_u64 - unsigned division of a 64-bit number by a 32-bit number"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:24
msgid ""
"__u64 rtapi_div_u64_rem(__u64 I<dividend>, __u32 I<divisor>, __u32 "
"*I<remainder>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:26
msgid "__u64 rtapi_div_u64(__u64 I<dividend>, __u32 I<divisor>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:28
msgid "__s64 rtapi_div_s64(__s64 I<dividend>, __s32 I<divisor>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:30
msgid ""
"__s64 rtapi_div_s64_rem(__s64 I<dividend>, __s32 I<divisor>, __s32 "
"*I<remainder>)"
msgstr ""

#. type: IP
#: man/man3/rtapi_div_u64.3rtapi:32
#, no-wrap
msgid "I<dividend>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:34
msgid "The value to be divided"
msgstr ""

#. type: IP
#: man/man3/rtapi_div_u64.3rtapi:34
#, no-wrap
msgid "I<divisor>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:36
msgid "The value to divide by"
msgstr ""

#. type: IP
#: man/man3/rtapi_div_u64.3rtapi:36
#, no-wrap
msgid "I<remainder>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:40
msgid ""
"Pointer to the location to store the remainder.  This may not be a NULL "
"pointer.  If the remainder is not desired, call B<rtapi_div_u64> or "
"B<rtapi_div_s64>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:43
msgid ""
"Perform integer division (and optionally compute the remainder) with a 64-"
"bit dividend and 32-bit divisor."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:47
msgid ""
"The result of integer division of I<dividend / divisor>.  In versions with "
"the I<remainder> argument, the remainder is stored in the pointed-to "
"location."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:51
msgid ""
"If the result of the division does not fit in the return type, the result is "
"undefined."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:55
msgid ""
"This function exists because in kernel space the use of the division "
"operator on a 64-bit type can lead to an undefined symbol such as __umoddi3 "
"when the module is loaded."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_div_u64.3rtapi:58
msgid ""
"May be called from init/cleanup code and from within realtime tasks.  "
"Available in userspace components."
msgstr ""

#. type: TH
#: man/man3/rtapi_exit.3rtapi:1
#, no-wrap
msgid "rtapi_exit"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_exit.3rtapi:5
msgid "rtapi_exit - Shut down RTAPI"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_exit.3rtapi:9
#, no-wrap
msgid " int rtapi_exit(int I<module_id>)\n"
msgstr ""

#. type: IP
#: man/man3/rtapi_exit.3rtapi:11 man/man3/rtapi_shmem.3rtapi:20
#, no-wrap
msgid "I<module_id>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_exit.3rtapi:13
msgid ""
"An rtapi module identifier returned by an earlier call to B<rtapi_init>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_exit.3rtapi:17
msgid ""
"B<rtapi_exit> shuts down and cleans up the RTAPI.  It must be called prior "
"to exit by any module that called B<rtapi_init>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_exit.3rtapi:23
msgid "Returns a RTAPI status code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_firmware.3rtapi:26
msgid "rtapi_firmware.h - RTAPI wrappers for linux kernel functionality"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_firmware.3rtapi:30
msgid "#include E<lt>rtapi_firmware.hE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_firmware.3rtapi:32
msgid "struct rtapi_firmware;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_firmware.3rtapi:35
#, no-wrap
msgid ""
"int rtapi_request_firmware(const struct rtapi_firmware **fw,\n"
"    const char *name, struct rtapi_device *device);\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_firmware.3rtapi:37
msgid "void rtapi_release_firmware(const struct rtapi_firmware *fw);"
msgstr ""

#. type: TH
#: man/man3/rtapi_get_time.3rtapi:1
#, no-wrap
msgid "rtapi_get_time"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:5
msgid "rtapi_get_time - get the current time"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:9
msgid "long long rtapi_get_time()"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:11
msgid "long long rtapi_get_clocks()"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:20
msgid ""
"B<rtapi_get_time> returns the current time in nanoseconds.  Depending on the "
"RTOS, this may be time since boot, or time since the clock period was set, "
"or some other time.  Its absolute value means nothing, but it is "
"monotonically increasing and can be used to schedule future events, or to "
"time the duration of some activity.  Returns a 64 bit value.  The resolution "
"of the returned value may be as good as one nano-second, or as poor as "
"several microseconds.  May be called from init/cleanup code, and from within "
"realtime tasks."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:34
msgid ""
"B<rtapi_get_clocks> returns the current time in CPU clocks.  It is fast, "
"since it just reads the TSC in the CPU instead of calling a kernel or RTOS "
"function.  Of course, times measured in CPU clocks are not as convenient, "
"but for relative measurements this works fine.  Its absolute value means "
"nothing, but it is monotonically increasing and can be used to schedule "
"future events, or to time the duration of some activity.  (On SMP machines, "
"the two TSC's may get out of sync, so if a task reads the TSC, gets swapped "
"to the other CPU, and reads again, the value may decrease.  RTAPI tries to "
"force all RT tasks to run on one CPU.)  Returns a 64 bit value.  The "
"resolution of the returned value is one CPU clock, which is usually a few "
"nanoseconds to a fraction of a nanosecond."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:39
msgid ""
"Note that I<long long> math may be poorly supported on some platforms, "
"especially in kernel space. Also note that rtapi_print() will NOT print "
"I<long long>s.  Most time measurements are relative, and should be done like "
"this:"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:41
msgid "deltat = (long int)(end_time - start_time);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:46
msgid ""
"where end_time and start_time are longlong values returned from "
"rtapi_get_time, and deltat is an ordinary long int (32 bits).  This will "
"work for times up to a second or so, depending on the CPU clock frequency.  "
"It is best used for millisecond and microsecond scale measurements though."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:49
msgid "Returns the current time in nanoseconds or CPU clocks."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:52
msgid ""
"Certain versions of the Linux kernel provide a global variable B<cpu_khz>.  "
"Computing"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:54
msgid "  deltat = (end_clocks - start_clocks) / cpu_khz:"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:56
msgid "gives the duration measured in milliseconds.  Computing"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:58
msgid "  deltat = (end_clocks - start_clocks) * 1000000 / cpu_khz:"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_get_time.3rtapi:61
msgid ""
"gives the duration measured in nanoseconds for deltas less than about 9 "
"trillion clocks (e.g., 3000 seconds at 3 GHz)."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_gfp.3rtapi:26
msgid "rtapi_gfp.h - RTAPI wrappers for linux kernel functionality"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_gfp.3rtapi:30
msgid "#include E<lt>rtapi_gfp.hE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_gfp.3rtapi:32
msgid "enum rtapi_gfp_e;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_gfp.3rtapi:34
msgid "RTAPI_GFP_xxx"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_gfp.3rtapi:36
msgid "typedef ... rtapi_gfp_t;"
msgstr ""

#. type: TH
#: man/man3/rtapi_init.3rtapi:1
#, no-wrap
msgid "rtapi_init"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_init.3rtapi:5
msgid "rtapi_init - Sets up RTAPI"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_init.3rtapi:9
#, no-wrap
msgid " int rtapi_init(const char *I<modname>)\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_init.3rtapi:13
msgid "The name of this rtapi module"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_init.3rtapi:19
msgid ""
"B<rtapi_init> sets up the RTAPI.  It must be called by any module that "
"intends to use the API, before any other RTAPI calls."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_init.3rtapi:24
msgid ""
"I<modname> can optionally point to a string that identifies the module.  The "
"string will be truncated at B<RTAPI_NAME_LEN> characters.  If I<modname> is "
"B<NULL>, the system will assign a name."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_init.3rtapi:31
msgid ""
"On success, returns a positive integer module ID, which is used for "
"subsequent calls to rtapi_xxx_new, rtapi_xxx_delete, and rtapi_exit.  On "
"failure, returns an RTAPI error code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_io.3rtapi:26
msgid "rtapi_io.h - RTAPI wrappers for linux kernel functionality"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_io.3rtapi:30
msgid "#include E<lt>rtapi_io.hE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_io.3rtapi:32
msgid "unsigned char rtapi_inb(unsigned short int port);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_io.3rtapi:34
msgid "unsigned short rtapi_inw(unsigned short int port);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_io.3rtapi:36
msgid "unsigned int rtapi_inl(unsigned short int port);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_io.3rtapi:38
msgid "unsigned void rtapi_inb(unsigned char value, unsigned short int port);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_io.3rtapi:40
msgid "unsigned void rtapi_inw(unsigned short value, unsigned short int port);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_io.3rtapi:42
msgid "unsigned void rtapi_inl(unsigned int value, unsigned short int port);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_io.3rtapi:55 man/man3/rtapi_list.3rtapi:57
msgid ""
"Call from init/cleanup code and from realtime tasks.  These functions will "
"cause illegal instruction exceptions in userspace components, as well as in "
"uspace rtapi_app when it is not setuid root."
msgstr ""

#. type: TH
#: man/man3/rtapi_is.3rtapi:22
#, no-wrap
msgid "rtapi_is"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_is.3rtapi:26
msgid "rtapi_is - details of rtapi configuration"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_is.3rtapi:30
msgid "int rtapi_is_kernelspace()"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_is.3rtapi:32
msgid "int rtapi_is_realtime()"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_is.3rtapi:36
msgid ""
"B<rtapi_is_kernelspace()> returns nonzero when rtapi modules run in kernel "
"space (e.g., under rtai) and zero when they run in userspace (e.g., under "
"uspace)."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_is.3rtapi:44
msgid ""
"B<rtapi_is_realtime()> returns nonzero when capable of running with realtime "
"guarantees.  For rtai, this always returns nonzero (but actually loading "
"realtime modules will fail if not running under the appropriate kernel).  "
"For uspace, this returns nonzero when the running kernel indicates it is "
"capable of realtime performance.  If B<rtapi_app> is not setuid root, this "
"returns nonzero even though B<rtapi_app> will not be able to obtain realtime "
"scheduling or hardware access, so e.g., attempting to B<loadrt> a hardware "
"driver will fail."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_is.3rtapi:48
msgid ""
"May be called from userspace or from realtime setup code.  "
"B<rtapi_is_realtime()> may perform filesystem I/O."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_is.3rtapi:50
msgid "Zero for false, nonzero for true."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_list.3rtapi:26
msgid "rtapi_list.h - RTAPI wrappers for linux kernel functionality"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_list.3rtapi:30
msgid "#include E<lt>rtapi_list.hE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_list.3rtapi:32
msgid "struct rtapi_list_head;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_list.3rtapi:34
msgid ""
"void rtapi_list_add(struct rtapi_list_head *new_, struct rtapi_list_head "
"*head);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_list.3rtapi:36
msgid ""
"void rtapi_list_add_tail(struct rtapi_list_head *new_, struct "
"rtapi_list_head *head);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_list.3rtapi:38
msgid "void rtapi_list_del(struct rtapi_list_head *entry);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_list.3rtapi:40
msgid "void RTAPI_INIT_LIST_HEAD(struct rtapi_list_head *entry);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_list.3rtapi:42
msgid "rtapi_list_for_each(pos, head) { ... }"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_list.3rtapi:44
msgid "rtapi_list_entry(ptr, type, member)"
msgstr ""

#. type: TH
#: man/man3/rtapi_module_param.3rtapi:1
#, no-wrap
msgid "rtapi_module_param"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:5
msgid "rtapi_module_param - Specifying module parameters"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:9
msgid "RTAPI_MP_INT(I<var>, I<description>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:12
msgid "RTAPI_MP_LONG(I<var>, I<description>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:15
msgid "RTAPI_MP_STRING(I<var>, I<description>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:18
msgid "RTAPI_MP_ARRAY_INT(I<var>, I<num>, I<description>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:21
msgid "RTAPI_MP_ARRAY_LONG(I<var>, I<num>, I<description>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:24
msgid "RTAPI_MP_ARRAY_STRING(I<var>, I<num>, I<description>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:27
msgid "MODULE_LICENSE(I<license>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:30
msgid "MODULE_AUTHOR(I<author>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:33
msgid "MODULE_DESCRIPTION(I<description>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:36
msgid "EXPORT_FUNCTION(I<function>)"
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:38
#, no-wrap
msgid "I<var>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:40
msgid "The variable where the parameter should be stored"
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:40
#, no-wrap
msgid "I<description>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:42
msgid "A short description of the parameter or module"
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:42
#, no-wrap
msgid "I<num>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:44
msgid "The maximum number of values for an array parameter"
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:44
#, no-wrap
msgid "I<license>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:46
msgid "The license of the module, for instance \"GPL\""
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:46
#, no-wrap
msgid "I<author>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:48
msgid "The author of the module"
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:48
#, no-wrap
msgid "I<function>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:50
msgid "The pointer to the function to be exported"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:55
msgid ""
"These macros are portable ways to declare kernel module parameters.  They "
"must be used in the global scope, and are not followed by a terminating "
"semicolon.  They must be used after the associated variable or function has "
"been defined."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:60
msgid ""
"EXPORT_FUNCTION makes a symbol available for use by a subsequently loaded "
"component.  It is unrelated to HAL functions, which are described in "
"hal_export_funct(3hal)"
msgstr ""

#. type: SH
#: man/man3/rtapi_module_param.3rtapi:61
#, no-wrap
msgid "Interpretation of license strings"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:65
msgid ""
"B<MODULE_LICENSE> follows the kernel's definition of license strings.  "
"Notably, \"GPL\" indicates \"GNU General Public License v2 I<or later>\".  "
"(emphasis ours)."
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:66
#, no-wrap
msgid "B<\"GPL\">"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:68
msgid "GNU General Public License v2 or later"
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:68
#, no-wrap
msgid "B<\"GPL\\ v2\">"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:70
msgid "GNU General Public License v2"
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:70
#, no-wrap
msgid "B<\"GPL\\ and\\ additional\\ rights\">"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:72
msgid "GNU General Public License v2 rights and more"
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:72
#, no-wrap
msgid "B<\"Dual\\ BSD/GPL\">"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:74
msgid "GNU General Public License v2 or BSD license choice"
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:74
#, no-wrap
msgid "B<\"Dual\\ MIT/GPL\">"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:76
msgid "GNU General Public License v2 or MIT license choice"
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:76
#, no-wrap
msgid "B<\"Dual\\ MPL/GPL\">"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:78
msgid "GNU General Public License v2 or Mozilla license choice"
msgstr ""

#. type: IP
#: man/man3/rtapi_module_param.3rtapi:78
#, no-wrap
msgid "B<\"Proprietary\">"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:80
msgid "Non-free products"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:83
msgid ""
"It is still good practice to include a license block which indicates the "
"author, copyright date, and disclaimer of warranty as recommended by the GNU "
"GPL."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_module_param.3rtapi:85
msgid "Not available in userspace code."
msgstr ""

#. type: TH
#: man/man3/rtapi_mutex.3rtapi:1
#, no-wrap
msgid "rtapi_mutex"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:5
msgid "rtapi_mutex - Mutex-related functions"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:8
msgid "B<#include E<lt>rtapi_mutex.hE<gt>>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:10
msgid "B<int rtapi_mutex_try(unsigned long *>I<mutex>B<);>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:12
msgid "B<int rtapi_mutex_get(unsigned long *>I<mutex>B<);>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:14
msgid "B<int rtapi_mutex_give(unsigned long *>I<mutex>B<);>"
msgstr ""

#. type: IP
#: man/man3/rtapi_mutex.3rtapi:16
#, no-wrap
msgid "I<mutex>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:18
msgid "A pointer to the mutex."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:23
msgid ""
"B<rtapi_mutex_try> makes a non-blocking attempt to get the mutex.  If the "
"mutex is available, it returns 0, and the mutex is no longer available.  "
"Otherwise, it returns a nonzero value."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:25
msgid "B<rtapi_mutex_get> blocks until the mutex is available."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:28
msgid ""
"B<rtapi_mutex_give> releases a mutex acquired by B<rtapi_mutex_try> or "
"B<rtapi_mutex_get>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:32
msgid ""
"B<rtapi_mutex_give> and B<rtapi_mutex_try> may be used from user, init/"
"cleanup, and realtime code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:34
msgid "B<rtapi_mutex_get> may not be used from realtime code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:38
msgid ""
"B<rtapi_mutex_try> returns 0 for if the mutex was claimed, and nonzero "
"otherwise."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_mutex.3rtapi:39
msgid "B<rtapi_mutex_get> and B<rtapi_mutex_gif> have no return value."
msgstr ""

#. type: TH
#: man/man3/rtapi_open_as_root.3rtapi:1
#, no-wrap
msgid "rtapi_open_as_root"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_open_as_root.3rtapi:5
msgid "rtapi_open_as_root - Open a file with \"root\" privilege"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_open_as_root.3rtapi:9
#, no-wrap
msgid "B<#include E<lt>rtapi.hE<gt>>\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_open_as_root.3rtapi:11
#, no-wrap
msgid "B<int rtapi_open_as_root(const char >I<*filename>B<, int >I<flags)>\n"
msgstr ""

#. type: IP
#: man/man3/rtapi_open_as_root.3rtapi:13
#, no-wrap
msgid "I<filename>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_open_as_root.3rtapi:17
msgid ""
"The filename to open, as in B<open(2)>.  Note that rtapi has no well-defined "
"\"current directory\", so this should be an absolute path, but this is not "
"enforced."
msgstr ""

#. type: IP
#: man/man3/rtapi_open_as_root.3rtapi:17
#, no-wrap
msgid "I<flags>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_open_as_root.3rtapi:21
msgid ""
"The open flags, as in B<open(2)>.  Should never include bits that open or "
"create files (e.g., O_CREAT, O_APPEND, etc) as this API is not intended for "
"creating or writing files, but this is not enforced."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_open_as_root.3rtapi:27
msgid ""
"In \"uspace\" realtime, root privileges are dropped whenever possible.  This "
"API temporarily switches on root privileges to open a file, and switches "
"them off before returning.  This can be useful for example when accessing "
"device nodes or memory-mapped I/O."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_open_as_root.3rtapi:30
msgid ""
"In the case of PCI devices on x86 and x86-64 systems, prefer the linux-style "
"PCI interfaces provided in B<E<lt>rtapi_pci.hE<gt>>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_open_as_root.3rtapi:34
msgid ""
"In case of success, the nonnegative file descriptor opened.  If the caller "
"does not close it, it remains open until rtapi_app exits."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_open_as_root.3rtapi:36
msgid "In case of failure, a negative errno value."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_open_as_root.3rtapi:39
msgid "Call only from realtime initcode in \"uspace\" realtime."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_open_as_root.3rtapi:41
msgid "B<open(2)>, B<rtapi_pci(3)>"
msgstr ""

#. type: TH
#: man/man3/rtapi_outb.3rtapi:1
#, no-wrap
msgid "rtapi_outb"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_outb.3rtapi:5
msgid "rtapi_outb, rtapi_inb - Perform hardware I/O"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_outb.3rtapi:9
msgid "void rtapi_outb(unsigned char I<byte>, unsigned int I<port>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_outb.3rtapi:11
msgid "unsigned char rtapi_inb(unsigned int I<port>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_outb.3rtapi:15
msgid "The address of the I/O port"
msgstr ""

#. type: IP
#: man/man3/rtapi_outb.3rtapi:15
#, no-wrap
msgid "I<byte>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_outb.3rtapi:17
msgid "The byte to be written to the port"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_outb.3rtapi:21
msgid ""
"B<rtapi_outb> writes a byte to a hardware I/O port.  B<rtapi_inb> reads a "
"byte from a hardware I/O port."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_outb.3rtapi:28
msgid "B<rtapi_inb> returns the byte read from the given I/O port"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_outb.3rtapi:33
msgid ""
"The I/O address should be within a region previously allocated by "
"B<rtapi_request_region>.  Otherwise, another real-time module or the Linux "
"kernel might attempt to access the I/O region at the same time."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_outb.3rtapi:35
msgid "B<rtapi_region(3rtapi)>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_parport.3rtapi:26
msgid "rtapi_parport - portable access to PC-style parallel ports"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_parport.3rtapi:30
msgid "#include \"rtapi_parport.h\""
msgstr ""

#. type: Plain text
#: man/man3/rtapi_parport.3rtapi:32
msgid ""
"int B<rtapi_parport_get>(const char *I<module_name>, rtapi_parport_t "
"*I<port>, unsigned short I<base>, unsigned short I<base_hi>, unsigned int "
"I<modes>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_parport.3rtapi:34
msgid "void B<rtapi_parport_release>(rtapi_parport_t *I<port>)"
msgstr ""

#. type: IP
#: man/man3/rtapi_parport.3rtapi:35
#, no-wrap
msgid "I<module_name>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_parport.3rtapi:37
msgid ""
"By convention, the name of the RTAPI module or HAL component using the "
"parport."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_parport.3rtapi:39
msgid "A pointer to a rtapi_parport_t structure"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_parport.3rtapi:57
msgid ""
"B<rtapi_parport_get> allocates a parallel port for exclusive use of the "
"named hal component.  If successful, access the port with I/O calls such as "
"rtapi_inb at address based at the B<base> or B<base_hi> addresses.  The port "
"must be released with B<rtapi_parport_release> before the component exits "
"with B<rtapi_exit>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_parport.3rtapi:71
#, no-wrap
msgid ""
"typedef struct\n"
"{\n"
"    unsigned short base;\n"
"    unsigned short base_hi;\n"
"    .... // and further unspecified fields\n"
"} rtapi_parport_t;\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_parport.3rtapi:78
msgid ""
"B<rtapi_parport_get> returns a HAL status code.  On success, I<port> is "
"filled out with information about the allocated port.  On failure, the "
"contents of I<port> are undefined except that it is safe (but not required) "
"to pass this port to B<rtapi_parport_release>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_parport.3rtapi:80
msgid "B<rtapi_parport_release> does not return a value.  It always succeeds."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_parport.3rtapi:81
msgid "In new code, prefer use of rtapi_parport to rtapi_parport."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:26
msgid "rtapi_pci.h - RTAPI wrappers for linux kernel functionality"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:30
msgid "#include E<lt>rtapi_pci.hE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:32
msgid "struct rtapi_pci_device_id { ... };"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:34
msgid "struct rtapi_pci_resource { ... };"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:36
msgid "struct rtapi_pci_dev { ... };"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:38
msgid "struct rtapi_pci_driver { ... };"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:40
msgid "const char *rtapi_pci_name(const struct rtapi_pci_dev *pdev);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:42 man/man3/rtapi_pci.3rtapi:50
msgid "int rtapi_pci_enable_device(struct rtapi_pci_dev *dev);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:44
msgid ""
"void rtapi__iomem *rtapi_pci_ioremap_bar(struct rtapi_pci_dev *pdev, int "
"bar);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:46
msgid "int rtapi_pci_register_driver(struct rtapi_pci_driver *driver);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:48
msgid "void rtapi_pci_unregister_driver(struct rtapi_pci_driver *driver);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:52
msgid "int rtapi_pci_disable_device(struct rtapi_pci_dev *dev);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:54
msgid "#define rtapi_pci_resource_start(dev, bar) ..."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:56
msgid "#define rtapi_pci_resource_end(dev, bar) ..."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:58
msgid "#define rtapi_pci_resource_flags(dev, bar) ..."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:60
msgid "#define rtapi_pci_resource_len(dev,bar) ...."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:62 man/man3/rtapi_pci.3rtapi:64
msgid "void rtapi_pci_set_drvdata(struct rtapi_pci_dev *pdev, void *data)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:66
msgid "void rtapi_iounmap(volatile void *addr);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:68
msgid "struct rtapi_pci;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_pci.3rtapi:80
msgid ""
"In userspace, or in kernels where the underlying functionality is not "
"provided by a kernel, generally another implementation--possibly with "
"reduced functionality--is provided.  (For example, the userspace "
"implementation for rtapi_pci_register always succeeds)"
msgstr ""

#. type: TH
#: man/man3/rtapi_print.3rtapi:1
#, no-wrap
msgid "rtapi_print"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:5
msgid "rtapi_print, rtapi_print_msg - print diagnostic messages"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:9
msgid "void rtapi_print(const char *I<fmt>, I<...>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:12
msgid "void rtapi_print_msg(int level, const char *I<fmt>, I<...>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:15
msgid ""
"typedef void(*B<rtapi_msg_handler_t>)(msg_level_t I<level>, const char "
"*I<msg>);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:17
msgid "void B<rtapi_set_msg_handler>(rtapi_msg_handler_t I<handler>);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:19
msgid "rtapi_msg_handler_t B<rtapi_get_msg_handler>(void);"
msgstr ""

#. type: IP
#: man/man3/rtapi_print.3rtapi:20 man/man3/rtapi_set_msg_level.3rtapi:14
#, no-wrap
msgid "I<level>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:23
msgid ""
"A message level: One of B<RTAPI_MSG_ERR>, B<RTAPI_MSG_WARN>, "
"B<RTAPI_MSG_INFO>, or B<RTAPI_MSG_DBG>."
msgstr ""

#. type: IP
#: man/man3/rtapi_print.3rtapi:24
#, no-wrap
msgid "I<handler>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:27
msgid ""
"A function to call from B<rtapi_print> or B<rtapi_print_msg> to actually "
"output the message."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:30
msgid "Other arguments are as for I<rtapi_vsnprintf(3rtapi)>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:36
msgid ""
"B<rtapi_print> and B<rtapi_print_msg> work like the standard C printf "
"functions, except that a reduced set of formatting operations are "
"supported.  Notably, formatting long-long values is not supported, and "
"formatting floating-point values has different behavior than standard printf."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:43
msgid ""
"Depending on the RTOS, the default may be to print the message to stdout, "
"stderr, a kernel log, etc.  In RTAPI code, the action may be changed by a "
"call to B<rtapi_set_msg_handler>.  A B<NULL> argument to "
"B<rtapi_set_msg_handler> restores the default handler.  "
"B<rtapi_msg_get_handler> returns the current handler.  When the message came "
"from B<rtapi_print>, I<level> is RTAPI_MSG_ALL."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:46
msgid ""
"B<rtapi_print_msg> works like rtapi_print but only prints if I<level> is "
"less than or equal to the current message level."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:53
msgid ""
"B<rtapi_print> and B<rtapi_print_msg> May be called from user, init/cleanup, "
"and realtime code.  B<rtapi_get_msg_handler> and B<rtapi_set_msg_handler> "
"may be called from realtime init/cleanup code.  A message handler passed to "
"B<rtapi_set_msg_handler> may only call functions that can be called from "
"realtime code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_print.3rtapi:59
msgid ""
"B<rtapi_set_msg_level(3rtapi)>, B<rtapi_get_msg_level(3rtapi)>, "
"B<rtapi_vsnprintf(3rtapi)>"
msgstr ""

#. type: TH
#: man/man3/rtapi_prio.3rtapi:1
#, no-wrap
msgid "rtapi_prio"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:5
msgid "rtapi_prio - thread priority functions"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:9
msgid "int rtapi_prio_highest()"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:11
msgid "int rtapi_prio_lowest()"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:13
msgid "int rtapi_prio_next_higher(int I<prio>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:15
msgid "int rtapi_prio_next_lower(int I<prio>)"
msgstr ""

#. type: IP
#: man/man3/rtapi_prio.3rtapi:17 man/man3/rtapi_task_new.3rtapi:19
#, no-wrap
msgid "I<prio>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:19
msgid "A value returned by a prior B<rtapi_prio_xxx> call"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:25
msgid ""
"The B<rtapi_prio_xxxx> functions provide a portable way to set task "
"priority.  The mapping of actual priority to priority number depends on the "
"RTOS.  Priorities range from B<rtapi_prio_lowest> to B<rtapi_prio_highest>, "
"inclusive. To use this API, use one of two methods:"
msgstr ""

#. type: IP
#: man/man3/rtapi_prio.3rtapi:26 man/man3/rtapi_task_pause.3rtapi:20
#, no-wrap
msgid "1)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:30
msgid ""
"Set your lowest priority task to B<rtapi_prio_lowest>, and for each task of "
"the next lowest priority, set their priorities to "
"B<rtapi_prio_next_higher(previous)>."
msgstr ""

#. type: IP
#: man/man3/rtapi_prio.3rtapi:31 man/man3/rtapi_task_pause.3rtapi:23
#, no-wrap
msgid "2)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:35
msgid ""
"Set your highest priority task to B<rtapi_prio_highest>, and for each task "
"of the next highest priority, set their priorities to "
"B<rtapi_prio_next_lower(previous)>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:39
msgid ""
"N.B. A high priority task will preempt or interrupt a lower priority task. "
"Linux is always the lowest priority!"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:43
msgid ""
"Call these functions only from within init/cleanup code, not from realtime "
"tasks."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:46
msgid "Returns an opaque real-time priority number."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_prio.3rtapi:48 man/man3/rtapi_task_self.3rtapi:21
msgid "B<rtapi_task_new(3rtapi)>"
msgstr ""

#. type: TH
#: man/man3/rtapi_region.3rtapi:1
#, no-wrap
msgid "rtapi_region"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_region.3rtapi:5
msgid "rtapi_region - functions to manage I/O memory regions"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_region.3rtapi:9
#, no-wrap
msgid " void *rtapi_request_region(unsigned long I<base>, unsigned long int I<size>, const char *I<name>)\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_region.3rtapi:12
#, no-wrap
msgid " void rtapi_release_region(unsigned long I<base>, unsigned long int I<size>)\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_region.3rtapi:16
msgid "The base address of the I/O region"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_region.3rtapi:19
msgid "The size of the I/O region"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_region.3rtapi:22
msgid "The name to be shown in /proc/ioports"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_region.3rtapi:26
msgid ""
"B<rtapi_request_region> reserves I/O memory starting at I<base> and going "
"for I<size> bytes."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_region.3rtapi:29
msgid "May be called from realtime init/cleanup code only."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_region.3rtapi:33
msgid ""
"B<rtapi_request_region> returns NULL if the allocation fails, and a non-NULL "
"value otherwise."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_region.3rtapi:34
msgid "B<rtapi_release_region> has no return value."
msgstr ""

#. type: TH
#: man/man3/rtapi_set_msg_level.3rtapi:1
#, no-wrap
msgid "rtapi_set_msg_level"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_set_msg_level.3rtapi:5
msgid "rtapi_get_msg_level, rtapi_set_msg_level - Get or set the logging level"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_set_msg_level.3rtapi:9
#, no-wrap
msgid " int rtapi_set_msg_level(int I<level>)\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_set_msg_level.3rtapi:12
#, no-wrap
msgid " int rtapi_get_msg_level()\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_set_msg_level.3rtapi:16
msgid "The desired logging level"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_set_msg_level.3rtapi:21
msgid ""
"Get or set the RTAPI message level used by B<rtapi_print_msg>.  Depending on "
"the RTOS, this level may apply to a single RTAPI module, or it may apply to "
"a group of modules."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_set_msg_level.3rtapi:24 man/man3/rtapi_snprintf.3rtapi:26
msgid "May be called from user, init/cleanup, and realtime code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_set_msg_level.3rtapi:34
msgid ""
"B<rtapi_set_msg_level> returns a status code, and B<rtapi_get_msg_level> "
"returns the current level.  RTAPI_MSG_NONE = 0, RTAPI_MSG_ERR = 1, "
"RTAPI_MSG_WARN = 2, RTAPI_MSG_INFO = 3, RTAPI_MSG_DBG = 4 RTAPI_MSG_ALL = 5"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_set_msg_level.3rtapi:36
msgid "B<rtapi_print_msg(3rtapi)>"
msgstr ""

#. type: TH
#: man/man3/rtapi_shmem.3rtapi:1
#, no-wrap
msgid "rtapi_shmem"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:5
msgid "rtapi_shmem - Functions for managing shared memory blocks"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:9
#, no-wrap
msgid " int rtapi_shmem_new(int I<key>, int I<module_id>, unsigned long int I<size>)\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:12
#, no-wrap
msgid " int rtapi_shmem_delete(int I<shmem_id>, int I<module_id>)\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:15
#, no-wrap
msgid " int rtapi_shmem_getptr(int I<shmem_id>, void ** I<ptr>)\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:19
msgid ""
"Identifies the memory block.  Key must be nonzero.  All modules wishing to "
"use the same memory must use the same key."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:22
msgid "Module identifier returned by a prior call to B<rtapi_init>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:25
msgid "The desired size of the shared memory block, in bytes"
msgstr ""

#. type: IP
#: man/man3/rtapi_shmem.3rtapi:26
#, no-wrap
msgid "I<ptr>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:29
msgid ""
"The pointer to the shared memory block.  Note that the block may be mapped "
"at a different address for different modules."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:46
msgid ""
"B<rtapi_shmem_new> allocates a block of shared memory.  I<key> identifies "
"the memory block, and must be non-zero.  All modules wishing to access the "
"same memory must use the same key.  I<module_id> is the ID of the module "
"that is making the call (see rtapi_init).  The block will be at least "
"I<size> bytes, and may be rounded up.  Allocating many small blocks may be "
"very wasteful.  When a particular block is allocated for the first time, the "
"contents are zeroed.  Subsequent allocations of the same block by other "
"modules or processes will not touch the contents of the block.  Applications "
"can use those bytes to see if they need to initialize the block, or if "
"another module already did so.  On success, it returns a positive integer "
"ID, which is used for all subsequent calls dealing with the block.  On "
"failure it returns a negative error code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:50
msgid ""
"B<rtapi_shmem_delete> frees the shared memory block associated with "
"I<shmem_id>.  I<module_id> is the ID of the calling module.  Returns a "
"status code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:53
msgid ""
"B<rtapi_shmem_getptr> sets I<*ptr> to point to shared memory block "
"associated with I<shmem_id>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:58
msgid ""
"B<rtapi_shmem_getptr> may be called from user code, init/cleanup code, or "
"realtime tasks."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_shmem.3rtapi:61
msgid ""
"B<rtapi_shmem_new> and B<rtapi_shmem_dete> may not be called from realtime "
"tasks."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_slab.3rtapi:26
msgid "rtapi_slab.h - RTAPI wrappers for linux kernel functionality"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_slab.3rtapi:30
msgid "#include E<lt>rtapi_slab.hE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_slab.3rtapi:32
msgid "void *rtapi_kmalloc(size_t size, gfp_t g);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_slab.3rtapi:34
msgid "void *rtapi_kzalloc(size_t size, gfp_t g);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_slab.3rtapi:36
msgid "void *rtapi_krealloc(size_t size, gfp_t g);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_slab.3rtapi:38
msgid "void rtapi_kfree(void *);"
msgstr ""

#. type: TH
#: man/man3/rtapi_snprintf.3rtapi:1
#, no-wrap
msgid "rtapi_snprintf"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_snprintf.3rtapi:5
msgid ""
"rtapi_snprintf, rtapi_vsnprintf - Perform snprintf-like string formatting"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_snprintf.3rtapi:9
#, no-wrap
msgid " int rtapi_snprintf(char *I<buf>, unsigned long int I<size>, const char *I<fmt>, I<...>)\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_snprintf.3rtapi:12
#, no-wrap
msgid " int rtapi_vsnprintf(char *I<buf>, unsigned long int I<size>, const char *I<fmt>, va_list I<apfB)>\n"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_snprintf.3rtapi:15
msgid "As for I<snprintf(3)> or I<vsnprintf(3)>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_snprintf.3rtapi:19
msgid ""
"These functions work like the standard C printf functions, except that a "
"reduced set of formatting operations are supported."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_snprintf.3rtapi:23
msgid ""
"In particular: formatting of long long values is not supported.  Formatting "
"of floating-point values is done as though with %A even when other formats "
"like %f are specified."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_snprintf.3rtapi:29
msgid "The number of characters written to I<buf>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_snprintf.3rtapi:31
msgid "B<printf(3)>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:26
msgid "rtapi_stdint.h - RTAPI wrappers for linux kernel functionality"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:30
msgid "#include E<lt>rtapi_stdint.hE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:32
msgid "typedef ... rtapi_s8;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:34
msgid "typedef ... rtapi_s16;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:36
msgid "typedef ... rtapi_s32;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:38
msgid "typedef ... rtapi_s64;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:40
msgid "typedef ... rtapi_intptr_t;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:42
msgid "typedef ... rtapi_u8;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:44
msgid "typedef ... rtapi_u16;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:46
msgid "typedef ... rtapi_u32;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:48
msgid "typedef ... rtapi_u64;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:50
msgid "typedef ... rtapi_uintptr_t;"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:52
msgid "#define\\ RTAPI_INTI<xx>_MIN\\ ..."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:54
msgid "#define\\ RTAPI_INTI<xx>_MAX\\ ..."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_stdint.3rtapi:56
msgid "#define\\ RTAPI_UINTI<xx>_MAX\\ ..."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_string.3rtapi:26
msgid "rtapi_string.h - RTAPI wrappers for linux kernel functionality"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_string.3rtapi:30 man/man3/rtapi_strlcpy.3rtapi:30
msgid "#include E<lt>rtapi_string.hE<gt>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_string.3rtapi:32
msgid "char **rtapi_argv_split(rtapi_gfp_t g, const char *argstr, int *argc);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_string.3rtapi:34
msgid "void rtapi_argv_free(char **argv);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_string.3rtapi:36
msgid "char *rtapi_kstrdup(const char *s, rtapi_gfp_t t);"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_strlcpy.3rtapi:26
msgid "rtapi_strlcpy - RTAPI string manipulation functions"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_strlcpy.3rtapi:35
msgid ""
"size_t rtapi_strlcpy(char *dst, const char *src, size_t sz); #define "
"rtapi_strxcpy(dst, src) ...  size_t rtapi_strlcat(char *dst, const char "
"*src, size_t sz); #define rtapi_strxcat(dst, src) ..."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_strlcpy.3rtapi:39
msgid ""
"rtapi_strlcpy will copy at most 'sz' chars from 'src' to 'dst'.  Always "
"leaves 'dst' NUL-terminated except if sz is 0."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_strlcpy.3rtapi:43
msgid ""
"rtapi_strxcpy(dst, src) checks that dst is an array with known size, and "
"calls rtapi_strlcpy(dst, src, sizeof(dst)).  If it is not an array with a "
"known size, it is a (possibly cryptic!) syntax error."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_strlcpy.3rtapi:46
msgid ""
"rtapi_strlcat will append characters from 'src' to 'dst', stopping when the "
"end of 'src' is reached, or 'dst' uses 'sz' bytes of storage including the "
"trialing nul."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_strlcpy.3rtapi:50
msgid ""
"rtapi_strxcat(dst, src) checks that dst is an array with known size, and "
"calls rtapi_strlcat(dst, src, sizeof(dst)).  If it is not an array with a "
"known size, it is a (possibly cryptic!) syntax error."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_strlcpy.3rtapi:55
msgid ""
"The total length of the string strlcpy or strlcat tried to create.  For "
"strlcpy() that means the length of src.  If the return value is greater than "
"or equal to sz, the result was truncated."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_strlcpy.3rtapi:56
msgid "strlcpy(3bsd), strlcat(3bsd)"
msgstr ""

#. type: TH
#: man/man3/rtapi_task_new.3rtapi:1
#, no-wrap
msgid "rtapi_task_new"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_new.3rtapi:5
msgid "rtapi_task_new - create a realtime task"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_new.3rtapi:10
msgid ""
"int rtapi_task_new(void (*I<taskcode>)(void*), void *I<arg>, int I<prio>, "
"unsigned long I<stacksize>, int I<uses_fp>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_new.3rtapi:12
msgid "int rtapi_task_delete(int I<task_id>)"
msgstr ""

#. type: IP
#: man/man3/rtapi_task_new.3rtapi:14
#, no-wrap
msgid "I<taskcode>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_new.3rtapi:16
msgid "A pointer to the function to be called when the task is started"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_new.3rtapi:19
msgid ""
"An argument to be passed to the I<taskcode> function when the task is started"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_new.3rtapi:21
msgid "A task priority value returned by B<rtapi_prio_xxxx>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_new.3rtapi:23
msgid "A flag that tells the OS whether the task uses floating point or not."
msgstr ""

#. type: IP
#: man/man3/rtapi_task_new.3rtapi:23 man/man3/rtapi_task_pause.3rtapi:13
#: man/man3/rtapi_task_start.3rtapi:10
#, no-wrap
msgid "I<task_id>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_new.3rtapi:25 man/man3/rtapi_task_start.3rtapi:12
msgid "A task ID returned by a previous call to B<rtapi_task_new>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_new.3rtapi:29
msgid ""
"B<rtapi_task_new> creates but does not start a realtime task.  The task is "
"created in the \"paused\" state.  To start it, call either "
"B<rtapi_task_start> for periodic tasks, or B<rtapi_task_resume> for free-"
"running tasks."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_new.3rtapi:32 man/man3/rtapi_task_start.3rtapi:20
msgid "Call only from within init/cleanup code, not from realtime tasks."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_new.3rtapi:37
msgid ""
"On success, returns a positive integer task ID.  This ID is used for all "
"subsequent calls that need to act on the task.  On failure, returns an RTAPI "
"status code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_new.3rtapi:39
msgid ""
"B<rtapi_prio(3rtapi)>, B<rtapi_task_start(3rtapi)>, "
"B<rtapi_task_wait(3rtapi)>, B<rtapi_task_resume(3rtapi)>"
msgstr ""

#. type: TH
#: man/man3/rtapi_task_pause.3rtapi:1
#, no-wrap
msgid "rtapi_task_pause"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_pause.3rtapi:5
msgid "rtapi_task_pause, rtapi_task_resume - pause and resume real-time tasks"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_pause.3rtapi:9
msgid "void rtapi_task_pause(int I<task_id>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_pause.3rtapi:11
msgid "void rtapi_task_resume(int I<task_id>)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_pause.3rtapi:15
msgid ""
"An RTAPI task identifier returned by an earlier call to B<rtapi_task_new>."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_pause.3rtapi:18
msgid ""
"B<rtapi_task_resume> starts a task in free-running mode.  The task must be "
"in the \"paused\" state."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_pause.3rtapi:20
msgid "A free running task runs continuously until either:"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_pause.3rtapi:23
msgid ""
"It is prempted by a higher priority task.  It will resume as soon as the "
"higher priority task releases the CPU."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_pause.3rtapi:26
msgid ""
"It calls a blocking function, like B<rtapi_sem_take>.  It will resume when "
"the function unblocks."
msgstr ""

#. type: IP
#: man/man3/rtapi_task_pause.3rtapi:26
#, no-wrap
msgid "3)"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_pause.3rtapi:29
msgid ""
"It is returned to the \"paused\" state by B<rtapi_task_pause>.  May be "
"called from init/cleanup code, and from within realtime tasks."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_pause.3rtapi:38
msgid ""
"B<rtapi_task_pause> causes a task to stop execution and change to the "
"\"paused\" state.  The task can be free-running or periodic.  Note that "
"B<rtapi_task_pause> may called from any task, or from init or cleanup code, "
"not just from the task that is to be paused.  The task will resume execution "
"when either B<rtapi_task_resume> or B<rtapi_task_start> (depending on "
"whether this is a free-running or periodic task) is called."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_pause.3rtapi:45
msgid "An RTAPI status code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_pause.3rtapi:47
msgid "B<rtapi_task_new(3rtapi)>, B<rtapi_task_start(3rtapi)>"
msgstr ""

#. type: TH
#: man/man3/rtapi_task_self.3rtapi:1
#, no-wrap
msgid "rtapi_task_self"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_self.3rtapi:5
msgid "rtapi_task_self - Retrieve ID of current task"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_self.3rtapi:9
msgid "void rtapi_task_self()"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_self.3rtapi:13
msgid ""
"B<rtapi_task_self> retrieves the current task, or -EINVAL if not in a "
"realtime task (e.g., in startup or shutdown code)."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_self.3rtapi:19
msgid "The task number previously returned by B<rtapi_task_new> or -EINVAL."
msgstr ""

#. type: TH
#: man/man3/rtapi_task_start.3rtapi:1
#, no-wrap
msgid "rtapi_task_start"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_start.3rtapi:5
msgid "rtapi_task_start - start a realtime task in periodic mode"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_start.3rtapi:9
msgid "int rtapi_task_start(int I<task_id>, unsigned long I<period_nsec>)"
msgstr ""

#. type: IP
#: man/man3/rtapi_task_start.3rtapi:12
#, no-wrap
msgid "I<period_nsec>"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_start.3rtapi:14
msgid "The clock period in nanoseconds between iterations of a periodic task"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_start.3rtapi:17
msgid ""
"B<rtapi_task_start> starts a task in periodic mode.  The task must be in the "
"I<paused> state."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_start.3rtapi:23
msgid "Returns an RTAPI status code."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_start.3rtapi:25
msgid ""
"B<rtapi_task_new(3rtapi)>, B<rtapi_task_pause(3rtapi)>, "
"B<rtapi_task_resume(3rtapi)>"
msgstr ""

#. type: TH
#: man/man3/rtapi_task_wait.3rtapi:1
#, no-wrap
msgid "rtapi_task_wait"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_wait.3rtapi:5
msgid "rtapi_task_wait - suspend execution of this periodic task"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_wait.3rtapi:9
msgid "void rtapi_task_wait()"
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_wait.3rtapi:13
msgid ""
"B<rtapi_task_wait> suspends execution of the current task until the next "
"period.  The task must be periodic.  If not, the result is undefined."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_wait.3rtapi:16
msgid "Call only from within a periodic realtime task."
msgstr ""

#. type: Plain text
#: man/man3/rtapi_task_wait.3rtapi:21
msgid "B<rtapi_task_start(3rtapi)>, B<rtapi_task_pause(3rtapi)>"
msgstr ""

#. type: TH
#: man/man3/undocumented.3hal:1 man/man3/undocumented.3rtapi:1
#, no-wrap
msgid "undocumented"
msgstr ""

#. type: Plain text
#: man/man3/undocumented.3hal:5
msgid "undocumented - undocumented functions in HAL"
msgstr ""

#. type: Plain text
#: man/man3/undocumented.3hal:8
msgid ""
"The header file I<hal.h>.  Most hal functions have documentation in that "
"file."
msgstr ""

#. type: Plain text
#: man/man3/undocumented.3rtapi:5
msgid "undocumented - undocumented functions in RTAPI"
msgstr ""

#. type: Plain text
#: man/man3/undocumented.3rtapi:8
msgid ""
"The header file I<rtapi.h>.  Most rtapi functions have documentation in that "
"file."
msgstr ""

#. type: TH
#: man/man9/abs.9:9
#, no-wrap
msgid "ABS"
msgstr ""

#. type: Plain text
#: man/man9/abs.9:13
msgid "abs - Compute the absolute value and sign of the input signal"
msgstr ""

#. type: Plain text
#: man/man9/abs.9:16
msgid "B<loadrt abs [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/abs.9:17
#, no-wrap
msgid "B<abs.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/abs.9:21
#, no-wrap
msgid "B<abs.>I<N>B<.in> float in "
msgstr ""

#. type: Plain text
#: man/man9/abs.9:24 man/man9/invert.9:25
msgid "Analog input value"
msgstr ""

#. type: TP
#: man/man9/abs.9:24
#, no-wrap
msgid "B<abs.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/abs.9:27
msgid "Analog output value, always positive"
msgstr ""

#. type: TP
#: man/man9/abs.9:27
#, no-wrap
msgid "B<abs.>I<N>B<.sign> bit out "
msgstr ""

#. type: Plain text
#: man/man9/abs.9:30 man/man9/abs_s32.9:30
msgid "Sign of input, false for positive, true for negative"
msgstr ""

#. type: TP
#: man/man9/abs.9:30
#, no-wrap
msgid "B<abs.>I<N>B<.is-positive> bit out "
msgstr ""

#. type: Plain text
#: man/man9/abs.9:33 man/man9/abs_s32.9:33
msgid "TRUE if input is positive, FALSE if input is 0 or negative"
msgstr ""

#. type: TP
#: man/man9/abs.9:33
#, no-wrap
msgid "B<abs.>I<N>B<.is-negative> bit out "
msgstr ""

#. type: Plain text
#: man/man9/abs.9:36 man/man9/abs_s32.9:36
msgid "TRUE if input is negative, FALSE if input is 0 or positive"
msgstr ""

#. type: Plain text
#: man/man9/abs.9:39 man/man9/clarke2.9:56 man/man9/clarke3.9:60
#: man/man9/clarkeinv.9:56 man/man9/constant.9:29 man/man9/estop_latch.9:112
#: man/man9/flipflop.9:42 man/man9/knob2float.9:43 man/man9/limit3.9:62
#: man/man9/match8.9:94 man/man9/mult2.9:35 man/man9/oneshot.9:60
#: man/man9/toggle.9:45 man/man9/xor2.9:54
msgid "John Kasunich"
msgstr ""

#. type: TH
#: man/man9/abs_s32.9:9
#, no-wrap
msgid "ABS_S32"
msgstr ""

#. type: Plain text
#: man/man9/abs_s32.9:13
msgid "abs_s32 - Compute the absolute value and sign of the input signal"
msgstr ""

#. type: Plain text
#: man/man9/abs_s32.9:16
msgid "B<loadrt abs_s32 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/abs_s32.9:17
#, no-wrap
msgid "B<abs-s32.>I<N>"
msgstr ""

#. type: TP
#: man/man9/abs_s32.9:21
#, no-wrap
msgid "B<abs-s32.>I<N>B<.in> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/abs_s32.9:24
msgid "input value"
msgstr ""

#. type: TP
#: man/man9/abs_s32.9:24
#, no-wrap
msgid "B<abs-s32.>I<N>B<.out> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/abs_s32.9:27
msgid "output value, always non-negative"
msgstr ""

#. type: TP
#: man/man9/abs_s32.9:27
#, no-wrap
msgid "B<abs-s32.>I<N>B<.sign> bit out "
msgstr ""

#. type: TP
#: man/man9/abs_s32.9:30
#, no-wrap
msgid "B<abs-s32.>I<N>B<.is-positive> bit out "
msgstr ""

#. type: TP
#: man/man9/abs_s32.9:33
#, no-wrap
msgid "B<abs-s32.>I<N>B<.is-negative> bit out "
msgstr ""

#. type: TH
#: man/man9/and2.9:9
#, no-wrap
msgid "AND2"
msgstr ""

#. type: Plain text
#: man/man9/and2.9:13
msgid "and2 - Two-input AND gate"
msgstr ""

#. type: Plain text
#: man/man9/and2.9:16
msgid "B<loadrt and2 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/and2.9:17
#, no-wrap
msgid "B<and2.>I<N>"
msgstr ""

#. type: TP
#: man/man9/and2.9:21
#, no-wrap
msgid "B<and2.>I<N>B<.in0> bit in "
msgstr ""

#. type: TP
#: man/man9/and2.9:25
#, no-wrap
msgid "B<and2.>I<N>B<.in1> bit in "
msgstr ""

#. type: TP
#: man/man9/and2.9:29
#, no-wrap
msgid "B<and2.>I<N>B<.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/and2.9:35
msgid ""
"The B<out> pin is computed from the value of the B<in0> and B<in1> pins "
"according to the following rule:"
msgstr ""

#. type: TP
#: man/man9/and2.9:36
#, no-wrap
msgid "B<in0=TRUE in1=TRUE>"
msgstr ""

#. type: Plain text
#: man/man9/and2.9:39 man/man9/or2.9:41 man/man9/xor2.9:39
msgid "B<out=TRUE>"
msgstr ""

#. type: TP
#: man/man9/and2.9:39 man/man9/or2.9:38 man/man9/xor2.9:39
#, no-wrap
msgid "Otherwise,"
msgstr ""

#. type: Plain text
#: man/man9/and2.9:42 man/man9/or2.9:38 man/man9/xor2.9:42
msgid "B<out=FALSE>"
msgstr ""

#. type: Plain text
#: man/man9/and2.9:51
msgid "B<logic>(9), B<lut5>(9), B<not>(9), B<or2>(9), B<xor2>(9)."
msgstr ""

#. type: Plain text
#: man/man9/and2.9:55 man/man9/blend.9:40 man/man9/charge_pump.9:45
#: man/man9/comp.9:46 man/man9/conv_bit_float.9:30 man/man9/conv_bit_s32.9:30
#: man/man9/conv_bit_u32.9:30 man/man9/conv_float_s32.9:39
#: man/man9/conv_float_u32.9:39 man/man9/conv_s32_bit.9:39
#: man/man9/conv_s32_float.9:30 man/man9/conv_s32_u32.9:39
#: man/man9/conv_u32_bit.9:39 man/man9/conv_u32_float.9:30
#: man/man9/conv_u32_s32.9:39 man/man9/ddt.9:47 man/man9/deadzone.9:37
#: man/man9/edge.9:50 man/man9/hypot.9:39 man/man9/ilowpass.9:59
#: man/man9/integ.9:44 man/man9/limit1.9:38 man/man9/limit2.9:45
#: man/man9/logic.9:121 man/man9/lowpass.9:71 man/man9/lut5.9:187
#: man/man9/maj3.9:41 man/man9/minmax.9:37 man/man9/mux2.9:37
#: man/man9/mux4.9:64 man/man9/not.9:39 man/man9/offset.9:42 man/man9/or2.9:50
#: man/man9/scale.9:39 man/man9/sphereprobe.9:51 man/man9/steptest.9:84
#: man/man9/sum2.9:49 man/man9/threadtest.9:29 man/man9/timedelta.9:51
#: man/man9/tristate_bit.9:33 man/man9/tristate_float.9:33 man/man9/wcomp.9:45
msgid "Jeff Epler"
msgstr ""

#. type: TH
#: man/man9/at_pid.9:1
#, no-wrap
msgid "AT_PID"
msgstr ""

#. type: TH
#: man/man9/at_pid.9:1
#, no-wrap
msgid "2022-07-28"
msgstr ""

#. type: Plain text
#: man/man9/at_pid.9:5
msgid "at_pid - obsolete pid HAL component"
msgstr ""

#. type: Plain text
#: man/man9/at_pid.9:9
msgid ""
"The functionality of the at_pid component has been merged into the pid "
"component."
msgstr ""

#. type: Plain text
#: man/man9/at_pid.9:11
msgid "B<pid>(9)"
msgstr ""

#. type: TH
#: man/man9/axistest.9:9
#, no-wrap
msgid "AXISTEST"
msgstr ""

#. type: Plain text
#: man/man9/axistest.9:13
msgid "axistest - Used to allow testing of an axis. Used IN PNCconf"
msgstr ""

#. type: Plain text
#: man/man9/axistest.9:16
msgid "B<loadrt axistest [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/axistest.9:17
#, no-wrap
msgid "B<axistest.>I<N>B<.update> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/axistest.9:21
#, no-wrap
msgid "B<axistest.>I<N>B<.jog-minus> bit in "
msgstr ""

#. type: Plain text
#: man/man9/axistest.9:24 man/man9/steptest.9:24
msgid "Drive TRUE to jog the axis in its minus direction"
msgstr ""

#. type: TP
#: man/man9/axistest.9:24
#, no-wrap
msgid "B<axistest.>I<N>B<.jog-plus> bit in "
msgstr ""

#. type: Plain text
#: man/man9/axistest.9:27 man/man9/steptest.9:27
msgid "Drive TRUE to jog the axis in its positive direction"
msgstr ""

#. type: TP
#: man/man9/axistest.9:27
#, no-wrap
msgid "B<axistest.>I<N>B<.run> bit in "
msgstr ""

#. type: Plain text
#: man/man9/axistest.9:30 man/man9/steptest.9:30
msgid ""
"Drive TRUE to run the axis near its current position_fb with a trapezoidal "
"velocity profile"
msgstr ""

#. type: TP
#: man/man9/axistest.9:30
#, no-wrap
msgid "B<axistest.>I<N>B<.maxvel> float in "
msgstr ""

#. type: Plain text
#: man/man9/axistest.9:33 man/man9/simple_tp.9:26 man/man9/steptest.9:33
msgid "Maximum velocity"
msgstr ""

#. type: TP
#: man/man9/axistest.9:33
#, no-wrap
msgid "B<axistest.>I<N>B<.amplitude> float in "
msgstr ""

#. type: Plain text
#: man/man9/axistest.9:36 man/man9/steptest.9:39
msgid "Approximate amplitude of positions to command during 'run'"
msgstr ""

#. type: TP
#: man/man9/axistest.9:36
#, no-wrap
msgid "B<axistest.>I<N>B<.dir> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/axistest.9:39 man/man9/steptest.9:42
msgid ""
"Direction from central point to test: 0 = both, 1 = positive, 2 = negative"
msgstr ""

#. type: TP
#: man/man9/axistest.9:39
#, no-wrap
msgid "B<axistest.>I<N>B<.position-cmd> float out "
msgstr ""

#. type: TP
#: man/man9/axistest.9:43
#, no-wrap
msgid "B<axistest.>I<N>B<.position-fb> float in "
msgstr ""

#. type: TP
#: man/man9/axistest.9:47
#, no-wrap
msgid "B<axistest.>I<N>B<.running> bit out "
msgstr ""

#. type: TP
#: man/man9/axistest.9:51
#, no-wrap
msgid "B<axistest.>I<N>B<.run-target> float out "
msgstr ""

#. type: TP
#: man/man9/axistest.9:55
#, no-wrap
msgid "B<axistest.>I<N>B<.run-start> float out "
msgstr ""

#. type: TP
#: man/man9/axistest.9:59
#, no-wrap
msgid "B<axistest.>I<N>B<.run-low> float out "
msgstr ""

#. type: TP
#: man/man9/axistest.9:63
#, no-wrap
msgid "B<axistest.>I<N>B<.run-high> float out "
msgstr ""

#. type: TP
#: man/man9/axistest.9:67
#, no-wrap
msgid "B<axistest.>I<N>B<.pause> s32 in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/axistest.9:70 man/man9/steptest.9:73
msgid "pause time for each end of run in seconds"
msgstr ""

#. type: TP
#: man/man9/axistest.9:71
#, no-wrap
msgid "B<axistest.>I<N>B<.epsilon> float rw (default: I<.001>)"
msgstr ""

#. type: TP
#: man/man9/axistest.9:75
#, no-wrap
msgid "B<axistest.>I<N>B<.elapsed> float r "
msgstr ""

#. type: Plain text
#: man/man9/axistest.9:78 man/man9/steptest.9:81 man/man9/timedelay.9:40
msgid "Current value of the internal timer"
msgstr ""

#. type: Plain text
#: man/man9/axistest.9:81 man/man9/mux16.9:78 man/man9/sim_axis_hardware.9:514
#: man/man9/sim_matrix_kb.9:51 man/man9/sim_parport.9:408
#: man/man9/simple_tp.9:44
msgid "Chris S Morley"
msgstr ""

#. type: TH
#: man/man9/bin2gray.9:9
#, no-wrap
msgid "BIN2GRAY"
msgstr ""

#. type: Plain text
#: man/man9/bin2gray.9:13
msgid "bin2gray - convert a number to the gray-code representation"
msgstr ""

#. type: Plain text
#: man/man9/bin2gray.9:16
msgid "B<loadrt bin2gray [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/bin2gray.9:19
msgid "Converts a number into gray-code"
msgstr ""

#. type: TP
#: man/man9/bin2gray.9:20
#, no-wrap
msgid "B<bin2gray.>I<N>"
msgstr ""

#. type: TP
#: man/man9/bin2gray.9:24
#, no-wrap
msgid "B<bin2gray.>I<N>B<.in> u32 in "
msgstr ""

#. type: Plain text
#: man/man9/bin2gray.9:27
msgid "binary code in"
msgstr ""

#. type: TP
#: man/man9/bin2gray.9:27
#, no-wrap
msgid "B<bin2gray.>I<N>B<.out> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/bin2gray.9:30
msgid "gray code out"
msgstr ""

#. type: TH
#: man/man9/biquad.9:9
#, no-wrap
msgid "BIQUAD"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:13
msgid "biquad - Biquad IIR filter"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:16
msgid "B<loadrt biquad [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:20
msgid ""
"Biquad IIR filter. Implements the following transfer function: H(z) = (n0 + "
"n1z-1 + n2z-2) / (1+ d1z-1 + d2z-2)"
msgstr ""

#. type: TP
#: man/man9/biquad.9:21
#, no-wrap
msgid "B<biquad.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/biquad.9:25
#, no-wrap
msgid "B<biquad.>I<N>B<.in> float in "
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:28
msgid "Filter input."
msgstr ""

#. type: TP
#: man/man9/biquad.9:28
#, no-wrap
msgid "B<biquad.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:31
msgid "Filter output."
msgstr ""

#. type: TP
#: man/man9/biquad.9:31
#, no-wrap
msgid "B<biquad.>I<N>B<.enable> bit in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:34
msgid ""
"Filter enable. When false, the B<in> pin is passed to the B<out> pin without "
"any filtering.  A B<transition from false to true> causes filter "
"coefficients to be calculated according to the current B<type> and the "
"describing pin and parameter settings"
msgstr ""

#. type: TP
#: man/man9/biquad.9:34
#, no-wrap
msgid "B<biquad.>I<N>B<.valid> bit out (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:37
msgid ""
"When false, indicates an error occurred when calculating filter coefficients "
"(require 2E<gt>B<Q>E<gt>0.5 and B<f0>E<gt>sampleRate/2)"
msgstr ""

#. type: TP
#: man/man9/biquad.9:37
#, no-wrap
msgid "B<biquad.>I<N>B<.type> u32 in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:40
msgid ""
"Filter type determines the type of filter coefficients calculated.  When 0, "
"coefficients must be loaded directly from the B<n0,n1,n2,d1> params.  When "
"1, a low pass filter is created specified by the B<f0,Q> pins.  When 2, a "
"notch filter is created specified by the B<f0,Q> pins."
msgstr ""

#. type: TP
#: man/man9/biquad.9:40
#, no-wrap
msgid "B<biquad.>I<N>B<.f0> float in (default: I<250.0>)"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:43
msgid "The corner frequency of the filter."
msgstr ""

#. type: TP
#: man/man9/biquad.9:43
#, no-wrap
msgid "B<biquad.>I<N>B<.Q> float in (default: I<0.7071>)"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:46
msgid "The Q of the filter."
msgstr ""

#. type: TP
#: man/man9/biquad.9:46
#, no-wrap
msgid "B<biquad.>I<N>B<.s1> float out (default: I<0.0>)"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:49
msgid "1st-delayed internal state (for debug only)"
msgstr ""

#. type: TP
#: man/man9/biquad.9:49
#, no-wrap
msgid "B<biquad.>I<N>B<.s2> float out (default: I<0.0>)"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:52
msgid "2nd-delayed internal state (for debug only)"
msgstr ""

#. type: TP
#: man/man9/biquad.9:53
#, no-wrap
msgid "B<biquad.>I<N>B<.d1> float rw (default: I<0.0>)"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:56
msgid "1st-delayed denominator coef"
msgstr ""

#. type: TP
#: man/man9/biquad.9:56
#, no-wrap
msgid "B<biquad.>I<N>B<.d2> float rw (default: I<0.0>)"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:59
msgid "2nd-delayed denominator coef"
msgstr ""

#. type: TP
#: man/man9/biquad.9:59
#, no-wrap
msgid "B<biquad.>I<N>B<.n0> float rw (default: I<1.0>)"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:62
msgid "non-delayed numerator coef"
msgstr ""

#. type: TP
#: man/man9/biquad.9:62
#, no-wrap
msgid "B<biquad.>I<N>B<.n1> float rw (default: I<0.0>)"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:65
msgid "1st-delayed numerator coef"
msgstr ""

#. type: TP
#: man/man9/biquad.9:65
#, no-wrap
msgid "B<biquad.>I<N>B<.n2> float rw (default: I<0.0>)"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:68
msgid "2nd-delayed numerator coef"
msgstr ""

#. type: Plain text
#: man/man9/biquad.9:71
msgid "Peter G. Vavaroutsos"
msgstr ""

#. type: TH
#: man/man9/bitslice.9:9
#, no-wrap
msgid "BITSLICE"
msgstr ""

#. type: Plain text
#: man/man9/bitslice.9:13
msgid "bitslice - Converts an unsigned-32 input into individual bits"
msgstr ""

#. type: Plain text
#: man/man9/bitslice.9:16
msgid ""
"B<loadrt bitslice [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]] "
"[personality=>I<P,P,...>B<]>"
msgstr ""

#. type: Plain text
#: man/man9/bitslice.9:22
msgid ""
"This component creates individual bit-outputs for each bit of an unsigned-32 "
"input. The number of bits can be limited by the \"personality\" modparam.  "
"The inverse process can be performed by the weighted_sum HAL component."
msgstr ""

#. type: TP
#: man/man9/bitslice.9:23
#, no-wrap
msgid "B<bitslice.>I<N>"
msgstr ""

#. type: TP
#: man/man9/bitslice.9:27
#, no-wrap
msgid "B<bitslice.>I<N>B<.in> u32 in "
msgstr ""

#. type: Plain text
#: man/man9/bitslice.9:30 man/man9/lincurve.9:49 man/man9/offset.9:30
msgid "The input value"
msgstr ""

#. type: TP
#: man/man9/bitslice.9:30
#, no-wrap
msgid "B<bitslice.>I<N>B<.out->I<MM> bit out (MM=00..personality) "
msgstr ""

#. type: Plain text
#: man/man9/bitslice.9:37
msgid "GPL2+"
msgstr ""

#. type: TH
#: man/man9/bitwise.9:9
#, no-wrap
msgid "BITWISE"
msgstr ""

#. type: Plain text
#: man/man9/bitwise.9:13
msgid "bitwise - Computes various bitwise operations on the two input values"
msgstr ""

#. type: Plain text
#: man/man9/bitwise.9:16
msgid "B<loadrt bitwise [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/bitwise.9:17
#, no-wrap
msgid "B<bitwise.>I<N>"
msgstr ""

#. type: TP
#: man/man9/bitwise.9:21
#, no-wrap
msgid "B<bitwise.>I<N>B<.in0> u32 in "
msgstr ""

#. type: Plain text
#: man/man9/bitwise.9:24
msgid "First input value"
msgstr ""

#. type: TP
#: man/man9/bitwise.9:24
#, no-wrap
msgid "B<bitwise.>I<N>B<.in1> u32 in "
msgstr ""

#. type: Plain text
#: man/man9/bitwise.9:27
msgid "Second input value"
msgstr ""

#. type: TP
#: man/man9/bitwise.9:27
#, no-wrap
msgid "B<bitwise.>I<N>B<.out-and> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/bitwise.9:30
msgid "The bitwise AND of the two inputs"
msgstr ""

#. type: TP
#: man/man9/bitwise.9:30
#, no-wrap
msgid "B<bitwise.>I<N>B<.out-or> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/bitwise.9:33
msgid "The bitwise OR of the two inputs"
msgstr ""

#. type: TP
#: man/man9/bitwise.9:33
#, no-wrap
msgid "B<bitwise.>I<N>B<.out-xor> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/bitwise.9:36
msgid "The bitwise XOR of the two inputs"
msgstr ""

#. type: TP
#: man/man9/bitwise.9:36
#, no-wrap
msgid "B<bitwise.>I<N>B<.out-nand> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/bitwise.9:39
msgid "The inverse of the bitwise AND"
msgstr ""

#. type: TP
#: man/man9/bitwise.9:39
#, no-wrap
msgid "B<bitwise.>I<N>B<.out-nor> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/bitwise.9:42
msgid "The inverse of the bitwise OR"
msgstr ""

#. type: TP
#: man/man9/bitwise.9:42
#, no-wrap
msgid "B<bitwise.>I<N>B<.out-xnor> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/bitwise.9:45
msgid "The inverse of the bitwise XOR"
msgstr ""

#. type: Plain text
#: man/man9/bitwise.9:50 man/man9/demux.9:49
msgid "GPL 2+"
msgstr ""

#. type: TH
#: man/man9/bldc.9:9
#, no-wrap
msgid "BLDC"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:13
msgid "bldc - BLDC and AC-servo control component"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:15
msgid "B<loadrt bldc cfg=qi6,aH>"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:22
msgid ""
"This component is designed as an interface between the most common forms of "
"three-phase motor feedback devices and the corresponding types of drive. "
"However there is no requirement that the motor and drive should necessarily "
"be of inherently compatible types."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:26
msgid ""
"Each instance of the component is defined by a group of letters describing "
"the input and output types. A comma separates individual instances of the "
"component.  For example B<loadrt bldc cfg=qi6,aH>"
msgstr ""

#. type: SH
#: man/man9/bldc.9:27
#, no-wrap
msgid "Tags"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:29
msgid "Input type definitions are all lower-case."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:33
msgid ""
"B<n> No motor feedback. This mode could be used to drive AC induction "
"motors, but is also potentially useful for creating free-running motor "
"simulators for drive testing."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:38
msgid ""
"B<h> Hall sensor input. Brushless DC motors (electronically commutated "
"permanent magnet 3-phase motors) typically use a set of three Hall sensors "
"to measure the angular position of the rotor. A lower-case B<h> in the cfg "
"string indicates that these should be used."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:43
msgid ""
"B<a> Absolute encoder input. (Also possibly used by some forms of Resolver "
"conversion hardware). The presence of this tag over-rides all other inputs. "
"Note that the component still requires to be be connected to the "
"B<rawcounts> encoder pin to prevent loss of commutation on index-reset."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:46
msgid ""
"B<q> Incremental (quadrature) encoder input. If this input is used then the "
"rotor will need to be homed before the motor can be run."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:48
msgid "B<i> Use the index of an incremental encoder as a home reference."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:52
msgid ""
"B<f> Use a 4-bit Gray-scale patttern to determine rotor alignment. This "
"scheme is only used on the Fanuc \"Red Cap\" motors. This mode could be used "
"to control one of these motors using a non-Fanuc drive."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:54
msgid "Output type descriptions are all upper-case."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:59
msgid ""
"B<Defaults> The component will always calculate rotor angle, phase angle and "
"the absolute value of the input B<value> for interfacing with drives such as "
"the Mesa 8i20. It will also default to three individual, bipolar phase "
"output values if no other output type modifiers are used."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:62
msgid ""
"B<B> Bit level outputs. Either 3 or 6 logic-level outputs indicating which "
"high or low gate drivers on an external drive should be used."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:66
msgid ""
"B<6> Create 6 rather than the default 3 outputs. In the case of numeric "
"value outputs these are separate positive and negative drive amplitudes. "
"Both have positive magnitude."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:70
msgid ""
"B<H> Emulated Hall sensor output. This mode can be used to control a drive "
"which expects 3x Hall signals, or to convert between a motor with one hall "
"pattern and a drive which expects a different one."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:74
msgid ""
"B<F> Emulated Fanuc Red Cap Gray-code encoder output. This mode might be "
"used to drive a non-Fanuc motor using a Fanuc drive intended for the \"Red-"
"Cap\" motors."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:76
msgid "B<T> Force Trapezoidal mode."
msgstr ""

#. type: SH
#: man/man9/bldc.9:77
#, no-wrap
msgid "OPERATING MODES"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:82
msgid ""
"The component can control a drive in either Trapezoidal or Sinusoidal mode, "
"but will always default to sinusoidal if the input and output modes allow "
"it. This can be over-ridden by the B<T> tag. Sinusoidal commutation is "
"significantly smoother (trapezoidal commutation induces 13% torque ripple)."
msgstr ""

#. type: SH
#: man/man9/bldc.9:83
#, no-wrap
msgid "ROTOR HOMING."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:97
msgid ""
"To use an encoder for commutation a reference 0-degrees point must be "
"found.  The component uses the convention that motor zero is the point that "
"an unloaded motor aligns to with a positive voltage on the A (or U) terminal "
"and the B & C (or V and W) terminals connected together and to -ve voltage. "
"There will be two such positions on a 4-pole motor, 3 on a 6-pole and so on. "
"They are all functionally equivalent as far as driving the motor is "
"concerned.  If the motor has Hall sensors then the motor can be started in "
"trapezoidal commutation mode, and will switch to sinusoidal commutation when "
"an alignment is found. If the mode is B<qh> then the first Hall state-"
"transition will be used. If the mode is B<qhi> then the encoder index will "
"be used. This gives a more accurate homing position if the distance in "
"encoder counts between motor zero and encoder index is known. To force "
"homing to the Hall edges instead simply omit the B<i>."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:110
msgid ""
"Motors without Hall sensors may be homed in synchronous/direct mode.  The "
"better of these options is to home to the encoder zero using the B<iq> "
"config parameter. When the B<init> pin goes high the motor will rotate (in a "
"direction determined by the B<rev> pin) until the encoder indicates an index-"
"latch (the servo thread runs too slowly to rely on detecting an encoder "
"index directly).  If there is no encoder index or its location relative to "
"motor zero can not be found, then an alternative is to use I<magnetic> "
"homing using the B<q> config. In this mode the motor will go through an "
"alignment sequence ending at motor zero when the init pin goes high It will "
"then set the final position as motor zero. Unfortunately the motor is rather "
"I<springy> in this mode and so alignment is likely to be fairly sensitive to "
"load."
msgstr ""

#. type: TP
#: man/man9/bldc.9:112
#, no-wrap
msgid "B<bldc.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/bldc.9:116
#, no-wrap
msgid "B<bldc.>I<N>B<.hall1> bit in [if personality & 0x01] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:119
msgid "Hall sensor signal 1"
msgstr ""

#. type: TP
#: man/man9/bldc.9:119
#, no-wrap
msgid "B<bldc.>I<N>B<.hall2> bit in [if personality & 0x01] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:122
msgid "Hall sensor signal 2"
msgstr ""

#. type: TP
#: man/man9/bldc.9:122
#, no-wrap
msgid "B<bldc.>I<N>B<.hall3> bit in [if personality & 0x01] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:125
msgid "Hall sensor signal 3"
msgstr ""

#. type: TP
#: man/man9/bldc.9:125
#, no-wrap
msgid "B<bldc.>I<N>B<.hall-error> bit out [if personality & 0x01] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:132
msgid ""
"Indicates that the selected hall pattern gives inconsistent rotor position "
"data. This can be due to the pattern being wrong for the motor, or one or "
"more sensors being unconnected or broken.  A consistent pattern is not "
"neceesarily valid, but an inconsistent one can never be valid."
msgstr ""

#. type: TP
#: man/man9/bldc.9:132
#, no-wrap
msgid "B<bldc.>I<N>B<.C1> bit in [if ( personality & 0x10 )] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:135
msgid "Fanuc Gray-code bit 0 input"
msgstr ""

#. type: TP
#: man/man9/bldc.9:135
#, no-wrap
msgid "B<bldc.>I<N>B<.C2> bit in [if ( personality & 0x10 )] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:138
msgid "Fanuc Gray-code bit 1 input"
msgstr ""

#. type: TP
#: man/man9/bldc.9:138
#, no-wrap
msgid "B<bldc.>I<N>B<.C4> bit in [if ( personality & 0x10 )] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:141
msgid "Fanuc Gray-code bit 2 input"
msgstr ""

#. type: TP
#: man/man9/bldc.9:141
#, no-wrap
msgid "B<bldc.>I<N>B<.C8> bit in [if ( personality & 0x10 )] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:144
msgid "Fanuc Gray-code bit 3 input"
msgstr ""

#. type: TP
#: man/man9/bldc.9:144
#, no-wrap
msgid "B<bldc.>I<N>B<.value> float in "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:147
msgid "PWM master amplitude input"
msgstr ""

#. type: TP
#: man/man9/bldc.9:147
#, no-wrap
msgid "B<bldc.>I<N>B<.lead-angle> float in [if personality & 0x06] (default: I<90>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:150
msgid ""
"The phase lead between the electrical vector and the rotor position in "
"degrees"
msgstr ""

#. type: TP
#: man/man9/bldc.9:150
#, no-wrap
msgid "B<bldc.>I<N>B<.rev> bit in "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:155
msgid ""
"Set this pin true to reverse the motor. Negative PWM amplitudes will also "
"reverse the motor and there will generally be a Hall pattern that runs the "
"motor in each direction too."
msgstr ""

#. type: TP
#: man/man9/bldc.9:155
#, no-wrap
msgid "B<bldc.>I<N>B<.frequency> float in [if ( personality & 0x0F ) == 0] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:159
msgid ""
"Frequency input for motors with no feedback at all, or those with only an "
"index (which is ignored)"
msgstr ""

#. type: TP
#: man/man9/bldc.9:159
#, no-wrap
msgid "B<bldc.>I<N>B<.initvalue> float in [if personality & 0x04] (default: I<0.2>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:164
msgid ""
"The current to be used for the homing sequence in applications where an "
"incremental encoder is used with no hall-sensor feedback"
msgstr ""

#. type: TP
#: man/man9/bldc.9:164
#, no-wrap
msgid "B<bldc.>I<N>B<.rawcounts> s32 in [if personality & 0x06] (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:168
msgid ""
"Encoder counts input. This must be linked to the encoder rawcounts pin or "
"encoder index resets will cause the motor commutation to fail"
msgstr ""

#. type: TP
#: man/man9/bldc.9:168
#, no-wrap
msgid "B<bldc.>I<N>B<.index-enable> bit io [if personality & 0x08] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:174
msgid ""
"This pin should be connected to the associated encoder index-enable pin to "
"zero the encoder when it passes index This is only used indicate to the bldc "
"control component that an index has been seen"
msgstr ""

#. type: TP
#: man/man9/bldc.9:174
#, no-wrap
msgid "B<bldc.>I<N>B<.init> bit in [if ( personality & 0x05 ) == 4] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:186
msgid ""
"A rising edge on this pin starts the motor alignment sequence. This pin "
"should be connected in such a way that the motors re-align any time that "
"encoder monitoring has been interrupted. Typically this will only be at "
"machine power-off.  The alignment process involves powering the motor phases "
"in such a way as to put the motor in a known position. The encoder counts "
"are then stored in the B<offset> parameter. The alignment process will tend "
"to cause a following error if it is triggered while the axis is enabled, so "
"should be set before the matching axis.N.enable pin. The complementary "
"B<init-done> pin can be used to handle the required sequencing."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:190
msgid ""
"Both pins can be ignored if the encoder offset is known explicitly, such as "
"is the case with an absolute encoder. In that case the B<offset> parameter "
"can be set directly in the HAL file"
msgstr ""

#. type: TP
#: man/man9/bldc.9:190
#, no-wrap
msgid "B<bldc.>I<N>B<.init-done> bit out [if ( personality & 0x05 ) == 4] (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:193
msgid "Indicates homing sequence complete"
msgstr ""

#. type: TP
#: man/man9/bldc.9:193
#, no-wrap
msgid "B<bldc.>I<N>B<.A-value> float out [if ( personality & 0xF00 ) == 0] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:196
msgid "Output amplitude for phase A"
msgstr ""

#. type: TP
#: man/man9/bldc.9:196
#, no-wrap
msgid "B<bldc.>I<N>B<.B-value> float out [if ( personality & 0xF00 ) == 0] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:199
msgid "Output amplitude for phase B"
msgstr ""

#. type: TP
#: man/man9/bldc.9:199
#, no-wrap
msgid "B<bldc.>I<N>B<.C-value> float out [if ( personality & 0xF00 ) == 0] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:202
msgid "Output amplitude for phase C"
msgstr ""

#. type: TP
#: man/man9/bldc.9:202
#, no-wrap
msgid "B<bldc.>I<N>B<.A-on> bit out [if ( personality & 0xF00 ) == 0x100] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:205
msgid "Output bit for phase A"
msgstr ""

#. type: TP
#: man/man9/bldc.9:205
#, no-wrap
msgid "B<bldc.>I<N>B<.B-on> bit out [if ( personality & 0xF00 ) == 0x100] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:208
msgid "Output bit for phase B"
msgstr ""

#. type: TP
#: man/man9/bldc.9:208
#, no-wrap
msgid "B<bldc.>I<N>B<.C-on> bit out [if ( personality & 0xF00 ) == 0x100] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:211
msgid "Output bit for phase C"
msgstr ""

#. type: TP
#: man/man9/bldc.9:211
#, no-wrap
msgid "B<bldc.>I<N>B<.A-high> float out [if ( personality & 0xF00 ) == 0x200] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:214 man/man9/bldc.9:232
msgid "High-side driver for phase A"
msgstr ""

#. type: TP
#: man/man9/bldc.9:214
#, no-wrap
msgid "B<bldc.>I<N>B<.B-high> float out [if ( personality & 0xF00 ) == 0x200] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:217 man/man9/bldc.9:235
msgid "High-side driver for phase B"
msgstr ""

#. type: TP
#: man/man9/bldc.9:217
#, no-wrap
msgid "B<bldc.>I<N>B<.C-high> float out [if ( personality & 0xF00 ) == 0x200] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:220 man/man9/bldc.9:238
msgid "High-side driver for phase C"
msgstr ""

#. type: TP
#: man/man9/bldc.9:220
#, no-wrap
msgid "B<bldc.>I<N>B<.A-low> float out [if ( personality & 0xF00 ) == 0x200] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:223 man/man9/bldc.9:241
msgid "Low-side driver for phase A"
msgstr ""

#. type: TP
#: man/man9/bldc.9:223
#, no-wrap
msgid "B<bldc.>I<N>B<.B-low> float out [if ( personality & 0xF00 ) == 0x200] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:226 man/man9/bldc.9:244
msgid "Low-side driver for phase B"
msgstr ""

#. type: TP
#: man/man9/bldc.9:226
#, no-wrap
msgid "B<bldc.>I<N>B<.C-low> float out [if ( personality & 0xF00 ) == 0x200] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:229 man/man9/bldc.9:247
msgid "Low-side driver for phase C"
msgstr ""

#. type: TP
#: man/man9/bldc.9:229
#, no-wrap
msgid "B<bldc.>I<N>B<.A-high-on> bit out [if ( personality & 0xF00 ) == 0x300] "
msgstr ""

#. type: TP
#: man/man9/bldc.9:232
#, no-wrap
msgid "B<bldc.>I<N>B<.B-high-on> bit out [if ( personality & 0xF00 ) == 0x300] "
msgstr ""

#. type: TP
#: man/man9/bldc.9:235
#, no-wrap
msgid "B<bldc.>I<N>B<.C-high-on> bit out [if ( personality & 0xF00 ) == 0x300] "
msgstr ""

#. type: TP
#: man/man9/bldc.9:238
#, no-wrap
msgid "B<bldc.>I<N>B<.A-low-on> bit out [if ( personality & 0xF00 ) == 0x300] "
msgstr ""

#. type: TP
#: man/man9/bldc.9:241
#, no-wrap
msgid "B<bldc.>I<N>B<.B-low-on> bit out [if ( personality & 0xF00 ) == 0x300] "
msgstr ""

#. type: TP
#: man/man9/bldc.9:244
#, no-wrap
msgid "B<bldc.>I<N>B<.C-low-on> bit out [if ( personality & 0xF00 ) == 0x300] "
msgstr ""

#. type: TP
#: man/man9/bldc.9:247
#, no-wrap
msgid "B<bldc.>I<N>B<.hall1-out> bit out [if ( personality & 0x400 )] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:250
msgid "Hall 1 output"
msgstr ""

#. type: TP
#: man/man9/bldc.9:250
#, no-wrap
msgid "B<bldc.>I<N>B<.hall2-out> bit out [if ( personality & 0x400 )] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:253
msgid "Hall 2 output"
msgstr ""

#. type: TP
#: man/man9/bldc.9:253
#, no-wrap
msgid "B<bldc.>I<N>B<.hall3-out> bit out [if ( personality & 0x400 )] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:256
msgid "Hall 3 output"
msgstr ""

#. type: TP
#: man/man9/bldc.9:256
#, no-wrap
msgid "B<bldc.>I<N>B<.C1-out> bit out [if ( personality & 0x800 )] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:259
msgid "Fanuc Gray-code bit 0 output"
msgstr ""

#. type: TP
#: man/man9/bldc.9:259
#, no-wrap
msgid "B<bldc.>I<N>B<.C2-out> bit out [if ( personality & 0x800 )] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:262
msgid "Fanuc Gray-code bit 1 output"
msgstr ""

#. type: TP
#: man/man9/bldc.9:262
#, no-wrap
msgid "B<bldc.>I<N>B<.C4-out> bit out [if ( personality & 0x800 )] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:265
msgid "Fanuc Gray-code bit 2 output"
msgstr ""

#. type: TP
#: man/man9/bldc.9:265
#, no-wrap
msgid "B<bldc.>I<N>B<.C8-out> bit out [if ( personality & 0x800 )] "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:268
msgid "Fanuc Gray-code bit 3 output"
msgstr ""

#. type: TP
#: man/man9/bldc.9:268
#, no-wrap
msgid "B<bldc.>I<N>B<.phase-angle> float out (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:273
msgid ""
"Phase angle including lead/lag angle after encoder zeroing etc. Useful for "
"angle/current drives. This value has a range of 0 to 1 and measures "
"electrical revolutions. It will have two zeros for a 4 pole motor, three for "
"a 6-pole etc"
msgstr ""

#. type: TP
#: man/man9/bldc.9:273
#, no-wrap
msgid "B<bldc.>I<N>B<.rotor-angle> float out (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:279
msgid ""
"Rotor angle after encoder zeroing etc. Useful for angle/current drives which "
"add their own phase offset such as the 8i20. This value has a range of 0 to "
"1 and measures electrical revolutions. It will have two zeros for a 4 pole "
"motor, three for a 6-pole etc"
msgstr ""

#. type: TP
#: man/man9/bldc.9:279
#, no-wrap
msgid "B<bldc.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:282
msgid ""
"Current output, including the effect of the dir pin and the alignment "
"sequence"
msgstr ""

#. type: TP
#: man/man9/bldc.9:282
#, no-wrap
msgid "B<bldc.>I<N>B<.out-dir> bit out "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:285
msgid ""
"Direction output, high if /fBvalue/fR is negative XOR /fBrev/fR is true."
msgstr ""

#. type: TP
#: man/man9/bldc.9:285
#, no-wrap
msgid "B<bldc.>I<N>B<.out-abs> float out "
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:288
msgid "Absolute value of the input value"
msgstr ""

#. type: TP
#: man/man9/bldc.9:289
#, no-wrap
msgid "B<bldc.>I<N>B<.in-type> s32 r (default: I<-1>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:292 man/man9/bldc.9:295
msgid "state machine output, will probably hide after debug"
msgstr ""

#. type: TP
#: man/man9/bldc.9:292
#, no-wrap
msgid "B<bldc.>I<N>B<.out-type> s32 r (default: I<-1>)"
msgstr ""

#. type: TP
#: man/man9/bldc.9:295
#, no-wrap
msgid "B<bldc.>I<N>B<.scale> s32 rw [if personality & 0x06] (default: I<512>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:298
msgid "The number of encoder counts per rotor revolution."
msgstr ""

#. type: TP
#: man/man9/bldc.9:298
#, no-wrap
msgid "B<bldc.>I<N>B<.poles> s32 rw [if personality & 0x06] (default: I<4>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:302
msgid ""
"The number of motor poles. The encoder scale will be divided by this value "
"to determine the number of encoder counts per electrical revolution"
msgstr ""

#. type: TP
#: man/man9/bldc.9:302
#, no-wrap
msgid "B<bldc.>I<N>B<.encoder-offset> s32 rw [if personality & 0x0A] (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:306
msgid ""
"The offset, in encoder counts, between the motor electrical zero and the "
"encoder zero modulo the number of counts per electrical revolution"
msgstr ""

#. type: TP
#: man/man9/bldc.9:306
#, no-wrap
msgid "B<bldc.>I<N>B<.offset-measured> s32 r [if personality & 0x04] (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:309
msgid "The encoder offset measured by the homing sequence (in certain modes)"
msgstr ""

#. type: TP
#: man/man9/bldc.9:309
#, no-wrap
msgid "B<bldc.>I<N>B<.drive-offset> float rw (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:317
msgid ""
"The angle, in degrees, applied to the commanded angle by the drive in "
"degrees. This value is only used during the homing sequence of drives with "
"incremental encoder feedback. It is used to back-calculate from commanded "
"angle to actual phase angle. It is only relevant to drives which expect "
"rotor-angle input rather than phase-angle demand. Should be 0 for most "
"drives."
msgstr ""

#. type: TP
#: man/man9/bldc.9:317
#, no-wrap
msgid "B<bldc.>I<N>B<.output-pattern> u32 rw [if personality & 0x400] (default: I<25>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:321
msgid ""
"Commutation pattern to be output in Hall Signal translation mode. See the "
"description of /fBpattern/fR for details"
msgstr ""

#. type: TP
#: man/man9/bldc.9:321
#, no-wrap
msgid "B<bldc.>I<N>B<.pattern> u32 rw [if personality & 0x01] (default: I<25>)"
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:334
msgid ""
"Commutation pattern to use, from 0 to 47. Default is type 25.  Every "
"plausible combination is included. The table shows the excitation pattern "
"along the top, and the pattern code on the left hand side. The table entries "
"are the hall patterns in H1, H2, H3 order.  Common patterns are: 0 (30 "
"degree commutation) and 26, its reverse.  17 (120 degree).  18 (alternate 60 "
"degree).  21 (300 degree, Bodine).  22 (240 degree).  25 (60 degree "
"commutation)."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:337
msgid ""
"Note that a number of incorrect commutations will have non-zero net torque "
"which might look as if they work, but don't really."
msgstr ""

#. type: Plain text
#: man/man9/bldc.9:339
msgid ""
"If your motor lacks documentation it might be worth trying every pattern."
msgstr ""

#. type: groff code
#: man/man9/bldc.9:340
#, no-wrap
msgid ""
".ie  '\\*[.T]'html' \\{\\\n"
".HTML \\\n"
"<STYLE> \\\n"
"#pattern TD { text-align: center; padding-left: .5ex; padding-right: .5ex } \\\n"
"#pattern TH { text-align: center; padding-left: .5ex; padding-right: .5ex } \\\n"
"#pattern TD.W { text-align: right; } \\\n"
"</STYLE> \\\n"
"<TABLE ID=\"pattern\" STYLE=\"border: 1px solid black; border-collapse: collapse\"> \\\n"
"<COL SPAN=7 STYLE=\"margin: .2ex\"><COL SPAN=1 STYLE=\"border-left: 1px solid black\"> \\\n"
"<TR><TD>&nbsp;<TH COLSPAN=6 CLASS=W>Phases, Source - Sink \\\n"
"<TR><TH CLASS=W>pat<TH CLASS=W>B-A<TH CLASS=W>C-A<TH CLASS=W>C-B<TH CLASS=W>A-B<TH CLASS=W>A-C<TH CLASS=W>B-C \\\n"
"<TR><TH>0<TD>000<TD>001<TD>011<TD>111<TD>110<TD>100 \\\n"
"<TR><TH>1<TD>001<TD>000<TD>010<TD>110<TD>111<TD>101 \\\n"
"<TR><TH>2<TD>000<TD>010<TD>011<TD>111<TD>101<TD>100 \\\n"
"<TR><TH>3<TD>001<TD>011<TD>010<TD>110<TD>100<TD>101 \\\n"
"<TR><TH>4<TD>010<TD>011<TD>001<TD>101<TD>100<TD>110 \\\n"
"<TR><TH>5<TD>011<TD>010<TD>000<TD>100<TD>101<TD>111 \\\n"
"<TR><TH>6<TD>010<TD>000<TD>001<TD>101<TD>111<TD>110 \\\n"
"<TR><TH>7<TD>011<TD>001<TD>000<TD>100<TD>110<TD>111 \\\n"
"<TR><TH>8<TD>000<TD>001<TD>101<TD>111<TD>110<TD>010 \\\n"
"<TR><TH>9<TD>001<TD>000<TD>100<TD>110<TD>111<TD>011 \\\n"
"<TR><TH>10<TD>000<TD>010<TD>110<TD>111<TD>101<TD>001 \\\n"
"<TR><TH>11<TD>001<TD>011<TD>111<TD>110<TD>100<TD>000 \\\n"
"<TR><TH>12<TD>010<TD>011<TD>111<TD>101<TD>100<TD>000 \\\n"
"<TR><TH>13<TD>011<TD>010<TD>110<TD>100<TD>101<TD>001 \\\n"
"<TR><TH>14<TD>010<TD>000<TD>100<TD>101<TD>111<TD>011 \\\n"
"<TR><TH>15<TD>011<TD>001<TD>101<TD>100<TD>110<TD>010 \\\n"
"<TR><TH>16<TD>000<TD>100<TD>101<TD>111<TD>011<TD>010 \\\n"
"<TR><TH>17<TD>001<TD>101<TD>100<TD>110<TD>010<TD>011 \\\n"
"<TR><TH>18<TD>000<TD>100<TD>110<TD>111<TD>011<TD>001 \\\n"
"<TR><TH>19<TD>001<TD>101<TD>111<TD>110<TD>010<TD>000 \\\n"
"<TR><TH>20<TD>010<TD>110<TD>111<TD>101<TD>001<TD>000 \\\n"
"<TR><TH>21<TD>011<TD>111<TD>110<TD>100<TD>000<TD>001 \\\n"
"<TR><TH>22<TD>010<TD>110<TD>100<TD>101<TD>001<TD>011 \\\n"
"<TR><TH>23<TD>011<TD>111<TD>101<TD>100<TD>000<TD>010 \\\n"
"<TR><TH>24<TD>100<TD>101<TD>111<TD>011<TD>010<TD>000 \\\n"
"<TR><TH>25<TD>101<TD>100<TD>110<TD>010<TD>011<TD>001 \\\n"
"<TR><TH>26<TD>100<TD>110<TD>111<TD>011<TD>001<TD>000 \\\n"
"<TR><TH>27<TD>101<TD>111<TD>110<TD>010<TD>000<TD>001 \\\n"
"<TR><TH>28<TD>110<TD>111<TD>101<TD>001<TD>000<TD>010 \\\n"
"<TR><TH>29<TD>111<TD>110<TD>100<TD>000<TD>001<TD>011 \\\n"
"<TR><TH>30<TD>110<TD>100<TD>101<TD>001<TD>011<TD>010 \\\n"
"<TR><TH>31<TD>111<TD>101<TD>100<TD>000<TD>010<TD>011 \\\n"
"<TR><TH>32<TD>100<TD>101<TD>001<TD>011<TD>010<TD>110 \\\n"
"<TR><TH>33<TD>101<TD>100<TD>000<TD>010<TD>011<TD>111 \\\n"
"<TR><TH>34<TD>100<TD>110<TD>010<TD>011<TD>001<TD>101 \\\n"
"<TR><TH>35<TD>101<TD>111<TD>011<TD>010<TD>000<TD>100 \\\n"
"<TR><TH>36<TD>110<TD>111<TD>011<TD>001<TD>000<TD>100 \\\n"
"<TR><TH>37<TD>111<TD>110<TD>010<TD>000<TD>001<TD>101 \\\n"
"<TR><TH>38<TD>110<TD>100<TD>000<TD>001<TD>011<TD>111 \\\n"
"<TR><TH>39<TD>111<TD>101<TD>001<TD>000<TD>010<TD>110 \\\n"
"<TR><TH>40<TD>100<TD>000<TD>001<TD>011<TD>111<TD>110 \\\n"
"<TR><TH>41<TD>101<TD>001<TD>000<TD>010<TD>110<TD>111 \\\n"
"<TR><TH>42<TD>100<TD>000<TD>010<TD>011<TD>111<TD>101 \\\n"
"<TR><TH>43<TD>101<TD>001<TD>011<TD>010<TD>110<TD>100 \\\n"
"<TR><TH>44<TD>110<TD>010<TD>011<TD>001<TD>101<TD>100 \\\n"
"<TR><TH>45<TD>111<TD>011<TD>010<TD>000<TD>100<TD>101 \\\n"
"<TR><TH>46<TD>110<TD>010<TD>000<TD>001<TD>101<TD>111 \\\n"
"<TR><TH>47<TD>111<TD>011<TD>001<TD>000<TD>100<TD>110 \\\n"
"</TABLE>\n"
"\\}\n"
".el \\{\\\n"
"\n"
".TS\n"
"box tab(;);\n"
"cb s s s s s s\n"
"cb|cb cb cb cb cb cb\n"
"c | c  c  c  c c r.\n"
"Phases, Source - Sink\n"
"_\n"
"pat;B-A;C-A;C-B;A-B;A-C;B-C\n"
"_\n"
"0;000;001;011;111;110;100\n"
"1;001;000;010;110;111;101\n"
"2;000;010;011;111;101;100\n"
"3;001;011;010;110;100;101\n"
"4;010;011;001;101;100;110\n"
"5;011;010;000;100;101;111\n"
"6;010;000;001;101;111;110\n"
"7;011;001;000;100;110;111\n"
"8;000;001;101;111;110;010\n"
"9;001;000;100;110;111;011\n"
"10;000;010;110;111;101;001\n"
"11;001;011;111;110;100;000\n"
"12;010;011;111;101;100;000\n"
"13;011;010;110;100;101;001\n"
"14;010;000;100;101;111;011\n"
"15;011;001;101;100;110;010\n"
"16;000;100;101;111;011;010\n"
"17;001;101;100;110;010;011\n"
"18;000;100;110;111;011;001\n"
"19;001;101;111;110;010;000\n"
"20;010;110;111;101;001;000\n"
"21;011;111;110;100;000;001\n"
"22;010;110;100;101;001;011\n"
"23;011;111;101;100;000;010\n"
"24;100;101;111;011;010;000\n"
"25;101;100;110;010;011;001\n"
"26;100;110;111;011;001;000\n"
"27;101;111;110;010;000;001\n"
"28;110;111;101;001;000;010\n"
"29;111;110;100;000;001;011\n"
"30;110;100;101;001;011;010\n"
"31;111;101;100;000;010;011\n"
"32;100;101;001;011;010;110\n"
"33;101;100;000;010;011;111\n"
"34;100;110;010;011;001;101\n"
"35;101;111;011;010;000;100\n"
"36;110;111;011;001;000;100\n"
"37;111;110;010;000;001;101\n"
"38;110;100;000;001;011;111\n"
"39;111;101;001;000;010;110\n"
"40;100;000;001;011;111;110\n"
"41;101;001;000;010;110;111\n"
"42;100;000;010;011;111;101\n"
"43;101;001;011;010;110;100\n"
"44;110;010;011;001;101;100\n"
"45;111;011;010;000;100;101\n"
"46;110;010;000;001;101;111\n"
"47;111;011;001;000;100;110\n"
".TE\n"
"\\}\n"
msgstr ""

#. type: TH
#: man/man9/blend.9:9
#, no-wrap
msgid "BLEND"
msgstr ""

#. type: Plain text
#: man/man9/blend.9:13
msgid "blend - Perform linear interpolation between two values"
msgstr ""

#. type: Plain text
#: man/man9/blend.9:16
msgid "B<loadrt blend [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/blend.9:17
#, no-wrap
msgid "B<blend.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/blend.9:21
#, no-wrap
msgid "B<blend.>I<N>B<.in1> float in "
msgstr ""

#. type: Plain text
#: man/man9/blend.9:24
msgid "First input.  If select is equal to 1.0, the output is equal to in1"
msgstr ""

#. type: TP
#: man/man9/blend.9:24
#, no-wrap
msgid "B<blend.>I<N>B<.in2> float in "
msgstr ""

#. type: Plain text
#: man/man9/blend.9:27
msgid "Second input.  If select is equal to 0.0, the output is equal to in2"
msgstr ""

#. type: TP
#: man/man9/blend.9:27
#, no-wrap
msgid "B<blend.>I<N>B<.select> float in "
msgstr ""

#. type: Plain text
#: man/man9/blend.9:30
msgid ""
"Select input.  For values between 0.0 and 1.0, the output changes linearly "
"from in2 to in1"
msgstr ""

#. type: TP
#: man/man9/blend.9:30
#, no-wrap
msgid "B<blend.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/blend.9:33
msgid "Output value."
msgstr ""

#. type: TP
#: man/man9/blend.9:34
#, no-wrap
msgid "B<blend.>I<N>B<.open> bit rw "
msgstr ""

#. type: Plain text
#: man/man9/blend.9:37
msgid ""
"If true, select values outside the range 0.0 to 1.0 give values outside the "
"range in2 to in1.  If false, outputs are clamped to the the range in2 to in1"
msgstr ""

#. type: TH
#: man/man9/carousel.9:9
#, no-wrap
msgid "CAROUSEL"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:13
msgid "carousel - Orient a toolchanger carousel using various encoding schemes"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:19
msgid ""
"B<loadrt carousel pockets=>I<N>[,I<N>] B<encoding=>I<ssss>[,I<sss>] "
"B<num_sense=>I<N>[,I<N>] B<dir=>I<N>[,I<N]>"
msgstr ""

#. type: TP
#: man/man9/carousel.9:21
#, no-wrap
msgid "B<pockets> The number of pockets in each toolchanger."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:24
msgid ""
"Use up to 8 numbers separated by commas to create multiple carousel "
"components."
msgstr ""

#. type: TP
#: man/man9/carousel.9:24
#, no-wrap
msgid "B<encoding> The position encoding."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:27
msgid "gray, binary, bcd, index, edge, counts or single. Default = 'gray'"
msgstr ""

#. type: TP
#: man/man9/carousel.9:27
#, no-wrap
msgid "B<num_sense> The number of position sense pins."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:30
msgid "Default = 4."
msgstr ""

#. type: TP
#: man/man9/carousel.9:30
#, no-wrap
msgid "B<dir> Set to 1 for unidirectional or  2 for bidirectional operation."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:33
msgid "Default = bidirectional"
msgstr ""

#. type: TP
#: man/man9/carousel.9:33
#, no-wrap
msgid "B<parity> Set to 1 for odd parity, 0 for even parity checking."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:36
msgid "Default = 0 (even)"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:41
msgid ""
"This component is intended to help operate various types of carousel-type "
"toolchangers."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:51
msgid ""
"The component can be configured to operate with binary, binary-coded decimal "
"(BCD)  or gray-coded position feedback ('binary;, 'bcd' and 'gray' modes)  "
"It can alternatively work with an individual sensor for each tool position "
"('single' mode) or with a sensor at each tool position and a separate index "
"('index' mode). Systems using a stepper motor or quadrature encoder are also "
"supported ('counts' mode).  B<edge> is a special case of index mode for tool "
"changers with pockets on both the rising and falling edges of the position "
"sensor.  (Seen on at least one Denford Orac.)"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:54
msgid ""
"Both unidirectional and bidirectional systems are supported and those that "
"reverse against a stop when in position."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:57
msgid ""
"The number of carousel component instances created depends on the number of "
"entries in the 'pockets' modparam. For example"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:59
msgid "B<loadrt carousel pockets=10,10,8>"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:63
msgid ""
"Would create 3 carousel instances with 10, 10 and 8 pockets. The other "
"parameters are optional. If absent then defaults will be used. Any missing "
"entry will assume the previous value."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:70
msgid ""
"When the enable pin is set to true the component will immediately set the "
"\"active\" pin to true and then (for a bidirectional instance) calculate the "
"shortest path to the requested pocket number. The appropriate motor "
"direction output pins will then be set. Bit outputs for forward and reverse "
"are provided as well as a three-state velocity output for driving a DC motor "
"PWM or a velocity-mode stepgen."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:74
msgid ""
"The component will monitor the carousel position and, when the correct "
"position is reached, set the motor-control pins to 0, set \"active\" to 0 "
"and set \"ready\" to 1."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:82
msgid ""
"In 'index', 'edge' or 'counts'mode there is a need to find the initial home "
"position of the carousel.  The first time that the \"enable\" pin is set; "
"the carousel will rotate forwards searching for a home signal. In 'index' "
"and 'edge' mode this is when both the index and pulse inputs are true. In "
"'counts' mode only the index input needs to be set to set home. Additionally "
"in 'counts' mode the usual index-enable logic of the encoder counters is "
"supported."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:92
msgid ""
"With some carousel designs the carousel will not stop immediately. To allow "
"for this set the B<lign-dc> pin to a low velocity to be used for a final "
"latching move, and set theB<decel-time> to a suitable value.  Once the decel-"
"time has expired the carousel will, if it was moving forwards, reverse back "
"on to the position marker, off of the arker and then bak on to the FWD edge. "
"If moving in reverse it will continue off the marker and then reverse slowly "
"on to the FWD edge.  This algnment is only possible with a motor-vel "
"controlled bidirectional carousel, Other combinations will be acepted but "
"probably won't have the desired behaviour.  Some tuning will be needed of "
"align-dc and decel-time to achieve reliable operation."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:95
msgid ""
"In the unusual case that the index and pulse signals do not align it is "
"possible to use HAL logic to achieve the desired pin switching during homing."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:100
msgid ""
"Setting \"enable\" low does not halt the homing move, so if homing on first "
"tool change is not needed then the enable pin can be toggled by an axis "
"homing pin or a script and the homing process will continue even if that "
"driving signal resets during the carousel homing move."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:105
msgid ""
"To operate the component with an encoder or stepgen use mode \"C\". The "
"B<scale> pin should be the number of steps or encoder counts between pocket "
"centres. The B<width> pin can be used to stop the motor some distance before "
"the centre of the pocket to allow the motor time to decelerate."
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:110
msgid ""
"For tool changers which lock the carousel against a stop the B<rev-pulse> "
"pin can be set to a non-zero value. The motor-rev pin will then be set for "
"this many seconds at the completion of the tool search and at the same time "
"the reverse duty/cycle velocity value will be sent to the motor-vel pin."
msgstr ""

#. type: TP
#: man/man9/carousel.9:112
#, no-wrap
msgid "B<carousel.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/carousel.9:116
#, no-wrap
msgid "B<carousel.>I<N>B<.pocket-number> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:122
msgid ""
"The pocket to move to when the .enable pin goes high. If the value passed is "
"higher than the number of pockets specified in the \"pockets\" modparam then "
"modulo arithmetic is used. This is intended to allow the use of multiple "
"tools in the same holder, as is sometimes useful with lathes."
msgstr ""

#. type: TP
#: man/man9/carousel.9:122
#, no-wrap
msgid "B<carousel.>I<N>B<.enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:125
msgid "Set this pin high to start movement. Setting it low will stop movement"
msgstr ""

#. type: TP
#: man/man9/carousel.9:125
#, no-wrap
msgid "B<carousel.>I<N>B<.active> bit out "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:128
msgid "indicates that the component is active"
msgstr ""

#. type: TP
#: man/man9/carousel.9:128
#, no-wrap
msgid "B<carousel.>I<N>B<.ready> bit out "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:131
msgid "This pin goes high when the carousel is in-position"
msgstr ""

#. type: TP
#: man/man9/carousel.9:131
#, no-wrap
msgid "B<carousel.>I<N>B<.strobe> bit in (default: I<1>)"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:135
msgid ""
"Use this pin to indicate that the position feedback is valid. Often provided "
"by binary encoders"
msgstr ""

#. type: TP
#: man/man9/carousel.9:135
#, no-wrap
msgid "B<carousel.>I<N>B<.parity> bit in "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:139
msgid ""
"Some encoders supply a parity bit, if this is connected then the parity-"
"error output bit will indicate parity errors"
msgstr ""

#. type: TP
#: man/man9/carousel.9:139
#, no-wrap
msgid "B<carousel.>I<N>B<.sense->I<M> bit in (M=0..personality) "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:143
msgid ""
"Carousel position feedback pins. In 'index' mode there will be only 2 pins. "
"sense-0 is the index and sense-1 is the pocket sensor."
msgstr ""

#. type: TP
#: man/man9/carousel.9:143
#, no-wrap
msgid "B<carousel.>I<N>B<.rev-pulse> float in "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:147
msgid ""
"The duration in seconds for which a ratchet changer (Boxford, Emco)  should "
"pulse the reverse pin to lock the holder"
msgstr ""

#. type: TP
#: man/man9/carousel.9:147
#, no-wrap
msgid "B<carousel.>I<N>B<.fwd-dc> float in "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:150
msgid "Velocity or duty cycle when forwards rotation is desired"
msgstr ""

#. type: TP
#: man/man9/carousel.9:150
#, no-wrap
msgid "B<carousel.>I<N>B<.rev-dc> float in "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:153
msgid "Velocity or duty cycle when reverse rotation is desired"
msgstr ""

#. type: TP
#: man/man9/carousel.9:153
#, no-wrap
msgid "B<carousel.>I<N>B<.hold-dc> float in "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:156
msgid "Duty cycle when carousel is in-position (to hold against stop)"
msgstr ""

#. type: TP
#: man/man9/carousel.9:156
#, no-wrap
msgid "B<carousel.>I<N>B<.align-dc> float in "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:160
msgid ""
"Use this pin to set the speed of a slower alignment move once the changer is "
"in position. Such a system almost certainly needs decel-time setting too"
msgstr ""

#. type: TP
#: man/man9/carousel.9:160
#, no-wrap
msgid "B<carousel.>I<N>B<.decel-time> float in "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:163
msgid "Time to wait for carousel to stop before final alignment"
msgstr ""

#. type: TP
#: man/man9/carousel.9:163
#, no-wrap
msgid "B<carousel.>I<N>B<.counts> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:166
msgid "Connect to the rawcounts of an encoder or a stepgen in 'counts' mode"
msgstr ""

#. type: TP
#: man/man9/carousel.9:166
#, no-wrap
msgid "B<carousel.>I<N>B<.scale> s32 in (default: I<100>)"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:169
msgid "The number of stepgen or encoder counts between successive pockets"
msgstr ""

#. type: TP
#: man/man9/carousel.9:169
#, no-wrap
msgid "B<carousel.>I<N>B<.width> s32 in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:172
msgid "How far each side of the exact scale to signal a new pocket"
msgstr ""

#. type: TP
#: man/man9/carousel.9:172
#, no-wrap
msgid "B<carousel.>I<N>B<.home-offset> s32 in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:175
msgid "The offset (in counts) between the index and pocket 1"
msgstr ""

#. type: TP
#: man/man9/carousel.9:175
#, no-wrap
msgid "B<carousel.>I<N>B<.index-enable> bit io "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:178
msgid "Used to home to an encoder index"
msgstr ""

#. type: TP
#: man/man9/carousel.9:178
#, no-wrap
msgid "B<carousel.>I<N>B<.jog-fwd> bit in "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:181
msgid "Jog the carousel forwards one tool position"
msgstr ""

#. type: TP
#: man/man9/carousel.9:181
#, no-wrap
msgid "B<carousel.>I<N>B<.jog-rev> bit in "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:186
msgid ""
"Jog the carousel in reverse (only if dir = 2).  It is very important that "
"these pins should be debounced and should probably also be interlocked to "
"only operate when the machine is idle."
msgstr ""

#. type: TP
#: man/man9/carousel.9:186
#, no-wrap
msgid "B<carousel.>I<N>B<.motor-fwd> bit out "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:189
msgid "Indicates the motor should run forwards (bigger numbers)"
msgstr ""

#. type: TP
#: man/man9/carousel.9:189
#, no-wrap
msgid "B<carousel.>I<N>B<.motor-rev> bit out "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:192
msgid "Indicates the motor should run reverse."
msgstr ""

#. type: TP
#: man/man9/carousel.9:192
#, no-wrap
msgid "B<carousel.>I<N>B<.parity-error> bit out "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:195
msgid "Indicates a parity error"
msgstr ""

#. type: TP
#: man/man9/carousel.9:195
#, no-wrap
msgid "B<carousel.>I<N>B<.current-position> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:198
msgid "This pin indicates the current position feedback"
msgstr ""

#. type: TP
#: man/man9/carousel.9:198
#, no-wrap
msgid "B<carousel.>I<N>B<.motor-vel> float out "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:201
msgid "The duty-cycle or velocity to drive a DC motor or stepgen"
msgstr ""

#. type: TP
#: man/man9/carousel.9:201
#, no-wrap
msgid "B<carousel.>I<N>B<.homed> bit out (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:204
msgid "Shows that homing is complete. Only used in index and edge modes"
msgstr ""

#. type: TP
#: man/man9/carousel.9:204
#, no-wrap
msgid "B<carousel.>I<N>B<.unhome> bit in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:207
msgid "Should only really be necessary for testing"
msgstr ""

#. type: TP
#: man/man9/carousel.9:208
#, no-wrap
msgid "B<carousel.>I<N>B<.state> s32 r (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:211
msgid "Current component state"
msgstr ""

#. type: TP
#: man/man9/carousel.9:211
#, no-wrap
msgid "B<carousel.>I<N>B<.homing> bit r (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:214
msgid "Shows that homing is in progress. Only used for index mode"
msgstr ""

#. type: TP
#: man/man9/carousel.9:214
#, no-wrap
msgid "B<carousel.>I<N>B<.timer> float r "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:217
msgid "Shows the value of the internal timer"
msgstr ""

#. type: TP
#: man/man9/carousel.9:217
#, no-wrap
msgid "B<carousel.>I<N>B<.motor-dir> s32 r "
msgstr ""

#. type: Plain text
#: man/man9/carousel.9:220
msgid "Internal tag for search direction"
msgstr ""

#. type: TH
#: man/man9/charge_pump.9:9
#, no-wrap
msgid "CHARGE_PUMP"
msgstr ""

#. type: Plain text
#: man/man9/charge_pump.9:13
msgid ""
"charge_pump - Create a square-wave for the 'charge pump' input of some "
"controller boards"
msgstr ""

#. type: Plain text
#: man/man9/charge_pump.9:16
msgid "B<loadrt charge_pump>"
msgstr ""

#. type: Plain text
#: man/man9/charge_pump.9:25
msgid ""
"The 'Charge Pump' should be added to the base thread function.  When enabled "
"the output is on for one period and off for one period. To calculate the "
"frequency of the output 1/(period time in seconds x 2) = hz. For example if "
"you have a base period of 100,000ns that is 0.0001 seconds and the formula "
"would be 1/(0.0001 x 2) = 5,000 hz or 5 Khz. Two additional outputs are "
"provided that run a factor of 2 and 4 slower for hardware that requires a "
"lower frequency."
msgstr ""

#. type: TP
#: man/man9/charge_pump.9:26
#, no-wrap
msgid "B<charge-pump>"
msgstr ""

#. type: Plain text
#: man/man9/charge_pump.9:29
msgid "Toggle the output bit (if enabled)"
msgstr ""

#. type: TP
#: man/man9/charge_pump.9:30
#, no-wrap
msgid "B<charge-pump.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/charge_pump.9:33
msgid ""
"Square wave if 'enable' is TRUE or unconnected, low if 'enable' is FALSE"
msgstr ""

#. type: TP
#: man/man9/charge_pump.9:33
#, no-wrap
msgid "B<charge-pump.out-2> bit out "
msgstr ""

#. type: Plain text
#: man/man9/charge_pump.9:36
msgid "Square wave at half the frequency of 'out'"
msgstr ""

#. type: TP
#: man/man9/charge_pump.9:36
#, no-wrap
msgid "B<charge-pump.out-4> bit out "
msgstr ""

#. type: Plain text
#: man/man9/charge_pump.9:39
msgid "Square wave at a quarter of the frequency of 'out'"
msgstr ""

#. type: TP
#: man/man9/charge_pump.9:39
#, no-wrap
msgid "B<charge-pump.enable> bit in (default: I<TRUE>)"
msgstr ""

#. type: Plain text
#: man/man9/charge_pump.9:42
msgid "If FALSE, forces all 'out' pins to be low"
msgstr ""

#. type: TH
#: man/man9/clarke2.9:9
#, no-wrap
msgid "CLARKE2"
msgstr ""

#. type: TH
#: man/man9/clarke2.9:9 man/man9/clarke3.9:9 man/man9/clarkeinv.9:9
#: man/man9/plasmac.9:9 man/man9/timedelta.9:9
#, no-wrap
msgid "2022-10-05"
msgstr ""

#. type: Plain text
#: man/man9/clarke2.9:13
msgid "clarke2 - Two input version of Clarke transform"
msgstr ""

#. type: Plain text
#: man/man9/clarke2.9:16
msgid "B<loadrt clarke2 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/clarke2.9:21
msgid ""
"The Clarke transform can be used to translate a vector quantity from a three "
"phase system (three components 120 degrees apart) to a two phase Cartesian "
"system."
msgstr ""

#. type: Plain text
#: man/man9/clarke2.9:30
msgid ""
"B<clarke2> implements a special case of the Clarke transform, which only "
"needs two of the three input phases.  In a three wire three phase system, "
"the sum of the three phase currents or voltages must always be zero.  As a "
"result only two of the three are needed to completely define the current or "
"voltage.  B<clarke2> assumes that the sum is zero, so it only uses phases A "
"and B of the input.  Since the H (homopolar) output will always be zero in "
"this case, it is not generated."
msgstr ""

#. type: TP
#: man/man9/clarke2.9:31
#, no-wrap
msgid "B<clarke2.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/clarke2.9:35
#, no-wrap
msgid "B<clarke2.>I<N>B<.a> float in "
msgstr ""

#. type: TP
#: man/man9/clarke2.9:39
#, no-wrap
msgid "B<clarke2.>I<N>B<.b> float in "
msgstr ""

#. type: Plain text
#: man/man9/clarke2.9:42
msgid "first two phases of three phase input"
msgstr ""

#. type: TP
#: man/man9/clarke2.9:42
#, no-wrap
msgid "B<clarke2.>I<N>B<.x> float out "
msgstr ""

#. type: TP
#: man/man9/clarke2.9:46
#, no-wrap
msgid "B<clarke2.>I<N>B<.y> float out "
msgstr ""

#. type: Plain text
#: man/man9/clarke2.9:49 man/man9/clarke3.9:50
msgid "cartesian components of output"
msgstr ""

#. type: Plain text
#: man/man9/clarke2.9:53
msgid ""
"B<clarke3>(9) for the general case, B<clarkeinv>(9) for the inverse "
"transform."
msgstr ""

#. type: TH
#: man/man9/clarke3.9:9
#, no-wrap
msgid "CLARKE3"
msgstr ""

#. type: Plain text
#: man/man9/clarke3.9:13
msgid "clarke3 - Clarke (3 phase to cartesian) transform"
msgstr ""

#. type: Plain text
#: man/man9/clarke3.9:16
msgid "B<loadrt clarke3 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/clarke3.9:22
msgid ""
"The Clarke transform can be used to translate a vector quantity from a three "
"phase system (three components 120 degrees apart) to a two phase Cartesian "
"system (plus a homopolar component if the three phases don't sum to zero)."
msgstr ""

#. type: Plain text
#: man/man9/clarke3.9:27
msgid ""
"B<clarke3> implements the general case of the transform, using all three "
"phases.  If the three phases are known to sum to zero, see B<clarke2> for a "
"simpler version."
msgstr ""

#. type: TP
#: man/man9/clarke3.9:28
#, no-wrap
msgid "B<clarke3.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/clarke3.9:32
#, no-wrap
msgid "B<clarke3.>I<N>B<.a> float in "
msgstr ""

#. type: TP
#: man/man9/clarke3.9:36
#, no-wrap
msgid "B<clarke3.>I<N>B<.b> float in "
msgstr ""

#. type: TP
#: man/man9/clarke3.9:40
#, no-wrap
msgid "B<clarke3.>I<N>B<.c> float in "
msgstr ""

#. type: Plain text
#: man/man9/clarke3.9:43
msgid "three phase input vector"
msgstr ""

#. type: TP
#: man/man9/clarke3.9:43
#, no-wrap
msgid "B<clarke3.>I<N>B<.x> float out "
msgstr ""

#. type: TP
#: man/man9/clarke3.9:47
#, no-wrap
msgid "B<clarke3.>I<N>B<.y> float out "
msgstr ""

#. type: TP
#: man/man9/clarke3.9:50
#, no-wrap
msgid "B<clarke3.>I<N>B<.h> float out "
msgstr ""

#. type: Plain text
#: man/man9/clarke3.9:53
msgid "homopolar component of output"
msgstr ""

#. type: Plain text
#: man/man9/clarke3.9:57
msgid ""
"B<clarke2>(9) for the 'a+b+c=0' case, B<clarkeinv>(9) for the inverse "
"transform."
msgstr ""

#. type: TH
#: man/man9/clarkeinv.9:9
#, no-wrap
msgid "CLARKEINV"
msgstr ""

#. type: Plain text
#: man/man9/clarkeinv.9:13
msgid "clarkeinv - Inverse Clarke transform"
msgstr ""

#. type: Plain text
#: man/man9/clarkeinv.9:16
msgid "B<loadrt clarkeinv [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/clarkeinv.9:21
msgid ""
"The inverse Clarke transform can be used rotate a vector quantity and then "
"translate it from Cartesian coordinate system to a three phase system (three "
"components 120 degrees apart)."
msgstr ""

#. type: TP
#: man/man9/clarkeinv.9:22
#, no-wrap
msgid "B<clarkeinv.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/clarkeinv.9:26
#, no-wrap
msgid "B<clarkeinv.>I<N>B<.x> float in "
msgstr ""

#. type: TP
#: man/man9/clarkeinv.9:30
#, no-wrap
msgid "B<clarkeinv.>I<N>B<.y> float in "
msgstr ""

#. type: Plain text
#: man/man9/clarkeinv.9:33
msgid "cartesian components of input"
msgstr ""

#. type: TP
#: man/man9/clarkeinv.9:33
#, no-wrap
msgid "B<clarkeinv.>I<N>B<.h> float in "
msgstr ""

#. type: Plain text
#: man/man9/clarkeinv.9:36
msgid "homopolar component of input (usually zero)"
msgstr ""

#. type: TP
#: man/man9/clarkeinv.9:36
#, no-wrap
msgid "B<clarkeinv.>I<N>B<.theta> float in "
msgstr ""

#. type: Plain text
#: man/man9/clarkeinv.9:39
msgid "rotation angle: 0.00 to 1.00 = 0 to 360 degrees"
msgstr ""

#. type: TP
#: man/man9/clarkeinv.9:39
#, no-wrap
msgid "B<clarkeinv.>I<N>B<.a> float out "
msgstr ""

#. type: TP
#: man/man9/clarkeinv.9:43
#, no-wrap
msgid "B<clarkeinv.>I<N>B<.b> float out "
msgstr ""

#. type: TP
#: man/man9/clarkeinv.9:47
#, no-wrap
msgid "B<clarkeinv.>I<N>B<.c> float out "
msgstr ""

#. type: Plain text
#: man/man9/clarkeinv.9:50
msgid "three phase output vector"
msgstr ""

#. type: Plain text
#: man/man9/clarkeinv.9:53
msgid "B<clarke2>(9) and B<clarke3>(9) for the forward transform."
msgstr ""

#. type: TH
#: man/man9/classicladder.9:2
#, no-wrap
msgid "CLASSICLADDER"
msgstr ""

#. type: TH
#: man/man9/classicladder.9:2
#, no-wrap
msgid "2008-11-23"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:6
msgid "ClassicLadder - realtime software plc based on ladder logic"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:8
msgid ""
"B<loadrt classicladder_rt [numRungs=>I<N>B<] [numBits=>I<N>B<] "
"[numWords=>I<N>B<] [numTimers=>I<N>B<] [numMonostables=>I<N>B<] "
"[numCounters=>I<N>B<] [numPhysInputs=>I<N>B<] [numPhysOutputs=>I<N>B<] "
"[numArithmExpr=>I<N>B<] [numSections=>I<N>B<] [numSymbols=>I<N>B<] "
"[numS32in=>I<N>B<] [numS32out=>I<N>B<] [numFloatIn=>I<N>B<] "
"[numFloatOut=>I<N>B<]>"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:10
msgid "B<loadusr classicladder E<lt>file nameE<gt> [--nogui]>"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:20
msgid ""
"This component consist of a realtime part and a non-realtime part (often "
"called 'userspace' in the LinuxCNC documentation).  The non-realtime part "
"loads the programmable ladder description, while the realtime part provides "
"the pins.  The file name of the configuration can be changed using an "
"argument to the non-realtime part.  By default the non-realtime part "
"provides a graphical visualisation of the loaded ladder, which can be "
"disabled using the '--nogui' option to the non-realtime part."
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:23
msgid ""
"These pins and parameters are created by the realtime B<classicladder_rt> "
"module.  Each period (minimum 1000000 ns), ClassicLadder reads the inputs, "
"evaluates the ladder logic defined in the GUI, and then writes the outputs."
msgstr ""

#. type: TP
#: man/man9/classicladder.9:26
#, no-wrap
msgid "B<classicladder.0.in->I<NN> IN bit"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:29
msgid "These bit signal pins map to B<%I>I<NN> variables in ClassicLadder."
msgstr ""

#. type: TP
#: man/man9/classicladder.9:30
#, no-wrap
msgid "B<classicladder.0.out->I<NN> OUT bit"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:34
msgid ""
"These bit signal pins map to B<%Q>I<NN> variables in ClassicLadder.  Output "
"from ClassicLadder."
msgstr ""

#. type: TP
#: man/man9/classicladder.9:35
#, no-wrap
msgid "B<classicladder.0.s32in->I<NN> IN s32"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:39
msgid ""
"Integer input from ClassicLadder.  These s32 signal pins map to B<%IW>I<NN> "
"variables in ClassicLadder."
msgstr ""

#. type: TP
#: man/man9/classicladder.9:40
#, no-wrap
msgid "B<classicladder.0.s32out->I<NN> OUT s32"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:44
msgid ""
"Integer output from ClassicLadder.  These s32 signal pins map to B<%QW>I<NN> "
"variables in ClassicLadder."
msgstr ""

#. type: TP
#: man/man9/classicladder.9:45
#, no-wrap
msgid "B<classicladder.0.floatin->I<NN> IN float"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:50
msgid ""
"Integer input from ClassicLadder.  These float signal pins map to B<"
"%IF>I<NN> variables in ClassicLadder.  These are truncated to S32 values "
"internally. eg 7.5 will be 7."
msgstr ""

#. type: TP
#: man/man9/classicladder.9:51
#, no-wrap
msgid "B<classicladder.0.floatout->I<NN> OUT float"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:55
msgid ""
"Float output from ClassicLadder.  These float signal pins map to B<%QF>I<NN> "
"variables in ClassicLadder."
msgstr ""

#. type: TP
#: man/man9/classicladder.9:56
#, no-wrap
msgid "B<classicladder.0.hide_gui IN bit>"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:61
msgid ""
"This bit pin hides the ClassicLadder window, while still having the "
"userspace code run. This is usually desirable when modbus is used, as modbus "
"requires the userspace code to run."
msgstr ""

#. type: TP
#: man/man9/classicladder.9:64
#, no-wrap
msgid "B<classicladder.0.refresh.time> RO s32"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:67
msgid "Tells you how long the last refresh took."
msgstr ""

#. type: TP
#: man/man9/classicladder.9:68
#, no-wrap
msgid "B<classicladder.0.refresh.tmax> RW s32"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:71
msgid "Tells you how long the longest refresh took."
msgstr ""

#. type: TP
#: man/man9/classicladder.9:72
#, no-wrap
msgid "B<classicladder.0.ladder-state> RO s32"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:75
msgid "Tells you if the program is running or not"
msgstr ""

#. type: TP
#: man/man9/classicladder.9:78
#, no-wrap
msgid "B<classicladder.0.refresh> FP"
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:83
msgid ""
"The rung update rate. Add this to the servo thread.  You can added it to a "
"faster thread but it.  Will update no faster than once every 1 millisecond "
"(1000000 ns)."
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:86
msgid ""
"See http://wiki.linuxcnc.org/cgi-bin/wiki.pl?ClassicLadder_Ver_7.124 for the "
"latest."
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:89
msgid ""
"I<ClassicLadder> chapters in the LinuxCNC documentation for a full "
"description of the B<ClassicLadder> syntax and examples."
msgstr ""

#. type: Plain text
#: man/man9/classicladder.9:90
msgid "http://wiki.linuxcnc.org/cgi-bin/wiki.pl?ClassicLadder_Ver_7.124"
msgstr ""

#. type: TH
#: man/man9/comp.9:9
#, no-wrap
msgid "COMP"
msgstr ""

#. type: Plain text
#: man/man9/comp.9:13
msgid "comp - Two input comparator with hysteresis"
msgstr ""

#. type: Plain text
#: man/man9/comp.9:16
msgid "B<loadrt comp [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/comp.9:17
#, no-wrap
msgid "B<comp.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: Plain text
#: man/man9/comp.9:20
msgid "Update the comparator"
msgstr ""

#. type: TP
#: man/man9/comp.9:21
#, no-wrap
msgid "B<comp.>I<N>B<.in0> float in "
msgstr ""

#. type: Plain text
#: man/man9/comp.9:24
msgid "Inverting input to the comparator"
msgstr ""

#. type: TP
#: man/man9/comp.9:24
#, no-wrap
msgid "B<comp.>I<N>B<.in1> float in "
msgstr ""

#. type: Plain text
#: man/man9/comp.9:27
msgid "Non-inverting input to the comparator"
msgstr ""

#. type: TP
#: man/man9/comp.9:27
#, no-wrap
msgid "B<comp.>I<N>B<.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/comp.9:30
msgid ""
"Normal output. True when B<in1> E<gt> B<in0> (see parameter B<hyst> for "
"details)"
msgstr ""

#. type: TP
#: man/man9/comp.9:30
#, no-wrap
msgid "B<comp.>I<N>B<.equal> bit out "
msgstr ""

#. type: Plain text
#: man/man9/comp.9:33
msgid ""
"Match output.  True when difference between B<in1> and B<in0> is less than "
"B<hyst>/2"
msgstr ""

#. type: TP
#: man/man9/comp.9:34
#, no-wrap
msgid "B<comp.>I<N>B<.hyst> float rw (default: I<0.0>)"
msgstr ""

#. type: Plain text
#: man/man9/comp.9:37
msgid "Hysteresis of the comparator (default 0.0)"
msgstr ""

#. type: Plain text
#: man/man9/comp.9:43
msgid ""
"With zero hysteresis, the output is true when B<in1> E<gt> B<in0>.  With "
"nonzero hysteresis, the output switches on and off at two different values, "
"separated by distance B<hyst> around the point where B<in1> = B<in0>.  Keep "
"in mind that floating point calculations are never absolute and it is wise "
"to always set B<hyst> if you intend to use equal"
msgstr ""

#. type: TH
#: man/man9/constant.9:9
#, no-wrap
msgid "CONSTANT"
msgstr ""

#. type: Plain text
#: man/man9/constant.9:13
msgid "constant - Use a parameter to set the value of a pin"
msgstr ""

#. type: Plain text
#: man/man9/constant.9:16
msgid "B<loadrt constant [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/constant.9:17
#, no-wrap
msgid "B<constant.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/constant.9:21
#, no-wrap
msgid "B<constant.>I<N>B<.out> float out "
msgstr ""

#. type: TP
#: man/man9/constant.9:24
#, no-wrap
msgid "B<constant.>I<N>B<.value> float rw "
msgstr ""

#. type: TH
#: man/man9/conv_bit_float.9:9
#, no-wrap
msgid "CONV_BIT_FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/conv_bit_float.9:13
msgid "conv_bit_float - Convert a value from bit to float"
msgstr ""

#. type: Plain text
#: man/man9/conv_bit_float.9:16
msgid ""
"B<loadrt conv_bit_float [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/conv_bit_float.9:17
#, no-wrap
msgid "B<conv-bit-float.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: Plain text
#: man/man9/conv_bit_float.9:20 man/man9/conv_bit_s32.9:20
#: man/man9/conv_bit_u32.9:20 man/man9/conv_float_s32.9:20
#: man/man9/conv_float_u32.9:20 man/man9/conv_s32_bit.9:20
#: man/man9/conv_s32_float.9:20 man/man9/conv_s32_u32.9:20
#: man/man9/conv_u32_bit.9:20 man/man9/conv_u32_float.9:20
#: man/man9/conv_u32_s32.9:20
msgid "Update 'out' based on 'in'"
msgstr ""

#. type: TP
#: man/man9/conv_bit_float.9:21
#, no-wrap
msgid "B<conv-bit-float.>I<N>B<.in> bit in "
msgstr ""

#. type: TP
#: man/man9/conv_bit_float.9:25
#, no-wrap
msgid "B<conv-bit-float.>I<N>B<.out> float out "
msgstr ""

#. type: TH
#: man/man9/conv_bit_s32.9:9
#, no-wrap
msgid "CONV_BIT_S32"
msgstr ""

#. type: Plain text
#: man/man9/conv_bit_s32.9:13
msgid "conv_bit_s32 - Convert a value from bit to s32"
msgstr ""

#. type: Plain text
#: man/man9/conv_bit_s32.9:16
msgid ""
"B<loadrt conv_bit_s32 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/conv_bit_s32.9:17
#, no-wrap
msgid "B<conv-bit-s32.>I<N>"
msgstr ""

#. type: TP
#: man/man9/conv_bit_s32.9:21
#, no-wrap
msgid "B<conv-bit-s32.>I<N>B<.in> bit in "
msgstr ""

#. type: TP
#: man/man9/conv_bit_s32.9:25
#, no-wrap
msgid "B<conv-bit-s32.>I<N>B<.out> s32 out "
msgstr ""

#. type: TH
#: man/man9/conv_bit_u32.9:9
#, no-wrap
msgid "CONV_BIT_U32"
msgstr ""

#. type: Plain text
#: man/man9/conv_bit_u32.9:13
msgid "conv_bit_u32 - Convert a value from bit to u32"
msgstr ""

#. type: Plain text
#: man/man9/conv_bit_u32.9:16
msgid ""
"B<loadrt conv_bit_u32 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/conv_bit_u32.9:17
#, no-wrap
msgid "B<conv-bit-u32.>I<N>"
msgstr ""

#. type: TP
#: man/man9/conv_bit_u32.9:21
#, no-wrap
msgid "B<conv-bit-u32.>I<N>B<.in> bit in "
msgstr ""

#. type: TP
#: man/man9/conv_bit_u32.9:25
#, no-wrap
msgid "B<conv-bit-u32.>I<N>B<.out> u32 out "
msgstr ""

#. type: TH
#: man/man9/conv_float_s32.9:9
#, no-wrap
msgid "CONV_FLOAT_S32"
msgstr ""

#. type: Plain text
#: man/man9/conv_float_s32.9:13
msgid "conv_float_s32 - Convert a value from float to s32"
msgstr ""

#. type: Plain text
#: man/man9/conv_float_s32.9:16
msgid ""
"B<loadrt conv_float_s32 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/conv_float_s32.9:17
#, no-wrap
msgid "B<conv-float-s32.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/conv_float_s32.9:21
#, no-wrap
msgid "B<conv-float-s32.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/conv_float_s32.9:25
#, no-wrap
msgid "B<conv-float-s32.>I<N>B<.out> s32 out "
msgstr ""

#. type: TP
#: man/man9/conv_float_s32.9:29
#, no-wrap
msgid "B<conv-float-s32.>I<N>B<.out-of-range> bit out "
msgstr ""

#. type: Plain text
#: man/man9/conv_float_s32.9:32 man/man9/conv_u32_s32.9:32
msgid "TRUE when 'in' is not in the range of s32"
msgstr ""

#. type: TP
#: man/man9/conv_float_s32.9:33
#, no-wrap
msgid "B<conv-float-s32.>I<N>B<.clamp> bit rw "
msgstr ""

#. type: Plain text
#: man/man9/conv_float_s32.9:36 man/man9/conv_u32_s32.9:36
msgid ""
"If TRUE, then clamp to the range of s32.  If FALSE, then allow the value to "
"\"wrap around\"."
msgstr ""

#. type: TH
#: man/man9/conv_float_u32.9:9
#, no-wrap
msgid "CONV_FLOAT_U32"
msgstr ""

#. type: Plain text
#: man/man9/conv_float_u32.9:13
msgid "conv_float_u32 - Convert a value from float to u32"
msgstr ""

#. type: Plain text
#: man/man9/conv_float_u32.9:16
msgid ""
"B<loadrt conv_float_u32 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/conv_float_u32.9:17
#, no-wrap
msgid "B<conv-float-u32.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/conv_float_u32.9:21
#, no-wrap
msgid "B<conv-float-u32.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/conv_float_u32.9:25
#, no-wrap
msgid "B<conv-float-u32.>I<N>B<.out> u32 out "
msgstr ""

#. type: TP
#: man/man9/conv_float_u32.9:29
#, no-wrap
msgid "B<conv-float-u32.>I<N>B<.out-of-range> bit out "
msgstr ""

#. type: Plain text
#: man/man9/conv_float_u32.9:32 man/man9/conv_s32_u32.9:32
msgid "TRUE when 'in' is not in the range of u32"
msgstr ""

#. type: TP
#: man/man9/conv_float_u32.9:33
#, no-wrap
msgid "B<conv-float-u32.>I<N>B<.clamp> bit rw "
msgstr ""

#. type: Plain text
#: man/man9/conv_float_u32.9:36 man/man9/conv_s32_u32.9:36
msgid ""
"If TRUE, then clamp to the range of u32.  If FALSE, then allow the value to "
"\"wrap around\"."
msgstr ""

#. type: TH
#: man/man9/conv_s32_bit.9:9
#, no-wrap
msgid "CONV_S32_BIT"
msgstr ""

#. type: Plain text
#: man/man9/conv_s32_bit.9:13
msgid "conv_s32_bit - Convert a value from s32 to bit"
msgstr ""

#. type: Plain text
#: man/man9/conv_s32_bit.9:16
msgid ""
"B<loadrt conv_s32_bit [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/conv_s32_bit.9:17
#, no-wrap
msgid "B<conv-s32-bit.>I<N>"
msgstr ""

#. type: TP
#: man/man9/conv_s32_bit.9:21
#, no-wrap
msgid "B<conv-s32-bit.>I<N>B<.in> s32 in "
msgstr ""

#. type: TP
#: man/man9/conv_s32_bit.9:25
#, no-wrap
msgid "B<conv-s32-bit.>I<N>B<.out> bit out "
msgstr ""

#. type: TP
#: man/man9/conv_s32_bit.9:29
#, no-wrap
msgid "B<conv-s32-bit.>I<N>B<.out-of-range> bit out "
msgstr ""

#. type: Plain text
#: man/man9/conv_s32_bit.9:32 man/man9/conv_u32_bit.9:32
msgid "TRUE when 'in' is not in the range of bit"
msgstr ""

#. type: TP
#: man/man9/conv_s32_bit.9:33
#, no-wrap
msgid "B<conv-s32-bit.>I<N>B<.clamp> bit rw "
msgstr ""

#. type: Plain text
#: man/man9/conv_s32_bit.9:36 man/man9/conv_u32_bit.9:36
msgid ""
"If TRUE, then clamp to the range of bit.  If FALSE, then allow the value to "
"\"wrap around\"."
msgstr ""

#. type: TH
#: man/man9/conv_s32_float.9:9
#, no-wrap
msgid "CONV_S32_FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/conv_s32_float.9:13
msgid "conv_s32_float - Convert a value from s32 to float"
msgstr ""

#. type: Plain text
#: man/man9/conv_s32_float.9:16
msgid ""
"B<loadrt conv_s32_float [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/conv_s32_float.9:17
#, no-wrap
msgid "B<conv-s32-float.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/conv_s32_float.9:21
#, no-wrap
msgid "B<conv-s32-float.>I<N>B<.in> s32 in "
msgstr ""

#. type: TP
#: man/man9/conv_s32_float.9:25
#, no-wrap
msgid "B<conv-s32-float.>I<N>B<.out> float out "
msgstr ""

#. type: TH
#: man/man9/conv_s32_u32.9:9
#, no-wrap
msgid "CONV_S32_U32"
msgstr ""

#. type: Plain text
#: man/man9/conv_s32_u32.9:13
msgid "conv_s32_u32 - Convert a value from s32 to u32"
msgstr ""

#. type: Plain text
#: man/man9/conv_s32_u32.9:16
msgid ""
"B<loadrt conv_s32_u32 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/conv_s32_u32.9:17
#, no-wrap
msgid "B<conv-s32-u32.>I<N>"
msgstr ""

#. type: TP
#: man/man9/conv_s32_u32.9:21
#, no-wrap
msgid "B<conv-s32-u32.>I<N>B<.in> s32 in "
msgstr ""

#. type: TP
#: man/man9/conv_s32_u32.9:25
#, no-wrap
msgid "B<conv-s32-u32.>I<N>B<.out> u32 out "
msgstr ""

#. type: TP
#: man/man9/conv_s32_u32.9:29
#, no-wrap
msgid "B<conv-s32-u32.>I<N>B<.out-of-range> bit out "
msgstr ""

#. type: TP
#: man/man9/conv_s32_u32.9:33
#, no-wrap
msgid "B<conv-s32-u32.>I<N>B<.clamp> bit rw "
msgstr ""

#. type: TH
#: man/man9/conv_u32_bit.9:9
#, no-wrap
msgid "CONV_U32_BIT"
msgstr ""

#. type: Plain text
#: man/man9/conv_u32_bit.9:13
msgid "conv_u32_bit - Convert a value from u32 to bit"
msgstr ""

#. type: Plain text
#: man/man9/conv_u32_bit.9:16
msgid ""
"B<loadrt conv_u32_bit [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/conv_u32_bit.9:17
#, no-wrap
msgid "B<conv-u32-bit.>I<N>"
msgstr ""

#. type: TP
#: man/man9/conv_u32_bit.9:21
#, no-wrap
msgid "B<conv-u32-bit.>I<N>B<.in> u32 in "
msgstr ""

#. type: TP
#: man/man9/conv_u32_bit.9:25
#, no-wrap
msgid "B<conv-u32-bit.>I<N>B<.out> bit out "
msgstr ""

#. type: TP
#: man/man9/conv_u32_bit.9:29
#, no-wrap
msgid "B<conv-u32-bit.>I<N>B<.out-of-range> bit out "
msgstr ""

#. type: TP
#: man/man9/conv_u32_bit.9:33
#, no-wrap
msgid "B<conv-u32-bit.>I<N>B<.clamp> bit rw "
msgstr ""

#. type: TH
#: man/man9/conv_u32_float.9:9
#, no-wrap
msgid "CONV_U32_FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/conv_u32_float.9:13
msgid "conv_u32_float - Convert a value from u32 to float"
msgstr ""

#. type: Plain text
#: man/man9/conv_u32_float.9:16
msgid ""
"B<loadrt conv_u32_float [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/conv_u32_float.9:17
#, no-wrap
msgid "B<conv-u32-float.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/conv_u32_float.9:21
#, no-wrap
msgid "B<conv-u32-float.>I<N>B<.in> u32 in "
msgstr ""

#. type: TP
#: man/man9/conv_u32_float.9:25
#, no-wrap
msgid "B<conv-u32-float.>I<N>B<.out> float out "
msgstr ""

#. type: TH
#: man/man9/conv_u32_s32.9:9
#, no-wrap
msgid "CONV_U32_S32"
msgstr ""

#. type: Plain text
#: man/man9/conv_u32_s32.9:13
msgid "conv_u32_s32 - Convert a value from u32 to s32"
msgstr ""

#. type: Plain text
#: man/man9/conv_u32_s32.9:16
msgid ""
"B<loadrt conv_u32_s32 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/conv_u32_s32.9:17
#, no-wrap
msgid "B<conv-u32-s32.>I<N>"
msgstr ""

#. type: TP
#: man/man9/conv_u32_s32.9:21
#, no-wrap
msgid "B<conv-u32-s32.>I<N>B<.in> u32 in "
msgstr ""

#. type: TP
#: man/man9/conv_u32_s32.9:25
#, no-wrap
msgid "B<conv-u32-s32.>I<N>B<.out> s32 out "
msgstr ""

#. type: TP
#: man/man9/conv_u32_s32.9:29
#, no-wrap
msgid "B<conv-u32-s32.>I<N>B<.out-of-range> bit out "
msgstr ""

#. type: TP
#: man/man9/conv_u32_s32.9:33
#, no-wrap
msgid "B<conv-u32-s32.>I<N>B<.clamp> bit rw "
msgstr ""

#. type: TH
#: man/man9/corexy_by_hal.9:9
#, no-wrap
msgid "COREXY_BY_HAL"
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:13
msgid "corexy_by_hal - CoreXY kinematics"
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:16
msgid ""
"B<loadrt corexy_by_hal [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:22
msgid ""
"Implement B<CoreXY> forward and inverse transformations B<in HAL>.  This "
"component provides an alternative method for implementing B<CoreXY> "
"kinematics."
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:24
msgid "In the INI file, use:"
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:26
msgid "B<[KINS]KINEMATICS=trivkins coordinates=xyz kinstype=both>"
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:34
msgid ""
"This component accepts two joint (B<j0,j1>) motor position commands for a "
"trivkins coordinates=xyz configuration and computes equivalent B<CoreXY> "
"motor commands for two motors identified as B<alpha,beta>.  Similarly, the "
"component accepts feedback values for the B<alpha,beta> motor controllers "
"and converts to equivalent joint (B<j0,j1>) motor position feedback values."
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:39
msgid ""
"1) Using B<trivkins> with this module allows home switches to trigger "
"according to the B<Cartesian x,y> positions"
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:44
msgid ""
"2) Joint pin names are based on B<coordinates=xyz> and the corresponding "
"joint number assignments used by B<trivkins> so B<j0==x, j1==y> (man "
"trivkins for more information)"
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:49
msgid ""
"3) B<CoreXY> kinematics can also be implemented using the kinematics module "
"named B<corexykins> with home switches triggered by the B< j0,j1 motor> "
"positions.  (man kins for more information)"
msgstr ""

#. type: TP
#: man/man9/corexy_by_hal.9:51
#, no-wrap
msgid "B<corexy-by-hal.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/corexy_by_hal.9:55
#, no-wrap
msgid "B<corexy-by-hal.>I<N>B<.alpha-fb> float in "
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:58
msgid "typ: feedback from alpha motor controller"
msgstr ""

#. type: TP
#: man/man9/corexy_by_hal.9:58
#, no-wrap
msgid "B<corexy-by-hal.>I<N>B<.beta-fb> float in "
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:61
msgid "typ: feedback from beta motor controller"
msgstr ""

#. type: TP
#: man/man9/corexy_by_hal.9:61
#, no-wrap
msgid "B<corexy-by-hal.>I<N>B<.j0-motor-pos-cmd> float in "
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:64
msgid "typ: from joint.0.motor-pos-cmd"
msgstr ""

#. type: TP
#: man/man9/corexy_by_hal.9:64
#, no-wrap
msgid "B<corexy-by-hal.>I<N>B<.j1-motor-pos-cmd> float in "
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:67
msgid "typ: from joint.1.motor-pos-cmd"
msgstr ""

#. type: TP
#: man/man9/corexy_by_hal.9:67
#, no-wrap
msgid "B<corexy-by-hal.>I<N>B<.j0-motor-pos-fb> float out "
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:70
msgid "typ: to joint.0.motor-pos-fb"
msgstr ""

#. type: TP
#: man/man9/corexy_by_hal.9:70
#, no-wrap
msgid "B<corexy-by-hal.>I<N>B<.j1-motor-pos-fb> float out "
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:73
msgid "typ: to joint.1.motor-pos-fb"
msgstr ""

#. type: TP
#: man/man9/corexy_by_hal.9:73
#, no-wrap
msgid "B<corexy-by-hal.>I<N>B<.alpha-cmd> float out "
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:76
msgid "typ: command to alpha motor"
msgstr ""

#. type: TP
#: man/man9/corexy_by_hal.9:76
#, no-wrap
msgid "B<corexy-by-hal.>I<N>B<.beta-cmd> float out "
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:79
msgid "typ: command to beta ts motor"
msgstr ""

#. type: Plain text
#: man/man9/corexy_by_hal.9:82
msgid "Dewey Garrett based on forum post from nbremond"
msgstr ""

#. type: TH
#: man/man9/counter.9:1
#, no-wrap
msgid "COUNTER"
msgstr ""

#. type: TH
#: man/man9/counter.9:1
#, no-wrap
msgid "2007-01-19"
msgstr ""

#. type: Plain text
#: man/man9/counter.9:6
msgid "counter - counts input pulses B<(DEPRECATED)>"
msgstr ""

#. type: Plain text
#: man/man9/counter.9:9
msgid "B<loadrt counter [num_chan=>I<N>B<]>"
msgstr ""

#. type: Plain text
#: man/man9/counter.9:13
msgid ""
"B<counter> is a deprecated HAL component and will be removed in a future "
"release.  Use the B<encoder> component with encoder.X.counter-mode set to "
"TRUE."
msgstr ""

#. type: Plain text
#: man/man9/counter.9:22
msgid ""
"B<counter> is a HAL component that provides software- based counting that is "
"useful for spindle position sensing and maybe other things.  Instead of "
"using a real encoder that outputs quadrature, some lathes have a sensor that "
"generates a simple pulse stream as the spindle turns and an index pulse once "
"per revolution.  This component simply counts up when a \"count\" pulse "
"(phase-A)  is received, and if reset is enabled, resets when the \"index"
"\" (phase-Z) pulse is received."
msgstr ""

#. type: Plain text
#: man/man9/counter.9:25
msgid ""
"This is of course only useful for a unidirectional spindle, as it is not "
"possible to sense the direction of rotation."
msgstr ""

#. type: Plain text
#: man/man9/counter.9:28
msgid ""
"B<counter> conforms to the \"canonical encoder\" interface described in the "
"HAL manual."
msgstr ""

#. type: TP
#: man/man9/counter.9:29
#, no-wrap
msgid "B<counter.capture-position> (uses floating-point)"
msgstr ""

#. type: Plain text
#: man/man9/counter.9:32
msgid ""
"Updates the counts, position and velocity outputs based on internal counters."
msgstr ""

#. type: TP
#: man/man9/counter.9:32
#, no-wrap
msgid "B<counter.update-counters>"
msgstr ""

#. type: Plain text
#: man/man9/counter.9:35
msgid "Samples the phase-A and phase-Z inputs and updates internal counters."
msgstr ""

#. type: TP
#: man/man9/counter.9:38
#, no-wrap
msgid "B<counter.>I<N>B<.phase-A> bit in"
msgstr ""

#. type: Plain text
#: man/man9/counter.9:42
msgid ""
"The primary input signal.  The internal counter is incremented on each "
"rising edge."
msgstr ""

#. type: TP
#: man/man9/counter.9:42
#, no-wrap
msgid "B<counter.>I<N>B<.phase-Z> bit in"
msgstr ""

#. type: Plain text
#: man/man9/counter.9:47
msgid ""
"The index input signal.  When the B<index-enable> pin is TRUE and a rising "
"edge on B<phase-Z> is seen, B<index-enable> is set to FALSE and the internal "
"counter is reset to zero."
msgstr ""

#. type: TP
#: man/man9/counter.9:47
#, no-wrap
msgid "B<counter.>I<N>B<.index-enable> bit io"
msgstr ""

#. type: TP
#: man/man9/counter.9:51
#, no-wrap
msgid "B<counter.>I<N>B<.reset> bit io"
msgstr ""

#. type: TP
#: man/man9/counter.9:55
#, no-wrap
msgid "B<counter.>I<N>B<.counts> signed out"
msgstr ""

#. type: TP
#: man/man9/counter.9:59
#, no-wrap
msgid "B<counter.>I<N>B<.position> float out"
msgstr ""

#. type: TP
#: man/man9/counter.9:63
#, no-wrap
msgid "B<counter.>I<N>B<.velocity> float out"
msgstr ""

#. type: Plain text
#: man/man9/counter.9:66
msgid ""
"These pins function according to the canonical digital encoder interface."
msgstr ""

#. type: TP
#: man/man9/counter.9:66
#, no-wrap
msgid "B<counter.>I<N>B<.position-scale> float rw"
msgstr ""

#. type: Plain text
#: man/man9/counter.9:69
msgid ""
"This parameter functions according to the canonical digital encoder "
"interface."
msgstr ""

#. type: TP
#: man/man9/counter.9:69
#, no-wrap
msgid "B<counter.>I<N>B<.rawcounts> signed ro"
msgstr ""

#. type: Plain text
#: man/man9/counter.9:73
msgid ""
"The internal counts value, updated from B<update-counters> and reflected in "
"the output pins at the next call to B<capture-position>."
msgstr ""

#. type: Plain text
#: man/man9/counter.9:74
msgid "B<encoder(9)>. in the LinuxCNC documentation."
msgstr ""

#. type: TH
#: man/man9/dbounce.9:9
#, no-wrap
msgid "DBOUNCE"
msgstr ""

#. type: Plain text
#: man/man9/dbounce.9:13
msgid "dbounce - alternative debounce component"
msgstr ""

#. type: Plain text
#: man/man9/dbounce.9:16
msgid "This component is similar to the B<debounce> component"
msgstr ""

#. type: Plain text
#: man/man9/dbounce.9:18
msgid "(man B<debounce>) but uses settable delay pins for each instance"
msgstr ""

#. type: Plain text
#: man/man9/dbounce.9:20
msgid "and supports B<count>= or B<names>= parameters"
msgstr ""

#. type: Plain text
#: man/man9/dbounce.9:22
msgid "(groups are not used)"
msgstr ""

#. type: TP
#: man/man9/dbounce.9:23
#, no-wrap
msgid "B<dbounce.>I<N>"
msgstr ""

#. type: TP
#: man/man9/dbounce.9:27
#, no-wrap
msgid "B<dbounce.>I<N>B<.in> bit in "
msgstr ""

#. type: TP
#: man/man9/dbounce.9:31
#, no-wrap
msgid "B<dbounce.>I<N>B<.out> bit out "
msgstr ""

#. type: TP
#: man/man9/dbounce.9:35
#, no-wrap
msgid "B<dbounce.>I<N>B<.delay> u32 in (default: I<5>)"
msgstr ""

#. type: Plain text
#: man/man9/dbounce.9:40 man/man9/eoffset_per_angle.9:136
#: man/man9/histobins.9:144 man/man9/latencybins.9:104
#: man/man9/sim_home_switch.9:51 man/man9/userkins.9:82
#: man/man9/xhc_hb04_util.9:136
msgid "Dewey Garrett"
msgstr ""

#. type: TH
#: man/man9/ddt.9:9
#, no-wrap
msgid "DDT"
msgstr ""

#. type: Plain text
#: man/man9/ddt.9:13
msgid "ddt - Compute the derivative of the input function"
msgstr ""

#. type: Plain text
#: man/man9/ddt.9:16
msgid "B<loadrt ddt [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/ddt.9:22
msgid ""
"For every function call from the real time thread, calculate the difference "
"between the old and current input value divided by the timer elapsed since "
"the last call."
msgstr ""

#. type: TP
#: man/man9/ddt.9:24
#, no-wrap
msgid "B<ddt.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/ddt.9:28
#, no-wrap
msgid "B<ddt.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/ddt.9:32
#, no-wrap
msgid "B<ddt.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/ddt.9:42
msgid ""
"As this only work on two consecutive input values, it will only work well if "
"the input change every function call, and not work so well if the rate of "
"change is very low and the input change do not happen every time the real "
"time function is called."
msgstr ""

#. type: TH
#: man/man9/deadzone.9:9
#, no-wrap
msgid "DEADZONE"
msgstr ""

#. type: Plain text
#: man/man9/deadzone.9:13
msgid "deadzone - Return the center if within the threshold"
msgstr ""

#. type: Plain text
#: man/man9/deadzone.9:16
msgid "B<loadrt deadzone [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/deadzone.9:17
#, no-wrap
msgid "B<deadzone.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: Plain text
#: man/man9/deadzone.9:20
msgid "Update B<out> based on B<in> and the parameters."
msgstr ""

#. type: TP
#: man/man9/deadzone.9:21
#, no-wrap
msgid "B<deadzone.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/deadzone.9:25
#, no-wrap
msgid "B<deadzone.>I<N>B<.out> float out "
msgstr ""

#. type: TP
#: man/man9/deadzone.9:28
#, no-wrap
msgid "B<deadzone.>I<N>B<.center> float rw (default: I<0.0>)"
msgstr ""

#. type: Plain text
#: man/man9/deadzone.9:31
msgid "The center of the dead zone"
msgstr ""

#. type: TP
#: man/man9/deadzone.9:31
#, no-wrap
msgid "B<deadzone.>I<N>B<.threshold> float rw (default: I<1.0>)"
msgstr ""

#. type: Plain text
#: man/man9/deadzone.9:34
msgid "The dead zone is B<center> \\(+- (B<threshold>/2)"
msgstr ""

#. type: TH
#: man/man9/debounce.9:1
#, no-wrap
msgid "DEBOUNCE"
msgstr ""

#. type: TH
#: man/man9/debounce.9:1 man/man9/encoder_ratio.9:1 man/man9/pid.9:1
#: man/man9/pwmgen.9:1 man/man9/siggen.9:1 man/man9/sim_encoder.9:1
#: man/man9/stepgen.9:1 man/man9/supply.9:1 man/man9/threads.9:1
#: man/man9/weighted_sum.9:1
#, no-wrap
msgid "2007-01-16"
msgstr ""

#. type: Plain text
#: man/man9/debounce.9:6
msgid "debounce - filter noisy digital inputs"
msgstr ""

#. type: Plain text
#: man/man9/debounce.9:8
msgid "B<loadrt debounce cfg=>I<size[,size,...]>"
msgstr ""

#. type: Plain text
#: man/man9/debounce.9:13
msgid ""
"Creates debounce groups with the number of filters specified by (I<size>).  "
"Every filter in the same group has the same sample rate and delay. For "
"example cfg=2,3 creates two filter groups with 2 filters in the first group "
"and 3 filters in the second group."
msgstr ""

#. type: Plain text
#: man/man9/debounce.9:20
msgid ""
"An alternate component named B<dbounce> implements similar functionality "
"using conventional count= and names= parameters.  Delay settings are "
"implemented by a delay pin for each instance instead of using filter groups."
msgstr ""

#. type: Plain text
#: man/man9/debounce.9:31
msgid ""
"The debounce filter works by incrementing a counter whenever the input is "
"true, and decrementing the counter when it is false.  If the counter "
"decrements to zero, the output is set false and the counter ignores further "
"decrements.  If the counter increments up to a threshold, the output is set "
"true and the counter ignores further increments.  If the counter is between "
"zero and the threshold, the output retains its previous state.  The "
"threshold determines the amount of filtering: a threshold of 1 does no "
"filtering at all, and a threshold of N requires a signal to be present for N "
"samples before the output changes state."
msgstr ""

#. type: TP
#: man/man9/debounce.9:33
#, no-wrap
msgid "B<debounce.>I<G>"
msgstr ""

#. type: Plain text
#: man/man9/debounce.9:36
msgid "Sample all the input pins in group G and update the output pins."
msgstr ""

#. type: TP
#: man/man9/debounce.9:37
#, no-wrap
msgid "B<debounce.>I<G>B<.>I<F>B<.in> bit in"
msgstr ""

#. type: Plain text
#: man/man9/debounce.9:40
msgid "The F'th input pin in group G."
msgstr ""

#. type: TP
#: man/man9/debounce.9:40
#, no-wrap
msgid "B<debounce.>I<G>B<.>I<F>B<.out> bit out"
msgstr ""

#. type: Plain text
#: man/man9/debounce.9:44
msgid ""
"The F'th output pin in group G.  Reflects the last \"stable\" input seen on "
"the corresponding input pin."
msgstr ""

#. type: TP
#: man/man9/debounce.9:44
#, no-wrap
msgid "B<debounce.>I<G>B<.delay> signed rw"
msgstr ""

#. type: Plain text
#: man/man9/debounce.9:46
msgid "Sets the amount of filtering for all pins in group G."
msgstr ""

#. type: TH
#: man/man9/demux.9:9
#, no-wrap
msgid "DEMUX"
msgstr ""

#. type: Plain text
#: man/man9/demux.9:13
msgid ""
"demux - Select one of several output pins by integer and/or or individual "
"bits."
msgstr ""

#. type: Plain text
#: man/man9/demux.9:16
msgid ""
"B<loadrt demux [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]] "
"[personality=>I<P,P,...>B<]>"
msgstr ""

#. type: Plain text
#: man/man9/demux.9:27
msgid ""
"This component creates a number of output bits defined by the \"personality"
"\" command-line parameter. One of these bits will be set based on "
"interpreting the bit-inputs as a binary number and then adding on the "
"integer input. Most uses will use only one or the other, but it is possible "
"to use the bits as a \"\"shift\"\" if required.  An optional operating mode "
"is enabled by setting the \"bargraph\" parameter to true, in this case all "
"bits up to the selected bit will be set, as might be required for an LED "
"bargraph display"
msgstr ""

#. type: TP
#: man/man9/demux.9:28
#, no-wrap
msgid "B<demux.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/demux.9:32
#, no-wrap
msgid "B<demux.>I<N>B<.sel-bit->I<MM> bit in (MM=00..04) "
msgstr ""

#. type: Plain text
#: man/man9/demux.9:35
msgid "Binary-number bit selectors"
msgstr ""

#. type: TP
#: man/man9/demux.9:35
#, no-wrap
msgid "B<demux.>I<N>B<.sel-u32> u32 in "
msgstr ""

#. type: Plain text
#: man/man9/demux.9:38
msgid "Integer selection input"
msgstr ""

#. type: TP
#: man/man9/demux.9:38
#, no-wrap
msgid "B<demux.>I<N>B<.out->I<MM> bit out (MM=00..personality) "
msgstr ""

#. type: Plain text
#: man/man9/demux.9:41
msgid "The set of output bits"
msgstr ""

#. type: TP
#: man/man9/demux.9:42
#, no-wrap
msgid "B<demux.>I<N>B<.bargraph> bit rw (default: I<0>)"
msgstr ""

#. type: TH
#: man/man9/differential.9:9
#, no-wrap
msgid "DIFFERENTIAL"
msgstr ""

#. type: Plain text
#: man/man9/differential.9:13
msgid "differential - kinematics for a differential transmission"
msgstr ""

#. type: Plain text
#: man/man9/differential.9:16
msgid ""
"B<loadrt differential [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/differential.9:17
#, no-wrap
msgid "B<differential.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/differential.9:21
#, no-wrap
msgid "B<differential.>I<N>B<.roll-cmd> float in "
msgstr ""

#. type: Plain text
#: man/man9/differential.9:24
msgid "position command for roll (in degrees)"
msgstr ""

#. type: TP
#: man/man9/differential.9:24
#, no-wrap
msgid "B<differential.>I<N>B<.pitch-cmd> float in "
msgstr ""

#. type: Plain text
#: man/man9/differential.9:27
msgid "position command for pitch (in degrees)"
msgstr ""

#. type: TP
#: man/man9/differential.9:27
#, no-wrap
msgid "B<differential.>I<N>B<.roll-fb> float out "
msgstr ""

#. type: Plain text
#: man/man9/differential.9:30
msgid "position feedback for roll (in degrees)"
msgstr ""

#. type: TP
#: man/man9/differential.9:30
#, no-wrap
msgid "B<differential.>I<N>B<.pitch-fb> float out "
msgstr ""

#. type: Plain text
#: man/man9/differential.9:33
msgid "position feedback for pitch (in degrees)"
msgstr ""

#. type: TP
#: man/man9/differential.9:33
#, no-wrap
msgid "B<differential.>I<N>B<.motor0-cmd> float out "
msgstr ""

#. type: Plain text
#: man/man9/differential.9:36
msgid "position command to motor0 (based on roll & pitch inputs)"
msgstr ""

#. type: TP
#: man/man9/differential.9:36
#, no-wrap
msgid "B<differential.>I<N>B<.motor1-cmd> float out "
msgstr ""

#. type: Plain text
#: man/man9/differential.9:39
msgid "position command to motor1 (based on roll & pitch inputs)"
msgstr ""

#. type: TP
#: man/man9/differential.9:39
#, no-wrap
msgid "B<differential.>I<N>B<.motor0-fb> float in "
msgstr ""

#. type: Plain text
#: man/man9/differential.9:42
msgid "position feedback from motor0"
msgstr ""

#. type: TP
#: man/man9/differential.9:42
#, no-wrap
msgid "B<differential.>I<N>B<.motor1-fb> float in "
msgstr ""

#. type: Plain text
#: man/man9/differential.9:45
msgid "position feedback from motor1"
msgstr ""

#. type: TH
#: man/man9/edge.9:9
#, no-wrap
msgid "EDGE"
msgstr ""

#. type: Plain text
#: man/man9/edge.9:13
msgid "edge - Edge detector"
msgstr ""

#. type: Plain text
#: man/man9/edge.9:16
msgid "B<loadrt edge [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/edge.9:17
#, no-wrap
msgid "B<edge.>I<N>"
msgstr ""

#. type: Plain text
#: man/man9/edge.9:20 man/man9/oneshot.9:28
msgid "Produce output pulses from input edges"
msgstr ""

#. type: TP
#: man/man9/edge.9:21
#, no-wrap
msgid "B<edge.>I<N>B<.in> bit in "
msgstr ""

#. type: TP
#: man/man9/edge.9:25
#, no-wrap
msgid "B<edge.>I<N>B<.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/edge.9:28
msgid "Goes high when the desired edge is seen on 'in'"
msgstr ""

#. type: TP
#: man/man9/edge.9:28
#, no-wrap
msgid "B<edge.>I<N>B<.out-invert> bit out "
msgstr ""

#. type: Plain text
#: man/man9/edge.9:31
msgid "Goes low when the desired edge is seen on 'in'"
msgstr ""

#. type: TP
#: man/man9/edge.9:32
#, no-wrap
msgid "B<edge.>I<N>B<.both> bit rw (default: I<FALSE>)"
msgstr ""

#. type: Plain text
#: man/man9/edge.9:35
msgid ""
"If TRUE, selects both edges.  Otherwise, selects one edge according to in-"
"edge"
msgstr ""

#. type: TP
#: man/man9/edge.9:35
#, no-wrap
msgid "B<edge.>I<N>B<.in-edge> bit rw (default: I<TRUE>)"
msgstr ""

#. type: Plain text
#: man/man9/edge.9:38
msgid ""
"If both is FALSE, selects the one desired edge: TRUE means falling, FALSE "
"means rising"
msgstr ""

#. type: TP
#: man/man9/edge.9:38
#, no-wrap
msgid "B<edge.>I<N>B<.out-width-ns> s32 rw (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/edge.9:41
msgid "Time in nanoseconds of the output pulse"
msgstr ""

#. type: TP
#: man/man9/edge.9:41
#, no-wrap
msgid "B<edge.>I<N>B<.time-left-ns> s32 r "
msgstr ""

#. type: Plain text
#: man/man9/edge.9:44
msgid "Time left in this output pulse"
msgstr ""

#. type: TP
#: man/man9/edge.9:44
#, no-wrap
msgid "B<edge.>I<N>B<.last-in> bit r "
msgstr ""

#. type: Plain text
#: man/man9/edge.9:47
msgid "Previous input value"
msgstr ""

#. type: TH
#: man/man9/encoder.9:1
#, no-wrap
msgid "ENCODER"
msgstr ""

#. type: TH
#: man/man9/encoder.9:1
#, no-wrap
msgid "2009-04-15"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:5
msgid "encoder - software counting of quadrature encoder signals"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:7
msgid ""
"B<loadrt encoder [num_chan=>I<num>B< | names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:16
msgid ""
"B<encoder> is used to measure position by counting the pulses generated by a "
"quadrature encoder.  As a software-based implementation it is much less "
"expensive than hardware, but has a limited maximum count rate.  The limit is "
"in the range of 10 kHz to 50 kHz, depending on the computer speed and other "
"factors.  If better performance is needed, a hardware encoder counter is a "
"better choice.  Some hardware-based systems can count at MHz rates."
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:21
msgid ""
"B<encoder> supports a maximum of eight channels.  The number of channels "
"actually loaded is set by the B<num_chan> argument when the module is "
"loaded.  Alternatively, specify names= and unique names separated by commas."
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:25
msgid ""
"The B<num_chan=> and B<names=> specifiers are mutually exclusive.  If "
"neither B<num_chan=> nor B<names=> are specified, or if B<num_chan=0> is "
"specified, the default value is three."
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:31
msgid ""
"B<encoder> has a one-phase, unidirectional mode called I<counter>.  In this "
"mode, the B<phase-B> input is ignored; the counts increase on each rising "
"edge of B<phase-A>.  This mode may be useful for counting a unidirectional "
"spindle with a single input line, though the noise-resistant characteristics "
"of quadrature are lost."
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:36
msgid ""
"If used in counter-mode it is also possible to enable the missing-teeth "
"index mode, where a gap in the pulse train of one or more teeth is used as "
"in index marker. This system is used extensively for automotive crank "
"position sensors."
msgstr ""

#. type: TP
#: man/man9/encoder.9:38
#, no-wrap
msgid "B<encoder.update-counters> (no floating-point)"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:44
msgid ""
"Does the actual counting, by sampling the encoder signals and decoding the "
"quadrature waveforms.  Must be called as frequently as possible, preferably "
"twice as fast as the maximum desired count rate.  Operates on all channels "
"at once."
msgstr ""

#. type: TP
#: man/man9/encoder.9:44
#, no-wrap
msgid "B<encoder.capture-position> (uses floating point)"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:50
msgid ""
"Captures the raw counts from B<update-counters> and performs scaling and "
"other necessary conversion, handles counter rollover, etc.  Can (and should) "
"be called less frequently than B<update-counters>.  Operates on all channels "
"at once."
msgstr ""

#. type: SH
#: man/man9/encoder.9:51 man/man9/encoder_ratio.9:30 man/man9/pid.9:199
#: man/man9/siggen.9:27 man/man9/sim_encoder.9:42
#, no-wrap
msgid "NAMING"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:55
#, no-wrap
msgid ""
"The names for pins and parameters are prefixed as:\n"
"  B<encoder.N.> for N=0,1,...,num-1 when using B<num_chan=num>\n"
"  B<nameN.> for nameN=name1,name2,... when using B<names=name1,name2,...>\n"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:57
msgid "The B<encoder.N.> format is shown in the following descriptions."
msgstr ""

#. type: TP
#: man/man9/encoder.9:61
#, no-wrap
msgid "B<encoder.>I<N>B<.counter-mode> bit i/o"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:67
msgid ""
"Enables counter mode.  When true, the counter counts each rising edge of the "
"phase-A input, ignoring the value on phase-B.  This is useful for counting "
"the output of a single channel (non-quadrature) sensor.  When false (the "
"default), it counts in quadrature mode."
msgstr ""

#. type: TP
#: man/man9/encoder.9:67
#, no-wrap
msgid "B<encoder.>I<N>B<.counts> s32 out"
msgstr ""

#. type: TP
#: man/man9/encoder.9:70
#, no-wrap
msgid "B<encoder.>I<N>B<.index-enable> bit i/o"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:75
msgid ""
"When true, B<counts> and B<position> are reset to zero on the next rising "
"edge of B<Phase-Z>.  At the same time, B<index-enable> is reset to zero to "
"indicate that the rising edge has occurred."
msgstr ""

#. type: TP
#: man/man9/encoder.9:75
#, no-wrap
msgid "B<encoder.>I<N>B<.min-speed-estimate> float in (default: 1.0)"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:82
msgid ""
"Determine the minimum speed at which B<velocity> will be estimated as "
"nonzero and B<postition-interpolated> will be interpolated.  The units of "
"B<min-speed-estimate> are the same as the units of B<velocity>.  Setting "
"this parameter too low will cause it to take a long time for B<velocity> to "
"go to 0 after encoder pulses have stopped arriving."
msgstr ""

#. type: TP
#: man/man9/encoder.9:82
#, no-wrap
msgid "B<encoder.>I<N>B<.phase-A> bit in"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:85
msgid "Quadrature input for encoder channel I<N>."
msgstr ""

#. type: TP
#: man/man9/encoder.9:85
#, no-wrap
msgid "B<encoder.>I<N>B<.phase-B> bit in"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:88
msgid "Quadrature input."
msgstr ""

#. type: TP
#: man/man9/encoder.9:88
#, no-wrap
msgid "B<encoder.>I<N>B<.phase-Z> bit in"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:91
msgid "Index pulse input."
msgstr ""

#. type: TP
#: man/man9/encoder.9:91
#, no-wrap
msgid "B<encoder.>I<N>B<.position> float out"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:94
msgid "Position in scaled units (see B<position-scale>)"
msgstr ""

#. type: TP
#: man/man9/encoder.9:94
#, no-wrap
msgid "B<encoder.>I<N>B<.position-interpolated> float out"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:99
msgid ""
"Position in scaled units, interpolated between encoder counts.  Only valid "
"when velocity is approximately constant and above B<min-speed-estimate>.  Do "
"not use for position control."
msgstr ""

#. type: TP
#: man/man9/encoder.9:99
#, no-wrap
msgid "B<encoder.>I<N>B<.position-scale> float i/o"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:104
msgid ""
"Scale factor, in counts per length unit.  For example, if B<position-scale> "
"is 500, then 1000 counts of the encoder will be reported as a position of "
"2.0 units."
msgstr ""

#. type: TP
#: man/man9/encoder.9:104
#, no-wrap
msgid "B<encoder.>I<N>B<.missing-teeth> s32 in"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:109
msgid ""
"The number of teeth missing from the index gap. For example a 60 tooth gear "
"with two teeth shortened to form an index so that there are 58 pulses per "
"revolution would use a position-scale of 60 and a missing-teeth of 2."
msgstr ""

#. type: TP
#: man/man9/encoder.9:109
#, no-wrap
msgid "B<encoder.>I<N>B<.rawcounts> s32 out"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:114
msgid ""
"The raw count, as determined by B<update-counters>.  This value is updated "
"more frequently than B<counts> and B<position>.  It is also unaffected by "
"B<reset> or the index pulse."
msgstr ""

#. type: TP
#: man/man9/encoder.9:114
#, no-wrap
msgid "B<encoder.>I<N>B<.reset> bit in"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:117
msgid "When true, B<counts> and B<position> are reset to zero immediately."
msgstr ""

#. type: TP
#: man/man9/encoder.9:117
#, no-wrap
msgid "B<encoder.>I<N>B<.velocity> float out"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:123
msgid ""
"Velocity in scaled units per second.  B<encoder> uses an algorithm that "
"greatly reduces quantization noise as compared to simply differentiating the "
"B<position> output.  When the magnitude of the true velocity is below min-"
"speed-estimate, the velocity output is 0."
msgstr ""

#. type: TP
#: man/man9/encoder.9:123
#, no-wrap
msgid "B<encoder.>I<N>B<.velocity-rpm> float out"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:127
msgid ""
"Velocity in scaled units per minute. Simply B<encoder.>I<N>B<.velocity> "
"scaled by a factor of 60 for convenience."
msgstr ""

#. type: TP
#: man/man9/encoder.9:127
#, no-wrap
msgid "B<encoder.>I<N>B<.x4-mode> bit i/o"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:132
msgid ""
"Enables times-4 mode.  When true (the default), the counter counts each edge "
"of the quadrature waveform (four counts per full cycle).  When false, it "
"only counts once per full cycle.  In B<counter-mode>, this parameter is "
"ignored."
msgstr ""

#. type: TP
#: man/man9/encoder.9:132
#, no-wrap
msgid "B<encoder.>I<N>B<.latch-input> bit in"
msgstr ""

#. type: TP
#: man/man9/encoder.9:136
#, no-wrap
msgid "B<encoder.>I<N>B<.latch-falling> bit in (default: B<TRUE>)"
msgstr ""

#. type: TP
#: man/man9/encoder.9:140
#, no-wrap
msgid "B<encoder.>I<N>B<.latch-rising> bit in (default: B<TRUE>)"
msgstr ""

#. type: TP
#: man/man9/encoder.9:144
#, no-wrap
msgid "B<encoder.>I<N>B<.counts-latched> s32 out"
msgstr ""

#. type: TP
#: man/man9/encoder.9:148
#, no-wrap
msgid "B<encoder.>I<N>B<.position-latched> float out"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:153
msgid ""
"Update B<counts-latched> and B<position-latched> on the rising and/or "
"falling edges of B<latch-input> as indicated by B<latch-rising> and B<latch-"
"falling>."
msgstr ""

#. type: TP
#: man/man9/encoder.9:153
#, no-wrap
msgid "B<encoder.>I<N>B<.counter-mode> bit rw"
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:161
msgid ""
"Enables counter mode.  When true, the counter counts each rising edge of the "
"phase-A input, ignoring the value on phase-B.  This is useful for counting "
"the output of a single channel (non-quadrature) sensor.  When false (the "
"default), it counts in quadrature mode.  B<encoder.>I<N>B<.capture-position."
"tmax> s32 rw Maximum number of CPU cycles it took to execute this function."
msgstr ""

#. type: Plain text
#: man/man9/encoder.9:164
msgid "The encoder component has no HAL Parameters."
msgstr ""

#. type: TH
#: man/man9/encoder_ratio.9:1
#, no-wrap
msgid "ENCODER_RATIO"
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:5
msgid "encoder_ratio - an electronic gear to synchronize two axes"
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:7
msgid ""
"B<loadrt encoder_ratio [num_chan=>I<num>B< | names=>I<name1>B<[,>I<name2..."
">B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:13
msgid ""
"B<encoder_ratio> can be used to synchronize two axes (like an \"electronic "
"gear\").  It counts encoder pulses from both axes in software, and produces "
"an error value that can be used with a PID loop to make the slave encoder "
"track the master encoder with a specific ratio."
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:17
msgid ""
"This module supports up to eight axis pairs.  The number of pairs is set by "
"the module parameter B<num_chan>.  Alternatively, specify B<names=> and "
"unique names separated by commas."
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:20 man/man9/siggen.9:26 man/man9/sim_encoder.9:27
msgid ""
"The B<num_chan=> and B<names=> specifiers are mutually exclusive.  If "
"neither B<num_chan=> nor B<names=> are specified, the default value is one."
msgstr ""

#. type: TP
#: man/man9/encoder_ratio.9:23
#, no-wrap
msgid "B<encoder-ratio.sample>"
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:26
msgid ""
"Read all input pins.  Must be called at twice the maximum desired count rate."
msgstr ""

#. type: TP
#: man/man9/encoder_ratio.9:26
#, no-wrap
msgid "B<encoder-ratio.update (uses floating-point)>"
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:29
msgid "Updates all output pins.  May be called from a slower thread."
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:34
#, no-wrap
msgid ""
"The names for pins and parameters are prefixed as:\n"
"  B<encoder-ratio.N.> for N=0,1,...,num-1 when using B<num_chan=num>\n"
"  B<nameN.> for nameN=name1,name2,... when using B<names=name1,name2,...>\n"
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:36
msgid "The B<encoder-ratio.N.> format is shown in the following descriptions."
msgstr ""

#. type: TP
#: man/man9/encoder_ratio.9:39
#, no-wrap
msgid "B<encoder-ratio.>I<N>B<.master-A> bit in"
msgstr ""

#. type: TP
#: man/man9/encoder_ratio.9:43
#, no-wrap
msgid "B<encoder-ratio.>I<N>B<.master-B> bit in"
msgstr ""

#. type: TP
#: man/man9/encoder_ratio.9:47
#, no-wrap
msgid "B<encoder-ratio.>I<N>B<.slave-A> bit in"
msgstr ""

#. type: TP
#: man/man9/encoder_ratio.9:51
#, no-wrap
msgid "B<encoder-ratio.>I<N>B<.slave-B> bit in"
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:54
msgid "The encoder channels of the master and slave axes"
msgstr ""

#. type: TP
#: man/man9/encoder_ratio.9:54
#, no-wrap
msgid "B<encoder-ratio.>I<N>B<.enable> bit in"
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:65
msgid ""
"When the enable pin is FALSE, the error pin simply reports the slave axis "
"position, in revolutions.  As such, it would normally be connected to the "
"feedback pin of a PID block for closed loop control of the slave axis.  "
"Normally the command input of the PID block is left unconnected (zero), so "
"the slave axis simply sits still.  However when the enable input goes TRUE, "
"the error pin becomes the slave position minus the scaled master position.  "
"The scale factor is the ratio of master teeth to slave teeth.  As the master "
"moves, error becomes non-zero, and the PID loop will drive the slave axis to "
"track the master."
msgstr ""

#. type: TP
#: man/man9/encoder_ratio.9:65
#, no-wrap
msgid "B<encoder-ratio.>I<N>B<.error> float out"
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:68
msgid "The error in the position of the slave (in revolutions)"
msgstr ""

#. type: TP
#: man/man9/encoder_ratio.9:69
#, no-wrap
msgid "B<encoder-ratio.N.master-ppr> unsigned rw"
msgstr ""

#. type: TP
#: man/man9/encoder_ratio.9:73
#, no-wrap
msgid "B<encoder-ratio.N.slave-ppr> unsigned rw"
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:76
msgid "The number of pulses per revolution of the master and slave axes"
msgstr ""

#. type: TP
#: man/man9/encoder_ratio.9:76
#, no-wrap
msgid "B<encoder-ratio.N.master-teeth> unsigned rw"
msgstr ""

#. type: TP
#: man/man9/encoder_ratio.9:80
#, no-wrap
msgid "B<encoder-ratio.N.slave-teeth> unsigned rw"
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:83
msgid "The number of \"teeth\" on the master and slave gears."
msgstr ""

#. type: Plain text
#: man/man9/encoder_ratio.9:85
msgid "B<encoder(9)>"
msgstr ""

#. type: TH
#: man/man9/eoffset_per_angle.9:9
#, no-wrap
msgid "EOFFSET_PER_ANGLE"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:13
msgid "eoffset_per_angle - Compute External Offset Per Angle"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:16
msgid ""
"B<loadrt eoffset_per_angle [count=>I<N>B<|names=>I<name1>B<[,>I<name2..."
">B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:23
msgid ""
"An offset is computed (from one of several functions) based on an input "
"angle in degrees.  The angle could be a rotary coordinate value or a spindle "
"angle."
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:31
msgid ""
"The computed offset is represented as an s32 B<kcounts> output pin that is a "
"compatible input to external offset pins like B<axis.L.eoffset-counts> where "
"B<L> is the coordinate letter.  Scaling of the s32 B<kcounts> is controlled "
"by the input (B<k>) -- its reciprocal value is presented on an output pin "
"(B<kreciprocal>) for connection to B<axis.L.eoffset-scale>.  The default "
"value for B<k> should be suitable for most uses."
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:36
msgid ""
"The built-in functions use pins B<fmult> and B<rfraction> to control the "
"output frequency (or number of polygon sides)  and amplitude respectively.  "
"The B<rfraction> pin controls the offset amplitude as a fraction of the "
"B<radius-ref> pin."
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:42
#, no-wrap
msgid ""
"One of the four built-in functions is specified by the B<fnum> pin:\n"
"  B<0>: f0 inside  polygon  (requires B<fmult> == nsides E<gt>= 3)\n"
"  B<1>: f1 outside polygon  (requires B<fmult> == nsides E<gt>= 3)\n"
"  B<2>: f2 sinusoid\n"
"  B<3>: f3 square wave\n"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:44
msgid "Unsupported B<fnum> values default to use function f0."
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:46
#, no-wrap
msgid "B<eoffset-per-angle.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:50
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.active> bit in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:53
msgid "From: motion.eoffset-active"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:53
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.is-on> bit in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:56
msgid "From: halui.machine.is-on"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:56
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.enable-in> bit in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:59
msgid "Enable Input"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:59
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.radius-ref> float in (default: I<1>)"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:62
msgid "Radius reference (see notes)"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:62
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.angle> float in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:65
msgid "Input angle (in degrees)"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:65
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.start-angle> float in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:68
msgid "Start angle (in degrees)"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:68
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.fnum> s32 in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:71
msgid "Function selector (default 0)"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:71
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.rfraction> float in (default: I<0.1>)"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:74
msgid "Offset amplitude (+/- fraction of radius_ref)"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:74
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.fmult> float in (default: I<6>)"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:77
msgid "Offset frequency multiplier"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:77
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.k> u32 in (default: I<10000>)"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:80
msgid "Scaling Factor (if 0, use 10000)"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:80
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.is-off> bit out "
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:83
msgid "invert is_on (for convenience)"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:83
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.enable-out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:86
msgid "To: axis.L.eoffset-enable"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:86
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.clear> bit out "
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:89
msgid "To: axis.L.eoffset-clear"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:89
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.kcounts> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:92
msgid "To: axis.L.eoffset-counts"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:92
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.kreciprocal> float out "
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:95
msgid "To: axis.L.eoffset-scale (1/k)"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:95
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.eoffset-dbg> float out "
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:98
msgid "offset (debug pin--use kcounts & kreciprocal)"
msgstr ""

#. type: TP
#: man/man9/eoffset_per_angle.9:98
#, no-wrap
msgid "B<eoffset-per-angle.>I<N>B<.state-dbg> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:101
msgid "state (debug pin)"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:109
msgid ""
"An example simulation configuration is provided at: B<configs/sim/axis/"
"external_offsets/opa.ini>.  A simulated XZC machine uses the B<C> coordinate "
"angle to offset the transverse B<X> coordinate according to the selected "
"B<fnum> function."
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:118
msgid ""
"B<radius-ref>: The computed offsets are based on the B<radius-ref> pin "
"value.  This pin may be set to a constant radius value or controlled by a "
"user interface or by g code program (using B<M68> and a B<motion.analog-out-"
"NN pin for instance).>"
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:125
msgid ""
"B<Stopping>: When the B<enable-in> pin is deasserted, the offset is returned "
"to zero respecting the allocated acceleration and velocity limits.  The "
"allocations for coordinate B<L> are typically controlled by an ini file "
"setting: B<[AXIS_L]OFFSET_AV_RATIO>."
msgstr ""

#. type: Plain text
#: man/man9/eoffset_per_angle.9:132
msgid ""
"If unsupported parameters are supplied to a function (for instance a polygon "
"with fewer than three sides), the current offset will be returned to zero "
"(respecting velocity and acceleration constraints).  After correcting the "
"offending parameter, the B<enable-in> pin must be toggled to resume offset "
"computations."
msgstr ""

#. type: TH
#: man/man9/estop_latch.9:9
#, no-wrap
msgid "ESTOP_LATCH"
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:13
msgid "estop_latch - Software ESTOP latch"
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:16
msgid ""
"B<loadrt estop_latch [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:20
msgid "This component can be used as a part of a simple software ESTOP chain."
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:22
msgid "It has two states: \"OK\" and \"Faulted\"."
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:31
msgid ""
"The initial state is \"Faulted\".  When faulted, the B<out-ok> output is "
"false, the B<fault-out> output is true, and the B<watchdog> output is "
"unchanging."
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:35
msgid ""
"The state changes from \"Faulted\" to \"OK\" when B<all> these conditions "
"are true:"
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:39
msgid "B<fault-in> is false"
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:42
msgid "B<ok-in> is true"
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:45
msgid "B<reset> changes from false to true"
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:54
msgid ""
"When \"OK\", the B<out-ok> output is true, the B<fault-out> output is false, "
"and the B<watchdog> output is toggling."
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:58
msgid ""
"The state changes from \"OK\" to \"Faulted\" when B<any> of the following "
"are true:"
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:62
msgid "B<fault-in> is true"
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:65
msgid "B<ok-in> is false"
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:74
msgid ""
"To facilitate using only a single fault source, B<ok-in> and B<fault-en> are "
"both set to the non-fault-causing value when no signal is connected.  For "
"estop-latch to ever be able to signal a fault, at least one of these inputs "
"must be connected."
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:78
msgid ""
"Typically, an external fault or estop input is connected to B<fault-in>, "
"B<iocontrol.0.user-request-enable> is connected to B<reset>, and B<ok-out> "
"is connected to B<iocontrol.0.emc-enable-in.>"
msgstr ""

#. type: Plain text
#: man/man9/estop_latch.9:81
msgid ""
"B<In more complex systems, it may be more appropriate to use classicladder "
"to manage the software portion of the estop chain.>"
msgstr ""

#. type: TP
#: man/man9/estop_latch.9:83
#, no-wrap
msgid "B<estop-latch.>I<N>"
msgstr ""

#. type: TP
#: man/man9/estop_latch.9:87
#, no-wrap
msgid "B<estop-latch.>I<N>B<.ok-in> bit in (default: I<true>)"
msgstr ""

#. type: TP
#: man/man9/estop_latch.9:91
#, no-wrap
msgid "B<estop-latch.>I<N>B<.fault-in> bit in (default: I<false>)"
msgstr ""

#. type: TP
#: man/man9/estop_latch.9:95
#, no-wrap
msgid "B<estop-latch.>I<N>B<.reset> bit in "
msgstr ""

#. type: TP
#: man/man9/estop_latch.9:99
#, no-wrap
msgid "B<estop-latch.>I<N>B<.ok-out> bit out (default: I<false>)"
msgstr ""

#. type: TP
#: man/man9/estop_latch.9:103
#, no-wrap
msgid "B<estop-latch.>I<N>B<.fault-out> bit out (default: I<true>)"
msgstr ""

#. type: TP
#: man/man9/estop_latch.9:107
#, no-wrap
msgid "B<estop-latch.>I<N>B<.watchdog> bit out "
msgstr ""

#. type: TH
#: man/man9/feedcomp.9:9
#, no-wrap
msgid "FEEDCOMP"
msgstr ""

#. type: Plain text
#: man/man9/feedcomp.9:13
msgid ""
"feedcomp - Multiply the input by the ratio of current velocity to the feed "
"rate"
msgstr ""

#. type: Plain text
#: man/man9/feedcomp.9:16
msgid "B<loadrt feedcomp [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/feedcomp.9:17
#, no-wrap
msgid "B<feedcomp.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/feedcomp.9:21
#, no-wrap
msgid "B<feedcomp.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/feedcomp.9:24
msgid "Proportionate output value"
msgstr ""

#. type: TP
#: man/man9/feedcomp.9:24
#, no-wrap
msgid "B<feedcomp.>I<N>B<.in> float in "
msgstr ""

#. type: Plain text
#: man/man9/feedcomp.9:27
msgid "Reference value"
msgstr ""

#. type: TP
#: man/man9/feedcomp.9:27
#, no-wrap
msgid "B<feedcomp.>I<N>B<.enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/feedcomp.9:30
msgid "Turn compensation on or off"
msgstr ""

#. type: TP
#: man/man9/feedcomp.9:30
#, no-wrap
msgid "B<feedcomp.>I<N>B<.vel> float in "
msgstr ""

#. type: Plain text
#: man/man9/feedcomp.9:33
msgid "Current velocity"
msgstr ""

#. type: TP
#: man/man9/feedcomp.9:34
#, no-wrap
msgid "B<feedcomp.>I<N>B<.feed> float rw "
msgstr ""

#. type: Plain text
#: man/man9/feedcomp.9:37
msgid "Feed rate reference value"
msgstr ""

#. type: Plain text
#: man/man9/feedcomp.9:40
msgid "Note that if enable is false, out = in"
msgstr ""

#. type: Plain text
#: man/man9/feedcomp.9:43
msgid "Eric H. Johnson"
msgstr ""

#. type: TH
#: man/man9/filter_kalman.9:9
#, no-wrap
msgid "FILTER_KALMAN"
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:13
msgid ""
"filter_kalman - Unidimensional Kalman filter, also known as linear quadratic "
"estimation (LQE)"
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:16
msgid ""
"B<loadrt filter_kalman [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:20
msgid ""
"Useful for reducing input signal noise (e.g. from the voltage or temperature "
"sensor)."
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:22
msgid ""
"More information can be found at https://en.wikipedia.org/wiki/Kalman_filter."
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:24
msgid "Adjusting B<Qr> and B<Qk> covariances:"
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:27
msgid ""
"Default values of B<Rk> and B<Qk> are given for informational purpose only. "
"The nature of the filter requires the parameters to be individually computed."
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:33
msgid ""
"One of the possible and quite practical method (probably far from being the "
"best) of estimating the B<Rk> covariance is to collect the raw data from the "
"sensor by either asserting the B<debug> pin or using B<halscope> and then "
"compute the covariance using B<cov()> function from B<Octave> package. Ready "
"to use script can be found at https://github.com/dwrobel/TrivialKalmanFilter/"
"blob/master/examples/DS18B20Test/covariance.m."
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:37
msgid ""
"Adjusting B<Qk> covariance mostly depends on the required response time of "
"the filter.  There is a relationship between B<Qk> and response time of the "
"filter that the lower the B<Qk> covariance is the slower the response of the "
"filter is."
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:40
msgid ""
"Common practice is also to conservatively set B<Rk> and B<Qk> slightly "
"larger then computed ones to get robustness."
msgstr ""

#. type: TP
#: man/man9/filter_kalman.9:42
#, no-wrap
msgid "B<filter-kalman.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:45
msgid "Update B<xk-out> based on B<zk> input."
msgstr ""

#. type: TP
#: man/man9/filter_kalman.9:46
#, no-wrap
msgid "B<filter-kalman.>I<N>B<.debug> bit in (default: I<FALSE>)"
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:49
msgid "When asserted, prints out measured and estimated values."
msgstr ""

#. type: TP
#: man/man9/filter_kalman.9:49
#, no-wrap
msgid "B<filter-kalman.>I<N>B<.passthrough> bit in (default: I<FALSE>)"
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:52
msgid "When asserted, copies measured value into estimated value."
msgstr ""

#. type: TP
#: man/man9/filter_kalman.9:52
#, no-wrap
msgid "B<filter-kalman.>I<N>B<.reset> bit in (default: I<FALSE>)"
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:56
msgid ""
"When asserted, resets filter to its initial state and returns 0 as an "
"estimated value (B<reset> pin has higher priority than B<passthrough> pin)."
msgstr ""

#. type: TP
#: man/man9/filter_kalman.9:56
#, no-wrap
msgid "B<filter-kalman.>I<N>B<.zk> float in "
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:59
msgid "Measured value."
msgstr ""

#. type: TP
#: man/man9/filter_kalman.9:59
#, no-wrap
msgid "B<filter-kalman.>I<N>B<.xk-out> float out "
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:62
msgid "Estimated value."
msgstr ""

#. type: TP
#: man/man9/filter_kalman.9:63
#, no-wrap
msgid "B<filter-kalman.>I<N>B<.Rk> float rw (default: I<1.17549e-38>)"
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:66
msgid "Estimation of the noise covariances (process)."
msgstr ""

#. type: TP
#: man/man9/filter_kalman.9:66
#, no-wrap
msgid "B<filter-kalman.>I<N>B<.Qk> float rw (default: I<1.17549e-38>)"
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:69
msgid "Estimation of the noise covariances (observation)."
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:72
msgid "Dmian Wrobel E<lt>dwrobel@ertelnet.rybnik.plE<gt>"
msgstr ""

#. type: Plain text
#: man/man9/filter_kalman.9:74
msgid "GPL-2.0-or-later"
msgstr ""

#. type: TH
#: man/man9/flipflop.9:9
#, no-wrap
msgid "FLIPFLOP"
msgstr ""

#. type: Plain text
#: man/man9/flipflop.9:13
msgid "flipflop - D type flip-flop"
msgstr ""

#. type: Plain text
#: man/man9/flipflop.9:16
msgid "B<loadrt flipflop [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/flipflop.9:17
#, no-wrap
msgid "B<flipflop.>I<N>"
msgstr ""

#. type: TP
#: man/man9/flipflop.9:21
#, no-wrap
msgid "B<flipflop.>I<N>B<.data> bit in "
msgstr ""

#. type: Plain text
#: man/man9/flipflop.9:24
msgid "data input"
msgstr ""

#. type: TP
#: man/man9/flipflop.9:24
#, no-wrap
msgid "B<flipflop.>I<N>B<.clk> bit in "
msgstr ""

#. type: Plain text
#: man/man9/flipflop.9:27
msgid "clock, rising edge writes data to out"
msgstr ""

#. type: TP
#: man/man9/flipflop.9:27
#, no-wrap
msgid "B<flipflop.>I<N>B<.set> bit in "
msgstr ""

#. type: Plain text
#: man/man9/flipflop.9:30
msgid "when true, force out true"
msgstr ""

#. type: TP
#: man/man9/flipflop.9:30
#, no-wrap
msgid "B<flipflop.>I<N>B<.reset> bit in "
msgstr ""

#. type: Plain text
#: man/man9/flipflop.9:33
msgid "when true, force out false; overrides set"
msgstr ""

#. type: TP
#: man/man9/flipflop.9:33
#, no-wrap
msgid "B<flipflop.>I<N>B<.out> bit io "
msgstr ""

#. type: Plain text
#: man/man9/flipflop.9:36
msgid "output"
msgstr ""

#. type: TP
#: man/man9/flipflop.9:36
#, no-wrap
msgid "B<flipflop.>I<N>B<.out-not> bit io "
msgstr ""

#. type: Plain text
#: man/man9/flipflop.9:39
msgid "inverted output"
msgstr ""

#. type: TH
#: man/man9/gantry.9:9
#, no-wrap
msgid "GANTRY"
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:13
msgid ""
"gantry - LinuxCNC HAL component for driving multiple joints from a single "
"axis"
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:16
msgid ""
"B<loadrt gantry [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]] "
"[personality=>I<P,P,...>B<]>"
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:20
msgid "Drives multiple physical motors (joints) from a single axis input"
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:23
msgid ""
"The `personality' value is the number of joints to control.  Two is typical, "
"but up to seven is supported (a three joint setup has been tested with "
"hardware)."
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:32
msgid ""
"All controlled joints track the commanded position (with a per-joint "
"offset)  unless in the process of homing.  Homing is when the commanded "
"position is moving towards the homing switches (as determined by the sign of "
"search-vel)  and the joint home switches are not all in the same state.  "
"When the system is homing and a joint home switch activates, the command "
"value sent to that joint is \"frozen\" and the joint offset value is updated "
"instead.  Once all home switches are active, there are no more adjustments "
"made to the offset values and all joints run in lock-step once more."
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:37
msgid ""
"For best results, set HOME_SEARCH_VEL and HOME_LATCH_VEL to the same "
"direction and as slow as practical.  When a joint home switch trips, the "
"commanded velocity will drop immediately from HOME_SEARCH_VEL to zero, with "
"no limit on acceleration."
msgstr ""

#. type: TP
#: man/man9/gantry.9:39
#, no-wrap
msgid "B<gantry.>I<N>B<.read> (requires a floating-point thread)"
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:42
msgid "Update position-fb and home/limit outputs based on joint values"
msgstr ""

#. type: TP
#: man/man9/gantry.9:42
#, no-wrap
msgid "B<gantry.>I<N>B<.write> (requires a floating-point thread)"
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:45
msgid "Update joint pos-cmd outputs based on position-cmd in"
msgstr ""

#. type: TP
#: man/man9/gantry.9:46
#, no-wrap
msgid "B<gantry.>I<N>B<.joint.>I<MM>B<.pos-cmd> float out (MM=00..personality) "
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:49
msgid "Per-joint commanded position"
msgstr ""

#. type: TP
#: man/man9/gantry.9:49
#, no-wrap
msgid "B<gantry.>I<N>B<.joint.>I<MM>B<.pos-fb> float in (MM=00..personality) "
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:52
msgid "Per-joint position feedback"
msgstr ""

#. type: TP
#: man/man9/gantry.9:52
#, no-wrap
msgid "B<gantry.>I<N>B<.joint.>I<MM>B<.home> bit in (MM=00..personality) "
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:55
msgid "Per-joint home switch"
msgstr ""

#. type: TP
#: man/man9/gantry.9:55
#, no-wrap
msgid "B<gantry.>I<N>B<.joint.>I<MM>B<.offset> float out (MM=00..personality) "
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:58
msgid "(debugging) Per-joint offset value, updated when homing"
msgstr ""

#. type: TP
#: man/man9/gantry.9:58
#, no-wrap
msgid "B<gantry.>I<N>B<.position-cmd> float in "
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:61
msgid "Commanded position from motion"
msgstr ""

#. type: TP
#: man/man9/gantry.9:61
#, no-wrap
msgid "B<gantry.>I<N>B<.position-fb> float out "
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:64
msgid "Position feedback to motion"
msgstr ""

#. type: TP
#: man/man9/gantry.9:64
#, no-wrap
msgid "B<gantry.>I<N>B<.home> bit out "
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:67
msgid "Combined home signal, true if all joint home inputs are true"
msgstr ""

#. type: TP
#: man/man9/gantry.9:67
#, no-wrap
msgid "B<gantry.>I<N>B<.limit> bit out "
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:70
msgid "Combined limit signal, true if any joint home input is true"
msgstr ""

#. type: TP
#: man/man9/gantry.9:70
#, no-wrap
msgid "B<gantry.>I<N>B<.search-vel> float in "
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:73
msgid "HOME_SEARCH_VEL from INI file"
msgstr ""

#. type: Plain text
#: man/man9/gantry.9:76
msgid "Charles Steinkuehler"
msgstr ""

#. type: TH
#: man/man9/gantrykins.9:1
#, no-wrap
msgid "GANTRYKINS"
msgstr ""

#. type: TH
#: man/man9/gantrykins.9:1 man/man9/gentrivkins.9:1
#, no-wrap
msgid "Kinematics Module"
msgstr ""

#. type: Plain text
#: man/man9/gantrykins.9:6
msgid ""
"gantrykins - B<Superseded> by the general purpose B<trivkins> kinematics "
"module."
msgstr ""

#. type: Plain text
#: man/man9/gantrykins.9:9
msgid ""
"To specify a gantry with non-identity kinematics: use trivkins with the "
"kinstype parameter set for KINEMATICS_BOTH.  Example:"
msgstr ""

#. type: Plain text
#: man/man9/gantrykins.9:12
#, no-wrap
msgid "  loadrt trivkins coordinates=xyyz B<kinstypes=BOTH>\n"
msgstr ""

#. type: Plain text
#: man/man9/gantrykins.9:14 man/man9/gentrivkins.9:9
msgid "B<trivkins>(9)"
msgstr ""

#. type: TH
#: man/man9/gearchange.9:9
#, no-wrap
msgid "GEARCHANGE"
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:13
msgid "gearchange - Select from one two speed ranges"
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:20
msgid ""
"The output will be a value scaled for the selected gear, and clamped to the "
"min/max values for that gear.  The scale of gear 1 is assumed to be 1, so "
"the output device scale should be chosen accordingly.  The scale of gear 2 "
"is relative to gear 1, so if gear 2 runs the spindle 2.5 times as fast as "
"gear 1, scale2 should be set to 2.5."
msgstr ""

#. type: TP
#: man/man9/gearchange.9:21
#, no-wrap
msgid "B<gearchange.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/gearchange.9:25
#, no-wrap
msgid "B<gearchange.>I<N>B<.sel> bit in "
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:28
msgid "Gear selection input"
msgstr ""

#. type: TP
#: man/man9/gearchange.9:28
#, no-wrap
msgid "B<gearchange.>I<N>B<.speed-in> float in "
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:31
msgid "Speed command input"
msgstr ""

#. type: TP
#: man/man9/gearchange.9:31
#, no-wrap
msgid "B<gearchange.>I<N>B<.speed-out> float out "
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:34
msgid "Speed command to DAC/PWM"
msgstr ""

#. type: TP
#: man/man9/gearchange.9:34
#, no-wrap
msgid "B<gearchange.>I<N>B<.dir-in> bit in "
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:37
msgid "Direction command input"
msgstr ""

#. type: TP
#: man/man9/gearchange.9:37
#, no-wrap
msgid "B<gearchange.>I<N>B<.dir-out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:40
msgid "Direction output - possibly inverted for second gear"
msgstr ""

#. type: TP
#: man/man9/gearchange.9:41
#, no-wrap
msgid "B<gearchange.>I<N>B<.min1> float rw (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:44
msgid "Minimum allowed speed in gear range 1"
msgstr ""

#. type: TP
#: man/man9/gearchange.9:44
#, no-wrap
msgid "B<gearchange.>I<N>B<.max1> float rw (default: I<100000>)"
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:47
msgid "Maximum allowed speed in gear range 1"
msgstr ""

#. type: TP
#: man/man9/gearchange.9:47
#, no-wrap
msgid "B<gearchange.>I<N>B<.min2> float rw (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:50
msgid "Minimum allowed speed in gear range 2"
msgstr ""

#. type: TP
#: man/man9/gearchange.9:50
#, no-wrap
msgid "B<gearchange.>I<N>B<.max2> float rw (default: I<100000>)"
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:53
msgid "Maximum allowed speed in gear range 2"
msgstr ""

#. type: TP
#: man/man9/gearchange.9:53
#, no-wrap
msgid "B<gearchange.>I<N>B<.scale2> float rw (default: I<1.0>)"
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:58
msgid ""
"Relative scale of gear 2 vs. gear 1 Since it is assumed that gear 2 is "
"\"high gear\", B<scale2> must be greater than 1, and will be reset to 1 if "
"set lower."
msgstr ""

#. type: TP
#: man/man9/gearchange.9:58
#, no-wrap
msgid "B<gearchange.>I<N>B<.reverse> bit rw (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:61
msgid "Set to 1 to reverse the spindle in second gear"
msgstr ""

#. type: Plain text
#: man/man9/gearchange.9:64 man/man9/invert.9:35 man/man9/sample_hold.9:34
#: man/man9/select8.9:33 man/man9/updown.9:49
msgid "Stephen Wille Padnos"
msgstr ""

#. type: TH
#: man/man9/gentrivkins.9:1
#, no-wrap
msgid "GENTRIVKINS"
msgstr ""

#. type: Plain text
#: man/man9/gentrivkins.9:6
msgid ""
"gentrivkins - B<Superseded> by the general purpose B<trivkins> kinematics "
"module."
msgstr ""

#. type: TH
#: man/man9/gladevcp.9:2
#, no-wrap
msgid "gladevcp"
msgstr ""

#. type: TH
#: man/man9/gladevcp.9:2
#, no-wrap
msgid "2010-08-24"
msgstr ""

#. type: Plain text
#: man/man9/gladevcp.9:6
msgid "gladevcp - displays Virtual control Panels built with GTK / GLADE"
msgstr ""

#. type: Plain text
#: man/man9/gladevcp.9:8
msgid ""
"B<loadusr gladevcp [-c componentname0x>I<N>B<] [-g WxH+Xoffset"
"+Yoffset0x>I<N>B<] [-H halcmdfile] [-x windowid] gladefile.glade>"
msgstr ""

#. type: Plain text
#: man/man9/gladevcp.9:17
msgid ""
"gladevcp parses a glade file and displays the widgets in a window.  Then "
"calls gladevcp_makepins which again parses the gladefile looking for "
"specific HAL widgets then makes HAL pins and sets up updating for them.  The "
"HAL component name defaults to the basename of the glade file.  The -x "
"option directs gladevcp to reparent itself under this X window id instead of "
"creating its own toplevel window.  The -H option passes an input file for "
"halcmd to be run after the gladevcp component is initialized. This is used "
"in Axis when running gladevcp under a tab with the EMBED_TAB_NAME/"
"EMBED_TAB_COMMAND ini file feature."
msgstr ""

#. type: Plain text
#: man/man9/gladevcp.9:19
msgid ""
"GladeVCP supports GtkBuilder or libglade files though some widgets are not "
"fully supported in GtkBuilder yet."
msgstr ""

#. type: Plain text
#: man/man9/gladevcp.9:22
msgid ""
"For now system links need to be added in the glade library folders to point "
"to our new widgets and catalog files. look in lib/python/gladevcp/READ_ME "
"for details"
msgstr ""

#. type: TH
#: man/man9/gray2bin.9:9
#, no-wrap
msgid "GRAY2BIN"
msgstr ""

#. type: Plain text
#: man/man9/gray2bin.9:13
msgid "gray2bin - convert a gray-code input to binary"
msgstr ""

#. type: Plain text
#: man/man9/gray2bin.9:16
msgid "B<loadrt gray2bin [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/gray2bin.9:19
msgid "Converts a gray-coded number into the corresponding binary value"
msgstr ""

#. type: TP
#: man/man9/gray2bin.9:20
#, no-wrap
msgid "B<gray2bin.>I<N>"
msgstr ""

#. type: TP
#: man/man9/gray2bin.9:24
#, no-wrap
msgid "B<gray2bin.>I<N>B<.in> u32 in "
msgstr ""

#. type: Plain text
#: man/man9/gray2bin.9:27
msgid "gray code in"
msgstr ""

#. type: TP
#: man/man9/gray2bin.9:27
#, no-wrap
msgid "B<gray2bin.>I<N>B<.out> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/gray2bin.9:30
msgid "binary code out"
msgstr ""

#. type: TH
#: man/man9/hal_bb_gpio.9:1
#, no-wrap
msgid "hal_bb_gpio"
msgstr ""

#. type: Plain text
#: man/man9/hal_bb_gpio.9:5
msgid "hal_bb_gpio - Driver for beaglebone GPIO pins"
msgstr ""

#. type: Plain text
#: man/man9/hal_bb_gpio.9:9
msgid ""
"B<loadrt hal_bb_gpio >I<user_leds=#,...> I<input_pins=#,...> "
"I<output_pins=#,...>"
msgstr ""

#. type: SH
#: man/man9/hal_bb_gpio.9:10
#, no-wrap
msgid "USER LEDS"
msgstr ""

#. type: Plain text
#: man/man9/hal_bb_gpio.9:15
msgid ""
"The I<user_leds> loadrt parameter controls which LEDs are available to HAL.  "
"Valid range: 0..3.  These LEDs are next to the ethernet jack and the "
"linuxcnc numbers match the silkscreen on beaglbone black.  Empirically, "
"these seem to be OR'd with whatever function is assigned to the LED in Linux."
msgstr ""

#. type: TP
#: man/man9/hal_bb_gpio.9:17
#, no-wrap
msgid "B<bb_gpio.userled>I<N> bit in"
msgstr ""

#. type: TQ
#: man/man9/hal_bb_gpio.9:19
#, no-wrap
msgid "B<bb_gpio.userled>I<N>B<-invert> bit in"
msgstr ""

#. type: Plain text
#: man/man9/hal_bb_gpio.9:23
msgid ""
"The associated LED is lit if B<userled>I<N> xor B<userled>I<N>-invertB< is "
"TRUE.>"
msgstr ""

#. type: SH
#: man/man9/hal_bb_gpio.9:24
#, no-wrap
msgid "INPUT PINS"
msgstr ""

#. type: Plain text
#: man/man9/hal_bb_gpio.9:30
msgid ""
"The I<input_pins> loadrt parameter controls which physical I/O pins are "
"available to HAL as input pins.  The numbering is \"800+N\" for pin N on "
"connector P8, and \"900+N\" for pin N on connector P9.  For example, \"803\" "
"means connector P8 pin 3, which is also described in BeagleBone "
"documentation as \"gpmc_ad6\"."
msgstr ""

#. type: Plain text
#: man/man9/hal_bb_gpio.9:33 man/man9/hal_bb_gpio.9:49
msgid ""
"Specifying pins that are otherwise in use by the system may have undesirable "
"side effects, such as crashing rtapi_app or the whole system."
msgstr ""

#. type: TP
#: man/man9/hal_bb_gpio.9:35
#, no-wrap
msgid "B<bb_gpio.p>I<N>B<.in->I<NN> bit out"
msgstr ""

#. type: TQ
#: man/man9/hal_bb_gpio.9:37
#, no-wrap
msgid "B<bb_gpio.p>I<N>B<.in->I<NN>B<-invert> bit in"
msgstr ""

#. type: Plain text
#: man/man9/hal_bb_gpio.9:41
msgid ""
"B<in->I<NN> is a snapshot of the value of the corresponding physical pin XOR "
"the value of the corresponding B<in->I<NN>B<-invert> pin."
msgstr ""

#. type: SH
#: man/man9/hal_bb_gpio.9:42
#, no-wrap
msgid "OUTPUT PINS"
msgstr ""

#. type: Plain text
#: man/man9/hal_bb_gpio.9:46
msgid ""
"The I<input_pins> loadrt parameter controls which physical I/O pins are "
"available to HAL as input pins.  The numbering is \"800+N\" for pin N on "
"connector P8, and \"900+N\" for pin N on connector P9."
msgstr ""

#. type: TP
#: man/man9/hal_bb_gpio.9:51
#, no-wrap
msgid "B<bb_gpio.p>I<N>B<.out->I<NN> bit out"
msgstr ""

#. type: TQ
#: man/man9/hal_bb_gpio.9:53
#, no-wrap
msgid "B<bb_gpio.p>I<N>B<.out->I<NN>B<-invert> bit in"
msgstr ""

#. type: Plain text
#: man/man9/hal_bb_gpio.9:57
msgid ""
"The corresponding physical pin is driven with the result of B<in->I<NN> xor "
"B<in->I<NN>B<-invert>."
msgstr ""

#. type: TP
#: man/man9/hal_bb_gpio.9:62
#, no-wrap
msgid "B<bb_gpio.read>"
msgstr ""

#. type: Plain text
#: man/man9/hal_bb_gpio.9:65
msgid "Update HAL pins from physical pins."
msgstr ""

#. type: TP
#: man/man9/hal_bb_gpio.9:65
#, no-wrap
msgid "B<bb_gpio.write>"
msgstr ""

#. type: Plain text
#: man/man9/hal_bb_gpio.9:68
msgid "Update physical pins from HAL pins."
msgstr ""

#. type: TH
#: man/man9/histobins.9:9
#, no-wrap
msgid "HISTOBINS"
msgstr ""

#. type: Plain text
#: man/man9/histobins.9:13
msgid "histobins - histogram bins utility for scripts/hal-histogram"
msgstr ""

#. type: Plain text
#: man/man9/histobins.9:27
#, no-wrap
msgid ""
"Usage:\n"
"  Read availablebins pin for the number of bins available.\n"
"  Set the minvalue, binsize, and nbins pins.\n"
"    Ensure nbins E<lt>= availablebins\n"
"    For nbins = N, the bins are numbered: 0 ... N-1 \n"
"  Iterate:\n"
"    Set index pin to a bin number: 0 E<lt>= index E<lt> nbins.\n"
"    Read check pin and verify that check pin == index pin.\n"
"    Read outputs: binvalue, pextra, nextra pins.\n"
"         (binvalue is count for the indexed bin)\n"
"         (pextra   is count for all inputs E<gt> maxvalue)\n"
"         (nextra   is count for all bins   E<lt> minvalue)\n"
msgstr ""

#. type: Plain text
#: man/man9/histobins.9:47
#, no-wrap
msgid ""
" If index is out of range (index E<lt> 0 or index E<gt> maxbinnumber)\n"
" then binvalue == -1.\n"
" The input-error pin is set when input rules are violated\n"
" and updates cease.\n"
" The reset pin may be used to restart.\n"
" The input used is selected based on pintype:\n"
"   pintype  inputpin\n"
"   -------  -----------\n"
"         0  input\n"
"         1  input-s32\n"
"         2  input-u32\n"
"         3  input-bit\n"
" Additional output statistics pins:\n"
"   input-min\n"
"   input-max\n"
"   nsamples\n"
"   variance\n"
"   mean\n"
" The method input pin selects an alternate variance calculation.\n"
msgstr ""

#. type: Plain text
#: man/man9/histobins.9:49
msgid "Maintainers note: hardcoded for MAXBINNUMBER==200"
msgstr ""

#. type: TP
#: man/man9/histobins.9:51
#, no-wrap
msgid "B<histobins.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/histobins.9:55
#, no-wrap
msgid "B<histobins.>I<N>B<.pintype> u32 in "
msgstr ""

#. type: TP
#: man/man9/histobins.9:59
#, no-wrap
msgid "B<histobins.>I<N>B<.input> float in "
msgstr ""

#. type: TP
#: man/man9/histobins.9:63
#, no-wrap
msgid "B<histobins.>I<N>B<.input-s32> s32 in "
msgstr ""

#. type: TP
#: man/man9/histobins.9:67
#, no-wrap
msgid "B<histobins.>I<N>B<.input-u32> u32 in "
msgstr ""

#. type: TP
#: man/man9/histobins.9:71
#, no-wrap
msgid "B<histobins.>I<N>B<.input-bit> bit in "
msgstr ""

#. type: TP
#: man/man9/histobins.9:75
#, no-wrap
msgid "B<histobins.>I<N>B<.nbins> u32 in (default: I<20>)"
msgstr ""

#. type: TP
#: man/man9/histobins.9:79
#, no-wrap
msgid "B<histobins.>I<N>B<.binsize> float in (default: I<1>)"
msgstr ""

#. type: TP
#: man/man9/histobins.9:83
#, no-wrap
msgid "B<histobins.>I<N>B<.minvalue> float in (default: I<0>)"
msgstr ""

#. type: TP
#: man/man9/histobins.9:87
#, no-wrap
msgid "B<histobins.>I<N>B<.index> s32 in "
msgstr ""

#. type: TP
#: man/man9/histobins.9:91
#, no-wrap
msgid "B<histobins.>I<N>B<.check> s32 out "
msgstr ""

#. type: TP
#: man/man9/histobins.9:95
#, no-wrap
msgid "B<histobins.>I<N>B<.reset> bit in "
msgstr ""

#. type: TP
#: man/man9/histobins.9:99
#, no-wrap
msgid "B<histobins.>I<N>B<.method> bit in "
msgstr ""

#. type: TP
#: man/man9/histobins.9:103
#, no-wrap
msgid "B<histobins.>I<N>B<.input-error> bit out "
msgstr ""

#. type: TP
#: man/man9/histobins.9:107
#, no-wrap
msgid "B<histobins.>I<N>B<.binvalue> float out "
msgstr ""

#. type: TP
#: man/man9/histobins.9:111
#, no-wrap
msgid "B<histobins.>I<N>B<.pextra> float out "
msgstr ""

#. type: TP
#: man/man9/histobins.9:115
#, no-wrap
msgid "B<histobins.>I<N>B<.nextra> float out "
msgstr ""

#. type: TP
#: man/man9/histobins.9:119
#, no-wrap
msgid "B<histobins.>I<N>B<.input-min> float out "
msgstr ""

#. type: TP
#: man/man9/histobins.9:123
#, no-wrap
msgid "B<histobins.>I<N>B<.input-max> float out "
msgstr ""

#. type: TP
#: man/man9/histobins.9:127
#, no-wrap
msgid "B<histobins.>I<N>B<.nsamples> u32 out "
msgstr ""

#. type: TP
#: man/man9/histobins.9:131
#, no-wrap
msgid "B<histobins.>I<N>B<.variance> float out "
msgstr ""

#. type: TP
#: man/man9/histobins.9:135
#, no-wrap
msgid "B<histobins.>I<N>B<.mean> float out "
msgstr ""

#. type: TP
#: man/man9/histobins.9:139
#, no-wrap
msgid "B<histobins.>I<N>B<.availablebins> s32 out (default: I<200>)"
msgstr ""

#. type: TH
#: man/man9/hm2_7i43.9:1
#, no-wrap
msgid "HM2_7I43"
msgstr ""

#. type: TH
#: man/man9/hm2_7i43.9:1 man/man9/hm2_eth.9:22 man/man9/hm2_pci.9:1
#: man/man9/hm2_spi.9:22 man/man9/hostmot2.9:1 man/man9/sserial.9:3
#, no-wrap
msgid "2008-05-13"
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:6
msgid ""
"hm2_7i43 - LinuxCNC HAL driver for the Mesa Electronics 7i43 EPP Anything IO "
"board with HostMot2 firmware."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:10
msgid ""
"B<loadrt hm2_7i43 [ioaddr=>I<N>B<[,>I<N>B<...]] [ioaddr_hi=>I<N>B<[,"
">I<N>B<...]] [epp_wide=>I<N>B<[,>I<N>B<...]] [config=>I<\"str[,str...]\">B<] "
"[debug_epp=>I<N>B<[,>I<N>B<...]]>"
msgstr ""

#. type: TP
#: man/man9/hm2_7i43.9:11 man/man9/hm2_7i90.9:11
#, no-wrap
msgid "B<ioaddr> [default: 0 (parport0)]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:14 man/man9/hm2_7i90.9:14
msgid "The base address of the parallel port."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:17
msgid ""
"The number of ioaddr indexes/addresses given is used by the driver to "
"determine how many boards to search for."
msgstr ""

#. type: TP
#: man/man9/hm2_7i43.9:17 man/man9/hm2_7i90.9:19
#, no-wrap
msgid "B<ioaddr_hi> [default: 0]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:21 man/man9/hm2_7i90.9:23
msgid ""
"The secondary address of the parallel port, used to set EPP mode.  0 means "
"to use ioaddr + 0x400."
msgstr ""

#. type: TP
#: man/man9/hm2_7i43.9:21 man/man9/hm2_7i90.9:23
#, no-wrap
msgid "B<epp_wide> [default: 1]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:27 man/man9/hm2_7i90.9:29
msgid ""
"Set to zero to disable the \"wide EPP mode\".  \"Wide\" mode allows a 16- "
"and 32-bit EPP transfers, which can reduce the time spent in the read and "
"write functions.  However, this may not work on all EPP parallel ports."
msgstr ""

#. type: TP
#: man/man9/hm2_7i43.9:27 man/man9/hm2_7i90.9:29 man/man9/hm2_eth.9:32
#: man/man9/hm2_pci.9:11 man/man9/hm2_rpspi.9:33 man/man9/hm2_spi.9:31
#, no-wrap
msgid "B<config> [default: \"\"]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:30 man/man9/hm2_7i90.9:32 man/man9/hm2_eth.9:35
#: man/man9/hm2_pci.9:14 man/man9/hm2_spi.9:34
msgid "HostMot2 config strings, described in the hostmot2(9) manpage."
msgstr ""

#. type: TP
#: man/man9/hm2_7i43.9:30 man/man9/hm2_7i90.9:32
#, no-wrap
msgid "B<debug_epp> [default: 0]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:34 man/man9/hm2_7i90.9:36
msgid "Developer/debug use only! Enable debug logging of most EPP transfers."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:40
msgid ""
"hm2_7i43 is a device driver that interfaces the Mesa 7i43 board with the "
"HostMot2 firmware to the LinuxCNC HAL.  Both the 200K and the 400K FPGAs are "
"supported."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:45
msgid ""
"The driver talks with the 7i43 over the parallel port, not over USB.  USB "
"can be used to power the 7i43, but not to talk to it.  USB communication "
"with the 7i43 will not be supported any time soon, since USB has poor real-"
"time qualities."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:50
msgid ""
"The driver programs the board's FPGA with firmware when it registers the "
"board with the hostmot2 driver.  The firmware to load is specified in the "
"B<config> modparam, as described in the hostmot2(9) manpage, in the I<config "
"modparam> section."
msgstr ""

#. type: SH
#: man/man9/hm2_7i43.9:51
#, no-wrap
msgid "Jumper settings"
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:56
msgid ""
"To send the FPGA configuration from the PC, the board must be configured to "
"get its firmware from the EPP port.  To do this, jumpers W4 and W5 must both "
"be down, ie toward the USB connector."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:60
msgid ""
"The board must be configured to power on whether or not the USB interface is "
"active.  This is done by setting jumper W7 up, ie away from the edge of the "
"board."
msgstr ""

#. type: SH
#: man/man9/hm2_7i43.9:60 man/man9/hm2_7i90.9:47
#, no-wrap
msgid "Communicating with the board"
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:65
msgid ""
"The 7i43 communicates with the LinuxCNC computer over EPP, the Enhanced "
"Parallel Port.  This provides about 1 MBps of throughput, and the "
"communication latency is very predictable and reasonably low."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:69 man/man9/hm2_7i90.9:56
msgid ""
"The parallel port must support EPP 1.7 or EPP 1.9.  EPP 1.9 is preferred, "
"but EPP 1.7 will work too.  The EPP mode of the parallel port is sometimes a "
"setting in the BIOS."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:73
msgid ""
"Note that the popular \"NetMOS\" aka \"MosChip 9805\" PCI parport cards B<do "
"not work>.  They do not meet the EPP spec, and cannot be reliably used with "
"the 7i43.  You have to find another card, sorry."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:81
msgid ""
"EPP is very reliable under normal circumstances, but bad cabling or "
"excessively long cabling runs may cause communication timeouts.  The driver "
"exports a parameter named hm2_7i43.E<lt>BoardNumE<gt>.io_error to inform HAL "
"of this condition.  When the driver detects an EPP timeout, it sets io_error "
"to True and stops communicating with the 7i43 board.  Setting io_error back "
"to False makes the driver start trying to communicate with the 7i43 again."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:84 man/man9/hm2_7i90.9:71
msgid ""
"Access to the EPP bus is not threadsafe: only one realtime thread may access "
"the EPP bus."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i43.9:87 man/man9/hm2_7i90.9:74 man/man9/hm2_pci.9:32
#: man/man9/hm2_spi.9:79
msgid "hostmot2(9)"
msgstr ""

#. type: TH
#: man/man9/hm2_7i90.9:1
#, no-wrap
msgid "HM2_7I90"
msgstr ""

#. type: TH
#: man/man9/hm2_7i90.9:1
#, no-wrap
msgid "2013-10-27"
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i90.9:6
msgid ""
"hm2_7i90 - LinuxCNC HAL driver for the Mesa Electronics 7i90 EPP Anything IO "
"board with HostMot2 firmware."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i90.9:10
msgid ""
"B<loadrt hm2_7i90 [ioaddr=>I<N>B<[,>I<N>B<...]] [ioaddr_hi=>I<N>B<[,"
">I<N>B<...]] [epp_wide=>I<N>B<[,>I<N>B<...]] [debug_epp=>I<N>B<[,"
">I<N>B<...]]>"
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i90.9:19
msgid ""
"The number of ioaddr indexes/addresses given is used by the driver to "
"determine how many boards to search for. Previously the number of config "
"strings was used, but a blank config string is perfectly acceptable for 7i90."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i90.9:41
msgid ""
"hm2_7i90 is a device driver that interfaces the Mesa 7i90 board with the "
"HostMot2 firmware to the LinuxCNC HAL."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i90.9:45
msgid ""
"The 7i90 firmware is stored on the 7i90 itself, it is not programmed by the "
"driver at load time.  The 7i90 firmware can be changed using the mesaflash "
"program."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i90.9:47
msgid "The driver talks with the 7i90 over the parallel port, via EPP."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i90.9:52
msgid ""
"The 7i90 communicates with the LinuxCNC computer over EPP, the Enhanced "
"Parallel Port.  This provides about 1 MBps of throughput, and the "
"communication latency is very predictable and reasonably low."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i90.9:60
msgid ""
"Note that the popular \"NetMOS\" aka \"MosChip 9805\" PCI parport cards B<do "
"not work>.  They do not meet the EPP spec, and cannot be reliably used with "
"the 7i90.  You have to find another card, sorry."
msgstr ""

#. type: Plain text
#: man/man9/hm2_7i90.9:68
msgid ""
"EPP is very reliable under normal circumstances, but bad cabling or "
"excessively long cabling runs may cause communication timeouts.  The driver "
"exports a parameter named hm2_7i90.E<lt>BoardNumE<gt>.io_error to inform HAL "
"of this condition.  When the driver detects an EPP timeout, it sets io_error "
"to True and stops communicating with the 7i90 board.  Setting io_error back "
"to False makes the driver start trying to communicate with the 7i90 again."
msgstr ""

#. type: TH
#: man/man9/hm2_eth.9:22
#, no-wrap
msgid "HM2_ETH"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:27
msgid ""
"hm2_eth - LinuxCNC HAL driver for the Mesa Electronics Ethernet Anything IO "
"boards, with HostMot2 firmware."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:31
msgid ""
"B<loadrt hm2_eth [config=>I<\"str[,str...]\">B<] [board_ip=>I<ip[,ip...]>B<] "
"[board_mac=>I<mac[,mac...]>B<]>"
msgstr ""

#. type: TP
#: man/man9/hm2_eth.9:35
#, no-wrap
msgid "B<board_ip> [default: \"\"]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:38
msgid ""
"The IP address of the board(s), separated by commas.  As shipped, the board "
"address is 192.168.1.121."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:43
msgid ""
"hm2_eth is a device driver that interfaces Mesa's ethernet based Anything I/"
"O boards (with the HostMot2 firmware) to the LinuxCNC HAL."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:45
msgid ""
"The supported boards are: 7I76E, 7I80DB, 7I80HD, 7I92, 7I93, 7I94, 7I95, "
"7I96, 7I96S, 7I97, 7I98."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:47
msgid ""
"The board must have its hardware loaded on the board by the mesaflash(1) "
"program."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:49
msgid ""
"hm2_eth is only available when LinuxCNC is configured with \"uspace\" "
"realtime."
msgstr ""

#. type: SH
#: man/man9/hm2_eth.9:50 man/man9/hm2_rpspi.9:127 man/man9/hm2_spi.9:55
#, no-wrap
msgid "INTERFACE CONFIGURATION"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:55
msgid ""
"hm2_eth should be used on a dedicated network interface, with only a cable "
"between the PC and the board.  Wireless and USB network interfaces are not "
"suitable."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:62
msgid ""
"These instructions assume your dedicated network interface is \"eth1\", "
"192.168.1/24 is an unused private network, that the hostmot2 board is using "
"the default address of 192.168.1.121, that you are using Debian 7 or "
"similar, and that you do not otherwise use iptables.  If any of these are "
"false, you will need to modify the instructions accordingly.  After "
"following all the instructions, reboot so that the changes take effect."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:73
msgid ""
"It is particularly important to check that the network 192.168.1/24 is not "
"already the private network used by your internet router, because this is a "
"commonly-used value.  If you use another network, you will also need to "
"reconfigure the hostmot2 card to use an IP address on that network by using "
"the mesaflash(1) utility and change jumper settings.  Typically, you will "
"choose one of the networks in the E<.UR http://en.wikipedia.org/wiki/"
"IPv4#Private_networks> Private IPv4 address space.  E<.UE> One common "
"alternative is PC address 10.10.10.1, hostmot2 address 10.10.10.10."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:77
msgid ""
"Use of the dedicated ethernet interface while LinuxCNC is running can cause "
"violation of realtime guarantees.  hm2_eth will automatically mitigate most "
"accidental causes of interference."
msgstr ""

#. type: SS
#: man/man9/hm2_eth.9:78
#, no-wrap
msgid "Configure network with static address"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:81
msgid ""
"Add these lines to the file /etc/network/interfaces to configure eth1 with a "
"static address:"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:87
#, no-wrap
msgid ""
"auto eth1\n"
"iface eth1 inet static\n"
"    address 192.168.1.1\n"
"    hardware-irq-coalesce-rx-usecs 0\n"
msgstr ""

#. type: SH
#: man/man9/hm2_eth.9:89
#, no-wrap
msgid "PACKET LOSS"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:101
msgid ""
"While ethernet is fairly resistant to electrical noise, many systems will "
"not have 100% perfect packet reception.  The hm2_eth driver has a limited "
"ability to deal with lost packets.  Packet loss is detected by transmitting "
"an expected read or write packet count with each request, and checking the "
"value with each read response.  When a lost packet is detected, the B<packet-"
"error> pin is asserted in that cycle, the B<packet-error-level> pin is "
"increased, and if it reaches a threshold then a permanent low-level I/O "
"error is signaled."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:106
msgid ""
"However, not all hm2 special functions know how to properly recover from "
"lost packets.  For instance, the encoder special function does not properly "
"manage the index feature when packets are lost.  The author believes that "
"this can lead to rare failures in home-to-index, which can have severe "
"consequences."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:120
msgid ""
"On the other hand, pid-stepper systems will run properly for extended "
"periods of time with packet loss on the order of .01%, as long as following "
"error is increased enough that having stale position feedback does not "
"trigger a following error.  Altering the HAL configuration so that during "
"transient packet loss the pid and motion feedback value is equal to the "
"command value, instead of the stale feedback value, appears to improve "
"tuning.  This can be accomplished with a B<mux2(9)> component for each "
"feedback signal, using B<packet-error> as the mux2 B<sel> input."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:125
msgid ""
"In addition to the pins documented in B<hostmot2(9)>, B<hm2_eth(9)> creates "
"additional pins:"
msgstr ""

#. type: TP
#: man/man9/hm2_eth.9:126
#, no-wrap
msgid "(bit, out) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.packet-error"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:130
msgid ""
"This pin is TRUE when the most recent cycle detected a read or write error, "
"and FALSE at other times."
msgstr ""

#. type: TP
#: man/man9/hm2_eth.9:130
#, no-wrap
msgid "(s32, out) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.packet-error-level"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:135
msgid ""
"This pin shows the current error level, with higher numbers indicating a "
"greater number of recent detected errors.  The error level is always in the "
"range from 0 to packet-error-limit, inclusive."
msgstr ""

#. type: TP
#: man/man9/hm2_eth.9:135
#, no-wrap
msgid "(bit, out) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.packet-error-exceeded"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:139
msgid ""
"This pin is TRUE when the current error level is equal to the maximum, and "
"FALSE at other times."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:144
msgid ""
"In addition to the parameters documented in B<hostmot2(9)>, B<hm2_eth(9)> "
"creates additional parameters:"
msgstr ""

#. type: TP
#: man/man9/hm2_eth.9:145
#, no-wrap
msgid "(s32, rw) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.packet-error-decrement"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:149
msgid ""
"The amount deducted from I<packet-error-level> in a cycle without detected "
"read or write errors, without going below zero."
msgstr ""

#. type: TP
#: man/man9/hm2_eth.9:150
#, no-wrap
msgid "(s32, rw) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.packet-error-increment"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:154
msgid ""
"The amount added to I<packet-error-level> in a cycle without detected read "
"or write errors, without going above packet-error-limit."
msgstr ""

#. type: TP
#: man/man9/hm2_eth.9:155
#, no-wrap
msgid "(s32, rw) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.packet-error-limit"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:160
msgid ""
"The level at which a detected read or write error is treated as a permanent "
"error.  When this error level is reached, the board's I<io-error> pin "
"becomes TRUE and the condition must be manually reset."
msgstr ""

#. type: TP
#: man/man9/hm2_eth.9:161
#, no-wrap
msgid "(s32, rw) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.packet-read-timeout"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:168
msgid ""
"The length of time that must pass before a read request times out.  If the "
"value is less than or equal to 0, it is interpreted as 80% of the thread "
"period.  If the value is less than 100, it is interpreted as a percentage of "
"the thread period.  Otherwise, it is interpreted as a time in nanoseconds.  "
"In any case, the timeout is never less than 100 microseconds."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:171
msgid ""
"Setting this value too low can cause spurious read errors.  Setting it too "
"high can cause realtime delay errors."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:180
msgid ""
"hm2_eth uses an iptables chain called \"hm2-eth-rules-output\" to control "
"access to the network interface while hal is running.  The chain is created "
"if it does not exist, and a jump to it is inserted at the beginning of the "
"OUTPUT chain if it is not there already.  If you have an existing iptables "
"setup, you can insert a direct jump from OUTPUT to hm2-eth-rules-output in "
"an order appropriate to your local network."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:184
msgid ""
"At (normal) exit, hm2_eth will remove the rules.  After a crash, you can "
"manually clear the rules with B<sudo iptables -F hm2-eth-rules-output>; the "
"rules are also removed by a reboot."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:190
msgid ""
"\"hardware-irq-coalesce-rx-usecs\" decreases time waiting to receive a "
"packet on most systems, but on at least some Marvel-chipset NICs it is "
"harmful.  If the line does not improve system performance, then remove it.  "
"A reboot is required for the value to be set back to its power-on default.  "
"This requires the ethtool package to be installed."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:194
msgid ""
"Some hostmot2 functions such uart are coded in a way that causes additional "
"latency when used with hm2_eth."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:199
msgid ""
"On the 7i92, the HAL pins for the LEDs are called CR01..CR04, but the "
"silkscreens are CR3..CR6.  Depending on the FPGA firmware, the LEDs may "
"initially be under control of the ethernet engine.  This can be changed "
"until power cycle with"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:202
#, no-wrap
msgid "elbpcom 01D914000000\n"
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:207
msgid ""
"Depending on firmware version, this driver may cause the hardware error LED "
"to light even though the driver and hardware are functioning normally.  This "
"will reportedly be fixed in future bitfile updates from Mesa."
msgstr ""

#. type: Plain text
#: man/man9/hm2_eth.9:211
msgid "B<hostmot2>(9), B<elbpcom>(1)"
msgstr ""

#. type: TH
#: man/man9/hm2_pci.9:1
#, no-wrap
msgid "HM2_PCI"
msgstr ""

#. type: Plain text
#: man/man9/hm2_pci.9:6
msgid ""
"hm2_pci - LinuxCNC HAL driver for the Mesa Electronics PCI-based Anything IO "
"boards, with HostMot2 firmware."
msgstr ""

#. type: Plain text
#: man/man9/hm2_pci.9:10
msgid "B<loadrt hm2_pci [config=>I<\"str[,str...]\">B<]>"
msgstr ""

#. type: Plain text
#: man/man9/hm2_pci.9:20
msgid ""
"hm2_pci is a device driver that interfaces Mesa's PCI and PC-104/Plus based "
"Anything I/O boards (with the HostMot2 firmware) to the LinuxCNC HAL."
msgstr ""

#. type: Plain text
#: man/man9/hm2_pci.9:24
msgid ""
"The supported boards are: the 5i20, 5i21, 5i22, 5i23, 5i24, and 5i25 (all on "
"PCI); the 4i65, 4i68, and 4i69 (on PC-104/Plus), and the 3x20 (using a 6i68 "
"or 7i68 carrier card) and 6i25 (on PCI Express)."
msgstr ""

#. type: Plain text
#: man/man9/hm2_pci.9:29
msgid ""
"The driver optionally programs the board's FPGA with firmware when it "
"registers the board with the hostmot2 driver.  The firmware to load is "
"specified in the B<config> modparam, as described in the hostmot2(9) "
"manpage, in the I<config modparam> section."
msgstr ""

#. type: TH
#: man/man9/hm2_rpspi.9:23
#, no-wrap
msgid "HM2_RPSPI"
msgstr ""

#. type: TH
#: man/man9/hm2_rpspi.9:23
#, no-wrap
msgid "2017-06-05"
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:28
msgid ""
"hm2_rpspi - LinuxCNC HAL driver for the Mesa Electronics SPI Anything IO "
"boards, with HostMot2 firmware."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:32
msgid "B<loadrt hm2_rpspi>"
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:38
msgid "HostMot2 config strings, described in the B<hostmot2>(9)  manpage."
msgstr ""

#. type: TP
#: man/man9/hm2_rpspi.9:38
#, no-wrap
msgid "B<spiclk_rate> [default: 31250]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:43
msgid "Specify the SPI clock rate in kHz. See B<SPI\\ CLOCK\\ RATES> below."
msgstr ""

#. type: TP
#: man/man9/hm2_rpspi.9:43
#, no-wrap
msgid "B<spiclk_rate_rd> [default: -1 (same as B<spiclk_rate>)]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:50
msgid ""
"Specify the SPI read clock rate in kHz. Usually you read and write at the "
"same speed. However, you may want to reduce the reading speed if the round-"
"trip is too long (see B<SPI\\ CLOCK\\ RATES> below)."
msgstr ""

#. type: TP
#: man/man9/hm2_rpspi.9:50
#, no-wrap
msgid "B<spiclk_base> [default: 400000000]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:59
msgid ""
"This is the SPI clock divider calculation fallback value. Usually, the base "
"rate is read from I</sys/kernel/debug/clk/vpu/clk_rate> and used in the "
"divider calculation (for the Rpi3 it should be 250\\ MHz). The "
"B<spiclk_base> is I<only> used as a fallback if the system's cannot be read. "
"It is normally safe (and recommended) that you leave this parameter as is."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:63
msgid ""
"You should set this manually to 250000000 if your system does not provide "
"access to the kernel clock settings. Otherwise, your SPI clock frequency "
"will be only 62.5% of the requested value."
msgstr ""

#. type: TP
#: man/man9/hm2_rpspi.9:63
#, no-wrap
msgid "B<spi_pull_miso> [default: 1 (pull-down)]"
msgstr ""

#. type: TP
#: man/man9/hm2_rpspi.9:65
#, no-wrap
msgid "B<spi_pull_mosi> [default: 1 (pull-down)]"
msgstr ""

#. type: TP
#: man/man9/hm2_rpspi.9:67
#, no-wrap
msgid "B<spi_pull_sclk> [default: 1 (pull-down)]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:72
msgid ""
"Enable or disable pull-up/pull-down on the SPI lines. A value of 0 disables "
"any pull-up/down on the pin. A value of 1 means pull-down and 2 means pull-"
"up. The chip enable line(s) are always pull-up enabled."
msgstr ""

#. type: TP
#: man/man9/hm2_rpspi.9:72
#, no-wrap
msgid "B<spi_probe> [default: 1]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:81
#, no-wrap
msgid ""
"Probe SPI port and CE lines for a card. This is a bit-field indicating which\n"
"combinations of SPI and CE should be probed:\n"
" -  1 = SPI0/CE0,\n"
" -  2 = SPI0/CE1,\n"
" -  4 = SPI1/CE0,\n"
" -  8 = SPI1/CE1,\n"
" - 16 = SPI1/CE2.\n"
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:86
msgid ""
"The probe is performed exactly in above order. Any boards found will be "
"numbered 0...4 in the order found. See also B<INTERFACE\\ CONFIGURATION> "
"below."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:92
#, no-wrap
msgid ""
"It is an error if a probe fails and the driver will abort.  The SPI0/SPI1\n"
"peripherals are located at gpio pins (with 40-pin I/O header pin-number in\n"
"parentheses):\n"
" - SPI0: MOSI=10(19), MISO=9(21), SCLK=11(23), CE0=8(24), CE1=7(26)\n"
" - SPI1: MOSI=20(38), MISO=19(35), SCLK=21(40), CE0=18(12), CE1=17(11), CE2=16(36)\n"
msgstr ""

#. type: TP
#: man/man9/hm2_rpspi.9:93
#, no-wrap
msgid "B<spi_debug> [default: -1]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:99
msgid ""
"Set the message level of the running process. The message level is set if "
"B<spi_debug> is set to a positive value between 0 and 5, where 0 means no "
"messages at all and 5 means everything. A value of -1 does not touch the "
"current message level."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:103
msgid ""
"Caveat Emptor: changing the message level is process-wide and all modules "
"within the process will spit out messages at the requested level. This may "
"cause quite some clutter in your terminal."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:110
msgid ""
"hm2_rpspi is a device driver for the Raspberry Pi 2/3 that interfaces Mesa's "
"SPI based Anything I/O boards (with the HostMot2 firmware) to the LinuxCNC "
"HAL.  This driver is not based on the linux spidev driver, but on a "
"dedicated BCM2835-SPI driver."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:116
msgid ""
"It is B<strongly> recommended that you unload/disable the kernel's spidev "
"driver by disabling it using B<raspi-config>.  Please note that having both "
"kernel and user-space SPI drivers installed can result in unexpected "
"interactions and system instabilities."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:118 man/man9/hm2_spi.9:49
msgid "The supported boards are: 7I90HD."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:123
msgid ""
"The board must have a compatible firmware (ie.: 7i90_spi_svst4_8.bit) loaded "
"on the board by the B<mesaflash>(1)  program."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:126
msgid ""
"hm2_rpspi is only available when LinuxCNC is configured with \"uspace\" "
"realtime.  It works with Raspian and PREEMPT_RT kernel."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:134
msgid ""
"Up to five devices (7i90 boards) are supported. Two on SPI0 and three on "
"SPI1.  It is recommended that you, at most, use two devices and each device "
"connected to a separate SPI port. You can choose which CE lines you prefer "
"or fit the design and setup the B<spi_probe> parameter to instruct the "
"driver where to search for the board(s)."
msgstr ""

#. type: SH
#: man/man9/hm2_rpspi.9:135
#, no-wrap
msgid "REALTIME PERFORMANCE OF THE BCM2835-SPI DRIVER"
msgstr ""

#. As of kernel 3.8, most or all kernel SPI drivers do not achieve the high"
#. realtime response rate required for a typical LinuxCNC configuration.  The"
#. driver was tested with ..."
#. type: Plain text
#: man/man9/hm2_rpspi.9:141
msgid "TBD."
msgstr ""

#. type: SH
#: man/man9/hm2_rpspi.9:142 man/man9/hm2_spi.9:72
#, no-wrap
msgid "SPI CLOCK RATES"
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:147
msgid ""
"The maximum SPI clock of the BCM2835-SPI driver and the 7i90 is documented "
"over 32MHz. The SPI driver can provide frequencies well beyond what is "
"acceptable for the 7i90. A safe value to start with would be 12.5\\ MHz "
"(spiclk_rate=12500)  and then work your way up from there."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:166
#, no-wrap
msgid ""
"The SPI driver generates (very) discrete clock frequency values, especially in\n"
"the MHz range because of a simple clock divider structure. The base frequency\n"
"is 250\\ MHz and the divider for SPI0/SPI1 scales using discrete factors. The\n"
"following list specifies the B<spiclk_rate> setting and the discrete SPI\n"
"clock frequency (250\\ MHz\\ /\\ (2n) for n\\ E<gt>\\ 1):\n"
" - 62500 - 62.500\\ MHz,\n"
" - 41667 - 41.667\\ MHz,\n"
" - 31250 - 31.250\\ MHz,\n"
" - 25000 - 25.000\\ MHz,\n"
" - 20834 - 20.833\\ MHz,\n"
" - 17858 - 17.857\\ MHz,\n"
" - 15625 - 15.625\\ MHz,\n"
" - 13889 - 13.889\\ MHz,\n"
" - 12500 - 12.500\\ MHz,\n"
" - 11364 - 11.364\\ MHz,\n"
" - 10417 - 10.417\\ MHz,\n"
" -  9616 -  9.615\\ MHz,\n"
" - ....\n"
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:171
msgid ""
"The lowest selectable SPI clock frequency is 30\\ kHz (spiclk_rate=30) for "
"SPI0 and SPI1. Theoretically, the SPI0 port could go slower, but there is no "
"point in doing so. You should not expect any real-time performance with such "
"slow setting, unless your machine is located next to a black hole."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:178
msgid ""
"The highest SPI clock frequency is, theoretically, 125\\ MHz. However, you "
"will not be able to build any reliable hardware interface at that frequency. "
"The driver limits the clock to 62.5\\ MHz (cpiclk_rate=62500). The chances "
"are rather slim that you get the interface to work reliably at this "
"frequency. The 7i90 interface only supports frequencies up to 50\\ MHz and "
"that is with perfect cabling and impedance matching (in write direction "
"only)."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:184
msgid ""
"Writing to the 7i90 may be done faster than reading. This is especially "
"important if you have \"long\" wires or any buffers on the SPI-bus path. You "
"can set the read clock frequency to a lower value (using B<spiclk_rate_rd>) "
"to counter the effects of the SPI-bus round-trip needed for read actions. "
"For example, you can write at 41.67\\ MHz and read at 25.00\\ MHz."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:189
msgid ""
"It should be noted that the Rpi3 B<must> have an adequate 5V power supply "
"and the power should be properly decoupled right on the 40-pin I/O header. "
"At high speeds and noise on the supply, there is the possibility of noise "
"throwing off the SoC's PLL(s), resulting in strange behaviour."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:194
#, no-wrap
msgid ""
"For optimal performance on the Rpi3, you must disable the \"ondemand\" CPU\n"
"frequency governor. You may add the following to your /etc/rc.local file:\n"
" echo -n 1200000 E<gt> /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq\n"
" echo -n performance E<gt> /sys/devices/system/cpu/cpufreq/policy0/scaling_governor\n"
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:197
msgid ""
"Be sure to have a proper heatsink mounted on the SoC or it will get too warm "
"and crash."
msgstr ""

#. type: Plain text
#: man/man9/hm2_rpspi.9:201
msgid "B<hostmot2>(9)"
msgstr ""

#. type: TH
#: man/man9/hm2_spi.9:22
#, no-wrap
msgid "HM2_SPI"
msgstr ""

#. type: Plain text
#: man/man9/hm2_spi.9:26
msgid ""
"hm2_spi - LinuxCNC HAL driver for the Mesa Electronics SPI Anything IO "
"boards, with HostMot2 firmware."
msgstr ""

#. type: Plain text
#: man/man9/hm2_spi.9:30
msgid ""
"B<loadrt hm2_spi [config=>I<\"str[,str...]\">B<] [spidev_path=path[,"
"path...]] [spidev_rate=>I<rate[,rate...]>B<]>"
msgstr ""

#. type: TP
#: man/man9/hm2_spi.9:34
#, no-wrap
msgid "B<spidev_path> [default: \"/dev/spidev1.0\"]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_spi.9:37
msgid "The path to the spi device node, a character special device in /dev"
msgstr ""

#. type: TP
#: man/man9/hm2_spi.9:37
#, no-wrap
msgid "B<spidev_rate> [default: 24000]"
msgstr ""

#. type: Plain text
#: man/man9/hm2_spi.9:42
msgid ""
"The desired rate of the SPI clock in kHz.  If the exact specified clock is "
"not available, a lower clock is used.  Due to shortcomings in the spidev "
"API, it is not possible for hal to report the actual clock used."
msgstr ""

#. type: Plain text
#: man/man9/hm2_spi.9:47
msgid ""
"hm2_spi is a device driver that interfaces Mesa's SPI based Anything I/O "
"boards (with the HostMot2 firmware) to the LinuxCNC HAL."
msgstr ""

#. type: Plain text
#: man/man9/hm2_spi.9:52
msgid ""
"The board must have a compatible firmware loaded on the board by the "
"mesaflash(1) program."
msgstr ""

#. type: Plain text
#: man/man9/hm2_spi.9:54
msgid ""
"hm2_spi is only available when LinuxCNC is configured with \"uspace\" "
"realtime."
msgstr ""

#. type: Plain text
#: man/man9/hm2_spi.9:61
msgid ""
"It is possible for one SPI bus to connect several devices; in this "
"configuration, a master device has several chip select lines.  In order to "
"meet realtime deadlines, hm2_spi should be used on a dedicated SPI interface "
"not shared with any other slaves."
msgstr ""

#. type: SH
#: man/man9/hm2_spi.9:62
#, no-wrap
msgid "REALTIME PERFORMANCE OF LINUX SPIDEV DRIVERS"
msgstr ""

#. type: Plain text
#: man/man9/hm2_spi.9:71
msgid ""
"As of kernel 3.8, most or all kernel SPI drivers do not achieve the high "
"realtime response rate required for a typical LinuxCNC configuration.  The "
"driver was tested with a modified version of the spi-s3c64xx SPI driver on "
"the Odroid U3 platform.  The patched kernel resides E<.UR https://github.com/"
"jepler/odroid-linux/tree/odroid-3.8.13-rt> on github E<.UE .>"
msgstr ""

#. type: Plain text
#: man/man9/hm2_spi.9:75
msgid ""
"The maximum SPI clock of the 7i90 is documented as 50MHz.  Other elements of "
"the data path between HAL and the 7i90 may impose other limitations."
msgstr ""

#. type: TH
#: man/man9/hostmot2.9:1
#, no-wrap
msgid "HOSTMOT2"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:5
msgid ""
"hostmot2 - LinuxCNC HAL driver for the Mesa Electronics HostMot2 firmware."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:8
msgid ""
"See the config modparam section below for Mesa card configuration. Typically "
"hostmot2 is loaded with no parameters unless debugging is required."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:10
msgid ""
"B<loadrt hostmot2 [debug_idrom=>I<N>B<] [debug_module_descriptors=>I<N>B<] "
"[debug_pin_descriptors=>I<N>B<] [debug_modules=>I<N>B<]>"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:10
#, no-wrap
msgid "B<debug_idrom> [default: 0]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:14
msgid ""
"Developer/debug use only! Enable debug logging of the HostMot2 IDROM header."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:14
#, no-wrap
msgid "B<debug_module_descriptors> [default: 0]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:18
msgid ""
"Developer/debug use only! Enable debug logging of the HostMot2 Module "
"Descriptors."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:18
#, no-wrap
msgid "B<debug_pin_descriptors> [default: 0]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:22
msgid ""
"Developer/debug use only! Enable debug logging of the HostMot2 Pin "
"Descriptors."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:22
#, no-wrap
msgid "B<debug_modules> [default: 0]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:26
msgid ""
"Developer/debug use only! Enable debug logging of the HostMot2 Modules used."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:26
#, no-wrap
msgid "B<use_serial_numbers> [default: 0]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:35
msgid ""
"When creating HAL pins for smart-serial devices name the pins by the board "
"serial number rather than which board and port they are connected to.  With "
"this option set to 1 pins will have names like B<hm2_8i20.1234.current> "
"rather than B<hm2_5i23.0.8i20.0.1.current>. The identifier consists of the "
"last 4 digits of the board serial number, which is normally on a sticker on "
"the board.  This will make configs less portable, but does mean that boards "
"can be re-connected less carefully."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:42
msgid ""
"hostmot2 is a device driver that interfaces the Mesa HostMot2 firmware to "
"the LinuxCNC HAL.  This driver by itself does nothing, the boards that "
"actually run the firmware require their own drivers before anything can "
"happen.  Currently drivers are available for PCI, Ethernet, SPI and EPP "
"interfaced cards."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:47
msgid ""
"The HostMot2 firmware provides modules such as encoders, PWM generators, "
"step/dir generators, and general purpose I/O pins (GPIOs).  These things are "
"called \"Modules\".  The firmware is configured, at firmware compile time, "
"to provide zero or more instances of each of these Modules."
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:47
#, no-wrap
msgid "Board I/O Pins"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:53
msgid ""
"The HostMot2 firmware runs on an FPGA board.  The board interfaces with the "
"computer via PCI, Ethernet, SPI, or EPP, and interfaces with motion control "
"hardware such as servos and stepper motors via I/O pins on the board."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:59
msgid ""
"Each I/O pin can be configured, at board-driver load time, to serve one of "
"two purposes: either as a particular I/O pin of a particular Module instance "
"(encoder, pwmgen, stepgen etc), or as a general purpose digital I/O pin.  By "
"default all Module instances are enabled, and all the board's pins are used "
"by the Module instances."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:63
msgid ""
"The user can disable Module instances at board-driver load time, by "
"specifying a hostmot2 config string modparam.  Any pins which belong to "
"Module instances that have been disabled automatically become GPIOs."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:71
msgid ""
"All IO pins have some HAL presence, whether they belong to an active module "
"instance or are full GPIOs.  GPIOs can be changed (at run-time)  between "
"inputs, normal outputs, and open drains, and have a flexible HAL interface.  "
"IO pins that belong to active Module instances are constrained by the "
"requirements of the owning Module, and have a more limited interface in "
"HAL.  This is described in the General Purpose I/O section below."
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:71
#, no-wrap
msgid "config modparam"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:78
msgid ""
"All the board-driver modules (hm2_pci, hm2_eth etc) accept a load-time "
"modparam of type string array, named \"config\".  This array has one config "
"string for each board the driver should use.  Each board's config string is "
"passed to and parsed by the hostmot2 driver when the board-driver registers "
"the board."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:81
msgid ""
"The config string can contain spaces, so it is usually a good idea to wrap "
"the whole thing in double-quotes (the \" character)."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:84
msgid ""
"The comma character (,) separates members of the config array from each "
"other."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:88
msgid ""
"For example, if your control computer has one 5i20 and one 5i23 you might "
"load the hm2_pci driver with a HAL command (in halcmd) something like this:"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:92
#, no-wrap
msgid "B<loadrt hm2_pci config=\"firmware=hm2/5i20/SVST8_4.BIT num_encoders=3 num_pwmgens=3 num_stepgens=3,firmware=hm2/5i23/SVSS8_8.BIT sserial_port_0=0000 num_encoders=4\">\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:102
msgid ""
"Note: this assumes that the hm2_pci driver detects the 5i20 first and the "
"5i23 second.  If the detection order does not match the order of the config "
"strings, the hostmot2 driver will refuse to load the firmware and the board-"
"driver (hm2_pci etc) will fail to load.  To the best of my knowledge, there "
"is no way to predict the order in which PCI boards will be detected by the "
"driver, but the detection order will be consistent as long as PCI boards are "
"not moved around.  Best to try loading it and see what the detection order "
"is."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:104
msgid "The valid entries in the format string are:"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:128
#, no-wrap
msgid ""
"B<[firmware=>I<F>B<]>\n"
" [num_dplls=I<N>B<]\n"
" [num_encoders=>I<N>B<]\n"
" [ssi_chan_>I<N>B<=>I<abc%nq>B<]\n"
" [biss_chan_>I<N>B<=>I<abc%nq>B<]\n"
" [fanuc_chan_>I<N>B<=>I<abc%nq>B<]\n"
" [num_inmuxs=>I<N>B<]\n"
" [num_inms=>I<N>B<]\n"
" [num_resolvers=>I<N>B<]\n"
" [num_pwmgens=>I<N>B<]\n"
" [num_3pwmgens=>I<N>B<]\n"
" [num_oneshots=>I<N>B<]\n"
" [num_rcpwmgens=>I<N>B<]\n"
" [num_stepgens=>I<N>B<]\n"
" [stepgen_width=>I<N>B<]\n"
" [sserial_port_>I<0>B<=>I<00000000>B<]\n"
" [num_bspis=>I<N>B<]\n"
" [num_leds=>I<N>B<]\n"
" [num_ssrs=>I<N>B<]\n"
" [num_outms=>I<N>B<]\n"
" [num_xy2mods=>I<N>B<]\n"
" [enable_raw]>\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:129
#, no-wrap
msgid "B<firmware> [optional]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:134
msgid ""
"Load the firmware specified by F into the FPGA on this board.  If no "
"\"B<firmware=>I<F>\" string is specified, the FPGA will not be re-programmed "
"but may continue to run a previously downloaded firmware."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:142
msgid ""
"The requested firmware F is fetched by udev.  udev searches for the firmware "
"in the system's firmware search path, usually /lib/firmware.  F typically "
"has the form \"hm2/E<lt>BoardTypeE<gt>/file.bit\"; a typical value for F "
"might be \"hm2/5i20/SVST8_4.BIT\".  The hostmot2 firmware files are supplied "
"by the hostmot2-firmware packages, available from linuxcnc.org and can "
"normally be installed by entering the command \"sudo apt-get install "
"hostmot2-firmware-5i23\" to install the support files for the 5i23 for "
"example."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:147
msgid ""
"Newer FPGA cards come pre-programmed with firmware and no \"firmware=\" "
"string should be used with these cards. To change the firmware on these "
"cards the \"mesaflash\" utility should be used. It is perfectly valid and "
"reasonable to load these cards with no config string at all."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:147
#, no-wrap
msgid "B<num_dplls> [optional, default: -1]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:154
msgid ""
"The hm2dpll is a phase-locked loop timer module which may be used to reduce "
"sample and write time jitter for some hm2 modules. This parameter can be "
"used to disable the hm2dpll by setting the number to 0. There is only ever "
"one module of this type, with 4 timer channels, so the other valid numbers "
"are -1 (enable all) and 1, both of which end up meaning the same thing."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:154
#, no-wrap
msgid "B<num_encoders> [optional, default: -1]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:159
msgid ""
"Only enable the first N encoders.  If N is -1, all encoders are enabled.  If "
"N is 0, no encoders are enabled.  If N is greater than the number of "
"encoders available in the firmware, the board will fail to register."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:159
#, no-wrap
msgid "B<ssi_chan_N> [optional, default: \"\"]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:165
msgid ""
"Specifies how the bit stream from a Synchronous Serial Interface device will "
"be interpreted. There should be an entry for each device connected. Only "
"channels with a format specifier will be enabled. (as the software can not "
"guess data rates and bit lengths)"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:165
#, no-wrap
msgid "B<biss_chan_N> [optional, default: \"\"]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:168
msgid "As for ssi_chan_N, but for BiSS devices"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:168
#, no-wrap
msgid "B<fanuc_chan_N> [optional, default: \"\"]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:174
msgid ""
"Specifies how the bit stream from a Fanuc absolute encoder will be "
"interpreted. There should be an entry for each device connected. Only "
"channels with a format specifier will be enabled. (as the software can not "
"guess data rates and bit lengths)"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:174
#, no-wrap
msgid "B<num_resolvers> [optional, default: -1]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:180
msgid ""
"Only enable the first N resolvers. If N = -1 then all resolvers are "
"enabled.  This module does not work with generic resolvers (unlike the "
"encoder module which works with any encoder). At the time of writing thex "
"Hostmot2 Resolver function only works with the Mesa 7i49 card."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:180
#, no-wrap
msgid "B<num_pwmgens> [optional, default: -1]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:185
msgid ""
"Only enable the first N pwmgens.  If N is -1, all pwmgens are enabled.  If N "
"is 0, no pwmgens are enabled.  If N is greater than the number of pwmgens "
"available in the firmware, the board will fail to register."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:185
#, no-wrap
msgid "B<num_3pwmgens> [optional, default: -1]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:190
msgid ""
"Only enable the first N Three-phase pwmgens.  If N is -1, all 3pwmgens are "
"enabled. If N is 0, no pwmgens are enabled.  If N is greater than the number "
"of pwmgens available in the firmware, the board will fail to register."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:190
#, no-wrap
msgid "B<num_rcpwmgens> [optional, default: -1]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:195
msgid ""
"Only enable the first N RC pwmgens.  If N is -1, all rcpwmgens are enabled. "
"If N is 0, no rcpwmgens are enabled.  If N is greater than the number of "
"rcpwmgens available in the firmware, the board will fail to register."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:195
#, no-wrap
msgid "B<num_stepgens> [optional, default: -1]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:200
msgid ""
"Only enable the first N stepgens.  If N is -1, all stepgens are enabled.  If "
"N is 0, no stepgens are enabled.  If N is greater than the number of "
"stepgens available in the firmware, the board will fail to register."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:200
#, no-wrap
msgid "B<num_xy2mods> [optional, default: -1]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:205
msgid ""
"Only enable the first N xy2mods.  If N is -1, all xy2mods are enabled.  If N "
"is 0, no xy2mods are enabled.  If N is greater than the number of xy2mods "
"available in the firmware, the board will fail to register."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:206
#, no-wrap
msgid "B<stepgen_width> [optional, default: 2]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:212
msgid ""
"Used to mask extra, unwanted, stepgen pins. Stepper drives typically require "
"only two pins (step and dir) but the Hostmot2 stepgen can drive up to 8 "
"output pins for specialised applications (depending on firmware). This "
"parameter applies to all stepgen instances. Unused, masked pins will be "
"available as GPIO."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:212
#, no-wrap
msgid "B<sserial_port_>I<N> (I<N> = 0 .. 3) [optional, default: 00000000 for all ports]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:233
#, no-wrap
msgid ""
"Up to 32 Smart Serial devices can be connected to a Mesa Anything IO board\n"
"depending on the firmware used and the number of physical connections on the\n"
"board. These are arranged in 1-4 ports (N) of 1 to 8 channels.\n"
" Some Smart Serial (SSLBP) cards offer more than one load-time configuration,\n"
"for example all inputs, or all outputs, or offering additional analogue input on\n"
"some digital pins.\n"
" To set the modes for port 0 use for example B<sserial_port_0=0120xxxx>.\n"
" A \"0\" in the string sets the corresponding channel to mode 0, a \"1\" to mode 1, and so\n"
"on up to mode 9. An \"x\" in any position disables that channel and makes the\n"
"corresponding FPGA pins available as GPIO.\n"
" The string can be up to 8 characters long, and if it defines more\n"
"modes than there are channels on the port then the extras are ignored. Channel\n"
"numbering is left to right so the example above would set sserial device 0.0\n"
"to mode 0, 0.1 to mode 1, 0.2 to mode 2, 0.3 to mode 0 and disables channels 0.4 onwards.\n"
" The sserial driver will auto-detect connected devices, no further configuration\n"
"should be needed. Unconnected channels will default to GPIO, but the pin values\n"
"will vary semi-randomly during boot when card-detection runs, to it is best to\n"
"actively disable any channel that is to be used for GPIO.\n"
"See SSERIAL(9) for more information.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:233
#, no-wrap
msgid "B<num_bspis> [optional, default: -1]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:237
msgid ""
"Only enable the first N Buffered SPI drivers. If N is -1 then all the "
"drivers are enabled. Each BSPI driver can address 16 devices."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:237
#, no-wrap
msgid "B<num_leds> [optional, default: -1]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:241
msgid ""
"Only enable the first N of the LEDs on the FPGA board. If N is -1, then HAL "
"pins for all the LEDs will be created. If N=0 then no pins will be added."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:241
#, no-wrap
msgid "B<num_ssrs> [optional, default: -1]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:246
msgid ""
"Only enable the first N of the SSR modules on the FPGA board. If N is -1, "
"then HAL pins for all the SSR outputs will be created. If N=0 then no pins "
"will be added."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:246
#, no-wrap
msgid "B<enable_raw> [optional]"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:250
msgid ""
"If specified, this turns on a raw access mode, whereby a user can peek and "
"poke the firmware from HAL.  See Raw Mode below."
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:251
#, no-wrap
msgid "dpll"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:264
msgid ""
"The hm2dpll module has pins like \"hm2_I<E<lt>BoardTypeE<gt>>."
"I<E<lt>BoardNumE<gt>>.dpll\" It is likely that the pin-count will decrease "
"in the future and that some pins will become parameters.  This module is a "
"phase-locked loop that will synchronise itself with the thread in which the "
"hostmot2 \"read\" function is installed and will trigger other functions "
"that are allocated to it at a specified time before or after the \"read\" "
"function runs. This can be applied to the three absolute encoder types, "
"quadrature encoder, stepgen, and xy2mod. In the case of the absolute "
"encoders this allows the system to trigger a data transmission just prior to "
"the time when the HAL driver reads the data. In the case of stepgens, "
"quadrature encoders, and the xy2mod, the timers can be used to reduce "
"position sampling jitter. This is especially valuable with the ethernet-"
"interfaced cards."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:266 man/man9/hostmot2.9:341 man/man9/hostmot2.9:693
#: man/man9/hostmot2.9:820 man/man9/hostmot2.9:911 man/man9/hostmot2.9:982
#: man/man9/hostmot2.9:1547 man/man9/hostmot2.9:1566 man/man9/hostmot2.9:1672
#: man/man9/hostmot2.9:1697
#, no-wrap
msgid "Pins:"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:266
#, no-wrap
msgid "(float, in) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.dpll.NN.timer-us"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:273
msgid ""
"This pin sets the triggering offset of the associated timer. There are 4 "
"timers numbered 01 to 04, represented by the NN digits in the pin name.  The "
"units are micro-seconds.  Generally the value for reads will be negative, "
"and positive for writes so that input data is sampled prior to the main "
"hostmot read and output data is written some time after the main hostmot2 "
"read."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:278
msgid ""
"For stepgen and quadrature encoders, the value needs to be more than the "
"maximum variation between read times.  -100 will suffice for most systems, "
"and -50 will work on systems with good performance and latency."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:283
msgid ""
"For serial encoders, the value also needs to include the time it takes to "
"transfer the absolute encoder position.  For instance, if 50 bits must be "
"read at 500 kHz then subtract an additional 50/500 kHz = 100 µs to get a "
"starting value of -200."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:288
msgid ""
"The xy2mod uses 2 DPLL timers, one for read and one for write. The read "
"timer value can be the same as used by the stepgen and quadrature encoders "
"so the same timer channel can be shared. The write timer is typically set to "
"a time after the main hostmot2 write this may take some experimentation."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:289
#, no-wrap
msgid "(float, in) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.dpll.base-freq-khz"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:294
msgid ""
"This pin sets the base frequency of the phase-locked loop. by default it "
"will be set to the nominal frequency of the thread in which the PLL is "
"running and will not normally need to be changed."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:294
#, no-wrap
msgid "(float, out) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.dpll.phase-error-us"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:299
msgid ""
"Indicates the phase error of the DPLL. If the number cycles by a large "
"amount it is likely that the PLL has failed to achieve lock and adjustments "
"will need to be made."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:299
#, no-wrap
msgid "(u32, in) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.dpll.time-const"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:306
msgid ""
"The filter time-constant for the PLL.  The default value is a compromise "
"between insensitivity to single-cycle variations and being resilient to "
"changes to the Linux CLOCK_MONOTONIC timescale, which can instantly change "
"by up to ±500ppm from its nominal value, usually by timekeeping software "
"like ntpd and ntpdate. Default 2000 (0x7d0)"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:306
#, no-wrap
msgid "(u32, in) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.dpll.plimit"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:311
msgid ""
"Sets the phase adjustment limit of the PLL. If the value is zero then the "
"PLL will free-run at the base frequency independent of the servo thread "
"rate. This is probably not what you want. Default 4194304 (0x400000) Units "
"not known..."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:311
#, no-wrap
msgid "(u32, out) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.dpll.ddsize"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:314
msgid "Used internally by the driver, likely to disappear."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:314
#, no-wrap
msgid "(u32, in) hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.dpll.prescale"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:317
msgid "Prescale factor for the rate generator. Default 1."
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:319
#, no-wrap
msgid "encoder"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:325
msgid ""
"Encoders have names like \"\"hm2_I<E<lt>BoardTypeE<gt>>."
"I<E<lt>BoardNumE<gt>>.encoder.I<E<lt>InstanceE<gt>>\".\".  \"Instance\" is a "
"two-digit number that corresponds to the HostMot2 encoder instance number.  "
"There are \"num_encoders\" instances, starting with 00."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:330
msgid ""
"So, for example, the HAL pin that has the current position of the second "
"encoder of the first 5i25 board is: hm2_5i25.0.encoder.01.position (this "
"assumes that the firmware in that board is configured so that this HAL "
"object is available)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:334
msgid ""
"Each encoder uses three or four input IO pins, depending on how the firmware "
"was compiled.  Three-pin encoders use A, B, and Index (sometimes also known "
"as Z).  Four-pin encoders use A, B, Index, and Index-mask."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:342
#, no-wrap
msgid "(s32 out) count"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:345
msgid "Number of encoder counts since the previous reset."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:346
#, no-wrap
msgid "(float out) position"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:349
msgid "Encoder position in position units (count / scale)."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:350
#, no-wrap
msgid "(float out) position-latched"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:353
msgid "Encoder latched position in position units (count / scale)."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:354
#, no-wrap
msgid "(float out) velocity"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:358
msgid "Estimated encoder velocity in position units per second."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:359
#, no-wrap
msgid "(float out) velocity-rpm"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:363
msgid "Estimated encoder velocity in position units per minute."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:364
#, no-wrap
msgid "(bit in) reset"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:370
msgid ""
"When this pin is True, the count and position pins are set to 0.  (The value "
"of the velocity pin is not affected by this.)  The driver does not reset "
"this pin to FALSE after resetting the count to 0, that is the user's job."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:371 man/man9/hostmot2.9:1164
#, no-wrap
msgid "(bit in/out) index-enable"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:377
msgid ""
"When this pin is set to True, the count (and therefore also position) are "
"reset to zero on the next Index (Phase-Z) pulse.  At the same time, index-"
"enable is reset to zero to indicate that the pulse has occurred."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:378 man/man9/hostmot2.9:1177
#, no-wrap
msgid "(bit in/out) probe-enable"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:384
msgid ""
"When this pin is set to True, the encoder count (and therefore also "
"position) are latched on the the next probe active edge.  At the same time, "
"probe-enable is reset to zero to indicate that latch event has occurred."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:385 man/man9/hostmot2.9:1184
#, no-wrap
msgid "(bit r/w) probe-invert"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:390
msgid ""
"If set to True, the rising edge of the probe input pin triggers the latch "
"event (if probe-enable is True).  If set to False, the falling edge triggers."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:391
#, no-wrap
msgid "(s32 out) rawcounts"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:395
msgid ""
"Total number of encoder counts since the start, not adjusted for index or "
"reset."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:396
#, no-wrap
msgid "(bit out) input-a, input-b, input-index"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:399
msgid "Real time filtered values of A,B,Index encoder signals"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:400
#, no-wrap
msgid "(bit in) quad-error-enable"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:404
msgid ""
"When this pin is True quadrature error reporting is enabled.  when False, "
"existing quadrature errors are cleared and error reporting is disabled."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:405
#, no-wrap
msgid "(bit out) quad-error"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:409
msgid ""
"This bit indicates that a quadrature sequence error has been detected.  It "
"can only be set if the corresponding quad-error-enable bit is True."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:410
#, no-wrap
msgid "(u32 in) hm2_XXXX.N.encoder.sample-frequency"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:414
msgid ""
"This is the sample frequency that determines all standard encoder channels "
"digital filter time constant (see filter parameter)."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:415
#, no-wrap
msgid "(u32 in) hm2_XXXX.N.encoder.muxed-sample-frequency"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:420
msgid ""
"This is the sample frequency that determines all muxed encoder channels "
"digital filter time constant (see filter parameter).  This also sets the "
"encoder multiplexing frequency."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:421
#, no-wrap
msgid "(float in) hm2_XXXX.N.encoder.muxed-skew"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:426
msgid ""
"This sets the muxed encoder sample time delay (in ns) from the multiplex "
"signal.  Setting this properly can increase the usable multiplex frequency "
"and compensate for cable delays (suggested value is 3* cable length in feet "
"+20)."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:427
#, no-wrap
msgid "(bit in) hm2_XXXX.N.encoder.hires-timestamp"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:433
msgid ""
"When this pin is True the encoder timestamp counter frequency is ~10 MHz "
"when False the timestamp counter frequency is ~2 MHz. This should be set "
"True for frequency counting applications to improve the resolution. It "
"should be set False when servo thread periods longer than 1 ms are used."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:435 man/man9/hostmot2.9:598 man/man9/hostmot2.9:758
#: man/man9/hostmot2.9:832 man/man9/hostmot2.9:930 man/man9/hostmot2.9:1632
#: man/man9/hostmot2.9:1680
#, no-wrap
msgid "Parameters:"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:436
#, no-wrap
msgid "(float r/w) scale"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:439
msgid "Converts from \"count\" units to \"position\" units."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:440 man/man9/hostmot2.9:1171
#, no-wrap
msgid "(bit r/w) index-invert"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:445
msgid ""
"If set to True, the rising edge of the Index input pin triggers the Index "
"event (if index-enable is True).  If set to False, the falling edge triggers."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:446
#, no-wrap
msgid "(bit r/w) index-mask"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:451
msgid ""
"If set to True, the Index input pin only has an effect if the Index-Mask "
"input pin is True (or False, depending on the index-mask-invert pin below)."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:452
#, no-wrap
msgid "(bit r/w) index-mask-invert"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:457
msgid ""
"If set to True, Index-Mask must be False for Index to have an effect.  If "
"set to False, the Index-Mask pin must be True."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:458
#, no-wrap
msgid "(bit r/w) counter-mode"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:463
msgid ""
"Set to False (the default) for Quadrature.  Set to True for Step/Dir (in "
"which case Step is on the A pin and Dir is on the B pin)."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:464
#, no-wrap
msgid "(bit r/w) filter"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:472
msgid ""
"If set to True (the default), the quadrature counter needs 15 sample clocks "
"to register a change on any of the three input lines (any pulse shorter than "
"this is rejected as noise).  If set to False, the quadrature counter needs "
"only 3 clocks to register a change.  The default encoder sample clock runs "
"at approximately 25 to 33 MHz but can be changed globally with the sample-"
"frequency or muxed-sample-frequency pin."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:473
#, no-wrap
msgid "(float r/w) vel-timeout"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:482
msgid ""
"When the encoder is moving slower than one pulse for each time that the "
"driver reads the count from the FPGA (in the hm2_read() function), the "
"velocity is harder to estimate.  The driver can wait several iterations for "
"the next pulse to arrive, all the while reporting the upper bound of the "
"encoder velocity, which can be accurately guessed.  This parameter specifies "
"how long to wait for the next pulse, before reporting the encoder stopped.  "
"This parameter is in seconds."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:483
#, no-wrap
msgid "(s32 r/w) hm2_XXXX.N.encoder.timer-number (default: -1)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:489
msgid ""
"Sets the hm2dpll timer instance to be used to latch encoder counts.  A "
"setting of -1 does not latch encoder counts.  A setting of 0 latches at the "
"same time as the main hostmot2 read.  A setting of 1..4 uses a time offset "
"from the main hostmot2 read according to the dpll's timer-us setting."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:494
msgid ""
"Typically, timer-us should be a negative number with a magnitude larger than "
"the largest latency (e.g., -100 for a system with mediocre latency, -50 for "
"a system with good latency).  A negative number specifies latching the "
"specified time before the nominal hostmot2 read time."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:497
msgid ""
"If no DPLL module is present in the FPGA firmware, or if the encoder module "
"does not support DPLL, then this pin is not created."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:500
msgid ""
"When available, this feature should typically be enabled.  Doing so "
"generally reduces following errors."
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:501
#, no-wrap
msgid "Synchronous Serial Interface (SSI)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:503
msgid "(Not to be confused with the Smart Serial Interface)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:513
msgid ""
"One pin is created for each SSI instance regardless of data format: (bit, "
"in) hm2_XXXX.NN.ssi.MM.data-incomplete This pin will be set \"True\" if the "
"module was still transferring data when the value was read. When this "
"problem exists there will also be a limited number of error messages printed "
"to the UI. This pin should be used to monitor whether the problem has been "
"addressed by config changes.  Solutions to the problem dpend on whether the "
"encoder read is being triggered by the hm2dpll phase-locked-loop timer "
"(described above) or by the trigger-encoders function (described below)."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:518
#, no-wrap
msgid ""
"The names of the pins created by the SSI module will depend entirely on the\n"
"format string for each channel specified in the loadrt command line.\n"
"A typical format string might be\n"
" B<ssi_chan_0=error%1bposition%24g>.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:522
msgid ""
"This would interpret the LSB of the bit-stream as a bit-type pin named "
"\"error\" and the next 24 bits as a Gray-coded encoder counter. The encoder-"
"related HAL pins would all begin with \"position\"."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:525
msgid ""
"There should be no spaces in the format string, as this is used as a "
"delimiter by the low-level code."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:530
msgid ""
"The format consists of a string of alphanumeric characters that will form "
"the HAL pin names, followed by a % symbol, a bit-count and a data type. All "
"bits in the packet must be defined, even if they are not used. There is a "
"limit of 64 bits in total."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:532
msgid "The valid format characters and the pins they create are:"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:532
#, no-wrap
msgid "p: (Pad). Does not create any pins, used to ignore sections of the bit stream that are not required."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:534
#, no-wrap
msgid "b: (Boolean)."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:540
#, no-wrap
msgid ""
"  (bit, out) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>. If any bits in the designated field width\n"
"are non-zero then the HAL pin will be \"True\".\n"
"  (bit, out) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>-not. An inverted version of the above, the\n"
"HAL pin will be \"True\" if all bits in the field are zero.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:540 man/man9/hostmot2.9:620
#, no-wrap
msgid "u: (Unsigned)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:547
#, no-wrap
msgid ""
"  (float, out) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>. The value of the bits interpreted as an\n"
"unsigned integer then scaled such that the pin value will equal the scalemax\n"
"parameter value when all bits are high. (for example if the field is 8 bits\n"
"wide and the scalmax parameter was 20 then a value of 255 would return 20, and\n"
"0 would return 0.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:547 man/man9/hostmot2.9:624
#, no-wrap
msgid "s: (Signed)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:552
#, no-wrap
msgid ""
"  (float, out) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>. The value of the bits interpreted as a\n"
"2s complement signed number then scaled similarly to the unsigned variant,\n"
"except symmetrical around zero.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:552
#, no-wrap
msgid "f: (bitField)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:558
#, no-wrap
msgid ""
"  (bit, out) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>-NN. The value of each individual bit in the\n"
"data field. NN starts at 00 up to the number of bits in the field.\n"
"  (bit, out) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>-NN-not. An inverted version of the individual\n"
"bit values.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:558
#, no-wrap
msgid "e: (Encoder)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:577
#, no-wrap
msgid ""
" (s32, out) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>.count. The lower 32 bits of the\n"
"total encoder counts. This value is reset both by the ...reset and the ...index-enable\n"
"pins.\n"
" (s32, out) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>.rawcounts. The lower 32 bits of\n"
"the total encoder counts. The pin is not affected by reset and index.\n"
" (float, out) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>.position. The encoder position\n"
"in machine units. This is calculated from the full 64-bit buffers so will show\n"
"a True value even after the counts pins have wrapped. It is zeroed by reset and\n"
"index enable.\n"
" (bit, IO) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>.index-enable. When this pin is set\n"
"\"True\" the module will wait until the raw encoder counts next passes through an\n"
"integer multiple of the number of counts specified by counts-per-rev parameter\n"
"and then it will zero the counts and position pins, and set the index-enable\n"
"pin back to \"False\" as a signal to the system that \"index\" has been passed.\n"
"this pin is used for spindle-synchronised motion and index-homing.\n"
" (bit, in) (bit, out) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>.reset. When this pin is set high\n"
"the counts and position pins are zeroed.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:577
#, no-wrap
msgid "h: (Split encoder, high-order bits)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:583
msgid ""
"Some encoders (Including Fanuc) place the encoder part-turn counts and full-"
"turn counts in separate, non-contiguous fields. This tag defines the high-"
"order bits of such an encoder module. There can be only one h and one l tag "
"per channel, the behaviour with multiple such channels will be undefined."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:583
#, no-wrap
msgid "l: (Split encoder, low-order bits)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:586
msgid "Low order bits (see \"h\")"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:586
#, no-wrap
msgid "g: (Gray-code). This is a modifier that indicates that the following"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:590
msgid ""
"format string is gray-code encoded. This is only valid for encoders (e, h l) "
"and unsigned (u) data types."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:590
#, no-wrap
msgid "m: (Multi-turn). This is a modifier that indicates that the following"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:597
msgid ""
"format string is a multi-turn encoder. This is only valid for encoders (e, h "
"l).  A jump in encoder position of more than half the full scale is "
"interpreted as a full turn and the counts are wrapped. With a multi-turn "
"encoder this is only likely to be a data glitch and will lead to a permanent "
"offset. This flag endures that such encoders will never wrap."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:601
msgid "Two parameters is universally created for all SSI instances"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:602
#, no-wrap
msgid "(float r/w) hm2_XXXX.N.ssi.MM.frequency-khz"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:606
msgid ""
"This parameter sets the SSI clock frequency. The units are kHz, so 500 will "
"give a clock frequency of 500,000 Hz."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:607
#, no-wrap
msgid "(s32 r/w) hm2_XXXX.N.ssi.timer-number-num"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:614
msgid ""
"This parameter allocates the SSI module to a specific hm2dpll timer "
"instance.  This pin is only of use in firmwares which contain a hm2dpll "
"function and will default to 1 in cases where there is such a function, and "
"0 if there is not.  The pin can be used to disable reads of the encoder, by "
"setting to a nonexistent timer number, or to 0."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:616
msgid ""
"Other parameters depend on the data types specified in the config string."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:616
#, no-wrap
msgid "p: (Pad) No Parameters."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:618
#, no-wrap
msgid "b: (Boolean) No Parameters."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:624
#, no-wrap
msgid ""
"(float, r/w) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>-scalemax. The scaling factor for the\n"
" channel.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:628
msgid ""
"(float, r/w) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>-scalemax. The scaling factor "
"for the channel."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:628
#, no-wrap
msgid "f: (bitField): No parameters."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:630
#, no-wrap
msgid "e: (Encoder):"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:640
#, no-wrap
msgid ""
" (float, r/w) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>.scale: (float, r.w) The encoder scale in\n"
"counts per machine unit.\n"
" (u32, r/w) hm2_XXXX.N.ssi.MM.E<lt>nameE<gt>.counts-per-rev (u32, r/w) Used to emulate\n"
"the index behaviour of an incremental+index encoder. This would normally be set\n"
"to the actual counts per rev of the encoder, but can be any whole number of\n"
"revs. Integer divisors or multipliers of the true PPR might be useful for\n"
"index-homing. Non-integer factors might be appropriate where there is a\n"
"synchronous drive ratio between the encoder and the spindle or ballscrew.\n"
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:642
#, no-wrap
msgid "BiSS"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:645
msgid ""
"BiSS is a bidirectional variant of SSI. Currently only a single direction is "
"supported by LinuxCNC (encoder to PC)."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:647
msgid "One pin is created for each BiSS instance regardless of data format:"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:656
msgid ""
"(bit, in) hm2_XXXX.NN.biss.MM.data-incomplete This pin will be set \"True\" "
"if the module was still transferring data when the value was read. When this "
"problem exists there will also be a limited number of error messages printed "
"to the UI. This pin should be used to monitor whether the problem has been "
"addressed by config changes.  Solutions to the problem dpend on whether the "
"encoder read is being triggered by the hm2dpll phase-locked-loop timer "
"(described above) or by the trigger-encoders function (described below)."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:664
msgid ""
"The names of the pins created by the BiSS module will depend entirely on the "
"format string for each channel specified in the loadrt command line and "
"follow closely the format defined above for SSI.  Currently data packets of "
"up to 96 bits are supported by the LinuxCNC driver, although the Mesa "
"Hostmot2 module can handle 512 bit packets. It should be possible to extend "
"the number of packets supported by the driver if there is a requirement to "
"do so."
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:665
#, no-wrap
msgid "Fanuc encoder"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:681
#, no-wrap
msgid ""
"The pins and format specifier for this module are identical to the SSI module\n"
"described above, except that at least one pre-configured format is provided.\n"
"A modparam of fanuc_chan_N=AA64 (case sensitive) will configure the channel for\n"
"a Fanuc Aa64 encoder. The pins created are:\n"
" hm2_XXXX.N.fanuc.MM.batt                indicates battery state\n"
" hm2_XXXX.N.fanuc.MM.batt-not            inverted version of above\n"
" hm2_XXXX.N.fanuc.MM.comm                The 0-1023 absolute output for motor commutation\n"
" hm2_XXXX.N.fanuc.MM.crc                 The CRC checksum. Currently HAL has no way to use this\n"
" hm2_XXXX.N.fanuc.MM.encoder.count       Encoder counts\n"
" hm2_XXXX.N.fanuc.MM.encoder.index-enable Simulated index. Set by counts-per-rev parameter\n"
" hm2_XXXX.N.fanuc.MM.encoder.position    Counts scaled by the ...scale parameter\n"
" hm2_XXXX.N.fanuc.MM.encoder.rawcounts   Raw counts, unaffected by reset or index\n"
" hm2_XXXX.N.fanuc.MM.encoder.reset       If high/True then counts and position = 0\n"
" hm2_XXXX.N.fanuc.MM.valid               Indicates that the absolute position is valid\n"
" hm2_XXXX.N.fanuc.MM.valid-not           Inverted version\n"
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:682
#, no-wrap
msgid "resolver"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:691
msgid ""
"Resolvers have names like hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>."
"resolver.I<E<lt>InstanceE<gt>>.  E<lt>InstanceE<gt> is a 2-digit number, "
"which for the 7i49 board will be between 00 and 05. This function only works "
"with the Mesa Resolver interface boards (of which the 7i49 is the only "
"example at the time of writing). This board uses an SPI interface to the "
"FPGA card, and will only work with the correct firmware.  The pins allocated "
"will be listed in the dmesg output, but are unlikely to be usefully probed "
"with HAL tools."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:694
#, no-wrap
msgid "(float, out) angle"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:698
msgid ""
"This pin indicates the angular position of the resolver. It is a number "
"between 0 and 1 for each electrical rotation."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:699
#, no-wrap
msgid "(float, out) position"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:704
msgid ""
"Calculated from the number of complete and partial revolutions since "
"startup, reset, or index-reset multiplied by the scale parameter."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:705
#, no-wrap
msgid "(float, out) velocity"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:709
msgid ""
"Calculated from the rotational velocity and the velocity-scale parameter. "
"The default scale is electrical rotations per second."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:710
#, no-wrap
msgid "(float, out) velocity-rpm"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:713
msgid "Simply velocity scaled by a factor of 60 for convenience."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:715
#, no-wrap
msgid "(s32, out) count"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:719
msgid ""
"This pins outputs a simulated encoder count at 2^24 counts per rev (16777216 "
"counts)."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:720
#, no-wrap
msgid "(s32, out) rawcounts"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:725
msgid ""
"This is identical to the counts pin, except it is not reset by the \"index\" "
"or \"reset\" pins. This is the pin which would be linked to the bldc HAL "
"component if the resolver was being used to commutate a motor."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:726
#, no-wrap
msgid "(bit, in) reset"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:729
msgid "Resets the position and counts pins to zero immediately."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:730
#, no-wrap
msgid "(bit, in)  joint-pos-fb"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:744
msgid ""
"The Mesa resolver driver has the capability of emulating an absolute encoder "
"using a position file (see the INI-config section of the manual)  and the "
"single-turn absolute operation of resolvers.  At startup, and only if the "
"B<use-position-file> parameter is set to \"True\" the resolver driver will "
"wait for a value to be written by the system to the axis.N.joint-pos-fb pin "
"(which must be netted to this resolver pin)  and will calculate the number "
"of full turns that best matches the current reolver position. It will then "
"pre-load the driver output with this offset. This should only be used on "
"systems where axis movement in the unpowered state is unlikely. This feature "
"will only work properly if the machine is initially homed to \"index\" and "
"if the axis home positions are exactly zero."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:745
#, no-wrap
msgid "(bit, in/out) index-enable"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:751
msgid ""
"When this pin is set high the position and counts pins will be reset the "
"next time the resolver passes through the zero position.  At the same time "
"the pin is driven low to indicate to connected modules that the index has "
"been seen, and that the counters have been reset."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:752
#, no-wrap
msgid "(bit, out) error"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:756
msgid ""
"Indicates an error in the particular channel. If this value is \"True\" then "
"the reported position and velocity are invalid."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:758
#, no-wrap
msgid "(float, read/write) scale"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:762
msgid ""
"The position scale, in machine units per resolver electrical revolution."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:763
#, no-wrap
msgid "(float, read/write) velocity-scale"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:768
msgid ""
"The conversion factor between resolver rotation speed and machine velocity. "
"A value of 1 will typically give motor speed in rps, a value of 0.01666667 "
"will give (approximate) RPM."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:769
#, no-wrap
msgid "(u32, read/write) index-divisor (default 1)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:779
msgid ""
"The resolver component emulates an index at a fixed point in the sin/cos "
"cycle.  Some resolvers have multiple cycles per rev (often related to the "
"number of pole-pairs on the attached motor). LinuxCNC requires an index once "
"per revolution for proper threading etc.  This parameter should be set to "
"the number of cycles per rev of the resolver.  CAUTION: Which pseudo-index "
"is used will not necessarily be consistent between LinuxCNC runs. Do not "
"expect to re-start a thread after restarting LinuxCNC.  It is not "
"appropriate to use this parameter for index-homing of axis drives."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:780
#, no-wrap
msgid "(float, read/write) excitation-khz"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:791
#, no-wrap
msgid ""
"This pin sets the excitation frequency for\n"
"the resolver. This pin is module-level rather than instance-level as all\n"
"resolvers share the same excitation frequency.\n"
" Valid values are 10 (~10 kHz), 5 (~5 kHz) and 2.5 (~2.5 kHz). The\n"
"actual frequency depends on the FPGA frequency, and they correspond to\n"
"CLOCK_LOW/5000, CLOCK_LOW/10000 and CLOCK_LOW/20000 respectively.\n"
"The parameter will be set to the closest available of the three frequencies.\n"
" A value of -1 (the default) indicates that the current setting should be\n"
"retained.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:792
#, no-wrap
msgid "(bit, read/write) use-position-file"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:795
msgid "In conjunction with B<joint-pos-fb> (qv) emulate absolute encoders."
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:798
#, no-wrap
msgid "pwmgen"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:804
msgid ""
"pwmgens have names like \"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>."
"pwmgen.I<E<lt>InstanceE<gt>>\".  \"Instance\" is a two-digit number that "
"corresponds to the HostMot2 pwmgen instance number.  There are \"num_pwmgens"
"\" instances, starting with 00."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:809
msgid ""
"So, for example, the HAL pin that enables output from the fourth pwmgen of "
"the first 7i43 board is: hm2_7i43.0.pwmgen.03.enable (this assumes that the "
"firmware in that board is configured so that this HAL object is available)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:812
msgid ""
"In HM2, each pwmgen uses three output IO pins: Not-Enable, Out0, and Out1."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:815
msgid ""
"The function of the Out0 and Out1 IO pins varies with output-type parameter "
"(see below)."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:818
msgid ""
"The hm2 pwmgen representation is similar to the software pwmgen component.  "
"Each pwmgen instance has the following pins and parameters:"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:821 man/man9/hostmot2.9:916 man/man9/hostmot2.9:1145
#, no-wrap
msgid "(bit input) enable"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:826
msgid ""
"If True, the pwmgen will set its Not-Enable pin False and output its "
"pulses.  If \"enable\" is False, pwmgen will set its Not-Enable pin True and "
"not output any signals."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:827
#, no-wrap
msgid "(float input) value"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:830
msgid "The current pwmgen command value, in arbitrary units."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:833 man/man9/hostmot2.9:945 man/man9/hostmot2.9:1085
#, no-wrap
msgid "(float rw) scale"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:839
msgid ""
"Scaling factor to convert \"value\" from arbitrary units to duty cycle: dc = "
"value / scale.  Duty cycle has an effective range of -1.0 to +1.0 inclusive, "
"anything outside that range gets clipped.  The default scale is 1.0."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:840
#, no-wrap
msgid "(s32 rw) output-type"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:848
msgid ""
"This emulates the output_type load-time argument to the software pwmgen "
"component.  This parameter may be changed at runtime, but most of the time "
"you probably want to set it at startup and then leave it alone.  Accepted "
"values are 1 (PWM on Out0 and Direction on Out1), 2 (Up on Out0 and Down on "
"Out1), 3 (PDM mode, PDM on Out0 and Dir on Out1), and 4 (Direction on Out0 "
"and PWM on Out1, \"for locked antiphase\")."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:849
#, no-wrap
msgid "(bit input) offset-mode"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:856
msgid ""
"When True, offset-mode modifies the PWM behavior so that a PWM value of 0 "
"results in a 50% duty cycle PWM output, a -1 value results in a 0% duty "
"cycle and +1 results in a 100% duty cycle (with default scaling)  This mode "
"is used by some PWM motor drives and PWM to analog converters.  Typically "
"the direction signal is not used in this mode."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:860
msgid ""
"In addition to the per-instance HAL Parameters listed above, there are a "
"couple of HAL Parameters that affect all the pwmgen instances:"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:861
#, no-wrap
msgid "(u32 rw) pwm_frequency"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:874
msgid ""
"This specifies the PWM frequency, in Hz, of all the pwmgen instances running "
"in the PWM modes (modes 1 and 2).  This is the frequency of the variable-"
"duty-cycle wave.  Its effective range is from 1 Hz up to 386 kHz.  Note that "
"the max frequency is determined by the ClockHigh frequency of the Anything "
"IO board; the 5i25 and 7I92 both have a 200 MHz clock, resulting in a 386 "
"kHz max PWM frequency.  Other boards may have different clocks, resulting in "
"different max PWM frequencies.  If the user attempts to set the frequency "
"too high, it will be clipped to the max supported frequency of the board.  "
"Frequencies below about 5 Hz are not terribly accurate, but above 5 Hz "
"they're pretty close.  The default pwm_frequency is 20,000 Hz (20 kHz)."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:875
#, no-wrap
msgid "(u32 rw) pdm_frequency"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:892
msgid ""
"This specifies the PDM frequency, in Hz, of all the pwmgen instances running "
"in PDM mode (mode 3).  This is the \"pulse slot frequency\"; the frequency "
"at which the pdm generator in the AnyIO board chooses whether to emit a "
"pulse or a space.  Each pulse (and space) in the PDM pulse train has a "
"duration of 1/pdm_frequency seconds.  For example, setting the pdm_frequency "
"to 2e6 (2 MHz) and the duty cycle to 50% results in a 1 MHz square wave, "
"identical to a 1 MHz PWM signal with 50% duty cycle.  The effective range of "
"this parameter is from about 1525 Hz up to just under 200 MHz.  Note that "
"the max frequency is determined by the ClockHigh frequency of the Anything "
"IO board; the 5i25 and 7i92 both have a 100 MHz clock, resulting in a 100 "
"MHz max PDM frequency.  Other boards may have different clocks, resulting in "
"different max PDM frequencies.  If the user attempts to set the frequency "
"too high, it will be clipped to the max supported frequency of the board.  "
"The default pdm_frequency is 20,000 Hz (20 kHz)."
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:893
#, no-wrap
msgid "3ppwmgen"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:909
msgid ""
"Three-Phase PWM generators (3pwmgens) are intended for controlling the high-"
"side and low-side gates in a 3-phase motor driver. The function is included "
"to support the Mesa motor controller daughter-cards but can be used to "
"control an IGBT or similar driver directly.  3pwmgens have names like "
"\"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.3pwmgen."
"I<E<lt>InstanceE<gt>>\" where E<lt>InstanceE<gt> is a 2-digit number. There "
"will be num_3pwmgens instances, starting at 00.  Each instance allocates 7 "
"output and one input pins on the Mesa card connectors.  Outputs are: PWM A, "
"PWM B, PWM C, /PWM A, /PWM B, /PWM C, Enable. The first three pins are the "
"high side drivers, the second three are their complementary low-side "
"drivers. The enable bit is intended to control the servo amplifier.  The "
"input bit is a fault bit, typically wired to over-current detection. When "
"set the PWM generator is disabled.  The three phase duty-cycles are "
"individually controllable from -Scale to +Scale.  Note that 0 corresponds to "
"a 50% duty cycle and this is the inialization value."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:915
msgid ""
"(float input) A-value, B-value, C-value: The PWM command value for each "
"phase, limited to +/- \"scale\". Defaults to zero which is 50% duty cycle on "
"high-side and low-sidepins (but see the \"deadtime\" parameter)."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:923
msgid ""
"When high the PWM is enabled as long as the fault bit is not set by the "
"external fault input pin. When low the PWM is disabled, with both high- side "
"and low-side drivers low. This is not the same as 0 output (50% duty cycle "
"on both sets of pins) or negative full scale (where the low side drivers are "
"\"on\" 100% of the time)."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:924
#, no-wrap
msgid "(bit output) fault"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:928
msgid ""
"Indicates the status of the fault bit. This output latches high once set by "
"the physical fault pin until the \"enable\" pin is set to high."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:931
#, no-wrap
msgid "(u32 rw) deadtime"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:944
msgid ""
"Sets the dead-time between the high-side driver turning off and the low-side "
"driver turning on and vice-versa. Deadtime is subtracted from on time and "
"added to off time symmetrically. For example with 20 kHz PWM (50 uSec "
"period), 50% duty cycle and zero dead time, the PWM and NPWM outputs would "
"be square waves (NPWM being inverted from PWM) with high times of 25 uS. "
"With the same settings but 1 uS of deadtime, the PWM and NPWM outputs would "
"both have high times of 23 uS (25 - (2X 1 uS), 1 uS per edge).  The value is "
"specified in nS and defaults to a rather conservative 5000nS. Setting this "
"parameter to too low a value could be both expensive and dangerous as if "
"both gates are open at the same time there is effectively a short circuit "
"across the supply."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:949
msgid ""
"Sets the half-scale of the specified 3-phase PWM generator.  PWM values from "
"-scale to +scale are valid. Default is +/- 1.0"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:950
#, no-wrap
msgid "(bit rw) fault-invert"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:956
msgid ""
"Sets the polarity of the fault input pin. A value of 1 means that a fault is "
"triggered with the pin high, and 0 means that a fault it triggered when the "
"pin is pulled low. Default 0, fault = low so that the PWM works with the "
"fault pin unconnected."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:957
#, no-wrap
msgid "(u32 rw) sample-time"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:962
msgid ""
"Sets the time during the cycle when an ADC pulse is generated.  0 = start of "
"PWM cycle and 1 = end. Not currently useful to LinuxCNC. Default 0.5."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:965
msgid ""
"In addition the per-instance parameters above there is the following "
"parameter that affects all instances:"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:966
#, no-wrap
msgid "(u32 rw) frequency"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:970
msgid ""
"Sets the master PWM frequency. Maximum is approx 48 kHz, minimum is 1 kHz. "
"Defaults to 20 kHz."
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:971
#, no-wrap
msgid "oneshot"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:980
msgid ""
"The oneshot is a hardware one-shot device suitable for various timing, "
"delay, signal conditioning, PWM generation, and watchdog functions. The "
"oneshot module includes 2 timers to allow variable pulse delays for "
"applications like phase control.  Trigger sources can be software, external "
"inputs, the DPLL timer, a built in rate generator or the other timer.  "
"Oneshots have names like \"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>."
"oneshot.I<E<lt>InstanceE<gt>>\" where E<lt>InstanceE<gt> is a 2-digit "
"number. There will be num_oneshots instances, starting at 00. Each instance "
"allocates up to two input and two output pins."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:983
#, no-wrap
msgid "(float rw) width1"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:986
msgid "Sets the pulse width of timer1 in ms. Default is 1 ms (1/1000 s)."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:987
#, no-wrap
msgid "(float rw) width2 "
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:990
msgid "Sets the pulse width of timer2 in ms. Default is 1 ms (1/1000 s)."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:991
#, no-wrap
msgid "(float rw) filter1"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:996
msgid ""
"Sets digital filter time constant for timer1's external trigger input Filter "
"time is in ms. Default filter time constant time is 0.1 ms.  External "
"trigger response will be delayed by the filter time setting"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:997
#, no-wrap
msgid "(float rw) filter2"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1002
msgid ""
"Sets digital filter time constant for timer2's external trigger input Filter "
"time is in ms. Default filter time constant time is 0.1 ms.  External "
"trigger response will be delayed by the filter time setting"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1003 man/man9/hostmot2.9:1071
#, no-wrap
msgid "(float rw) rate"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1006
msgid "Sets the frequency of the built in rate generator (in Hz)"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1007
#, no-wrap
msgid "(u32 rw) trigger_select1,trigger_select2 "
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1011
msgid ""
"Sets the trigger source for timer1,timer2 respectively.  Trigger sources are:"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1019
#, no-wrap
msgid ""
"0 Trigger disabled\n"
"1 Software trigger: triggered when hal pin swtrigger1 is true\n"
"2 External hardware: trigger\n"
"3 DPLL trigger: triggered by selected DPLL timer\n"
"4 Rate trigger: triggered by build in rate generator.\n"
"5 Timer1 trigger: triggered by timer1 output\n"
"6 Timer2 trigger: triggered by timer2 output\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1020
#, no-wrap
msgid "(bit rw) trigger_on_rise1,trigger_on_rise2"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1024
#, no-wrap
msgid ""
"When true,trigger timer1,timer2 respectively on the\n"
"rising edge of the trigger source.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1025
#, no-wrap
msgid "(bit rw) trigger_on_fall1,trigger_on_fall2"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1029
#, no-wrap
msgid ""
"When true, trigger timer1,timer2 respectively on the\n"
"falling edge of the trigger source.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1030
#, no-wrap
msgid "(bit rw) retriggerable1,retriggerable2"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1038
#, no-wrap
msgid ""
"When true, the associated timer is retriggerable, meaning\n"
"the timer will reset to full time on a trigger event\n"
"even during the output pulse period.\n"
"When false the timer is not retriggerable, meaning\n"
"it will ignore trigger events during the output \n"
"pulse period.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1039
#, no-wrap
msgid "(bit rw) enable1,enable2"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1043
#, no-wrap
msgid ""
"trigger enable for timer1 and timer2 respectively\n"
"True to enable.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1044
#, no-wrap
msgid "(bit rw) reset1,reset2"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1048
#, no-wrap
msgid ""
"If true, resets timer1,timer2 respectively,\n"
"aborting any pulse in progress.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1049
#, no-wrap
msgid "(bit ro) out1,out2"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1052
#, no-wrap
msgid "Pulse output status bit for timer 1,timer2\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1053
#, no-wrap
msgid "(bit ro) exttrigger1,exttrigger2"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1057
#, no-wrap
msgid ""
"External trigger input status bits for timer 1,timer2.\n"
"These monitor the filtered inputs.\n"
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:1059
#, no-wrap
msgid "rcpwmgen"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1068
#, no-wrap
msgid ""
"The rcpwmgen is a simple PWM generator optimized for use with standard RC servos\n"
"that use pulse width to determine position.\n"
"rcpwmgens have names like \"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.rcpwmgen.I<E<lt>InstanceE<gt>>\"\n"
"where E<lt>InstanceE<gt> is a 2-digit number. There will be num_rcpwmgens instances,\n"
"starting at 00. Each instance allocates a single output pin. Unlike the standard PWM generator,\n"
"the rcpwmgen output is specified in width rather than duty cycle so the pulse width is\n"
"independent of the operating frequency. Resolution is approximately 1/2000 for standard\n"
"1 to 2 mS range RC servos.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1070 man/man9/hostmot2.9:1110 man/man9/hostmot2.9:1439
#: man/man9/hostmot2.9:1497 man/man9/hostmot2.9:1515
#, no-wrap
msgid "Pins:\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1075
#, no-wrap
msgid ""
"Sets the master  RC PWM frequency. Maximum is 1 kHz, minimum\n"
"is .01 Hz. Defaults to 50 Hz.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1076
#, no-wrap
msgid "(float rw) width"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1079
#, no-wrap
msgid "Sets the per channel pulse width in (mS/scale)\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1080
#, no-wrap
msgid "(float rw) offset"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1084
#, no-wrap
msgid ""
"Sets the per channel pulse width offset in mS. This would be set to 1.5\n"
"mS for 1-2 mS servos for a 0 center position.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1090
#, no-wrap
msgid ""
"Sets the per channel pulse width scaling, for example, setting the scale to 90\n"
"and the offset to 1.5 mS would result in a position range of +-45 degrees\n"
"scale in degrees for 1-2 mS servos with a full motion range of 90 degrees\n"
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:1091
#, no-wrap
msgid "stepgen"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1097
#, no-wrap
msgid ""
"stepgens have names like\n"
"\"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.stepgen.I<E<lt>InstanceE<gt>>\".\n"
"\"Instance\" is a two-digit number that corresponds to the HostMot2 stepgen\n"
"instance number.  There are \"num_stepgens\" instances, starting with 00.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1102
#, no-wrap
msgid ""
"So, for example, the HAL pin that has the current position\n"
"feedback from the first stepgen of the second 5i22 board is:\n"
"hm2_5i22.1.stepgen.00.position-fb (this assumes that the firmware in\n"
"that board is configured so that this HAL object is available)\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1105
#, no-wrap
msgid ""
"Each stepgen uses between 2 and 8 IO pins.  The signals on these pins depends on\n"
"the step_type parameter (described below).\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1108
#, no-wrap
msgid ""
"The stepgen representation is modeled on the stepgen software component.\n"
"Each stepgen instance has the following pins and parameters:\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1111
#, no-wrap
msgid "(float input) position-cmd"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1116
#, no-wrap
msgid ""
"Target position of stepper motion, in\n"
"arbitrary position units.  This pin is only used when the stepgen is in\n"
"position control mode (control-type=0).\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1117
#, no-wrap
msgid "(float input) velocity-cmd"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1122
#, no-wrap
msgid ""
"Target velocity of stepper motion, in\n"
"arbitrary position units per second.  This pin is only used when the\n"
"stepgen is in velocity control mode (control-type=1).\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1123
#, no-wrap
msgid "(s32 output) counts"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1126
#, no-wrap
msgid "Feedback position in counts (number of steps).\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1127
#, no-wrap
msgid "(float output) position-fb"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1132
#, no-wrap
msgid ""
"Feedback position in scaled position units.\n"
"This is similar to \"counts/position_scale\", but has finer than\n"
"step resolution.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1133
#, no-wrap
msgid "(float output) position-latched"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1138
#, no-wrap
msgid ""
"latched-position in scaled position units.\n"
"This is similar to \"counts/position_scale\", but has finer than\n"
"step resolution.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1140
#, no-wrap
msgid "(float output) velocity-fb"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1144
#, no-wrap
msgid ""
"Feedback velocity in arbitrary position\n"
"units per second.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1152
#, no-wrap
msgid ""
"This pin enables the step generator instance.\n"
"When True, the stepgen instance works as expected.  When False, no steps\n"
"are generated and velocity-fb goes immediately to 0.  If the stepgen is\n"
"moving when enable goes False it stops immediately, without obeying the\n"
"maxaccel limit.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1153
#, no-wrap
msgid "(bit input) position-reset"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1158
#, no-wrap
msgid ""
"Resets position to 0 when True.\n"
"Useful for step/dir controlled spindles when switching between\n"
"spindle and joint modes.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1159
#, no-wrap
msgid "(bit input) control-type"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1163
#, no-wrap
msgid ""
"Switches between position control mode (0)\n"
"and velocity control mode (1).  Defaults to position control (0).\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1170
#, no-wrap
msgid ""
"When this pin is set to True, the step count\n"
"(and therefore also position) are reset to zero on the next stepgen\n"
"index pulse.  At the same time, index-enable is reset to zero to\n"
"indicate that the pulse has occurred.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1176
#, no-wrap
msgid ""
"If set to True, the rising edge of the index\n"
"input pin triggers the position clear event (if index-enable is True).\n"
"If set to False, the falling edge triggers.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1183
#, no-wrap
msgid ""
"When this pin is set to True, the step count\n"
"(and therefore also position) are latched on the the next stepgen\n"
"probe active edge.  At the same time, probe-enable is reset to zero to\n"
"indicate that a latch event has occurred.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1189
#, no-wrap
msgid ""
"If set to True, the rising edge of the probe\n"
"input pin triggers the latch event (if probe-enable is True).  If set\n"
"to False, the falling edge triggers.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1191 man/man9/hostmot2.9:1464
#, no-wrap
msgid "Parameters:\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1192
#, no-wrap
msgid "(float r/w) position-scale"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1196
#, no-wrap
msgid ""
"Converts from counts to position units.\n"
"position = counts / position_scale\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1197
#, no-wrap
msgid "(float r/w) maxvel"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1203
#, no-wrap
msgid ""
"Maximum speed, in position units per second.  If set\n"
"to 0, the driver will always use the maximum possible velocity based\n"
"on the current step timings and position-scale.  The max velocity will\n"
"change if the step timings or position-scale changes.  Defaults to 0.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1204
#, no-wrap
msgid "(float r/w) maxaccel"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1212
#, no-wrap
msgid ""
"Maximum acceleration, in position units per second\n"
"per second.  Defaults to 1.0.  If set to 0, the driver will not limit its\n"
"acceleration at all - this requires that the position-cmd or velocity-cmd\n"
"pin is driven in a way that does not exceed the machine's capabilities.\n"
"This is probably what you want if you are going to be using the LinuxCNC\n"
"trajectory planner to jog or run G-code.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1213
#, no-wrap
msgid "(u32 r/w) steplen"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1216
#, no-wrap
msgid "Duration of the step signal, in nanoseconds.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1217
#, no-wrap
msgid "(u32 r/w) stepspace"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1221
#, no-wrap
msgid ""
"Minimum interval between step signals, in\n"
"nanoseconds.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1222
#, no-wrap
msgid "(u32 r/w) dirsetup"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1226
#, no-wrap
msgid ""
"Minimum duration of stable Direction signal before\n"
"a step begins, in nanoseconds.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1227
#, no-wrap
msgid "(u32 r/w) dirhold"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1231
#, no-wrap
msgid ""
"Minimum duration of stable Direction signal after a\n"
"step ends, in nanoseconds.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1232
#, no-wrap
msgid "(u32 r/w) step_type"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1245
#, no-wrap
msgid ""
"Output format, like the step_type modparam to the\n"
"software stepgen(9) component.  0 = Step/Dir, 1 = Up/Down, 2 = Quadrature, 3+ =\n"
"table-lookup mode. In this mode the step_type parameter determines how long the\n"
"step sequence is. Additionally the stepgen_width parameter in the loadrt\n"
"config string must be set to suit the number of pins per stepgen required. Any\n"
"stepgen pins above this number will be available for GPIO. This mask defaults\n"
"to 2.\n"
"The maximum length is 16.\n"
"Note that Table mode is not enabled in all firmwares but if you see GPIO\n"
"pins between the stepgen instances in the dmesg/log hardware pin list then\n"
"the option may be available.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1251
#, no-wrap
msgid ""
"In Quadrature mode (step_type=2), the stepgen outputs one complete Gray\n"
"cycle (00 → 01 → 11 → 10 → 00) for each \"step\" it takes, so the scale\n"
"must be divided by 4 relative to standard step/dir. In table mode up to\n"
"6 IO pins are individually controlled in an arbitrary sequence up to 16\n"
"phases long.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1252
#, no-wrap
msgid "(bit input) swap_step_dir"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1256
#, no-wrap
msgid ""
"This swaps the step and direction outputs on the selected stepgen. This parameter\n"
"is only available if the firmware supports this option.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1257
#, no-wrap
msgid "(u32 r/w) table-data-N"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1265
#, no-wrap
msgid ""
"There are 4 table-data-N parameters, table-data-0 to table-data-3. These each\n"
"contain 4 bytes corresponding to 4 stages in the step sequence. For example\n"
"table-data-0 = 0x00000001 would set stepgen pin 0 (always called \"Step\" in\n"
"the dmesg output) on the first phase of the step sequence, and table-data-4 =\n"
"0x20000000 would set stepgen pin 6 (\"Table5Pin\" in the dmesg output) on the 16th\n"
"stage of the step sequence.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1266
#, no-wrap
msgid "(s32 r/w) hm2_XXXX.N.stepgen.timer-number (default: -1)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1272
#, no-wrap
msgid ""
"Sets the hm2dpll timer instance to be used to latch stepgen counts.  A setting\n"
"of -1 does not latch stepgen counts.  A setting of 0 latches at the same time\n"
"as the main hostmot2 read.  A setting of 1..4 uses a time offset from the main\n"
"hostmot2 read according to the dpll's timer-us setting.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1277
#, no-wrap
msgid ""
"Typically, timer-us should be a negative number with a magnitude larger than\n"
"the largest latency (e.g., -100 for a system with mediocre latency, -50 for a\n"
"system with good latency). A negative number specifies latching the specified\n"
"time before the nominal hostmot2 read time.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1280
#, no-wrap
msgid ""
"If no DPLL module is present in the FPGA firmware, or if the stepgen module\n"
"does not support DPLL, then this pin is not created.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1283
#, no-wrap
msgid ""
"When available, this feature should typically be enabled.  Doing so generally\n"
"reduces following errors.\n"
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:1284
#, no-wrap
msgid "Smart Serial Interface"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1292
#, no-wrap
msgid ""
"The Smart Serial Interface allows up to 32 different devices such as the Mesa\n"
"8i20 2.2 kW 3-phase drive or 7i64 48-way IO cards to be connected to a single\n"
"FPGA card.\n"
"The driver auto-detects the connected hardware port, channel and device type.\n"
"Devices can be connected in any order to any active channel of an active port.\n"
"(see the config modparam definition above).\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1294
#, no-wrap
msgid "For full details of the smart-serial devices see B<sserial>(9).\n"
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:1295
#, no-wrap
msgid "BSPI"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1299
#, no-wrap
msgid ""
"The BSPI (Buffered SPI) driver is unusual in that it does not create any HAL\n"
"pins. Instead the driver exports a set of functions that can be used by a sub-driver\n"
"for the attached hardware. Typically these would be written in the \"comp\"\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1307
#, no-wrap
msgid ""
"pre-processing language: see http://linuxcnc.org/docs/html/hal/comp.html or man\n"
"halcompile for further details. See mesa_7i65(9) and the source of mesa_7i65.comp for\n"
"details of a typical sub-driver.\n"
"See hm2_bspi_setup_chan(3hm2), hm2_bspi_write_chan(3hm2),\n"
"hm2_tram_add_bspi_frame(3hm2), hm2_allocate_bspi_tram(3hm2),\n"
"hm2_bspi_set_read_function(3hm2) and hm2_bspi_set_write_function(3hm2)\n"
"for the exported functions.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1311
#, no-wrap
msgid ""
"The names of the available channels are printed to standard output during the\n"
"driver loading process and take the form\n"
"hm2_E<lt>board nameE<gt>.E<lt>board indexE<gt>.bspi.E<lt>indexE<gt>, e.g., hm2_5i23.0.bspi.0.\n"
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:1312
#, no-wrap
msgid "UART"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1321
#, no-wrap
msgid ""
"The UART driver also does not create any HAL pins, instead it declares two\n"
"simple read/write functions and a setup function to be utilised by user-written\n"
"code.  Typically this would be written in the \"comp\"\n"
"pre-processing language: see http://linuxcnc.org/docs/html/hal/comp.html or man\n"
"halcompile for further details. See mesa_uart(9) and the source of mesa_uart.comp for\n"
"details of a typical sub-driver.\n"
"See hm2_uart_setup_chan(3hm2), hm2_uart_send(3hm2),\n"
"hm2_uart_read(3hm2) and hm2_uart_setup(3hm2).\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1325
#, no-wrap
msgid ""
"The names of the available uart channels are printed to standard output during the\n"
"driver loading process and take the form\n"
"hm2_E<lt>board nameE<gt>.E<lt>board indexE<gt>uart.E<lt>indexE<gt>, e.g., hm2_5i23.0.uart.0.\n"
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:1325
#, no-wrap
msgid "General Purpose I/O"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1333
#, no-wrap
msgid ""
"I/O pins on the board which are not used by a module instance are exported\n"
"to HAL as \"full\" GPIO pins.  Full GPIO pins can be configured at run-time\n"
"to be inputs, outputs, or open drains, and have a HAL interface that\n"
"exposes this flexibility.  IO pins that are owned by an active module\n"
"instance are constrained by the requirements of the owning module,\n"
"and have a restricted HAL interface.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1338
#, no-wrap
msgid ""
"GPIOs have names like \"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.gpio.I<E<lt>IONumE<gt>>\".\n"
"IONum is a three-digit number.  The mapping from IONum to connector and\n"
"pin-on-that-connector is written to the syslog when the driver loads,\n"
"and it is documented in Mesa's manual for the Anything I/O boards.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1343
#, no-wrap
msgid ""
"So, for example, the HAL pin that has the current inverted input value\n"
"read from GPIO 012 of the second 7i43 board is: hm2_7i43.1.gpio.012.in-not\n"
"(this assumes that the firmware in that board is configured so that this\n"
"HAL object is available)\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1348
#, no-wrap
msgid ""
"The HAL parameter that controls whether the last GPIO of the first 5i22\n"
"is an input or an output is: hm2_5i22.0.gpio.095.is_output (this assumes\n"
"that the firmware in that board is configured so that this HAL object\n"
"is available)\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1353
#, no-wrap
msgid ""
"The hm2 GPIO representation is modeled after the Digital Inputs and\n"
"Digital Outputs described in the Canonical Device Interface (part of\n"
"the HAL General Reference document).  Each GPIO can have the following\n"
"HAL Pins:\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1354
#, no-wrap
msgid "(bit out) in & in_not"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1359
#, no-wrap
msgid ""
"State (normal and inverted) of the hardware\n"
"input pin.  Both full GPIO pins and IO pins used as inputs by active\n"
"module instances have these pins.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1360
#, no-wrap
msgid "(bit in) out"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1364
#, no-wrap
msgid ""
"Value to be written (possibly inverted) to the hardware\n"
"output pin.  Only full GPIO pins have this pin.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1367
#, no-wrap
msgid "Each GPIO can have the following Parameters:\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1368
#, no-wrap
msgid "(bit r/w) is_output"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1376
#, no-wrap
msgid ""
"If set to 0, the GPIO is an input.  The IO pin\n"
"is put in a high-impedance state (weakly pulled high), to be driven by\n"
"other devices.  The logic value on the IO pin is available in the \"in\" and\n"
"\"in_not\" HAL pins.  Writes to the \"out\" HAL pin have no effect.  If this\n"
"parameter is set to 1, the GPIO is an output; its behavior then depends\n"
"on the \"is_opendrain\" parameter.  Only full GPIO pins have this parameter.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1377
#, no-wrap
msgid "(bit r/w) is_opendrain"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1391
#, no-wrap
msgid ""
"This parameter only has an effect if the\n"
"\"is_output\" parameter is True.  If this parameter is False, the GPIO\n"
"behaves as a normal output pin: the IO pin on the connector is driven\n"
"to the value specified by the \"out\" HAL pin (possibly inverted), and the\n"
"value of the \"in\" and \"in_not\" HAL pins is undefined.  If this parameter\n"
"is True, the GPIO behaves as an open-drain pin.  Writing 0 to the \"out\"\n"
"HAL pin drives the IO pin low, writing 1 to the \"out\" HAL pin puts the\n"
"IO pin in a high-impedance state.  In this high-impedance state the IO\n"
"pin floats (weakly pulled high), and other devices can drive the value;\n"
"the resulting value on the IO pin is available on the \"in\" and \"in_not\"\n"
"pins.  Only full GPIO pins and IO pins used as outputs by active module\n"
"instances have this parameter.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1392
#, no-wrap
msgid "(bit r/w) invert_output"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1399
#, no-wrap
msgid ""
"This parameter only has an effect if the\n"
"\"is_output\" parameter is True.  If this parameter is True, the output\n"
"value of the GPIO will be the inverse of the value on the \"out\" HAL pin.\n"
"Only full GPIO pins and IO pins used as outputs by active module instances\n"
"have this parameter.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1420
#, no-wrap
msgid ""
"When a physical I/O pin is used by a special function, the related\n"
"B<is_output>, and B<is_opendrain>\n"
"HAL parameters are aliased to the special function.  For instance, if gpio 1\n"
"is taken over by pwmgen 0's first output, then aliases like\n"
"B<hm2_7i92.0.pwmgen.00.out0.invert_output>\n"
"(referring to\n"
"B<hm2_7i92.0.gpio.001.invert_output>)\n"
"will be automatically created.  When more than one GPIO is connected to the\n"
"same special function, an extra .#. is inserted so that the settings for\n"
"each related GPIO can be set separately.  For example, for the firmware\n"
"SV12IM_2X7I48_72, the alias\n"
"B<hm2_5i20.0.pwmgen.00.0.enable.invert_output>\n"
"(referring to\n"
"B<hm2_5i20.0.gpio.000.invert_output>)\n"
"and\n"
"B<hm2_5i20.0.pwmgen.00.1.enable.invert_output>\n"
"(referring to\n"
"B<hm2_5i20.0.gpio.023.invert_output>)\n"
"are both created.\n"
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:1421
#, no-wrap
msgid "inm and inmux"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1433
#, no-wrap
msgid ""
"inm/inmuxs are input debouncing modules that support hardware digital filtering of input pins.\n"
"In addition to the input filtering function, the inm/inmux modules support up to 4 simple quadrature\n"
"counters for MPG use. The quadrature inputs for MPG encoders 0 through 3 are inm/inmux pins 0 through 7.\n"
"MPG A,B inputs use the filter time constants programmed for inputs 0..7 Each inm/inmux input pin can have\n"
"a slow or fast filter constant. Filter time constants are specified in units of scan times.\n"
"inms have names like\n"
"\"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.inm.I<E<lt>InstanceE<gt>>\".\n"
"inmuxes have names like \"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.inmux.I<E<lt>InstanceE<gt>>\".\n"
"\"Instance\" is a two-digit number that corresponds to the HostMot2 inm or inmux\n"
"instance number.  There are \"num_inms\" or numx_inmuxs\" instances, starting\n"
"with 00.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1436
#, no-wrap
msgid ""
"Each instance reads between 8 and 32 input pins. inm and inmux are identical except\n"
"for pin names and the physical interface.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1440
#, no-wrap
msgid "(bit out) input and input-not"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1443
#, no-wrap
msgid "True and inverted filtered input states.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1444
#, no-wrap
msgid "(bit out) raw-input and raw-input-not"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1447
#, no-wrap
msgid "True and inverted unfiltered input states.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1448
#, no-wrap
msgid "(bit in) input-slow"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1452
#, no-wrap
msgid ""
"If True, selects the long time constant filter for the corresponding input bit,\n"
"if False the short time constant is used.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1453
#, no-wrap
msgid "(s32 out) enc0-count,enc1-count,enc2-count,enc3-count"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1456
#, no-wrap
msgid "MPG counters 0 through 3.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1457
#, no-wrap
msgid "(bit in) enc0-reset,enc1-reset,enc2-reset,enc3-reset"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1460
#, no-wrap
msgid "Reset for MPG counters 0 through 3, count is forced to 0 if true.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1465
#, no-wrap
msgid "(u32 in) scan_rate"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1469
#, no-wrap
msgid ""
"This sets the input scan rate in Hz. Default scan rate is 20 kHz\n"
"(50 µs scan period).\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1470
#, no-wrap
msgid "(u32 in) fast_scans"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1475
#, no-wrap
msgid ""
"This sets the fast time constant for all input pins. This is the time constant\n"
"used when the input-slow pin for the corresponding input is False. The range is 0 to\n"
"63 scan periods and the default value is 5 = 250 µs at the default 20 kHz scan_rate.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1476
#, no-wrap
msgid "(u32 in) slow_scans"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1481
#, no-wrap
msgid ""
"This sets the slow time constant for all input pins. This is the time constant\n"
"used when the input-slow pin for the corresponding input is True. The range is 0 to 1023\n"
"scan periods and the default value is 500 = 25 ms at the default 20 kHz scan_rate.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1482
#, no-wrap
msgid "(bit in) enc0_4xmode, enc1_4xmode, enc2_4xmode, and enc3_4xmode"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1486
#, no-wrap
msgid ""
"These set the MPG encoder operating modes to 4X when True and 1X\n"
"when False.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1487
#, no-wrap
msgid "(u32 out) scan_width"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1490
#, no-wrap
msgid "This read only parameter specifies the number of inputs scanned by the module.\n"
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:1492
#, no-wrap
msgid "led"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1495
#, no-wrap
msgid "Creates HAL pins for the LEDs on the FPGA board.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1498
#, no-wrap
msgid "(bit in) CRE<lt>NNE<gt>"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1503
#, no-wrap
msgid ""
"The pins are numbered from CR01 upwards with the name\n"
"corresponding to the PCB silkscreen. Setting the bit to \"True\" or 1 lights\n"
"the LED.\n"
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:1504
#, no-wrap
msgid "Solid State Relay"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1511
#, no-wrap
msgid ""
"SSRs have names like\n"
"\"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.ssr.I<E<lt>InstanceE<gt>>\".\n"
"\"Instance\" is a two-digit number that corresponds to the HostMot2 SSR\n"
"instance number.  There are \"num_ssrs\" instances, starting\n"
"with 00.\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1513
#, no-wrap
msgid "Each instance has a rate control pin and between 1 and 32 output pins.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1516
#, no-wrap
msgid "(u32 in) rate"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1523
#, no-wrap
msgid ""
"Set the internal frequency of the SSR instance, in Hz (approximate).\n"
"The valid range is 25 kHz to 25 MHz.  Values below the minimum will\n"
"use the minimum, and values above the max will use the max.  1 MHz is a\n"
"typical value, and appropriate for all Mesa cards, and is the default.\n"
"Set to 0 to disable this SSR instance.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1524 man/man9/hostmot2.9:1549
#, no-wrap
msgid "(bit in) out-NN"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1529
#, no-wrap
msgid ""
"The state of this SSR instance's NNth output.  Set to 0 to make\n"
"the output pins act like an open switch (no connection), set to 1 to\n"
"make them act like a closed switch.\n"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1530 man/man9/hostmot2.9:1554
#, no-wrap
msgid "(bit in) invert-NN"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1535
#, no-wrap
msgid ""
"Inverts the state of this SSR instance's NNth output, defaults to 0.\n"
"When invert-NN is set to 1, SSR output NN is closed when the out-NN\n"
"pin is 0 and open when the out-NN pin is 1.\n"
msgstr ""

#. type: SH
#: man/man9/hostmot2.9:1536
#, no-wrap
msgid "OutM Simple output module"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1543
msgid ""
"OutMs have names like \"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>."
"OutM.I<E<lt>InstanceE<gt>>\".  \"Instance\" is a two-digit number that "
"corresponds to the HostMot2 OutM instance number.  There are \"num_outms\" "
"instances, starting with 00."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1545
msgid "Each instance has between 1 and 32 output pins."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1553
msgid ""
"The sets the state of this OutM instance's NNth output. Normally the output "
"pin follows the state of this pin but may be inverted by the invert-nn HAL "
"pin."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1559
msgid ""
"Inverts the state of the this OutM instance's NNth output, defaults to 0.  "
"When invert-NN is set to 1, OutM output NN is high when the out-NN pin is 0 "
"and low when the out-NN pin is 1."
msgstr ""

#. type: SH
#: man/man9/hostmot2.9:1560
#, no-wrap
msgid "xy2mod"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1565
msgid ""
"The xy2mod is a xy2-100 galvanometer interface. It supports 16 and 18 bit "
"data modes and includes parabolic interpolation to provide position updates "
"between servo thread invocations."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1569
#, no-wrap
msgid "(float in) posx_cmd, posy_cmd"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1573
msgid ""
"X and Y position commands. Full scale is +-posn_scale default full scale "
"(set by posx_scale and posy_scale) is +- 1"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1574
#, no-wrap
msgid "(float out) posx_fb, posy_fb"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1579
msgid ""
"X and Y position feedback. Full scale is +-posN_scale default full scale is "
"+- 1. This is feedback from the interpolator not the galvanometer."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1580
#, no-wrap
msgid "(float in) velx_cmd, vely_cmd"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1583
msgid "X and Y velocity commands in units of fullscale_position/second"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1584
#, no-wrap
msgid "(float out) velx_fb, vely_fb"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1587
msgid "X and Y velocity feedback in units of fullscale_position/second"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1588
#, no-wrap
msgid "(float in) accx_cmd, accy_cmd"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1591
msgid "X and Y acceleration commands in units of fullscale_position/second^2"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1592
#, no-wrap
msgid "(float in) posx_scale, posy_scale"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1596
msgid ""
"This sets the full scale range of the position command and feedback.  "
"default is +- 1.0."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1597
#, no-wrap
msgid "(bit in) enable"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1601
msgid ""
"when False, output data is 0, all interpolator values are set to 0 and "
"overflow flags are cleared. Must be True for normal operation."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1602
#, no-wrap
msgid "(u32 in) controlx, controly"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1607
msgid ""
"These set the galvanometer control bits. There 3 bits per channel in 16 bit "
"mode but just 1 control bit in 18 bit mode, so values from 0..7 are valid in "
"16 bit mode but only 0 and 4 are valid in 18 bit mode."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1608
#, no-wrap
msgid "(u32 in) commandx, commandy"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1611
msgid "These set the raw 16 bit data sent to the galvanometer in command mode."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1612
#, no-wrap
msgid "(bit in) commandmodex, commandmodey"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1615
msgid ""
"When set, these enable the command mode where 16 bit command data is sent to "
"the galvanometer."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1616
#, no-wrap
msgid "(bit in) 18bitmodex, 18bitmodey"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1619
msgid ""
"When True, these enable the 18 bit data mode for the respective channel."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1620
#, no-wrap
msgid "(bit out) posx-overflow, posy-overflow"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1623
msgid ""
"When true, these indicate an attempted position move beyond the full scale "
"value."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1624
#, no-wrap
msgid "(bit out) velx-overflow, vely-overflow"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1627
msgid ""
"When True, these indicate an attempted velocity update move beyond the full "
"scale value"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1628
#, no-wrap
msgid "(u32 out) status"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1631
msgid "Raw 16 bit return status from galvanometer."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1635
#, no-wrap
msgid "(s32 in) read-timer-number"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1639
msgid ""
"Selects the DPLL timer number for pre-read sampling of the position and "
"velocity registers.  If set to -1, pre-read sampling is disabled."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1640
#, no-wrap
msgid "(s32 in) write-timer-number"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1644
msgid ""
"Selects the DPLL timer number for post write update of the position and "
"velocity registers.  If set to -1, post write update is disabled."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1650
msgid ""
"The HostMot2 firmware may include a watchdog Module; if it does, the "
"hostmot2 driver will use it.  The HAL representation of the watchdog is "
"named \"hm2_B<E<lt>BoardTypeE<gt>>.B<E<lt>BoardNumE<gt>>.watchdog\"."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1655
msgid ""
"The watchdog starts out asleep and inactive.  Once you access the board the "
"first time by running the hm2 write() HAL function (see below), the watchdog "
"wakes up.  From them on it must be petted periodically or it will bite.  Pet "
"the watchdog by running the hm2 write() HAL function."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1663
msgid ""
"When the watchdog bites, all the board's I/O pins are disconnected from "
"their Module instances and become high-impedance inputs (pulled high), and "
"all communication with the board stops.  The state of the HostMot2 firmware "
"modules is not disturbed (except for the configuration of the IO Pins).  "
"Encoder instances keep counting quadrature pulses, and pwm- and step-"
"generators keep generating signals (which are *not* relayed to the motors, "
"because the IO Pins have become inputs)."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1667
msgid ""
"Resetting the watchdog (by clearing the has_bit pin, see below) resumes "
"communication and resets the I/O pins to the configuration chosen at load-"
"time."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1673
#, no-wrap
msgid "(bit in/out) has_bit"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1678
msgid ""
"True if the watchdog has bit, False if the watchdog has not bit.  If the "
"watchdog has bit and the has_bit bit is True, the user can reset it to False "
"to resume operation."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1681
#, no-wrap
msgid "(u32 read/write) timeout_ns"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1687
msgid ""
"Watchdog timeout, in nanoseconds.  This is initialized to 5,000,000 (5 "
"milliseconds) at module load time.  If more than this amount of time passes "
"between calls to the hm2 write()  function, the watchdog will bite."
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:1687
#, no-wrap
msgid "Raw Mode"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1692
msgid ""
"If the \"enable_raw\" config keyword is specified, some extra debugging pins "
"are made available in HAL.  The raw mode HAL pin names begin with "
"\"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.raw\"."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1695
msgid ""
"With Raw mode enabled, a user may peek and poke the firmware from HAL, and "
"may dump the internal state of the hostmot2 driver to the syslog."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1698
#, no-wrap
msgid "(u32 in) read_address"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1702
msgid "The bottom 16 bits of this is used as the address to read from."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1703
#, no-wrap
msgid "(u32 out) read_data"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1707
msgid ""
"Each time the hm2_read() function is called, this pin is updated with the "
"value at .read_address."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1708
#, no-wrap
msgid "(u32 in) write_address"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1712
msgid "The bottom 16 bits of this is used as the address to write to."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1713
#, no-wrap
msgid "(u32 in) write_data"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1716
msgid "This is the value to write to .write_address."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1717
#, no-wrap
msgid "(bit in) write_strobe"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1722
msgid ""
"Each time the hm2_write() function is called, this pin is examined.  If it "
"is True, then value in .write_data is written to the address in ."
"write_address, and .write_strobe is set back to False."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1723
#, no-wrap
msgid "(bit in/out) dump_state"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1728
msgid ""
"This pin is normally False.  If it gets set to True the hostmot2 driver will "
"write its representation of the board's internal state to the syslog, and "
"set the pin back to False."
msgstr ""

#. type: SS
#: man/man9/hostmot2.9:1729
#, no-wrap
msgid "Setting up Smart Serial devices"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1732
msgid ""
"See setsserial(9) for the current way to set smart-serial eeprom parameters."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1734
#, no-wrap
msgid "B<hm2_>I<E<lt>BoardTypeE<gt>>B<.>I<E<lt>BoardNumE<gt>>B<.read-request>"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1740
msgid ""
"On boards with long turn around time for reads (at the time of writing, this "
"applies only to ethernet boards), this function sends a read request.  When "
"multiple boards are used, this can reduce the servo thread execution time.  "
"In this case, the appropriate thread order would be"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1745
#, no-wrap
msgid ""
"addf hm2_7i80.0.read-request\n"
"addf hm2_7i80.1.read-request\n"
"addf hm2_7i80.0.read\n"
"addf hm2_7i80.1.read\n"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1748
msgid ""
"which causes the read request to be sent to board 1 before waiting for the "
"response to the read request to arrive from board 0."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1748
#, no-wrap
msgid "B<hm2_>I<E<lt>BoardTypeE<gt>>B<.>I<E<lt>BoardNumE<gt>>B<.read>"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1752
msgid ""
"This reads the encoder counters, stepgen feedbacks, and GPIO input pins from "
"the FPGA."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1752
#, no-wrap
msgid "B<hm2_>I<E<lt>BoardTypeE<gt>>B<.>I<E<lt>BoardNumE<gt>>B<.write>"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1757
msgid ""
"This updates the PWM duty cycles, stepgen rates, and GPIO outputs on the "
"FPGA.  Any changes to configuration pins such as stepgen timing, GPIO "
"inversions, etc, are also effected by this function."
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1757
#, no-wrap
msgid "B<hm2_>I<E<lt>BoardTypeE<gt>>B<.>I<E<lt>BoardNumE<gt>>B<.read_gpio>"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1764
msgid ""
"Read the GPIO input pins.  Note that the effect of this function is a subset "
"of the effect of the .read() function described above.  Normally only ."
"read() is used.  The only reason to call this function is if you want to do "
"GPIO things in a faster-than-servo thread.  (This function is not available "
"on the 7i43 due to limitations of the EPP bus.)"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1764
#, no-wrap
msgid "B<hm2_>I<E<lt>BoardTypeE<gt>>B<.>I<E<lt>BoardNumE<gt>>B<.write_gpio>"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1772
msgid ""
"Write the GPIO control registers and output pins.  Note that the effect of "
"this function is a subset of the effect of the .write() function described "
"above.  Normally only .write() is used.  The only reason to call this "
"function is if you want to do GPIO things in a faster-than-servo thread.  "
"(This function is not available on the 7i43 due to limitations of the EPP "
"bus.)"
msgstr ""

#. type: TP
#: man/man9/hostmot2.9:1772
#, no-wrap
msgid "B<hm2_>I<E<lt>BoardTypeE<gt>>B<.>I<E<lt>BoardNumE<gt>>B<.trigger-encoders>"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1784
msgid ""
"This function will only appear if the firmware contains a BiSS, Fanuc or SSI "
"encoder module and if the firmware does not contain a hm2dpll module (qv) or "
"if the modparam contains num_dplls=0.  This function should be inserted "
"first in the thread so that the encoder data is ready when the main "
"B<hm2_XXXX.NN.read> function runs. An error message will be printed if the "
"encoder read is not finished in time. It may be possible to avoid this by "
"increasing the data rate. If the problem persists and if \"stale\" data is "
"acceptable then the function may be placed later in the thread, allowing a "
"full servo cycle for the data to be transferred from the devices. If "
"available it is better to use the synchronous hm2dpll triggering function."
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1793
msgid ""
"B<hm2_pci>(9), B<hm2_eth>(9), B<hm2_spi>(9), B<hm2_rpspi>(9), "
"B<hm2_7i43>(9), B<hm2_7i90>(9)"
msgstr ""

#. type: Plain text
#: man/man9/hostmot2.9:1798
msgid ""
"Mesa's documentation for the Anything I/O boards, at E<.UR> http://www."
"mesanet.com E<.UE>"
msgstr ""

#. type: TH
#: man/man9/hypot.9:9
#, no-wrap
msgid "HYPOT"
msgstr ""

#. type: Plain text
#: man/man9/hypot.9:13
msgid "hypot - Three-input hypotenuse (Euclidean distance) calculator"
msgstr ""

#. type: Plain text
#: man/man9/hypot.9:16
msgid "B<loadrt hypot [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/hypot.9:17
#, no-wrap
msgid "B<hypot.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/hypot.9:21
#, no-wrap
msgid "B<hypot.>I<N>B<.in0> float in "
msgstr ""

#. type: TP
#: man/man9/hypot.9:25
#, no-wrap
msgid "B<hypot.>I<N>B<.in1> float in "
msgstr ""

#. type: TP
#: man/man9/hypot.9:29
#, no-wrap
msgid "B<hypot.>I<N>B<.in2> float in "
msgstr ""

#. type: TP
#: man/man9/hypot.9:33
#, no-wrap
msgid "B<hypot.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/hypot.9:36
msgid "out = sqrt(in0^2 + in1^2 + in2^2)"
msgstr ""

#. type: TH
#: man/man9/ilowpass.9:9
#, no-wrap
msgid "ILOWPASS"
msgstr ""

#. type: Plain text
#: man/man9/ilowpass.9:13
msgid "ilowpass - Low-pass filter with integer inputs and outputs"
msgstr ""

#. type: Plain text
#: man/man9/ilowpass.9:16
msgid "B<loadrt ilowpass [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/ilowpass.9:20
msgid ""
"While it may find other applications, this component was written to create "
"smoother motion while jogging with an MPG."
msgstr ""

#. type: Plain text
#: man/man9/ilowpass.9:25
msgid ""
"In a machine with high acceleration, a short jog can behave almost like a "
"step function.  By putting the B<ilowpass> component between the MPG encoder "
"B<counts> output and the axis jog-counts input, this can be smoothed."
msgstr ""

#. type: Plain text
#: man/man9/ilowpass.9:31
msgid ""
"Choose B<scale> conservatively so that during a single session there will "
"never be more than about 2e9/B<scale> pulses seen on the MPG.  Choose "
"B<gain> according to the smoothing level desired.  Divide the axis.I<N>.jog-"
"scale values by B<scale>."
msgstr ""

#. type: TP
#: man/man9/ilowpass.9:32
#, no-wrap
msgid "B<ilowpass.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: Plain text
#: man/man9/ilowpass.9:35
msgid "Update the output based on the input and parameters"
msgstr ""

#. type: TP
#: man/man9/ilowpass.9:36
#, no-wrap
msgid "B<ilowpass.>I<N>B<.in> s32 in "
msgstr ""

#. type: TP
#: man/man9/ilowpass.9:40
#, no-wrap
msgid "B<ilowpass.>I<N>B<.out> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/ilowpass.9:44
msgid ""
"B<out> tracks B<in>*B<scale> through a low-pass filter of B<gain> per period."
msgstr ""

#. type: TP
#: man/man9/ilowpass.9:45
#, no-wrap
msgid "B<ilowpass.>I<N>B<.scale> float rw (default: I<1024>)"
msgstr ""

#. type: Plain text
#: man/man9/ilowpass.9:49
msgid "A scale factor applied to the output value of the low-pass filter."
msgstr ""

#. type: TP
#: man/man9/ilowpass.9:49
#, no-wrap
msgid "B<ilowpass.>I<N>B<.gain> float rw (default: I<.5>)"
msgstr ""

#. type: Plain text
#: man/man9/ilowpass.9:56
msgid ""
"Together with the period, sets the rate at which the output changes.  Useful "
"range is between 0 and 1, with higher values causing the input value to be "
"tracked more quickly.  For instance, a setting of 0.9 causes the output "
"value to go 90% of the way towards the input value in each period"
msgstr ""

#. type: TH
#: man/man9/integ.9:9
#, no-wrap
msgid "INTEG"
msgstr ""

#. type: Plain text
#: man/man9/integ.9:13
msgid "integ - Integrator with gain pin and windup limits"
msgstr ""

#. type: Plain text
#: man/man9/integ.9:16
msgid "B<loadrt integ [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/integ.9:17
#, no-wrap
msgid "B<integ.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/integ.9:21
#, no-wrap
msgid "B<integ.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/integ.9:25
#, no-wrap
msgid "B<integ.>I<N>B<.gain> float in (default: I<1.0>)"
msgstr ""

#. type: TP
#: man/man9/integ.9:29
#, no-wrap
msgid "B<integ.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/integ.9:32
msgid "The discrete integral of 'gain * in' since 'reset' was deasserted"
msgstr ""

#. type: TP
#: man/man9/integ.9:32
#, no-wrap
msgid "B<integ.>I<N>B<.reset> bit in "
msgstr ""

#. type: Plain text
#: man/man9/integ.9:35
msgid "When asserted, set out to 0"
msgstr ""

#. type: TP
#: man/man9/integ.9:35
#, no-wrap
msgid "B<integ.>I<N>B<.max> float in (default: I<1e20>)"
msgstr ""

#. type: TP
#: man/man9/integ.9:39
#, no-wrap
msgid "B<integ.>I<N>B<.min> float in (default: I<-1e20>)"
msgstr ""

#. type: TH
#: man/man9/invert.9:9
#, no-wrap
msgid "INVERT"
msgstr ""

#. type: Plain text
#: man/man9/invert.9:13
msgid "invert - Compute the inverse of the input signal"
msgstr ""

#. type: Plain text
#: man/man9/invert.9:17
msgid ""
"The output will be the mathematical inverse of the input, ie B<out> = 1/"
"B<in>.  The parameter B<deadband> can be used to control how close to 0 the "
"denominator can be before the output is clamped to 0.  B<deadband> must be "
"at least 1e-8, and must be positive."
msgstr ""

#. type: TP
#: man/man9/invert.9:18
#, no-wrap
msgid "B<invert.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/invert.9:22
#, no-wrap
msgid "B<invert.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/invert.9:25
#, no-wrap
msgid "B<invert.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/invert.9:28
msgid "Analog output value"
msgstr ""

#. type: TP
#: man/man9/invert.9:29
#, no-wrap
msgid "B<invert.>I<N>B<.deadband> float rw "
msgstr ""

#. type: Plain text
#: man/man9/invert.9:32
msgid ""
"The B<out> will be zero if B<in> is between -B<deadband> and +B<deadband>"
msgstr ""

#. type: TH
#: man/man9/joyhandle.9:9
#, no-wrap
msgid "JOYHANDLE"
msgstr ""

#. type: Plain text
#: man/man9/joyhandle.9:13
msgid "joyhandle - sets nonlinear joypad movements, deadbands and scales"
msgstr ""

#. type: Plain text
#: man/man9/joyhandle.9:16
msgid "B<loadrt joyhandle [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/joyhandle.9:20
msgid ""
"The component B<joyhandle> uses the following formula for a non linear "
"joypad movements:"
msgstr ""

#. type: Plain text
#: man/man9/joyhandle.9:22
msgid "B<y = (scale * (a*x^power + b*x)) + offset>"
msgstr ""

#. type: Plain text
#: man/man9/joyhandle.9:24
msgid ""
"The parameters a and b are adjusted in such a way, that the function starts "
"at (deadband,offset) and ends at (1,scale+offset)."
msgstr ""

#. type: Plain text
#: man/man9/joyhandle.9:26
msgid ""
"Negative values will be treated point symmetrically to origin. Values -"
"deadband E<lt> x E<lt> +deadband will be set to zero."
msgstr ""

#. type: Plain text
#: man/man9/joyhandle.9:28
msgid ""
"Values x E<gt> 1 and x E<lt> -1 will be skipped to \\(+-(scale+offset). "
"Invert transforms the function to a progressive movement."
msgstr ""

#. type: Plain text
#: man/man9/joyhandle.9:30
msgid ""
"With power one can adjust the nonlinearity (default = 2). Default for "
"deadband is 0."
msgstr ""

#. type: Plain text
#: man/man9/joyhandle.9:32
msgid ""
"Valid values are: power E<gt>= 1.0 (reasonable values are 1.x .. 4\\(hy5, "
"take higher power\\(hyvalues for higher deadbands (E<gt>0.5), if you want to "
"start with a nearly horizontal slope), 0 E<lt>= deadband E<lt> 0.99 "
"(reasonable 0.1)."
msgstr ""

#. type: Plain text
#: man/man9/joyhandle.9:34
msgid ""
"An additional offset component can be set in special cases (default = 0)."
msgstr ""

#. type: Plain text
#: man/man9/joyhandle.9:36
msgid "All values can be adjusted for each instance separately."
msgstr ""

#. type: TP
#: man/man9/joyhandle.9:38
#, no-wrap
msgid "B<joyhandle.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/joyhandle.9:42
#, no-wrap
msgid "B<joyhandle.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/joyhandle.9:46
#, no-wrap
msgid "B<joyhandle.>I<N>B<.out> float out "
msgstr ""

#. type: TP
#: man/man9/joyhandle.9:49
#, no-wrap
msgid "B<joyhandle.>I<N>B<.power> float rw (default: I<2.0>)"
msgstr ""

#. type: TP
#: man/man9/joyhandle.9:53
#, no-wrap
msgid "B<joyhandle.>I<N>B<.deadband> float rw (default: I<0.>)"
msgstr ""

#. type: TP
#: man/man9/joyhandle.9:57
#, no-wrap
msgid "B<joyhandle.>I<N>B<.scale> float rw (default: I<1.>)"
msgstr ""

#. type: TP
#: man/man9/joyhandle.9:61
#, no-wrap
msgid "B<joyhandle.>I<N>B<.offset> float rw (default: I<0.>)"
msgstr ""

#. type: TP
#: man/man9/joyhandle.9:65
#, no-wrap
msgid "B<joyhandle.>I<N>B<.inverse> bit rw (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/joyhandle.9:70
msgid "Paul Willutzki"
msgstr ""

#. type: TH
#: man/man9/kins.9:1
#, no-wrap
msgid "KINS"
msgstr ""

#. type: TH
#: man/man9/kins.9:1
#, no-wrap
msgid "2014-12-22"
msgstr ""

#. type: TH
#: man/man9/kins.9:1
#, no-wrap
msgid "Kinematics Modules"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:5
msgid "kins - kinematics definitions for LinuxCNC"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:7
msgid "For additional information, see the Documents 'Advanced Topics':"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:9
#, no-wrap
msgid "   B<Kinematics>\n"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:11
#, no-wrap
msgid "   B<5-Axis Kinematics>\n"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:13
#, no-wrap
msgid "   B<Switchable Kinematics>\n"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:16
msgid "B<loadrt trivkins (use for most cartesian machines)>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:18
msgid "B<loadrt corexykins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:20
msgid "B<loadrt genhexkins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:22
msgid "B<loadrt genserkins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:24
msgid "B<loadrt lineardeltakins (see separate manpage)>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:26
msgid "B<loadrt maxkins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:28
msgid "B<loadrt pentakins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:30
msgid "B<loadrt pumakins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:32 man/man9/rosekins.9:9
msgid "B<loadrt rosekins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:34
msgid "B<loadrt rotarydeltakins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:36
msgid "B<loadrt rotatekins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:38
msgid "B<loadrt scarakins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:40
msgid "B<loadrt tripodkins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:42
msgid "B<loadrt xyzac-trt-kins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:44
msgid "B<loadrt xyzbc-trt-kins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:46
msgid "B<loadrt 5axiskins>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:51
msgid ""
"Rather than exporting HAL pins and functions, these components provide the "
"forward and inverse kinematics definitions for LinuxCNC."
msgstr ""

#. type: SS
#: man/man9/kins.9:52
#, no-wrap
msgid "trivkins - generalized trivial kinematics"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:55
msgid ""
"Joint numbers are assigned sequentially according to the axis letters "
"specified with the B<coordinates=> parameter."
msgstr ""

#. type: Plain text
#: man/man9/kins.9:58
msgid ""
"If the coordinates= parameter is omitted, joint numbers are assigned "
"B<sequentially> to every known axis letter (\"xyzabcuvw\")."
msgstr ""

#. type: TP
#: man/man9/kins.9:59
#, no-wrap
msgid "Example: loadrt B<trivkins>"
msgstr ""

#. type: TP
#: man/man9/kins.9:61
#, no-wrap
msgid "Assigns all axis letters to joint numbers in sequence:"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:67
#, no-wrap
msgid ""
"   x==joint0, y==joint1, z==joint2\n"
"   a==joint3, b==joint4, c==joint5\n"
"   u==joint6, v==joint7, w==joint8\n"
msgstr ""

#. type: TP
#: man/man9/kins.9:70
#, no-wrap
msgid "Example: loadrt B<trivkins coordinates=xyz>"
msgstr ""

#. type: TP
#: man/man9/kins.9:74
#, no-wrap
msgid "Assigns: x==joint0, y==joint1, z==joint2"
msgstr ""

#. type: TP
#: man/man9/kins.9:79
#, no-wrap
msgid "Example: loadrt B<trivkins coordinates=xz>"
msgstr ""

#. type: TP
#: man/man9/kins.9:83
#, no-wrap
msgid "Assigns: x==joint0, z==joint1"
msgstr ""

#. type: TP
#: man/man9/kins.9:88
#, no-wrap
msgid "Example: loadrt B<trivkins coordinates=xyzy>"
msgstr ""

#. type: TP
#: man/man9/kins.9:92
#, no-wrap
msgid "Assigns: x==joint0, y0==joint1, z==joint2, y1==joint3"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:103
msgid ""
"The default kinematics type is B<KINEMATICS_IDENTITY>.  Guis may provide "
"special features for configurations using this default kinematics type.  For "
"instance, the axis gui automatically handles joint and world mode operations "
"so that the distinctions between joints and axes are not visible to the "
"operator.  This is feasible since there is an exact correspondence between a "
"joint number and its matching axis letter."
msgstr ""

#. type: TP
#: man/man9/kins.9:106
#, no-wrap
msgid "The kinematics type can be set with the B<kinstype=> parameter:"
msgstr ""

#. type: TP
#: man/man9/kins.9:111
#, no-wrap
msgid "  kinstype=B<1>     for KINEMATICS_IDENTITY (default if kinstype= omitted)"
msgstr ""

#. type: TP
#: man/man9/kins.9:115
#, no-wrap
msgid "  kinstype=[B<b>|B<B>] for KINEMATICS_BOTH"
msgstr ""

#. type: TP
#: man/man9/kins.9:119
#, no-wrap
msgid "  kinstype=[B<f>|B<F>] for KINEMATICS_FORWARD_ONLY"
msgstr ""

#. type: TP
#: man/man9/kins.9:123
#, no-wrap
msgid "  kinstype=[B<i>|B<I>] for KINEMATICS_INVERSE_ONLY"
msgstr ""

#. type: TP
#: man/man9/kins.9:126
#, no-wrap
msgid "Example: loadrt B<trivkins coordinates=xyz kinstype=b>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:132
msgid ""
"Use kinstype=B<B> (KINEMATICS_BOTH) for configurations that need to move "
"joints independently (joint mode) or as coordinated (teleop) movements in "
"world coordinates."
msgstr ""

#. type: Plain text
#: man/man9/kins.9:135
msgid ""
"When using the axis gui with KINEMATICS_BOTH, the 'B<$>' key is used to "
"toggle between joint and teleop (world) modes."
msgstr ""

#. type: Plain text
#: man/man9/kins.9:139
msgid ""
"An axis letter may be used more than once (B<duplicated>) to assign multiple "
"joints to a single axis coordinate letter."
msgstr ""

#. type: TP
#: man/man9/kins.9:142
#, no-wrap
msgid "Example: coordinates=B<xyyzw> kinstype=B<B>"
msgstr ""

#. type: TP
#: man/man9/kins.9:146
#, no-wrap
msgid "Assigns: x==joint0, y==joint1 B<AND> joint2, z==joint3, w==joint4"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:157
msgid ""
"The above example illustrates a gantry configuration that uses B<duplicated> "
"coordinate letters to indicate that two joints (joint1 and joint2) move a "
"single axis (y).  Using kinstype=B<B> allows the configuration to be toggled "
"between joint and world modes of operation.  Homing configuration options "
"are available to synchronize the final homing move for selected joints -- "
"see the documentation for B<Homing Configuration>."
msgstr ""

#. type: Plain text
#: man/man9/kins.9:159
msgid "B<NOTES> for B<duplicated> coordinates:"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:179
msgid ""
"When B<duplicated> coordinate letters are used, specifying KINEMATICS_BOTH "
"(kinstype=B<B>) allows a gui to support jogging of each individual joint in "
"B<joint mode>.  B<Caution> is required for machines where the movement of a "
"single joint (in a set specified by a B<duplicated> coordinate letter)  can "
"lead to gantry racking or other unwanted outcomes.  When the kinstype= "
"parameter is omitted, operation defaults to KINEMATICS_IDENTITY "
"(kinstype=B<1>) and a gui may allow jogging based upon a selected axis "
"coordinate letter (or by a keyboard key) before homing is completed and the "
"machine is still in B<joint mode>.  The joint selected will depend upon the "
"gui implementation but typically only one of the multiple joints in the set "
"will jog.  Consequently, specifying KINEMATICS_BOTH is recommended as it "
"enables support for unambiguous, independent jogging of each individual "
"joint.  Machines that implement homing for all joints (including the "
"provisions for synchronizing the final homing move for multiple joints) may "
"be homed at machine startup and automatically switch to B<world> mode where "
"per-coordinate jogging is available."
msgstr ""

#. type: SS
#: man/man9/kins.9:180
#, no-wrap
msgid "corexykins - CoreXY Kinematics"
msgstr ""

#. type: TP
#: man/man9/kins.9:181
#, no-wrap
msgid "X = 0.5*(JOINT_0 + JOINT_1)"
msgstr ""

#. type: TP
#: man/man9/kins.9:185
#, no-wrap
msgid "Y = 0.5*(JOINT_0 - JOINT_1)"
msgstr ""

#. type: TP
#: man/man9/kins.9:189
#, no-wrap
msgid "Z = JOINT_2"
msgstr ""

#. type: TP
#: man/man9/kins.9:191
#, no-wrap
msgid "[KINS]JOINTS= must specify 3 or more joints (maximum 9)"
msgstr ""

#. type: TP
#: man/man9/kins.9:193
#, no-wrap
msgid "If enabled by the number of [KINS]JOINTS= specified, JOINT_3,4,5,6,7,8 correspond to coordinates A,B,C,U,V,W respectively."
msgstr ""

#. type: SS
#: man/man9/kins.9:197
#, no-wrap
msgid "genhexkins - Hexapod Kinematics"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:202
msgid ""
"Gives six degrees of freedom in position and orientation (XYZABC).  The "
"location of base and platform joints is defined by HAL parameters.  The "
"forward kinematics iteration is controlled by HAL pins.  (See switchkins "
"documentation for more info)"
msgstr ""

#. type: TP
#: man/man9/kins.9:202
#, no-wrap
msgid "B<genhexkins.base.>I<N>B<.x>"
msgstr ""

#. type: TP
#: man/man9/kins.9:206
#, no-wrap
msgid "B<genhexkins.base.>I<N>B<.y>"
msgstr ""

#. type: TP
#: man/man9/kins.9:210
#, no-wrap
msgid "B<genhexkins.base.>I<N>B<.z>"
msgstr ""

#. type: TP
#: man/man9/kins.9:214
#, no-wrap
msgid "B<genhexkins.platform.>I<N>B<.x>"
msgstr ""

#. type: TP
#: man/man9/kins.9:218
#, no-wrap
msgid "B<genhexkins.platform.>I<N>B<.y>"
msgstr ""

#. type: TP
#: man/man9/kins.9:222
#, no-wrap
msgid "B<genhexkins.platform.>I<N>B<.z>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:225
msgid "Parameters describing the I<N>th joint's coordinates."
msgstr ""

#. type: TP
#: man/man9/kins.9:227
#, no-wrap
msgid "B<genhexkins.spindle-offset>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:231
msgid ""
"Added to all joints Z coordinates to change the machine origin.  Facilitates "
"adjusting spindle position."
msgstr ""

#. type: TP
#: man/man9/kins.9:233
#, no-wrap
msgid "B<genhexkins.base-n.>I<N>B<.x>"
msgstr ""

#. type: TP
#: man/man9/kins.9:237
#, no-wrap
msgid "B<genhexkins.base-n.>I<N>B<.y>"
msgstr ""

#. type: TP
#: man/man9/kins.9:241
#, no-wrap
msgid "B<genhexkins.base-n.>I<N>B<.z>"
msgstr ""

#. type: TP
#: man/man9/kins.9:245
#, no-wrap
msgid "B<genhexkins.platform-n.>I<N>B<.x>"
msgstr ""

#. type: TP
#: man/man9/kins.9:249
#, no-wrap
msgid "B<genhexkins.platform-n.>I<N>B<.y>"
msgstr ""

#. type: TP
#: man/man9/kins.9:253
#, no-wrap
msgid "B<genhexkins.platform-n.>I<N>B<.z>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:258
msgid ""
"Parameters describing unit vectors of I<N>th joint's axis. Used to calculate "
"strut length correction for cardanic joints and non-captive actuators."
msgstr ""

#. type: TP
#: man/man9/kins.9:260
#, no-wrap
msgid "B<genhexkins.screw-lead>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:264
msgid ""
"Lead of strut actuator screw, positive for the right-handed thread.  Default "
"is 0 (strut length correction disabled)."
msgstr ""

#. type: TP
#: man/man9/kins.9:266
#, no-wrap
msgid "B<genhexkins.correction.>I<N>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:272
msgid ""
"Current values of strut length correction for non-captive actuators with "
"cardanic joints.  B<genhexkins.convergence-criterion> Minimum error value "
"that ends iterations with converged solution."
msgstr ""

#. type: TP
#: man/man9/kins.9:274
#, no-wrap
msgid "B<genhexkins.limit-iterations>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:277 man/man9/kins.9:364
msgid "Limit of iterations, if exceeded iterations stop with no convergence."
msgstr ""

#. type: TP
#: man/man9/kins.9:279
#, no-wrap
msgid "B<genhexkins.max-error>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:282 man/man9/kins.9:369
msgid "Maximum error value, if exceeded iterations stop with no convergence."
msgstr ""

#. type: TP
#: man/man9/kins.9:284
#, no-wrap
msgid "B<genhexkins.last-iterations>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:287 man/man9/kins.9:374
msgid "Number of iterations spent for the last forward kinematics solution."
msgstr ""

#. type: TP
#: man/man9/kins.9:289
#, no-wrap
msgid "B<genhexkins.max-iterations>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:293 man/man9/kins.9:380
msgid ""
"Maximum number of iterations spent for a converged solution during current "
"session."
msgstr ""

#. type: TP
#: man/man9/kins.9:295
#, no-wrap
msgid "B<genhexkins.tool-offset>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:299
msgid ""
"TCP offset from platform origin along Z to implement RTCP function. To avoid "
"joints jump change tool offset only when the platform is not tilted."
msgstr ""

#. type: SS
#: man/man9/kins.9:300
#, no-wrap
msgid "genserkins - generalized serial kinematics"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:304
msgid ""
"Kinematics that can model a general serial-link manipulator with up to 6 "
"angular joints.  (See switchkins documentation for more info)"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:312
msgid ""
"The kinematics use Denavit-Hartenberg definition for the joint and links. "
"The DH definitions are the ones used by John J Craig in \"Introduction to "
"Robotics: Mechanics and Control\" The parameters for the manipulator are "
"defined by HAL pins.  Note that this uses a convention sometimes known as "
"\"Modified DH Parameters\" and this must be borne in mind when setting up "
"the system.  https://w.wiki/NcY"
msgstr ""

#. type: TP
#: man/man9/kins.9:312
#, no-wrap
msgid "B<genserkins.A->I<N>"
msgstr ""

#. type: TP
#: man/man9/kins.9:316
#, no-wrap
msgid "B<genserkins.ALPHA->I<N>"
msgstr ""

#. type: TP
#: man/man9/kins.9:320
#, no-wrap
msgid "B<genserkins.D->I<N>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:323
msgid "Parameters describing the I<N>th joint's geometry."
msgstr ""

#. type: SS
#: man/man9/kins.9:324
#, no-wrap
msgid "maxkins - 5-axis kinematics example"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:329
msgid ""
"Kinematics for Chris Radek's tabletop 5 axis mill named 'max' with tilting "
"head (B axis) and horizintal rotary mounted to the table (C axis).  Provides "
"UVW motion in the rotated coordinate system.  The source file, maxkins.c, "
"may be a useful starting point for other 5-axis systems."
msgstr ""

#. type: SS
#: man/man9/kins.9:330
#, no-wrap
msgid "pentakins - Pentapod Kinematics"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:334
msgid ""
"Gives five degrees of freedom in position and orientation (XYZAB).  The "
"location of base and effector joints is defined by HAL parameters.  The "
"forward kinematics iteration is controlled by HAL pins."
msgstr ""

#. type: TP
#: man/man9/kins.9:334
#, no-wrap
msgid "B<pentakins.base.>I<N>B<.x>"
msgstr ""

#. type: TP
#: man/man9/kins.9:338
#, no-wrap
msgid "B<pentakins.base.>I<N>B<.y>"
msgstr ""

#. type: TP
#: man/man9/kins.9:342
#, no-wrap
msgid "B<pentakins.base.>I<N>B<.z>"
msgstr ""

#. type: TP
#: man/man9/kins.9:346
#, no-wrap
msgid "B<pentakins.effector.>I<N>B<.r>"
msgstr ""

#. type: TP
#: man/man9/kins.9:350
#, no-wrap
msgid "B<pentakins.effector.>I<N>B<.z>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:354
msgid ""
"Parameters describing the I<N>th effector joint's radius and axial position."
msgstr ""

#. type: TP
#: man/man9/kins.9:356
#, no-wrap
msgid "B<pentakins.convergence-criterion>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:359
msgid "Minimum error value that ends iterations with converged solution."
msgstr ""

#. type: TP
#: man/man9/kins.9:361
#, no-wrap
msgid "B<pentakins.limit-iterations>"
msgstr ""

#. type: TP
#: man/man9/kins.9:366
#, no-wrap
msgid "B<pentakins.max-error>"
msgstr ""

#. type: TP
#: man/man9/kins.9:371
#, no-wrap
msgid "B<pentakins.last-iterations>"
msgstr ""

#. type: TP
#: man/man9/kins.9:376
#, no-wrap
msgid "B<pentakins.max-iterations>"
msgstr ""

#. type: TP
#: man/man9/kins.9:382
#, no-wrap
msgid "B<pentakins.tool-offset>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:386
msgid ""
"TCP offset from effector origin along Z to implement RTCP function. To avoid "
"joints jump change tool offset only when the platform is not tilted."
msgstr ""

#. type: SS
#: man/man9/kins.9:387
#, no-wrap
msgid "pumakins - kinematics for puma typed robots"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:389
msgid "Kinematics for a puma-style robot with 6 joints"
msgstr ""

#. type: TP
#: man/man9/kins.9:389
#, no-wrap
msgid "B<pumakins.A2>"
msgstr ""

#. type: TP
#: man/man9/kins.9:393
#, no-wrap
msgid "B<pumakins.A3>"
msgstr ""

#. type: TP
#: man/man9/kins.9:397
#, no-wrap
msgid "B<pumakins.D3>"
msgstr ""

#. type: TP
#: man/man9/kins.9:401
#, no-wrap
msgid "B<pumakins.D4>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:404
msgid "Describe the geometry of the robot"
msgstr ""

#. type: SS
#: man/man9/kins.9:405
#, no-wrap
msgid "rosekins - kinematics for a rose engine using"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:407
msgid "a transverse, longitudinal, and rotary joint (3 joints)"
msgstr ""

#. type: SS
#: man/man9/kins.9:408
#, no-wrap
msgid "rotarydeltakins - kinematics for a rotary delta machine"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:410
msgid "Rotary delta robot (3 Joints)"
msgstr ""

#. type: SS
#: man/man9/kins.9:411
#, no-wrap
msgid "rotatekins - Rotated Kinematics"
msgstr ""

#. type: SS
#: man/man9/kins.9:414
#, no-wrap
msgid "scarakins - kinematics for SCARA-type robots"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:416
msgid "(See switchkins documentation for more info)"
msgstr ""

#. type: TP
#: man/man9/kins.9:416
#, no-wrap
msgid "B<scarakins.D1>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:419
msgid "Vertical distance from the ground plane to the center of the inner arm."
msgstr ""

#. type: TP
#: man/man9/kins.9:419
#, no-wrap
msgid "B<scarakins.D2>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:423
msgid ""
"Horizontal distance between joint[0] axis and joint[1] axis, ie.  the length "
"of the inner arm."
msgstr ""

#. type: TP
#: man/man9/kins.9:423
#, no-wrap
msgid "B<scarakins.D3>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:428
msgid ""
"Vertical distance from the center of the inner arm to the center of the "
"outer arm.  May be positive or negative depending on the structure of the "
"robot."
msgstr ""

#. type: TP
#: man/man9/kins.9:428
#, no-wrap
msgid "B<scarakins.D4>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:432
msgid ""
"Horizontal distance between joint[1] axis and joint[2] axis, ie.  the length "
"of the outer arm."
msgstr ""

#. type: TP
#: man/man9/kins.9:432
#, no-wrap
msgid "B<scarakins.D5>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:436
msgid ""
"Vertical distance from the end effector to the tooltip.  Positive means the "
"tooltip is lower than the end effector, and is the normal case."
msgstr ""

#. type: TP
#: man/man9/kins.9:436
#, no-wrap
msgid "B<scarakins.D6>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:442
msgid ""
"Horizontal distance from the centerline of the end effector (and the joints "
"2 and 3 axis) and the tooltip.  Zero means the tooltip is on the "
"centerline.  Non-zero values should be positive, if negative they introduce "
"a 180 degree offset on the value of joint[3]."
msgstr ""

#. type: SS
#: man/man9/kins.9:443
#, no-wrap
msgid "tripodkins - Tripod Kinematics"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:446
msgid ""
"The joints represent the distance of the controlled point from three "
"predefined locations (the motors), giving three degrees of freedom in "
"position (XYZ)"
msgstr ""

#. type: TP
#: man/man9/kins.9:446
#, no-wrap
msgid "B<tripodkins.Bx>"
msgstr ""

#. type: TP
#: man/man9/kins.9:450
#, no-wrap
msgid "B<tripodkins.Cx>"
msgstr ""

#. type: TP
#: man/man9/kins.9:454
#, no-wrap
msgid "B<tripodkins.Cy>"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:457
msgid "The location of the three motors is (0,0), (Bx,0), and (Cx,Cy)"
msgstr ""

#. type: SS
#: man/man9/kins.9:458
#, no-wrap
msgid "xyzac-trt-kins - 5 Axis mill (Table Rotary/Tilting)"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:465
msgid ""
"Tilting table (A) and horizontal rotary mounted to table (C axis)  (5 Joints "
"0:x,1:y,2:z,3:a,4:c) with provisions to switch between xyzac and trivkins "
"kinematic types.  The joint mapping can be altered with the coordinates "
"parameter in the same way as supported by trivkins.  (See switchkins "
"documentation for more info)"
msgstr ""

#. type: SS
#: man/man9/kins.9:466
#, no-wrap
msgid "xyzbc-trt-kins - 5 Axis mill (Table Rotary/Tilting)"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:472
msgid ""
"(5 Joints 0:x,1:y,2:z,3:b,4:c) with provisions to switch between xyzbc and "
"trivkins kinematic types.  The joint mapping can be altered with the "
"coordinates parameter in the same way as supported by trivkins.  (See "
"switchkins documentation for more info)"
msgstr ""

#. type: SS
#: man/man9/kins.9:473
#, no-wrap
msgid "5axiskins - 5 Axis bridge mill"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:480
msgid ""
"XYZBCW -- the W coordinate values (typically used for tool motion) are "
"incorporated into XYZ positioning.  (Only 5 joints are needed by the "
"kinematics module but an additional joint is needed to display W values).  "
"(See switchkins documentation for more info)"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:490
msgid ""
"By default, 5axiskins uses coordinates XYZBCW assigned consecutively to "
"joints 0..5.  The module coordinates parameter may be used to assign "
"multiple joints to an axis letter and/or to assign joints to additional "
"coordinates A,U,V with a one-to-one correspondence to the assigned joints.  "
"Example: XYZBCWYV (8 joints total numbered 0..7) uses two joints for Y "
"(joints 1,6) and adds an additional coordinate V that has a one-to-one "
"relation to joint 7."
msgstr ""

#. type: Plain text
#: man/man9/kins.9:495
msgid ""
"Note: These kinematics may be used with the vismach 5axisgui providing that "
"the joint-letter assignments agree with the default ordering expected by it "
"(XYZBCW -E<gt> joints 0..5)"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:498
msgid "I<Kinematics> section in the LinuxCNC documentation"
msgstr ""

#. type: Plain text
#: man/man9/kins.9:503
msgid ""
"The HAL component B<userkins.comp> is a template for making kinematic "
"modules using the halcompile tool.  The unmodified template supports an "
"identity xyz configuration that uses 3 joints.  See B<userkins>(9) for more "
"info."
msgstr ""

#. type: TH
#: man/man9/knob2float.9:9
#, no-wrap
msgid "KNOB2FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/knob2float.9:13
msgid "knob2float - Convert counts (probably from an encoder) to a float value"
msgstr ""

#. type: Plain text
#: man/man9/knob2float.9:16
msgid "B<loadrt knob2float [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/knob2float.9:17
#, no-wrap
msgid "B<knob2float.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/knob2float.9:21
#, no-wrap
msgid "B<knob2float.>I<N>B<.counts> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/knob2float.9:24
msgid "Counts"
msgstr ""

#. type: TP
#: man/man9/knob2float.9:24
#, no-wrap
msgid "B<knob2float.>I<N>B<.enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/knob2float.9:27
msgid "When TRUE, output is controlled by count, when FALSE, output is fixed"
msgstr ""

#. type: TP
#: man/man9/knob2float.9:27
#, no-wrap
msgid "B<knob2float.>I<N>B<.scale> float in "
msgstr ""

#. type: Plain text
#: man/man9/knob2float.9:30
msgid "Amount of output change per count"
msgstr ""

#. type: TP
#: man/man9/knob2float.9:30
#, no-wrap
msgid "B<knob2float.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/knob2float.9:33 man/man9/tristate_bit.9:27
#: man/man9/tristate_float.9:27
msgid "Output value"
msgstr ""

#. type: TP
#: man/man9/knob2float.9:34
#, no-wrap
msgid "B<knob2float.>I<N>B<.max-out> float rw (default: I<1.0>)"
msgstr ""

#. type: Plain text
#: man/man9/knob2float.9:37
msgid "Maximum output value, further increases in count will be ignored"
msgstr ""

#. type: TP
#: man/man9/knob2float.9:37
#, no-wrap
msgid "B<knob2float.>I<N>B<.min-out> float rw (default: I<0.0>)"
msgstr ""

#. type: Plain text
#: man/man9/knob2float.9:40
msgid "Minimum output value, further decreases in count will be ignored"
msgstr ""

#. type: TH
#: man/man9/latencybins.9:9
#, no-wrap
msgid "LATENCYBINS"
msgstr ""

#. type: Plain text
#: man/man9/latencybins.9:13
msgid "latencybins - comp utility for scripts/latency-histogram"
msgstr ""

#. type: Plain text
#: man/man9/latencybins.9:34
#, no-wrap
msgid ""
"Usage:\n"
"  Read availablebins pin for the number of bins available.\n"
"  Set the maxbinnumber pin for the number of \\(+- bins.\n"
"    Ensure maxbinnumber E<lt>= availablebins\n"
"    For maxbinnumber = N, the bins are numbered:\n"
"       -N ... 0 ... + N bins\n"
"    (the -0 bin is not populated)\n"
"    (total effective bins = 2*maxbinnumber +1)\n"
"  Set nsbinsize pin for the binsize (ns)\n"
"  Iterate:\n"
"    Set index pin to a bin number: 0 E<lt>= index E<lt>= maxbinnumber.\n"
"    Read check pin and verify that check pin == index pin.\n"
"    Read output pins:\n"
"         pbinvalue is count for bin = +index\n"
"         nbinvalue is count for bin = -index\n"
"         pextra    is count for all bins E<gt> maxbinnumber\n"
"         nextra    is count for all bins E<lt> maxbinnumber\n"
"         latency-min is max negative latency\n"
"         latency-max is max positive latency\n"
msgstr ""

#. type: Plain text
#: man/man9/latencybins.9:39
#, no-wrap
msgid ""
"   If index is out of range ( index E<lt> 0 or index E<gt> maxbinnumber)\n"
"   then pbinvalue = nbinvalue = -1.\n"
"   The reset pin may be used to restart.\n"
"   The latency pin outputs the instantaneous latency.\n"
msgstr ""

#. type: Plain text
#: man/man9/latencybins.9:41
msgid "Maintainers note: hardcoded for MAXBINNUMBER==1000"
msgstr ""

#. type: TP
#: man/man9/latencybins.9:43
#, no-wrap
msgid "B<latencybins.>I<N>"
msgstr ""

#. type: TP
#: man/man9/latencybins.9:47
#, no-wrap
msgid "B<latencybins.>I<N>B<.maxbinnumber> s32 in (default: I<1000>)"
msgstr ""

#. type: TP
#: man/man9/latencybins.9:51
#, no-wrap
msgid "B<latencybins.>I<N>B<.index> s32 in "
msgstr ""

#. type: TP
#: man/man9/latencybins.9:55
#, no-wrap
msgid "B<latencybins.>I<N>B<.reset> bit in "
msgstr ""

#. type: TP
#: man/man9/latencybins.9:59
#, no-wrap
msgid "B<latencybins.>I<N>B<.nsbinsize> s32 in "
msgstr ""

#. type: TP
#: man/man9/latencybins.9:63
#, no-wrap
msgid "B<latencybins.>I<N>B<.check> s32 out "
msgstr ""

#. type: TP
#: man/man9/latencybins.9:67
#, no-wrap
msgid "B<latencybins.>I<N>B<.latency> s32 out "
msgstr ""

#. type: TP
#: man/man9/latencybins.9:71
#, no-wrap
msgid "B<latencybins.>I<N>B<.latency-max> s32 out "
msgstr ""

#. type: TP
#: man/man9/latencybins.9:75
#, no-wrap
msgid "B<latencybins.>I<N>B<.latency-min> s32 out "
msgstr ""

#. type: TP
#: man/man9/latencybins.9:79
#, no-wrap
msgid "B<latencybins.>I<N>B<.pbinvalue> s32 out "
msgstr ""

#. type: TP
#: man/man9/latencybins.9:83
#, no-wrap
msgid "B<latencybins.>I<N>B<.nbinvalue> s32 out "
msgstr ""

#. type: TP
#: man/man9/latencybins.9:87
#, no-wrap
msgid "B<latencybins.>I<N>B<.pextra> s32 out "
msgstr ""

#. type: TP
#: man/man9/latencybins.9:91
#, no-wrap
msgid "B<latencybins.>I<N>B<.nextra> s32 out "
msgstr ""

#. type: TP
#: man/man9/latencybins.9:95
#, no-wrap
msgid "B<latencybins.>I<N>B<.variance> s32 out "
msgstr ""

#. type: TP
#: man/man9/latencybins.9:99
#, no-wrap
msgid "B<latencybins.>I<N>B<.availablebins> s32 out (default: I<1000>)"
msgstr ""

#. type: TH
#: man/man9/lcd.9:1
#, no-wrap
msgid "LCD"
msgstr ""

#. type: TH
#: man/man9/lcd.9:1
#, no-wrap
msgid "2012-09-17"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:5
msgid "lcd - Stream HAL data to an LCD screen"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:8
msgid ""
"B<loadrt lcd fmt_strings=\"\"Plain Text %4.4f\\enAnd So on|Second Page, Next "
"Inst\"\">"
msgstr ""

#. type: TP
#: man/man9/lcd.9:9
#, no-wrap
msgid "B<lcd> (requires a floating-point thread). All LCD instances are updated by the"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:12
msgid "same function."
msgstr ""

#. type: TP
#: man/man9/lcd.9:14
#, no-wrap
msgid "B<lcd.>I<NN>B<.out> (u32) out"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:18
msgid ""
"The output byte stream is sent via this pin. One character is sent every "
"thread invocation. There in no handshaking provided."
msgstr ""

#. type: TP
#: man/man9/lcd.9:18
#, no-wrap
msgid "B<lcd.>I<NN>B<.page.>I<PP.>B<arg.>I<NN> (float/s32/u32/bit) in"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:21
msgid "The input pins have types matched to the format string specifiers."
msgstr ""

#. type: TP
#: man/man9/lcd.9:21
#, no-wrap
msgid "B<lcd.>I<NN>B<.page_num> (u32) in"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:25
msgid ""
"Selects the page number. Multiple layouts may be defined, and this pin "
"switches between them."
msgstr ""

#. type: TP
#: man/man9/lcd.9:25
#, no-wrap
msgid "B<lcd.>I<NN>B<.contrast> (float) in"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:30
msgid ""
"Attempts to set the contrast of the LCD screen using the byte sequence ESC C "
"and then a value from 0x20 to 0xBF (matching the Mesa 7i73). The value "
"should be between 0 and 1."
msgstr ""

#. type: TP
#: man/man9/lcd.9:32
#, no-wrap
msgid "B<lcd.>I<NN>B<.decimal-separator> (u32) rw"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:37
msgid ""
"Sets the decimal separator used for floating point numbers. The default "
"value is 46 (0x2E) which corresponds to \".\". If a comma is required then "
"set this parameter to 44 (0x2C)."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:41
msgid ""
"B<lcd> takes format strings much like those used in C and many other "
"languages in the printf and scanf functions and their variants."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:50
msgid ""
"The component was written specifically to support the Mesa 7i73 pendant "
"controller, however it may be of use streaming data to other character "
"devices and, as the output format mimics the ADM3 terminal format, it could "
"be used to stream data to a serial device. Perhaps even a genuine ADM3.  The "
"strings contain a mixture of text values (which are displayed directly), "
"\"escaped\" formatting codes and numerical format descriptors.  For a "
"detailed description of formatting codes see: http://en.wikipedia.org/wiki/"
"Printf"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:53
msgid ""
"The component can be configured to display an unlimited number of "
"differently-formatted pages, which may be selected with a HAL pin."
msgstr ""

#. type: TP
#: man/man9/lcd.9:53
#, no-wrap
msgid " B<Escaped codes>"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:59
#, no-wrap
msgid ""
" \\en Inserts a clear-to-end, carriage return and line feed character. This will \n"
"still linefeed and clear even if an automatic wrap has occurred (lcd has no \n"
"knowledge of the width of the lcd display.) To print in the rightmost column it\n"
"is necessary to allow the format to wrap and omit the \\en code.\n"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:62
#, no-wrap
msgid ""
" \\et Inserts a tab (actually 4 spaces in the current version rather than a true\n"
"tab.)\n"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:67
#, no-wrap
msgid ""
" \\eNN inserts the character defined by the hexadecimal code NN. \n"
" As the ',' character is used in the format string to separate LCD instances\n"
" it must be represented by \\e2C in the format string. (the decimal\n"
" separator is handled differently)\n"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:69
#, no-wrap
msgid " \\e\\e Inserts a literal \\e.\n"
msgstr ""

#. type: TP
#: man/man9/lcd.9:70
#, no-wrap
msgid " B<Numerical formats>"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:79
msgid ""
"B<lcd> differs slightly from the standard printf conventions. One "
"significant difference is that width limits are strictly enforced to prevent "
"the LCD display wrapping and spoiling the layout. The field width includes "
"the sign character so that negative numbers will often have a smaller valid "
"range than positive.  Numbers that do not fit in the specified width are "
"displayed as a line of asterisks (B<********>)."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:82
msgid ""
"Each format begins with a \"%\" symbol. (For a literal % use \"%%\").  "
"Immediately after the % the following modifiers may be used:"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:85
msgid ""
"\" \" (space) Pad the number to the specified width with spaces. This is the "
"default and is not strictly necessary."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:87
msgid "\"0\" Pad the number to the specified width with the numeral 0."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:91
msgid ""
"\"+\" Force display of a + symbol before positive numbers. This (like the - "
"sign)  will appear immediately to the left of the digits for a space-padded "
"number and in the extreme left position for a 0-padded number."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:98
msgid ""
"\"1234567890\" A numerical entry (other than the leading 0 above)  defines "
"the total number of characters to display including the decimal separator "
"and the sign. Whilst this number can be as many digits as required the "
"maximum field width is 20 characters. The inherent precision of the \"double"
"\" data type means that more than 14 digits will tend to show errors in the "
"least significant digits. The integer data types will never fill more than "
"10 decimal digits."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:104
msgid ""
"Following the width specifier should be the decimal specifier. This can only "
"be a full-stop character (.) as the comma (,) is used as the instance "
"separator.  Currently lcd does not access the locale information to "
"determine the correct separator but the B<decimal-separator> HAL parameter "
"can be used to choose any desired separator."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:108
msgid ""
"Following the decimal separator should be a number that determines how many "
"places of decimals to display. This entry is ignored in the case of integer "
"formats."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:112
#, no-wrap
msgid ""
"All the above modifiers are optional, but to specify a decimal precision the \n"
"decimal point must precede the precision. For example %.3f. \n"
" The default decimal precision is 4.\n"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:114
msgid "The numerical formats supported are:"
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:121
msgid ""
"B<%f %F> (for example, %+09.3f) These create a floating-point type HAL pin. "
"The example would be displayed in a 9-character field, with 3 places of "
"decimals, . as a decimal separator, padded to the left with 0s and with a "
"sign displayed for both positive and negative. Conversely a plain %f would "
"be 6 digits of decimal, variable format width, with a sign only shown for "
"negative numbers. both %f and %F create exactly the same format."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:125
msgid ""
"B<%i %d> (For example %+ 4d) Creates a signed (s32) HAL pin. The example "
"would display the value at a fixed 4 characters, space padded, width "
"including the + giving a range of +999 to -999. %i and %d create identical "
"output."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:128
msgid ""
"B<%u> (for example %08u) Creates an unsigned (u32) HAL pin. The example "
"would be a fixed 8 characters wide, padded with zeros."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:132
msgid ""
"B<%x, %X> Creates an unsigned (u32) HAL pin and displays the value in "
"Hexadecimal.  Both %x and %X display capital letters for digits ABCDEF. A "
"width may be specified, though the u32 HAL type is only 8 hex digits wide."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:134
msgid "B<%o> Creates an unsigned (u32) pin and displays the value in Octal."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:139
msgid ""
"B<%c> Creates a u32 HAL pin and displays the character corresponding to the "
"value of the pin. Values less than 32 (space) are suppressed. A width "
"specifier may be used, for example %20c might be used to create a complete "
"line of one character."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:148
msgid ""
"B<%b> This specifier has no equivalent in printf. It creates a bit (boolean) "
"type HAL pin. The b should be followed by two characters and the display "
"will show the first of these when the pin is true, and the second when "
"false. Note that the characters follow, not precede the \"b\", unlike the "
"case with other formats.  The characters may be \"escaped\" Hex values. For "
"example \"%b\\eFF \" will display a solid black block if true, and a space "
"if false and \"%b\\e7F\\e7E\" would display right-arrow for false and left-"
"arrow for true. An unexpected value of 'E' indicates a formatting error."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:153
msgid ""
"B<Pages> The page separator is the \"|\" (pipe) character. (if the actual "
"character is needed then \\e7C may be used). A \"Page\" in this context "
"refers to a separate format which may be displayed on the same display."
msgstr ""

#. type: Plain text
#: man/man9/lcd.9:160
msgid ""
"B<Instances> The instance separator is the comma. This creates a completely "
"separate lcd instance, for example to drive a second lcd display on the "
"second 7i73.  The use of comma to separate instances is built in to the "
"modparam reading code so not even escaped commas \"\\e,\" can be used. A "
"comma may be displayed by using the \\e2C sequence."
msgstr ""

#. type: TH
#: man/man9/limit1.9:9
#, no-wrap
msgid "LIMIT1"
msgstr ""

#. type: Plain text
#: man/man9/limit1.9:13
msgid "limit1 - Limit the output signal to fall between min and max"
msgstr ""

#. type: Plain text
#: man/man9/limit1.9:16
msgid "B<loadrt limit1 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/limit1.9:17
#, no-wrap
msgid "B<limit1.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/limit1.9:21
#, no-wrap
msgid "B<limit1.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/limit1.9:25
#, no-wrap
msgid "B<limit1.>I<N>B<.out> float out "
msgstr ""

#. type: TP
#: man/man9/limit1.9:29
#, no-wrap
msgid "B<limit1.>I<N>B<.min> float in (default: I<-1e20>)"
msgstr ""

#. type: TP
#: man/man9/limit1.9:33
#, no-wrap
msgid "B<limit1.>I<N>B<.max> float in (default: I<1e20>)"
msgstr ""

#. type: TH
#: man/man9/limit2.9:9
#, no-wrap
msgid "LIMIT2"
msgstr ""

#. type: Plain text
#: man/man9/limit2.9:13
msgid ""
"limit2 - Limit the output signal to fall between min and max and limit its "
"slew rate to less than maxv per second.  When the signal is a position, this "
"means that position and velocity are limited."
msgstr ""

#. type: Plain text
#: man/man9/limit2.9:16
msgid "B<loadrt limit2 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/limit2.9:17
#, no-wrap
msgid "B<limit2.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/limit2.9:21
#, no-wrap
msgid "B<limit2.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/limit2.9:25
#, no-wrap
msgid "B<limit2.>I<N>B<.out> float out "
msgstr ""

#. type: TP
#: man/man9/limit2.9:29
#, no-wrap
msgid "B<limit2.>I<N>B<.load> bit in "
msgstr ""

#. type: Plain text
#: man/man9/limit2.9:32
msgid "When TRUE, immediately set B<out to in>, ignoring maxv"
msgstr ""

#. type: TP
#: man/man9/limit2.9:32
#, no-wrap
msgid "B<limit2.>I<N>B<.min> float in (default: I<-1e20>)"
msgstr ""

#. type: TP
#: man/man9/limit2.9:36
#, no-wrap
msgid "B<limit2.>I<N>B<.max> float in (default: I<1e20>)"
msgstr ""

#. type: TP
#: man/man9/limit2.9:40
#, no-wrap
msgid "B<limit2.>I<N>B<.maxv> float in (default: I<1e20>)"
msgstr ""

#. type: TH
#: man/man9/limit3.9:9
#, no-wrap
msgid "LIMIT3"
msgstr ""

#. type: Plain text
#: man/man9/limit3.9:13
msgid "limit3 - Follow input signal while obeying limits"
msgstr ""

#. type: Plain text
#: man/man9/limit3.9:18
msgid ""
"Limit the output signal to fall between min and max, limit its slew rate to "
"less than maxv per second, and limit its second derivative to less than maxa "
"per second squared.  When the signal is a position, this means that the "
"position, velocity, and acceleration are limited."
msgstr ""

#. type: TP
#: man/man9/limit3.9:19
#, no-wrap
msgid "B<limit3.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/limit3.9:23
#, no-wrap
msgid "B<limit3.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/limit3.9:27
#, no-wrap
msgid "B<limit3.>I<N>B<.enable> bit in (default: I<1>)"
msgstr ""

#. type: Plain text
#: man/man9/limit3.9:30
msgid "1: out follows in, 0: out returns to 0 (always per constraints)"
msgstr ""

#. type: TP
#: man/man9/limit3.9:30
#, no-wrap
msgid "B<limit3.>I<N>B<.out> float out "
msgstr ""

#. type: TP
#: man/man9/limit3.9:34
#, no-wrap
msgid "B<limit3.>I<N>B<.load> bit in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/limit3.9:38
msgid "When TRUE, immediately set B<out to in>, ignoring maxv and maxa"
msgstr ""

#. type: TP
#: man/man9/limit3.9:38
#, no-wrap
msgid "B<limit3.>I<N>B<.min> float in (default: I<-1e20>)"
msgstr ""

#. type: TP
#: man/man9/limit3.9:42
#, no-wrap
msgid "B<limit3.>I<N>B<.max> float in (default: I<1e20>)"
msgstr ""

#. type: TP
#: man/man9/limit3.9:46
#, no-wrap
msgid "B<limit3.>I<N>B<.maxv> float in (default: I<1e20>)"
msgstr ""

#. type: TP
#: man/man9/limit3.9:50
#, no-wrap
msgid "B<limit3.>I<N>B<.maxa> float in (default: I<1e20>)"
msgstr ""

#. type: TP
#: man/man9/limit3.9:54
#, no-wrap
msgid "B<limit3.>I<N>B<.smooth-steps> u32 in (default: I<2>)"
msgstr ""

#. type: Plain text
#: man/man9/limit3.9:59
msgid ""
"Smooth out acceleration this many periods before reaching input or max/min "
"limit.  Higher values avoid oscillation, but will accelerate slightly more "
"slowly."
msgstr ""

#. type: TH
#: man/man9/lincurve.9:9
#, no-wrap
msgid "LINCURVE"
msgstr ""

#. type: Plain text
#: man/man9/lincurve.9:13
msgid "lincurve - one-dimensional lookup table"
msgstr ""

#. type: Plain text
#: man/man9/lincurve.9:16
msgid ""
"B<loadrt lincurve [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]] "
"[personality=>I<P,P,...>B<]>"
msgstr ""

#. type: Plain text
#: man/man9/lincurve.9:23
msgid ""
"This component can be used to map any floating-point input to a floating-"
"point output. Typical uses would include linearisation of thermocouples, "
"defining PID gains that vary with external factors or to substitute for any "
"mathematical function where absolute accuracy is not required."
msgstr ""

#. type: Plain text
#: man/man9/lincurve.9:28
msgid ""
"The component can be thought of as a 2-dimensional graph of points in (x,y)  "
"space joined by straight lines. The input value is located on the x axis, "
"followed up until it touches the line, and the output of the component is "
"set to the corresponding y-value."
msgstr ""

#. type: Plain text
#: man/man9/lincurve.9:31
msgid ""
"The (x,y) points are defined by the x-val-NN and y-val-NN parameters which "
"need to be set in the HAL file using \"setp\" commands."
msgstr ""

#. type: Plain text
#: man/man9/lincurve.9:33
msgid "The maximum number if (x,y) points supported is 16."
msgstr ""

#. type: Plain text
#: man/man9/lincurve.9:37
msgid ""
"For input values less than the x-val-00 breakpoint the y-val-00 is "
"returned.  For x greater than the largest x-val-NN the yval corresponding to "
"x-max is returned (ie, no extrapolation is performed.)"
msgstr ""

#. type: Plain text
#: man/man9/lincurve.9:40
msgid ""
"Sample usage: loadrt lincurve count=3 personality=4,4,4 for a set of three 4-"
"element graphs."
msgstr ""

#. type: TP
#: man/man9/lincurve.9:42
#, no-wrap
msgid "B<lincurve.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/lincurve.9:46
#, no-wrap
msgid "B<lincurve.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/lincurve.9:49
#, no-wrap
msgid "B<lincurve.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/lincurve.9:52 man/man9/offset.9:33
msgid "The output value"
msgstr ""

#. type: TP
#: man/man9/lincurve.9:52
#, no-wrap
msgid "B<lincurve.>I<N>B<.out-io> float io "
msgstr ""

#. type: Plain text
#: man/man9/lincurve.9:55
msgid "The output value, compatible with PID gains"
msgstr ""

#. type: TP
#: man/man9/lincurve.9:56
#, no-wrap
msgid "B<lincurve.>I<N>B<.x-val->I<MM> float rw (MM=00..personality) "
msgstr ""

#. type: Plain text
#: man/man9/lincurve.9:59
msgid "axis breakpoints"
msgstr ""

#. type: TP
#: man/man9/lincurve.9:59
#, no-wrap
msgid "B<lincurve.>I<N>B<.y-val->I<MM> float rw (MM=00..personality) "
msgstr ""

#. type: Plain text
#: man/man9/lincurve.9:62
msgid "output values to be interpolated"
msgstr ""

#. type: TH
#: man/man9/lineardeltakins.9:1
#, no-wrap
msgid "LINEARDELTAKINS"
msgstr ""

#. type: TH
#: man/man9/lineardeltakins.9:1
#, no-wrap
msgid "2013-07-11"
msgstr ""

#. type: TH
#: man/man9/lineardeltakins.9:1 man/man9/rosekins.9:1
#, no-wrap
msgid "Kinematics Component"
msgstr ""

#. type: Plain text
#: man/man9/lineardeltakins.9:5
msgid "lineardeltakins - Kinematics for a linear delta robot"
msgstr ""

#. type: Plain text
#: man/man9/lineardeltakins.9:9
msgid "B<loadrt lineardeltakins>"
msgstr ""

#. type: SH
#: man/man9/lineardeltakins.9:10 man/man9/rosekins.9:10
#, no-wrap
msgid "KINEMATICS"
msgstr ""

#. type: Plain text
#: man/man9/lineardeltakins.9:16
msgid ""
"The kinematics model is appropriate for a rostock/kossel-style design with "
"three joints arranged in an equilateral triangle.  (0,0) is always the "
"center of the working volume.  Joint 0 is at (0,R) and subsequent joints are "
"120 degrees clockwise (note that joint 0 is not at zero radians).  The "
"length of the arm is L."
msgstr ""

#. type: Plain text
#: man/man9/lineardeltakins.9:20
msgid ""
"Joints 0-2 are the linear carriages.  Axes ABC and UVW are passed through "
"unchanged in joints 3-8, so that e.g., A can still be used to control an "
"extruder."
msgstr ""

#. type: TP
#: man/man9/lineardeltakins.9:22
#, no-wrap
msgid "B<lineardeltakins.R> float in"
msgstr ""

#. type: Plain text
#: man/man9/lineardeltakins.9:25
msgid "Effective diameter of the platform."
msgstr ""

#. type: Plain text
#: man/man9/lineardeltakins.9:29
msgid ""
"R is different than the distance from the center of the table to the center "
"of the belt/smooth rod/extrusion that the joints ride on.  In RepRap delta "
"parlance, R is DELTA_RADIUS which is computed as"
msgstr ""

#. type: Plain text
#: man/man9/lineardeltakins.9:31
msgid ""
"DELTA_SMOOTH_ROD_OFFSET - DELTA_EFFECTOR_OFFSET - DELTA_CARRIAGE_OFFSET."
msgstr ""

#. type: TP
#: man/man9/lineardeltakins.9:32
#, no-wrap
msgid "B<lineardeltakins.L> float in"
msgstr ""

#. type: Plain text
#: man/man9/lineardeltakins.9:36
msgid ""
"Length of the rod connecting the carriage to the effector.  In RepRap delta "
"parlance, L is DELTA_DIAGONAL_ROD"
msgstr ""

#. type: Plain text
#: man/man9/lineardeltakins.9:42
msgid ""
"The R and L values can be adjusted while LinuxCNC is running.  However, "
"doing so while in coordinated mode will lead to a step change in joint "
"position, which generally will trigger a following error if in joint mode "
"with machine on."
msgstr ""

#. type: TH
#: man/man9/logic.9:9
#, no-wrap
msgid "LOGIC"
msgstr ""

#. type: Plain text
#: man/man9/logic.9:13
msgid "logic - LinuxCNC HAL component providing configurable logic functions"
msgstr ""

#. type: Plain text
#: man/man9/logic.9:18
msgid ""
"B<loadrt logic> B<[count=N|names=name1[,name2...]]> "
"B<personality=0xXXXX[,0xXXXX...]>"
msgstr ""

#. type: TP
#: man/man9/logic.9:19
#, no-wrap
msgid "B<count> The number of logical gates."
msgstr ""

#. type: TP
#: man/man9/logic.9:21
#, no-wrap
msgid "B<names> The named logical gates to create."
msgstr ""

#. type: TP
#: man/man9/logic.9:23
#, no-wrap
msgid "B<personality> Comma separated list of hexadecimal number."
msgstr ""

#. type: Plain text
#: man/man9/logic.9:27
msgid ""
"Each number defines the behaviour of the individual logic gate.  The list "
"must have the same number of personalities as the N count."
msgstr ""

#. type: Plain text
#: man/man9/logic.9:34
msgid ""
"General `logic function' component.  Can perform `and', `or', `nand', `nor' "
"and `xor' of up to 16 inputs."
msgstr ""

#. type: Plain text
#: man/man9/logic.9:37
msgid ""
"Determine the proper value for `personality' by adding the inputs and "
"outputs then convert to hex:"
msgstr ""

#. type: Plain text
#: man/man9/logic.9:39
msgid "The number of input pins, usually from 2 to 16"
msgstr ""

#. type: Plain text
#: man/man9/logic.9:41
msgid "256 (0x100)  if the `and' output is desired"
msgstr ""

#. type: Plain text
#: man/man9/logic.9:43
msgid "512 (0x200)  if the `or' output is desired"
msgstr ""

#. type: Plain text
#: man/man9/logic.9:45
msgid "1024 (0x400)  if the `xor' (exclusive or) output is desired"
msgstr ""

#. type: Plain text
#: man/man9/logic.9:47
msgid "2048 (0x800)  if the `nand' output is desired"
msgstr ""

#. type: Plain text
#: man/man9/logic.9:49
msgid "4096 (0x1000)  if the `nor' output is desired"
msgstr ""

#. type: Plain text
#: man/man9/logic.9:52
msgid ""
"Outputs can be combined, for example 2 + 256 + 1024 = 1282 converted to hex "
"would be 0x502 and would have two inputs and have both `xor' and `and' "
"outputs."
msgstr ""

#. type: TP
#: man/man9/logic.9:54
#, no-wrap
msgid "B<logic.>I<N>"
msgstr ""

#. type: Plain text
#: man/man9/logic.9:57
msgid "Read the inputs and toggle the output bit."
msgstr ""

#. type: TP
#: man/man9/logic.9:58
#, no-wrap
msgid "B<logic.>I<N>B<.in->I<MM> bit in (MM=00..personality & 0xff) "
msgstr ""

#. type: TP
#: man/man9/logic.9:62
#, no-wrap
msgid "B<logic.>I<N>B<.and> bit out [if personality & 0x100] "
msgstr ""

#. type: TP
#: man/man9/logic.9:66
#, no-wrap
msgid "B<logic.>I<N>B<.or> bit out [if personality & 0x200] "
msgstr ""

#. type: TP
#: man/man9/logic.9:70
#, no-wrap
msgid "B<logic.>I<N>B<.xor> bit out [if personality & 0x400] "
msgstr ""

#. type: TP
#: man/man9/logic.9:74
#, no-wrap
msgid "B<logic.>I<N>B<.nand> bit out [if personality & 0x800] "
msgstr ""

#. type: TP
#: man/man9/logic.9:78
#, no-wrap
msgid "B<logic.>I<N>B<.nor> bit out [if personality & 0x1000] "
msgstr ""

#. type: Plain text
#: man/man9/logic.9:88
msgid ""
"This is an OR circuit connected to three different signals, two inputs named "
"sig-in-0 and sig-in-1, and one output named sig-out.  First the circuit is "
"defined, then its function is connected to the servo real time thread, last, "
"its pins are connected to the wanted signals."
msgstr ""

#. type: Plain text
#: man/man9/logic.9:95
#, no-wrap
msgid ""
"loadrt logic count=1 personality=0x202\n"
"addf logic.0 servo-thread\n"
"net sig-in-0 =E<gt> logic.0.in-00\n"
"net sig-in-1 =E<gt> logic.0.in-01\n"
"net sig-out  E<lt>= logic.0.or\n"
msgstr ""

#. type: Plain text
#: man/man9/logic.9:99
msgid "This is a named AND circuit with two inputs and one output."
msgstr ""

#. type: Plain text
#: man/man9/logic.9:106
#, no-wrap
msgid ""
"loadrt logic names=both personality=0x102\n"
"addf both servo-thread\n"
"net sig-in-0 =E<gt> both.in-00\n"
"net sig-in-1 =E<gt> both.in-01\n"
"net sig-out  E<lt>= both.and\n"
msgstr ""

#. type: Plain text
#: man/man9/logic.9:117
msgid "B<and2>(9), B<lut5>(9), B<not>(9), B<or2>(9), B<xor2>(9)"
msgstr ""

#. type: TH
#: man/man9/lowpass.9:9
#, no-wrap
msgid "LOWPASS"
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:13
msgid "lowpass - Low-pass filter"
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:16
msgid "B<loadrt lowpass [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/lowpass.9:17
#, no-wrap
msgid "B<lowpass.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/lowpass.9:21
#, no-wrap
msgid "B<lowpass.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/lowpass.9:25
#, no-wrap
msgid "B<lowpass.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:28
#, no-wrap
msgid " out += (in - out) * gain \n"
msgstr ""

#. type: TP
#: man/man9/lowpass.9:28
#, no-wrap
msgid "B<lowpass.>I<N>B<.load> bit in "
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:31
msgid ""
"When TRUE, copy B<in> to B<out> instead of applying the filter equation."
msgstr ""

#. type: TP
#: man/man9/lowpass.9:32
#, no-wrap
msgid "B<lowpass.>I<N>B<.gain> float rw "
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:39
msgid "B<gain> pin setting"
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:45
msgid ""
"The digital filter implemented is equivalent to a unity-gain continuous-time "
"single-pole low-pass filter that is preceded by a zero-order-hold and "
"sampled at a fixed period.  For a pole at B<-a> (radians/seconds) the "
"corresponding continuous-time lowpass filter LaPlace transfer function is:"
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:47
msgid "B<H(s) = a/(s + a)>"
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:50
msgid ""
"For a sampling period B<T> (seconds), the gain for this Hal lowpass "
"component is:"
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:52
msgid "B<gain = 1 - e^(-a * T)>"
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:54
msgid "e = 2.71828 https://en.wikipedia.org/wiki/E_(mathematical_constant)"
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:59
#, no-wrap
msgid ""
"B<Examples:>\n"
"     T = 0.001 seconds (typical servo thread period)\n"
"     a = (2*pi*100)    (B<100Hz> bandwidth single pole)\n"
"  gain = B<0.466>\n"
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:63
#, no-wrap
msgid ""
"     T = 0.001 seconds (typical servo thread period)\n"
"     a = (2*pi*10)     ( B<10Hz> bandwidth single pole)\n"
"  gain = B<0.0609>\n"
msgstr ""

#. type: Plain text
#: man/man9/lowpass.9:67
#, no-wrap
msgid ""
"     T = 0.001 seconds (typical servo thread period)\n"
"     a = (2*pi*1)      ( B<1Hz> bandwidth single pole)\n"
"  gain = B<0.0063>\n"
msgstr ""

#. type: TH
#: man/man9/lut5.9:9
#, no-wrap
msgid "LUT5"
msgstr ""

#. type: Plain text
#: man/man9/lut5.9:13
msgid "lut5 - Arbitrary 5-input logic function based on a look-up table"
msgstr ""

#. type: Plain text
#: man/man9/lut5.9:16
msgid "B<loadrt lut5 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/lut5.9:27
msgid ""
"B<lut5> constructs a logic function with up to 5 inputs using a B<l>ook-"
"B<u>p B<t>able. The value for B<function> can be determined by writing the "
"truth table, and computing the sum of B<all> the B<weights> for which the "
"output value would be TRUE.  The weights are hexadecimal not decimal so "
"hexadecimal math must be used to sum the weights. A wiki page has a "
"calculator to assist in computing the proper value for function."
msgstr ""

#. type: Plain text
#: man/man9/lut5.9:29
msgid "http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Lut5"
msgstr ""

#. type: Plain text
#: man/man9/lut5.9:33
msgid ""
"Note that LUT5 will generate any of the 4,294,967,296 logical functions of 5 "
"inputs so B<AND>, B<OR>, B<NAND>, B<NOR>, B<XOR> and every other "
"combinatorial function is possible."
msgstr ""

#. type: SS
#: man/man9/lut5.9:34
#, no-wrap
msgid "Example Functions"
msgstr ""

#. type: Plain text
#: man/man9/lut5.9:38
msgid ""
"A 5-input I<and> function is TRUE only when all the inputs are true, so the "
"correct value for B<function> is B<0x80000000>."
msgstr ""

#. type: Plain text
#: man/man9/lut5.9:41
msgid ""
"A 2-input I<or> function would be the sum of B<0x2> + B<0x4> + B<0x8>, so "
"the correct value for B<function> is B<0xe>."
msgstr ""

#. type: Plain text
#: man/man9/lut5.9:46
msgid ""
"A 5-input I<or> function is TRUE whenever any of the inputs are true, so the "
"correct value for B<function> is B<0xfffffffe>. Because every weight except "
"B<0x1> is true the function is the sum of every line except the first one."
msgstr ""

#. type: Plain text
#: man/man9/lut5.9:52
msgid ""
"A 2-input I<xor> function is TRUE whenever exactly one of the inputs is "
"true, so the correct value for B<function> is B<0x6>.  Only B<in-0> and "
"B<in-1> should be connected to signals, because if any other bit is B<TRUE> "
"then the output will be B<FALSE>."
msgstr ""

#. type: groff code
#: man/man9/lut5.9:53
#, no-wrap
msgid ""
".ie  '\\*[.T]'html' \\{\\\n"
".HTML \\\n"
"<STYLE> \\\n"
"#weight TD { text-align: center; padding-left: .5ex; padding-right: .5ex } \\\n"
"#weight TH { text-align: center; padding-left: .5ex; padding-right: .5ex } \\\n"
"#weight TD.W { text-align: right; } \\\n"
"</STYLE> \\\n"
"<TABLE ID=\"weight\" STYLE=\"border: 1px solid black; border-collapse: collapse\"> \\\n"
"    <COL SPAN=5 STYLE=\"margin: .2ex\"><COL SPAN=1 STYLE=\"border-left: 1px solid black\"> \\\n"
"<TR STYLE=\"border-bottom: 1px solid black\"> \\\n"
"    <TH COLSPAN=6>Weights for each line of truth table \\\n"
"<TR STYLE=\"border-bottom: 1px solid black\"> \\\n"
"    <TH>Bit 4<TH>Bit 3<TH>Bit 2<TH>Bit 1<TH>Bit 0<TH> Weight \\\n"
"<TR><TD>0<TD>0<TD>0<TD>0<TD>0<TD CLASS=\"w\">0x1 \\\n"
"<TR><TD>0<TD>0<TD>0<TD>0<TD>1<TD CLASS=\"w\">0x2 \\\n"
"<TR><TD>0<TD>0<TD>0<TD>1<TD>0<TD CLASS=\"w\">0x4 \\\n"
"<TR><TD>0<TD>0<TD>0<TD>1<TD>1<TD CLASS=\"w\">0x8 \\\n"
"<TR><TD>0<TD>0<TD>1<TD>0<TD>0<TD CLASS=\"w\">0x10 \\\n"
"<TR><TD>0<TD>0<TD>1<TD>0<TD>1<TD CLASS=\"w\">0x20 \\\n"
"<TR><TD>0<TD>0<TD>1<TD>1<TD>0<TD CLASS=\"w\">0x40 \\\n"
"<TR><TD>0<TD>0<TD>1<TD>1<TD>1<TD CLASS=\"w\">0x80 \\\n"
"<TR><TD>0<TD>1<TD>0<TD>0<TD>0<TD CLASS=\"w\">0x100 \\\n"
"<TR><TD>0<TD>1<TD>0<TD>0<TD>1<TD CLASS=\"w\">0x200 \\\n"
"<TR><TD>0<TD>1<TD>0<TD>1<TD>0<TD CLASS=\"w\">0x400 \\\n"
"<TR><TD>0<TD>1<TD>0<TD>1<TD>1<TD CLASS=\"w\">0x800 \\\n"
"<TR><TD>0<TD>1<TD>1<TD>0<TD>0<TD CLASS=\"w\">0x1000 \\\n"
"<TR><TD>0<TD>1<TD>1<TD>0<TD>1<TD CLASS=\"w\">0x2000 \\\n"
"<TR><TD>0<TD>1<TD>1<TD>1<TD>0<TD CLASS=\"w\">0x4000 \\\n"
"<TR><TD>0<TD>1<TD>1<TD>1<TD>1<TD CLASS=\"w\">0x8000 \\\n"
"<TR><TD>1<TD>0<TD>0<TD>0<TD>0<TD CLASS=\"w\">0x10000 \\\n"
"<TR><TD>1<TD>0<TD>0<TD>0<TD>1<TD CLASS=\"w\">0x20000 \\\n"
"<TR><TD>1<TD>0<TD>0<TD>1<TD>0<TD CLASS=\"w\">0x40000 \\\n"
"<TR><TD>1<TD>0<TD>0<TD>1<TD>1<TD CLASS=\"w\">0x80000 \\\n"
"<TR><TD>1<TD>0<TD>1<TD>0<TD>0<TD CLASS=\"w\">0x100000 \\\n"
"<TR><TD>1<TD>0<TD>1<TD>0<TD>1<TD CLASS=\"w\">0x200000 \\\n"
"<TR><TD>1<TD>0<TD>1<TD>1<TD>0<TD CLASS=\"w\">0x400000 \\\n"
"<TR><TD>1<TD>0<TD>1<TD>1<TD>1<TD CLASS=\"w\">0x800000 \\\n"
"<TR><TD>1<TD>1<TD>0<TD>0<TD>0<TD CLASS=\"w\">0x1000000 \\\n"
"<TR><TD>1<TD>1<TD>0<TD>0<TD>1<TD CLASS=\"w\">0x2000000 \\\n"
"<TR><TD>1<TD>1<TD>0<TD>1<TD>0<TD CLASS=\"w\">0x4000000 \\\n"
"<TR><TD>1<TD>1<TD>0<TD>1<TD>1<TD CLASS=\"w\">0x8000000 \\\n"
"<TR><TD>1<TD>1<TD>1<TD>0<TD>0<TD CLASS=\"w\">0x10000000 \\\n"
"<TR><TD>1<TD>1<TD>1<TD>0<TD>1<TD CLASS=\"w\">0x20000000 \\\n"
"<TR><TD>1<TD>1<TD>1<TD>1<TD>0<TD CLASS=\"w\">0x40000000 \\\n"
"<TR><TD>1<TD>1<TD>1<TD>1<TD>1<TD CLASS=\"w\">0x80000000 \\\n"
"</TABLE>\n"
"\\}\n"
".el \\{\\\n"
".TS\n"
"box tab(;);\n"
"cb s s s s s\n"
"cb cb cb cb cb | cb\n"
"c  c  c  c  c  | r.\n"
"Weights for each line of truth table\n"
"_\n"
"Bit 4;Bit 3;Bit 2;Bit 1;Bit 0; Weight\n"
"_\n"
"0;0;0;0;0;0x1\n"
"0;0;0;0;1;0x2\n"
"0;0;0;1;0;0x4\n"
"0;0;0;1;1;0x8\n"
"0;0;1;0;0;0x10\n"
"0;0;1;0;1;0x20\n"
"0;0;1;1;0;0x40\n"
"0;0;1;1;1;0x80\n"
"0;1;0;0;0;0x100\n"
"0;1;0;0;1;0x200\n"
"0;1;0;1;0;0x400\n"
"0;1;0;1;1;0x800\n"
"0;1;1;0;0;0x1000\n"
"0;1;1;0;1;0x2000\n"
"0;1;1;1;0;0x4000\n"
"0;1;1;1;1;0x8000\n"
"1;0;0;0;0;0x10000\n"
"1;0;0;0;1;0x20000\n"
"1;0;0;1;0;0x40000\n"
"1;0;0;1;1;0x80000\n"
"1;0;1;0;0;0x100000\n"
"1;0;1;0;1;0x200000\n"
"1;0;1;1;0;0x400000\n"
"1;0;1;1;1;0x800000\n"
"1;1;0;0;0;0x1000000\n"
"1;1;0;0;1;0x2000000\n"
"1;1;0;1;0;0x4000000\n"
"1;1;0;1;1;0x8000000\n"
"1;1;1;0;0;0x10000000\n"
"1;1;1;0;1;0x20000000\n"
"1;1;1;1;0;0x40000000\n"
"1;1;1;1;1;0x80000000\n"
".TE\n"
"\\}\n"
msgstr ""

#. type: TP
#: man/man9/lut5.9:146
#, no-wrap
msgid "B<lut5.>I<N>"
msgstr ""

#. type: TP
#: man/man9/lut5.9:150
#, no-wrap
msgid "B<lut5.>I<N>B<.in-0> bit in "
msgstr ""

#. type: TP
#: man/man9/lut5.9:154
#, no-wrap
msgid "B<lut5.>I<N>B<.in-1> bit in "
msgstr ""

#. type: TP
#: man/man9/lut5.9:158
#, no-wrap
msgid "B<lut5.>I<N>B<.in-2> bit in "
msgstr ""

#. type: TP
#: man/man9/lut5.9:162
#, no-wrap
msgid "B<lut5.>I<N>B<.in-3> bit in "
msgstr ""

#. type: TP
#: man/man9/lut5.9:166
#, no-wrap
msgid "B<lut5.>I<N>B<.in-4> bit in "
msgstr ""

#. type: TP
#: man/man9/lut5.9:170
#, no-wrap
msgid "B<lut5.>I<N>B<.out> bit out "
msgstr ""

#. type: TP
#: man/man9/lut5.9:173
#, no-wrap
msgid "B<lut5.>I<N>B<.function> u32 rw "
msgstr ""

#. type: Plain text
#: man/man9/lut5.9:183
msgid "B<and>(9), B<logic>(9), B<not>(9), B<or2>(9), B<xor2>(9)."
msgstr ""

#. type: TH
#: man/man9/maj3.9:9
#, no-wrap
msgid "MAJ3"
msgstr ""

#. type: Plain text
#: man/man9/maj3.9:13
msgid "maj3 - Compute the majority of 3 inputs"
msgstr ""

#. type: Plain text
#: man/man9/maj3.9:16
msgid "B<loadrt maj3 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/maj3.9:17
#, no-wrap
msgid "B<maj3.>I<N>"
msgstr ""

#. type: TP
#: man/man9/maj3.9:21
#, no-wrap
msgid "B<maj3.>I<N>B<.in1> bit in "
msgstr ""

#. type: TP
#: man/man9/maj3.9:25
#, no-wrap
msgid "B<maj3.>I<N>B<.in2> bit in "
msgstr ""

#. type: TP
#: man/man9/maj3.9:29
#, no-wrap
msgid "B<maj3.>I<N>B<.in3> bit in "
msgstr ""

#. type: TP
#: man/man9/maj3.9:33
#, no-wrap
msgid "B<maj3.>I<N>B<.out> bit out "
msgstr ""

#. type: TP
#: man/man9/maj3.9:36
#, no-wrap
msgid "B<maj3.>I<N>B<.invert> bit rw "
msgstr ""

#. type: TH
#: man/man9/match8.9:9
#, no-wrap
msgid "MATCH8"
msgstr ""

#. type: Plain text
#: man/man9/match8.9:13
msgid "match8 - 8-bit binary match detector"
msgstr ""

#. type: Plain text
#: man/man9/match8.9:16
msgid "B<loadrt match8 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/match8.9:17
#, no-wrap
msgid "B<match8.>I<N>"
msgstr ""

#. type: TP
#: man/man9/match8.9:21
#, no-wrap
msgid "B<match8.>I<N>B<.in> bit in (default: I<TRUE>)"
msgstr ""

#. type: Plain text
#: man/man9/match8.9:24
msgid "cascade input - if false, output is false regardless of other inputs"
msgstr ""

#. type: TP
#: man/man9/match8.9:24
#, no-wrap
msgid "B<match8.>I<N>B<.a0> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:28
#, no-wrap
msgid "B<match8.>I<N>B<.a1> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:32
#, no-wrap
msgid "B<match8.>I<N>B<.a2> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:36
#, no-wrap
msgid "B<match8.>I<N>B<.a3> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:40
#, no-wrap
msgid "B<match8.>I<N>B<.a4> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:44
#, no-wrap
msgid "B<match8.>I<N>B<.a5> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:48
#, no-wrap
msgid "B<match8.>I<N>B<.a6> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:52
#, no-wrap
msgid "B<match8.>I<N>B<.a7> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:56
#, no-wrap
msgid "B<match8.>I<N>B<.b0> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:60
#, no-wrap
msgid "B<match8.>I<N>B<.b1> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:64
#, no-wrap
msgid "B<match8.>I<N>B<.b2> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:68
#, no-wrap
msgid "B<match8.>I<N>B<.b3> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:72
#, no-wrap
msgid "B<match8.>I<N>B<.b4> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:76
#, no-wrap
msgid "B<match8.>I<N>B<.b5> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:80
#, no-wrap
msgid "B<match8.>I<N>B<.b6> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:84
#, no-wrap
msgid "B<match8.>I<N>B<.b7> bit in "
msgstr ""

#. type: TP
#: man/man9/match8.9:88
#, no-wrap
msgid "B<match8.>I<N>B<.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/match8.9:91
msgid "true only if in is true and a[m] matches b[m] for m = 0 thru 7"
msgstr ""

#. type: TH
#: man/man9/matrix_kb.9:3
#, no-wrap
msgid "MATRIX_KB"
msgstr ""

#. type: TH
#: man/man9/matrix_kb.9:3
#, no-wrap
msgid "2013-03-24"
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:9
msgid ""
"matrix_kb - Convert integers to HAL pins. Optionally scan a matrix of IO "
"ports to create those integers."
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:11
msgid ""
"B<loadrt matrix_kb config=>I<RxCs,RxCs>B<... names=>I<name1,name2>B<...>"
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:13
msgid ""
"Creates a component configured for R rows and N columns of matrix keyboard."
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:16
msgid ""
"If the B<s> option is specified then a set of output rows will be cyclically "
"toggled, and a set of input columns will be scanned."
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:20
msgid ""
"The B<names> parameter is optional, but if used then the HAL pins and "
"functions will use the specified names rather than the default ones. This "
"can be useful for readbility and 2-pass HAL parsing."
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:22
msgid "There must be no spaces in the parameter lists."
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:28
msgid ""
"This component was written to convert matrix keyboard scancodes into HAL "
"pins.  However, it might also find uses in converting integers from 0 to N "
"into N HAL pins."
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:31
msgid ""
"The component can work in two ways, and the HAL pins created vary according "
"to mode."
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:41
#, no-wrap
msgid ""
"In the default mode the component expects to be given a scan code from a\n"
"separate driver but could be any integer from any source. Most typically this\n"
"will be the keypad scancode from a Mesa 7i73. The default codes for keyup and\n"
"keydown are based on the Mesa 7i73 specification with 0x40 indicating a keydown\n"
"and 0x80 a keyup event. \n"
" If using the 7i73 it is important to match the keypad size\n"
"jumpers with the HAL component. Valid configs for the 7i73 are 4x8 and 8x8. \n"
"Note that the component will only work properly with the version 12 (0xC) 7i73\n"
"firmware. The firmware version is visible on the component parameters in HAL.\n"
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:49
msgid ""
"In the optional scan-generation mode the B<matrix_kb.>I<N>B<.keycode> pin "
"changes to an output pin and a set of output row pins and input column pins "
"are created.  These need to be connected to physical inputs and outputs to "
"scan the matrix and return values to HAL. Note the B<negative-logic> "
"parameter described below, this will need to be set on the most common forms "
"of inputs which float high when unconnected."
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:52
msgid ""
"In both modes a set of HAL output pins are created corresponding to each "
"node of the matrix."
msgstr ""

#. type: TP
#: man/man9/matrix_kb.9:54
#, no-wrap
msgid "B<matrix_kb.>I<N>"
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:58
msgid ""
"Perform all requested functions. Should be run in a slow thread for "
"effective debouncing."
msgstr ""

#. type: TP
#: man/man9/matrix_kb.9:59
#, no-wrap
msgid "B<matrix_kb.>I<N>B<.col->I<CC>B<-in> bit in"
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:62
msgid "The input pin corresponding to column C."
msgstr ""

#. type: TP
#: man/man9/matrix_kb.9:62
#, no-wrap
msgid "B<matrix_kb.>I<N>B<.key.r>I<R>B<c>I<C> bit out"
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:65
msgid "The pin corresponding to the key at row R column C of the matrix."
msgstr ""

#. type: TP
#: man/man9/matrix_kb.9:65
#, no-wrap
msgid "B<matrix_kb.>I<N>B<.keycode> unsigned in or out depending on mode."
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:70
msgid ""
"This pin should be connected to the scancode generator if hardware such as a "
"7i73 is being used. In this mode it is an input pin. In the internally-"
"generated scanning mode this pin is an output, but will not normally be "
"connected."
msgstr ""

#. type: TP
#: man/man9/matrix_kb.9:70
#, no-wrap
msgid "B<matrix_kb.>I<N>B<.row->I<RR>B<-out bit out>"
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:74
msgid ""
"The row scan drive pins.Should be connected to external hardware pins "
"connected to the keypad."
msgstr ""

#. type: TP
#: man/man9/matrix_kb.9:76
#, no-wrap
msgid "B<matrix_kb.>I<N>B<.key_rollover> unsigned r/w (default 2)"
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:84
msgid ""
"With most matrix keyboards the scancodes are only unambiguous with 1 or 2 "
"keys pressed. With more keys pressed phantom keystrokes can appear. Some "
"keyboards are optimised to reduce this problem, and some have internal "
"diodes so that any number of keys may be pressed simultaneously. Increase "
"the value of this parameter if such a keyboard is connected, or if phantom "
"keystrokes are more acceptable than only two keys being active at one time."
msgstr ""

#. type: TP
#: man/man9/matrix_kb.9:84
#, no-wrap
msgid "B<matrix_kb.>I<N>B<.negative-logic> bit r/w (default 1) only in scan mode"
msgstr ""

#. type: Plain text
#: man/man9/matrix_kb.9:90
msgid ""
"When no keys are pressed a typical digital input will float high. The input "
"will then be pulled low by the keypad when the corresponding poll line is "
"low.  Set this parameter to 0 if the IO in use requires one row at a time to "
"be high, and a high input corresponds to a button press."
msgstr ""

#. type: TH
#: man/man9/max31855.9:9
#, no-wrap
msgid "MAX31855"
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:13
msgid ""
"max31855 - Support for the MAX31855 Thermocouple-to-Digital converter using "
"bitbanged spi"
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:16
msgid ""
"B<loadrt max31855 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]] "
"[personality=>I<P,P,...>B<]>"
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:19
msgid ""
"The component requires at least 3 pins to bitbang spi protocol, for example:"
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:21
#, no-wrap
msgid " B<loadrt max31855 personality=1>\n"
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:24
#, no-wrap
msgid ""
" B<setp hm2_6i25.0.gpio.023.is_output true>\n"
" B<setp hm2_6i25.0.gpio.024.is_output true>\n"
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:28
#, no-wrap
msgid ""
" B<net spi.clk.in    hm2_6i25.0.gpio.023.out     max31855.0.clk.out>\n"
" B<net spi.cs.in     hm2_6i25.0.gpio.024.out     max31855.0.cs.out>\n"
" B<net spi.data0.in  hm2_6i25.0.gpio.033.in_not  max31855.0.data.0.in>\n"
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:30
#, no-wrap
msgid " B<addf max31855.0.bitbang-spi servo-thread >\n"
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:34
msgid ""
"The MAX31855 supports a range of -270C to 1800C, however linearization data "
"is only available for the -200C to 1350C range, beyond which raw temperature "
"is returned."
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:37
msgid ""
"Temperature pins are provided for readings in Celsius, Fahrenheit and "
"Kelvin, temperature values are not updated while a fault condition is "
"present."
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:41
msgid ""
"The personality parameter is used to indicate the number of sensors.  "
"Multiple sensors share the clk and cs pins, but connect to discrete data "
"input pins.  A maximum of 15 sensors are supported."
msgstr ""

#. type: TP
#: man/man9/max31855.9:44
#, no-wrap
msgid "B<max31855.>I<N>B<.bitbang-spi> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/max31855.9:48
#, no-wrap
msgid "B<max31855.>I<N>B<.data.>I<M>B<.in> bit in (M=0..( personality & 0xf )) "
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:51
msgid "Pin(s) connected to data out."
msgstr ""

#. type: TP
#: man/man9/max31855.9:51
#, no-wrap
msgid "B<max31855.>I<N>B<.cs.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:54
msgid ""
"Pin connected to cs, pulled low to shift data, pulled high for data refresh."
msgstr ""

#. type: TP
#: man/man9/max31855.9:54
#, no-wrap
msgid "B<max31855.>I<N>B<.clk.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:57
msgid "Pin connected to clk."
msgstr ""

#. type: TP
#: man/man9/max31855.9:57
#, no-wrap
msgid "B<max31855.>I<N>B<.temp-celsius.>I<M> float out (M=0..( personality & 0xf )) "
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:60
msgid "Temperature output values in Celsius."
msgstr ""

#. type: TP
#: man/man9/max31855.9:60
#, no-wrap
msgid "B<max31855.>I<N>B<.temp-fahrenheit.>I<M> float out (M=0..( personality & 0xf )) "
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:63
msgid "Temperature in Fahrenheit."
msgstr ""

#. type: TP
#: man/man9/max31855.9:63
#, no-wrap
msgid "B<max31855.>I<N>B<.temp-kelvin.>I<M> float out (M=0..( personality & 0xf )) "
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:66
msgid "Temperature in Kelvin."
msgstr ""

#. type: TP
#: man/man9/max31855.9:66
#, no-wrap
msgid "B<max31855.>I<N>B<.fault.>I<M> bit out (M=0..( personality & 0xf )) "
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:69
msgid "Fault condition detected."
msgstr ""

#. type: TP
#: man/man9/max31855.9:69
#, no-wrap
msgid "B<max31855.>I<N>B<.fault-flags.>I<M> u32 out (M=0..( personality & 0xf )) "
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:72
msgid "Fault flags: 0x1 = open sensor, 0x2 short to gnd, 0x3 short to vcc."
msgstr ""

#. type: Plain text
#: man/man9/max31855.9:75
msgid "Joseph Calderon"
msgstr ""

#. type: TH
#: man/man9/mesa_7i65.9:9
#, no-wrap
msgid "MESA_7I65"
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:13
msgid "mesa_7i65 - Support for the Mesa 7i65 Octuple Servo Card"
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:16
msgid "B<loadrt mesa_7i65>"
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:20
msgid ""
"The component takes parameters in the form of a comma-separated list of bspi "
"(buffered SPI) instance names, for example:"
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:22
#, no-wrap
msgid " B<loadrt mesa_7i65 bspi_chans=hm2_5i23.0.bspi.0, hm2_5i23.0.bspi.1>\n"
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:27
msgid ""
"The BSPI instances are printed to the dmesg buffer during the Hostmot2 setup "
"sequence, one for each bspi instance included in the bitfile loaded to each "
"installed card during the Hostmot2 setup sequence. Type \"dmesg\" at the "
"terminal prompt to view the output."
msgstr ""

#. type: TP
#: man/man9/mesa_7i65.9:28
#, no-wrap
msgid "B<mesa-7i65.>I<N>B<.analogue.>I<M>B<.out> float in (M=0..7) "
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:32
msgid ""
"Analogue output values. The value will be limited to a -1.0 to +1.0 range"
msgstr ""

#. type: TP
#: man/man9/mesa_7i65.9:32
#, no-wrap
msgid "B<mesa-7i65.>I<N>B<.analogue.>I<M>B<.in> float out (M=0..7) "
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:35
msgid "Analogue outputs read by the 7i65 (in Volts)"
msgstr ""

#. type: TP
#: man/man9/mesa_7i65.9:35
#, no-wrap
msgid "B<mesa-7i65.>I<N>B<.digital.>I<M>B<.in> bit out (M=0..3) "
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:38
msgid "Miscellaneous Digital Inputs"
msgstr ""

#. type: TP
#: man/man9/mesa_7i65.9:38
#, no-wrap
msgid "B<mesa-7i65.>I<N>B<.enable.>I<M>B<.out> bit in (M=0..7) "
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:41
msgid "Amplifier-enable control pins"
msgstr ""

#. type: TP
#: man/man9/mesa_7i65.9:41
#, no-wrap
msgid "B<mesa-7i65.>I<N>B<.watchdog.has-bit> bit out "
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:45
msgid ""
"Indicates the status of the 7i65 Watchdog (which is separate from the FPGA "
"card watchdog"
msgstr ""

#. type: TP
#: man/man9/mesa_7i65.9:46
#, no-wrap
msgid "B<mesa-7i65.>I<N>B<.scale->I<M> float rw (M=0..7) (default: I<10>)"
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:50
msgid ""
"Analogue output scale factor. For example if the scale is 7 then an input of "
"1.0 will give 7V on the output terminals"
msgstr ""

#. type: TP
#: man/man9/mesa_7i65.9:50
#, no-wrap
msgid "B<mesa-7i65.>I<N>B<.is-bipolar->I<M> bit rw (M=0..7) (default: I<1>)"
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:54
msgid ""
"Set this value to TRUE for a plus/minus \"scale\" output. Set to 0 for a 0-"
"\"scale\" output"
msgstr ""

#. type: Plain text
#: man/man9/mesa_7i65.9:57
msgid "Andy Pugh / Cliff Blackburn"
msgstr ""

#. type: TH
#: man/man9/mesa_pktgyro_test.9:9
#, no-wrap
msgid "MESA_PKTGYRO_TEST"
msgstr ""

#. type: Plain text
#: man/man9/mesa_pktgyro_test.9:13
msgid ""
"mesa_pktgyro_test - PktUART simple test with Microstrain 3DM-GX3-15 gyro"
msgstr ""

#. type: Plain text
#: man/man9/mesa_pktgyro_test.9:16
msgid ""
"B<loadrt mesa_pktgyro_test [count=>I<N>B<|names=>I<name1>B<[,>I<name2..."
">B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/mesa_pktgyro_test.9:20
msgid ""
"This component is written in order to test the PktUART driver for Mesa. It "
"resembles partly Andy Pugh's mesa_uart.comp ."
msgstr ""

#. type: Plain text
#: man/man9/mesa_pktgyro_test.9:26
msgid ""
"This module uses the names= mode of loadrt declaration to specify which "
"PktUART instances to enable. A check is included to ensure that the count= "
"option is not used instead.  For simplicity we test only one PktUART "
"instance, therefore load the component like this:"
msgstr ""

#. type: Plain text
#: man/man9/mesa_pktgyro_test.9:28
#, no-wrap
msgid " B<loadrt mesa_uart names=hm2_5i25.0.pktuart.0>\n"
msgstr ""

#. type: Plain text
#: man/man9/mesa_pktgyro_test.9:35
msgid ""
"The PktUART instance names are printed to the dmesg buffer during the "
"Hostmot2 setup sequence, one for each PktUART instance included in the "
"bitfile loaded to each installed card during the Hostmot2 setup sequence. "
"Type \"dmesg\" at the terminal prompt to view the output.  If you want to "
"work with more than one PktUART instance, consult Andy Pugh's mesa_uart.comp"
msgstr ""

#. type: Plain text
#: man/man9/mesa_pktgyro_test.9:38
#, no-wrap
msgid ""
"In order to compile and install do:\n"
" B<halcompile --install src/hal/drivers/mesa_pktgyro_test.comp>\n"
msgstr ""

#. type: Plain text
#: man/man9/mesa_pktgyro_test.9:48
#, no-wrap
msgid ""
"The component exports only one function, namely receive, which needs to be added\n"
"to a realtime thread.\n"
"To test this component  set DEBUG=5 before and execute this HAL script:\n"
" B<loadrt hostmot2>\n"
" B<loadrt hm2_pci>\n"
" B<loadrt mesa_pktgyro_test names=hm2_5i25.0.pktuart.0>\n"
" B<loadrt threads name1=test1 period1=10000000>\n"
" B<addf hm2_5i25.0.pktuart.0.receive test1>\n"
" B<start>\n"
msgstr ""

#. type: Plain text
#: man/man9/mesa_pktgyro_test.9:50
msgid "Check linuxcnc.log for debug output."
msgstr ""

#. type: TP
#: man/man9/mesa_pktgyro_test.9:53
#, no-wrap
msgid "B<mesa-pktgyro-test.>I<N>B<.receive> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/mesa_pktgyro_test.9:57
#, no-wrap
msgid "B<mesa-pktgyro-test.>I<N>B<.rxbytes> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/mesa_pktgyro_test.9:60
msgid "Number of Bytes received or negative Error code"
msgstr ""

#. type: Plain text
#: man/man9/mesa_pktgyro_test.9:63
msgid "Boris Skegin"
msgstr ""

#. type: TH
#: man/man9/message.9:9
#, no-wrap
msgid "MESSAGE"
msgstr ""

#. type: Plain text
#: man/man9/message.9:13
msgid "message - Display a message"
msgstr ""

#. type: Plain text
#: man/man9/message.9:16
msgid ""
"B<loadrt message [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]] "
"[messages=>I<N>B<]>"
msgstr ""

#. type: TP
#: man/man9/message.9:17
#, no-wrap
msgid "B<messages>"
msgstr ""

#. type: Plain text
#: man/man9/message.9:25
msgid ""
"The messages to display. These should be listed, comma-delimited, inside a "
"single set of quotes. See the \"Description\" section for an example.  If "
"there are more messages than \"count\" or \"names\" then the excess will be "
"ignored. If there are fewer messages than \"count\" or \"names\" then an "
"error will be raised and the component will not load."
msgstr ""

#. type: Plain text
#: man/man9/message.9:34
#, no-wrap
msgid ""
"Allows HAL pins to trigger a message. Example hal commands:\n"
" loadrt message names=oillow,oilpressure,inverterfail messages=\"Slideway oil low,No oil\n"
"pressure,Spindle inverter fault\"\n"
" addf oillow servo-thread\n"
" addf oilpressure servo-thread\n"
" addf inverterfail servo-thread\n"
msgstr ""

#. type: Plain text
#: man/man9/message.9:39
#, no-wrap
msgid ""
" setp oillow.edge 0 #this pin should be active low\n"
" net no-oil classicladder.0.out-21 oillow.trigger\n"
" net no-pressure classicladder.0.out-22 oilpressure.trigger\n"
" net no-inverter classicladder.0.out-23 inverterfail.trigger\n"
msgstr ""

#. type: Plain text
#: man/man9/message.9:41
msgid "When any pin goes active, the corresponding message will be displayed."
msgstr ""

#. type: TP
#: man/man9/message.9:42
#, no-wrap
msgid "B<message.>I<N>"
msgstr ""

#. type: Plain text
#: man/man9/message.9:45
msgid "Display a message"
msgstr ""

#. type: TP
#: man/man9/message.9:46
#, no-wrap
msgid "B<message.>I<N>B<.trigger> bit in (default: I<FALSE>)"
msgstr ""

#. type: Plain text
#: man/man9/message.9:49
msgid "signal that triggers the message"
msgstr ""

#. type: TP
#: man/man9/message.9:49
#, no-wrap
msgid "B<message.>I<N>B<.force> bit in (default: I<FALSE>)"
msgstr ""

#. type: Plain text
#: man/man9/message.9:53
msgid ""
"A FALSE-E<gt>TRUE transition forces the message to be displayed again if the "
"trigger is active"
msgstr ""

#. type: TP
#: man/man9/message.9:54
#, no-wrap
msgid "B<message.>I<N>B<.edge> bit rw (default: I<TRUE>)"
msgstr ""

#. type: Plain text
#: man/man9/message.9:58
msgid "Selects the desired edge: TRUE means falling, FALSE means rising"
msgstr ""

#. type: Plain text
#: man/man9/message.9:61 man/man9/spindle.9:151
msgid "Les Newell"
msgstr ""

#. type: Plain text
#: man/man9/message.9:63
msgid "GPL v2"
msgstr ""

#. type: TH
#: man/man9/millturn.9:9
#, no-wrap
msgid "MILLTURN"
msgstr ""

#. type: Plain text
#: man/man9/millturn.9:13
msgid "millturn - Switchable kinematics for a mill-turn machine"
msgstr ""

#. type: Plain text
#: man/man9/millturn.9:16
msgid "B<loadrt millturn [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/millturn.9:23
msgid ""
"This is a switchable kinematics module using 3 cartesian linear joints "
"(XYZ)  and 1 angular joint (A). The module contains two kinematic models:"
msgstr ""

#. type: Plain text
#: man/man9/millturn.9:26
msgid ""
"type0 (default) is a mill (XYZA) configuration with A being a rotary axis."
msgstr ""

#. type: Plain text
#: man/man9/millturn.9:28
msgid "type1 is a turn (Z-YX) configuration with A configured to be a spindle."
msgstr ""

#. type: Plain text
#: man/man9/millturn.9:30
msgid ""
"For an example configuration, run the sim config: 'configs/sim/axis/vismach/"
"millturn/millturn.ini'."
msgstr ""

#. type: Plain text
#: man/man9/millturn.9:32
msgid ""
"Further explanations can be found in the README in 'configs/sim/axis/vismach/"
"millturn'."
msgstr ""

#. type: Plain text
#: man/man9/millturn.9:35
msgid ""
"millturn.comp was constructed by modifying the template file: userkins.comp."
msgstr ""

#. type: Plain text
#: man/man9/millturn.9:38
msgid ""
"For more information on how to modify userkins.comp run: $ man userkins.  "
"Also, see additional information inside: 'userkins.comp'."
msgstr ""

#. type: Plain text
#: man/man9/millturn.9:43
msgid ""
"For information on kinematics in general see the kinematics document chapter "
"(docs/src/motion/kinematics.txt) and for switchable kinematics in particular "
"see the switchkins document chapter (docs/src/motion/switchkins.txt)"
msgstr ""

#. type: TP
#: man/man9/millturn.9:46
#, no-wrap
msgid "B<millturn.>I<N>B<.dummy> bit out (default: I<1>)"
msgstr ""

#. type: Plain text
#: man/man9/millturn.9:51
msgid "David Mueller"
msgstr ""

#. type: TH
#: man/man9/minmax.9:9
#, no-wrap
msgid "MINMAX"
msgstr ""

#. type: Plain text
#: man/man9/minmax.9:13
msgid ""
"minmax - Track the minimum and maximum values of the input to the outputs"
msgstr ""

#. type: Plain text
#: man/man9/minmax.9:16
msgid "B<loadrt minmax [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/minmax.9:17
#, no-wrap
msgid "B<minmax.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/minmax.9:21
#, no-wrap
msgid "B<minmax.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/minmax.9:25
#, no-wrap
msgid "B<minmax.>I<N>B<.reset> bit in "
msgstr ""

#. type: Plain text
#: man/man9/minmax.9:28
msgid "When reset is asserted, 'in' is copied to the outputs"
msgstr ""

#. type: TP
#: man/man9/minmax.9:28
#, no-wrap
msgid "B<minmax.>I<N>B<.max> float out "
msgstr ""

#. type: TP
#: man/man9/minmax.9:32
#, no-wrap
msgid "B<minmax.>I<N>B<.min> float out "
msgstr ""

#. type: Plain text
#: man/man9/motion.9:5
msgid "motion - accepts NML motion commands, interacts with HAL in realtime"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:8
msgid ""
"B<loadrt motmod [base_period_nsec=>I<period>B<] [base_thread_fp=>I<0 or "
"1>B<] [servo_period_nsec=>I<period>B<] [traj_period_nsec=>I<period>B<] "
"[num_joints=>I<[1-16]>B<] [num_dio=>I<[1-64]>B<] [num_aio=>I<[1-64]>B<] "
"[num_misc_error=>I<[0-64]>B<] [num_spindles=>I<[1-8]>B<]> "
"B<[unlock_joints_mask=>I<jointmask>B<]> B<[num_extrajoints=>I<[0-16]>B<]>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:10
msgid "The limits for the following items are compile-time settings:"
msgstr ""

#. type: TP
#: man/man9/motion.9:12
#, no-wrap
msgid "B<num_joints>: Maximum number of joints is set by EMCMOT_MAX_JOINTS."
msgstr ""

#. type: TP
#: man/man9/motion.9:16
#, no-wrap
msgid "B<num_dio>: Maximum number of digital inputs is set by EMCMOT_MAX_DIO."
msgstr ""

#. type: TP
#: man/man9/motion.9:20
#, no-wrap
msgid "B<num_aio>: Maximum number of analog inputs is set by EMCMOT_MAX_AIO."
msgstr ""

#. type: TP
#: man/man9/motion.9:24
#, no-wrap
msgid "B<num_misc_error>: Maximum number of extra error inputs is set by EMCMOT_MAX_MISC_ERRORS."
msgstr ""

#. type: TP
#: man/man9/motion.9:28
#, no-wrap
msgid "B<num_spindles>: Maximum number of spindles is set by EMCMOT_MAX_SPINDLES"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:33
msgid ""
"Optionally the number of Digital I/O is set with num_dio. The number of "
"Analog I/O is set with num_aio. The default is 4 each."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:36
msgid ""
"Pin names starting with \"B<joint>\" or \"B<axis>\" are are read and updated "
"by the motion-controller function."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:39
msgid ""
"By default, the base thread does not support floating point.  Software "
"stepping, software encoder counting, and software pwm do not use floating "
"point.  B<base_thread_fp> can be used to enable floating point in the base "
"thread (for example for brushless DC motor control)."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:42
msgid ""
"These pins and parameters are created by the realtime B<motmod> module. This "
"module provides a HAL interface for LinuxCNC's motion planner. Basically "
"B<motmod> takes in a list of waypoints and generates a nice blended and "
"constraint-limited stream of joint positions to be fed to the motor drives."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:51
msgid ""
"The optional B<num_extrajoints> parameter specifies a quantity of joints "
"that participate in homing but are not used by kinematics transformations.  "
"After homing, control of an 'extra' joint is transferred to a posthome "
"command HAL pin (joint.N.posthome-cmd) and the motor feedback value is "
"ignored.  'Extra' joints must be managed by independent motion planners/"
"controllers (typically using limit3 HAL components).  Extra joints maybe "
"unhomed only when motion is disabled."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:57
msgid ""
"The maximum B<num_extrajoints> value is equal to the B<num_joints> value.  "
"(Note that using the maximum value would allow no operation in world "
"coordinates).  The B<num_joints> value must be equal to the sum of the "
"number of joints used for kinematics calculations plus the number of 'extra' "
"joints."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:67
msgid ""
"The B<num_joints> parameter is conventionally set using the INI file setting "
"B<[KINS]JOINTS=>value.  The B<num_extrajoints> is set by the additional "
"motmod parameter B<[EMCMOT]motmod num_extrajoints=>value.  Hal pin numbering "
"for all joints is zero based [B<0 ... num_joints-1>].  When specified, "
"'extra' joints are assigned the last B<num_extrajoints> in the numbering "
"sequence.  For example, specifying [KINS]JOINTS=5 and [EMCMOT]motmod "
"num_extrajoints=2 for a 3 joint trivkins configuration B<[KINS] "
"KINEMATICS=trivkins coordinates=xyz> uses joints 0,1,2 for the kinematic "
"joints and joints 3,4 for the 'extra' joints."
msgstr ""

#. type: SH
#: man/man9/motion.9:68
#, no-wrap
msgid "MOTION PINS"
msgstr ""

#. type: TP
#: man/man9/motion.9:70
#, no-wrap
msgid "B<motion-command-handler.time> OUT S32"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:73
msgid "Time (in CPU clocks) for the motion module motion-command-handler"
msgstr ""

#. type: TP
#: man/man9/motion.9:74
#, no-wrap
msgid "B<motion-controller.time> OUT S32"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:77
msgid "Time (in CPU clocks) for the motion module motion-controller"
msgstr ""

#. type: TP
#: man/man9/motion.9:78
#, no-wrap
msgid "B<motion.adaptive-feed> IN FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:82
msgid ""
"When adaptive feed is enabled with M52 P1, the commanded velocity is "
"multiplied by this value. This effect is multiplicative with the NML-level "
"feed override value and motion.feed-hold.  Negative values are valid and "
"will run the G-code path in reverse."
msgstr ""

#. type: TP
#: man/man9/motion.9:83
#, no-wrap
msgid "B<motion.analog-in->I<NN> IN FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:86
msgid "These pins are used by M66 Enn wait-for-input mode."
msgstr ""

#. type: TP
#: man/man9/motion.9:87
#, no-wrap
msgid "B<motion.analog-out->I<NN> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:90
msgid "These pins are used by M67-68."
msgstr ""

#. type: TP
#: man/man9/motion.9:91
#, no-wrap
msgid "B<motion.coord-error> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:94
msgid ""
"TRUE when motion has encountered an error, such as exceeding a soft limit"
msgstr ""

#. type: TP
#: man/man9/motion.9:95
#, no-wrap
msgid "B<motion.coord-mode> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:98
msgid ""
"TRUE when motion is in \"coordinated mode\", as opposed to \"teleop mode\""
msgstr ""

#. type: TP
#: man/man9/motion.9:99
#, no-wrap
msgid "B<motion.current-vel> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:102
msgid "Current cartesian velocity"
msgstr ""

#. type: TP
#: man/man9/motion.9:103
#, no-wrap
msgid "B<motion.digital-in->I<NN> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:106
msgid "These pins are used by M66 Pnn wait-for-input mode."
msgstr ""

#. type: TP
#: man/man9/motion.9:107
#, no-wrap
msgid "B<motion.digital-out->I<NN> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:110
msgid "These pins are controlled by the M62 through M65 words."
msgstr ""

#. type: TP
#: man/man9/motion.9:111
#, no-wrap
msgid "B<motion.distance-to-go> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:114
msgid "Distance remaining in the current move"
msgstr ""

#. type: TP
#: man/man9/motion.9:115
#, no-wrap
msgid "B<motion.enable> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:118
msgid ""
"If this bit is driven FALSE, motion stops, the machine is placed in the "
"\"machine off\" state, and a message is displayed for the operator. For "
"normal motion, drive this bit TRUE."
msgstr ""

#. type: TP
#: man/man9/motion.9:121
#, no-wrap
msgid "B<motion.eoffset-active> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:124
msgid "Indicates external offsets are active (non-zero)"
msgstr ""

#. type: TP
#: man/man9/motion.9:127
#, no-wrap
msgid "B<motion.eoffset-limited> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:131
msgid ""
"Indicates motion with external offsets was limited by a soft limit "
"constraint ([AXIS_L]MIN_LIMIT,MAX_LIMIT)."
msgstr ""

#. type: TP
#: man/man9/motion.9:132
#, no-wrap
msgid "B<motion.feed-hold> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:135
msgid ""
"When Feed Stop Control is enabled with M53 P1, and this bit is TRUE, the "
"feed rate is set to 0."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:137
msgid "Note: feed-hold applies to G-code commands -- not jogs."
msgstr ""

#. type: TP
#: man/man9/motion.9:138
#, no-wrap
msgid "B<motion.feed-inhibit> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:141
msgid "When this pin is TRUE, machine motion is inhibited for G-code commands."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:146
msgid ""
"If the machine is performing a spindle synchronized move when this pin goes "
"TRUE, the spindle synchronized motion will finish, and any following moves "
"will be inhibited (this is to prevent damage to the machine, the tool, or "
"the work piece)."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:150
msgid ""
"If the machine is in the middle of a (non-spindle synchronized) move when "
"this pin goes TRUE, the machine will decelerate to a stop at the maximum "
"allowed acceleration rate."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:152
msgid "Motion resumes when this pin goes FALSE."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:154
msgid "Note: feed-inhibit applies to G-code commands -- not jogs."
msgstr ""

#. type: TP
#: man/man9/motion.9:155
#, no-wrap
msgid "B<motion.feed-upm> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:164
msgid ""
"Current feed rate in G-code program units per minute for motion.motion-types "
"feed(2) and arc(3).  Value is the G-code program F value multiplied by the "
"current feed override value and the motion.adaptive-feed setting (if M52 "
"active).  Value is zero if motion.feed-hold or motion.feed-inhibit are "
"asserted.  If units (G20 or G21) are not specified in the G-code file then "
"units will be the last units used."
msgstr ""

#. type: TP
#: man/man9/motion.9:165
#, no-wrap
msgid "B<motion.feed-inches-per-minute> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:173
msgid ""
"Current feed rate in inches per minute for motion.motion-types feed(2) and "
"arc(3).  Value is the inch equivalent of the G-code program F value "
"multiplied by the current feed override value and the motion.adaptive-feed "
"setting (if M52 active).  Value is zero if motion.feed-hold or motion.feed-"
"inhibit are asserted."
msgstr ""

#. type: TP
#: man/man9/motion.9:174
#, no-wrap
msgid "B<motion.feed-inches-per-second> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:182
msgid ""
"Current feed rate in inches per second for motion.motion-types feed(2) and "
"arc(3).  Value is the inch equivalent of the G-code program F value "
"multiplied by the current feed override value and the motion.adaptive-feed "
"setting (if M52 active).  Value is zero if motion.feed-hold or motion.feed-"
"inhibit are asserted."
msgstr ""

#. type: TP
#: man/man9/motion.9:183
#, no-wrap
msgid "B<motion.feed-mm-per-minute> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:191
msgid ""
"Current feed rate in mm per minute for motion.motion-types feed(2) and "
"arc(3).  Value is the mm equivalent of the G-code program F value multiplied "
"by the current feed override value and the motion.adaptive-feed setting (if "
"M52 active).  Value is zero if motion.feed-hold or motion.feed-inhibit are "
"asserted."
msgstr ""

#. type: TP
#: man/man9/motion.9:192
#, no-wrap
msgid "B<motion.feed-mm-per-second> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:200
msgid ""
"Current feed rate in mm per second for motion.motion-types feed(2) and "
"arc(3).  Value is the mm equivalent of the G-code program F value multiplied "
"by the current feed override value and the motion.adaptive-feed setting (if "
"M52 active).  Value is zero if motion.feed-hold or motion.feed-inhibit are "
"asserted."
msgstr ""

#. type: TP
#: man/man9/motion.9:201
#, no-wrap
msgid "B<motion.homing-inhibit> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:206
msgid ""
"If this bit is TRUE, initiation of any joint homing move (including \"Home "
"All\")  is disallowed and an error is reported.  By default, homing is "
"allowed in joint mode whenever motion is enabled."
msgstr ""

#. type: TP
#: man/man9/motion.9:207
#, no-wrap
msgid "B<motion.is-all-homed> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:210
msgid "TRUE if all active joints is homed."
msgstr ""

#. type: TP
#: man/man9/motion.9:211
#, no-wrap
msgid "B<motion.jog-inhibit> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:215
msgid ""
"If this bit is TRUE, jogging of any joint or axis is disallowed and an error "
"is reported."
msgstr ""

#. type: TP
#: man/man9/motion.9:216
#, no-wrap
msgid "B<motion.jog-stop> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:220
msgid ""
"If any jog is active when the pin state changes to TRUE then that jog will "
"be stopped following the associated acceleration values."
msgstr ""

#. type: TP
#: man/man9/motion.9:221
#, no-wrap
msgid "B<motion.jog-stop-immediate> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:225
msgid ""
"If any jog is active when the pin state changes to TRUE then that jog will "
"be stopped immediately."
msgstr ""

#. type: TP
#: man/man9/motion.9:226
#, no-wrap
msgid "B<motion.jog-is-active> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:229
msgid "TRUE if any joint or axis is jogging."
msgstr ""

#. type: TP
#: man/man9/motion.9:230
#, no-wrap
msgid "B<motion.in-position> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:234
msgid ""
"TRUE if the machine is in position (ie, not currently moving towards the "
"commanded position)."
msgstr ""

#. type: TP
#: man/man9/motion.9:235
#, no-wrap
msgid "B<motion.misc-error->I<NN> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:240
msgid ""
"Extra error inputs for faults such as over-temperature sensors, low coolant "
"warnings, custom HAL component errors. If driven TRUE this will disable a "
"machine. Similar to spindle.amp-fault-in"
msgstr ""

#. type: TP
#: man/man9/motion.9:241
#, no-wrap
msgid "B<motion.motion-enabled> OUT BIT"
msgstr ""

#. type: TP
#: man/man9/motion.9:244
#, no-wrap
msgid "B<motion.motion-type> OUT S32"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:247
msgid "These values are from src/emc/nml_intf/motion_types.h"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:263
msgid "6: Rotary unlock for traverse"
msgstr ""

#. type: TP
#: man/man9/motion.9:266
#, no-wrap
msgid "B<motion.on-soft-limit> OUT BIT"
msgstr ""

#. type: TP
#: man/man9/motion.9:269
#, no-wrap
msgid "B<motion.probe-input> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:272
msgid ""
"G38.n uses the value on this pin to determine when the probe has made "
"contact. TRUE for probe contact closed (touching), FALSE for probe contact "
"open."
msgstr ""

#. type: TP
#: man/man9/motion.9:273
#, no-wrap
msgid "B<motion.program-line> OUT S32"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:277
msgid ""
"The current program line while executing. Zero if not running or between "
"lines while single stepping."
msgstr ""

#. type: TP
#: man/man9/motion.9:278
#, no-wrap
msgid "B<motion.requested-vel> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:284
msgid ""
"The current requested velocity in user units per second.  This value is the "
"F-word setting from the G-code file, possibly reduced to accommodate machine "
"velocity and acceleration limits. The value on this pin does not reflect the "
"feed override or any other adjustments."
msgstr ""

#. type: TP
#: man/man9/motion.9:285
#, no-wrap
msgid "B<motion.servo.last-period> OUT U32"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:288
msgid ""
"The number of CPU clocks between invocations of the servo thread. Typically, "
"this number divided by the CPU speed gives the time in seconds, and can be "
"used to determine whether the realtime motion controller is meeting its "
"timing constraints"
msgstr ""

#. type: TP
#: man/man9/motion.9:289
#, no-wrap
msgid "B<motion.switchkins-type> IN float"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:296
msgid ""
"Kinematics modules that define the functions kinematicsSwitchable()  and "
"kinematicsSwitch() receive the B<integer> value of this pin to select the "
"machine kinematics functions.  Extra G-code commands may be required to "
"synchronize task and motion before and after changes to the pin value."
msgstr ""

#. type: TP
#: man/man9/motion.9:297
#, no-wrap
msgid "B<motion.teleop-mode> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:300
msgid "Motion mode is teleop (axis coordinate jogging available)."
msgstr ""

#. type: TP
#: man/man9/motion.9:303
#, no-wrap
msgid "B<motion.tooloffset.L> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:307
msgid ""
"Current tool offset for each axis where (B<L> is the axis letter, one of: "
"B<x y z a b c u v w>)"
msgstr ""

#. type: TP
#: man/man9/motion.9:308
#, no-wrap
msgid "B<motion.tp-reverse> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:311
msgid "Trajectory planning is reversed (reverse run)"
msgstr ""

#. type: SH
#: man/man9/motion.9:312
#, no-wrap
msgid "AXIS PINS"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:314
msgid "(B<L> is the axis letter, one of: B<x y z a b c u v w>)"
msgstr ""

#. type: TP
#: man/man9/motion.9:315
#, no-wrap
msgid "B<axis.>I<L>B<.eoffset> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:318
msgid "Current external offset."
msgstr ""

#. type: TP
#: man/man9/motion.9:319
#, no-wrap
msgid "B<axis.>I<L>B<.eoffset-clear> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:322
msgid "Clear external offset request"
msgstr ""

#. type: TP
#: man/man9/motion.9:323
#, no-wrap
msgid "B<axis.>I<L>B<.eoffset-counts> IN S32"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:333
msgid ""
"Counts input for external offset.  The eoffset-counts are transferred to an "
"internal register.  The applied external offset is the product of the "
"register counts and the eoffset-scale value.  The register is B<reset to "
"zero at each machine startup>.  If the machine is turned off with an "
"external offset active, the eoffset-counts pin should be set to zero before "
"restarting."
msgstr ""

#. type: TP
#: man/man9/motion.9:334
#, no-wrap
msgid "B<axis.>I<L>B<.eoffset-enable> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:338
msgid ""
"Enable for external offset (also requires INI file setting for "
"[AXIS_L]OFFSET_AV_RATIO)"
msgstr ""

#. type: TP
#: man/man9/motion.9:339
#, no-wrap
msgid "B<axis.>I<L>B<.eoffset-request> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:342
msgid "Debug pin for requested external offset."
msgstr ""

#. type: TP
#: man/man9/motion.9:343
#, no-wrap
msgid "B<axis.>I<L>B<.eoffset-scale> IN FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:346
msgid "Scale for external offset."
msgstr ""

#. type: TP
#: man/man9/motion.9:347
#, no-wrap
msgid "B<axis.>I<L>B<.jog-accel-fraction> IN FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:351
msgid ""
"Sets acceleration for wheel jogging to a fraction of the INI "
"max_acceleration for the axis. Values greater than 1 or less than zero are "
"ignored."
msgstr ""

#. type: TP
#: man/man9/motion.9:352
#, no-wrap
msgid "B<axis.>I<L>B<.jog-counts> IN S32"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:355 man/man9/motion.9:500
msgid ""
"Connect to the \"counts\" pin of an external encoder to use a physical jog "
"wheel."
msgstr ""

#. type: TP
#: man/man9/motion.9:356
#, no-wrap
msgid "B<axis.>I<L>B<.jog-enable> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:359 man/man9/motion.9:504
msgid ""
"When TRUE (and in manual mode), any change to \"jog-counts\" will result in "
"motion. When false, \"jog-counts\" is ignored."
msgstr ""

#. type: TP
#: man/man9/motion.9:360
#, no-wrap
msgid "B<axis.>I<L>B<.jog-scale> IN FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:363 man/man9/motion.9:508
msgid ""
"Sets the distance moved for each count on \"jog-counts\", in machine units."
msgstr ""

#. type: TP
#: man/man9/motion.9:364
#, no-wrap
msgid "B<axis.>I<L>B<.jog-vel-mode> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:367
msgid ""
"When FALSE (the default), the jogwheel operates in position mode. The axis "
"will move exactly jog-scale units for each count, regardless of how long "
"that might take. When TRUE, the wheel operates in velocity mode - motion "
"stops when the wheel stops, even if that means the commanded motion is not "
"completed."
msgstr ""

#. type: TP
#: man/man9/motion.9:368
#, no-wrap
msgid "B<axis.>I<L>B<.kb-jog-active> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:371
msgid "(free planner axis jogging active (keyboard or halui))"
msgstr ""

#. type: TP
#: man/man9/motion.9:372
#, no-wrap
msgid "B<axis.>I<L>B<.pos-cmd> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:375
msgid ""
"The axis commanded position. There may be several offsets between the axis "
"and motor coordinates: backlash compensation, screw error compensation, and "
"home offsets.  External offsets are reported separately (axis.B<L>.eoffset)."
msgstr ""

#. type: TP
#: man/man9/motion.9:376
#, no-wrap
msgid "B<axis.>I<L>B<.teleop-pos-cmd> OUT FLOAT"
msgstr ""

#. type: TP
#: man/man9/motion.9:379
#, no-wrap
msgid "B<axis.>I<L>B<.teleop-tp-enable> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:382
msgid "TRUE when the \"teleop planner\" is enabled for this axis"
msgstr ""

#. type: TP
#: man/man9/motion.9:383
#, no-wrap
msgid "B<axis.>I<L>B<.teleop-vel-cmd> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:386
msgid "The axis's commanded velocity"
msgstr ""

#. type: TP
#: man/man9/motion.9:387
#, no-wrap
msgid "B<axis.>I<L>B<.teleop-vel-lim> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:390
msgid "The velocity limit for the teleop planner"
msgstr ""

#. type: TP
#: man/man9/motion.9:391
#, no-wrap
msgid "B<axis.>I<L>B<.wheel-jog-active> OUT BIT"
msgstr ""

#. type: SH
#: man/man9/motion.9:394
#, no-wrap
msgid "JOINT PINS"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:396
msgid "B<N> is the joint number (B<0> ... B<num_joints-1>))"
msgstr ""

#. type: TP
#: man/man9/motion.9:396
#, no-wrap
msgid "(B<Note:> pins marked B<(DEBUG)> serve as debugging aids"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:399
msgid "and are subject to change or removal at any time.)"
msgstr ""

#. type: TP
#: man/man9/motion.9:400
#, no-wrap
msgid "B<joint.>I<N>B<.joint-acc-cmd> OUT FLOAT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:403
msgid "The joint's commanded acceleration"
msgstr ""

#. type: TP
#: man/man9/motion.9:404
#, no-wrap
msgid "B<joint.>I<N>B<.active> OUT BIT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:407
msgid "TRUE when this joint is active"
msgstr ""

#. type: TP
#: man/man9/motion.9:408
#, no-wrap
msgid "B<joint.>I<N>B<.amp-enable-out> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:411
msgid "TRUE if the amplifier for this joint should be enabled"
msgstr ""

#. type: TP
#: man/man9/motion.9:412
#, no-wrap
msgid "B<joint.>I<N>B<.amp-fault-in> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:415
msgid ""
"Should be driven TRUE if an external fault is detected with the amplifier "
"for this joint"
msgstr ""

#. type: TP
#: man/man9/motion.9:416
#, no-wrap
msgid "B<joint.>I<N>B<.backlash-corr> OUT FLOAT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:419
msgid "Backlash or screw compensation raw value"
msgstr ""

#. type: TP
#: man/man9/motion.9:420
#, no-wrap
msgid "B<joint.>I<N>B<.backlash-filt> OUT FLOAT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:423
msgid ""
"Backlash or screw compensation filtered value (respecting motion limits)"
msgstr ""

#. type: TP
#: man/man9/motion.9:424
#, no-wrap
msgid "B<joint.>I<N>B<.backlash-vel> OUT FLOAT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:427
msgid "Backlash or screw compensation velocity"
msgstr ""

#. type: TP
#: man/man9/motion.9:428
#, no-wrap
msgid "B<joint.>I<N>B<.coarse-pos-cmd> OUT FLOAT B<(DEBUG)>"
msgstr ""

#. type: TP
#: man/man9/motion.9:431
#, no-wrap
msgid "B<joint.>I<N>B<.error> OUT BIT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:434
msgid ""
"TRUE when this joint has encountered an error, such as a limit switch closing"
msgstr ""

#. type: TP
#: man/man9/motion.9:435
#, no-wrap
msgid "B<joint.>I<N>B<.f-error> OUT FLOAT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:438
msgid "The actual following error"
msgstr ""

#. type: TP
#: man/man9/motion.9:439
#, no-wrap
msgid "B<joint.>I<N>B<.f-error-lim> OUT FLOAT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:442
msgid "The following error limit"
msgstr ""

#. type: TP
#: man/man9/motion.9:443
#, no-wrap
msgid "B<joint.>I<N>B<.f-errored> OUT BIT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:446
msgid "TRUE when this joint has exceeded the following error limit"
msgstr ""

#. type: TP
#: man/man9/motion.9:447
#, no-wrap
msgid "B<joint.>I<N>B<.faulted> OUT BIT B<(DEBUG)>"
msgstr ""

#. type: TP
#: man/man9/motion.9:450
#, no-wrap
msgid "B<joint.>I<N>B<.free-pos-cmd> OUT FLOAT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:453
msgid "The \"free planner\" commanded position for this joint."
msgstr ""

#. type: TP
#: man/man9/motion.9:454
#, no-wrap
msgid "B<joint.>I<N>B<.free-tp-enable> OUT BIT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:457
msgid "TRUE when the \"free planner\" is enabled for this joint"
msgstr ""

#. type: TP
#: man/man9/motion.9:458
#, no-wrap
msgid "B<joint.>I<N>B<.free-vel-lim> OUT FLOAT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:461
msgid "The velocity limit for the free planner"
msgstr ""

#. type: TP
#: man/man9/motion.9:462
#, no-wrap
msgid "B<joint.>I<N>B<.home-state> OUT S32 B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:465
msgid "homing state machine state"
msgstr ""

#. type: TP
#: man/man9/motion.9:466
#, no-wrap
msgid "B<joint.>I<N>B<.home-sw-in> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:469
msgid "Should be driven TRUE if the home switch for this joint is closed"
msgstr ""

#. type: TP
#: man/man9/motion.9:470
#, no-wrap
msgid "B<joint.>I<N>B<.homed> OUT BIT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:473
msgid "TRUE if the joint has been homed"
msgstr ""

#. type: TP
#: man/man9/motion.9:474
#, no-wrap
msgid "B<joint.>I<N>B<.homing> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:477
msgid "TRUE if the joint is currently homing"
msgstr ""

#. type: TP
#: man/man9/motion.9:478
#, no-wrap
msgid "B<joint.>I<N>B<.in-position> OUT BIT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:481
msgid "TRUE if the joint is using the \"free planner\" and has come to a stop"
msgstr ""

#. type: TP
#: man/man9/motion.9:482
#, no-wrap
msgid "B<joint.>I<N>B<.index-enable> IO BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:485
msgid ""
"Should be attached to the index-enable pin of the joint's encoder to enable "
"homing to index pulse"
msgstr ""

#. type: TP
#: man/man9/motion.9:488
#, no-wrap
msgid "B<joint.N.is-unlocked> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:491
msgid "Indicates joint is unlocked (see JOINT UNLOCK PINS)."
msgstr ""

#. type: TP
#: man/man9/motion.9:492
#, no-wrap
msgid "B<joint.>I<N>B<.jog-accel-fraction> IN FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:496
msgid ""
"Sets acceleration for wheel jogging to a fraction of the INI "
"max_acceleration for the joint.  Values greater than 1 or less than zero are "
"ignored."
msgstr ""

#. type: TP
#: man/man9/motion.9:497
#, no-wrap
msgid "B<joint.>I<N>B<.jog-counts> IN S32"
msgstr ""

#. type: TP
#: man/man9/motion.9:501
#, no-wrap
msgid "B<joint.>I<N>B<.jog-enable> IN BIT"
msgstr ""

#. type: TP
#: man/man9/motion.9:505
#, no-wrap
msgid "B<joint.>I<N>B<.jog-scale> IN FLOAT"
msgstr ""

#. type: TP
#: man/man9/motion.9:509
#, no-wrap
msgid "B<joint.>I<N>B<.jog-vel-mode> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:512
msgid ""
"When FALSE (the default), the jogwheel operates in position mode. The joint "
"will move exactly jog-scale units for each count, regardless of how long "
"that might take. When TRUE, the wheel operates in velocity mode - motion "
"stops when the wheel stops, even if that means the commanded motion is not "
"completed."
msgstr ""

#. type: TP
#: man/man9/motion.9:513
#, no-wrap
msgid "B<joint.>I<N>B<.kb-jog-active> OUT BIT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:516
msgid "(free planner joint jogging active (keyboard or halui))"
msgstr ""

#. type: TP
#: man/man9/motion.9:517
#, no-wrap
msgid "B<joint.>I<N>B<.motor-offset> OUT FLOAT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:520
msgid "joint motor offset established when joint is homed."
msgstr ""

#. type: TP
#: man/man9/motion.9:521
#, no-wrap
msgid "B<joint.>I<N>B<.motor-pos-cmd> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:524
msgid "The commanded position for this joint."
msgstr ""

#. type: TP
#: man/man9/motion.9:525
#, no-wrap
msgid "B<joint.>I<N>B<.motor-pos-fb> IN FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:528
msgid "The actual position for this joint."
msgstr ""

#. type: TP
#: man/man9/motion.9:529
#, no-wrap
msgid "B<joint.>I<N>B<.neg-hard-limit> OUT BIT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:532
msgid "The negative hard limit for the joint"
msgstr ""

#. type: TP
#: man/man9/motion.9:533
#, no-wrap
msgid "B<joint.>I<N>B<.neg-lim-sw-in> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:536
msgid ""
"Should be driven TRUE if the negative limit switch for this joint is tripped."
msgstr ""

#. type: TP
#: man/man9/motion.9:537
#, no-wrap
msgid "B<joint.>I<N>B<.pos-cmd> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:540
msgid ""
"The joint (as opposed to motor) commanded position. There may be several "
"offsets between the joint and motor coordinates: backlash compensation, "
"screw error compensation, and home offsets."
msgstr ""

#. type: TP
#: man/man9/motion.9:541
#, no-wrap
msgid "B<joint.>I<N>B<.pos-fb> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:544
msgid ""
"The joint feedback position. This value is computed from the actual motor "
"position minus joint offsets. Useful for machine visualization."
msgstr ""

#. type: TP
#: man/man9/motion.9:545
#, no-wrap
msgid "B<joint.>I<N>B<.pos-hard-limit> OUT BIT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:548
msgid "The positive hard limit for the joint"
msgstr ""

#. type: TP
#: man/man9/motion.9:549
#, no-wrap
msgid "B<joint.>I<N>B<.pos-lim-sw-in> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:552
msgid ""
"Should be driven TRUE if the positive limit switch for this joint is tripped."
msgstr ""

#. type: TP
#: man/man9/motion.9:553
#, no-wrap
msgid "B<joint.>I<N>B<.unlock> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:557
msgid ""
"TRUE if the axis is a locked joint (typically a rotary) and a move is "
"commanded (see JOINT UNLOCK PINS)."
msgstr ""

#. type: TP
#: man/man9/motion.9:558
#, no-wrap
msgid "B<joint.>I<N>B<.joint-vel-cmd> OUT FLOAT B<(DEBUG)>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:561
msgid "The joint's commanded velocity"
msgstr ""

#. type: TP
#: man/man9/motion.9:562
#, no-wrap
msgid "B<joint.>I<N>B<.wheel-jog-active> OUT BIT B<(DEBUG)>"
msgstr ""

#. type: SH
#: man/man9/motion.9:565
#, no-wrap
msgid "JOINT posthome pins"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:570
msgid ""
"Each joint designated as an 'extra' joint is provided with a HAL pin B<joint."
"N.posthome-cmd>.  The pin value is ignored prior to homing.  After homing, "
"the pin value is augmented by the motor offset value and routed to the "
"B<joint.N.motor-pos-cmd>."
msgstr ""

#. type: SH
#: man/man9/motion.9:571
#, no-wrap
msgid "JOINT unlock pins"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:575
msgid ""
"The joint pins used for unlocking a joint (B<joint.N.unlock>, B<joint.N.is-"
"unlocked>), are created according to the B<unlock_joints_mask=>jointmask "
"parameter for motmod.  These pins may be required for locking indexers "
"(typically a rotary joint)"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:577
msgid "The jointmask bits are: (lsb)0:joint0, 1:joint1, 2:joint2, ..."
msgstr ""

#. type: TP
#: man/man9/motion.9:580
#, no-wrap
msgid "Example: loadrt motmod ... B<unlock_joints_mask=>0x38 creates unlock pins for joints 3,4,5"
msgstr ""

#. type: SH
#: man/man9/motion.9:583
#, no-wrap
msgid "SPINDLE PINS"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:585
msgid "(B<M> is the spindle number (B<0> ... B<num_spindles-1>))"
msgstr ""

#. type: TP
#: man/man9/motion.9:586
#, no-wrap
msgid "B<spindle.M.amp-fault-in> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:589
msgid ""
"Should be driven TRUE if an external fault is detected with the amplifier "
"for this spindle"
msgstr ""

#. type: TP
#: man/man9/motion.9:590
#, no-wrap
msgid "B<spindle.M.at-speed> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:595
msgid ""
"Motion will pause until this pin is TRUE, under the following conditions: "
"before the first feed move after each spindle start or speed change; before "
"the start of every chain of spindle-synchronized moves; and if in CSS mode, "
"at every rapid-E<gt>feed transition."
msgstr ""

#. type: TP
#: man/man9/motion.9:596
#, no-wrap
msgid "B<spindle.M.brake> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:599
msgid "TRUE when the spindle brake should be applied"
msgstr ""

#. type: TP
#: man/man9/motion.9:600
#, no-wrap
msgid "B<spindle.M.forward> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:603
msgid "TRUE when the spindle should rotate forward"
msgstr ""

#. type: TP
#: man/man9/motion.9:604
#, no-wrap
msgid "B<spindle.M.index-enable> I/O BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:607
msgid ""
"For correct operation of spindle synchronized moves, this signal must be "
"hooked to the index-enable pin of the spindle encoder."
msgstr ""

#. type: TP
#: man/man9/motion.9:608
#, no-wrap
msgid "B<spindle.M.inhibit> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:611
msgid "When TRUE, the spindle speed is set and held to 0."
msgstr ""

#. type: TP
#: man/man9/motion.9:612
#, no-wrap
msgid "B<spindle.M.is-oriented> IN BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:616
msgid ""
"Acknowledge pin for spindle-orient. Completes orient cycle. If spindle-"
"orient was true when spindle-is-oriented was asserted, the spindle-orient "
"pin is cleared and the spindle-locked pin is asserted. Also, the spindle-"
"brake pin is asserted."
msgstr ""

#. type: TP
#: man/man9/motion.9:617
#, no-wrap
msgid "B<spindle.M.locked> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:620
msgid "Spindle orient complete pin. Cleared by any of M3,M4,M5."
msgstr ""

#. type: TP
#: man/man9/motion.9:621
#, no-wrap
msgid "B<spindle.M.on> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:624
msgid "TRUE when spindle should rotate"
msgstr ""

#. type: TP
#: man/man9/motion.9:625
#, no-wrap
msgid "B<spindle.M.orient> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:628
msgid ""
"Indicates start of spindle orient cycle. Set by M19. Cleared by any of M3,M4,"
"M5."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:630
msgid ""
"If spindle-orient-fault is not zero during spindle-orient true, the M19 "
"command fails with an error message."
msgstr ""

#. type: TP
#: man/man9/motion.9:631
#, no-wrap
msgid "B<spindle.M.orient-angle> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:634
msgid ""
"Desired spindle orientation for M19. Value of the M19 R word parameter plus "
"the value of the [RS274NGC]ORIENT_OFFSET INI parameter."
msgstr ""

#. type: TP
#: man/man9/motion.9:635
#, no-wrap
msgid "B<spindle.M.orient-fault> IN S32"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:638
msgid ""
"Fault code input for orient cycle. Any value other than zero will cause the "
"orient cycle to abort."
msgstr ""

#. type: TP
#: man/man9/motion.9:639
#, no-wrap
msgid "B<spindle.M.orient-mode> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:642
msgid "Desired spindle rotation mode. Reflects M19 P parameter word."
msgstr ""

#. type: TP
#: man/man9/motion.9:643
#, no-wrap
msgid "B<spindle.M.reverse> OUT BIT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:646
msgid "TRUE when the spindle should rotate backward"
msgstr ""

#. type: TP
#: man/man9/motion.9:647
#, no-wrap
msgid "B<spindle.M.revs> IN FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:650
msgid ""
"For correct operation of spindle synchronized moves, this signal must be "
"hooked to the position pin of the spindle encoder."
msgstr ""

#. type: TP
#: man/man9/motion.9:651
#, no-wrap
msgid "B<spindle.M.speed-cmd-rps> FLOAT OUT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:654
msgid "Commanded spindle speed in units of revolutions per second"
msgstr ""

#. type: TP
#: man/man9/motion.9:655
#, no-wrap
msgid "B<spindle.M.speed-in> IN FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:658
msgid ""
"Actual spindle speed feedback in revolutions per second; used for G96 "
"(constant surface speed) and G95 (feed per revolution) modes."
msgstr ""

#. type: TP
#: man/man9/motion.9:659
#, no-wrap
msgid "B<spindle.M.speed-out> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:662
msgid "Desired spindle speed in rotations per minute"
msgstr ""

#. type: TP
#: man/man9/motion.9:663
#, no-wrap
msgid "B<spindle.M.speed-out-abs> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:666
msgid ""
"Desired spindle speed in rotations per minute, always positive regardless of "
"spindle direction."
msgstr ""

#. type: TP
#: man/man9/motion.9:667
#, no-wrap
msgid "B<spindle.M.speed-out-rps> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:670
msgid "Desired spindle speed in rotations per second"
msgstr ""

#. type: TP
#: man/man9/motion.9:671
#, no-wrap
msgid "B<spindle.M.speed-out-rps-abs> OUT FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:674
msgid ""
"Desired spindle speed in rotations per second, always positive regardless of "
"spindle direction."
msgstr ""

#. type: SH
#: man/man9/motion.9:675
#, no-wrap
msgid "MOTION PARAMETERS"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:678
msgid ""
"Many of the parameters serve as debugging aids, and are subject to change or "
"removal at any time."
msgstr ""

#. type: TP
#: man/man9/motion.9:681
#, no-wrap
msgid "B<motion-command-handler.tmax> RW S32"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:684 man/man9/motion.9:695
msgid ""
"Show information about the execution time of these HAL functions in CPU "
"clocks"
msgstr ""

#. type: TP
#: man/man9/motion.9:687
#, no-wrap
msgid "B<motion-command-handler.tmax-increased> RO S32"
msgstr ""

#. type: TP
#: man/man9/motion.9:692
#, no-wrap
msgid "B<motion-controller.tmax> RW S32"
msgstr ""

#. type: TP
#: man/man9/motion.9:698
#, no-wrap
msgid "B<motion-controller.tmax-increased> RO BIT"
msgstr ""

#. type: TP
#: man/man9/motion.9:701
#, no-wrap
msgid "B<motion.debug->I<*>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:704
msgid "These values are used for debugging purposes."
msgstr ""

#. type: TP
#: man/man9/motion.9:709
#, no-wrap
msgid "B<motion-command-handler>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:715
msgid ""
"Processes motion commands coming from user space.  The pin named B<motion-"
"command-handler.time> and parameters B<motion-command-handler.tmax,tmax-"
"increased>are created for this function."
msgstr ""

#. type: TP
#: man/man9/motion.9:716
#, no-wrap
msgid "B<motion-controller>"
msgstr ""

#. type: Plain text
#: man/man9/motion.9:722
msgid ""
"Runs the LinuxCNC motion controller The pin named B<motion-controller.time> "
"and parameters B<motion-controller.tmax,tmax-increased> are created for this "
"function."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:725
msgid "This manual page is incomplete."
msgstr ""

#. type: TP
#: man/man9/motion.9:727
#, no-wrap
msgid "Identification of pins categorized with B<(DEBUG)> is dubious."
msgstr ""

#. type: Plain text
#: man/man9/motion.9:731
msgid "iocontrol(1), milltask(1)"
msgstr ""

#. type: TH
#: man/man9/moveoff.9:9
#, no-wrap
msgid "MOVEOFF"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:13
msgid "moveoff - Component for Hal-only offsets"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:16
msgid ""
"B<loadrt moveoff [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]] "
"[personality=>I<P,P,...>B<]>"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:23
msgid ""
"The moveoff component is used to offset joint positions using custom Hal "
"connections.  Implementing an offset-while-program-is-paused functionality "
"is supported with appropriate connections for the input pins.  Nine joints "
"are supported."
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:31
msgid ""
"The axis offset pin values (offset-in-M) are continuously applied "
"(respecting limits on value, velocity, and acceleration) to the output pins "
"(offset-current-M, pos-plusoffset-M, fb-minusoffset-M) when both enabling "
"input pins (apply-offsets and move-enable) are TRUE.  The two enabling "
"inputs are anded internally.  A B<warning> pin is set and a message issued "
"if the apply-offsets pin is deasserted while offsets are applied.  The "
"warning pin remains TRUE until the offsets are removed or the apply-offsets "
"pin is set."
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:39
msgid ""
"Applied offsets are B<automatically returned> to zero (respecting limits)  "
"when either of the enabling inputs is deactivated.  The zero value tolerance "
"is specified by the epsilon input pin value."
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:52
msgid ""
"Backtracking through waypoints results in B<slower> movement rates as the "
"moves are point-to-point respecting velocity and acceleration settings.  The "
"velocity and acceleration limit pins can be managed dynamically to control "
"offsets at all times."
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:57
msgid ""
"When backtrack-enable is FALSE, the auto-return move is B<NOT> coordinated, "
"each axis returns to zero at its own rate.  If a controlled path is wanted "
"in this condition, each axis should be manually returned to zero before "
"deasserting an enabling pin."
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:66
msgid ""
"The offsets-applied output pin is provided to indicate the current state to "
"a GUI so that program resumption can be managed.  If the offset(s) are non-"
"zero when the apply-offsets pin is deasserted (for example when resuming a "
"program when offsetting during a pause), offsets are returned to zero "
"(respecting limits) and an B<Error> message is issued."
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:71
msgid ""
"B<Caution:> If offsets are enabled and applied and the machine is turned off "
"for any reason, any B<external> Hal logic that manages the enabling pins and "
"the offset-in-M inputs is responsible for their state when the machine is "
"subsequently turned on again."
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:79
msgid ""
"This Hal-only means of offsetting is typically not known to LinuxCNC nor "
"available in GUI preview displays.  B<No protection is provided> for offset "
"moves that exceed soft limits managed by LinuxCNC.  Since soft limits are "
"not honored, an offset move may encounter hard limits (or B<CRASH> if there "
"are no limit switches).  Use of the offset-min-M and offset-max-M inputs to "
"limit travel is recommended.  Triggering a hard limit will turn off the "
"machine -- see B<Caution> above."
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:87
msgid ""
"The offset-in-M values may be set with inifile settings, controlled by a "
"GUI, or managed by other Hal components and connections.  Fixed values may "
"be appropriate in simple cases where the direction and amount of offset is "
"well-defined but a control method is required to deactivate an enabling pin "
"in order to return offsets to zero.  GUIs may provide means for users to "
"set, increment, decrement, and accumulate offset values for each axis and "
"may set offset-in-M values to zero before deasserting an enabling pin."
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:93
msgid ""
"The default values for accel, vel, min, max, epsilon, waypoint-sample-secs, "
"and waypoint-threshold may not be suitable for any particular application.  "
"This Hal component is unaware of limits enforced elsewhere by LinuxCNC.  "
"Users should test usage in a simulator application and understand all "
"hazards B<before> use on hardware."
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:96
msgid ""
"The module personality item sets the number of joints supported (default==3, "
"maximum is 9)."
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:100
#, no-wrap
msgid ""
"Use of the names= option for naming is B<required> for compatibility\n"
"with the gui provided as scripts/moveoff_gui:\n"
"  loadrt moveoff names=B<mv> personality=number_of_joints\n"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:103
#, no-wrap
msgid "B<moveoff.>I<N>B<.read-inputs> (requires a floating-point thread)"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:106
msgid "Read all inputs"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:106
#, no-wrap
msgid "B<moveoff.>I<N>B<.write-outputs> (requires a floating-point thread)"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:111
msgid ""
"Write computed offset outputs (offset-current-M, pos-plusoffset-M, fb-"
"minusoffset-M).  All other outputs are updated by read-inputs()"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:112
#, no-wrap
msgid "B<moveoff.>I<N>B<.power-on> bit in "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:115
msgid "Connect to motion.motion-enabled"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:115
#, no-wrap
msgid "B<moveoff.>I<N>B<.move-enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:118
msgid "Enable offsets (Enabling requires apply-offset TRUE also)"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:118
#, no-wrap
msgid "B<moveoff.>I<N>B<.apply-offsets> bit in "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:121
msgid "Enable offsets (Enabling requires move-enable TRUE also)"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:121
#, no-wrap
msgid "B<moveoff.>I<N>B<.backtrack-enable> bit in (default: I<1>)"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:124
msgid "Enable backtrack on auto-return"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:124
#, no-wrap
msgid "B<moveoff.>I<N>B<.epsilon> float in (default: I<0.0005>)"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:127
msgid ""
"When enabling pins are deactivated, return to un-offsetted position within "
"epsilon units.  Warning: values that are too small in value may cause "
"overshoot, A minimum value of 0.0001 is B<silently enforced>"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:127
#, no-wrap
msgid "B<moveoff.>I<N>B<.waypoint-threshold> float in (default: I<0.02>)"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:130
msgid "Minimum distance (in a single axis) for a new waypoint"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:130
#, no-wrap
msgid "B<moveoff.>I<N>B<.waypoint-sample-secs> float in (default: I<0.02>)"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:133
msgid "Minimum sample interval (in seconds) for a new waypoint"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:133
#, no-wrap
msgid "B<moveoff.>I<N>B<.warning> bit out "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:136
msgid "Set TRUE if apply-offsets is deasserted while offset-applied is TRUE"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:136
#, no-wrap
msgid "B<moveoff.>I<N>B<.offset-applied> bit out "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:139
msgid "TRUE if one or more offsets are applied"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:139
#, no-wrap
msgid "B<moveoff.>I<N>B<.waypoint-limit> bit out (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:142
msgid ""
"Indicates waypoint limit reached (motion ceases), an enabling pin must be "
"deasserted to initiate return to original position"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:142
#, no-wrap
msgid "B<moveoff.>I<N>B<.waypoint-ct> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:145
msgid "Waypoint count (for debugging)"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:145
#, no-wrap
msgid "B<moveoff.>I<N>B<.waypoint-percent-used> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:148
msgid "Percent of available waypoints used"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:148
#, no-wrap
msgid "B<moveoff.>I<N>B<.offset-in->I<M> float in (M=0..personality) "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:151
msgid "Joint offset input value"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:151
#, no-wrap
msgid "B<moveoff.>I<N>B<.pos->I<M> float in (M=0..personality) "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:154
msgid "Joint position (typ: axis.0.motor-pos-cmd)"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:154
#, no-wrap
msgid "B<moveoff.>I<N>B<.fb->I<M> float in (M=0..personality) "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:157
msgid ""
"Joint feedback (typ from encoder and input to pid controller (pid.feedback))"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:157
#, no-wrap
msgid "B<moveoff.>I<N>B<.offset-current->I<M> float out (M=0..personality) "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:160
msgid "Joint offset current value"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:160
#, no-wrap
msgid "B<moveoff.>I<N>B<.pos-plusoffset->I<M> float out (M=0..personality) "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:163
msgid ""
"Computed joint position plus offset (typically connect to pid command input)"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:163
#, no-wrap
msgid "B<moveoff.>I<N>B<.fb-minusoffset->I<M> float out (M=0..personality) "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:166
msgid ""
"Computed Joint feedback minus offset (typically connected to axis.0.motor-"
"pos-fb"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:166
#, no-wrap
msgid "B<moveoff.>I<N>B<.offset-vel->I<M> float in (M=0..personality) (default: I<10>)"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:169
msgid "Joint offset velocity limit"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:169
#, no-wrap
msgid "B<moveoff.>I<N>B<.offset-accel->I<M> float in (M=0..personality) (default: I<100>)"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:172
msgid "Joint offset acceleration limit"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:172
#, no-wrap
msgid "B<moveoff.>I<N>B<.offset-min->I<M> float in (M=0..personality) (default: I<-1e20>)"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:175
msgid "Minimum limit for applied joint offset (typ negative)"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:175
#, no-wrap
msgid "B<moveoff.>I<N>B<.offset-max->I<M> float in (M=0..personality) (default: I<1e20>)"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:178
msgid "Maximum limit for applied offset (typ positive)"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:178
#, no-wrap
msgid "B<moveoff.>I<N>B<.dbg-waypoint-limit-test> bit in "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:181
msgid "Debug input to test with limited number of waypoints"
msgstr ""

#. type: TP
#: man/man9/moveoff.9:181
#, no-wrap
msgid "B<moveoff.>I<N>B<.dbg-state> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:184
msgid "Debug output for current state of state machine"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:192
msgid ""
"Example simulator configs that demonstrate the moveoff component and a "
"simple gui (scripts/moveoff_gui) are located in configs/sim/axis/moveoff. "
"The axis gui is used for the demonstrations and the configs can be adapted "
"for other guis like touchy and gscreen.  An example with the touchy gui is "
"provided in configs/sim/touchy/ngcgui/."
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:198
msgid "B<moveoff_gui>(1)"
msgstr ""

#. type: Plain text
#: man/man9/moveoff.9:202
msgid "Dewey Garrett and Andy Pugh"
msgstr ""

#. type: TH
#: man/man9/mult2.9:9
#, no-wrap
msgid "MULT2"
msgstr ""

#. type: Plain text
#: man/man9/mult2.9:13
msgid "mult2 - Product of two inputs"
msgstr ""

#. type: Plain text
#: man/man9/mult2.9:16
msgid "B<loadrt mult2 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/mult2.9:17
#, no-wrap
msgid "B<mult2.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/mult2.9:21
#, no-wrap
msgid "B<mult2.>I<N>B<.in0> float in "
msgstr ""

#. type: TP
#: man/man9/mult2.9:25
#, no-wrap
msgid "B<mult2.>I<N>B<.in1> float in "
msgstr ""

#. type: TP
#: man/man9/mult2.9:29
#, no-wrap
msgid "B<mult2.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/mult2.9:32
msgid "out = in0 * in1"
msgstr ""

#. type: TH
#: man/man9/multiclick.9:9
#, no-wrap
msgid "MULTICLICK"
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:13
msgid "multiclick - Single-, double-, triple-, and quadruple-click detector"
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:16
msgid "B<loadrt multiclick [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:21
msgid ""
"A click is defined as a rising edge on the 'in' pin, followed by the 'in' "
"pin being True for at most 'max-hold-ns' nanoseconds, followed by a falling "
"edge."
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:24
msgid ""
"A double-click is defined as two clicks, separated by at most 'max-space-ns' "
"nanoseconds with the 'in' pin in the False state."
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:26
msgid "I bet you can guess the definition of triple- and quadruple-click."
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:30
msgid ""
"You probably want to run the input signal through a debounce component "
"before feeding it to the multiclick detector, if the input is at all noisy."
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:33
msgid ""
"The '*-click' pins go high as soon as the input detects the correct number "
"of clicks."
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:37
msgid ""
"The '*-click-only' pins go high a short while after the click, after the "
"click separator space timeout has expired to show that no further click is "
"coming.  This is useful for triggering halui MDI commands."
msgstr ""

#. type: TP
#: man/man9/multiclick.9:38
#, no-wrap
msgid "B<multiclick.>I<N>"
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:41
msgid "Detect single-, double-, triple-, and quadruple-clicks"
msgstr ""

#. type: TP
#: man/man9/multiclick.9:42
#, no-wrap
msgid "B<multiclick.>I<N>B<.in> bit in "
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:45
msgid "The input line, this is where we look for clicks."
msgstr ""

#. type: TP
#: man/man9/multiclick.9:45
#, no-wrap
msgid "B<multiclick.>I<N>B<.single-click> bit out "
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:48
msgid "Goes high briefly when a single-click is detected on the 'in' pin."
msgstr ""

#. type: TP
#: man/man9/multiclick.9:48
#, no-wrap
msgid "B<multiclick.>I<N>B<.single-click-only> bit out "
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:52
msgid ""
"Goes high briefly when a single-click is detected on the 'in' pin and no "
"second click followed it."
msgstr ""

#. type: TP
#: man/man9/multiclick.9:52
#, no-wrap
msgid "B<multiclick.>I<N>B<.double-click> bit out "
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:55
msgid "Goes high briefly when a double-click is detected on the 'in' pin."
msgstr ""

#. type: TP
#: man/man9/multiclick.9:55
#, no-wrap
msgid "B<multiclick.>I<N>B<.double-click-only> bit out "
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:59
msgid ""
"Goes high briefly when a double-click is detected on the 'in' pin and no "
"third click followed it."
msgstr ""

#. type: TP
#: man/man9/multiclick.9:59
#, no-wrap
msgid "B<multiclick.>I<N>B<.triple-click> bit out "
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:62
msgid "Goes high briefly when a triple-click is detected on the 'in' pin."
msgstr ""

#. type: TP
#: man/man9/multiclick.9:62
#, no-wrap
msgid "B<multiclick.>I<N>B<.triple-click-only> bit out "
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:66
msgid ""
"Goes high briefly when a triple-click is detected on the 'in' pin and no "
"fourth click followed it."
msgstr ""

#. type: TP
#: man/man9/multiclick.9:66
#, no-wrap
msgid "B<multiclick.>I<N>B<.quadruple-click> bit out "
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:69
msgid "Goes high briefly when a quadruple-click is detected on the 'in' pin."
msgstr ""

#. type: TP
#: man/man9/multiclick.9:69
#, no-wrap
msgid "B<multiclick.>I<N>B<.quadruple-click-only> bit out "
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:73
msgid ""
"Goes high briefly when a quadruple-click is detected on the 'in' pin and no "
"fifth click followed it."
msgstr ""

#. type: TP
#: man/man9/multiclick.9:73
#, no-wrap
msgid "B<multiclick.>I<N>B<.state> s32 out "
msgstr ""

#. type: TP
#: man/man9/multiclick.9:76
#, no-wrap
msgid "B<multiclick.>I<N>B<.invert-input> bit rw (default: I<FALSE>)"
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:80
msgid ""
"If FALSE (the default), clicks start with rising edges.  If TRUE, clicks "
"start with falling edges."
msgstr ""

#. type: TP
#: man/man9/multiclick.9:80
#, no-wrap
msgid "B<multiclick.>I<N>B<.max-hold-ns> u32 rw (default: I<250000000>)"
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:84
msgid ""
"If the input is held down longer than this, it's not part of a multi-click.  "
"(Default 250,000,000 ns, 250 ms.)"
msgstr ""

#. type: TP
#: man/man9/multiclick.9:84
#, no-wrap
msgid "B<multiclick.>I<N>B<.max-space-ns> u32 rw (default: I<250000000>)"
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:88
msgid ""
"If the input is released longer than this, it's not part of a multi-click.  "
"(Default 250,000,000 ns, 250 ms.)"
msgstr ""

#. type: TP
#: man/man9/multiclick.9:88
#, no-wrap
msgid "B<multiclick.>I<N>B<.output-hold-ns> u32 rw (default: I<100000000>)"
msgstr ""

#. type: Plain text
#: man/man9/multiclick.9:92
msgid ""
"Positive pulses on the output pins last this long.  (Default 100,000,000 ns, "
"100 ms.)"
msgstr ""

#. type: TH
#: man/man9/multiswitch.9:9
#, no-wrap
msgid "MULTISWITCH"
msgstr ""

#. type: Plain text
#: man/man9/multiswitch.9:13
msgid ""
"multiswitch - This component toggles between a specified number of output "
"bits"
msgstr ""

#. type: Plain text
#: man/man9/multiswitch.9:16
msgid "B<loadrt multiswitch personality=>I<P>B< [cfg=>I<N>B<]>"
msgstr ""

#. type: TP
#: man/man9/multiswitch.9:17
#, no-wrap
msgid "B<cfg>"
msgstr ""

#. type: Plain text
#: man/man9/multiswitch.9:22
#, no-wrap
msgid ""
"cfg should be a comma-separated list of sizes\n"
"for example cfg=2,4,6 would create 3 instances of 2, 4 and 6 bits respectively.\n"
" Ignore the \"personality\" parameter, that is auto-generated\n"
msgstr ""

#. type: TP
#: man/man9/multiswitch.9:24
#, no-wrap
msgid "B<multiswitch.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/multiswitch.9:28
#, no-wrap
msgid "B<multiswitch.>I<N>B<.up> bit in (default: I<false>)"
msgstr ""

#. type: Plain text
#: man/man9/multiswitch.9:31
msgid "Receives signal to toggle up"
msgstr ""

#. type: TP
#: man/man9/multiswitch.9:31
#, no-wrap
msgid "B<multiswitch.>I<N>B<.down> bit in (default: I<false>)"
msgstr ""

#. type: Plain text
#: man/man9/multiswitch.9:34
msgid "Receives signal to toggle down"
msgstr ""

#. type: TP
#: man/man9/multiswitch.9:34
#, no-wrap
msgid "B<multiswitch.>I<N>B<.bit->I<MM> bit out (MM=00..personality) (default: I<false>)"
msgstr ""

#. type: Plain text
#: man/man9/multiswitch.9:37
msgid "Output bits"
msgstr ""

#. type: TP
#: man/man9/multiswitch.9:38
#, no-wrap
msgid "B<multiswitch.>I<N>B<.top-position> u32 rw "
msgstr ""

#. type: Plain text
#: man/man9/multiswitch.9:41
msgid "Number of positions"
msgstr ""

#. type: TP
#: man/man9/multiswitch.9:41
#, no-wrap
msgid "B<multiswitch.>I<N>B<.position> s32 rw "
msgstr ""

#. type: Plain text
#: man/man9/multiswitch.9:44
msgid "Current state (may be set in the HAL)"
msgstr ""

#. type: Plain text
#: man/man9/multiswitch.9:47
msgid "ArcEye schooner30@tiscali.co.uk / Andy Pugh andy@bodgesoc.org"
msgstr ""

#. type: TH
#: man/man9/mux16.9:9
#, no-wrap
msgid "MUX16"
msgstr ""

#. type: Plain text
#: man/man9/mux16.9:13
msgid "mux16 - Select from one of sixteen input values"
msgstr ""

#. type: Plain text
#: man/man9/mux16.9:16
msgid "B<loadrt mux16 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/mux16.9:17
#, no-wrap
msgid "B<mux16.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/mux16.9:21
#, no-wrap
msgid "B<mux16.>I<N>B<.use-graycode> bit in "
msgstr ""

#. type: Plain text
#: man/man9/mux16.9:26
msgid ""
"This signifies the input will use Gray code instead of binary.  Gray code is "
"a good choice when using physical switches because for each increment only "
"one select input changes at a time."
msgstr ""

#. type: TP
#: man/man9/mux16.9:27
#, no-wrap
msgid "B<mux16.>I<N>B<.suppress-no-input> bit in "
msgstr ""

#. type: Plain text
#: man/man9/mux16.9:32
msgid ""
"This suppresses changing the output if all select lines are false.  This "
"stops unwanted jumps in output between transitions of input.  but make in00 "
"unavailable."
msgstr ""

#. type: TP
#: man/man9/mux16.9:33
#, no-wrap
msgid "B<mux16.>I<N>B<.debounce-time> float in "
msgstr ""

#. type: Plain text
#: man/man9/mux16.9:38
msgid ""
"sets debouce time in seconds.  eg. .10 = a tenth of a second input must be "
"stable this long before outputs changes. This helps to ignore 'noisy' "
"switches."
msgstr ""

#. type: TP
#: man/man9/mux16.9:39
#, no-wrap
msgid "B<mux16.>I<N>B<.sel>I<M> bit in (M=0..3) "
msgstr ""

#. type: Plain text
#: man/man9/mux16.9:42 man/man9/mux4.9:28 man/man9/mux8.9:32
msgid "Together, these determine which B<in>I<N> value is copied to B<out>."
msgstr ""

#. type: TP
#: man/man9/mux16.9:43
#, no-wrap
msgid "B<mux16.>I<N>B<.out-f> float out "
msgstr ""

#. type: TP
#: man/man9/mux16.9:47
#, no-wrap
msgid "B<mux16.>I<N>B<.out-s> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/mux16.9:52
msgid ""
"Follows the value of one of the B<in>I<N> values according to the four "
"B<sel> values and whether use-graycode is active.  The s32 value will be "
"trunuated and limited to the max and min values of signed values."
msgstr ""

#. type: TP
#: man/man9/mux16.9:53
#, no-wrap
msgid "B<sel3=FALSE>, B<sel2=FALSE>, B<sel1=FALSE>, B<sel0=FALSE>"
msgstr ""

#. type: Plain text
#: man/man9/mux16.9:56 man/man9/mux4.9:36 man/man9/mux8.9:40
msgid "B<out> follows B<in0>"
msgstr ""

#. type: TP
#: man/man9/mux16.9:56
#, no-wrap
msgid "B<sel3=FALSE>, B<sel2=FALSE>, B<sel1=FALSE>, B<sel0=TRUE>"
msgstr ""

#. type: Plain text
#: man/man9/mux16.9:59 man/man9/mux4.9:39 man/man9/mux8.9:43
msgid "B<out> follows B<in1>"
msgstr ""

#. type: TP
#: man/man9/mux16.9:59
#, no-wrap
msgid "etc."
msgstr ""

#. type: TP
#: man/man9/mux16.9:63
#, no-wrap
msgid "B<mux16.>I<N>B<.in>I<MM> float in (MM=00..15) "
msgstr ""

#. type: Plain text
#: man/man9/mux16.9:66
msgid "array of selectable outputs"
msgstr ""

#. type: TP
#: man/man9/mux16.9:67
#, no-wrap
msgid "B<mux16.>I<N>B<.elapsed> float r "
msgstr ""

#. type: Plain text
#: man/man9/mux16.9:71
#, no-wrap
msgid ""
"Current value of the internal debounce timer\n"
" for debugging.\n"
msgstr ""

#. type: TP
#: man/man9/mux16.9:71
#, no-wrap
msgid "B<mux16.>I<N>B<.selected> s32 r "
msgstr ""

#. type: Plain text
#: man/man9/mux16.9:75
#, no-wrap
msgid ""
"Current value of the internal selection variable after conversion\n"
" for debugging\n"
msgstr ""

#. type: TH
#: man/man9/mux2.9:9
#, no-wrap
msgid "MUX2"
msgstr ""

#. type: Plain text
#: man/man9/mux2.9:13
msgid "mux2 - Select from one of two input values"
msgstr ""

#. type: Plain text
#: man/man9/mux2.9:16
msgid "B<loadrt mux2 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/mux2.9:17
#, no-wrap
msgid "B<mux2.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/mux2.9:21
#, no-wrap
msgid "B<mux2.>I<N>B<.sel> bit in "
msgstr ""

#. type: TP
#: man/man9/mux2.9:25
#, no-wrap
msgid "B<mux2.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/mux2.9:28
msgid "Follows the value of in0 if sel is FALSE, or in1 if sel is TRUE"
msgstr ""

#. type: TP
#: man/man9/mux2.9:28
#, no-wrap
msgid "B<mux2.>I<N>B<.in1> float in "
msgstr ""

#. type: TP
#: man/man9/mux2.9:32
#, no-wrap
msgid "B<mux2.>I<N>B<.in0> float in "
msgstr ""

#. type: TH
#: man/man9/mux4.9:9
#, no-wrap
msgid "MUX4"
msgstr ""

#. type: Plain text
#: man/man9/mux4.9:13
msgid "mux4 - Select from one of four input values"
msgstr ""

#. type: Plain text
#: man/man9/mux4.9:16
msgid "B<loadrt mux4 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/mux4.9:17
#, no-wrap
msgid "B<mux4.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/mux4.9:21
#, no-wrap
msgid "B<mux4.>I<N>B<.sel0> bit in "
msgstr ""

#. type: TP
#: man/man9/mux4.9:25
#, no-wrap
msgid "B<mux4.>I<N>B<.sel1> bit in "
msgstr ""

#. type: TP
#: man/man9/mux4.9:29
#, no-wrap
msgid "B<mux4.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/mux4.9:32
msgid ""
"Follows the value of one of the B<in>I<N> values according to the two B<sel> "
"values"
msgstr ""

#. type: TP
#: man/man9/mux4.9:33
#, no-wrap
msgid "B<sel1=FALSE>, B<sel0=FALSE>"
msgstr ""

#. type: TP
#: man/man9/mux4.9:36
#, no-wrap
msgid "B<sel1=FALSE>, B<sel0=TRUE>"
msgstr ""

#. type: TP
#: man/man9/mux4.9:39
#, no-wrap
msgid "B<sel1=TRUE>, B<sel0=FALSE>"
msgstr ""

#. type: Plain text
#: man/man9/mux4.9:42 man/man9/mux8.9:46
msgid "B<out> follows B<in2>"
msgstr ""

#. type: TP
#: man/man9/mux4.9:42
#, no-wrap
msgid "B<sel1=TRUE>, B<sel0=TRUE>"
msgstr ""

#. type: Plain text
#: man/man9/mux4.9:45 man/man9/mux8.9:49
msgid "B<out> follows B<in3>"
msgstr ""

#. type: TP
#: man/man9/mux4.9:47
#, no-wrap
msgid "B<mux4.>I<N>B<.in0> float in "
msgstr ""

#. type: TP
#: man/man9/mux4.9:51
#, no-wrap
msgid "B<mux4.>I<N>B<.in1> float in "
msgstr ""

#. type: TP
#: man/man9/mux4.9:55
#, no-wrap
msgid "B<mux4.>I<N>B<.in2> float in "
msgstr ""

#. type: TP
#: man/man9/mux4.9:59
#, no-wrap
msgid "B<mux4.>I<N>B<.in3> float in "
msgstr ""

#. type: TH
#: man/man9/mux8.9:9
#, no-wrap
msgid "MUX8"
msgstr ""

#. type: Plain text
#: man/man9/mux8.9:13
msgid "mux8 - Select from one of eight input values"
msgstr ""

#. type: Plain text
#: man/man9/mux8.9:16
msgid "B<loadrt mux8 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/mux8.9:17
#, no-wrap
msgid "B<mux8.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/mux8.9:21
#, no-wrap
msgid "B<mux8.>I<N>B<.sel0> bit in "
msgstr ""

#. type: TP
#: man/man9/mux8.9:25
#, no-wrap
msgid "B<mux8.>I<N>B<.sel1> bit in "
msgstr ""

#. type: TP
#: man/man9/mux8.9:29
#, no-wrap
msgid "B<mux8.>I<N>B<.sel2> bit in "
msgstr ""

#. type: TP
#: man/man9/mux8.9:33
#, no-wrap
msgid "B<mux8.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/mux8.9:36
msgid ""
"Follows the value of one of the B<in>I<N> values according to the three "
"B<sel> values"
msgstr ""

#. type: TP
#: man/man9/mux8.9:37
#, no-wrap
msgid "B<sel2=FALSE>, B<sel1=FALSE>, B<sel0=FALSE>"
msgstr ""

#. type: TP
#: man/man9/mux8.9:40
#, no-wrap
msgid "B<sel2=FALSE>, B<sel1=FALSE>, B<sel0=TRUE>"
msgstr ""

#. type: TP
#: man/man9/mux8.9:43
#, no-wrap
msgid "B<sel2=FALSE>, B<sel1=TRUE>, B<sel0=FALSE>"
msgstr ""

#. type: TP
#: man/man9/mux8.9:46
#, no-wrap
msgid "B<sel2=FALSE>, B<sel1=TRUE>, B<sel0=TRUE>"
msgstr ""

#. type: TP
#: man/man9/mux8.9:49
#, no-wrap
msgid "B<sel2=TRUE>, B<sel1=FALSE>, B<sel0=FALSE>"
msgstr ""

#. type: Plain text
#: man/man9/mux8.9:52
msgid "B<out> follows B<in4>"
msgstr ""

#. type: TP
#: man/man9/mux8.9:52
#, no-wrap
msgid "B<sel2=TRUE>, B<sel1=FALSE>, B<sel0=TRUE>"
msgstr ""

#. type: Plain text
#: man/man9/mux8.9:55
msgid "B<out> follows B<in5>"
msgstr ""

#. type: TP
#: man/man9/mux8.9:55
#, no-wrap
msgid "B<sel2=TRUE>, B<sel1=TRUE>, B<sel0=FALSE>"
msgstr ""

#. type: Plain text
#: man/man9/mux8.9:58
msgid "B<out> follows B<in6>"
msgstr ""

#. type: TP
#: man/man9/mux8.9:58
#, no-wrap
msgid "B<sel2=TRUE>, B<sel1=TRUE>, B<sel0=TRUE>"
msgstr ""

#. type: Plain text
#: man/man9/mux8.9:61
msgid "B<out> follows B<in7>"
msgstr ""

#. type: TP
#: man/man9/mux8.9:63
#, no-wrap
msgid "B<mux8.>I<N>B<.in0> float in "
msgstr ""

#. type: TP
#: man/man9/mux8.9:67
#, no-wrap
msgid "B<mux8.>I<N>B<.in1> float in "
msgstr ""

#. type: TP
#: man/man9/mux8.9:71
#, no-wrap
msgid "B<mux8.>I<N>B<.in2> float in "
msgstr ""

#. type: TP
#: man/man9/mux8.9:75
#, no-wrap
msgid "B<mux8.>I<N>B<.in3> float in "
msgstr ""

#. type: TP
#: man/man9/mux8.9:79
#, no-wrap
msgid "B<mux8.>I<N>B<.in4> float in "
msgstr ""

#. type: TP
#: man/man9/mux8.9:83
#, no-wrap
msgid "B<mux8.>I<N>B<.in5> float in "
msgstr ""

#. type: TP
#: man/man9/mux8.9:87
#, no-wrap
msgid "B<mux8.>I<N>B<.in6> float in "
msgstr ""

#. type: TP
#: man/man9/mux8.9:91
#, no-wrap
msgid "B<mux8.>I<N>B<.in7> float in "
msgstr ""

#. type: Plain text
#: man/man9/mux8.9:96
msgid "Stuart Stevenson"
msgstr ""

#. type: TH
#: man/man9/mux_generic.9:3
#, no-wrap
msgid "MUX_GENERIC"
msgstr ""

#. type: TH
#: man/man9/mux_generic.9:3
#, no-wrap
msgid "2013-05-27"
msgstr ""

#. type: Plain text
#: man/man9/mux_generic.9:8
msgid "mux_generic - choose one from several input values"
msgstr ""

#. type: Plain text
#: man/man9/mux_generic.9:11
msgid "B<loadrt mux_generic config=\"bb8,fu12....\">"
msgstr ""

#. type: TP
#: man/man9/mux_generic.9:12
#, no-wrap
msgid "B<mux-gen.>I<NN> Depending on the data types can run in either a floating"
msgstr ""

#. type: Plain text
#: man/man9/mux_generic.9:15
msgid "point or non-floating point thread."
msgstr ""

#. type: TP
#: man/man9/mux_generic.9:17
#, no-wrap
msgid "B<mux-gen.>I<NN>B<.suppress-no-input> bit in "
msgstr ""

#. type: Plain text
#: man/man9/mux_generic.9:22
msgid ""
"This suppresses changing the output if all select lines are false.  This "
"stops unwanted jumps in output between transitions of input.  but makes in00 "
"unavailable."
msgstr ""

#. type: TP
#: man/man9/mux_generic.9:23
#, no-wrap
msgid "B<mux-gen.>I<NN>B<.debounce-us> unsigned in "
msgstr ""

#. type: Plain text
#: man/man9/mux_generic.9:28
msgid ""
"sets debouce time in microseconds.  eg. 100000 = a tenth of a second.  The "
"selection inputs must be stable this long before the output changes. This "
"helps to ignore 'noisy' switches."
msgstr ""

#. type: TP
#: man/man9/mux_generic.9:29
#, no-wrap
msgid "B<mux-gen.>I<NN>B<.sel-bit->I<MM> bit in (M=0..N) "
msgstr ""

#. type: TP
#: man/man9/mux_generic.9:31
#, no-wrap
msgid "B<mux-gen.>I<NN>B<.sel-int> unsigned in "
msgstr ""

#. type: Plain text
#: man/man9/mux_generic.9:43
msgid ""
"Together, these determine which B<in>I<N> value is copied to B<output>.  The "
"bit pins are interpreted as binary bits, and the result is simply added on "
"to the integer pin input. It is expected that either one or the other would "
"normally be used. Hower, the possibility exists to use a higher-order bit to "
"\"shift\" the values set by the integer pin.  The sel-bit pins are only "
"created when the size of the mux_gen component is an integer power of two.  "
"This component (unlike mux16) does not offer the option of decoding gray-"
"code, however the same effect can be achieved by arranging the order of the "
"input values to suit."
msgstr ""

#. type: TP
#: man/man9/mux_generic.9:44
#, no-wrap
msgid "B<mux-gen.>I<NN>B<.out-[bit/float/s32/u32]> variable-type out "
msgstr ""

#. type: Plain text
#: man/man9/mux_generic.9:51
msgid ""
"Follows the value of one of the B<in>I<N> values according to the selection "
"bits and/or the selection number.  Values will be converted/truncated "
"according to standard C rules. This means, for example that a float input "
"greater than 2147483647 will give an S32 output of -2147483648."
msgstr ""

#. type: TP
#: man/man9/mux_generic.9:52
#, no-wrap
msgid "B<mux-gen.>I<NN>B<.in-[bit/float/s32/u32]->I<MM> variable-type in"
msgstr ""

#. type: Plain text
#: man/man9/mux_generic.9:55
msgid "The possible output values that are selected by the selection pins."
msgstr ""

#. type: TP
#: man/man9/mux_generic.9:57
#, no-wrap
msgid "B<mux-gen.>I<N>B<.elapsed> float r "
msgstr ""

#. type: Plain text
#: man/man9/mux_generic.9:61
msgid "Current value of the internal debounce timer for debugging."
msgstr ""

#. type: TP
#: man/man9/mux_generic.9:61
#, no-wrap
msgid "B<mux-gen.>I<N>B<.selected> s32 r "
msgstr ""

#. type: Plain text
#: man/man9/mux_generic.9:65
msgid ""
"Current value of the internal selection variable after conversion for "
"debugging. Possibly useful for setting up gray-code switches."
msgstr ""

#. type: Plain text
#: man/man9/mux_generic.9:80
msgid ""
"This component is a more general version of the other multiplexing "
"components.  It allows the creation of arbitrary-size multiplexers (up to "
"1024 entries) and also supports differing data types on the input and output "
"pins.  The configuration string is a comma-separated list of code-letters "
"and numbers, such as \"bb4,fu12\" This would create a 4-element bit-to-bit "
"mux and a 12-element float-to-unsigned mux. The code letters are b = bit, f "
"= float, s = signed integer, u = unsigned integer. The first letter code is "
"the input type, the second is the output type. The codes are not case-"
"sensitive. The order of the letters is significant but the position in the "
"string is not. Do not insert any spaces in the config string.  Any non-zero "
"float value will be converted to a \"true\" output in bit form. Be wary that "
"float datatypes can be very, very, close to zero and not actually be equal "
"to zero."
msgstr ""

#. type: Plain text
#: man/man9/mux_generic.9:85
msgid ""
"Each mux has its own HAL function and must be added to a thread separately.  "
"If neither input nor output is of type float then the function is base-"
"thread (non floating-point) safe. Any mux_generic with a floating point "
"input or output can only be added to a floating-point thread."
msgstr ""

#. type: TH
#: man/man9/near.9:9
#, no-wrap
msgid "NEAR"
msgstr ""

#. type: Plain text
#: man/man9/near.9:13
msgid "near - Determine whether two values are roughly equal."
msgstr ""

#. type: Plain text
#: man/man9/near.9:16
msgid "B<loadrt near [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/near.9:17
#, no-wrap
msgid "B<near.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/near.9:21
#, no-wrap
msgid "B<near.>I<N>B<.in1> float in "
msgstr ""

#. type: TP
#: man/man9/near.9:25
#, no-wrap
msgid "B<near.>I<N>B<.in2> float in "
msgstr ""

#. type: TP
#: man/man9/near.9:29
#, no-wrap
msgid "B<near.>I<N>B<.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/near.9:36
msgid ""
"B<out> is true if B<in1> and B<in2> are within a factor of B<scale> (i.e., "
"for in1 positive, in1/scale E<lt>= in2 E<lt>= in1*scale), OR if their "
"absolute difference is no greater than B<difference> (i.e., |in1-in2| E<lt>= "
"difference).  B<out> is false otherwise."
msgstr ""

#. type: TP
#: man/man9/near.9:37
#, no-wrap
msgid "B<near.>I<N>B<.scale> float rw (default: I<1>)"
msgstr ""

#. type: TP
#: man/man9/near.9:41
#, no-wrap
msgid "B<near.>I<N>B<.difference> float rw (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/near.9:46
msgid "Chris Radek"
msgstr ""

#. type: TH
#: man/man9/not.9:9
#, no-wrap
msgid "NOT"
msgstr ""

#. type: Plain text
#: man/man9/not.9:13
msgid "not - Inverter"
msgstr ""

#. type: Plain text
#: man/man9/not.9:16
msgid "B<loadrt not [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/not.9:17
#, no-wrap
msgid "B<not.>I<N>"
msgstr ""

#. type: TP
#: man/man9/not.9:21
#, no-wrap
msgid "B<not.>I<N>B<.in> bit in "
msgstr ""

#. type: TP
#: man/man9/not.9:25
#, no-wrap
msgid "B<not.>I<N>B<.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/not.9:35
msgid "B<and2>(9), B<logic>(9), B<lut5>(9), B<or2>(9), B<xor2>(9)."
msgstr ""

#. type: TH
#: man/man9/offset.9:9
#, no-wrap
msgid "OFFSET"
msgstr ""

#. type: Plain text
#: man/man9/offset.9:13
msgid ""
"offset - Adds an offset to an input, and subtracts it from the feedback value"
msgstr ""

#. type: Plain text
#: man/man9/offset.9:16
msgid "B<loadrt offset [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/offset.9:17
#, no-wrap
msgid "B<offset.>I<N>B<.update-output> (requires a floating-point thread)"
msgstr ""

#. type: Plain text
#: man/man9/offset.9:20
msgid "Updated the output value by adding the offset to the input"
msgstr ""

#. type: TP
#: man/man9/offset.9:20
#, no-wrap
msgid "B<offset.>I<N>B<.update-feedback> (requires a floating-point thread)"
msgstr ""

#. type: Plain text
#: man/man9/offset.9:23
msgid "Update the feedback value by subtracting the offset from the feedback"
msgstr ""

#. type: TP
#: man/man9/offset.9:24
#, no-wrap
msgid "B<offset.>I<N>B<.offset> float in "
msgstr ""

#. type: Plain text
#: man/man9/offset.9:27
msgid "The offset value"
msgstr ""

#. type: TP
#: man/man9/offset.9:27
#, no-wrap
msgid "B<offset.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/offset.9:30
#, no-wrap
msgid "B<offset.>I<N>B<.out> float out "
msgstr ""

#. type: TP
#: man/man9/offset.9:33
#, no-wrap
msgid "B<offset.>I<N>B<.fb-in> float in "
msgstr ""

#. type: Plain text
#: man/man9/offset.9:36
msgid "The feedback input value"
msgstr ""

#. type: TP
#: man/man9/offset.9:36
#, no-wrap
msgid "B<offset.>I<N>B<.fb-out> float out "
msgstr ""

#. type: Plain text
#: man/man9/offset.9:39
msgid "The feedback output value"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:13
msgid "ohmic - LinuxCNC HAL component that uses a Mesa THCAD for Ohmic sensing"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:16
msgid "B<loadrt ohmic [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:22
msgid ""
"Mesa THCAD Card component to scale input and outputs from the Mesa THCAD5, "
"THCAD10 and THCAD300 cards.  Which is designed to allow user configurable "
"voltage threshold for ohmic sensing.  Scaling of the Plasma arc voltage by a "
"voltage divider is supported."
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:24
msgid "Output pins are provided for:"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:26
msgid "ohmic-volts (the voltage sensed on ohmic sensing)"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:28
msgid "ohmic-on (true if ohmic-volts E<gt>= ohmic-threshold)"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:30
msgid ""
"arc-on (true if arc voltage is received eg. full scale reached or exceeded)"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:32
msgid ""
"Actual voltage as read from the THCAD card (0-300V, 0-10V or 0-5V depending "
"on the THCAD version used."
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:36
msgid ""
"Normally, we would use a THCAD-5 for ohmic sensing in conjunction with a 24 "
"volt isolated power supply and a 390K resistor. (voltage divider = 4.9)  "
"This would result in a full scale reading of 24.5 volts which is above the "
"power supply output voltage."
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:39
msgid ""
"So if full scale is reached, it can be assumed that the THCAD-5 is sensing "
"an arc voltage.  In this case, the circuit will remain protected by the "
"THCAD's ability to tolerate a 500V overvoltage indefinitely."
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:41
msgid ""
"It is optional that power to the Ohmic sensing circuit be disconnected "
"unless probing is in progress ut this adds additional complexity."
msgstr ""

#. type: TP
#: man/man9/ohmic.9:44
#, no-wrap
msgid "B<ohmic.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:48
#, no-wrap
msgid "B<ohmic.>I<N>B<.thcad-0-volt-freq> float in "
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:51
msgid "0 volt calibration data for THCAD card in Hz"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:51
#, no-wrap
msgid "B<ohmic.>I<N>B<.thcad-max-volt-freq> float in "
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:54
msgid "Full scale calibration data for THCAD Card in Hz"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:54
#, no-wrap
msgid "B<ohmic.>I<N>B<.thcad-divide> float in (default: I<32>)"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:57
msgid "THCAD Divider set by links on THCAD board (1,32,64 or 128"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:57
#, no-wrap
msgid "B<ohmic.>I<N>B<.thcad-fullscale> float in (default: I<5>)"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:60
msgid "THCAD Fullscale (5, 10 or 300)"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:60
#, no-wrap
msgid "B<ohmic.>I<N>B<.velocity-in> float in "
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:63
msgid "The velocity returned from the THCAD and read by the Mesa encoder input"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:63
#, no-wrap
msgid "B<ohmic.>I<N>B<.volt-divider> float in (default: I<4.9>)"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:66
msgid "The divide ratio (default 1:1)"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:66
#, no-wrap
msgid "B<ohmic.>I<N>B<.ohmic-threshold> float in (default: I<18>)"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:69
msgid "The threshold volts above which Ohmic sensing is set to be true"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:69
#, no-wrap
msgid "B<ohmic.>I<N>B<.ohmic-low> float in (default: I<5>)"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:72
msgid "The threshold volts below which Ohmic sensing is set to be false"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:72
#, no-wrap
msgid "B<ohmic.>I<N>B<.arc-on> bit out "
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:75
msgid "True if full scale (eg arc is on)"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:75
#, no-wrap
msgid "B<ohmic.>I<N>B<.thcad-volts> float out "
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:78
msgid "Measured thcad voltage"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:78
#, no-wrap
msgid "B<ohmic.>I<N>B<.ohmic-volts> float out "
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:81
msgid "Calculated Ohmic voltage"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:81
#, no-wrap
msgid "B<ohmic.>I<N>B<.ohmic-on> bit out "
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:84
msgid "Threshold plasma torch voltage"
msgstr ""

#. type: TP
#: man/man9/ohmic.9:84
#, no-wrap
msgid "B<ohmic.>I<N>B<.is-probing> bit in "
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:87
msgid "True if probing"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:93
msgid ""
"THCAD5 card using a 1/32 frequency setting and a voltage divider internal to "
"the plasma cutter with range extended to 24.5 volts with a 390K external "
"resistor as per the manual. Additional information and wiring diagram is "
"contained in the Plasma Primer in the main Linuxcnc documents."
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:98
msgid "loadrt ohmic names=ohmicsense"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:100
msgid "addf ohmicsense servo-thread"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:103
msgid "setp ohmicsense.thcad-0-volt-freq 122900"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:105
msgid "setp ohmicsense.thcad-max-volt-freq 925700"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:107
msgid "setp ohmicsense.thcad-divide 32"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:109
msgid "setp ohmicsense.thcad-fullscale 5"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:111
msgid "setp ohmicsense.volt-divider 32"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:113
msgid "setp ohmicsense.threshold 22"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:115
msgid "setp ohmicsense.ohmic-low 1"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:117
msgid ""
"net ohmic-vel ohmicsense.velocity-in E<lt>= hm2_7i76e.0.encoder.00.velocity"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:119
msgid "net ohmic-true ohmicsense.ohmic-on =E<gt> plasmac.ohmic-probe"
msgstr ""

#. type: Plain text
#: man/man9/ohmic.9:123
msgid "Rod Webster"
msgstr ""

#. type: TH
#: man/man9/oneshot.9:9
#, no-wrap
msgid "ONESHOT"
msgstr ""

#. type: Plain text
#: man/man9/oneshot.9:13
msgid "oneshot - one-shot pulse generator"
msgstr ""

#. type: Plain text
#: man/man9/oneshot.9:16
msgid "B<loadrt oneshot [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/oneshot.9:24
msgid ""
"creates a variable-length output pulse when the input changes state. This "
"function needs to run in a thread which supports floating point (typically "
"the servo thread). This means that the pulse length has to be a multiple of "
"that thread period, typically 1mS.  For a similar function that can run in "
"the base thread, and which offers higher resolution, see \"edge\"."
msgstr ""

#. type: TP
#: man/man9/oneshot.9:25
#, no-wrap
msgid "B<oneshot.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/oneshot.9:29
#, no-wrap
msgid "B<oneshot.>I<N>B<.in> bit in "
msgstr ""

#. type: Plain text
#: man/man9/oneshot.9:32
msgid "Trigger input"
msgstr ""

#. type: TP
#: man/man9/oneshot.9:32
#, no-wrap
msgid "B<oneshot.>I<N>B<.reset> bit in "
msgstr ""

#. type: Plain text
#: man/man9/oneshot.9:35
msgid "Reset"
msgstr ""

#. type: TP
#: man/man9/oneshot.9:35
#, no-wrap
msgid "B<oneshot.>I<N>B<.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/oneshot.9:38
msgid "Active high pulse"
msgstr ""

#. type: TP
#: man/man9/oneshot.9:38
#, no-wrap
msgid "B<oneshot.>I<N>B<.out-not> bit out "
msgstr ""

#. type: Plain text
#: man/man9/oneshot.9:41
msgid "Active low pulse"
msgstr ""

#. type: TP
#: man/man9/oneshot.9:41
#, no-wrap
msgid "B<oneshot.>I<N>B<.width> float in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/oneshot.9:44
msgid "Pulse width in seconds"
msgstr ""

#. type: TP
#: man/man9/oneshot.9:44
#, no-wrap
msgid "B<oneshot.>I<N>B<.time-left> float out "
msgstr ""

#. type: Plain text
#: man/man9/oneshot.9:47
msgid "Time left in current output pulse"
msgstr ""

#. type: TP
#: man/man9/oneshot.9:48
#, no-wrap
msgid "B<oneshot.>I<N>B<.retriggerable> bit rw (default: I<TRUE>)"
msgstr ""

#. type: Plain text
#: man/man9/oneshot.9:51
msgid "Allow additional edges to extend pulse"
msgstr ""

#. type: TP
#: man/man9/oneshot.9:51
#, no-wrap
msgid "B<oneshot.>I<N>B<.rising> bit rw (default: I<TRUE>)"
msgstr ""

#. type: Plain text
#: man/man9/oneshot.9:54
msgid "Trigger on rising edge"
msgstr ""

#. type: TP
#: man/man9/oneshot.9:54
#, no-wrap
msgid "B<oneshot.>I<N>B<.falling> bit rw (default: I<FALSE>)"
msgstr ""

#. type: Plain text
#: man/man9/oneshot.9:57
msgid "Trigger on falling edge"
msgstr ""

#. type: TH
#: man/man9/opto_ac5.9:2
#, no-wrap
msgid "OPTO_AC5"
msgstr ""

#. type: TH
#: man/man9/opto_ac5.9:2
#, no-wrap
msgid "2008-08-04"
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:6
msgid "opto_ac5 - Realtime driver for opto22 PCI-AC5 cards"
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:8
msgid "B<loadrt opto_ac5 [portconfig0=0x>I<N>B<] [portconfig1=0x>I<N>B<] >"
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:19
msgid ""
"These pins and parameters are created by the realtime B<opto_ac5> module.  "
"The portconfig0 and portconfig1 variables are used to configure the two "
"ports of each card.  The first 24 bits of a 32 bit number represent the 24 i/"
"o points of each port.  The lowest (rightmost) bit would be HAL pin 0 which "
"is header connector pin 47.  Then next bit to the left would be HAL pin 1, "
"header connector pin 45 and so on, until bit 24 would be HAL pin 23, header "
"connector pin 1.  \"1\" bits represent output points.  So channel 0..11 as "
"inputs and 12..23 as outputs would be represented by (in binary) "
"111111111111000000000000 which is 0xfff000 in hexadecimal.  That is the "
"number you would use, e.g., loadrt opto_ac5 portconfig0=0xfff000"
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:21
msgid ""
"If no portconfig variable is specified the default configuration is 12 "
"inputs then 12 outputs."
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:23
msgid "Up to 4 boards are supported.  Boards are numbered starting at 0."
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:25
msgid "Portnumber can be 0 or 1. Port 0 is closest to the card bracket."
msgstr ""

#. type: TP
#: man/man9/opto_ac5.9:28
#, no-wrap
msgid "B<opto_ac5.[>I<BOARDNUMBER>].B<port[>I<PORTNUMBER>].B<in-[>I<PINNUMBER>] OUT bit "
msgstr ""

#. type: TP
#: man/man9/opto_ac5.9:32
#, no-wrap
msgid "B<opto_ac5.[>I<BOARDNUMBER>].B<port[>I<PORTNUMBER>].B<in-[>I<PINNUMBER>]-not OUT bit "
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:38
msgid ""
"Connect a HAL bit signal to this pin to read an i/o point from the card.  "
"The PINNUMBER represents the position in the relay rack.  E.g., PINNUMBER 0 "
"is position 0 in a opto22 relay rack and would be pin 47 on the 50 pin "
"header connector.  The B<-not> pin is inverted so that LOW gives TRUE and "
"HIGH gives FALSE."
msgstr ""

#. type: TP
#: man/man9/opto_ac5.9:39
#, no-wrap
msgid "B<opto_ac5.[>I<BOARDNUMBER>].B<port[>I<PORTNUMBER>].B<out-[>I<PINNUMBER>] IN bit  "
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:44
msgid ""
"Connect a HAL bit signal to this pin to write to an i/o point of the card.  "
"The PINNUMBER represents the position in the relay rack.  E.g., PINNUMBER 23 "
"is position 23 in a opto22 relay rack and would be pin 1 on the 50 pin "
"header connector."
msgstr ""

#. type: TP
#: man/man9/opto_ac5.9:45
#, no-wrap
msgid "B<opto_ac5.[>I<BOARDNUMBER>].B<led[>I<NUMBER>] OUT bit "
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:48
msgid "Turns one of the on board LEDS on/off. LEDS are numbered 0 to 3."
msgstr ""

#. type: TP
#: man/man9/opto_ac5.9:50
#, no-wrap
msgid "B<opto_ac5.[>I<BOARDNUMBER>].B<port[>I<PORTNUMBER>].B<out-[>I<PINNUMBER>]-invert W bit  "
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:54
msgid ""
"When TRUE, invert the meaning of the corresponding B<-out> pin so that TRUE "
"gives LOW and FALSE gives HIGH."
msgstr ""

#. type: TP
#: man/man9/opto_ac5.9:57
#, no-wrap
msgid "B<opto_ac5.0.digital-read>"
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:60
msgid "Add this to a thread to read all the input points."
msgstr ""

#. type: TP
#: man/man9/opto_ac5.9:61
#, no-wrap
msgid "B<opto_ac5.0.digital-write>"
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:64
msgid "Add this to a thread to write all the output points and LEDS."
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:67
msgid ""
"All boards are loaded with the same port configurations as the first board."
msgstr ""

#. type: Plain text
#: man/man9/opto_ac5.9:70
msgid "http://wiki.linuxcnc.org/cgi-bin/wiki.pl?OptoPciAc5"
msgstr ""

#. type: TH
#: man/man9/or2.9:9
#, no-wrap
msgid "OR2"
msgstr ""

#. type: Plain text
#: man/man9/or2.9:13
msgid "or2 - Two-input OR gate"
msgstr ""

#. type: Plain text
#: man/man9/or2.9:16
msgid "B<loadrt or2 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/or2.9:17
#, no-wrap
msgid "B<or2.>I<N>"
msgstr ""

#. type: TP
#: man/man9/or2.9:21
#, no-wrap
msgid "B<or2.>I<N>B<.in0> bit in "
msgstr ""

#. type: TP
#: man/man9/or2.9:25
#, no-wrap
msgid "B<or2.>I<N>B<.in1> bit in "
msgstr ""

#. type: TP
#: man/man9/or2.9:29
#, no-wrap
msgid "B<or2.>I<N>B<.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/or2.9:34 man/man9/xor2.9:33
msgid ""
"B<out> is computed from the value of B<in0> and B<in1> according to the "
"following rule:"
msgstr ""

#. type: TP
#: man/man9/or2.9:35
#, no-wrap
msgid "B<in0=FALSE in1=FALSE>"
msgstr ""

#. type: Plain text
#: man/man9/or2.9:46
msgid "B<logic>(9)"
msgstr ""

#. type: TH
#: man/man9/orient.9:9
#, no-wrap
msgid "ORIENT"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:13
msgid ""
"orient - Provide a PID command input for orientation mode based on current "
"spindle position, target angle and orient mode"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:16
msgid "B<loadrt orient [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:21
msgid ""
"This component is designed to support a spindle orientation PID loop by "
"providing a command value, and fit with the motion spindle-orient support "
"pins to support the M19 code."
msgstr ""

#. type: Plain text
#: man/man9/orient.9:29
msgid ""
"The spindle is assumed to have stopped in an arbitrary position. The spindle "
"encoder position is linked to the B<position> pin.  The current value of the "
"position pin is sampled on a positive edge on the B<enable> pin, and "
"B<command> is computed and set as follows: floor(number of full spindle "
"revolutions in the B<position> sampled on positive edge)  plus B<angle>/360 "
"(the fractional revolution) +1/-1/0 depending on B<mode>."
msgstr ""

#. type: Plain text
#: man/man9/orient.9:31
msgid "The B<mode> pin is interpreted as follows:"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:34
msgid ""
"0: the spindle rotates in the direction with the lesser angle, which may be "
"clockwise or counterclockwise."
msgstr ""

#. type: Plain text
#: man/man9/orient.9:36
msgid "1: the spindle rotates always rotates clockwise to the new angle."
msgstr ""

#. type: Plain text
#: man/man9/orient.9:38
msgid ""
"2: the spindle rotates always rotates counterclockwise to the new angle."
msgstr ""

#. type: SH
#: man/man9/orient.9:40
#, no-wrap
msgid "HAL USAGE"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:44
msgid ""
"On B<spindle.N.orient> disconnect the spindle control and connect to the "
"orient-pid loop:"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:46
msgid "loadrt orient names=orient"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:48
msgid "loadrt pid names=orient-pid"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:50
msgid "net orient-angle spindle.N.orient-angle orient.angle"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:52
msgid "net orient-mode spindle.N.orient-mode orient.mode"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:54
msgid "net orient-enable spindle.N.orient orient.enable orient-pid.enable"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:56
msgid "net spindle-in-pos orient.is-oriented spindle.N.is-oriented"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:58
msgid "net spindle-pos encoder.position orient.position orient-pid.feedback"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:60
msgid "net orient-command orient.command orient-pid.command"
msgstr ""

#. type: TP
#: man/man9/orient.9:63
#, no-wrap
msgid "B<orient.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:66
msgid ""
"Update B<command> based on B<enable>, B<position>, B<mode> and B<angle>."
msgstr ""

#. type: TP
#: man/man9/orient.9:67
#, no-wrap
msgid "B<orient.>I<N>B<.enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/orient.9:70
msgid "enable angular output for orientation mode"
msgstr ""

#. type: TP
#: man/man9/orient.9:70
#, no-wrap
msgid "B<orient.>I<N>B<.mode> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/orient.9:73
msgid ""
"0: rotate - shortest move; 1: always rotate clockwise; 2: always rotate "
"counterclockwise"
msgstr ""

#. type: TP
#: man/man9/orient.9:73
#, no-wrap
msgid "B<orient.>I<N>B<.position> float in "
msgstr ""

#. type: Plain text
#: man/man9/orient.9:76
msgid "spindle position input, unit 1 rev"
msgstr ""

#. type: TP
#: man/man9/orient.9:76
#, no-wrap
msgid "B<orient.>I<N>B<.angle> float in "
msgstr ""

#. type: Plain text
#: man/man9/orient.9:79
msgid "orient target position in degrees, 0 E<lt>= angle E<lt> 360"
msgstr ""

#. type: TP
#: man/man9/orient.9:79
#, no-wrap
msgid "B<orient.>I<N>B<.command> float out "
msgstr ""

#. type: Plain text
#: man/man9/orient.9:82
msgid "target spindle position, input to PID command"
msgstr ""

#. type: TP
#: man/man9/orient.9:82
#, no-wrap
msgid "B<orient.>I<N>B<.poserr> float out "
msgstr ""

#. type: Plain text
#: man/man9/orient.9:85
msgid "in degrees - aid for PID tuning"
msgstr ""

#. type: TP
#: man/man9/orient.9:85
#, no-wrap
msgid "B<orient.>I<N>B<.is-oriented> bit out "
msgstr ""

#. type: Plain text
#: man/man9/orient.9:88
msgid ""
"This pin goes high when poserr E<lt> tolerance. Use to drive spindle.N.is-"
"oriented"
msgstr ""

#. type: TP
#: man/man9/orient.9:88
#, no-wrap
msgid "B<orient.>I<N>B<.tolerance> float in (default: I<0.5>)"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:91
msgid "The tolerance in degrees for considering the align completed"
msgstr ""

#. type: Plain text
#: man/man9/orient.9:94 man/man9/sim_spindle.9:41
msgid "Michael Haberler"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:5
msgid ""
"pid - proportional/integral/derivative controller with automatic tuning "
"support"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:7
msgid ""
"B<loadrt pid [num_chan=>I<num>B< | names=>I<name1>B<[,>I<name2...>B<]] "
"[debug=>I<dbg>]"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:12
msgid ""
"B<pid> is a classic Proportional/Integral/Derivative controller, used to "
"control position or speed feedback loops for servo motors and other closed-"
"loop applications."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:17
msgid ""
"B<pid> supports a maximum of sixteen controllers.  The number that are "
"actually loaded is set by the B<num_chan> argument when the module is "
"loaded.  Alternatively, specify names= and unique names separated by commas."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:23
msgid ""
"The B<num_chan=> and B<names=> specifiers are mutually exclusive.  If "
"neither B<num_chan=> nor B<names=> are specified, the default value is "
"three.  If B<debug> is set to 1 (the default is 0), some additional HAL "
"parameters will be exported, which might be useful for tuning, but are "
"otherwise unnecessary."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:28
msgid ""
"In the following description, it is assumed that we are discussing position "
"loops.  However this component can be used to implement other loops such as "
"speed loops, torch height control, and others."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:33
msgid ""
"Each loop has a number of pins and parameters, whose names begin with 'pid."
"N.', where 'N' is the channel number.  Channel numbers start at zero."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:41
msgid ""
"The three most important pins are 'command', 'feedback', and 'output'.  For "
"a position loop, 'command' and 'feedback' are in position units.  For a "
"linear axis, this could be inches, mm, metres, or whatever is relevant.  "
"Likewise, for a angular axis, it could be degrees, radians, etc.  The units "
"of the 'output' pin represent the change needed to make the feedback match "
"the command.  As such, for a position loop 'Output' is a velocity, in inches/"
"sec, mm/sec, degrees/sec, etc."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:46
msgid ""
"Each loop has several other pins as well.  'error' is equal to 'command' "
"minus 'feedback'.  'enable' is a bit that enables the loop.  If 'enable' is "
"false, all integrators are reset, and the output is forced to zero.  If "
"'enable' is true, the loop operates normally."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:49
msgid ""
"The PID gains, limits, and other 'tunable' features of the loop are "
"implemented as parameters.  These are as follows:"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:52
msgid "B<Pgain> Proportional gain"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:56
msgid "B<Igain> Integral gain"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:60
msgid "B<Dgain> Derivative gain"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:64
msgid "B<bias> Constant offset on output"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:68
msgid "B<FF0> Zeroth order Feedforward gain"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:72
msgid "B<FF1> First order Feedforward gain"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:76
msgid "B<FF2> Second order Feedforward gain"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:80
msgid "B<FF3> Third order Feedforward gain"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:84
msgid "B<deadband> Amount of error that will be ignored"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:88
msgid "B<maxerror> Limit on error"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:92
msgid "B<maxerrorI> Limit on error integrator"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:96
msgid "B<maxerrorD> Limit on error differentiator"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:100
msgid "B<maxcmdD> Limit on command differentiator"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:104
msgid "B<maxcmdDD> Limit on command 2nd derivative"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:108
msgid "B<maxcmdDDD> Limit on command 3rd derivative"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:112
msgid "B<maxoutput> Limit on output value"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:115
msgid ""
"All of the limits (max____) are implemented such that if the parameter value "
"is zero, there is no limit."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:120
msgid ""
"A number of internal values which may be useful for testing and tuning are "
"also available as parameters.  To avoid cluttering the parameter list, these "
"are only exported if \"debug=1\" is specified on the insmod command line."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:123
msgid "B<errorI> Integral of error"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:127
msgid "B<errorD> Derivative of error"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:131
msgid "B<commandD> Derivative of the command"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:135
msgid "B<commandDD> 2nd derivative of the command"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:139
msgid "B<commandDDD> 3rd derivative of the command"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:143
msgid ""
"The PID loop calculations are as follows (see the code in pid.c for all the "
"nitty gritty details):"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:162
#, no-wrap
msgid ""
"error = command - feedback\n"
"if ( abs(error) E<lt> deadband ) then error = 0\n"
"limit error to +/- maxerror\n"
"errorI += error * period\n"
"limit errorI to +/- maxerrorI\n"
"errorD = (error - previouserror) / period\n"
"limit errorD to +/- maxerrorD\n"
"commandD = (command - previouscommand) / period\n"
"limit commandD to +/- maxcmdD\n"
"commandDD = (commandD - previouscommandD) / period\n"
"limit commandDD to +/- maxcmdDD\n"
"commandDDD = (commandDD - previouscommandDD) / period\n"
"limit commandDDD to +/- maxcmdDDD\n"
"output = bias + error * Pgain + errorI * Igain +\n"
"         errorD * Dgain + command * FF0 + commandD * FF1 +\n"
"         commandDD * FF2 + commandDDD * FF3\n"
"limit output to +/- maxoutput\n"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:176
msgid ""
"This component has a built in auto tune mode. It works by setting up a limit "
"cycle to characterize the process.  This is called the Relay method and "
"described in the 1984 Automation paper B<Automatic Tuning of Simple "
"Regulators with Specifications on Phase and Amplitude Margins> by Karl Johan "
"Åström and Tore Hägglund (doi:10.1016/0005-1098(84)90014-1), https://lup.lub."
"lu.se/search/ws/files/6340936/8509157.pdf. Using this method, B<Pgain/Igain/"
"Dgain> or B<Pgain/Igain/FF1> can be determined using the Ziegler-Nichols "
"algorithm.  When using B<FF1> tuning, scaling must be set so that B<output> "
"is in user units per second."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:188
msgid ""
"During auto tuning, the B<command> input should not change. The limit cycle "
"is setup around the commanded position. No initial tuning values are "
"required to start auto tuning.  Only B<tune-cycles>, B<tune-effort> and "
"B<tune-mode> need be set before starting auto tuning.  Note that setting "
"B<tune-mode> to true disable the control loop.  When auto tuning completes, "
"the tuning parameters will be set, the output set to bias and the controller "
"still be disabled. If running from LinuxCNC, the FERROR setting for the axis "
"being tuned may need to be loosened up as it must be larger than the limit "
"cycle amplitude in order to avoid a following error."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:198
msgid ""
"To perform auto tuning, take the following steps.  Move the axis to be tuned "
"somewhere near the center of it's travel.  Set B<tune-cycles> (the default "
"value should be fine in most cases)  and B<tune-mode>. Set B<tune-effort> to "
"a small value. Set B<enable> to true. Set B<tune-mode> to true. Set B<tune-"
"start> to true. If no oscillation occurs, or the oscillation is too small, "
"slowly increase B<tune-effort>.  Auto tuning can be aborted at any time by "
"setting B<enable> or B<tune-mode> to false."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:203
#, no-wrap
msgid ""
"The names for pins, parameters, and functions are prefixed as:\n"
"  B<pid.N.> for N=0,1,...,num-1 when using B<num_chan=num>\n"
"  B<nameN.> for nameN=name1,name2,... when using B<names=name1,name2,...>\n"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:205
msgid "The B<pid.N.> format is shown in the following descriptions."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:210
msgid ""
"B<pid.>I<N>B<.do-pid-calcs> (uses floating-point)  Does the PID calculations "
"for control loop I<N>."
msgstr ""

#. type: TP
#: man/man9/pid.9:213
#, no-wrap
msgid "B<pid.>I<N>B<.command> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:216
msgid "The desired (commanded) value for the control loop."
msgstr ""

#. type: TP
#: man/man9/pid.9:216
#, no-wrap
msgid "B<pid.>I<N>B<.Pgain> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:220
msgid ""
"Proportional gain.  Results in a contribution to the output that is the "
"error multiplied by B<Pgain>."
msgstr ""

#. type: TP
#: man/man9/pid.9:220
#, no-wrap
msgid "B<pid.>I<N>B<.Igain> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:226
msgid ""
"Integral gain.  Results in a contribution to the output that is the integral "
"of the error multiplied by B<Igain>.  For example an error of 0.02 that "
"lasted 10 seconds would result in an integrated error (B<errorI>) of 0.2, "
"and if B<Igain> is 20, the integral term would add 4.0 to the output."
msgstr ""

#. type: TP
#: man/man9/pid.9:226
#, no-wrap
msgid "B<pid.>I<N>B<.Dgain> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:233
msgid ""
"Derivative gain.  Results in a contribution to the output that is the rate "
"of change (derivative) of the error multiplied by B<Dgain>.  For example an "
"error that changed from 0.02 to 0.03 over 0.2 seconds would result in an "
"error derivative (B<errorD>) of of 0.05, and if B<Dgain> is 5, the "
"derivative term would add 0.25 to the output."
msgstr ""

#. type: TP
#: man/man9/pid.9:233
#, no-wrap
msgid "B<pid.>I<N>B<.feedback> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:236
msgid "The actual (feedback) value, from some sensor such as an encoder."
msgstr ""

#. type: TP
#: man/man9/pid.9:236
#, no-wrap
msgid "B<pid.>I<N>B<.output> float out"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:239
msgid ""
"The output of the PID loop, which goes to some actuator such as a motor."
msgstr ""

#. type: TP
#: man/man9/pid.9:239
#, no-wrap
msgid "B<pid.>I<N>B<.command-deriv> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:243
msgid ""
"The derivative of the desired (commanded) value for the control loop.  If no "
"signal is connected then the derivative will be estimated numerically."
msgstr ""

#. type: TP
#: man/man9/pid.9:243
#, no-wrap
msgid "B<pid.>I<N>B<.feedback-deriv> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:250
msgid ""
"The derivative of the actual (feedback) value for the control loop.  If no "
"signal is connected then the derivative will be estimated numerically.  When "
"the feedback is from a quantized position source (e.g., encoder feedback "
"position), behavior of the D term can be improved by using a better velocity "
"estimate here, such as the velocity output of encoder(9) or hostmot2(9)."
msgstr ""

#. type: TP
#: man/man9/pid.9:250
#, no-wrap
msgid "B<pid.>I<N>B<.error-previous-target> bit in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:256
msgid ""
"Use previous invocation's target vs. current position for error calculation, "
"like the motion controller expects.  This may make torque-mode position "
"loops and loops requiring a large I gain easier to tune, by eliminating "
"velocity-dependent following error."
msgstr ""

#. type: TP
#: man/man9/pid.9:256
#, no-wrap
msgid "B<pid.>I<N>B<.error> float out"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:259
msgid "The difference between command and feedback."
msgstr ""

#. type: TP
#: man/man9/pid.9:259
#, no-wrap
msgid "B<pid.>I<N>B<.enable> bit in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:263
msgid ""
"When true, enables the PID calculations.  When false, B<output> is zero, and "
"all internal integrators, etc, are reset."
msgstr ""

#. type: TP
#: man/man9/pid.9:263
#, no-wrap
msgid "B<pid.>I<N>B<.index-enable> bit in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:271
msgid ""
"On the falling edge of B<index-enable>, pid does not update the internal "
"command derivative estimate.  On systems which use the encoder index pulse, "
"this pin should be connected to the index-enable signal.  When this is not "
"done, and FF1 is nonzero, a step change in the input command causes a single-"
"cycle spike in the PID output.  On systems which use exactly one of the B<-"
"deriv> inputs, this affects the D term as well."
msgstr ""

#. type: TP
#: man/man9/pid.9:271
#, no-wrap
msgid "B<pid.>I<N>B<.bias> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:280
msgid ""
"B<bias> is a constant amount that is added to the output.  In most cases it "
"should be left at zero.  However, it can sometimes be useful to compensate "
"for offsets in servo amplifiers, or to balance the weight of an object that "
"moves vertically. B<bias> is turned off when the PID loop is disabled, just "
"like all other components of the output.  If a non-zero output is needed "
"even when the PID loop is disabled, it should be added with an external HAL "
"sum2 block."
msgstr ""

#. type: TP
#: man/man9/pid.9:280
#, no-wrap
msgid "B<pid.>I<N>B<.FF0> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:286
msgid ""
"Zero order feed-forward term.  Produces a contribution to the output that is "
"B<FF0> multiplied by the commanded value.  For position loops, it should "
"usually be left at zero.  For velocity loops, B<FF0> can compensate for "
"friction or motor counter-EMF and may permit better tuning if used properly."
msgstr ""

#. type: TP
#: man/man9/pid.9:286
#, no-wrap
msgid "B<pid.>I<N>B<.FF1> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:294
msgid ""
"First order feed-forward term.  Produces a contribution to the output that "
"is B<FF1> multiplied by the derivative of the commanded value.  For position "
"loops, the contribution is proportional to speed, and can be used to "
"compensate for friction or motor CEMF.  For velocity loops, it is "
"proportional to acceleration and can compensate for inertia.  In both cases, "
"it can result in better tuning if used properly."
msgstr ""

#. type: TP
#: man/man9/pid.9:294
#, no-wrap
msgid "B<pid.>I<N>B<.FF2> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:301
msgid ""
"Second order feed-forward term.  Produces a contribution to the output that "
"is B<FF2> multiplied by the second derivative of the commanded value.  For "
"position loops, the contribution is proportional to acceleration, and can be "
"used to compensate for inertia.  For velocity loops, the contribution is "
"proportional to jerk, and should usually be left at zero."
msgstr ""

#. type: TP
#: man/man9/pid.9:301
#, no-wrap
msgid "B<pid.>I<N>B<.FF3> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:309
msgid ""
"Third order feed-forward term.  Produces a contribution to the output that "
"is B<FF3> multiplied by the third derivative of the commanded value.  For "
"position loops, the contribution is proportional to jerk, and can be used to "
"compensate for residual errors during acceleration.  For velocity loops, the "
"contribution is proportional to snap(jounce), and should usually be left at "
"zero."
msgstr ""

#. type: TP
#: man/man9/pid.9:309
#, no-wrap
msgid "B<pid.>I<N>B<.deadband> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:320
msgid ""
"Defines a range of \"acceptable\" error.  If the absolute value of B<error> "
"is less than B<deadband>, it will be treated as if the error is zero.  When "
"using feedback devices such as encoders that are inherently quantized, the "
"deadband should be set slightly more than one-half count, to prevent the "
"control loop from hunting back and forth if the command is between two "
"adjacent encoder values.  When the absolute value of the error is greater "
"than the deadband, the deadband value is subtracted from the error before "
"performing the loop calculations, to prevent a step in the transfer function "
"at the edge of the deadband.  (See B<BUGS>.)"
msgstr ""

#. type: TP
#: man/man9/pid.9:320
#, no-wrap
msgid "B<pid.>I<N>B<.maxoutput> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:326
msgid ""
"Output limit.  The absolute value of the output will not be permitted to "
"exceed B<maxoutput>, unless B<maxoutput> is zero.  When the output is "
"limited, the error integrator will hold instead of integrating, to prevent "
"windup and overshoot."
msgstr ""

#. type: TP
#: man/man9/pid.9:326
#, no-wrap
msgid "B<pid.>I<N>B<.maxerror> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:332
msgid ""
"Limit on the internal error variable used for P, I, and D.  Can be used to "
"prevent high B<Pgain> values from generating large outputs under conditions "
"when the error is large (for example, when the command makes a step "
"change).  Not normally needed, but can be useful when tuning non-linear "
"systems."
msgstr ""

#. type: TP
#: man/man9/pid.9:332
#, no-wrap
msgid "B<pid.>I<N>B<.maxerrorD> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:339
msgid ""
"Limit on the error derivative.  The rate of change of error used by the "
"B<Dgain> term will be limited to this value, unless the value is zero.  Can "
"be used to limit the effect of B<Dgain> and prevent large output spikes due "
"to steps on the command and/or feedback.  Not normally needed."
msgstr ""

#. type: TP
#: man/man9/pid.9:339
#, no-wrap
msgid "B<pid.>I<N>B<.maxerrorI> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:345
msgid ""
"Limit on error integrator.  The error integrator used by the B<Igain> term "
"will be limited to this value, unless it is zero.  Can be used to prevent "
"integrator windup and the resulting overshoot during/after sustained "
"errors.  Not normally needed."
msgstr ""

#. type: TP
#: man/man9/pid.9:345
#, no-wrap
msgid "B<pid.>I<N>B<.maxcmdD> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:351
msgid ""
"Limit on command derivative.  The command derivative used by B<FF1> will be "
"limited to this value, unless the value is zero.  Can be used to prevent "
"B<FF1> from producing large output spikes if there is a step change on the "
"command.  Not normally needed."
msgstr ""

#. type: TP
#: man/man9/pid.9:351
#, no-wrap
msgid "B<pid.>I<N>B<.maxcmdDD> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:357
msgid ""
"Limit on command second derivative.  The command second derivative used by "
"B<FF2> will be limited to this value, unless the value is zero.  Can be used "
"to prevent B<FF2> from producing large output spikes if there is a step "
"change on the command.  Not normally needed."
msgstr ""

#. type: TP
#: man/man9/pid.9:357
#, no-wrap
msgid "B<pid.>I<N>B<.maxcmdDDD> float in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:363
msgid ""
"Limit on command third derivative.  The command third derivative used by "
"B<FF3> will be limited to this value, unless the value is zero.  Can be used "
"to prevent B<FF3> from producing large output spikes if there is a step "
"change on the command.  Not normally needed."
msgstr ""

#. type: TP
#: man/man9/pid.9:363
#, no-wrap
msgid "B<pid.>I<N>B<.saturated> bit out"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:366
msgid "When true, the current PID output is saturated.  That is,"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:368
msgid "B<output> = \\(+- B<maxoutput>."
msgstr ""

#. type: TP
#: man/man9/pid.9:369
#, no-wrap
msgid "B<pid.>I<N>B<.saturated-s> float out"
msgstr ""

#. type: TP
#: man/man9/pid.9:373
#, no-wrap
msgid "B<pid.>I<N>B<.saturated-count> s32 out"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:377
msgid ""
"When true, the output of PID was continually saturated for this many seconds "
"(B<saturated-s>) or periods (B<saturated-count>)."
msgstr ""

#. type: SS
#: man/man9/pid.9:378
#, no-wrap
msgid "Additional auto tuning pins"
msgstr ""

#. type: TP
#: man/man9/pid.9:379
#, no-wrap
msgid "B<pid.>I<N>B<.tune-mode> bit in"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:383
msgid ""
"When true, enables auto tune mode.  When false, normal PID calculations are "
"performed."
msgstr ""

#. type: TP
#: man/man9/pid.9:383
#, no-wrap
msgid "B<pid.>I<N>B<.tune-start> bit io"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:386
msgid ""
"When set to true, starts auto tuning.  Cleared when the auto tuning "
"completes."
msgstr ""

#. type: TP
#: man/man9/pid.9:386
#, no-wrap
msgid "B<pid.>I<N>B<.tune-type> u32 rw"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:390
msgid ""
"When set to 0, B<Pgain/Igain/Dgain> are calculated. When set to 1, B<Pgain/"
"Igain/FF1> are calculated."
msgstr ""

#. type: TP
#: man/man9/pid.9:390
#, no-wrap
msgid "B<pid.>I<N>B<.tune-cycles> u32 rw"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:395
msgid ""
"Determines the number of cycles to run to characterize the process.  B<tune-"
"cycles> actually sets the number of half cycles. More cycles results in a "
"more accurate characterization as the average of all cycles is used."
msgstr ""

#. type: TP
#: man/man9/pid.9:395
#, no-wrap
msgid "B<pid.>I<N>B<.tune-effort> float rw"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:402
msgid ""
"Determines the effort used in setting up the limit cycle in the process.  "
"B<tune-effort> should be set to a positive value less than B<maxoutput>.  "
"Start with something small and work up to a value that results in a good "
"portion of the maximum motor current being used. The smaller the value, the "
"smaller the amplitude of the limit cycle."
msgstr ""

#. type: TP
#: man/man9/pid.9:402
#, no-wrap
msgid "B<pid.>I<N>B<.ultimate-gain> float ro (only if debug=1)"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:406
msgid ""
"Determined from process characterization. B<ultimate-gain> is the ratio of "
"B<tune-effort> to the limit cycle amplitude multiplied by 4.0 divided by Pi."
msgstr ""

#. type: TP
#: man/man9/pid.9:406
#, no-wrap
msgid "B<pid.>I<N>B<.ultimate-period> float ro (only if debug=1)"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:410
msgid ""
"Determined from process characterization. B<ultimate-period> is the period "
"of the limit cycle."
msgstr ""

#. type: TP
#: man/man9/pid.9:412
#, no-wrap
msgid "B<pid.>I<N>B<.errorI> float ro (only if debug=1)"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:415
msgid ""
"Integral of error.  This is the value that is multiplied by B<Igain> to "
"produce the Integral term of the output."
msgstr ""

#. type: TP
#: man/man9/pid.9:415
#, no-wrap
msgid "B<pid.>I<N>B<.errorD> float ro (only if debug=1)"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:418
msgid ""
"Derivative of error.  This is the value that is multiplied by B<Dgain> to "
"produce the Derivative term of the output."
msgstr ""

#. type: TP
#: man/man9/pid.9:418
#, no-wrap
msgid "B<pid.>I<N>B<.commandD> float ro (only if debug=1)"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:421
msgid ""
"Derivative of command.  This is the value that is multiplied by B<FF1> to "
"produce the first order feed-forward term of the output."
msgstr ""

#. type: TP
#: man/man9/pid.9:421
#, no-wrap
msgid "B<pid.>I<N>B<.commandDD> float ro (only if debug=1)"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:425
msgid ""
"Second derivative of command.  This is the value that is multiplied by "
"B<FF2> to produce the second order feed-forward term of the output."
msgstr ""

#. type: TP
#: man/man9/pid.9:425
#, no-wrap
msgid "B<pid.>I<N>B<.commandDDD> float ro (only if debug=1)"
msgstr ""

#. type: Plain text
#: man/man9/pid.9:429
msgid ""
"Third derivative of command.  This is the value that is multiplied by B<FF3> "
"to produce the third order feed-forward term of the output."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:437
msgid ""
"Some people would argue that deadband should be implemented such that error "
"is treated as zero if it is within the deadband, and be unmodified if it is "
"outside the deadband.  This was not done because it would cause a step in "
"the transfer function equal to the size of the deadband.  People who prefer "
"that behavior are welcome to add a parameter that will change the behavior, "
"or to write their own version of B<pid>. However, the default behavior "
"should not be changed."
msgstr ""

#. type: Plain text
#: man/man9/pid.9:442
msgid ""
"Negative gains may lead to unwanted behavior.  It is possible in some "
"situations that negative FF gains make sense, but in general all gains "
"should be positive.  If some output is in the wrong direction, negating "
"gains to fix it is a mistake; set the scaling correctly elsewhere instead."
msgstr ""

#. type: TH
#: man/man9/plasmac.9:9
#, no-wrap
msgid "PLASMAC"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:13
msgid "plasmac - A plasma cutter controller"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:16
msgid "B<loadrt plasmac>"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:21
msgid ""
"A plasma cutting table control component for use with the LinuxCNC V2.8 or "
"later."
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:23
msgid "I<VERSION:>"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:25
msgid "1.233"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:27
msgid "I<SUMMARY:>"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:29
msgid ""
"Usage of this component is demonstrated in the QtPlasmaC example "
"configurations included with LinuxCNC."
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:31
msgid "I<DISCLAIMER:>"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:33
msgid ""
"THE AUTHOR OF THIS SOFTWARE ACCEPTS ABSOLUTELY NO LIABILITY FOR ANY HARM OR "
"LOSS RESULTING FROM ITS USE."
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:35
msgid "IT IS EXTREMELY UNWISE TO RELY ON SOFTWARE ALONE FOR SAFETY."
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:37
msgid ""
"Any machinery capable of harming persons must have provisions for completely "
"stopping all motors and moving parts etc. before persons enter any danger "
"area."
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:39
msgid ""
"All machinery must be designed to comply with local and national safety "
"codes, and the author of this software can not, and does not, take any "
"responsibility for such compliance."
msgstr ""

#. type: TP
#: man/man9/plasmac.9:41
#, no-wrap
msgid "B<plasmac> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:45
#, no-wrap
msgid "B<plasmac.arc-fail-delay> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:48
msgid "arc start failure timeout (seconds)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:48
#, no-wrap
msgid "B<plasmac.arc-lost-delay> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:51
msgid "arc lost delay during a cut (seconds)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:51
#, no-wrap
msgid "B<plasmac.arc-ok-high> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:54
msgid "maximum voltage level for Arc OK signal [mode 0] (volts)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:54
#, no-wrap
msgid "B<plasmac.arc-ok-in> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:57
msgid "external arc ok input signal [mode 1 & mode 2]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:57
#, no-wrap
msgid "B<plasmac.arc-ok-low> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:60
msgid "minimum voltage level for Arc OK signal [mode 0] (volts)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:60
#, no-wrap
msgid "B<plasmac.arc-max-starts> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:63
msgid "maximum attempts at starting the arc"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:63
#, no-wrap
msgid "B<plasmac.arc-voltage-in> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:66
msgid "arc voltage input [mode 0 & mode 1] see Notes above"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:66
#, no-wrap
msgid "B<plasmac.arc-voltage-offset> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:69
msgid "offset to set arc voltage to 0 at 0 volts"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:69
#, no-wrap
msgid "B<plasmac.arc-voltage-scale> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:72
msgid "scale to convert arc_voltage input to actual volts"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:72
#, no-wrap
msgid "B<plasmac.thc-auto> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:75
msgid "enable automatic thc activation"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:75
#, no-wrap
msgid "B<plasmac.axis-x-max-limit> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:78
msgid "axis x maximum limit, connect to ini.x.max-limit"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:78
#, no-wrap
msgid "B<plasmac.axis-x-min-limit> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:81
msgid "axis x minimum limit, connect to ini.x.min-limit"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:81
#, no-wrap
msgid "B<plasmac.axis-x-position> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:84
msgid "current x axis position, connect to axis.x.pos-cmd"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:84
#, no-wrap
msgid "B<plasmac.axis-y-max-limit> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:87
msgid "axis y maximum limit, connect to ini.y.max-limit"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:87
#, no-wrap
msgid "B<plasmac.axis-y-min-limit> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:90
msgid "axis y minimum limit, connect to ini.y.min-limit"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:90
#, no-wrap
msgid "B<plasmac.axis-y-position> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:93
msgid "current y axis position, connect to axis.y.pos-cmd"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:93
#, no-wrap
msgid "B<plasmac.axis-z-max-limit> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:96
msgid "axis z maximum limit, connect to ini.z.max-limit"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:96
#, no-wrap
msgid "B<plasmac.axis-z-min-limit> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:99
msgid "axis z minimum limit, connect to ini.z.min-limit"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:99
#, no-wrap
msgid "B<plasmac.axis-z-position> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:102
msgid "current z axis position, connect to joint.N.pos-fb"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:102
#, no-wrap
msgid "B<plasmac.breakaway> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:105
msgid "torch breakaway switch (optional, see float_switch)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:105
#, no-wrap
msgid "B<plasmac.consumable-change> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:108
msgid "change consumables in torch"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:108
#, no-wrap
msgid "B<plasmac.cornerlock-enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:111
msgid "enable corner lock"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:111
#, no-wrap
msgid "B<plasmac.cornerlock-threshold> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:114
msgid ""
"corner lock threshold (% of requested feed rate), speeds below this disable "
"THC"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:114
#, no-wrap
msgid "B<plasmac.current-velocity> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:117
msgid "current machine velocity , connect to motion.current-vel"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:117
#, no-wrap
msgid "B<plasmac.cut-feed-rate> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:120
msgid "cut feed rate from current material (machine units per minute)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:120
#, no-wrap
msgid "B<plasmac.cut-height> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:123
msgid "cut height (machine units)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:123
#, no-wrap
msgid "B<plasmac.cut-recovery> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:126
msgid "recover from cut error"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:126
#, no-wrap
msgid "B<plasmac.cut-volts> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:129
msgid "cut voltage (volts)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:129
#, no-wrap
msgid "B<plasmac.cutting-start> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:132
msgid "start a new cut, connect to spindle.0.on"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:132
#, no-wrap
msgid "B<plasmac.debug-print> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:135
msgid "if true will print state changes as a debug aid"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:135
#, no-wrap
msgid "B<plasmac.external-estop> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:138
msgid "external estop input"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:138
#, no-wrap
msgid "B<plasmac.feed-override> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:141
msgid "feed override value from gui (connect to halui.feed-override.value)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:141
#, no-wrap
msgid "B<plasmac.feed-reduction> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:144
msgid ""
"reduce adaptive feed to this percentage (connect to motion.analog-out-03)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:144
#, no-wrap
msgid "B<plasmac.float-switch> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:147
msgid ""
"float switch input (can also act as breakaway if it actuates when torch "
"breaks away)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:147
#, no-wrap
msgid "B<plasmac.float-switch-travel> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:150
msgid "float switch travel (machine units)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:150
#, no-wrap
msgid "B<plasmac.gcode-scale> float in (default: I<1>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:153
msgid "current g-code scale"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:153
#, no-wrap
msgid "B<plasmac.height-override> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:156
msgid "height override adjustment (volts)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:156
#, no-wrap
msgid "B<plasmac.height-per-volt> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:159
msgid "torch height change per volt (machine units)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:159
#, no-wrap
msgid "B<plasmac.homed> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:162
msgid "machine is homed"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:162
#, no-wrap
msgid "B<plasmac.ignore-arc-ok-0> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:165 man/man9/plasmac.9:168
msgid "don't require arc ok for start or cutting"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:165
#, no-wrap
msgid "B<plasmac.ignore-arc-ok-1> bit in "
msgstr ""

#. type: TP
#: man/man9/plasmac.9:168
#, no-wrap
msgid "B<plasmac.kerf-width> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:171
msgid "placeholder for better gcode portability between gui's"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:171
#, no-wrap
msgid "B<plasmac.override-jog> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:174
msgid "override jog inhibit"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:174
#, no-wrap
msgid "B<plasmac.offset-set-probe> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:177
msgid "deploy probe for setting offsets"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:177
#, no-wrap
msgid "B<plasmac.offset-set-scribe> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:180
msgid "deploy scribe for setting offsets"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:180
#, no-wrap
msgid "B<plasmac.laser-recovery-start> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:183
msgid "start laser offset for cut recovery"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:183
#, no-wrap
msgid "B<plasmac.laser-x-offset> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:186
msgid "alignment laser x axis offset (scaled units)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:186
#, no-wrap
msgid "B<plasmac.laser-y-offset> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:189
msgid "alignment laser y axis offset (scaled units)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:189
#, no-wrap
msgid "B<plasmac.lowpass-frequency> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:192
msgid "lowpass cutoff frequency for arc voltage output"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:192
#, no-wrap
msgid "B<plasmac.machine-is-on> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:195
msgid "machine is on signal"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:195
#, no-wrap
msgid "B<plasmac.max-offset> s32 in (default: I<5>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:198
msgid "maximum height offset"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:198
#, no-wrap
msgid "B<plasmac.mesh-arc-ok> bit in (default: I<FALSE>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:201
msgid "don't require arc ok for mesh mode"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:201
#, no-wrap
msgid "B<plasmac.mesh-enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:204
msgid "enable mesh cutting mode"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:204
#, no-wrap
msgid "B<plasmac.mode> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:207
msgid "operating mode"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:207
#, no-wrap
msgid "B<plasmac.motion-type> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:210
msgid "motion type, connect to motion.motion-type"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:210
#, no-wrap
msgid "B<plasmac.move-down> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:213
msgid "external thc down switch [mode 2])"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:213
#, no-wrap
msgid "B<plasmac.move-up> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:216
msgid "external thc up switch [mode 2]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:216
#, no-wrap
msgid "B<plasmac.multi-tool> bit in (default: I<1>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:219
msgid "allows the use of multiple tools"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:219
#, no-wrap
msgid "B<plasmac.offset-probe-delay> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:222
msgid "wait for probe to deploy (seconds)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:222
#, no-wrap
msgid "B<plasmac.offset-probe-x> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:225
msgid "X axis offset for offset probe (machine units)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:225
#, no-wrap
msgid "B<plasmac.offset-probe-y> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:228
msgid "Y axis offset for offset probe (machine units)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:228
#, no-wrap
msgid "B<plasmac.offsets-active> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:231
msgid "offsets are active, connect to motion.eoffsets-active"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:231
#, no-wrap
msgid "B<plasmac.ohmic-sense-on-delay> s32 in (default: I<3>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:234
msgid "debounce cycles for ohmic sense on"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:234
#, no-wrap
msgid "B<plasmac.ohmic-sense-off-delay> s32 in (default: I<3>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:237
msgid "debounce cycles for ohmic sense off"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:237
#, no-wrap
msgid "B<plasmac.ohmic-sense-in> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:240
msgid "ohmic sense relay input"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:240
#, no-wrap
msgid "B<plasmac.ohmic-max-attempts> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:243
msgid "maximum ohmic probe attempts before fallback to float switch"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:243
#, no-wrap
msgid "B<plasmac.ohmic-probe> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:246
msgid "ohmic probe input, from ohmic-sense-out or external component/pin"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:246
#, no-wrap
msgid "B<plasmac.ohmic-probe-enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:249
msgid "enable ohmic probe"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:249
#, no-wrap
msgid "B<plasmac.ohmic-probe-offset> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:252
msgid "Z axis offset for ohmic probe (machine units)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:252
#, no-wrap
msgid "B<plasmac.ohmic-test> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:255
msgid "test for shorted torch"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:255
#, no-wrap
msgid "B<plasmac.ok-sample-counts> s32 in (default: I<10>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:258
msgid "arc_ok number of valid samples required [mode 0]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:258
#, no-wrap
msgid "B<plasmac.ok-sample-threshold> float in (default: I<10>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:261
msgid "arc_ok maximum arc voltage deviation allowed [mode 0]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:261
#, no-wrap
msgid "B<plasmac.pause-at-end> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:264
msgid "time to pause at end of cut"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:264
#, no-wrap
msgid "B<plasmac.paused-motion-speed> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:267
msgid "multiplier for speed of motion when paused, from -1 to 1"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:267
#, no-wrap
msgid "B<plasmac.pid-d-gain> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:270
msgid "derivative gain input [mode 0 & mode 1]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:270
#, no-wrap
msgid "B<plasmac.pid-i-gain> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:273
msgid "integral gain input [mode 0 & mode 1]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:273
#, no-wrap
msgid "B<plasmac.pid-p-gain> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:276
msgid "proportional gain input [mode 0 & mode 1]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:276
#, no-wrap
msgid "B<plasmac.pierce-delay> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:279
msgid "time required to pierce stock (seconds)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:279
#, no-wrap
msgid "B<plasmac.probe-feed-rate> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:282
msgid "probe down velocity (machine units per minute)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:282
#, no-wrap
msgid "B<plasmac.probe-final-speed> s32 in (default: I<1>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:285
msgid "final probe speed (steps per servo period)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:285
#, no-wrap
msgid "B<plasmac.pierce-height> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:288
msgid "pierce height (machine units)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:288
#, no-wrap
msgid "B<plasmac.probe-start-height> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:291
msgid "probe starting height"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:291
#, no-wrap
msgid "B<plasmac.probe-test> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:294
msgid "probe test only"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:294
#, no-wrap
msgid "B<plasmac.program-is-idle> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:297
msgid "program is idle, connect to halui.program.is-idle"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:297
#, no-wrap
msgid "B<plasmac.program-is-paused> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:300
msgid "program is paused, connect to halui.program.is-paused"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:300
#, no-wrap
msgid "B<plasmac.program-is-running> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:303
msgid "program is running, connect to halui.program.is-running"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:303
#, no-wrap
msgid "B<plasmac.puddle-jump-delay> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:306
msgid ""
"delay move from pierce height to cut height (seconds), leave disconnected if "
"not required"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:306
#, no-wrap
msgid "B<plasmac.puddle-jump-height> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:309
msgid ""
"puddle jump height (percentage of pierce height), leave disconnected if not "
"required"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:309
#, no-wrap
msgid "B<plasmac.requested-velocity> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:312
msgid "deprecated"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:312
#, no-wrap
msgid "B<plasmac.feed-upm> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:315
msgid ""
"requested feed_rate, connect to motion.feed-upm to use as the default (gcode "
"units per minute)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:315
#, no-wrap
msgid "B<plasmac.resolution> s32 in (default: I<100>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:318
msgid "multiplier for resolution of the offset counts"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:318
#, no-wrap
msgid "B<plasmac.restart-delay> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:321
msgid "time from arc failure till next restart attempt"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:321
#, no-wrap
msgid "B<plasmac.safe-height> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:324
msgid "requested safe traverse height (machine units)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:324
#, no-wrap
msgid "B<plasmac.scribe-arm-delay> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:327
msgid "delay from scribe arm to scribe on"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:327
#, no-wrap
msgid "B<plasmac.scribe-on-delay> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:330
msgid "delay from scribe on to motion beginning"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:330
#, no-wrap
msgid "B<plasmac.scribe-start> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:333
msgid "start a new scribe, connect to spindle.1.on"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:333
#, no-wrap
msgid "B<plasmac.setup-feed-rate> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:336
msgid ""
"feed rate for moves to pierce and cut heights (machine units per minute)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:336
#, no-wrap
msgid "B<plasmac.skip-ihs-distance> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:339
msgid "skip IHS if less than this distance from last cut"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:339
#, no-wrap
msgid "B<plasmac.spotting-start> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:342
msgid "start a new spot, connect to spindle.2.on"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:342
#, no-wrap
msgid "B<plasmac.spotting-threshold> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:345
msgid "threshold voltage to start spotting delay"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:345
#, no-wrap
msgid "B<plasmac.spotting-time> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:348
msgid "torch off delay after spotting threshold reached"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:348
#, no-wrap
msgid "B<plasmac.thc-delay> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:351
msgid ""
"delay from cut feed rate reached to THC activate (seconds) [non auto THC]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:351
#, no-wrap
msgid "B<plasmac.thc-disable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:354
msgid "thc disable"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:354
#, no-wrap
msgid "B<plasmac.thc-enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:357
msgid "enable/disable thc and set the IHS skip type"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:357
#, no-wrap
msgid "B<plasmac.thc-feed-rate> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:360
msgid "maximum feed rate for thc (machine units per minute)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:360
#, no-wrap
msgid "B<plasmac.thc-sample-counts> s32 in (default: I<50>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:363
msgid "thc number of valid samples required [auto THC]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:363
#, no-wrap
msgid "B<plasmac.thc-sample-threshold> float in (default: I<1>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:366
msgid "thc maximum arc voltage deviation allowed [auto THC]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:366
#, no-wrap
msgid "B<plasmac.thc-threshold> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:369
msgid "thc threshold (volts), changes below this have no effect"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:369
#, no-wrap
msgid "B<plasmac.torch-enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:372
msgid "enable torch"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:372
#, no-wrap
msgid "B<plasmac.torch-off> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:375
msgid "turn torch off"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:375
#, no-wrap
msgid "B<plasmac.torch-pulse-start> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:378
msgid "torch pulse start"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:378
#, no-wrap
msgid "B<plasmac.torch-pulse-time> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:381
msgid "torch pulse time (seconds)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:381
#, no-wrap
msgid "B<plasmac.units-per-mm> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:384
msgid "for scale calcs, connect to halui.machine.units-per-mm"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:384
#, no-wrap
msgid "B<plasmac.use-auto-volts> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:387
msgid "use calculated voltage for thc baseline"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:387
#, no-wrap
msgid "B<plasmac.voidlock-enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:390
msgid "enable voidlock [mode 0 & mode 1]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:390
#, no-wrap
msgid "B<plasmac.voidlock-on-cycles> s32 in (default: I<2>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:393
msgid "number of sampling cycles to activate voidlock"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:393
#, no-wrap
msgid "B<plasmac.voidlock-off-cycles> s32 in (default: I<10>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:396
msgid "number of sampling cycles to deactivate voidlock"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:396
#, no-wrap
msgid "B<plasmac.voidlock-slope> s32 in (default: I<500>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:399
msgid "voidlock slope in volts per second"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:399
#, no-wrap
msgid "B<plasmac.x-offset> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:402
msgid ""
"offset to apply to axis x for consumable change and cut recovery (scaled "
"units)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:402
#, no-wrap
msgid "B<plasmac.x-offset-current> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:405
msgid "current x axis offset, connect to axis.x.eoffset"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:405
#, no-wrap
msgid "B<plasmac.xy-feed-rate> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:408
msgid "feed-rate for consumable change"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:408
#, no-wrap
msgid "B<plasmac.y-offset> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:411
msgid ""
"offset to apply to axis y for consumable change and cut recovery (scaled "
"units)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:411
#, no-wrap
msgid "B<plasmac.y-offset-current> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:414
msgid "current z axis offset, connect to axis.y.eoffset"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:414
#, no-wrap
msgid "B<plasmac.z-offset-current> float in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:417
msgid "current z axis offset, connect to axis.z.eoffset"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:417
#, no-wrap
msgid "B<plasmac.zero-window> float in (default: I<0.1>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:420
msgid ""
"sets window that voltage fluctuations show as zero (-0.1 to 0.1 at default "
"value)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:420
#, no-wrap
msgid "B<plasmac.adaptive-feed> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:423
msgid "for reverse-run, connect to motion.adaptive-feed"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:423
#, no-wrap
msgid "B<plasmac.arc-ok-out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:426
msgid "arc ok output"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:426
#, no-wrap
msgid "B<plasmac.arc-voltage-out> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:429
msgid "arc voltage output [mode 0 & mode 1]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:429
#, no-wrap
msgid "B<plasmac.consumable-changing> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:432
msgid "consumables are being changed"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:432
#, no-wrap
msgid "B<plasmac.cornerlock-is-locked> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:435
msgid "corner locked indicator"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:435
#, no-wrap
msgid "B<plasmac.cut-length> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:438
msgid "length of current cut job"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:438
#, no-wrap
msgid "B<plasmac.cut-recovering> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:441
msgid "recovering from cut error"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:441
#, no-wrap
msgid "B<plasmac.cut-time> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:444
msgid "cut time of current job"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:444
#, no-wrap
msgid "B<plasmac.cutting-stop> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:447
msgid "stop manual cut, connect to halui.spindle.0.stop"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:447
#, no-wrap
msgid "B<plasmac.feed-hold> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:450
msgid "feed hold, connect to motion.feed-hold"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:450
#, no-wrap
msgid "B<plasmac.jog-inhibit> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:453
msgid "jog inhibit, connect to motion.jog-inhibit"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:453
#, no-wrap
msgid "B<plasmac.laser-recovery-state> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:456
msgid "laser recovery status"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:456
#, no-wrap
msgid "B<plasmac.led-down> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:459
msgid "thc move down indicator"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:459
#, no-wrap
msgid "B<plasmac.led-up> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:462
msgid "thc move up indicator"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:462
#, no-wrap
msgid "B<plasmac.offset-scale> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:465
msgid "offset scale, connect to axis.E<lt>x y zE<gt>.eoffset-scale"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:465
#, no-wrap
msgid "B<plasmac.ohmic-enable> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:468
msgid "on only while probing"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:468
#, no-wrap
msgid "B<plasmac.ohmic-sense-out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:471
msgid "ohmic sense output state"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:471
#, no-wrap
msgid "B<plasmac.paused-motion> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:474
msgid "paused motion flag, true when paused motion is active"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:474
#, no-wrap
msgid "B<plasmac.paused-time> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:477
msgid "paused time during current job"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:477
#, no-wrap
msgid "B<plasmac.pierce-count> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:480
msgid "number of pierce attempts (torch starts)"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:480
#, no-wrap
msgid "B<plasmac.probe-test-error> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:483
msgid "minimum limit reached while probe testing"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:483
#, no-wrap
msgid "B<plasmac.probe-time> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:486
msgid "probe time of current job"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:486
#, no-wrap
msgid "B<plasmac.program-pause> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:489
msgid "pause the current program, connect to halui.program.pause"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:489
#, no-wrap
msgid "B<plasmac.program-resume> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:492
msgid "resume the currently paused program, connect to halui.program.resume"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:492
#, no-wrap
msgid "B<plasmac.program-run> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:495
msgid "run the currently loaded program, connect to halui.program.run"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:495
#, no-wrap
msgid "B<plasmac.program-stop> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:498
msgid "stop current program, connect to halui.program.stop"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:498
#, no-wrap
msgid "B<plasmac.rapid-time> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:501
msgid "rapid motion time of current job"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:501
#, no-wrap
msgid "B<plasmac.run-time> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:504
msgid "run time of current job"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:504
#, no-wrap
msgid "B<plasmac.safe-height-is-limited> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:507
msgid "safe height is limited indicator"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:507
#, no-wrap
msgid "B<plasmac.sensor-active> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:510
msgid "one of float, ohmic, or breakaway is detected"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:510
#, no-wrap
msgid "B<plasmac.scribe-arm> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:513
msgid "arm the scribe"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:513
#, no-wrap
msgid "B<plasmac.scribe-on> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:516
msgid "turn scribe on"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:516
#, no-wrap
msgid "B<plasmac.state-out> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:519
msgid "current state"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:519
#, no-wrap
msgid "B<plasmac.stop-type-out> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:522
msgid "current stop type"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:522
#, no-wrap
msgid "B<plasmac.thc-active> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:525
msgid "thc status output"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:525
#, no-wrap
msgid "B<plasmac.thc-enabled> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:528
msgid "thc is enabled"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:528
#, no-wrap
msgid "B<plasmac.torch-on> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:531
msgid "turn torch on, connect to your torch on input"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:531
#, no-wrap
msgid "B<plasmac.torch-time> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:534
msgid "torch on time of current job"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:534
#, no-wrap
msgid "B<plasmac.voidlock-is-locked> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:537
msgid "voidlock is locked indicator [mode 0 & mode 1]"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:537
#, no-wrap
msgid "B<plasmac.x-offset-counts> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:540
msgid "x offset for consumable change, connect to axis.x.eoffset-counts"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:540
#, no-wrap
msgid "B<plasmac.xy-offset-enable> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:543
msgid "enable x and y offsets, connect to axis.E<lt>x & yE<gt>.eoffset-enable"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:543
#, no-wrap
msgid "B<plasmac.y-offset-counts> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:546
msgid "y offset for consumable change, connect to axis.y.eoffset-counts"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:546
#, no-wrap
msgid "B<plasmac.z-height> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:549
msgid "current z axis height relative to the probed zero height"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:549
#, no-wrap
msgid "B<plasmac.z-offset-counts> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:552
msgid "z offset for height control, connect to axis.z.eoffset-counts"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:552
#, no-wrap
msgid "B<plasmac.z-offset-enable> bit out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:555
msgid "enable z offsets, connect to axis.z.eoffset-enable"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:555
#, no-wrap
msgid "B<plasmac.z-relative> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:558
msgid "distance of Z from last probed height"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:558
#, no-wrap
msgid "B<plasmac.current-feed-rate> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:561
msgid "current feed rate per minute"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:561
#, no-wrap
msgid "B<plasmac.requested-feed-rate> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:564
msgid "requested feed rate"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:564
#, no-wrap
msgid "B<plasmac.low-cut-volts> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:567
msgid "low cut voltage threshold while thc active"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:567
#, no-wrap
msgid "B<plasmac.target-samples> s32 in (default: I<6>)"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:570
msgid "number of samples for setting target_volts"
msgstr ""

#. type: TP
#: man/man9/plasmac.9:570
#, no-wrap
msgid "B<plasmac.target-volts> float out "
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:573
msgid "target voltage for thc, set by arc voltage at cut height"
msgstr ""

#. type: Plain text
#: man/man9/plasmac.9:576
msgid "Phillip A Carter & Gregory D Carl"
msgstr ""

#. type: TH
#: man/man9/pwmgen.9:1
#, no-wrap
msgid "PWMGEN"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:5
msgid "pwmgen - software PWM/PDM generation"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:7
msgid "B<loadrt pwmgen output_type=>I<type0>[,I<type1>...]"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:15
msgid ""
"B<pwmgen> is used to generate PWM (pulse width modulation) or PDM (pulse "
"density modulation) signals.  The maximum PWM frequency and the resolution "
"is quite limited compared to hardware-based approaches, but in many cases "
"software PWM can be very useful.  If better performance is needed, a "
"hardware PWM generator is a better choice."
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:20
msgid ""
"B<pwmgen> supports a maximum of eight channels.  The number of channels "
"actually loaded depends on the number of I<type> values given.  The value of "
"each I<type> determines the outputs for that channel."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:21
#, no-wrap
msgid "type 0: single output"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:26
msgid ""
"A single output pin, B<pwm>, whose duty cycle is determined by the input "
"value for positive inputs, and which is off (or at B<min-dc>)  for negative "
"inputs.  Suitable for single ended circuits."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:26
#, no-wrap
msgid "type 1: pwm/direction"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:31
msgid ""
"Two output pins, B<pwm> and B<dir>.  The duty cycle on B<pwm> varies as a "
"function of the input value.  B<dir> is low for positive inputs and high for "
"negative inputs."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:31
#, no-wrap
msgid "type 2: up/down"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:38
msgid ""
"Two output pins, B<up> and B<down>.  For positive inputs, the PWM/PDM "
"waveform appears on B<up>, while B<down> is low.  For negative inputs, the "
"waveform appears on B<down>, while B<up> is low.  Suitable for driving the "
"two sides of an H-bridge to generate a bipolar output."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:40
#, no-wrap
msgid "B<pwmgen.make-pulses >(no floating-point)"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:46
msgid ""
"Generates the actual PWM waveforms, using information computed by "
"B<update>.  Must be called as frequently as possible, to maximize the "
"attainable PWM frequency and resolution, and minimize jitter.  Operates on "
"all channels at once."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:46
#, no-wrap
msgid "B<pwmgen.update >(uses floating point)"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:52
msgid ""
"Accepts an input value, performs scaling and limit checks, and converts it "
"into a form usable by B<make-pulses> for PWM/PDM generation.  Can (and "
"should) be called less frequently than B<make-pulses>.  Operates on all "
"channels at once."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:54
#, no-wrap
msgid "B<pwmgen.>I<N>B<.enable> bit in"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:58
msgid ""
"Enables PWM generator I<N> - when false, all B<pwmgen.>I<N> output pins are "
"low."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:58
#, no-wrap
msgid "B<pwmgen.>I<N>B<.value> float in"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:63
msgid ""
"Commanded value.  When B<value> = 0.0, duty cycle is 0%, and when B<value> = "
"\\(+-B<scale>, duty cycle is \\(+- 100%. (Subject to B<min-dc> and B<max-dc> "
"limitations.)"
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:63
#, no-wrap
msgid "B<pwmgen.>I<N>B<.pwm> bit out (output types 0 and 1 only)"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:66
msgid "PWM/PDM waveform."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:66
#, no-wrap
msgid "B<pwmgen.>I<N>B<.dir> bit out (output type 1 only)"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:69 man/man9/stepgen.9:104
msgid "Direction output: low for forward, high for reverse."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:69
#, no-wrap
msgid "B<pwmgen.>I<N>B<.up> bit out (output type 2 only)"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:72
msgid "PWM/PDM waveform for positive input values, low for negative inputs."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:72
#, no-wrap
msgid "B<pwmgen.>I<N>B<.down> bit out (output type 2 only)"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:75
msgid "PWM/PDM waveform for negative input values, low for positive inputs."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:75
#, no-wrap
msgid "B<pwmgen.>I<N>B<.curr-dc> float out"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:79
msgid ""
"The current duty cycle, after all scaling and limits have been applied.  "
"Range is from -1.0 to +1.0."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:79
#, no-wrap
msgid "B<pwmgen.>I<N>B<.max-dc> float in/out"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:84
msgid ""
"The maximum duty cycle.  A value of 1.0 corresponds to 100%.  This can be "
"useful when using transistor drivers with bootstrapped power supplies, since "
"the supply requires some low time to recharge."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:84
#, no-wrap
msgid "B<pwmgen.>I<N>B<.min-dc> float in/out"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:89
msgid ""
"The minimum duty cycle.  A value of 1.0 corresponds to 100%.  Note that when "
"the pwm generator is disabled, the outputs are constantly low, regardless of "
"the setting of B<min-dc>."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:89
#, no-wrap
msgid "B<pwmgen.>I<N>B<.scale> float in/out"
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:93
#, no-wrap
msgid "B<pwmgen.>I<N>B<.offset> float in/out"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:98
msgid ""
"These parameters provide a scale and offset from the B<value> pin to the "
"actual duty cycle.  The duty cycle is calculated according to I<dc = (value/"
"scale) + offset>, with 1.0 meaning 100%."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:98
#, no-wrap
msgid "B<pwmgen.>I<N>B<.pwm-freq> float in/out"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:106
msgid ""
"PWM frequency in Hz.  The upper limit is half of the frequency at which "
"B<make-pulses> is invoked, and values above that limit will be changed to "
"the limit.  If B<dither-pwm> is false, the value will be changed to the "
"nearest integer submultiple of the B<make-pulses> frequency.  A value of "
"zero produces Pulse Density Modulation instead of Pulse Width Modulation."
msgstr ""

#. type: TP
#: man/man9/pwmgen.9:106
#, no-wrap
msgid "B<pwmgen.>I<N>B<.dither-pwm> bit in/out"
msgstr ""

#. type: Plain text
#: man/man9/pwmgen.9:117
msgid ""
"Because software-generated PWM uses a fairly slow timebase (several to many "
"microseconds), it has limited resolution.  For example, if B<make-pulses> is "
"called at a 20 kHz rate, and B<pwm-freq> is 2 kHz, there are only 10 "
"possible duty cycles.  If B<dither-pwm> is false, the commanded duty cycle "
"will be rounded to the nearest of those values.  Assuming B<value> remains "
"constant, the same output will repeat every PWM cycle.  If B<dither-pwm> is "
"true, the output duty cycle will be dithered between the two closest values, "
"so that the long-term average is closer to the desired level.  B<dither-pwm> "
"has no effect if B<pwm-freq> is zero (PDM mode), since PDM is an inherently "
"dithered process."
msgstr ""

#. type: TH
#: man/man9/rosekins.9:1
#, no-wrap
msgid "ROSEKINS"
msgstr ""

#. type: Plain text
#: man/man9/rosekins.9:5
msgid "rosekins - Kinematics for a rose engine"
msgstr ""

#. type: Plain text
#: man/man9/rosekins.9:15
#, no-wrap
msgid ""
"   joint_0 linear, transverse   (perpendicular to spindle)\n"
"   joint_1 linear, longitudinal (parallel to spindle identity to z)\n"
"   joint_2 rotary, spindle      (workholding, not tool holding, e.g.\n"
"                                 not a highspeed spindle)\n"
msgstr ""

#. type: TP
#: man/man9/rosekins.9:17
#, no-wrap
msgid "B<rosekins.revolutions> float out"
msgstr ""

#. type: Plain text
#: man/man9/rosekins.9:21
msgid ""
"Count of crossings of the negative X axis.  Clockwise crossings increment "
"revolutions by 1, Counterclockwise crossings decrement by 1"
msgstr ""

#. type: TP
#: man/man9/rosekins.9:22
#, no-wrap
msgid "B<rosekins.theta_degrees> float out"
msgstr ""

#. type: Plain text
#: man/man9/rosekins.9:25
msgid "Principal value for arctan(Y/X)"
msgstr ""

#. type: TP
#: man/man9/rosekins.9:26
#, no-wrap
msgid "B<rosekins.bigtheta_degrees> float out"
msgstr ""

#. type: Plain text
#: man/man9/rosekins.9:29
msgid "Accumulated angle (theta + revolutions * 360)"
msgstr ""

#. type: Plain text
#: man/man9/rosekins.9:36
msgid ""
"Theta is the principal value of arctan(Y/X).  Joint_2 angle values are not "
"limited to principal values of arctan(Y/X) but accumulate continuously as "
"the spindle is rotated.  Hal pins are provided for the principal value and a "
"count of the number of revolutions."
msgstr ""

#. type: Plain text
#: man/man9/rosekins.9:41
msgid ""
"The transverse motion is exactly perpendicular to the spindle.  In a "
"traditional rose engine, the transverse motion is created by 'rocking' the "
"headstock about a pivot.  A typical pivot length combined with the limited "
"amount of X travel in a real machine make the perpendicular approximation a "
"reasonable model."
msgstr ""

#. type: TH
#: man/man9/sample_hold.9:9
#, no-wrap
msgid "SAMPLE_HOLD"
msgstr ""

#. type: Plain text
#: man/man9/sample_hold.9:13
msgid "sample_hold - Sample and Hold"
msgstr ""

#. type: Plain text
#: man/man9/sample_hold.9:16
msgid ""
"B<loadrt sample_hold [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/sample_hold.9:17
#, no-wrap
msgid "B<sample-hold.>I<N>"
msgstr ""

#. type: TP
#: man/man9/sample_hold.9:21
#, no-wrap
msgid "B<sample-hold.>I<N>B<.in> s32 in "
msgstr ""

#. type: TP
#: man/man9/sample_hold.9:25
#, no-wrap
msgid "B<sample-hold.>I<N>B<.hold> bit in "
msgstr ""

#. type: TP
#: man/man9/sample_hold.9:29
#, no-wrap
msgid "B<sample-hold.>I<N>B<.out> s32 out "
msgstr ""

#. type: TH
#: man/man9/sampler.9:26
#, no-wrap
msgid "SAMPLER"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:29
msgid "sampler - sample data from HAL in real time"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:33
msgid ""
"B<loadrt sampler> B<depth=>I<depth1[,depth2...]> B<cfg=>I<string1[,"
"string2...]>"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:45
msgid ""
"B<sampler> and B<halsampler>(1)  are used together to sample HAL data in "
"real time and store it in a file.  B<sampler> is a realtime HAL component "
"that exports HAL pins and creates a FIFO in shared memory.  It then begins "
"sampling data from the HAL and storing it to the FIFO.  B<halsampler> is a "
"user space program that copies data from the FIFO to stdout, where it can be "
"redirected to a file or piped to some other program."
msgstr ""

#. type: TP
#: man/man9/sampler.9:47
#, no-wrap
msgid "B<depth=>I<depth1[,depth2...]>"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:55
msgid ""
"sets the depth of the realtime-E<gt>user FIFO that B<sampler> creates to "
"buffer the realtime data.  Multiple values of I<depth> (separated by commas) "
"can be specified if you need more than one FIFO (for example if you want to "
"sample data from two different realtime threads)."
msgstr ""

#. type: TP
#: man/man9/sampler.9:55
#, no-wrap
msgid "B<cfg=>I<string1[,string2...]>"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:66
msgid ""
"defines the set of HAL pins that B<sampler> exports and later samples data "
"from.  One I<string> must be supplied for each FIFO, separated by commas.  "
"B<sampler> exports one pin for each character in I<string.> Legal characters "
"are:"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:69
msgid "B<F, f> (float pin)"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:72
msgid "B<B, b> (bit pin)"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:75
msgid "B<S, s> (s32 pin)"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:78
msgid "B<U, u> (u32 pin)"
msgstr ""

#. type: TP
#: man/man9/sampler.9:80
#, no-wrap
msgid "B<sampler.>I<N>"
msgstr ""

#. type: TP
#: man/man9/sampler.9:85
#, no-wrap
msgid "B<sampler.>I<N>B<.pin.>I<M> input"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:94
msgid ""
"Pin for the data that will wind up in column I<M> of FIFO I<N> (and in "
"column I<M> of the output file).  The pin type depends on the config string."
msgstr ""

#. type: TP
#: man/man9/sampler.9:94
#, no-wrap
msgid "B<sampler.>I<N>B<.curr-depth> s32 output"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:100
msgid ""
"Current number of samples in the FIFO.  When this reaches I<depth> new data "
"will begin overwriting old data, and some samples will be lost."
msgstr ""

#. type: TP
#: man/man9/sampler.9:100
#, no-wrap
msgid "B<sampler.>I<N>B<.full> bit output"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:105
msgid ""
"TRUE when the FIFO I<N> is full, FALSE when there is room for another sample."
msgstr ""

#. type: TP
#: man/man9/sampler.9:105
#, no-wrap
msgid "B<sampler.>I<N>B<.enable> bit input"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:109
msgid ""
"When TRUE, samples are captured and placed in FIFO I<N>, when FALSE, no "
"samples are acquired.  Defaults to TRUE."
msgstr ""

#. type: TP
#: man/man9/sampler.9:111
#, no-wrap
msgid "B<sampler.>I<N>B<.overruns> s32 read/write"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:120
msgid ""
"The number of times that B<sampler> has tried to write data to the HAL pins "
"but found no room in the FIFO.  It increments whenever B<full> is true, and "
"can be reset by the B<setp> command."
msgstr ""

#. type: TP
#: man/man9/sampler.9:121
#, no-wrap
msgid "B<sampler.>I<N>B<.sample-num> s32 read/write"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:132
msgid ""
"A number that identifies the sample.  It is automatically incremented for "
"each sample, and can be reset using the B<setp> command.  The sample number "
"can optionally be printed in the first column of the output from "
"B<halsampler>, using the I<-t> option. (see B<man 1 halsampler>)"
msgstr ""

#. type: Plain text
#: man/man9/sampler.9:137
msgid "B<halsampler>(1)  B<streamer>(9)  B<halstreamer>(1)"
msgstr ""

#. type: Plain text
#: man/man9/scale.9:13
msgid ""
"scale - LinuxCNC HAL component that applies a scale and offset to its input"
msgstr ""

#. type: Plain text
#: man/man9/scale.9:16
msgid "B<loadrt scale [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/scale.9:17
#, no-wrap
msgid "B<scale.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/scale.9:21
#, no-wrap
msgid "B<scale.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/scale.9:25
#, no-wrap
msgid "B<scale.>I<N>B<.gain> float in "
msgstr ""

#. type: TP
#: man/man9/scale.9:29
#, no-wrap
msgid "B<scale.>I<N>B<.offset> float in "
msgstr ""

#. type: TP
#: man/man9/scale.9:33
#, no-wrap
msgid "B<scale.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/scale.9:36
msgid "out = in * gain + offset"
msgstr ""

#. type: TH
#: man/man9/select8.9:9
#, no-wrap
msgid "SELECT8"
msgstr ""

#. type: Plain text
#: man/man9/select8.9:13
msgid "select8 - 8-bit binary match detector"
msgstr ""

#. type: Plain text
#: man/man9/select8.9:16
msgid "B<loadrt select8 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/select8.9:17
#, no-wrap
msgid "B<select8.>I<N>"
msgstr ""

#. type: TP
#: man/man9/select8.9:21
#, no-wrap
msgid "B<select8.>I<N>B<.enable> bit in (default: I<TRUE>)"
msgstr ""

#. type: Plain text
#: man/man9/select8.9:24
msgid "Set enable to FALSE to cause all outputs to be set FALSE"
msgstr ""

#. type: TP
#: man/man9/select8.9:24
#, no-wrap
msgid "B<select8.>I<N>B<.sel> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/select8.9:27
msgid ""
"The number of the output to set TRUE.  All other outputs well be set FALSE"
msgstr ""

#. type: TP
#: man/man9/select8.9:27
#, no-wrap
msgid "B<select8.>I<N>B<.out>I<M> bit out (M=0..7) "
msgstr ""

#. type: Plain text
#: man/man9/select8.9:30
msgid ""
"Output bits.  If enable is set and the sel input is between 0 and 7, then "
"the corresponding output bit will be set true"
msgstr ""

#. type: TH
#: man/man9/serport.9:9
#, no-wrap
msgid "SERPORT"
msgstr ""

#. type: Plain text
#: man/man9/serport.9:13
msgid ""
"serport - Hardware driver for the digital I/O bits of the 8250 and 16550 "
"serial port."
msgstr ""

#. type: Plain text
#: man/man9/serport.9:16
msgid "B<loadrt serport io=>I<addr[,addr...]>"
msgstr ""

#. type: Plain text
#: man/man9/serport.9:18
msgid ""
"The pin numbers refer to the 9-pin serial pinout.  Keep in mind that these "
"ports generally use rs232 voltages, not 0/5V signals."
msgstr ""

#. type: Plain text
#: man/man9/serport.9:23
msgid ""
"Specify the I/O address of the serial ports using the module parameter "
"B<io=>I<addr[,addr...]>.  These ports must not be in use by the kernel.  To "
"free up the I/O ports after bootup, install setserial and execute a command "
"like:"
msgstr ""

#. type: Plain text
#: man/man9/serport.9:25
msgid "sudo setserial /dev/ttyS0 uart none"
msgstr ""

#. type: Plain text
#: man/man9/serport.9:29
msgid ""
"but it is best to ensure that the serial port is never used or configured by "
"the Linux kernel by setting a kernel commandline parameter or not loading "
"the serial kernel module if it is a modularized driver."
msgstr ""

#. type: TP
#: man/man9/serport.9:31
#, no-wrap
msgid "B<serport.>I<N>B<.read>"
msgstr ""

#. type: TP
#: man/man9/serport.9:34
#, no-wrap
msgid "B<serport.>I<N>B<.write>"
msgstr ""

#. type: TP
#: man/man9/serport.9:38
#, no-wrap
msgid "B<serport.>I<N>B<.pin-1-in> bit out "
msgstr ""

#. type: Plain text
#: man/man9/serport.9:41
msgid ""
"Also called DCD (data carrier detect); pin 8 on the 25-pin serial pinout"
msgstr ""

#. type: TP
#: man/man9/serport.9:41
#, no-wrap
msgid "B<serport.>I<N>B<.pin-6-in> bit out "
msgstr ""

#. type: Plain text
#: man/man9/serport.9:44
msgid "Also called DSR (data set ready); pin 6 on the 25-pin serial pinout"
msgstr ""

#. type: TP
#: man/man9/serport.9:44
#, no-wrap
msgid "B<serport.>I<N>B<.pin-8-in> bit out "
msgstr ""

#. type: Plain text
#: man/man9/serport.9:47
msgid "Also called CTS (clear to send); pin 5 on the 25-pin serial pinout"
msgstr ""

#. type: TP
#: man/man9/serport.9:47
#, no-wrap
msgid "B<serport.>I<N>B<.pin-9-in> bit out "
msgstr ""

#. type: Plain text
#: man/man9/serport.9:50
msgid "Also called RI (ring indicator); pin 22 on the 25-pin serial pinout"
msgstr ""

#. type: TP
#: man/man9/serport.9:50
#, no-wrap
msgid "B<serport.>I<N>B<.pin-1-in-not> bit out "
msgstr ""

#. type: Plain text
#: man/man9/serport.9:53
msgid "Inverted version of pin-1-in"
msgstr ""

#. type: TP
#: man/man9/serport.9:53
#, no-wrap
msgid "B<serport.>I<N>B<.pin-6-in-not> bit out "
msgstr ""

#. type: Plain text
#: man/man9/serport.9:56
msgid "Inverted version of pin-6-in"
msgstr ""

#. type: TP
#: man/man9/serport.9:56
#, no-wrap
msgid "B<serport.>I<N>B<.pin-8-in-not> bit out "
msgstr ""

#. type: Plain text
#: man/man9/serport.9:59
msgid "Inverted version of pin-8-in"
msgstr ""

#. type: TP
#: man/man9/serport.9:59
#, no-wrap
msgid "B<serport.>I<N>B<.pin-9-in-not> bit out "
msgstr ""

#. type: Plain text
#: man/man9/serport.9:62
msgid "Inverted version of pin-9-in"
msgstr ""

#. type: TP
#: man/man9/serport.9:62
#, no-wrap
msgid "B<serport.>I<N>B<.pin-3-out> bit in "
msgstr ""

#. type: Plain text
#: man/man9/serport.9:65
msgid "Also called TX (transmit data); pin 2 on the 25-pin serial pinout"
msgstr ""

#. type: TP
#: man/man9/serport.9:65
#, no-wrap
msgid "B<serport.>I<N>B<.pin-4-out> bit in "
msgstr ""

#. type: Plain text
#: man/man9/serport.9:68
msgid ""
"Also called DTR (data terminal ready); pin 20 on the 25-pin serial pinout"
msgstr ""

#. type: TP
#: man/man9/serport.9:68
#, no-wrap
msgid "B<serport.>I<N>B<.pin-7-out> bit in "
msgstr ""

#. type: Plain text
#: man/man9/serport.9:71
msgid "Also called RTS (request to send); pin 4 on the 25-pin serial pinout"
msgstr ""

#. type: TP
#: man/man9/serport.9:72
#, no-wrap
msgid "B<serport.>I<N>B<.pin-3-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/serport.9:76
#, no-wrap
msgid "B<serport.>I<N>B<.pin-4-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/serport.9:80
#, no-wrap
msgid "B<serport.>I<N>B<.pin-7-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/serport.9:84
#, no-wrap
msgid "B<serport.>I<N>B<.ioaddr> u32 r "
msgstr ""

#. type: TH
#: man/man9/setsserial.9:3
#, no-wrap
msgid "SETSERIAL"
msgstr ""

#. type: TH
#: man/man9/setsserial.9:3
#, no-wrap
msgid "2012-10-28"
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:7
msgid "setsserial - a utility for setting Smart Serial NVRAM parameters."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:11
msgid ""
"B<NOTE: This rather clunky utility is no longer needed except for> flashing "
"new smart-serial remote firmware. Smart-serial remote parameters can now be "
"set in the HAL file in the normal way."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:15
msgid "B<loadrt setsserial cmd=\"set hm2_8i20.001f.nvmaxcurrent 750\">"
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:24
msgid "loadrt setsserial cmd=\"{command} {parameter/device} {value/filename}\""
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:26
msgid "Commands available are B<set> and B<flash>."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:29
msgid ""
"This utility should be used under halcmd, without LinuxCNC running or any "
"realtime threads running."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:31
msgid "A typical command sequence would be:"
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:38
#, no-wrap
msgid ""
" halrun\n"
" loadrt hostmot2 use_serial_numbers=1\n"
" loadrt hm2_pci config=\"firmware=hm2/5i23/svss8_8.bit\"\n"
" show param\n"
" loadrt setsserial cmd=\"set hm2_8i20.001f.nvmaxcurrent 750\"\n"
" exit\n"
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:42
msgid ""
"This example uses the option to have the HAL pins and parameters labelled by "
"the serial number of the remote. This is not necessary but can reduce the "
"scope for confusion. (The serial number is normally on a sticker on the "
"device.)"
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:47
msgid ""
"The next line loads the hm2_pci driver in the normal way. The hm2_7i43 "
"driver should work equally well, as should any future 7i80 driver.  If the "
"card has already been strted up and a firmware has been loaded, then the "
"config string may be omitted."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:53
msgid ""
"\"show param\" is optional, but provides a handy list of all the devices and "
"parameters. It also shows the current values of the parameters which can be "
"useful for determining scaling. u32 pin values are always shown in hex, but "
"new values can be entered in decimal or hex. Use the Ox123ABC format to "
"enter a hex value."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:60
msgid ""
"The next line invokes setsserial. This is run in a slightly strange way in "
"order to have kernel-level access to a live Hostmot2 config. It is basically "
"a HAL module that always fails to load. This may lead to error messages "
"being printed to the `halcmd:` prompt. These can often be ignored.  All the "
"real feedback is via the dmesg command. It is suggested to have a second "
"terminal window open to run dmesg after each command."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:63
msgid ""
"On exiting there will typically be a further error message related to the "
"driver failing to unload setsserial. This can be ignored."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:66
msgid ""
"The parameter changes will not show up until the drivers are reloaded.  //"
"TODO// Add a \"get\" command to avoid this problem."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:73
msgid ""
"B<Flashing Firmware> To flash new firmware to an FPGA card such as the 5i25 "
"or 5i20 the \"mesaflash\" utility should be used. Setsserial is only useful "
"for changing/updating the firmware on smart-serial remote such as the 8i20.  "
"The firmware should be placed somewhere in the /lib/firmware/hm2 tree, where "
"the Linux firmware loading macros can find it."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:77
msgid ""
"The flashing routine operates in a realtime thread, and can only send "
"prompts to the user through the kernel log (dmesg). It is most convenient to "
"open two terminal windows, one for command entry and one to monitor progress."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:79
msgid "In the first terminal enter"
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:81
msgid "tail -f /var/log/kern.log"
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:83
msgid "This terminal will now display status information."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:88
msgid ""
"The second window will be used to enter the commands. It is important that "
"LinuxCNC and/or HAL are not already loaded when the process is started.  To "
"flash new firmware it is necessary to move a jumper on the smart-serial "
"remote drive and to switch smart-serial communication to a slower baudrate."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:95
#, no-wrap
msgid ""
"A typical command sequence is then\n"
" halrun\n"
" loadrt hostmot2 sserial_baudrate=115200\n"
" loadrt hm2_pci config=\"firmware=hm2/5i23/svss8_8.bit\"\n"
" loadrt setsserial cmd=\"flash hm2_5i23.0.8i20.0.1 hm2/8i20/8i20T.BIN\"\n"
" exit\n"
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:98
msgid ""
"It is not necessary (or useful) to specify a config string in a system using "
"the 5i25 or 6i25 cards."
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:101
msgid ""
"Note that it is necessary to exit halrun and unload the realtime environment "
"before flashing the next card (exit)"
msgstr ""

#. type: Plain text
#: man/man9/setsserial.9:104
msgid ""
"The correct sserial channel name to use can be seen in the dmesg output in "
"the feedback terminal after the loadrt hm2_pci step of the sequence."
msgstr ""

#. type: TH
#: man/man9/siggen.9:1
#, no-wrap
msgid "SIGGEN"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:5
msgid "siggen - signal generator"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:7
msgid ""
"B<loadrt siggen [num_chan=>I<num>B< | names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:16
msgid ""
"B<siggen> is a signal generator that can be used for testing and other "
"applications that need simple waveforms.  It produces sine, cosine, "
"triangle, sawtooth, and square waves of variable frequency, amplitude, and "
"offset, which can be used as inputs to other HAL components."
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:22
msgid ""
"B<siggen> supports a maximum of sixteen channels.  The number of channels "
"actually loaded is set by the B<num_chan> argument when the module is "
"loaded.  Alternatively, specify B<names=> and unique names separated by "
"commas."
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:31
#, no-wrap
msgid ""
"The names for pins, parameters, and functions are prefixed as:\n"
"  B<siggen.N.> for N=0,1,...,num-1 when using B<num_chan=num>\n"
"  B<nameN.> for nameN=name1,name2,... when using B<names=name1,name2,...>\n"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:33
msgid "The B<siggen.N.> format is shown in the following descriptions."
msgstr ""

#. type: TP
#: man/man9/siggen.9:36
#, no-wrap
msgid "B<siggen.>I<N>B<.update> (uses floating-point)"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:42
msgid ""
"Updates output pins for signal generator I<N>.  Each time it is called it "
"calculates a new sample.  It should be called many times faster than the "
"desired signal frequency, to avoid distortion and aliasing."
msgstr ""

#. type: TP
#: man/man9/siggen.9:45
#, no-wrap
msgid "B<siggen.>I<N>B<.frequency> float in"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:49
msgid ""
"The output frequency for signal generator I<N>, in Hertz.  The default value "
"is 1.0 Hertz."
msgstr ""

#. type: TP
#: man/man9/siggen.9:49
#, no-wrap
msgid "B<siggen.>I<N>B<.amplitude> float in"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:54
msgid ""
"The output amplitude for signal generator I<N>.  If B<offset> is zero, the "
"outputs will swing from -B<amplitude> to +B<amplitude>.  The default value "
"is 1.00."
msgstr ""

#. type: TP
#: man/man9/siggen.9:54
#, no-wrap
msgid "B<siggen.>I<N>B<.offset> float in"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:58
msgid ""
"The output offset for signal generator I<N>.  This value is added directly "
"to the output signal.  The default value is zero."
msgstr ""

#. type: TP
#: man/man9/siggen.9:58
#, no-wrap
msgid "B<siggen.>I<N>B<.reset> bit in"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:66
#, no-wrap
msgid ""
"Resets output pins to pretermined states:\n"
"  sine      0\n"
"  sawtooth  0\n"
"  square   -1 * amplitude\n"
"  cosine   -1 * amplitude\n"
"  triangle -1 * amplitude\n"
msgstr ""

#. type: TP
#: man/man9/siggen.9:66
#, no-wrap
msgid "B<siggen.>I<N>B<.clock> bit out"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:70
msgid ""
"The clock output.  Bit type clock signal output at the commanded frequency."
msgstr ""

#. type: TP
#: man/man9/siggen.9:70
#, no-wrap
msgid "B<siggen.>I<N>B<.square> float out"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:74
msgid ""
"The square wave output.  Positive while B<triangle> and B<cosine> are "
"ramping upwards, and while B<sine> is negative."
msgstr ""

#. type: TP
#: man/man9/siggen.9:74
#, no-wrap
msgid "B<siggen.>I<N>B<.sine> float out"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:77
msgid "The sine output.  Lags B<cosine> by 90 degrees."
msgstr ""

#. type: TP
#: man/man9/siggen.9:77
#, no-wrap
msgid "B<siggen.>I<N>B<.cosine> float out"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:80
msgid "The cosine output.  Leads B<sine> by 90 degrees."
msgstr ""

#. type: TP
#: man/man9/siggen.9:80
#, no-wrap
msgid "B<siggen.>I<N>B<.triangle> float out"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:85
msgid ""
"The triangle wave output.  Ramps up while B<square> is positive, and down "
"while B<square> is negative.  Reaches its positive and negative peaks at the "
"same time as B<cosine>."
msgstr ""

#. type: TP
#: man/man9/siggen.9:85
#, no-wrap
msgid "B<siggen.>I<N>B<.sawtooth> float out"
msgstr ""

#. type: Plain text
#: man/man9/siggen.9:91
msgid ""
"The sawtooth output.  Ramps upwards to its positive peak, then instantly "
"drops to its negative peak and starts ramping again.  The drop occurs when "
"B<triangle> and B<cosine> are at their positive peaks, and coincides with "
"the falling edge of B<square>."
msgstr ""

#. type: TH
#: man/man9/sim_axis_hardware.9:9
#, no-wrap
msgid "SIM_AXIS_HARDWARE"
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:13
msgid "sim_axis_hardware - A component to simulate home and limit switches"
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:16
msgid ""
"B<loadrt sim_axis_hardware [count=>I<N>B<|names=>I<name1>B<[,>I<name2..."
">B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:20
msgid ""
"This component creates simulated home and limit switches based on the "
"current position."
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:22
msgid ""
"It currently can supply simulation for X, tandem X, Y, tandem Y, Z, U, V, "
"and A axes."
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:25
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.update> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:29
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xcurrent-pos> float in "
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:32
msgid "The current position on the axis - eg connect to joint.0.motor-pos-fb"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:32
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2current-pos> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:36
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ycurrent-pos> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:40
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2current-pos> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:44
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zcurrent-pos> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:48
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Acurrent-pos> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:52
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ucurrent-pos> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:56
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vcurrent-pos> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:60
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xhomesw-pos> float in (default: I<1>)"
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:63
msgid "The position of the home switch"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:63
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2homesw-pos> float in (default: I<1>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:67
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Yhomesw-pos> float in (default: I<1>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:71
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2homesw-pos> float in (default: I<1>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:75
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zhomesw-pos> float in (default: I<1>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:79
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ahomesw-pos> float in (default: I<1>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:83
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Uhomesw-pos> float in (default: I<1>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:87
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vhomesw-pos> float in (default: I<1>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:91
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xmaxsw-upper> float in "
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:94
msgid "The upper range of the maximum limit switch, above this is false."
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:94
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2maxsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:98
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ymaxsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:102
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2maxsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:106
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zmaxsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:110
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Amaxsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:114
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Umaxsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:118
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vmaxsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:122
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xmaxsw-lower> float in "
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:125
msgid "The lower range of the maximum limit switch, below this is false."
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:125
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2maxsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:129
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ymaxsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:133
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2maxsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:137
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zmaxsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:141
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Amaxsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:145
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Umaxsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:149
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vmaxsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:153
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xminsw-upper> float in "
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:156
msgid "The upper range of the minimum limit switch, above this is false."
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:156
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2minsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:160
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Yminsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:164
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2minsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:168
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zminsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:172
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Aminsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:176
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Uminsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:180
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vminsw-upper> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:184
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xminsw-lower> float in "
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:187
msgid "The lower range of the minimum limit switch, below this is false."
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:187
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2minsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:191
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Yminsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:195
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2minsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:199
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zminsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:203
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Aminsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:207
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Uminsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:211
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vminsw-lower> float in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:215
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xhomesw-hyst> float in (default: I<.025>)"
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:218
msgid "range that home switch will be true +- half this to the home position"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:218
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2homesw-hyst> float in (default: I<.025>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:222
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Yhomesw-hyst> float in (default: I<.025>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:226
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2homesw-hyst> float in (default: I<.025>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:230
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zhomesw-hyst> float in (default: I<.025>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:234
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ahomesw-hyst> float in (default: I<.025>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:238
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Uhomesw-hyst> float in (default: I<.025>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:242
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vhomesw-hyst> float in (default: I<.025>)"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:246
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xhoming> bit in "
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:249
msgid "True is homing in progress"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:249
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2homing> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:253
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Yhoming> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:257
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2homing> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:261
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zhoming> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:265
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ahoming> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:269
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Uhoming> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:273
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vhoming> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:277
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xhomesw-out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:280
msgid "Home switch for the X axis"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:280
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:284
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Yhomesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:288
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:292
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zhomesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:296
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ahomesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:300
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Uhomesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:304
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vhomesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:308
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.homesw-all> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:312
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xmaxsw-out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:315
msgid "Max limit switch"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:315
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xminsw-out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:318
msgid "min limit switch"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:318
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xbothsw-out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:321
msgid "True for both max and min limit switch"
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:321
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2maxsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:325
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2minsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:329
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2bothsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:333
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ymaxsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:337
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Yminsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:341
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ybothsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:345
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2maxsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:349
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2minsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:353
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2bothsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:357
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zmaxsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:361
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zminsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:365
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zbothsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:369
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Amaxsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:373
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Aminsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:377
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Abothsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:381
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Umaxsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:385
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Uminsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:389
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ubothsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:393
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vmaxsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:397
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vminsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:401
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vbothsw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:405
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.limitsw-all> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:409
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.limitsw-homesw-all> bit out "
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:412
msgid "True for all limits and all home."
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:412
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xmaxsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:416
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xminsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:420
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Xbothsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:424
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2maxsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:428
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2minsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:432
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.X2bothsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:436
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ymaxsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:440
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Yminsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:444
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ybothsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:448
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2maxsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:452
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2minsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:456
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Y2bothsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:460
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zmaxsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:464
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zminsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:468
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Zbothsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:472
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Amaxsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:476
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Aminsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:480
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Abothsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:484
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Umaxsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:488
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Uminsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:492
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Ubothsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:496
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vmaxsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:500
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vminsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:504
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.Vbothsw-homesw-out> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_axis_hardware.9:508
#, no-wrap
msgid "B<sim-axis-hardware.>I<N>B<.limit-offset> float in (default: I<.01>)"
msgstr ""

#. type: Plain text
#: man/man9/sim_axis_hardware.9:511
msgid ""
"how much the limit switches are offset from inputted position. added to max, "
"subtracted from min"
msgstr ""

#. type: TH
#: man/man9/sim_encoder.9:1
#, no-wrap
msgid "SIM_ENCODER"
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:5
msgid "sim_encoder - simulated quadrature encoder"
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:7
msgid ""
"B<loadrt sim_encoder [num_chan=>I<num>B< | names=>I<name1>B<[,>I<name2..."
">B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:16
msgid ""
"B<sim_encoder> can generate quadrature signals as if from an encoder.  It "
"also generates an index pulse once per revolution.  It is mostly used for "
"testing and simulation, to replace hardware that may not be available.  It "
"has a limited maximum frequency, as do all software based pulse generators."
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:22
msgid ""
"B<sim_encoder> supports a maximum of eight channels.  The number of channels "
"actually loaded is set by the B<num_chan=> argument when the module is "
"loaded.  Alternatively, specify B<names=> and unique names separated by "
"commas."
msgstr ""

#. type: TP
#: man/man9/sim_encoder.9:29
#, no-wrap
msgid "B<sim-encoder.make-pulses> (no floating-point)"
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:34
msgid ""
"Generates the actual quadrature and index pulses.  Must be called as "
"frequently as possible, to maximize the count rate and minimize jitter.  "
"Operates on all channels at once."
msgstr ""

#. type: TP
#: man/man9/sim_encoder.9:34
#, no-wrap
msgid "B<sim-encoder.update-speed> (uses floating-point)"
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:41
msgid ""
"Reads the B<speed> command and other parameters and converts the data into a "
"form that can be used by B<make-pulses>.  Changes take effect only when "
"B<update-speed> runs.  Can (and should) be called less frequently than "
"B<make-pulses>.  Operates on all channels at once."
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:46
#, no-wrap
msgid ""
"The names for pins and parameters are prefixed as:\n"
"  B<sim-encoder.N.> for N=0,1,...,num-1 when using B<num_chan=num>\n"
"  B<nameN.> for nameN=name1,name2,... when using B<names=name1,name2,...>\n"
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:48
msgid "The B<sim-encoder.N.> format is shown in the following descriptions."
msgstr ""

#. type: TP
#: man/man9/sim_encoder.9:52
#, no-wrap
msgid "B<sim-encoder.>I<N>B<.phase-A> bit out"
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:55
msgid "One of the quadrature outputs."
msgstr ""

#. type: TP
#: man/man9/sim_encoder.9:55
#, no-wrap
msgid "B<sim-encoder.>I<N>B<.phase-B> bit out"
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:58
msgid "The other quadrature output."
msgstr ""

#. type: TP
#: man/man9/sim_encoder.9:58
#, no-wrap
msgid "B<sim-encoder.>I<N>B<.phase-Z> bit out"
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:61
msgid "The index pulse."
msgstr ""

#. type: TP
#: man/man9/sim_encoder.9:61
#, no-wrap
msgid "B<sim-encoder.>I<N>B<.speed> float in"
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:66
msgid ""
"The desired speed of the encoder, in user units per per second.  This is "
"divided by B<scale>, and the result is used as the encoder speed in "
"revolutions per second."
msgstr ""

#. type: TP
#: man/man9/sim_encoder.9:68
#, no-wrap
msgid "B<sim-encoder.>I<N>B<.ppr> u32 rw"
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:74
msgid ""
"The pulses per revolution of the simulated encoder.  Note that this is "
"pulses, not counts, per revolution (ppr).  Each pulse or cycle from the "
"encoder results in four counts, because every edge is counted.  Default "
"value is 100 ppr, or 400 counts per revolution."
msgstr ""

#. type: TP
#: man/man9/sim_encoder.9:74
#, no-wrap
msgid "B<sim-encoder.>I<N>B<.scale> float rw"
msgstr ""

#. type: Plain text
#: man/man9/sim_encoder.9:81
msgid ""
"Scale factor for the B<speed> input.  The B<speed> value is divided by "
"B<scale> to get the actual encoder speed in revolutions per second.  For "
"example, if B<scale> is set to 60, then B<speed> is in revolutions per "
"minute (RPM) instead of revolutions per second.  The default value is 1.00."
msgstr ""

#. type: TH
#: man/man9/sim_home_switch.9:9
#, no-wrap
msgid "SIM_HOME_SWITCH"
msgstr ""

#. type: Plain text
#: man/man9/sim_home_switch.9:13
msgid "sim_home_switch - Home switch simulator"
msgstr ""

#. type: Plain text
#: man/man9/sim_home_switch.9:16
msgid ""
"B<loadrt sim_home_switch [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/sim_home_switch.9:24
msgid ""
"After tripping home switch, travel in opposite direction is required (amount "
"set by the hysteresis pin).  A pin (index-enable) is provided for use when "
"B<[JOINT_n]HOME_USE_INDEX> is specified to reset the I/O pin B<joint.N.index-"
"enable>."
msgstr ""

#. type: TP
#: man/man9/sim_home_switch.9:26
#, no-wrap
msgid "B<sim-home-switch.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/sim_home_switch.9:30
#, no-wrap
msgid "B<sim-home-switch.>I<N>B<.cur-pos> float in "
msgstr ""

#. type: Plain text
#: man/man9/sim_home_switch.9:33
msgid "Current position (typically: joint.n.motor-pos-fb)"
msgstr ""

#. type: TP
#: man/man9/sim_home_switch.9:33
#, no-wrap
msgid "B<sim-home-switch.>I<N>B<.home-pos> float in (default: I<1>)"
msgstr ""

#. type: Plain text
#: man/man9/sim_home_switch.9:36
msgid "Home switch position"
msgstr ""

#. type: TP
#: man/man9/sim_home_switch.9:36
#, no-wrap
msgid "B<sim-home-switch.>I<N>B<.hysteresis> float in (default: I<0.1>)"
msgstr ""

#. type: Plain text
#: man/man9/sim_home_switch.9:39
msgid "Travel required to backoff (hysteresis)"
msgstr ""

#. type: TP
#: man/man9/sim_home_switch.9:39
#, no-wrap
msgid "B<sim-home-switch.>I<N>B<.home-sw> bit out "
msgstr ""

#. type: Plain text
#: man/man9/sim_home_switch.9:42
msgid "Home switch activated"
msgstr ""

#. type: TP
#: man/man9/sim_home_switch.9:42
#, no-wrap
msgid "B<sim-home-switch.>I<N>B<.index-enable> bit io "
msgstr ""

#. type: Plain text
#: man/man9/sim_home_switch.9:45
msgid "typ: connect to joint.N.index-enable"
msgstr ""

#. type: TP
#: man/man9/sim_home_switch.9:45
#, no-wrap
msgid "B<sim-home-switch.>I<N>B<.index-delay-ms> float in (default: I<10>)"
msgstr ""

#. type: Plain text
#: man/man9/sim_home_switch.9:48
msgid "delay in msec to reset index-enable"
msgstr ""

#. type: TH
#: man/man9/sim_matrix_kb.9:9
#, no-wrap
msgid "SIM_MATRIX_KB"
msgstr ""

#. type: Plain text
#: man/man9/sim_matrix_kb.9:13
msgid "sim_matrix_kb - convert HAL pin inputs to keycodes"
msgstr ""

#. type: Plain text
#: man/man9/sim_matrix_kb.9:16
msgid ""
"B<loadrt sim_matrix_kb [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/sim_matrix_kb.9:17
#, no-wrap
msgid "B<sim-matrix-kb.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/sim_matrix_kb.9:21
#, no-wrap
msgid "B<sim-matrix-kb.>I<N>B<.out> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/sim_matrix_kb.9:24
msgid "pin that outputs the Keycode"
msgstr ""

#. type: TP
#: man/man9/sim_matrix_kb.9:24
#, no-wrap
msgid "B<sim-matrix-kb.>I<N>B<.button.c00.r>I<MM> bit in (MM=00..07) "
msgstr ""

#. type: Plain text
#: man/man9/sim_matrix_kb.9:27 man/man9/sim_matrix_kb.9:30
#: man/man9/sim_matrix_kb.9:33 man/man9/sim_matrix_kb.9:36
#: man/man9/sim_matrix_kb.9:39 man/man9/sim_matrix_kb.9:42
#: man/man9/sim_matrix_kb.9:45 man/man9/sim_matrix_kb.9:48
msgid "array of inputs"
msgstr ""

#. type: TP
#: man/man9/sim_matrix_kb.9:27
#, no-wrap
msgid "B<sim-matrix-kb.>I<N>B<.button.c01.r>I<MM> bit in (MM=00..07) "
msgstr ""

#. type: TP
#: man/man9/sim_matrix_kb.9:30
#, no-wrap
msgid "B<sim-matrix-kb.>I<N>B<.button.c02.r>I<MM> bit in (MM=00..07) "
msgstr ""

#. type: TP
#: man/man9/sim_matrix_kb.9:33
#, no-wrap
msgid "B<sim-matrix-kb.>I<N>B<.button.c03.r>I<MM> bit in (MM=00..07) "
msgstr ""

#. type: TP
#: man/man9/sim_matrix_kb.9:36
#, no-wrap
msgid "B<sim-matrix-kb.>I<N>B<.button.c04.r>I<MM> bit in (MM=00..07) "
msgstr ""

#. type: TP
#: man/man9/sim_matrix_kb.9:39
#, no-wrap
msgid "B<sim-matrix-kb.>I<N>B<.button.c05.r>I<MM> bit in (MM=00..07) "
msgstr ""

#. type: TP
#: man/man9/sim_matrix_kb.9:42
#, no-wrap
msgid "B<sim-matrix-kb.>I<N>B<.button.c06.r>I<MM> bit in (MM=00..07) "
msgstr ""

#. type: TP
#: man/man9/sim_matrix_kb.9:45
#, no-wrap
msgid "B<sim-matrix-kb.>I<N>B<.button.c07.r>I<MM> bit in (MM=00..07) "
msgstr ""

#. type: TH
#: man/man9/sim_parport.9:9
#, no-wrap
msgid "SIM_PARPORT"
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:13
msgid ""
"sim_parport - A component to simulate the pins of the hal_parport component"
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:16
msgid ""
"B<loadrt sim_parport [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:21
msgid ""
"Sim_parport is used to replace the pins of a real parport without changing "
"any of the pins names in the rest of the config."
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:23
msgid ""
"It has pass-through pins (ending in -fake) that allows connecting to other "
"components."
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:25
msgid "eg pin-02-in will follow pin-02-in-fake 's logic."
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:27
msgid ""
"pin_01_out-fake will follow pin_01_out (possibly modified by pin_01_out-"
"invert)"
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:29
msgid ""
"It creates all possible pins of both 'in' and 'out' options of the "
"hal_parport component."
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:31
msgid ""
"This allows using other hardware I/O in place of the parport (without having "
"to change the rest of the config)"
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:33
msgid "or simulating hardware such as limit switches."
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:35
msgid "it's primary use is in Stepconf for building simulated configs."
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:37
msgid "You must use the names= option to have the right pin names."
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:39
msgid "eg. names=parport.0,parport.1"
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:41
msgid ""
"The read and write functions pass the logic from pins to fake pins or vice "
"vera"
msgstr ""

#. type: Plain text
#: man/man9/sim_parport.9:43
msgid "The reset function is a no operation."
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:46
#, no-wrap
msgid "B<sim-parport.>I<N>B<.read>"
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:49
#, no-wrap
msgid "B<sim-parport.>I<N>B<.write>"
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:52
#, no-wrap
msgid "B<sim-parport.>I<N>B<.reset>"
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:56
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-01-out> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:60
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-02-out> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:64
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-03-out> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:68
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-04-out> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:72
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-05-out> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:76
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-06-out> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:80
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-07-out> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:84
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-08-out> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:88
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-09-out> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:92
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-14-out> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:96
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-16-out> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:100
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-17-out> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:104
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-01-out-fake> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:108
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-02-out-fake> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:112
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-03-out-fake> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:116
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-04-out-fake> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:120
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-05-out-fake> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:124
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-06-out-fake> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:128
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-07-out-fake> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:132
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-08-out-fake> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:136
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-09-out-fake> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:140
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-14-out-fake> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:144
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-16-out-fake> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:148
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-17-out-fake> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:152
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-02-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:156
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-03-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:160
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-04-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:164
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-05-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:168
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-06-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:172
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-07-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:176
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-08-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:180
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-09-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:184
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-10-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:188
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-11-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:192
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-12-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:196
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-13-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:200
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-15-in> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:204
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-02-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:208
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-03-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:212
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-04-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:216
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-05-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:220
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-06-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:224
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-07-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:228
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-08-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:232
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-09-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:236
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-10-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:240
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-11-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:244
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-12-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:248
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-13-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:252
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-15-in-fake> bit in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:256
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-02-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:260
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-03-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:264
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-04-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:268
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-05-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:272
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-06-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:276
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-07-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:280
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-08-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:284
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-09-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:288
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-10-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:292
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-11-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:296
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-12-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:300
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-13-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:304
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-15-in-not> bit out "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:308
#, no-wrap
msgid "B<sim-parport.>I<N>B<.reset-time> float in "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:311
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-01-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:315
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-02-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:319
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-03-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:323
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-04-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:327
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-05-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:331
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-06-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:335
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-07-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:339
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-08-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:343
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-09-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:347
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-14-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:351
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-16-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:355
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-17-out-invert> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:359
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-01-out-reset> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:363
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-02-out-reset> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:367
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-03-out-reset> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:371
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-04-out-reset> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:375
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-05-out-reset> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:379
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-06-out-reset> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:383
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-07-out-reset> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:387
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-08-out-reset> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:391
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-09-out-reset> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:395
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-14-out-reset> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:399
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-16-out-reset> bit rw "
msgstr ""

#. type: TP
#: man/man9/sim_parport.9:403
#, no-wrap
msgid "B<sim-parport.>I<N>B<.pin-17-out-reset> bit rw "
msgstr ""

#. type: TH
#: man/man9/simple_tp.9:9
#, no-wrap
msgid "SIMPLE_TP"
msgstr ""

#. type: Plain text
#: man/man9/simple_tp.9:13
msgid ""
"simple_tp - This component is a single axis simple trajectory planner, same "
"as used for jogging in linuxcnc."
msgstr ""

#. type: Plain text
#: man/man9/simple_tp.9:15
msgid ""
"Used by PNCconf to allow testing of acceleration and velocity values for an "
"axis."
msgstr ""

#. type: TP
#: man/man9/simple_tp.9:16
#, no-wrap
msgid "B<simple-tp.>I<N>B<.update> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/simple_tp.9:20
#, no-wrap
msgid "B<simple-tp.>I<N>B<.target-pos> float in "
msgstr ""

#. type: Plain text
#: man/man9/simple_tp.9:23
msgid "target position to plan for."
msgstr ""

#. type: TP
#: man/man9/simple_tp.9:23
#, no-wrap
msgid "B<simple-tp.>I<N>B<.maxvel> float in "
msgstr ""

#. type: TP
#: man/man9/simple_tp.9:26
#, no-wrap
msgid "B<simple-tp.>I<N>B<.maxaccel> float in "
msgstr ""

#. type: Plain text
#: man/man9/simple_tp.9:29
msgid "Acceleration rate"
msgstr ""

#. type: TP
#: man/man9/simple_tp.9:29
#, no-wrap
msgid "B<simple-tp.>I<N>B<.enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/simple_tp.9:32
msgid "If disabled, planner sets velocity to zero immediately."
msgstr ""

#. type: TP
#: man/man9/simple_tp.9:32
#, no-wrap
msgid "B<simple-tp.>I<N>B<.current-pos> float out "
msgstr ""

#. type: Plain text
#: man/man9/simple_tp.9:35
msgid "position commanded at this point in time."
msgstr ""

#. type: TP
#: man/man9/simple_tp.9:35
#, no-wrap
msgid "B<simple-tp.>I<N>B<.current-vel> float out "
msgstr ""

#. type: Plain text
#: man/man9/simple_tp.9:38
msgid "velocity commanded at this moment in time."
msgstr ""

#. type: TP
#: man/man9/simple_tp.9:38
#, no-wrap
msgid "B<simple-tp.>I<N>B<.active> bit out "
msgstr ""

#. type: Plain text
#: man/man9/simple_tp.9:41
msgid "if active is true, the planner is requesting movement."
msgstr ""

#. type: TH
#: man/man9/sim_spindle.9:9
#, no-wrap
msgid "SIM_SPINDLE"
msgstr ""

#. type: Plain text
#: man/man9/sim_spindle.9:13
msgid "sim_spindle - Simulated spindle with index pulse"
msgstr ""

#. type: Plain text
#: man/man9/sim_spindle.9:16
msgid ""
"B<loadrt sim_spindle [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/sim_spindle.9:17
#, no-wrap
msgid "B<sim-spindle.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/sim_spindle.9:21
#, no-wrap
msgid "B<sim-spindle.>I<N>B<.velocity-cmd> float in "
msgstr ""

#. type: Plain text
#: man/man9/sim_spindle.9:24
msgid "Commanded speed"
msgstr ""

#. type: TP
#: man/man9/sim_spindle.9:24
#, no-wrap
msgid "B<sim-spindle.>I<N>B<.position-fb> float out "
msgstr ""

#. type: Plain text
#: man/man9/sim_spindle.9:27
msgid "Feedback position, in revolutions"
msgstr ""

#. type: TP
#: man/man9/sim_spindle.9:27
#, no-wrap
msgid "B<sim-spindle.>I<N>B<.index-enable> bit io "
msgstr ""

#. type: Plain text
#: man/man9/sim_spindle.9:30
msgid "Reset B<position-fb> to 0 at the next full rotation"
msgstr ""

#. type: TP
#: man/man9/sim_spindle.9:31
#, no-wrap
msgid "B<sim-spindle.>I<N>B<.scale> float rw (default: I<1.0>)"
msgstr ""

#. type: Plain text
#: man/man9/sim_spindle.9:34
msgid "factor applied to B<velocity-cmd>."
msgstr ""

#. type: Plain text
#: man/man9/sim_spindle.9:37
msgid ""
"The result of 'B<velocity-cmd> * B<scale>' be in revolutions per second.  "
"For example, if B<velocity-cmd> is in revolutions/minute, B<scale> should be "
"set to 1/60 or 0.016666667."
msgstr ""

#. type: TH
#: man/man9/sphereprobe.9:9
#, no-wrap
msgid "SPHEREPROBE"
msgstr ""

#. type: Plain text
#: man/man9/sphereprobe.9:13
msgid "sphereprobe - Probe a pretend hemisphere"
msgstr ""

#. type: Plain text
#: man/man9/sphereprobe.9:16
msgid ""
"B<loadrt sphereprobe [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/sphereprobe.9:17
#, no-wrap
msgid "B<sphereprobe.>I<N>"
msgstr ""

#. type: Plain text
#: man/man9/sphereprobe.9:20
msgid "update probe-out based on inputs"
msgstr ""

#. type: TP
#: man/man9/sphereprobe.9:21
#, no-wrap
msgid "B<sphereprobe.>I<N>B<.px> s32 in "
msgstr ""

#. type: TP
#: man/man9/sphereprobe.9:25
#, no-wrap
msgid "B<sphereprobe.>I<N>B<.py> s32 in "
msgstr ""

#. type: TP
#: man/man9/sphereprobe.9:29
#, no-wrap
msgid "B<sphereprobe.>I<N>B<.pz> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/sphereprobe.9:32
msgid "B<rawcounts> position from software encoder"
msgstr ""

#. type: TP
#: man/man9/sphereprobe.9:32
#, no-wrap
msgid "B<sphereprobe.>I<N>B<.cx> s32 in "
msgstr ""

#. type: TP
#: man/man9/sphereprobe.9:36
#, no-wrap
msgid "B<sphereprobe.>I<N>B<.cy> s32 in "
msgstr ""

#. type: TP
#: man/man9/sphereprobe.9:40
#, no-wrap
msgid "B<sphereprobe.>I<N>B<.cz> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/sphereprobe.9:43
msgid "Center of sphere in counts"
msgstr ""

#. type: TP
#: man/man9/sphereprobe.9:43
#, no-wrap
msgid "B<sphereprobe.>I<N>B<.r> s32 in "
msgstr ""

#. type: Plain text
#: man/man9/sphereprobe.9:46
msgid "Radius of hemisphere in counts"
msgstr ""

#. type: TP
#: man/man9/sphereprobe.9:46
#, no-wrap
msgid "B<sphereprobe.>I<N>B<.probe-out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:13
msgid ""
"spindle - Control a spindle with different acceleration and deceleration and "
"optional gear change scaling"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:16
msgid "B<loadrt spindle [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:20
msgid ""
"This component will control a spindle with adjustable acceleration and "
"deceleration."
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:26
#, no-wrap
msgid ""
" NOTE: This component is unfortunately named and creates pins with\n"
" names very much like those created by the motion component\n"
" In nearly every case this is not the documentation page that you are\n"
" looking for. See\n"
" http://linuxcnc.org/docs/html/man/man9/motion.9.html instead.\n"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:34
msgid ""
"It is designed for use with non-servo spindle drives that have separate fwd/"
"reverse inputs, such as DC drives and inverters.  If a spindle encoder is "
"available it is used to tailor the acceleration and deceleration to the "
"spindle load.  If not the spindle speed is simulated. The component allows "
"for gearboxes with up to 16 gears. Each gear has individual control of "
"speeds, acceleration, driver gain and direction."
msgstr ""

#. type: TP
#: man/man9/spindle.9:35
#, no-wrap
msgid "B<spindle.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/spindle.9:39
#, no-wrap
msgid "B<spindle.>I<N>B<.select-gear> u32 in "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:43
msgid ""
"Select a gear. Must be in the range 0 -E<gt> number of available gears -1.  "
"If you use this, do not use the select.x input pins."
msgstr ""

#. type: TP
#: man/man9/spindle.9:43
#, no-wrap
msgid "B<spindle.>I<N>B<.commanded-speed> float in "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:46
msgid "Commanded spindle speed (in RPM)"
msgstr ""

#. type: TP
#: man/man9/spindle.9:46
#, no-wrap
msgid "B<spindle.>I<N>B<.actual-speed> float in "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:51
msgid ""
"Actual spindle speed from a spindle encoder (in RPS)  If you do not have a "
"spindle encoder set the simulate_encoder parameter to 1"
msgstr ""

#. type: TP
#: man/man9/spindle.9:51
#, no-wrap
msgid "B<spindle.>I<N>B<.simulate-encoder> bit in "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:54
msgid "If you do not have an encoder, set this to 1"
msgstr ""

#. type: TP
#: man/man9/spindle.9:54
#, no-wrap
msgid "B<spindle.>I<N>B<.enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:57
msgid "If FALSE, the spindle is stopped at the gear's maximum deceleration"
msgstr ""

#. type: TP
#: man/man9/spindle.9:57
#, no-wrap
msgid "B<spindle.>I<N>B<.spindle-lpf> float in "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:61
msgid ""
"Smooth the spindle-rpm-abs output when at speed. 0 = disabled.  Suitable "
"values are probably between 1 and 20 depending on how stable your spindle is"
msgstr ""

#. type: TP
#: man/man9/spindle.9:61
#, no-wrap
msgid "B<spindle.>I<N>B<.spindle-rpm> float out "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:65
msgid ""
"Current spindle speed in RPM.+ve = forward, -ve = reverse.  Uses the encoder "
"input if available. If not, uses a simulated encoder speed."
msgstr ""

#. type: TP
#: man/man9/spindle.9:65
#, no-wrap
msgid "B<spindle.>I<N>B<.spindle-rpm-abs> float out "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:68
msgid "Absolute spindle speed in RPM. Useful for spindle speed displays"
msgstr ""

#. type: TP
#: man/man9/spindle.9:68
#, no-wrap
msgid "B<spindle.>I<N>B<.output> float out "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:71
msgid "Scaled output"
msgstr ""

#. type: TP
#: man/man9/spindle.9:71
#, no-wrap
msgid "B<spindle.>I<N>B<.current-gear> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:74
msgid "Currently selected gear."
msgstr ""

#. type: TP
#: man/man9/spindle.9:74
#, no-wrap
msgid "B<spindle.>I<N>B<.at-speed> bit out "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:77
msgid "TRUE when the spindle is at speed"
msgstr ""

#. type: TP
#: man/man9/spindle.9:77
#, no-wrap
msgid "B<spindle.>I<N>B<.forward> bit out "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:80
msgid "TRUE for forward rotation"
msgstr ""

#. type: TP
#: man/man9/spindle.9:80
#, no-wrap
msgid "B<spindle.>I<N>B<.reverse> bit out "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:83
msgid ""
"TRUE for reverse rotation. Both forward and reverse are false when the "
"spindle is stopped."
msgstr ""

#. type: TP
#: man/man9/spindle.9:83
#, no-wrap
msgid "B<spindle.>I<N>B<.brake> bit out "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:86
msgid "TRUE when decelerating"
msgstr ""

#. type: TP
#: man/man9/spindle.9:86
#, no-wrap
msgid "B<spindle.>I<N>B<.zero-speed> bit out "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:89
msgid "TRUE when the spindle is stationary"
msgstr ""

#. type: TP
#: man/man9/spindle.9:89
#, no-wrap
msgid "B<spindle.>I<N>B<.limited> bit out "
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:92
msgid "TRUE when the commanded spindle speed is E<gt>max or E<lt>min."
msgstr ""

#. type: TP
#: man/man9/spindle.9:95
#, no-wrap
msgid "B<The following pins are created depending the 'gears=' parameter.>"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:102
#, no-wrap
msgid ""
"One of each pin is created for each gear. If no gears are specified then one\n"
"gear will be created. For instance if you have gears=1 on your command line,\n"
"you will have  two scale pins:\n"
" B<spindle.>I<N>B<.scale.0>I<\n"
" >B<spindle.>I<N>B<.scale.1>\n"
msgstr ""

#. type: TP
#: man/man9/spindle.9:103
#, no-wrap
msgid "B<spindle.>I<N>B<.scale.>I<x float in>"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:107
msgid ""
"Scale the output. For multiple gears you would use a different scale for "
"each gear. If you need to reverse the output for some gears, use a negative "
"scale."
msgstr ""

#. type: TP
#: man/man9/spindle.9:108
#, no-wrap
msgid "B<spindle.>I<N>B<.min.>I<x float in>"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:112
msgid ""
"Set the minimum speed allowed (in RPM). The limit output will be TRUE while "
"the commanded speed is between 0 RPM and the min speed."
msgstr ""

#. type: TP
#: man/man9/spindle.9:113
#, no-wrap
msgid "B<spindle.>I<N>B<.max.>I<x float in>"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:117
msgid ""
"Set the maximum speed allowed (in RPM). The limit output will be TRUE while "
"the commanded speed is above this value"
msgstr ""

#. type: TP
#: man/man9/spindle.9:118
#, no-wrap
msgid "B<spindle.>I<N>B<.accel.>I<x float in>"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:123
msgid ""
"Set the maximum acceleration. If you do not have a spindle encoder this is "
"in RPM/second. If you do have an encoder the output is the actual speed plus "
"this value. This way the acceleration can be dependent on the spindle load."
msgstr ""

#. type: TP
#: man/man9/spindle.9:124
#, no-wrap
msgid "B<spindle.>I<N>B<.decel.>I<x float in>"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:129
msgid ""
"Set the minimum deceleration. If you do not have a spindle encoder this is "
"in RPM/second. If you do have an encoder the output is the actual speed "
"minus this value."
msgstr ""

#. type: TP
#: man/man9/spindle.9:130
#, no-wrap
msgid "B<spindle.>I<N>B<.speed-tolerance.>I<x float in>"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:134
msgid ""
"Tolerance for 'at-speed' signal (in RPM). Actual spindle speeds within this "
"amount of the commanded speed will cause the at-speed signal to go TRUE."
msgstr ""

#. type: TP
#: man/man9/spindle.9:135
#, no-wrap
msgid "B<spindle.>I<N>B<.zero-tolerance.>I<x float in>"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:138
msgid "Tolerance for 'zero-speed' signal (in RPM)."
msgstr ""

#. type: TP
#: man/man9/spindle.9:139
#, no-wrap
msgid "B<spindle.>I<N>B<.offset.>I<x float in>"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:142
msgid "The output command is offset by this amount (in RPM)."
msgstr ""

#. type: TP
#: man/man9/spindle.9:143
#, no-wrap
msgid "B<spindle.>I<N>B<.select.>I<x bit in>"
msgstr ""

#. type: Plain text
#: man/man9/spindle.9:147
msgid ""
"Selects this gear. If no select inputs are active, gear 0 is selected. If "
"multiple select inputs are active the highest is selected."
msgstr ""

#. type: TH
#: man/man9/spindle_monitor.9:9
#, no-wrap
msgid "SPINDLE_MONITOR"
msgstr ""

#. type: Plain text
#: man/man9/spindle_monitor.9:13
msgid "spindle_monitor - spindle at-speed and underspeed detection"
msgstr ""

#. type: Plain text
#: man/man9/spindle_monitor.9:16
msgid ""
"B<loadrt spindle_monitor [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/spindle_monitor.9:17
#, no-wrap
msgid "B<spindle-monitor.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/spindle_monitor.9:21
#, no-wrap
msgid "B<spindle-monitor.>I<N>B<.spindle-is-on> bit in "
msgstr ""

#. type: TP
#: man/man9/spindle_monitor.9:25
#, no-wrap
msgid "B<spindle-monitor.>I<N>B<.spindle-command> float in "
msgstr ""

#. type: TP
#: man/man9/spindle_monitor.9:29
#, no-wrap
msgid "B<spindle-monitor.>I<N>B<.spindle-feedback> float in "
msgstr ""

#. type: TP
#: man/man9/spindle_monitor.9:33
#, no-wrap
msgid "B<spindle-monitor.>I<N>B<.spindle-at-speed> bit out "
msgstr ""

#. type: TP
#: man/man9/spindle_monitor.9:37
#, no-wrap
msgid "B<spindle-monitor.>I<N>B<.spindle-underspeed> bit out "
msgstr ""

#. type: TP
#: man/man9/spindle_monitor.9:40
#, no-wrap
msgid "B<spindle-monitor.>I<N>B<.level> u32 rw "
msgstr ""

#. type: Plain text
#: man/man9/spindle_monitor.9:43
msgid "state machine state"
msgstr ""

#. type: TP
#: man/man9/spindle_monitor.9:43
#, no-wrap
msgid "B<spindle-monitor.>I<N>B<.threshold> float rw "
msgstr ""

#. type: Plain text
#: man/man9/spindle_monitor.9:50
msgid "gpl v2 or higher"
msgstr ""

#. type: TH
#: man/man9/sserial.9:3
#, no-wrap
msgid "SSERIAL"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:16
msgid ""
"The Mesa Smart-Serial interface is a 2.5Mbs proprietary interface between "
"the Mesa Anything-IO cards and a range of subsidiary devices termed \"smart-"
"serial remotes\".  The remote cards perform a variety of functions, but "
"typically they combine various classes of IO.  The remote cards are self-"
"configuring, in that they tell the main LinuxCNC Hostmot2 driver what their "
"pin functions are and what they should be named."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:20
msgid ""
"Many sserial remotes offer different pinouts depending on the mode they are "
"started up in. This is set using the sserial_port_N= option in the hm2_pci "
"modparam. See the hostmot2 manpage for further details."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:22
msgid "It is likely that this documentation will be permanently out of date."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:28
msgid ""
"Each Anything-IO board can attach up to 8 sserial remotes to each header "
"(either the 5-pin headers on the 5i20/5i22/5i23/7i43 or the 25-pin "
"connectors on the 5i25, 6i25 and 7i80). The remotes are grouped into \"ports"
"\" of up to 8 \"channels\". Typically each header will be a single 8 channel "
"port, but this is not necessarily always the case."
msgstr ""

#. type: SH
#: man/man9/sserial.9:29
#, no-wrap
msgid "PORTS"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:32
msgid ""
"In addition to the per-channel/device pins detailed below there are three "
"per-port pins and three parameters."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:34 man/man9/sserial.9:101 man/man9/sserial.9:209
#: man/man9/sserial.9:238 man/man9/sserial.9:301 man/man9/sserial.9:368
#: man/man9/sserial.9:414 man/man9/sserial.9:456 man/man9/sserial.9:501
msgid "B<Pins:>"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:43
msgid ""
"(bit, in) .sserial.port-N.run: Enables the specific Smart Serial module.  "
"Setting this pin low will disable all boards on the port and puts the port "
"in a pass-through mode where device parameter setting is possible. It is "
"necessary to toggle the state of this pin if there is a requirement to alter "
"a remote parameter on a live system.  This pin defaults to TRUE and can be "
"left unconnected. However, toggling the pin low-to-high will re-enable a "
"faulted drive so the pin could usefully be connected to the iocontrol.0.user-"
"enable-out pin."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:47
msgid ""
"(u32, ro) .run_state: Shows the state of the sserial communications state-"
"machine.  This pin will generally show a value of 0x03 in normal operation, "
"0x07 in setup mode and 0x00 when the \"run\" pin is false."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:50
msgid ""
"(u32, ro) .error-count: Indicates the state of the Smart Serial error "
"handler, see the parameters sections for more details."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:52 man/man9/sserial.9:162 man/man9/sserial.9:225
#: man/man9/sserial.9:262 man/man9/sserial.9:327 man/man9/sserial.9:377
#: man/man9/sserial.9:426 man/man9/sserial.9:463 man/man9/sserial.9:523
#, no-wrap
msgid "B<Parameters:>"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:56
msgid ""
"(u32 r/w) .fault-inc: Any over-run or handshaking error in the SmartSerial "
"communications will increment the .fault-count pin by the amount specified "
"by this parameter. Default = 10."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:59
msgid ""
"(u32 r/w) .fault-dec: Every successful read/write cycle decrements the fault "
"counter by this amount. Default = 1."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:69
msgid ""
"(u32 r/w) .fault-lim: When the fault counter reaches this threshold the "
"Smart Serial interface on the corresponding port will be stopped and an "
"error printed in dmesg. Together these three pins allow for control over the "
"degree of fault- tolerance allowed in the interface. The default values mean "
"that if more than one transaction in ten fails, more than 20 times, then a "
"hard error will be raised. If the increment were to be set to zero then no "
"error would ever be raised, and the system would carry on regardless. "
"Conversely setting decrement to zero, threshold to 1 and limit to 1 means "
"that absolutely no errors will be tolerated. (This structure is copied "
"directly from vehicle ECU practice)"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:73
msgid ""
"Any other parameters than the ones above are created by the card istelf from "
"data in the remote firmware. They may be set in the HAL file using \"setp\" "
"in the usual way."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:77
msgid ""
"NOTE: Because a Smart-Serial remote can only communicate non-process data to "
"the host card in setup mode it is necessary to stop and re-start the smart-"
"serial port associated with the card to alter the value of a parameter."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:81
msgid ""
"HALSO NOTE: in the case of parameters beginning with \"nv\" (which are "
"stored in non-volatile memory) the effect will not be seen until after the "
"next power cycle of the drive."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:84
msgid ""
"Unchanged values will not be re-written so it is safe to leave the \"setp\" "
"commands in the HAL file or delete them as you see fit."
msgstr ""

#. type: SH
#: man/man9/sserial.9:85
#, no-wrap
msgid "DEVICES"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:88
msgid ""
"The other pins and parameters created in HAL depend on the devices "
"detected.  The following list of Smart Serial devices is by no means "
"exhaustive."
msgstr ""

#. type: SS
#: man/man9/sserial.9:90
#, no-wrap
msgid "8i20"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:99
msgid ""
"The 8i20 is a 2.2 kW three-phase drive for brushless DC motors and AC servo "
"motors.  8i20 pins and parameters have names like "
"\"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.8i20.I<E<lt>PortNumE<gt>>."
"I<E<lt>ChanNumE<gt>>.I<E<lt>PinE<gt>>\", for example \"hm2_5i23.0.8i20.1.3."
"current\" would set the phase current for the drive connected to the fourth "
"channel of the second sserial port of the first 5i23 board. Note that the "
"sserial ports do not necessarily correlate in layout or number to the "
"physical ports on the card."
msgstr ""

#. type: TP
#: man/man9/sserial.9:102
#, no-wrap
msgid "(float in) angle"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:113
msgid ""
"The rotor angle of the motor in fractions of a full B<phase> revolution. An "
"angle of 0.5 indicates that the motor is half a turn / 180 degrees / \\[*p] "
"radians from the zero position. The zero position is taken to be the "
"position that the motor adopts under no load with a poitive voltage applied "
"to the A (or U) phase and both B and C (or V and W) connected to -V or 0V. A "
"6 pole motor will have 3 zero positions per physical rotation. Note that the "
"8i20 drive automatically adds the phase lead/lag angle, and that this pin "
"should see the raw rotor angle. There is a HAL module (bldc) which handles "
"the complexity of differing motor and drive types."
msgstr ""

#. type: TP
#: man/man9/sserial.9:114
#, no-wrap
msgid "(float, in) current"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:119
msgid ""
"The phase current command to the drive. This is scaled from -1 to +1 for "
"forwards and reverse maximum currents. The absolute value of the current is "
"set by the max_current parameter."
msgstr ""

#. type: TP
#: man/man9/sserial.9:120
#, no-wrap
msgid "(float, ro) bus-voltage"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:124
msgid ""
"The drive bus voltage in V. This will tend to show 25.6 V when the drive is "
"unpowered and the drive will not operate below about 50 V."
msgstr ""

#. type: TP
#: man/man9/sserial.9:125
#, no-wrap
msgid "(float, ro) temp"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:128
msgid "The temperature of the driver in degrees C."
msgstr ""

#. type: TP
#: man/man9/sserial.9:129
#, no-wrap
msgid "(u32, ro) comms"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:133
msgid "The communication status of the drive. See the manual for more details."
msgstr ""

#. type: TP
#: man/man9/sserial.9:134
#, no-wrap
msgid "(bit, ro) status and fault."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:151
msgid ""
"The following fault/status bits are exported. For further details see the "
"8i20 manual.  fault.U-current / fault.U-current-not fault.V-current / fault."
"V-current-not fault.W-current / fault.W-current-not fault.bus-high / fault."
"bus-high-not fault.bus-overv / fault.bus-overv-not fault.bus-underv / fault."
"bus-underv-not fault.framingr / fault.framingr-not fault.module / fault."
"module-not fault.no-enable / fault.no-enable-not fault.overcurrent / fault."
"overcurrent-not fault.overrun / fault.overrun-not fault.overtemp / fault."
"overtemp-not fault.watchdog / fault.watchdog-not"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:161
msgid ""
"status.brake-old / status.brake-old-not status.brake-on / status.brake-on-"
"not status.bus-underv / status.bus-underv-not status.current-lim / status."
"current-lim-no status.ext-reset / status.ext-reset-not status.no-enable / "
"status.no-enable-not status.pid-on / status.pid-on-not status.sw-reset / "
"status.sw-reset-not status.wd-reset / status.wd-reset-not"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:166
msgid ""
"The following parameters are exported. See the PDF documentation "
"downloadable from Mesa for further details"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:190
#, no-wrap
msgid ""
" hm2_5i25.0.8i20.0.1.angle-maxlim\n"
" hm2_5i25.0.8i20.0.1.angle-minlim\n"
" hm2_5i25.0.8i20.0.1.angle-scalemax\n"
" hm2_5i25.0.8i20.0.1.current-maxlim\n"
" hm2_5i25.0.8i20.0.1.current-minlim\n"
" hm2_5i25.0.8i20.0.1.current-scalemax\n"
" hm2_5i25.0.8i20.0.1.nvbrakeoffv\n"
" hm2_5i25.0.8i20.0.1.nvbrakeonv\n"
" hm2_5i25.0.8i20.0.1.nvbusoverv\n"
" hm2_5i25.0.8i20.0.1.nvbusundervmax\n"
" hm2_5i25.0.8i20.0.1.nvbusundervmin\n"
" hm2_5i25.0.8i20.0.1.nvkdihi\n"
" hm2_5i25.0.8i20.0.1.nvkdil\n"
" hm2_5i25.0.8i20.0.1.nvkdilo\n"
" hm2_5i25.0.8i20.0.1.nvkdp\n"
" hm2_5i25.0.8i20.0.1.nvkqihi\n"
" hm2_5i25.0.8i20.0.1.nvkqil\n"
" hm2_5i25.0.8i20.0.1.nvkqilo\n"
" hm2_5i25.0.8i20.0.1.nvkqp\n"
" hm2_5i25.0.8i20.0.1.nvmaxcurrent\n"
" hm2_5i25.0.8i20.0.1.nvrembaudrate\n"
" hm2_5i25.0.8i20.0.1.swrevision\n"
" hm2_5i25.0.8i20.0.1.unitnumber\n"
msgstr ""

#. type: TP
#: man/man9/sserial.9:191
#, no-wrap
msgid "(float, rw) max_current"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:197
msgid ""
"Sets the maximum drive current in Amps. The default value is the maximum "
"current programmed into the drive EEPROM. The value must be positive, and an "
"error will be raised if a current in excess of the drive maximum is "
"requested."
msgstr ""

#. type: TP
#: man/man9/sserial.9:198
#, no-wrap
msgid "(u32, ro) serial_number"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:202
msgid ""
"The serial number of the connected drive. This is also shown on the label on "
"the drive."
msgstr ""

#. type: SS
#: man/man9/sserial.9:203
#, no-wrap
msgid "7i64"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:207
msgid ""
"The 7i64 is a 24-input 24-output IO card.  7i64 pins and parameters have "
"names like \"hm2_I<E<lt>BoardTypeE<gt>>.I<E<lt>BoardNumE<gt>>.7i64.  "
"E<lt>PortNumE<gt>.E<lt>ChanNumE<gt>.E<lt>PinE<gt>\", for example "
"hm2_5i23.0.7i64.1.3.output-01"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:214
msgid ""
"(bit, in) 7i64.0.0.output-NN: Writing a 1 or TRUE to this pin will enable "
"output driver NN. Note that the outputs are drivers (switches) rather than "
"voltage outputs. The LED adjacent to the connector on the board shows the "
"status.  The output can be inverted by setting a parameter."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:218
msgid ""
"(bit, out) 7i64.0.0.input-NN: The value of input NN. Note that the inputs "
"are isolated and both pins of each input must be connected (typically to "
"signal and the ground of the signal. This need not be the ground of the "
"board.)"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:220
msgid ""
"(bit, out)  7i64.0.0.input-NN-not: An inverted copy of the corresponding "
"input."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:223
msgid ""
"(float, out) 7i64.0.0.analog0 & 7i64.0.0.analog1: The two analogue inputs (0 "
"to 3.3V) on the board."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:229
msgid ""
"(bit, rw) 7i64.0.0.output-NN-invert: Setting this parameter to 1 / TRUE will "
"invert the output value, such that writing 0 to .gpio.NN.out will enable the "
"output and vice-versa."
msgstr ""

#. type: SS
#: man/man9/sserial.9:230
#, no-wrap
msgid "7i76"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:236
msgid ""
"The 7i76 is not really a smart-serial device. It serves as a breakout for a "
"number of other Hostmot2 functions. There are connections for 5 step "
"generators (for which see the main hostmot2 manpage). The stepgen pins are "
"associated with the 5i25 (hm2_5i25.0.stepgen.00....) whereas the smart-"
"serial pins are associated with the 7i76 (hm2_5i25.0.7i76.0.0.output-00)."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:240
msgid ""
"(float out) .7i76.0.0.analogN (modes 1 and 2 only) Analogue input values."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:242
msgid ""
"(float out) .7i76.0.0.fieldvoltage (mode 2 only) Field voltage monitoring "
"pin."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:245
msgid ""
"(bit in) .7i76.0.0.spindir: This pin provides a means to drive the spindle "
"VFD direction terminals on the 7i76 board."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:248
msgid ""
"(bit in) .7i76.0.0.spinena: This pin drives the spindle-enable terminals on "
"the 7i76 board."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:251
msgid ""
"(float in) .7i76.0.0.spinout: This controls the analogue output of the "
"7i76.  This is intended as a speed control signal for a VFD."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:254
msgid ""
"(bit out) .7i76.0.0.output-NN: (NN = 0 to 15). 16 digital outputs. The sense "
"of the signal can be set via a parameter"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:256
msgid "(bit out) .7i76.0.0.input-NN: (NN = 0 to 31) 32 digital inputs."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:260
msgid ""
"(bit in) .7i76.0.0.input-NN-not: (NN = 0 to 31) An inverted copy of the "
"inputs provided for convenience. The two complementary pins may be connected "
"to different signal nets."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:265
msgid ""
"(u32 ro) .7i76.0.0.nvbaudrate: Indicates the vbaud rate. This probably "
"should not be altered."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:269
msgid ""
"(u32 ro) .7i76.0.0.nvunitnumber: Indicates the serial number of the device "
"and should match a sticker on the card. This can be useful for working out "
"which card is which."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:273
msgid ""
"(u32 ro) .7i76.0.0.nvwatchdogtimeout: The sserial remote watchdog timeout. "
"This is separate from the Anything-IO card timeout. This is unlikely to need "
"to be changed."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:276
msgid ""
"(bit rw) .7i76.0.0.output-NN-invert: Invert the sense of the corresponding "
"output pin."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:278
msgid ""
"(bit rw) .7i76.0.0.spindir-invert: Invert the senseof the spindle direction "
"pin."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:280
msgid ""
"(bit rw) .7i76.0.0.spinena-invert: Invert the sense of the spindle-enable "
"pin."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:282
msgid ""
"(float rw) .7i76.0.0.spinout-maxlim: The maximum speed request allowable"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:284
msgid "(float rw) .7i76.0.0.spinout-minlim: The minimum speed request."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:290
msgid ""
"(float rw) .7i76.0.0.spinout-scalemax: The spindle speed scaling. This is "
"the speed request which would correspond to full-scale output from the "
"spindle control pin. For example with a 10V drive voltage and a 10000rpm "
"scalemax a value of 10,000 rpm on the spinout pin would produce 10V output. "
"However, if spinout-maxlim were set to 5,000 rpm then no voltage above 5V "
"would be output."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:293
msgid ""
"(u32 ro) .7i76.0.0.swrevision: The onboard firmware revision number.  "
"Utilities (man setsserial for details) exist to update and change this "
"firmware."
msgstr ""

#. type: SS
#: man/man9/sserial.9:294
#, no-wrap
msgid "7i77"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:299
msgid ""
"The 7i77 is an 6-axis servo control card. The analogue outputs are smart-"
"serial devices but the encoders are conventional hostmot2 encoders and "
"further details of them may be found in the hostmot2 manpage."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:303
msgid "(bit out) .7i77.0.0.input-NN: (NN = 0 to 31) 32 digital inputs."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:307
msgid ""
"(bit in) .7i77.0.0.input-NN-not: (NN = 0 to 31) An inverted copy of the "
"inputs provided for convenience. The two complementary pins may be connected "
"to different signal nets."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:310
msgid ""
"(bit out) .7i77.0.0.output-NN: (NN = 0 to 15). 16 digital outputs. The sense "
"of the signal can be set via a parameter"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:313
msgid ""
"(bit in) .7i77.0.0.spindir: This pin provides a means to drive the spindle "
"VFD direction terminals on the 7i76 board."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:316
msgid ""
"(bit in) .7i77.0.0.spinena: This pin drives the spindle-enable terminals on "
"the 7i76 board."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:319
msgid ""
"(float in) .7i77.0.0.spinout: This controls the analog output of the 7i77.  "
"This is intended as a speed control signal for a VFD."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:322
msgid ""
"(bit in) .7i77.0.1.analogena: This pin drives the analog enable terminals on "
"the 7i77 board."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:325
msgid ""
"(float in) .7i77.0.1.analogoutN: (N = 0 to 5) This controls the analog "
"output of the 7i77."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:330
msgid ""
"(bit rw) .7i77.0.0.output-NN-invert: Invert the sense of the corresponding "
"output pin."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:332
msgid ""
"(bit rw) .7i77.0.0.spindir-invert: Invert the sense of the spindle direction "
"pin."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:334
msgid ""
"(bit rw) .7i77.0.0.spinena-invert: Invert the sense of the spindle-enable "
"pin."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:336
msgid ""
"(float rw) .7i77.0.0.spinout-maxlim: The maximum speed request allowable"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:338
msgid "(float rw) .7i77.0.0.spinout-minlim: The minimum speed request."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:344
msgid ""
"(float rw) .7i77.0.0.spinout-scalemax: The spindle speed scaling. This is "
"the speed request which would correspond to full-scale output from the "
"spindle control pin. For example with a 10V drive voltage and a 10000rpm "
"scalemax a value of 10,000 rpm on the spinout pin would produce 10V output. "
"However, if spinout-maxlim were set to 5,000 rpm then no voltage above 5V "
"would be output."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:347
msgid ""
"(float rw) .7i77.0.0.analogoutN-maxlim: (N = 0 to 5) The maximum speed "
"request allowable"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:349
msgid ""
"(float rw) .7i77.0.0.analogoutN-minlim: (N = 0 to 5) The minimum speed "
"request."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:355
msgid ""
"(float rw) .7i77.0.0.analogoutN-scalemax: (N = 0 to 5) The analog speed "
"scaling.  This is the speed request which would correspond to full-scale "
"output from the spindle control pin. For example with a 10V drive voltage "
"and a 10000rpm scalemax a value of 10,000 rpm on the spinout pin would "
"produce 10V output. However, if spinout-maxlim were set to 5,000 rpm then no "
"voltage above 5V would be output."
msgstr ""

#. type: SS
#: man/man9/sserial.9:357
#, no-wrap
msgid "7i69"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:360
msgid ""
"The 7i69 is a 48 channel digital IO card. It can be configured in four "
"different modes:"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:366
#, no-wrap
msgid ""
" MODE 0: Bidirectional mode (48 bits in 48 bits out)\n"
" MODE 1: Input only mode (48 bits in)\n"
" MODE 2: Output only mode (48 bits out)\n"
" MODE 3: 24/24mode (24 bits in = bits 0..23 and 24 bits out = bits 24..47)\n"
" MODE 4: Bidirectional mode (48 bits in 48 bits out) plus 4 MPG encoder channels oninputs 0 through 7\n"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:371
msgid ""
"(bit in) .7i69.0.0.output-NN: Digital output. Sense can be inverted with the "
"corresponding Parameter"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:373
msgid "(bit out) .7i69.0.0.input-NN: Digital input"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:375
msgid "(bit out) .7i69.0.0.input-NN-not: Digital input, inverted."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:380
msgid ""
"(u32 ro) .7i69.0.0.nvbaudrate: Indicates the vbaud rate. This probably "
"should not be altered."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:384
msgid ""
"(u32 ro) .7i69.0.0.nvunitnumber: Indicates the serial number of the device "
"and should match a sticker on the card. This can be useful for working out "
"which card is which."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:388
msgid ""
"(u32 ro) .7i69.0.0.nvwatchdogtimeout: The sserial remote watchdog timeout. "
"This is separate from the Anything-IO card timeout. This is unlikely to need "
"to be changed."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:391
msgid ""
"(bit rw) .7i69.0.0.output-NN-invert: Invert the sense of the corresponding "
"output pin."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:394 man/man9/sserial.9:440 man/man9/sserial.9:480
msgid ""
"(u32 ro) .7i69.0.0.swrevision: The onboard firmware revision number.  "
"Utilities exist to update and change this firmware."
msgstr ""

#. type: SS
#: man/man9/sserial.9:395
#, no-wrap
msgid "7i70"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:402
msgid ""
"The 7I70 is a remote isolated 48 input card. The 7I70 inputs sense positive "
"inputs relative to a common field ground. Input impedance is 10K Ohms and "
"input voltage can range from 5VDC to 32VDC. All inputs have LED status "
"indicators.  The input common field ground is galvanically isolated from the "
"communications link."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:408
msgid ""
"The 7I70 has three software selectable modes. These different modes select "
"different sets of 7I70 data to be transferred between the host and the 7I70 "
"during real time process data exchanges. For high speed applications, "
"choosing the correct mode can reduced the data transfer sizes, resulting in "
"higher maximum update rates."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:412
#, no-wrap
msgid ""
" MODE 0: Input mode (48 bits input data only\n"
" MODE 1: Input plus analog mode (48 bits input data plus 6 channels of analog data)\n"
" MODE 2: Input plus field voltage\n"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:416
msgid ""
"(float out) .7i70.0.0.analogN (modes 1 and 2 only) Analogue input values."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:418
msgid ""
"(float out) .7i70.0.0.fieldvoltage (mode 2 only) Field voltage monitoring "
"pin."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:420
msgid "(bit out) .7i70.0.0.input-NN: (NN = 0 to 47) 48 digital inputs."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:424
msgid ""
"(bit in) .7i70.0.0.input-NN-not: (NN = 0 to 47) An inverted copy of the "
"inputs provided for convenience. The two complementary pins may be connected "
"to different signal nets."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:429
msgid ""
"(u32 ro) .7i70.0.0.nvbaudrate: Indicates the vbaud rate. This probably "
"should not be altered."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:433
msgid ""
"(u32 ro) .7i70.0.0.nvunitnumber: Indicates the serial number of the device "
"and should match a sticker on the card. This can be useful for working out "
"which card is which."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:437
msgid ""
"(u32 ro) .7i70.0.0.nvwatchdogtimeout: The sserial remote watchdog timeout. "
"This is separate from the Anything-IO card timeout. This is unlikely to need "
"to be changed."
msgstr ""

#. type: SS
#: man/man9/sserial.9:441
#, no-wrap
msgid "7i71"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:446
msgid ""
"The 7I71 is a remote isolated 48 output card. The 48 outputs are 8VDC to "
"28VDC sourcing drivers (common + field power) with 300 mA maximum current "
"capability.  All outputs have LED status indicators."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:450
msgid ""
"The 7I71 has two software selectable modes. For high speed applications, "
"choosing the correct mode can reduced the data transfer sizes, resulting in "
"higher maximum update rates"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:453
#, no-wrap
msgid ""
" MODE 0: Output only mode (48 bits output data only) \n"
" MODE 1: Outputs plus read back field voltage\n"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:458
msgid ""
"(float out) .7i71.0.0.fieldvoltage (mode 2 only) Field voltage monitoring "
"pin."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:461
msgid ""
"(bit out) .7i71.0.0.output-NN: (NN = 0 to 47) 48 digital outputs. The sense "
"may be inverted by the invert parameter."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:466
msgid ""
"(bit rw) .7i71.0.0.output-NN-invert: Invert the sense of the corresponding "
"output pin."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:469
msgid ""
"(u32 ro) .7i71.0.0.nvbaudrate: Indicates the vbaud rate. This probably "
"should not be altered."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:473
msgid ""
"(u32 ro) .7i71.0.0.nvunitnumber: Indicates the serial number of the device "
"and should match a sticker on the card. This can be useful for determining "
"which card is which."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:477
msgid ""
"(u32 ro) .7i71.0.0.nvwatchdogtimeout: The sserial remote watchdog timeout. "
"This is separate from the Anything-IO card timeout. This is unlikely to need "
"to be changed."
msgstr ""

#. type: SS
#: man/man9/sserial.9:481
#, no-wrap
msgid "7i73"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:483
msgid "The 7I73 is a remote real time pendant or control panel interface."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:489
msgid ""
"The 7I73 supports up to four 50 kHz encoder inputs for MPGs, 8 digital "
"inputs and 6 digital outputs and up to a 64 Key keypad. If a smaller keypad "
"is used, more digital inputs and outputs become available. Up to eight 0.0V "
"to 3.3V analog inputs are also provided.  The 7I73 can drive a 4 line 20 "
"character LCD for local DRO applications."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:495
msgid ""
"The 7I73 has 3 software selectable process data modes. These different modes "
"select different sets of 7I73 data to be transferred between the host and "
"the 7 I73 during real time process data exchanges. For high speed "
"applications, choosing the correct mode can reduced the data transfer sizes, "
"resulting in higher maximum update rates"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:499
#, no-wrap
msgid ""
" MODE 0: I/O + ENCODER\n"
" MODE 1: I/O + ENCODER + ANALOG IN\n"
" MODE 2: I/O + ENCODER + ANALOG IN FAST DISPLAY\n"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:505
msgid ""
"(float out) .7i73.0.0.analoginN: Analogue inputs. Up to 8 channels may be "
"available dependent on software and hardware configuration modes.  (see the "
"PDF manual downloadable from www.mesanet.com)"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:509
msgid ""
"(u32 in) .7i73.0.1.display (modes 1 and 2). Data for LCD display. This pin "
"may be conveniently driven by the HAL \"lcd\" component which allows the "
"formatted display of the values any number of HAL pins and textual content."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:513
msgid ""
"(u32 in) .7i73.0.1.display32 (mode 2 only). 4 bytes of data for LCD "
"display.  This mode is not supported by the HAL \"lcd\" component."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:515
msgid "(s32 out) .7i73.0.1.encN: The position of the MPG encoder counters."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:517
msgid ""
"(bit out) .7i73.0.1.input-NN: Up to 24 digital inputs (dependent on config)"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:519
msgid "(bit out) .7i73.0.1.input-NN-not: Inverted copy of the digital inputs"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:521
msgid ""
"(bit in) .7i73.0.1.output-NN: Up to 22 digital outputs (dependent on config)"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:536
#, no-wrap
msgid ""
" (u32 ro) .7i73.0.1.nvanalogfilter\n"
" (u32 ro) .7i73.0.1.nvbaudrate\n"
" (u32 ro) .7i73.0.1.nvcontrast\n"
" (u32 ro) .7i73.0.1.nvdispmode\n"
" (u32 ro) .7i73.0.1.nvencmode0\n"
" (u32 ro) .7i73.0.1.nvencmode1\n"
" (u32 ro) .7i73.0.1.nvencmode2\n"
" (u32 ro) .7i73.0.1.nvencmode3\n"
" (u32 ro) .7i73.0.1.nvkeytimer\n"
" (u32 ro) .7i73.0.1.nvunitnumber\n"
" (u32 ro) .7i73.0.1.nvwatchdogtimeout\n"
" (u32 ro) .7i73.0.1.output-00-invert\n"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:538
#, no-wrap
msgid " For further details of the use of the above see the Mesa manual.\n"
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:540
msgid ""
"(bit rw) .7i73.0.1.output-01-invert: Invert the corresponding output bit."
msgstr ""

#. type: Plain text
#: man/man9/sserial.9:542
msgid "(s32 ro) .7i73.0.1.swrevision: The version of firmware installed."
msgstr ""

#. type: TH
#: man/man9/stepgen.9:1
#, no-wrap
msgid "STEPGEN"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:5
msgid "stepgen - software step pulse generation"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:7
msgid ""
"B<loadrt stepgen step_type=>I<type0>[,I<type1>...] [B<ctrl_type=>I<type0>[,"
"I<type1>...]] [B<user_step_type=#,#>...]"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:13
msgid ""
"B<stepgen> is used to control stepper motors.  The maximum step rate depends "
"on the CPU and other factors, and is usually in the range of 5 kHz to 25 "
"kHz.  If higher rates are needed, a hardware step generator is a better "
"choice."
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:24
msgid ""
"B<stepgen> has two control modes, which can be selected on a channel by "
"channel basis using B<ctrl_type>.  Possible values are \"B<p>\" for position "
"control, and \"B<v>\" for velocity control. The default is position control, "
"which drives the motor to a commanded position, subject to acceleration and "
"velocity limits.  Velocity control drives the motor at a commanded speed, "
"again subject to accel and velocity limits.  Usually, position mode is used "
"for machine axes.  Velocity mode is reserved for unusual applications where "
"continuous movement at some speed is desired, instead of movement to a "
"specific position.  (Note that velocity mode replaces the former component "
"B<freqgen>.)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:30
msgid ""
"B<stepgen> can control a maximum of 16 motors.  The number of motors/"
"channels actually loaded depends on the number of I<type> values given.  The "
"value of each I<type> determines the outputs for that channel.  Position or "
"velocity mode can be individually selected for each channel.  Both control "
"modes support the same 16 possible step types."
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:35
msgid ""
"By far the most common step type is '0', standard step and direction.  "
"Others include up/down, quadrature, and a wide variety of three, four, and "
"five phase patterns that can be used to directly control some types of motor "
"windings.  (When used with appropriate buffers of course.)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:38
msgid ""
"Some of the stepping types are described below, but for more details "
"(including timing diagrams) see the B<stepgen> section of the HAL reference "
"manual."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:38
#, no-wrap
msgid "type 0: step/dir"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:41
msgid ""
"Two pins, one for step and one for direction.  B<make-pulses> must run at "
"least twice for each step (once to set the step pin true, once to clear "
"it).  This limits the maximum step rate to half (or less) of the rate that "
"can be reached by types 2-14.  The parameters B<steplen> and B<stepspace> "
"can further lower the maximum step rate.  Parameters B<dirsetup> and "
"B<dirhold> also apply to this step type."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:41
#, no-wrap
msgid "type 1: up/down"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:44
msgid ""
"Two pins, one for 'step up' and one for 'step down'.  Like type 0, B<make-"
"pulses> must run twice per step, which limits the maximum speed."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:44
#, no-wrap
msgid "type 2: quadrature"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:47
msgid ""
"Two pins, phase-A and phase-B.  For forward motion, A leads B.  Can advance "
"by one step every time B<make-pulses> runs."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:47
#, no-wrap
msgid "type 3: three phase, full step"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:50
msgid ""
"Three pins, phase-A, phase-B, and phase-C.  Three steps per full cycle, then "
"repeats.  Only one phase is high at a time - for forward motion the pattern "
"is A, then B, then C, then A again."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:50
#, no-wrap
msgid "type 4: three phase, half step"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:53
msgid ""
"Three pins, phases A through C.  Six steps per full cycle.  First A is high "
"alone, then A and B together, then B alone, then B and C together, etc."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:53
#, no-wrap
msgid "types 5 through 8: four phase, full step"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:56
msgid ""
"Four pins, phases A through D.  Four steps per full cycle.  Types 5 and 6 "
"are suitable for use with unipolar steppers, where power is applied to the "
"center tap of each winding, and four open-collector transistors drive the "
"ends.  Types 7 and 8 are suitable for bipolar steppers, driven by two H-"
"bridges."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:56
#, no-wrap
msgid "types 9 and 10: four phase, half step"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:59
msgid ""
"Four pins, phases A through D.  Eight steps per full cycle.  Type 9 is "
"suitable for unipolar drive, and type 10 for bipolar drive."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:59
#, no-wrap
msgid "types 11 and 12: five phase, full step"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:62
msgid ""
"Five pins, phases A through E.  Five steps per full cycle.  See HAL "
"reference manual for the patterns."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:62
#, no-wrap
msgid "types 13 and 14: five phase, half step"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:65
msgid ""
"Five pins, phases A through E.  Ten steps per full cycle.  See HAL reference "
"manual for the patterns."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:65
#, no-wrap
msgid "type 15: user-specified"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:69
msgid ""
"This uses the waveform specified by the B<user_step_type> module parameter, "
"which may have up to 10 steps and 5 phases."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:70
#, no-wrap
msgid "B<stepgen.make-pulses >(no floating-point)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:73
msgid ""
"Generates the step pulses, using information computed by B<update-freq>.  "
"Must be called as frequently as possible, to maximize the attainable step "
"rate and minimize jitter.  Operates on all channels at once."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:73
#, no-wrap
msgid "B<stepgen.capture-position >(uses floating point)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:76
msgid ""
"Captures position feedback value from the high speed code and makes it "
"available on a pin for use elsewhere in the system.  Operates on all "
"channels at once."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:76
#, no-wrap
msgid "B<stepgen.update-freq >(uses floating point)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:80
msgid ""
"Accepts a velocity or position command and converts it into a form usable by "
"B<make-pulses> for step generation.  Operates on all channels at once."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:82
#, no-wrap
msgid "B<stepgen.>I<N>B<.counts> s32 out"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:86
msgid ""
"The current position, in counts, for channel I<N>.  Updated by B<capture-"
"position>."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:86
#, no-wrap
msgid "B<stepgen.>I<N>B<.position-fb> float out"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:89
msgid ""
"The current position, in length units (see parameter B<position-scale>).  "
"Updated by B<capture-position>. The resolution of B<position-fb> is much "
"finer than a single step.  If you need to see individual steps, use "
"B<counts>."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:89
#, no-wrap
msgid "B<stepgen.>I<N>B<.enable> bit in"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:92
msgid "Enables output steps - when false, no steps are generated."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:92
#, no-wrap
msgid "B<stepgen.>I<N>B<.velocity-cmd> float in (velocity mode only)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:95
msgid ""
"Commanded velocity, in length units per second (see parameter B<position-"
"scale>)."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:95
#, no-wrap
msgid "B<stepgen.>I<N>B<.position-cmd> float in (position mode only)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:98
msgid "Commanded position, in length units (see parameter B<position-scale).>"
msgstr ""

#. type: TP
#: man/man9/stepgen.9:98
#, no-wrap
msgid "B<stepgen.>I<N>B<.step> bit out (step type 0 only)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:101
msgid "Step pulse output."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:101
#, no-wrap
msgid "B<stepgen.>I<N>B<.dir> bit out (step type 0 only)"
msgstr ""

#. type: TP
#: man/man9/stepgen.9:104
#, no-wrap
msgid "B<stepgen.>I<N>B<.up> bit out (step type 1 only)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:107
msgid "Count up output, pulses for forward steps."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:107
#, no-wrap
msgid "B<stepgen.>I<N>B<.down> bit out (step type 1 only)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:110
msgid "Count down output, pulses for reverse steps."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:110
#, no-wrap
msgid "B<stepgen.>I<N>B<.phase-A> thru B<phase-E> bit out (step types 2-14 only)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:113
msgid ""
"Output bits.  B<phase-A> and B<phase-B> are present for step types 2-14, "
"B<phase-C> for types 3-14, B<phase-D> for types 5-14, and B<phase-E> for "
"types 11-14.  Behavior depends on selected stepping type."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:115
#, no-wrap
msgid "B<stepgen.>I<N>B<.frequency> float ro"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:118
msgid "The current step rate, in steps per second, for channel I<N>."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:118
#, no-wrap
msgid "B<stepgen.>I<N>B<.maxaccel> float rw"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:121
msgid ""
"The acceleration/deceleration limit, in length units per second squared."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:121
#, no-wrap
msgid "B<stepgen.>I<N>B<.maxvel> float rw"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:124
msgid ""
"The maximum allowable velocity, in length units per second.  If the "
"requested maximum velocity cannot be reached with the current combination of "
"scaling and B<make-pulses> thread period, it will be reset to the highest "
"attainable value."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:124
#, no-wrap
msgid "B<stepgen.>I<N>B<.position-scale> float rw"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:127
msgid ""
"The scaling for position feedback, position command, and velocity command, "
"in steps per length unit."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:127
#, no-wrap
msgid "B<stepgen.>I<N>B<.rawcounts> s32 ro"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:130
msgid ""
"The position in counts, as updated by B<make-pulses>.  (Note: this is "
"updated more frequently than the B<counts> pin.)"
msgstr ""

#. type: TP
#: man/man9/stepgen.9:130
#, no-wrap
msgid "B<stepgen.>I<N>B<.steplen> u32 rw"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:133
msgid ""
"The length of the step pulses, in nanoseconds.  Measured from rising edge to "
"falling edge."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:133
#, no-wrap
msgid "B<stepgen.>I<N>B<.stepspace> u32 rw (step types 0 and 1 only)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:142
msgid ""
"The minimum space between step pulses, in nanoseconds.  Measured from "
"falling edge to rising edge.  The actual time depends on the step rate and "
"can be much longer.  If B<stepspace> is 0, then B<step> can be asserted "
"every period.  This can be used in conjunction with B<hal_parport>'s auto-"
"resetting pins to output one step pulse per period.  In this mode, "
"B<steplen> must be set for one period or less."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:142
#, no-wrap
msgid "B<stepgen.>I<N>B<.dirsetup> u32 rw (step type 0 only)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:145
msgid ""
"The minimum setup time from direction to step, in nanoseconds periods.  "
"Measured from change of direction to rising edge of step."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:145
#, no-wrap
msgid "B<stepgen.>I<N>B<.dirhold> u32 rw (step type 0 only)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:148
msgid ""
"The minimum hold time of direction after step, in nanoseconds.  Measured "
"from falling edge of step to change of direction."
msgstr ""

#. type: TP
#: man/man9/stepgen.9:148
#, no-wrap
msgid "B<stepgen.>I<N>B<.dirdelay> u32 rw (step types 1 and higher only)"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:151
msgid ""
"The minimum time between a forward step and a reverse step, in nanoseconds."
msgstr ""

#. type: SH
#: man/man9/stepgen.9:151
#, no-wrap
msgid "TIMING"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:158
msgid ""
"There are five timing parameters which control the output waveform.  No step "
"type uses all five, and only those which will be used are exported to HAL.  "
"The values of these parameters are in nano-seconds, so no recalculation is "
"needed when changing thread periods.  In the timing diagrams that follow, "
"they are identified by the following numbers:"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:160
msgid "(1) B<stepgen.n.steplen>"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:162
msgid "(2) B<stepgen.n.stepspace>"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:164
msgid "(3) B<stepgen.n.dirhold>"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:166
msgid "(4) B<stepgen.n.dirsetup>"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:168
msgid "(5) B<stepgen.n.dirdelay>"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:171
msgid ""
"For step type 0, timing parameters 1 thru 4 are used.  The following timing "
"diagram shows the output waveforms, and what each parameter adjusts."
msgstr ""

#. type: groff code
#: man/man9/stepgen.9:172
#, no-wrap
msgid ""
".ie  '\\*[.T]'html' .HTML <PRE> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _____ &nbsp; &nbsp; &nbsp; &nbsp; _____ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _____<BR> &nbsp; &nbsp;STEP &nbsp;____/ &nbsp; &nbsp; &#92;_______/ &nbsp; &nbsp; &#92;_____________/ &nbsp; &nbsp; &#92;______<BR> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp; &nbsp; &nbsp; | &nbsp; &nbsp; | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | &nbsp; &nbsp; |<BR> &nbsp; &nbsp;Time &nbsp; &nbsp; &nbsp;|-(1)-|--(2)--|-(1)-|--(3)--|-(4)-|-(1)-|<BR> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|__________________<BR> &nbsp; &nbsp;DIR &nbsp; ________________________________/<BR></PRE>\n"
".el \\{\\\n"
".PD 0\n"
".ft CR\n"
"\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ _____\\ \\ \\ \\ \\ \\ \\ \\ \\ _____\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ _____\n"
".P\n"
".ft CR\n"
"\\ \\ \\ \\ STEP\\ \\ ____/\\ \\ \\ \\ \\ \\\\_______/\\ \\ \\ \\ \\ \\\\_____________/\\ \\ \\ \\ \\ \\\\______\n"
".P\n"
".ft CR\n"
"\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ |\\ \\ \\ \\ \\ |\\ \\ \\ \\ \\ \\ \\ |\\ \\ \\ \\ \\ |\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ |\\ \\ \\ \\ \\ |\n"
".P\n"
".ft CR\n"
"\\ \\ \\ \\ Time\\ \\ \\ \\ \\ \\ |-(1)-|--(2)--|-(1)-|--(3)--|-(4)-|-(1)-|\n"
".P\n"
".ft CR\n"
"\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ |__________________\n"
".P\n"
".ft CR\n"
"\\ \\ \\ \\ DIR\\ \\ \\ ________________________________/\n"
".ft R\n"
"\\}\n"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:198
msgid ""
"For step type 1, timing parameters 1, 2, and 5 are used.  The following "
"timing diagram shows the output waveforms, and what each parameter adjusts."
msgstr ""

#. type: groff code
#: man/man9/stepgen.9:199
#, no-wrap
msgid ""
".ie  '\\*[.T]'html' .HTML <PRE> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _____ &nbsp; &nbsp; &nbsp; _____<BR> &nbsp; &nbsp;UP &nbsp; &nbsp;__/ &nbsp; &nbsp; &#92;_____/ &nbsp; &nbsp; &#92;________________________________<BR> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; | &nbsp; &nbsp; | &nbsp; &nbsp; | &nbsp; &nbsp; &nbsp; &nbsp; |<BR> &nbsp; &nbsp;Time &nbsp; &nbsp;|-(1)-|-(2)-|-(1)-|---(5)---|-(1)-|-(2)-|-(1)-|<BR> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|_____| &nbsp; &nbsp; |_____|<BR> &nbsp; &nbsp;DOWN &nbsp;______________________________/ &nbsp; &nbsp; &#92;_____/ &nbsp; &nbsp; &#92;____<BR></PRE>\n"
".el \\{\\\n"
".PD 0\n"
".ft CR\n"
"\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ _____\\ \\ \\ \\ \\ \\ \\ _____\n"
".P\n"
".ft CR\n"
"\\ \\ \\ \\ UP\\ \\ \\ \\ __/\\ \\ \\ \\ \\ \\\\_____/\\ \\ \\ \\ \\ \\\\________________________________\n"
".P\n"
".ft CR\n"
"\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ |\\ \\ \\ \\ \\ |\\ \\ \\ \\ \\ |\\ \\ \\ \\ \\ |\\ \\ \\ \\ \\ \\ \\ \\ \\ |\n"
".P\n"
".ft CR\n"
"\\ \\ \\ \\ Time\\ \\ \\ \\ |-(1)-|-(2)-|-(1)-|---(5)---|-(1)-|-(2)-|-(1)-|\n"
".P\n"
".ft CR\n"
"\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ |_____|\\ \\ \\ \\ \\ |_____|\n"
".P\n"
".ft CR\n"
"\\ \\ \\ \\ DOWN\\ \\ ______________________________/\\ \\ \\ \\ \\ \\\\_____/\\ \\ \\ \\ \\ \\\\____\n"
".ft R\n"
"\\}\n"
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:228
msgid ""
"For step types 2 and higher, the exact pattern of the outputs depends on the "
"step type (see the HAL manual for a full listing).  The outputs change from "
"one state to another at a minimum interval of B<steplen>.  When a direction "
"change occurs, the minimum time between the last step in one direction and "
"the first in the other direction is the sum of B<steplen> and B<dirdelay>."
msgstr ""

#. type: Plain text
#: man/man9/stepgen.9:230
msgid "The HAL User Manual."
msgstr ""

#. type: TH
#: man/man9/steptest.9:9
#, no-wrap
msgid "STEPTEST"
msgstr ""

#. type: Plain text
#: man/man9/steptest.9:13
msgid ""
"steptest - Used by Stepconf to allow testing of acceleration and velocity "
"values for an axis."
msgstr ""

#. type: Plain text
#: man/man9/steptest.9:16
msgid "B<loadrt steptest [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/steptest.9:17
#, no-wrap
msgid "B<steptest.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/steptest.9:21
#, no-wrap
msgid "B<steptest.>I<N>B<.jog-minus> bit in "
msgstr ""

#. type: TP
#: man/man9/steptest.9:24
#, no-wrap
msgid "B<steptest.>I<N>B<.jog-plus> bit in "
msgstr ""

#. type: TP
#: man/man9/steptest.9:27
#, no-wrap
msgid "B<steptest.>I<N>B<.run> bit in "
msgstr ""

#. type: TP
#: man/man9/steptest.9:30
#, no-wrap
msgid "B<steptest.>I<N>B<.maxvel> float in "
msgstr ""

#. type: TP
#: man/man9/steptest.9:33
#, no-wrap
msgid "B<steptest.>I<N>B<.maxaccel> float in "
msgstr ""

#. type: Plain text
#: man/man9/steptest.9:36
msgid "Permitted Acceleration"
msgstr ""

#. type: TP
#: man/man9/steptest.9:36
#, no-wrap
msgid "B<steptest.>I<N>B<.amplitude> float in "
msgstr ""

#. type: TP
#: man/man9/steptest.9:39
#, no-wrap
msgid "B<steptest.>I<N>B<.dir> s32 in "
msgstr ""

#. type: TP
#: man/man9/steptest.9:42
#, no-wrap
msgid "B<steptest.>I<N>B<.position-cmd> float out "
msgstr ""

#. type: TP
#: man/man9/steptest.9:46
#, no-wrap
msgid "B<steptest.>I<N>B<.position-fb> float in "
msgstr ""

#. type: TP
#: man/man9/steptest.9:50
#, no-wrap
msgid "B<steptest.>I<N>B<.running> bit out "
msgstr ""

#. type: TP
#: man/man9/steptest.9:54
#, no-wrap
msgid "B<steptest.>I<N>B<.run-target> float out "
msgstr ""

#. type: TP
#: man/man9/steptest.9:58
#, no-wrap
msgid "B<steptest.>I<N>B<.run-start> float out "
msgstr ""

#. type: TP
#: man/man9/steptest.9:62
#, no-wrap
msgid "B<steptest.>I<N>B<.run-low> float out "
msgstr ""

#. type: TP
#: man/man9/steptest.9:66
#, no-wrap
msgid "B<steptest.>I<N>B<.run-high> float out "
msgstr ""

#. type: TP
#: man/man9/steptest.9:70
#, no-wrap
msgid "B<steptest.>I<N>B<.pause> s32 in (default: I<0>)"
msgstr ""

#. type: TP
#: man/man9/steptest.9:74
#, no-wrap
msgid "B<steptest.>I<N>B<.epsilon> float rw (default: I<.001>)"
msgstr ""

#. type: TP
#: man/man9/steptest.9:78
#, no-wrap
msgid "B<steptest.>I<N>B<.elapsed> float r "
msgstr ""

#. type: TH
#: man/man9/streamer.9:10
#, no-wrap
msgid "STREAMER"
msgstr ""

#. type: TH
#: man/man9/streamer.9:10
#, no-wrap
msgid "08/12/2022"
msgstr ""

#. type: groff code
#: man/man9/streamer.9:18
#, no-wrap
msgid ""
".ie  \\n(.g .ds Aq \\(aq\n"
".el       .ds Aq '\n"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:35
msgid ""
"B<loadrt streamer depth>=I<depth1[,depth2\\&...]> B<cfg>=I<string1[,"
"string2\\&...]>"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:38
msgid ""
"B<streamer> and B<halstreamer(1)> are used together to stream data from a "
"file into the HAL in real time\\&. B<streamer> is a realtime HAL component "
"that exports HAL pins and creates a FIFO in shared memory\\&. "
"B<hal_streamer> is a user space program that copies data from stdin into the "
"FIFO, so that B<streamer> can write it to the HAL pins\\&."
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:41
msgid "B<depth>=I<depth1[,depth2\\&...]>"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:48
msgid ""
"Sets the depth of the user→realtime FIFO that B<streamer> creates to receive "
"data from B<hal-streamer>\\&. Multiple values of I<depth> (separated by "
"commas) can be specified if you need more than one FIFO (for example if you "
"want to stream data from two different realtime threads)\\&."
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:51
msgid "B<cfg>=I<string1[,string2\\&...]>"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:60
msgid ""
"Defines the set of HAL pins that B<streamer> exports and later writes data to"
"\\&. One I<string> must be supplied for each FIFO, separated by commas\\&.  "
"B<streamer> exports one pin for each character in I<string>\\&. Legal "
"characters are:"
msgstr ""

#. type: groff code
#: man/man9/streamer.9:62 man/man9/streamer.9:75 man/man9/streamer.9:88
#: man/man9/streamer.9:101 man/man9/streamer.9:170 man/man9/streamer.9:181
#: man/man9/streamer.9:192 man/man9/streamer.9:203
#, no-wrap
msgid ""
".ie  n \\{\\\n"
"\\h'-04'\\(bu\\h'+03'\\c\n"
".\\}\n"
".el \\{\\\n"
".sp -1\n"
".IP \\(bu 2.3\n"
".\\}\n"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:72
msgid "B<F>, B<f> (float pin)"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:85
msgid "B<B>, B<b> (bit pin)"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:98
msgid "B<S>, B<s> (s32 pin)"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:111
msgid "B<U>, B<u> (u32 pin)"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:116
msgid "B<streamer>\\&.I<N>"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:118
msgid "One function is created per FIFO, numbered from zero\\&."
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:122
msgid "B<streamer>\\&.I<N>\\&.B<pin>\\&.I<M> output"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:128
msgid ""
"Data from column I<M> of the data in FIFO I<N> appears on this pin\\&. The "
"pin type depends on the config string\\&."
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:131
msgid "B<streamer>\\&.I<N>\\&.B<curr-depth> s32 output"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:133
msgid ""
"Current number of samples in the FIFO\\&. When this reaches zero, new data "
"will no longer be written to the pins\\&."
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:136
msgid "B<streamer>\\&.I<N>\\&.B<empty> bit output"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:140
msgid ""
"TRUE when the FIFO I<N> is empty, FALSE when valid data is available\\&."
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:143
msgid "B<streamer>\\&.I<N>\\&.B<enable> bit input"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:147
msgid ""
"When TRUE, data from FIFO I<N> is written to the HAL pins\\&. When false, no "
"data is transferred\\&. Defaults to TRUE\\&."
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:150
msgid "B<streamer>\\&.I<N>\\&.B<underruns> s32 read/write"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:158
msgid ""
"The number of times that B<sampler> has tried to write data to the HAL pins "
"but found no fresh data in the FIFO\\&. It increments whenever B<empty> is "
"true, and can be reset by the B<setp> command\\&."
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:161
msgid "B<streamer>\\&.I<N>\\&.*clock bit input"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:166
msgid "B<streamer>\\&.I<N>\\&.*clock-mode s32 input"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:178
msgid "0 (B<default>) free run at every iteration"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:216
msgid "B<halstreamer>(1), B<sampler>(9), B<halsampler>(1)"
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:222
msgid ""
"Original version by John Kasunich, as part of the LinuxCNC project\\&. "
"Improvements by several other members of the LinuxCNC development team\\&."
msgstr ""

#. type: Plain text
#: man/man9/streamer.9:227
msgid ""
"Copyright \\(co 2006 John Kasunich\\&. This is free software; see the source "
"for copying conditions\\&. There is NO warranty; not even for "
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\\&."
msgstr ""

#. type: TH
#: man/man9/sum2.9:9
#, no-wrap
msgid "SUM2"
msgstr ""

#. type: Plain text
#: man/man9/sum2.9:13
msgid "sum2 - Sum of two inputs (each with a gain) and an offset"
msgstr ""

#. type: Plain text
#: man/man9/sum2.9:16
msgid "B<loadrt sum2 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/sum2.9:17
#, no-wrap
msgid "B<sum2.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/sum2.9:21
#, no-wrap
msgid "B<sum2.>I<N>B<.in0> float in "
msgstr ""

#. type: TP
#: man/man9/sum2.9:25
#, no-wrap
msgid "B<sum2.>I<N>B<.in1> float in "
msgstr ""

#. type: TP
#: man/man9/sum2.9:29
#, no-wrap
msgid "B<sum2.>I<N>B<.out> float out "
msgstr ""

#. type: Plain text
#: man/man9/sum2.9:32
msgid "out = in0 * gain0 + in1 * gain1 + offset"
msgstr ""

#. type: TP
#: man/man9/sum2.9:33
#, no-wrap
msgid "B<sum2.>I<N>B<.gain0> float rw (default: I<1.0>)"
msgstr ""

#. type: TP
#: man/man9/sum2.9:37
#, no-wrap
msgid "B<sum2.>I<N>B<.gain1> float rw (default: I<1.0>)"
msgstr ""

#. type: TP
#: man/man9/sum2.9:41
#, no-wrap
msgid "B<sum2.>I<N>B<.offset> float rw "
msgstr ""

#. type: Plain text
#: man/man9/sum2.9:46
msgid "scaled_s32_sums(9), weighted_sum(9)"
msgstr ""

#. type: TH
#: man/man9/supply.9:1
#, no-wrap
msgid "SUPPLY"
msgstr ""

#. type: Plain text
#: man/man9/supply.9:5
msgid "supply - set output pins with values from parameters (obsolete)"
msgstr ""

#. type: Plain text
#: man/man9/supply.9:7
msgid "B<loadrt supply num_chan=>I<num>"
msgstr ""

#. type: Plain text
#: man/man9/supply.9:17
msgid ""
"B<supply> was used to allow the inputs of other HAL components to be "
"manipulated for testing purposes.  When it was written, the only way to set "
"the value of an input pin was to connect it to a signal and connect that "
"signal to an output pin of some other component, and then let that component "
"write the pin value.  B<supply> was written to be that \"other component\".  "
"It reads values from parameters (set with the HAL command B<setp>) and "
"writes them to output pins."
msgstr ""

#. type: Plain text
#: man/man9/supply.9:23
msgid ""
"Since B<supply> was written, the B<setp> command has been modified to allow "
"it to set unconnected pins as well as parameters.  In addition, the B<sets> "
"command was added, which can directly set HAL signals, as long as there are "
"no output pins connected to them.  Therefore, B<supply> is obsolete."
msgstr ""

#. type: Plain text
#: man/man9/supply.9:28
msgid ""
"B<supply> supports a maximum of eight channels.  The number of channels "
"actually loaded is set by the B<num_chan> argument when the module is "
"loaded.  If B<numchan> is not specified, the default value is one."
msgstr ""

#. type: TP
#: man/man9/supply.9:30
#, no-wrap
msgid "B<supply.>I<N>B<.update> (uses floating-point)"
msgstr ""

#. type: Plain text
#: man/man9/supply.9:33
msgid "Updates output pins for channel I<N>."
msgstr ""

#. type: TP
#: man/man9/supply.9:35
#, no-wrap
msgid "B<supply.>I<N>B<.q> bit out"
msgstr ""

#. type: Plain text
#: man/man9/supply.9:38
msgid "Output bit, copied from parameter B<supply.>I<N>B<.d>."
msgstr ""

#. type: TP
#: man/man9/supply.9:38
#, no-wrap
msgid "B<supply.>I<N>B<._q> bit out"
msgstr ""

#. type: Plain text
#: man/man9/supply.9:41
msgid "Output bit, inverted copy of parameter B<supply.>I<N>B<.d>."
msgstr ""

#. type: TP
#: man/man9/supply.9:41
#, no-wrap
msgid "B<supply.>I<N>B<.variable> float out"
msgstr ""

#. type: Plain text
#: man/man9/supply.9:44
msgid "Analog output, copied from parameter B<supply.>I<N>B<.value>."
msgstr ""

#. type: TP
#: man/man9/supply.9:44
#, no-wrap
msgid "B<supply.>I<N>B<._variable> float out"
msgstr ""

#. type: Plain text
#: man/man9/supply.9:47
msgid "Analog output, equal to -1.0 times parameter B<supply.>I<N>B<.value>."
msgstr ""

#. type: TP
#: man/man9/supply.9:47
#, no-wrap
msgid "B<supply.>I<N>B<.d> bit rw"
msgstr ""

#. type: Plain text
#: man/man9/supply.9:50
msgid "Data source for B<q> and B<_q> output pins."
msgstr ""

#. type: TP
#: man/man9/supply.9:50
#, no-wrap
msgid "B<supply.>I<N>B<.value> bit rw"
msgstr ""

#. type: Plain text
#: man/man9/supply.9:53
msgid "Data source for B<variable> and B<_variable> output pins."
msgstr ""

#. type: Plain text
#: man/man9/thc.9:13
msgid "thc - Torch Height Control"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:16
msgid "B<loadrt thc>"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:21
msgid ""
"Torch Height Control Mesa THC E<gt> Encoder E<gt> LinuxCNC THC component"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:25
msgid ""
"The Mesa THC sends a frequency based on the voltage detected to the "
"encoder.  The velocity from the encoder is converted to volts with the "
"velocity scale parameter inside the THC component."
msgstr ""

#. type: Plain text
#: man/man9/thc.9:28
msgid ""
"The THCAD card sends a frequency at 0 volts so the scale offset parameter is "
"used to zero the calculated voltage."
msgstr ""

#. type: Plain text
#: man/man9/thc.9:32
msgid ""
"Component Functions If enabled and torch is on and X + Y velocity is within "
"tolerance of set speed allow the THC to offset the Z axis as needed to "
"maintain voltage."
msgstr ""

#. type: Plain text
#: man/man9/thc.9:35 man/man9/thcud.9:27
msgid ""
"If enabled and torch is off and the Z axis is moving up remove any "
"correction at a rate not to exceed the rate of movement of the Z axis."
msgstr ""

#. type: Plain text
#: man/man9/thc.9:38 man/man9/thcud.9:30
msgid ""
"If enabled and torch is off and there is no correction pass the Z position "
"and feed back untouched."
msgstr ""

#. type: Plain text
#: man/man9/thc.9:40 man/man9/thcud.9:32
msgid "If not enabled pass the Z position and feed back untouched."
msgstr ""

#. type: Plain text
#: man/man9/thc.9:42
msgid "Physical Connections"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:44
msgid ""
"Plasma Torch Arc Voltage Signal =E<gt> 6 x 487k 1% resistors =E<gt> THC Arc "
"Voltage In"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:46
msgid "THC Frequency Signal =E<gt> Encoder #0, pin A (Input)"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:48
msgid "Plasma Torch Arc OK Signal =E<gt> input pin"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:50
msgid "output pin =E<gt> Plasma Torch Start Arc Contacts"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:52 man/man9/thcud.9:44
msgid "HAL Plasma Connections"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:54
msgid "encoder.nn.velocity =E<gt> thc.encoder-vel (tip voltage)"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:56
msgid "spindle.0.on =E<gt> output pin (start the arc)"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:58
msgid "thc.arc-ok E<lt>= motion.digital-in-00 E<lt>= input pin (arc ok signal)"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:60 man/man9/thcud.9:54
msgid "HAL Motion Connections"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:62
msgid "thc.requested-vel E<lt>= motion.requested-vel"
msgstr ""

#. type: Plain text
#: man/man9/thc.9:64
msgid "thc.current-vel E<lt>= motion.current-vel"
msgstr ""

#. type: TP
#: man/man9/thc.9:67
#, no-wrap
msgid "B<thc> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/thc.9:71
#, no-wrap
msgid "B<thc.encoder-vel> float in "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:74
msgid "Connect to hm2_5i20.0.encoder.00.velocity"
msgstr ""

#. type: TP
#: man/man9/thc.9:74
#, no-wrap
msgid "B<thc.current-vel> float in "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:77 man/man9/thcud.9:89
msgid "Connect to motion.current-vel"
msgstr ""

#. type: TP
#: man/man9/thc.9:77
#, no-wrap
msgid "B<thc.requested-vel> float in "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:80 man/man9/thcud.9:92
msgid "Connect to motion.requested-vel"
msgstr ""

#. type: TP
#: man/man9/thc.9:80
#, no-wrap
msgid "B<thc.volts-requested> float in "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:83
msgid "Tip Volts current_vel E<gt>= min_velocity requested"
msgstr ""

#. type: TP
#: man/man9/thc.9:83
#, no-wrap
msgid "B<thc.vel-tol> float in "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:86
msgid "Velocity Tolerance (Corner Lock)"
msgstr ""

#. type: TP
#: man/man9/thc.9:86
#, no-wrap
msgid "B<thc.torch-on> bit in "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:89 man/man9/thcud.9:95
msgid "Connect to spindle.N.on"
msgstr ""

#. type: TP
#: man/man9/thc.9:89
#, no-wrap
msgid "B<thc.arc-ok> bit in "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:92
msgid "Arc OK from Plasma Torch"
msgstr ""

#. type: TP
#: man/man9/thc.9:92
#, no-wrap
msgid "B<thc.enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:95 man/man9/thcud.9:101
msgid "Enable the THC, if not enabled Z position is passed through"
msgstr ""

#. type: TP
#: man/man9/thc.9:95
#, no-wrap
msgid "B<thc.z-pos-in> float in "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:98 man/man9/thcud.9:104
msgid "Z Motor Position Command in from axis.n.motor-pos-cmd"
msgstr ""

#. type: TP
#: man/man9/thc.9:98
#, no-wrap
msgid "B<thc.z-pos-out> float out "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:101 man/man9/thcud.9:107
msgid "Z Motor Position Command Out"
msgstr ""

#. type: TP
#: man/man9/thc.9:101
#, no-wrap
msgid "B<thc.z-fb-out> float out "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:104 man/man9/thcud.9:110
msgid "Z Position Feedback to Axis"
msgstr ""

#. type: TP
#: man/man9/thc.9:104
#, no-wrap
msgid "B<thc.volts> float out "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:107
msgid "The Calculated Volts"
msgstr ""

#. type: TP
#: man/man9/thc.9:107
#, no-wrap
msgid "B<thc.vel-status> bit out "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:110 man/man9/thcud.9:116
msgid "When the THC thinks we are at requested speed"
msgstr ""

#. type: TP
#: man/man9/thc.9:110
#, no-wrap
msgid "B<thc.offset-value> float out "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:113 man/man9/thcud.9:113
msgid "The Current Offset"
msgstr ""

#. type: TP
#: man/man9/thc.9:114
#, no-wrap
msgid "B<thc.vel-scale> float rw "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:117
msgid "The scale to convert the Velocity signal to Volts"
msgstr ""

#. type: TP
#: man/man9/thc.9:117
#, no-wrap
msgid "B<thc.scale-offset> float rw "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:120
msgid "The offset of the velocity input at 0 volts"
msgstr ""

#. type: TP
#: man/man9/thc.9:120
#, no-wrap
msgid "B<thc.velocity-tol> float rw "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:123 man/man9/thcud.9:123
msgid "The deviation percent from planned velocity"
msgstr ""

#. type: TP
#: man/man9/thc.9:123
#, no-wrap
msgid "B<thc.voltage-tol> float rw "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:126
msgid "The deviation of Tip Voltage before correction takes place"
msgstr ""

#. type: TP
#: man/man9/thc.9:126
#, no-wrap
msgid "B<thc.correction-vel> float rw "
msgstr ""

#. type: Plain text
#: man/man9/thc.9:129
msgid "The amount of change in user units per period to move Z to correct"
msgstr ""

#. type: TH
#: man/man9/thcud.9:9
#, no-wrap
msgid "THCUD"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:13
msgid "thcud - Torch Height Control Up/Down Input"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:16
msgid "B<loadrt thcud>"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:21
msgid ""
"Torch Height Control This THC takes either an up or a down input from a THC"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:24
msgid ""
"If enabled and torch is on and X + Y velocity is within tolerance of set "
"speed allow the THC to offset the Z axis as needed to maintain voltage."
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:34
msgid "Typical Physical Connections using a Parallel Port"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:36
msgid "Parallel Pin 12 E<lt>= THC controller Plasma Up"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:38
msgid "Parallel Pin 13 E<lt>= THC controller Plasma Down"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:40
msgid "Parallel Pin 15 E<lt>= Plasma Torch Arc Ok Signal"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:42
msgid "Parallel Pin 16 =E<gt> Plasma Torch Start Arc Contacts"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:46
msgid "net torch-up thcud.torch-up E<lt>= parport.0.pin-12-in"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:48
msgid "net torch-down thcud.torch-down E<lt>= parport.0.pin-13-in"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:50
msgid "net torch-on spindle.0.on =E<gt> parport.0.pin-16-out (start the arc)"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:52
msgid ""
"net arc-ok thcud.arc-ok E<lt>= motion.digital-in-00 E<lt>= parport.0.pin-15-"
"in (arc ok signal)"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:56
msgid "net requested-vel thcud.requested-vel E<lt>= motion.requested-vel"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:58
msgid "net current-vel thcud.current-vel E<lt>= motion.current-vel"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:61
msgid "Pyvcp Connections In the xml file you need something like:"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:68
#, no-wrap
msgid ""
"  E<lt>pyvcpE<gt>\n"
"  E<lt>checkbuttonE<gt>\n"
"    E<lt>textE<gt>\"THC Enable\"E<lt>/textE<gt>\n"
"    E<lt>halpinE<gt>\"thc-enable\"E<lt>/halpinE<gt>\n"
"  E<lt>/checkbuttonE<gt>\n"
"  E<lt>/pyvcpE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:70
msgid "Connect the Pyvcp pins in the postgui.hal file like this:"
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:72
msgid "net thc-enable thcud.enable E<lt>= pyvcp.thc-enable"
msgstr ""

#. type: TP
#: man/man9/thcud.9:76
#, no-wrap
msgid "B<thcud> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/thcud.9:80
#, no-wrap
msgid "B<thcud.torch-up> bit in "
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:83
msgid "Connect to an input pin"
msgstr ""

#. type: TP
#: man/man9/thcud.9:83
#, no-wrap
msgid "B<thcud.torch-down> bit in "
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:86
msgid "Connect to input pin"
msgstr ""

#. type: TP
#: man/man9/thcud.9:86
#, no-wrap
msgid "B<thcud.current-vel> float in "
msgstr ""

#. type: TP
#: man/man9/thcud.9:89
#, no-wrap
msgid "B<thcud.requested-vel> float in "
msgstr ""

#. type: TP
#: man/man9/thcud.9:92
#, no-wrap
msgid "B<thcud.torch-on> bit in "
msgstr ""

#. type: TP
#: man/man9/thcud.9:95
#, no-wrap
msgid "B<thcud.arc-ok> bit in "
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:98
msgid "Arc Ok from Plasma Torch"
msgstr ""

#. type: TP
#: man/man9/thcud.9:98
#, no-wrap
msgid "B<thcud.enable> bit in "
msgstr ""

#. type: TP
#: man/man9/thcud.9:101
#, no-wrap
msgid "B<thcud.z-pos-in> float in "
msgstr ""

#. type: TP
#: man/man9/thcud.9:104
#, no-wrap
msgid "B<thcud.z-pos-out> float out "
msgstr ""

#. type: TP
#: man/man9/thcud.9:107
#, no-wrap
msgid "B<thcud.z-fb-out> float out "
msgstr ""

#. type: TP
#: man/man9/thcud.9:110
#, no-wrap
msgid "B<thcud.cur-offset> float out "
msgstr ""

#. type: TP
#: man/man9/thcud.9:113
#, no-wrap
msgid "B<thcud.vel-status> bit out "
msgstr ""

#. type: TP
#: man/man9/thcud.9:116
#, no-wrap
msgid "B<thcud.removing-offset> bit out "
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:119
msgid "Pin for testing"
msgstr ""

#. type: TP
#: man/man9/thcud.9:120
#, no-wrap
msgid "B<thcud.velocity-tol> float rw "
msgstr ""

#. type: TP
#: man/man9/thcud.9:123
#, no-wrap
msgid "B<thcud.correction-vel> float rw "
msgstr ""

#. type: Plain text
#: man/man9/thcud.9:126
msgid "The Velocity to move Z to correct"
msgstr ""

#. type: TH
#: man/man9/threads.9:1
#, no-wrap
msgid "THREADS"
msgstr ""

#. type: Plain text
#: man/man9/threads.9:5
msgid "threads - creates hard realtime HAL threads"
msgstr ""

#. type: Plain text
#: man/man9/threads.9:7
msgid ""
"B<loadrt threads name1=>I<name>B< period1=>I<period> [B<fp1=>E<lt>B<0>|"
"B<1>E<gt>] [E<lt>thread-2-infoE<gt>] [E<lt>thread-3-infoE<gt>]"
msgstr ""

#. type: Plain text
#: man/man9/threads.9:16
msgid ""
"B<threads> is used to create hard realtime threads which can execute HAL "
"functions at specific intervals.  It is not a true HAL component, in that it "
"does not export any functions, pins, or parameters of its own.  Once it has "
"created one or more threads, the threads stand alone, and the B<threads> "
"component can be unloaded without affecting them.  In fact, it can be "
"unloaded and then reloaded to create additional threads, as many times as "
"needed."
msgstr ""

#. type: Plain text
#: man/man9/threads.9:31
msgid ""
"B<threads> can create up to three realtime threads.  Threads must be created "
"in order, from fastest to slowest.  Each thread is specified by three "
"arguments.  B<name1> is used to specify the name of the first thread (thread "
"1).  B<period1> is used to specify the period of thread 1 in nanoseconds.  "
"Both I<name> and I<period> are required.  The third argument, B<fp1> is "
"optional, and is used to specify if thread 1 will be used to execute "
"floating point code.  If not specified, it defaults to B<1>, which means "
"that the thread will support floating point.  Specify B<0> to disable "
"floating point support, which saves a small amount of execution time by not "
"saving the FPU context.  For additional threads, B<name2>, B<period2>, "
"B<fp2>, B<name3>, B<period3>, and B<fp3> work exactly the same.  If more "
"than three threads are needed, unload threads, then reload it to create more "
"threads."
msgstr ""

#. type: Plain text
#: man/man9/threads.9:52
msgid ""
"The existence of B<threads> might be considered a bug.  Ideally, creation "
"and deletion of threads would be done directly with B<halcmd> commands, such "
"as \"B<newthread >I<name period>\", \"B<delthread >I<name>\", or similar.  "
"However, limitations in the current HAL implementation require thread "
"creation to take place in kernel space, and loading a component is the most "
"straightforward way to do that."
msgstr ""

#. type: TH
#: man/man9/threadtest.9:9
#, no-wrap
msgid "THREADTEST"
msgstr ""

#. type: Plain text
#: man/man9/threadtest.9:13
msgid "threadtest - LinuxCNC HAL component for testing thread behavior"
msgstr ""

#. type: Plain text
#: man/man9/threadtest.9:16
msgid "B<loadrt threadtest [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/threadtest.9:17
#, no-wrap
msgid "B<threadtest.>I<N>B<.increment>"
msgstr ""

#. type: TP
#: man/man9/threadtest.9:20
#, no-wrap
msgid "B<threadtest.>I<N>B<.reset>"
msgstr ""

#. type: TP
#: man/man9/threadtest.9:24
#, no-wrap
msgid "B<threadtest.>I<N>B<.count> u32 out "
msgstr ""

#. type: TH
#: man/man9/time.9:9
#, no-wrap
msgid "TIME"
msgstr ""

#. type: Plain text
#: man/man9/time.9:13
msgid "time - Time on in Hours, Minutes, Seconds"
msgstr ""

#. type: Plain text
#: man/man9/time.9:16
msgid "B<loadrt time [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/time.9:20
msgid "Time"
msgstr ""

#. type: Plain text
#: man/man9/time.9:28
msgid ""
"When either the time.N.start or time.N.pause bits goes true the cycle timer "
"resets and starts to time until time.N.start AND time.N.pause go false. When "
"the time.N.pause bit goes true timing is paused until time.N.pause goes "
"false. If you connect time.N.start to halui.program.is-running and leave "
"time.N.pause unconnected the timer will reset during a pause. See the "
"example connections below for more information."
msgstr ""

#. type: Plain text
#: man/man9/time.9:30
msgid "Time returns the hours, minutes, and seconds that time.N.start is true."
msgstr ""

#. type: Plain text
#: man/man9/time.9:32
msgid "Sample pyVCP code to display the hours:minutes:seconds."
msgstr ""

#. type: Plain text
#: man/man9/time.9:64
#, no-wrap
msgid ""
"E<lt>pyvcpE<gt>\n"
"  E<lt>hboxE<gt>\n"
"  E<lt>labelE<gt>\n"
"    E<lt>textE<gt>\"Cycle Time\"E<lt>/textE<gt>\n"
"    E<lt>fontE<gt>(\"Helvetica\",14)E<lt>/fontE<gt>\n"
"  E<lt>/labelE<gt>\n"
"  E<lt>u32E<gt> \n"
"      E<lt>halpinE<gt>\"time-hours\"E<lt>/halpinE<gt>\n"
"      E<lt>fontE<gt>(\"Helvetica\",14)E<lt>/fontE<gt>\n"
"      E<lt>formatE<gt>\"2d\"E<lt>/formatE<gt>\n"
"  E<lt>/u32E<gt>\n"
"  E<lt>labelE<gt>\n"
"    E<lt>textE<gt>\":\"E<lt>/textE<gt>\n"
"    E<lt>fontE<gt>(\"Helvetica\",14)E<lt>/fontE<gt>\n"
"  E<lt>/labelE<gt>\n"
"  E<lt>u32E<gt> \n"
"      E<lt>halpinE<gt>\"time-minutes\"E<lt>/halpinE<gt>\n"
"      E<lt>fontE<gt>(\"Helvetica\",14)E<lt>/fontE<gt>\n"
"      E<lt>formatE<gt>\"2d\"E<lt>/formatE<gt>\n"
"  E<lt>/u32E<gt>\n"
"  E<lt>labelE<gt>\n"
"    E<lt>textE<gt>\":\"E<lt>/textE<gt>\n"
"    E<lt>fontE<gt>(\"Helvetica\",14)E<lt>/fontE<gt>\n"
"  E<lt>/labelE<gt>\n"
"  E<lt>u32E<gt> \n"
"      E<lt>halpinE<gt>\"time-seconds\"E<lt>/halpinE<gt>\n"
"      E<lt>fontE<gt>(\"Helvetica\",14)E<lt>/fontE<gt>\n"
"      E<lt>formatE<gt>\"2d\"E<lt>/formatE<gt>\n"
"  E<lt>/u32E<gt>\n"
"  E<lt>/hboxE<gt>\n"
"E<lt>/pyvcpE<gt>\n"
msgstr ""

#. type: Plain text
#: man/man9/time.9:67
msgid ""
"In your post-gui.hal file you might use one of the following to connect this "
"timer:"
msgstr ""

#. type: Plain text
#: man/man9/time.9:69
#, no-wrap
msgid " For a new config:\n"
msgstr ""

#. type: Plain text
#: man/man9/time.9:77
#, no-wrap
msgid ""
" loadrt time\n"
" addf time.0 servo-thread\n"
" net cycle-timer        time.0.start E<lt>= halui.program.is-running\n"
" net cycle-timer-pause  time.0.pause E<lt>= halui.program.is-paused\n"
" net cycle-seconds pyvcp.time-seconds E<lt>= time.0.seconds\n"
" net cycle-minutes pyvcp.time-minutes E<lt>= time.0.minutes\n"
" net cycle-hours pyvcp.time-hours E<lt>= time.0.hours\n"
msgstr ""

#. type: Plain text
#: man/man9/time.9:83
#, no-wrap
msgid ""
" Previous to this version if you wanted the timer to continue running\n"
" during a pause instead of resetting, you had to use a HAL NOT component\n"
" to invert the halui.program.is-idle pin and connect to time.N.start as\n"
" shown below:\n"
msgstr ""

#. type: Plain text
#: man/man9/time.9:93
#, no-wrap
msgid ""
" loadrt time\n"
" loadrt not\n"
" addf time.0 servo-thread\n"
" addf not.0 servo-thread\n"
" net prog-running not.0.in E<lt>= halui.program.is-idle\n"
" net cycle-timer time.0.start E<lt>= not.0.out\n"
" net cycle-seconds pyvcp.time-seconds E<lt>= time.0.seconds\n"
" net cycle-minutes pyvcp.time-minutes E<lt>= time.0.minutes\n"
" net cycle-hours pyvcp.time-hours E<lt>= time.0.hours\n"
msgstr ""

#. type: Plain text
#: man/man9/time.9:96
#, no-wrap
msgid ""
" For those who have this setup already, you can simply add a net connecting\n"
" time.N.pause to halui.program.is-paused:\n"
msgstr ""

#. type: Plain text
#: man/man9/time.9:98
#, no-wrap
msgid " net cycle-timer-pause time.0.pause E<lt>= halui.program.is-paused\n"
msgstr ""

#. type: TP
#: man/man9/time.9:102
#, no-wrap
msgid "B<time.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/time.9:106
#, no-wrap
msgid "B<time.>I<N>B<.start> bit in "
msgstr ""

#. type: Plain text
#: man/man9/time.9:109
msgid "Timer On"
msgstr ""

#. type: TP
#: man/man9/time.9:109
#, no-wrap
msgid "B<time.>I<N>B<.pause> bit in (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/time.9:112
msgid "Pause"
msgstr ""

#. type: TP
#: man/man9/time.9:112
#, no-wrap
msgid "B<time.>I<N>B<.seconds> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/time.9:115
msgid "Seconds"
msgstr ""

#. type: TP
#: man/man9/time.9:115
#, no-wrap
msgid "B<time.>I<N>B<.minutes> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/time.9:118
msgid "Minutes"
msgstr ""

#. type: TP
#: man/man9/time.9:118
#, no-wrap
msgid "B<time.>I<N>B<.hours> u32 out "
msgstr ""

#. type: Plain text
#: man/man9/time.9:121
msgid "Hours"
msgstr ""

#. type: Plain text
#: man/man9/time.9:124
msgid "John Thornton, itaib, Moses McKnight"
msgstr ""

#. type: TH
#: man/man9/timedelay.9:9
#, no-wrap
msgid "TIMEDELAY"
msgstr ""

#. type: Plain text
#: man/man9/timedelay.9:13
msgid "timedelay - The equivalent of a time-delay relay"
msgstr ""

#. type: Plain text
#: man/man9/timedelay.9:16
msgid "B<loadrt timedelay [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/timedelay.9:17
#, no-wrap
msgid "B<timedelay.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/timedelay.9:21
#, no-wrap
msgid "B<timedelay.>I<N>B<.in> bit in "
msgstr ""

#. type: TP
#: man/man9/timedelay.9:25
#, no-wrap
msgid "B<timedelay.>I<N>B<.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/timedelay.9:29
msgid ""
"Follows the value of B<in> after applying the delays B<on-delay> and B<off-"
"delay>."
msgstr ""

#. type: TP
#: man/man9/timedelay.9:29
#, no-wrap
msgid "B<timedelay.>I<N>B<.on-delay> float in (default: I<0.5>)"
msgstr ""

#. type: Plain text
#: man/man9/timedelay.9:33
msgid ""
"The time, in seconds, for which B<in> must be B<true> before B<out> becomes "
"B<true>"
msgstr ""

#. type: TP
#: man/man9/timedelay.9:33
#, no-wrap
msgid "B<timedelay.>I<N>B<.off-delay> float in (default: I<0.5>)"
msgstr ""

#. type: Plain text
#: man/man9/timedelay.9:37
msgid ""
"The time, in seconds, for which B<in> must be B<false> before B<out> becomes "
"B<false>"
msgstr ""

#. type: TP
#: man/man9/timedelay.9:37
#, no-wrap
msgid "B<timedelay.>I<N>B<.elapsed> float out "
msgstr ""

#. type: Plain text
#: man/man9/timedelay.9:43
msgid "Jeff Epler, based on works by Stephen Wille Padnos and John Kasunich"
msgstr ""

#. type: TH
#: man/man9/timedelta.9:9
#, no-wrap
msgid "TIMEDELTA"
msgstr ""

#. type: Plain text
#: man/man9/timedelta.9:13
msgid ""
"timedelta - LinuxCNC HAL component that measures thread scheduling timing "
"behavior"
msgstr ""

#. type: Plain text
#: man/man9/timedelta.9:16
msgid "B<loadrt timedelta [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/timedelta.9:17
#, no-wrap
msgid "B<timedelta.>I<N>"
msgstr ""

#. type: TP
#: man/man9/timedelta.9:21
#, no-wrap
msgid "B<timedelta.>I<N>B<.jitter> s32 out (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/timedelta.9:24
msgid ""
"Worst-case scheduling error (in ns).  This is the largest discrepancy "
"between ideal thread period, and actual time between sequential runs of this "
"component.  This uses the absolute value of the error, so 'got run too "
"early' and 'got run too late' both show up as positive jitter."
msgstr ""

#. type: TP
#: man/man9/timedelta.9:24
#, no-wrap
msgid "B<timedelta.>I<N>B<.current-jitter> s32 out (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/timedelta.9:27
msgid ""
"Scheduling error (in ns) of the current invocation.  This is the discrepancy "
"between ideal thread period, and actual time since the previous run of this "
"component.  This uses the absolute value of the error, so 'got run too "
"early' and 'got run too late' both show up as positive jitter."
msgstr ""

#. type: TP
#: man/man9/timedelta.9:27
#, no-wrap
msgid "B<timedelta.>I<N>B<.current-error> s32 out (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/timedelta.9:30
msgid ""
"Scheduling error (in ns) of the current invocation.  This is the discrepancy "
"between ideal thread period, and actual time since the previous run of this "
"component.  This does not use the absolute value of the error, so 'got run "
"too early' shows up as negative error and 'got run too late' shows up as "
"positive error."
msgstr ""

#. type: TP
#: man/man9/timedelta.9:30
#, no-wrap
msgid "B<timedelta.>I<N>B<.min> s32 out (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/timedelta.9:33
msgid "Minimum time (in ns) between sequential runs of this component."
msgstr ""

#. type: TP
#: man/man9/timedelta.9:33
#, no-wrap
msgid "B<timedelta.>I<N>B<.max> s32 out (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/timedelta.9:36
msgid "Maximum time (in ns) between sequential runs of this component."
msgstr ""

#. type: TP
#: man/man9/timedelta.9:36
#, no-wrap
msgid "B<timedelta.>I<N>B<.reset> bit in "
msgstr ""

#. type: Plain text
#: man/man9/timedelta.9:39
msgid ""
"Set this pin to True, then back to False, to reset some of the statistics."
msgstr ""

#. type: TP
#: man/man9/timedelta.9:39
#, no-wrap
msgid "B<timedelta.>I<N>B<.out> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/timedelta.9:42
msgid ""
"Time (in ns) since the previous run of this component.  This should ideally "
"be equal to the thread period."
msgstr ""

#. type: TP
#: man/man9/timedelta.9:42
#, no-wrap
msgid "B<timedelta.>I<N>B<.err> s32 out (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/timedelta.9:45
msgid "Cumulative time error (in ns).  Probably not useful."
msgstr ""

#. type: TP
#: man/man9/timedelta.9:45
#, no-wrap
msgid "B<timedelta.>I<N>B<.avg-err> float out (default: I<0>)"
msgstr ""

#. type: Plain text
#: man/man9/timedelta.9:48
msgid "The average scheduling error (in ns)."
msgstr ""

#. type: TH
#: man/man9/toggle2nist.9:9
#, no-wrap
msgid "TOGGLE2NIST"
msgstr ""

#. type: TH
#: man/man9/toggle2nist.9:9 man/man9/toggle.9:9
#, no-wrap
msgid "2022-10-09"
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:13
msgid "toggle2nist - toggle button to nist logic"
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:16
msgid ""
"B<loadrt toggle2nist [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:22
msgid ""
"Toggle2nist can be used with a momentary push button to control a device "
"that has separate on and off inputs and an is-on output."
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:24
msgid ""
"\\[bu] On a rising edge on pin I<in> when I<is-on> is low: It sets I<on> "
"until I<is-on> becomes high."
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:26
msgid ""
"\\[bu] On a rising edge on pin I<in> when I<is-on> is high: It sets I<off> "
"until I<is-on> becomes low."
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:29
#, no-wrap
msgid "       ┐     ┏─────xxxxxxxxxxxx┐           ┏─────xxxxxxxxxxxx┐     \n"
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:31
msgid "in : └─────┛ xxxxxxxxxxxx└───────────┛ xxxxxxxxxxxx└─────"
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:33
#, no-wrap
msgid "       ┐     ┌───────────┐                                         \n"
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:36
#, no-wrap
msgid ""
"on   : └─────┘           └─────────────────────────────────────────\n"
"       ┐                                   ┌───────────┐           \n"
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:38
msgid "off : └───────────────────────────────────┘ └───────────"
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:40
#, no-wrap
msgid "       ┐                 ┌─────────────────────────────┐           \n"
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:42
msgid "is-on: └─────────────────┘ └───────────"
msgstr ""

#. type: TP
#: man/man9/toggle2nist.9:45
#, no-wrap
msgid "B<toggle2nist.>I<N>"
msgstr ""

#. type: TP
#: man/man9/toggle2nist.9:49
#, no-wrap
msgid "B<toggle2nist.>I<N>B<.in> bit in "
msgstr ""

#. type: TP
#: man/man9/toggle2nist.9:53
#, no-wrap
msgid "B<toggle2nist.>I<N>B<.is-on> bit in "
msgstr ""

#. type: TP
#: man/man9/toggle2nist.9:57
#, no-wrap
msgid "B<toggle2nist.>I<N>B<.on> bit out "
msgstr ""

#. type: TP
#: man/man9/toggle2nist.9:61
#, no-wrap
msgid "B<toggle2nist.>I<N>B<.off> bit out "
msgstr ""

#. type: Plain text
#: man/man9/toggle2nist.9:66
msgid "Anders Wallin"
msgstr ""

#. type: TH
#: man/man9/toggle.9:9
#, no-wrap
msgid "TOGGLE"
msgstr ""

#. type: Plain text
#: man/man9/toggle.9:13
msgid "toggle - 'push-on, push-off' from momentary pushbuttons"
msgstr ""

#. type: Plain text
#: man/man9/toggle.9:16
msgid "B<loadrt toggle [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/toggle.9:20
#, no-wrap
msgid "     ┐     ┏──┐        ┏──┐  \n"
msgstr ""

#. type: Plain text
#: man/man9/toggle.9:22
msgid "in : └─────┛ └────────┛ └──"
msgstr ""

#. type: Plain text
#: man/man9/toggle.9:24
#, no-wrap
msgid "     ┐     ┌───────────┐     \n"
msgstr ""

#. type: Plain text
#: man/man9/toggle.9:26
msgid "out: └─────┘ └─────"
msgstr ""

#. type: TP
#: man/man9/toggle.9:28
#, no-wrap
msgid "B<toggle.>I<N>"
msgstr ""

#. type: TP
#: man/man9/toggle.9:32
#, no-wrap
msgid "B<toggle.>I<N>B<.in> bit in "
msgstr ""

#. type: Plain text
#: man/man9/toggle.9:35
msgid "button input"
msgstr ""

#. type: TP
#: man/man9/toggle.9:35
#, no-wrap
msgid "B<toggle.>I<N>B<.out> bit io "
msgstr ""

#. type: Plain text
#: man/man9/toggle.9:38
msgid "on/off output"
msgstr ""

#. type: TP
#: man/man9/toggle.9:39
#, no-wrap
msgid "B<toggle.>I<N>B<.debounce> u32 rw (default: I<2>)"
msgstr ""

#. type: Plain text
#: man/man9/toggle.9:42
msgid "debounce delay in periods"
msgstr ""

#. type: TH
#: man/man9/tristate_bit.9:9
#, no-wrap
msgid "TRISTATE_BIT"
msgstr ""

#. type: Plain text
#: man/man9/tristate_bit.9:13
msgid ""
"tristate_bit - Place a signal on an I/O pin only when enabled, similar to a "
"tristate buffer in electronics"
msgstr ""

#. type: Plain text
#: man/man9/tristate_bit.9:16
msgid ""
"B<loadrt tristate_bit [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/tristate_bit.9:17
#, no-wrap
msgid "B<tristate-bit.>I<N>"
msgstr ""

#. type: Plain text
#: man/man9/tristate_bit.9:20 man/man9/tristate_float.9:20
msgid "If B<enable> is TRUE, copy B<in> to B<out>."
msgstr ""

#. type: TP
#: man/man9/tristate_bit.9:21
#, no-wrap
msgid "B<tristate-bit.>I<N>B<.in> bit in "
msgstr ""

#. type: Plain text
#: man/man9/tristate_bit.9:24 man/man9/tristate_float.9:24
msgid "Input value"
msgstr ""

#. type: TP
#: man/man9/tristate_bit.9:24
#, no-wrap
msgid "B<tristate-bit.>I<N>B<.out> bit io "
msgstr ""

#. type: TP
#: man/man9/tristate_bit.9:27
#, no-wrap
msgid "B<tristate-bit.>I<N>B<.enable> bit in "
msgstr ""

#. type: Plain text
#: man/man9/tristate_bit.9:30 man/man9/tristate_float.9:30
msgid "When TRUE, copy in to out"
msgstr ""

#. type: TH
#: man/man9/tristate_float.9:9
#, no-wrap
msgid "TRISTATE_FLOAT"
msgstr ""

#. type: Plain text
#: man/man9/tristate_float.9:13
msgid ""
"tristate_float - Place a signal on an I/O pin only when enabled, similar to "
"a tristate buffer in electronics"
msgstr ""

#. type: Plain text
#: man/man9/tristate_float.9:16
msgid ""
"B<loadrt tristate_float [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/tristate_float.9:17
#, no-wrap
msgid "B<tristate-float.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/tristate_float.9:21
#, no-wrap
msgid "B<tristate-float.>I<N>B<.in> float in "
msgstr ""

#. type: TP
#: man/man9/tristate_float.9:24
#, no-wrap
msgid "B<tristate-float.>I<N>B<.out> float io "
msgstr ""

#. type: TP
#: man/man9/tristate_float.9:27
#, no-wrap
msgid "B<tristate-float.>I<N>B<.enable> bit in "
msgstr ""

#. type: TH
#: man/man9/updown.9:9
#, no-wrap
msgid "UPDOWN"
msgstr ""

#. type: Plain text
#: man/man9/updown.9:13
msgid ""
"updown - Counts up or down, with optional limits and wraparound behavior"
msgstr ""

#. type: Plain text
#: man/man9/updown.9:16
msgid "B<loadrt updown [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/updown.9:17
#, no-wrap
msgid "B<updown.>I<N>"
msgstr ""

#. type: Plain text
#: man/man9/updown.9:20
msgid "Process inputs and update count if necessary"
msgstr ""

#. type: TP
#: man/man9/updown.9:21
#, no-wrap
msgid "B<updown.>I<N>B<.countup> bit in "
msgstr ""

#. type: Plain text
#: man/man9/updown.9:24
msgid "Increment count when this pin goes from 0 to 1"
msgstr ""

#. type: TP
#: man/man9/updown.9:24
#, no-wrap
msgid "B<updown.>I<N>B<.countdown> bit in "
msgstr ""

#. type: Plain text
#: man/man9/updown.9:27
msgid "Decrement count when this pin goes from 0 to 1"
msgstr ""

#. type: TP
#: man/man9/updown.9:27
#, no-wrap
msgid "B<updown.>I<N>B<.reset> bit in "
msgstr ""

#. type: Plain text
#: man/man9/updown.9:30
msgid "Reset count when this pin goes from 0 to 1"
msgstr ""

#. type: TP
#: man/man9/updown.9:30
#, no-wrap
msgid "B<updown.>I<N>B<.count> s32 out "
msgstr ""

#. type: Plain text
#: man/man9/updown.9:33
msgid "The current count"
msgstr ""

#. type: TP
#: man/man9/updown.9:34
#, no-wrap
msgid "B<updown.>I<N>B<.clamp> bit rw "
msgstr ""

#. type: Plain text
#: man/man9/updown.9:37
msgid "If TRUE, then clamp the output to the min and max parameters."
msgstr ""

#. type: TP
#: man/man9/updown.9:37
#, no-wrap
msgid "B<updown.>I<N>B<.wrap> bit rw "
msgstr ""

#. type: Plain text
#: man/man9/updown.9:40
msgid ""
"If TRUE, then wrap around when the count goes above or below the min and max "
"parameters.  Note that wrap implies (and overrides) clamp."
msgstr ""

#. type: TP
#: man/man9/updown.9:40
#, no-wrap
msgid "B<updown.>I<N>B<.max> s32 rw (default: I<0x7FFFFFFF>)"
msgstr ""

#. type: Plain text
#: man/man9/updown.9:43
msgid "If clamp or wrap is set, count will never exceed this number"
msgstr ""

#. type: TP
#: man/man9/updown.9:43
#, no-wrap
msgid "B<updown.>I<N>B<.min> s32 rw "
msgstr ""

#. type: Plain text
#: man/man9/updown.9:46
msgid "If clamp or wrap is set, count will never be less than this number"
msgstr ""

#. type: TH
#: man/man9/userkins.9:9
#, no-wrap
msgid "USERKINS"
msgstr ""

#. type: Plain text
#: man/man9/userkins.9:13
msgid "userkins - Template for user-built kinematics"
msgstr ""

#. type: Plain text
#: man/man9/userkins.9:16
msgid "B<loadrt userkins [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/userkins.9:23
msgid ""
"The userkins.comp file is a template for creating kinematics that can be "
"user-built using halcompile."
msgstr ""

#. type: Plain text
#: man/man9/userkins.9:28
msgid ""
"The unmodified userkins component can be used as a kinematics file for a "
"machine with identity kinematics for an xyz machine employing 3 joints "
"(motors)."
msgstr ""

#. type: Plain text
#: man/man9/userkins.9:30
msgid "B<USAGE:>"
msgstr ""

#. type: Plain text
#: man/man9/userkins.9:33
#, no-wrap
msgid ""
"  1) Copy the userkins.comp file to a user-owned\n"
"     directory (B<mydir>).\n"
msgstr ""

#. type: Plain text
#: man/man9/userkins.9:38
#, no-wrap
msgid ""
"     Note: The userkins.comp file can be downloaded from:\n"
"E<.URL https://github.com/LinuxCNC/linuxcnc/raw/2.8/src/hal/components/userkins.comp>\n"
"     where '2.8' is the branch name (use 'master' for\n"
"     the master branch)\n"
msgstr ""

#. type: Plain text
#: man/man9/userkins.9:42
#, no-wrap
msgid ""
"     For a RIP (run-in-place) build, the file is located in\n"
"     the git tree as:\n"
"       src/hal/components/userkins.comp\n"
msgstr ""

#. type: Plain text
#: man/man9/userkins.9:65
#, no-wrap
msgid ""
"  2) Edit the functions kinematicsForward() and\n"
"     kinematicsInverse() as required\n"
"  3) If required, add hal pins following examples in\n"
"     the template code\n"
"  4) Build and install the component using halcompile:\n"
"     $ cd B<mydir>\n"
"     $ [sudo] halcompile --install userkins.comp\n"
"     # Note:\n"
"     #      sudo is required when using a deb install\n"
"     #      sudo is B<not> required for run-in-place builds\n"
"     # $ man halcompile for more info\n"
"  5) Specify userkins in an ini file as:\n"
"     B<[KINS]>\n"
"     B<KINEMATICS=userkins>\n"
"     B<JOINTS=3>\n"
"     # the number of JOINTS must agree with the\n"
"     # number of joints used in your modified userkins.comp\n"
"  6) Note: the manpage for userkins is not updated by\n"
"     halcompile --install\n"
"  7) To use a different component name, rename the file\n"
"     (example mykins.comp) and change all instances of\n"
"     'userkins' to 'mykins'\n"
msgstr ""

#. type: Plain text
#: man/man9/userkins.9:70
#, no-wrap
msgid ""
"B<NOTES:>\n"
"  1  A 'dummy' pin is required to satisfy the requirements of\n"
"     the halcompile utility but it is not accessible to\n"
"     kinematics functions.\n"
msgstr ""

#. type: Plain text
#: man/man9/userkins.9:75
#, no-wrap
msgid ""
"  2  Hal pins and parameters needed in kinematics functions\n"
"     (kinematicsForward(), kinematicsInverse()) must\n"
"     be setup in a function (userkins_setup()) invoked\n"
"     by the initial motion module call to kinematicsType().\n"
msgstr ""

#. type: TP
#: man/man9/userkins.9:77
#, no-wrap
msgid "B<userkins.>I<N>B<.dummy> bit out (default: I<1>)"
msgstr ""

#. type: TH
#: man/man9/watchdog.9:1
#, no-wrap
msgid "WATCHDOG"
msgstr ""

#. type: TH
#: man/man9/watchdog.9:1
#, no-wrap
msgid "2010-06-22"
msgstr ""

#. type: Plain text
#: man/man9/watchdog.9:5
msgid "watchdog - monitor multiple inputs for a \"heartbeat\""
msgstr ""

#. type: Plain text
#: man/man9/watchdog.9:8
msgid "B<loadrt watchdog num_inputs=>I<N>"
msgstr ""

#. type: Plain text
#: man/man9/watchdog.9:11
msgid ""
"You must specify the number of inputs, from 1 to 32.  Each input has a "
"separate timeout value."
msgstr ""

#. type: TP
#: man/man9/watchdog.9:12
#, no-wrap
msgid "B<process>"
msgstr ""

#. type: Plain text
#: man/man9/watchdog.9:17
msgid ""
"Check all input pins for transitions, clear the B<ok-out> pin if any input "
"has no transition within its timeout period.  This function does not use "
"floating point, and should be added to a fast thread."
msgstr ""

#. type: TP
#: man/man9/watchdog.9:17
#, no-wrap
msgid "B<set-timeouts>"
msgstr ""

#. type: Plain text
#: man/man9/watchdog.9:24
msgid ""
"Check for timeout changes, and convert the float timeout inputs to int "
"values that can be used in B<process>.  This function also monitors B<enable-"
"in> for false to true transitions, and re-enables monitoring when such a "
"transition is detected.  This function does use floating point, and it is "
"appropriate to add it to the servo thread."
msgstr ""

#. type: TP
#: man/man9/watchdog.9:25
#, no-wrap
msgid "B<watchdog.input-n> bit in"
msgstr ""

#. type: Plain text
#: man/man9/watchdog.9:28
msgid "Input number n.  The inputs are numbered from 0 to B<num_inputs>-1."
msgstr ""

#. type: TP
#: man/man9/watchdog.9:28
#, no-wrap
msgid "B<watchdog.enable-in> bit in (default: I<FALSE>)"
msgstr ""

#. type: Plain text
#: man/man9/watchdog.9:33
msgid ""
"If TRUE, forces out-ok to be false.  Additionally, if a timeout occurs on "
"any input, this pin must be set FALSE and TRUE again to re-start the "
"monitoring of input pins."
msgstr ""

#. type: TP
#: man/man9/watchdog.9:33
#, no-wrap
msgid "B<watchdog.ok-out> bit out (default: I<FALSE>)"
msgstr ""

#. type: Plain text
#: man/man9/watchdog.9:39
msgid ""
"OK output.  This pin is true only if enable-in is TRUE and no timeout has "
"been detected.  This output can be connected to the enable input of a "
"B<charge_pump> or B<stepgen> (in v mode), to provide a heartbeat signal to "
"external monitoring hardware."
msgstr ""

#. type: TP
#: man/man9/watchdog.9:40
#, no-wrap
msgid "B<watchdog.timeout-n> float in"
msgstr ""

#. type: Plain text
#: man/man9/watchdog.9:48
msgid ""
"Timeout value for input number n.  The inputs are numbered from 0 to "
"B<num_inputs>-1.  The timeout is in seconds, and may not be below zero.  "
"Note that a timeout of 0.0 will likely prevent B<ok-out> from ever becoming "
"true.  Also note that excessively long timeouts are relatively useless for "
"monitoring purposes."
msgstr ""

#. type: TH
#: man/man9/wcomp.9:9
#, no-wrap
msgid "WCOMP"
msgstr ""

#. type: Plain text
#: man/man9/wcomp.9:13
msgid "wcomp - Window comparator"
msgstr ""

#. type: Plain text
#: man/man9/wcomp.9:16
msgid "B<loadrt wcomp [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/wcomp.9:17
#, no-wrap
msgid "B<wcomp.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/wcomp.9:21
#, no-wrap
msgid "B<wcomp.>I<N>B<.in> float in "
msgstr ""

#. type: Plain text
#: man/man9/wcomp.9:24
msgid "Value being compared"
msgstr ""

#. type: TP
#: man/man9/wcomp.9:24
#, no-wrap
msgid "B<wcomp.>I<N>B<.min> float in "
msgstr ""

#. type: Plain text
#: man/man9/wcomp.9:27
msgid "Low boundary for comparison"
msgstr ""

#. type: TP
#: man/man9/wcomp.9:27
#, no-wrap
msgid "B<wcomp.>I<N>B<.max> float in "
msgstr ""

#. type: Plain text
#: man/man9/wcomp.9:30
msgid "High boundary for comparison"
msgstr ""

#. type: TP
#: man/man9/wcomp.9:30
#, no-wrap
msgid "B<wcomp.>I<N>B<.out> bit out "
msgstr ""

#. type: Plain text
#: man/man9/wcomp.9:33
msgid "True if B<in> is strictly between B<min> and B<max>"
msgstr ""

#. type: TP
#: man/man9/wcomp.9:33
#, no-wrap
msgid "B<wcomp.>I<N>B<.under> bit out "
msgstr ""

#. type: Plain text
#: man/man9/wcomp.9:36
msgid "True if B<in> is less than or equal to B<min>"
msgstr ""

#. type: TP
#: man/man9/wcomp.9:36
#, no-wrap
msgid "B<wcomp.>I<N>B<.over> bit out "
msgstr ""

#. type: Plain text
#: man/man9/wcomp.9:39
msgid "True if B<in> is greater than or equal to B<max>"
msgstr ""

#. type: Plain text
#: man/man9/wcomp.9:42
msgid "If B<max> E<lt>= B<min> then the behavior is undefined."
msgstr ""

#. type: TH
#: man/man9/weighted_sum.9:1
#, no-wrap
msgid "WEIGHTED_SUM"
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:4
msgid "weighted_sum - convert a group of bits to an integer"
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:6
msgid "B<loadrt weighted_sum wsum_sizes=>I<size[,size,...]>"
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:9
msgid ""
"Creates weighted sum groups each with the given number of input bits "
"(I<size>)."
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:15
msgid ""
"The weighted_sum converts a group of bits to an integer. The conversion is "
"the sum of the weights of the bits that are on plus any offset. The weight "
"of the m-th bit is 2^m. This is similar to a binary coded decimal but with "
"more options. The hold bit stops processing the input changes so the sum "
"will not change."
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:18
msgid ""
"The default value for each weight is 2^m where m is the bit number. This "
"results in a binary to unsigned conversion."
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:20
msgid ""
"There is a limit of 8 weighted summers and each may have up to 16 input bits."
msgstr ""

#. type: TP
#: man/man9/weighted_sum.9:21
#, no-wrap
msgid "B<process_wsums (requires a floating point thread)>"
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:24
msgid "Read all input values and update all output values."
msgstr ""

#. type: TP
#: man/man9/weighted_sum.9:25
#, no-wrap
msgid "B<wsum.>I<N>B<.bit.>I<M>B<.in> bit in"
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:28
msgid "The I<m>'th input of weighted summer I<n>."
msgstr ""

#. type: TP
#: man/man9/weighted_sum.9:28
#, no-wrap
msgid "B<wsum.>I<N>B<.hold> bit in"
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:32
msgid ""
"When TRUE, the I<sum> output does not change.  When FALSE, the I<sum> output "
"tracks the I<bit> inputs according to the weights and offset."
msgstr ""

#. type: TP
#: man/man9/weighted_sum.9:32
#, no-wrap
msgid "B<wsum.>I<N>B<.sum> signed out"
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:35
msgid "The output of the weighted summer"
msgstr ""

#. type: TP
#: man/man9/weighted_sum.9:35
#, no-wrap
msgid "B<wsum.>I<N>B<.bit.>I<M>B<.weight> signed rw"
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:39
msgid ""
"The weight of the I<m>'th input of weighted summer I<n>.  The default value "
"is 2^I<m>."
msgstr ""

#. type: TP
#: man/man9/weighted_sum.9:39
#, no-wrap
msgid "B<wsum.>I<N>B<.offset> signed rw"
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:43
msgid ""
"The offset is added to the weights corresponding to all TRUE inputs to give "
"the final sum."
msgstr ""

#. type: Plain text
#: man/man9/weighted_sum.9:46
msgid "B<scaled_s32_sums>(9), B<sum2>(9)."
msgstr ""

#. type: TH
#: man/man9/xhc_hb04_util.9:9
#, no-wrap
msgid "XHC_HB04_UTIL"
msgstr ""

#. type: Plain text
#: man/man9/xhc_hb04_util.9:13
msgid "xhc_hb04_util - xhc-hb04 convenience utility"
msgstr ""

#. type: Plain text
#: man/man9/xhc_hb04_util.9:16
msgid ""
"B<loadrt xhc_hb04_util [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: Plain text
#: man/man9/xhc_hb04_util.9:20
msgid ""
"Provides logic for a start/pause button and an interface to B<halui.program."
"is_paused>, B<is_idle>, B<is_running> to generate outputs for B<halui."
"program.pause>, B<resume>, B<run>."
msgstr ""

#. type: Plain text
#: man/man9/xhc_hb04_util.9:24
msgid ""
"Includes 4 simple lowpass filters with B<coef> and B<scale> pins.  The coef "
"value should be 0 E<lt>= coef E<lt>=1, smaller coef values slow response.  "
"See the lowpass manpage for calculating the filter time constant ($ man "
"lowpass)."
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:27
#, no-wrap
msgid "B<xhc-hb04-util.>I<N> (requires a floating-point thread)"
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:31
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.start-or-pause> bit in "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:35
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.is-paused> bit in "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:39
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.is-idle> bit in "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:43
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.is-running> bit in "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:47
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.pause> bit out "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:51
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.resume> bit out "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:55
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.run> bit out "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:59
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.in0> s32 in "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:63
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.in1> s32 in "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:67
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.in2> s32 in "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:71
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.in3> s32 in "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:75
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.out0> s32 out "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:79
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.out1> s32 out "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:83
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.out2> s32 out "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:87
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.out3> s32 out "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:91
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.scale0> float in (default: I<1.0>)"
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:95
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.scale1> float in (default: I<1.0>)"
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:99
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.scale2> float in (default: I<1.0>)"
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:103
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.scale3> float in (default: I<1.0>)"
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:107
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.coef0> float in (default: I<1.0>)"
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:111
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.coef1> float in (default: I<1.0>)"
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:115
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.coef2> float in (default: I<1.0>)"
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:119
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.coef3> float in (default: I<1.0>)"
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:123
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.divide-by-k-in> float in "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:127
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.divide-by-k-out> float out "
msgstr ""

#. type: TP
#: man/man9/xhc_hb04_util.9:131
#, no-wrap
msgid "B<xhc-hb04-util.>I<N>B<.k> float in (default: I<1.0>)"
msgstr ""

#. type: TH
#: man/man9/xor2.9:9
#, no-wrap
msgid "XOR2"
msgstr ""

#. type: Plain text
#: man/man9/xor2.9:13
msgid "xor2 - Two-input XOR (exclusive OR) gate"
msgstr ""

#. type: Plain text
#: man/man9/xor2.9:16
msgid "B<loadrt xor2 [count=>I<N>B<|names=>I<name1>B<[,>I<name2...>B<]]>"
msgstr ""

#. type: TP
#: man/man9/xor2.9:17
#, no-wrap
msgid "B<xor2.>I<N>"
msgstr ""

#. type: TP
#: man/man9/xor2.9:21
#, no-wrap
msgid "B<xor2.>I<N>B<.in0> bit in "
msgstr ""

#. type: TP
#: man/man9/xor2.9:25
#, no-wrap
msgid "B<xor2.>I<N>B<.in1> bit in "
msgstr ""

#. type: TP
#: man/man9/xor2.9:29
#, no-wrap
msgid "B<xor2.>I<N>B<.out> bit out "
msgstr ""

#. type: TP
#: man/man9/xor2.9:34
#, no-wrap
msgid "B<in0=TRUE in1=FALSE>"
msgstr ""

#. type: TQ
#: man/man9/xor2.9:36
#, no-wrap
msgid "B<in0=FALSE in1=TRUE>"
msgstr ""

#. type: Plain text
#: man/man9/xor2.9:50
msgid "B<and2>(9), B<logic>(9), B<lut5>(9), B<not>(9), B<or2>(9)."
msgstr ""

#. type: Content of: <html><body><table><caption>
#: html/gcode.html:23 html/gcode.html:49
msgid "LinuxCNC \"G-code\" Quick Reference"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:56
msgid "(X Y Z A B C U V W apply to all motions)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:57
msgid "<a href=\"gcode/g-code.html#gcode:g0\">G0</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:57
msgid "Rapid Move"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:58
msgid "<a href=\"gcode/g-code.html#gcode:g1\">G1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:58
msgid "Linear Move"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:59
msgid "<a href=\"gcode/g-code.html#gcode:g2-g3\">G2, G3</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:59
msgid "I J K or R P"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:59
msgid "Arc Move"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:60
msgid "<a href=\"gcode/g-code.html#gcode:g4\">G4</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:61
msgid "<a href=\"gcode/g-code.html#gcode:g5\">G5</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:61
msgid "I J P Q"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:62
msgid "<a href=\"gcode/g-code.html#gcode:g5.1\">G5.1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:62
msgid "I J"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:62
msgid "Quadratic Spline"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:63
msgid "<a href=\"gcode/g-code.html#gcode:g5.2-g5.3\">G5.2</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:63
msgid "P L"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:63
msgid "NURBS"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:64
msgid "<a href=\"gcode/g-code.html#gcode:g38\">G38.2 - G38.5</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:64
msgid "Straight Probe"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:65
msgid "<a href=\"gcode/g-code.html#gcode:g33\">G33</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:65 html/gcode.html:66
msgid "K ($)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:66
msgid "<a href=\"gcode/g-code.html#gcode:g33.1\">G33.1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:67
msgid "<a href=\"gcode/g-code.html#gcode:g80\">G80</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:67
msgid "Cancel Canned Cycle"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: html/gcode.html:69
msgid "Canned cycles"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:69
msgid "(X Y Z or U V W apply to canned cycles, depending on active plane)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:70
msgid "<a href=\"gcode/g-code.html#gcode:g81\">G81</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:70 html/gcode.html:71 html/gcode.html:76 html/gcode.html:77
msgid "R L (P)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:71
msgid "<a href=\"gcode/g-code.html#gcode:g82\">G82</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:71
msgid "Drilling Cycle, Dwell"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:72
msgid "<a href=\"gcode/g-code.html#gcode:g83\">G83</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:72 html/gcode.html:74
msgid "R L Q"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:72
msgid "Drilling Cycle, Peck"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:73
msgid "<a href=\"gcode/g-code.html#gcode:g84\">G84</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:73 html/gcode.html:75
msgid "R L (P) ($)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:73
msgid "Right-hand Tapping Cycle, Dwell"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:74
msgid "<a href=\"gcode/g-code.html#gcode:g73\">G73</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:74
msgid "Drilling Cycle, Chip Breaking"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:75
msgid "<a href=\"gcode/g-code.html#gcode:g74\">G74</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:75
msgid "Left-hand Tapping Cycle, Dwell"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:76
msgid "<a href=\"gcode/g-code.html#gcode:g85\">G85</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:76
msgid "Boring Cycle, Feed Out"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:77
msgid "<a href=\"gcode/g-code.html#gcode:g89\">G89</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:78
msgid "<a href=\"gcode/g-code.html#gcode:g76\">G76</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:78
msgid "P Z I J R K Q H L E ($)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:78
msgid "Threading Cycle"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:81
msgid "<a href=\"gcode/g-code.html#gcode:g90-g91\">G90, G91</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:82
msgid "<a href=\"gcode/g-code.html#gcode:g90.1-g91.1\">G90.1, G91.1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:83
msgid "<a href=\"gcode/g-code.html#gcode:g7\">G7</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:83
msgid "Lathe Diameter Mode"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:84
msgid "<a href=\"gcode/g-code.html#gcode:g8\">G8</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:84
msgid "Lathe Radius Mode"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:86 html/gcode.html:87
msgid "Feed Rate Mode"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:87
msgid "<a href=\"gcode/g-code.html#gcode:g93-g94-g95\">G93, G94, G95</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:87 html/gcode.html:90
msgid "S ($)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:90
msgid "<a href=\"gcode/m-code.html#mcode:m3-m4-m5\">M3, M4, M5</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:91
msgid "<a href=\"gcode/m-code.html#mcode:m19\">M19</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:91
msgid "R Q (P) ($)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:92
msgid "<a href=\"gcode/g-code.html#gcode:g96-g97\">G96, G97</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:92
msgid "S D ($)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:92
msgid "Spindle Control Mode"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: html/gcode.html:94
msgid "Coolant"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:95
msgid "<a href=\"gcode/m-code.html#mcode:m7-m8-m9\">M7, M8, M9</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:97 html/gcode.html:98
msgid "Tool Length Offset"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:98
msgid "<a href=\"gcode/g-code.html#gcode:g43\">G43</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:99
msgid "<a href=\"gcode/g-code.html#gcode:g43.1\">G43.1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:100
msgid "<a href=\"gcode/g-code.html#gcode:g43.2\">G43.2</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:101
msgid "<a href=\"gcode/g-code.html#gcode:g49\">G49</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:101
msgid "Cancel Tool Length Compensation"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: html/gcode.html:103
msgid "Stopping"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:104
msgid "<a href=\"gcode/m-code.html#mcode:m0-m1\">M0, M1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:105
msgid "<a href=\"gcode/m-code.html#mcode:m2-m30\">M2, M30</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:106
msgid "<a href=\"gcode/m-code.html#mcode:m60\">M60</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:109
msgid "<a href=\"gcode/g-code.html#gcode:g20-g21\">G20, G21</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:109
msgid "Units (inch, mm)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: html/gcode.html:111
msgid "Plane Selection"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:111
msgid "(affects G2, G3, G81…G89, G40…G42)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:112
msgid "<a href=\"gcode/g-code.html#gcode:g17-g19.1\">G17 - G19.1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: html/gcode.html:114
msgid "Cutter Radius Compensation"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:115
msgid "<a href=\"gcode/g-code.html#gcode:g40\">G40</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:115
msgid "Compensation Off"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:116
msgid "<a href=\"gcode/g-code.html#gcode:g41-g42\">G41,G42</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:117
msgid "<a href=\"gcode/g-code.html#gcode:g41.1-g42.1\">G41.1, G42.1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:117
msgid "D L"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: html/gcode.html:119
msgid "Path Control Mode"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:120
msgid "<a href=\"gcode/g-code.html#gcode:g61\">G61 G61.1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:121
msgid "<a href=\"gcode/g-code.html#gcode:g61.1\">G61.1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:122
msgid "<a href=\"gcode/g-code.html#gcode:g64\">G64</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:122 html/gcode.html:171
msgid "P Q"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:122
msgid "Path Blending"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: html/gcode.html:124
msgid "Return Mode in Canned Cycles"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:125
msgid "<a href=\"gcode/g-code.html#gcode:g98-g99\">G98, G99</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:125
msgid "Canned Cycle Return Level"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: html/gcode.html:127
msgid "Other Modal Codes"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:128
msgid "<a href=\"gcode/other-code.html#sec:set-feed-rate\">F</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:128
msgid "Set Feed Rate"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:129
msgid "<a href=\"gcode/other-code.html#sec:set-spindle-speed\">S</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:129
msgid "($)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:129
msgid "Set Spindle Speed"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:130
msgid "<a href=\"gcode/other-code.html#sec:select-tool\">T</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:130
msgid "Select Tool"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:131
msgid "<a href=\"gcode/m-code.html#mcode:m48-m49\">M48, M49</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:131
msgid "Speed and Feed Override Control"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:132
msgid "<a href=\"gcode/m-code.html#mcode:m50\">M50</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:132 html/gcode.html:134 html/gcode.html:135
msgid "P0 (off) or P1 (on)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:133
msgid "<a href=\"gcode/m-code.html#mcode:m51\">M51</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:133
msgid "P0 (off) or P1 (on) ($)"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:133
msgid "Spindle Speed Override Control"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:134
msgid "<a href=\"gcode/m-code.html#mcode:m52\">M52</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:135
msgid "<a href=\"gcode/m-code.html#mcode:m53\">M53</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:136
msgid "<a href=\"gcode/g-code.html#gcode:g54-g59.3\">G54-G59.3</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:136
msgid "Select Coordinate System"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: html/gcode.html:138
msgid "Flow-control Codes"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:139
msgid "<a href=\"gcode/o-code.html#ocode:subroutines\">o sub</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:139
msgid "Subroutines, sub/endsub call"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:140
msgid "<a href=\"gcode/o-code.html#ocode:looping\">o while</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:140
msgid "Looping, while/endwhile do/while"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:141
msgid "<a href=\"gcode/o-code.html#ocode:conditional\">o if</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:141
msgid "Conditional, if/else/endif"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:142
msgid "<a href=\"gcode/o-code.html#ocode:repeat\">o repeat</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:142
msgid "Repeat a loop of code"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:143
msgid "<a href=\"gcode/o-code.html#ocode:indirection\">[]</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:143
msgid "Indirection"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:144
msgid "<a href=\"gcode/o-code.html#ocode:calling-files\">o call</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:144
msgid "Call named file"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:145
msgid "<a href=\"gcode/m-code.html#mcode:m70\">M70</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:145
msgid "Save modal state"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:146
msgid "<a href=\"gcode/m-code.html#mcode:m71\">M71</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:146
msgid "Invalidate stored state"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:147
msgid "<a href=\"gcode/m-code.html#mcode:m72\">M72</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:147
msgid "Restore modal state"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:148
msgid "<a href=\"gcode/m-code.html#mcode:m73\">M73</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:148
msgid "Save and Auto-restore modal state"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: html/gcode.html:150
msgid "Input/Output Codes"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:151
msgid "<a href=\"gcode/m-code.html#mcode:m62-m65\">M62 - M65</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:151
msgid "Digital Output Control"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:152
msgid "<a href=\"gcode/m-code.html#mcode:m66\">M66</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:152
msgid "P E L Q"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:152
msgid "Wait on Input"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:153
msgid "<a href=\"gcode/m-code.html#mcode:m67\">M67</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:153
msgid "Analog Output, Synchronized"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:154
msgid "<a href=\"gcode/m-code.html#mcode:m68\">M68</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:154
msgid "Analog Output, Immediate"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: html/gcode.html:156
msgid "Non-modal Codes"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:157
msgid "<a href=\"gcode/m-code.html#mcode:m6\">M6</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:158
msgid "<a href=\"gcode/m-code.html#mcode:m61\">M61</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:158
msgid "Set Current Tool"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:159
msgid "<a href=\"gcode/g-code.html#gcode:g10-l0\">G10 L0</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:160
msgid "<a href=\"gcode/g-code.html#gcode:g10-l1\">G10 L1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:160
msgid "P Q R"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:160 html/gcode.html:161 html/gcode.html:162
msgid "Set Tool Table"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:161
msgid "<a href=\"gcode/g-code.html#gcode:g10-l10\">G10 L10</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:162
msgid "<a href=\"gcode/g-code.html#gcode:g10-l11\">G10 L11</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:163
msgid "<a href=\"gcode/g-code.html#gcode:g10-l2\">G10 L2</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:163
msgid "P R"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:163 html/gcode.html:164
msgid "Set Coordinate System"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:164
msgid "<a href=\"gcode/g-code.html#gcode:g10-l20\">G10 L20</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:165
msgid "<a href=\"gcode/g-code.html#gcode:g28-g28.1\">G28, G28.1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:165 html/gcode.html:166
msgid "Go/Set Predefined Position"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:166
msgid "<a href=\"gcode/g-code.html#gcode:g30-g30.1\">G30, G30.1</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:167
msgid "<a href=\"gcode/g-code.html#gcode:g53\">G53</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:168
msgid "<a href=\"gcode/g-code.html#gcode:g92\">G52, G92</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:169
msgid "<a href=\"gcode/g-code.html#gcode:g92.1-g92.2\">G92.1, G92.2</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:169
msgid "Reset G92 Offsets"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:170
msgid "<a href=\"gcode/g-code.html#gcode:g92.3\">G92.3</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:171
msgid "<a href=\"gcode/m-code.html#mcode:m100-m199\">M101 - M199</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:171
msgid "User Defined Commands"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><th>
#: html/gcode.html:173
msgid "Comments &amp; Messages"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:174
msgid "<a href=\"gcode/overview.html#gcode:comments\">; (…)</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:175
msgid "<a href=\"gcode/overview.html#gcode:messages\">(MSG,…)</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:176
msgid "<a href=\"gcode/overview.html#gcode:debug\">(DEBUG,…)</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:176
msgid "Debug Messages"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:177
msgid "<a href=\"gcode/overview.html#gcode:print\">(PRINT,…)</a>"
msgstr ""

#. type: Content of: <html><body><table><tbody><tr><td>
#: html/gcode.html:177
msgid "Print Messages"
msgstr ""

#. type: Content of: <html><head><script>
#: src/index.tmpl:10
msgid "//"
msgstr ""

#. type: CDATA
#: src/index.tmpl:10
#, no-wrap
msgid ""
"var sections = [['sec0', 'sec1', 'sec2', 'sec3', 'sec4', 'sec5', 'sec6',\n"
"   'sec7', 'sec8', 'sec9', 'sec10','sec11','sec12','sec13', 'sec14', 'sec15'],\n"
"   ['man_1', 'man_9','man_3hal', 'man_3rtapi', 'man_3hm2', 'man_3']];\n"
"\n"
"function storeOK() { // Check for HTML5 Local Storage\n"
"  try {\n"
"    return 'localStorage' in window && window['localStorage'] !== null;\n"
"  } catch (e) {\n"
"    return false;\n"
"  }\n"
"}\n"
"\n"
"function toggle(sec){\n"
"  var e = document.getElementById(sec);\n"
"  var i = document.getElementById(sec + '_image');\n"
"  if(!e)return true;\n"
"  if(e.style.display==\"none\"){\n"
"    e.style.display=\"block\"\n"
"    i.src = 'minus.png';\n"
"    if (storeOK()){localStorage.setItem(sec, \"block\");}\n"
"  }\n"
"  else {\n"
"    e.style.display=\"none\"\n"
"    i.src = 'plus.png';\n"
"    if (storeOK()){localStorage.setItem(sec, \"none\");}\n"
"  }\n"
"  return false;\n"
"}\n"
"\n"
"function toggle_section(a){\n"
"  if (a.id.substring(0,3) === \"doc\"){var s = 0;}\n"
"  if (a.id.substring(0,3) === \"man\"){var s = 1;}\n"
"  if (a.value.substring(0,6) === \"Expand\"){\n"
"    for (var i in sections[s]){\n"
"      document.getElementById(sections[s][i]).style.display = 'block';\n"
"      document.getElementById(sections[s][i] + '_image').src = 'minus.png';\n"
"      if (storeOK()){localStorage.setItem(sections[s][i], \"block\");}\n"
"    }\n"
"  }\n"
"  else{\n"
"    for (var i in sections[s]){\n"
"      document.getElementById(sections[s][i]).style.display = 'none';\n"
"      document.getElementById(sections[s][i] + '_image').src = 'plus.png';\n"
"      if (storeOK()){localStorage.setItem(sections[s][i], \"none\");}\n"
"    }\n"
"  }\n"
"}\n"
"\n"
"function setup_page(){\n"
"  for (var s in sections){\n"
"    for (var i in sections[s]){\n"
"      if (localStorage.getItem(sections[s][i]) != null){\n"
"        if (localStorage.getItem(sections[s][i]) === \"block\"){\n"
"          document.getElementById(sections[s][i]).style.display = 'block';\n"
"          document.getElementById(sections[s][i] + '_image').src = 'minus.png';\n"
"        }\n"
"        else{\n"
"          document.getElementById(sections[s][i]).style.display = 'none';\n"
"          document.getElementById(sections[s][i] + '_image').src = 'plus.png';\n"
"        }\n"
"      }\n"
"      else{\n"
"        document.getElementById(sections[s][i]).style.display = 'none';\n"
"        document.getElementById(sections[s][i] + '_image').src = 'plus.png';\n"
"      }\n"
"    }\n"
"  }\n"
"}\n"
"//"
msgstr ""

#. type: Attribute 'alt' of: <html><body><div><img>
#: src/index.tmpl:88
msgid "LinuxCNC Logo"
msgstr ""

#. type: Content of: <html><body><h2>
#: src/index.tmpl:93
msgid "LinuxCNC version <strong>@VERSION@</strong> Documentation"
msgstr ""

#. type: Content of: <html><body><div><p>
#: src/index.tmpl:96
msgid ""
"<a href=\"http://linuxcnc.org\">LinuxCNC Home Page</a> &bull; <a href="
"\"http://wiki.linuxcnc.org/cgi-bin/wiki.pl\">Wiki</a> &bull; <a href="
"\"https://forum.linuxcnc.org\">Forum</a> &bull; <a href=\"https://github.com/"
"LinuxCNC/linuxcnc\">Source</a> &bull; <a href=\"gcode.html\">G-Code Quick "
"Reference</a>"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:102
msgid ""
"<input type=\"button\" value=\"Expand Documents\" id=\"docExpand\" onclick="
"\"return toggle_section(this);\"/> <input type=\"button\" value=\"Collapse "
"Documents\" id=\"docCollapse\" onclick=\"return toggle_section(this);\"/>"
msgstr ""

#. type: Content of: <html><body><h3>
#: src/index.tmpl:105
msgid "Getting Started &amp; Configuration"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:107
msgid "<a onclick=\"return toggle('sec0')\">"
msgstr ""

#. type: Attribute 'alt' of: <html><body><p><a><img>
#: src/index.tmpl:107 src/index.tmpl:119 src/index.tmpl:132 src/index.tmpl:140
#: src/index.tmpl:156 src/index.tmpl:175 src/index.tmpl:196 src/index.tmpl:206
#: src/index.tmpl:217 src/index.tmpl:233 src/index.tmpl:244 src/index.tmpl:259
#: src/index.tmpl:278 src/index.tmpl:296 src/index.tmpl:310 src/index.tmpl:325
msgid "plus"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:107
msgid "Getting Started with LinuxCNC</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:110
msgid "<a href=\"getting-started/about-linuxcnc.html\">About LinuxCNC</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:111
msgid ""
"<a href=\"getting-started/system-requirements.html\">System Requirements</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:112
msgid "<a href=\"getting-started/getting-linuxcnc.html\">Getting LinuxCNC</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:113
msgid "<a href=\"getting-started/running-linuxcnc.html\">Running LinuxCNC</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:114
msgid ""
"<a href=\"getting-started/updating-linuxcnc.html\">Updating LinuxCNC</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:115
msgid "<a href=\"common/linux-faq.html\">Linux FAQ</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:119
msgid "<a onclick=\"return toggle('sec2')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:119
msgid "General User Information</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:122
msgid "<a href=\"user/user-foreword.html\">User Foreword</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:123
msgid "<a href=\"user/user-intro.html\">LinuxCNC User Introduction</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:124
msgid "<a href=\"user/user-concepts.html\">Important User Concepts</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:125
msgid "<a href=\"user/starting-linuxcnc.html\">Starting LinuxCNC</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:126
msgid "<a href=\"gcode/machining-center.html\">CNC Machine Overview</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:127
msgid "<a href=\"lathe/lathe-user.html\">Lathe User Information</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:128
msgid "<a href=\"plasma/plasma-cnc-primer.html\">Plasma CNC Primer</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:132
msgid "<a onclick=\"return toggle('sec1')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:132
msgid "Configuration Wizards</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:135
msgid ""
"<a href=\"config/stepconf.html\" class=\"tooltips\">Stepconf, Parallel Port "
"Stepper Configurator</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:136
msgid ""
"<a href=\"config/pncconf.html\" class=\"tooltips\">Pncconf, Mesa Hardware "
"Configurator</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:140
msgid "<a onclick=\"return toggle('sec5')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:140
msgid "Configuration</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:143
msgid "<a href=\"config/integrator-concepts.html\">Integrator Concepts</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:144
msgid "<a href=\"install/latency-test.html\">Latency Test</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:145
msgid "<a href=\"motion/tweaking-steppers.html\">Stepper Tuning</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:146
msgid "<a href=\"config/ini-config.html\">INI Configuration</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:147
msgid "<a href=\"config/ini-homing.html\">Homing Configuration</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:148
msgid "<a href=\"config/iov2.html\">I/O Control V2</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:149
msgid "<a href=\"config/lathe-config.html\">Lathe Configuration</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:150
msgid "<a href=\"config/stepper-quickstart.html\">Stepper Quick Start</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:151
msgid "<a href=\"config/stepper.html\">Stepper Configuration</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:152
msgid "<a href=\"config/stepper-diagnostics.html\">Stepper Diagnostics</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:156
msgid "<a onclick=\"return toggle('sec11')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:156
msgid "HAL (Hardware Abstraction Layer)</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:159
msgid "<a href=\"hal/intro.html\">HAL Introduction</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:160
msgid "<a href=\"hal/basic-hal.html\">HAL Basics</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:161
msgid "<a href=\"hal/twopass.html\">HAL Twopass</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:162
msgid "<a href=\"hal/tutorial.html\">HAL Tutorial</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:163
msgid "<a href=\"hal/hal-examples.html\">HAL Examples</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:164
msgid "<a href=\"config/core-components.html\">HAL Core Components</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:165
msgid "<a href=\"hal/components.html\">HAL Component List</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:166
msgid "<a href=\"hal/rtcomps.html\">HAL Component Descriptions</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:167
msgid "<a href=\"hal/comp.html\">HAL Component Generator</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:168
msgid "<a href=\"hal/haltcl.html\">HAL TCL Files</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:169
msgid "<a href=\"hal/halmodule.html\">Creating Userspace Python Components</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:170
msgid "<a href=\"hal/canonical-devices.html\">Canonical Device Interfaces</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:171
msgid "<a href=\"hal/tools.html\">HAL Tools</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:175
msgid "<a onclick=\"return toggle('sec8')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:175
msgid "Hardware Drivers</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:178
msgid "<a href=\"hal/parallel-port.html\">Parallel Port Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:179
msgid "<a href=\"drivers/ax5214h.html\">AX5214H Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:180
msgid "<a href=\"drivers/gm.html\">General Mechatronics GM6-PCI Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:181
msgid "<a href=\"drivers/gs2.html\">GS2 Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:182
msgid "<a href=\"drivers/hostmot2.html\">Mesa HostMot2 Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:183
msgid "<a href=\"drivers/mb2hal.html\">Modbus to HAL Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:184
msgid "<a href=\"drivers/mitsub-vfd.html\">Mitsubishi VFD Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:185
msgid "<a href=\"drivers/motenc.html\">Motenc Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:186
msgid "<a href=\"drivers/opto22.html\">Opto22 Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:187
msgid "<a href=\"drivers/pico-ppmc.html\">Pico Drivers</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:188
msgid "<a href=\"drivers/pluto-p.html\">Pluto P Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:189
msgid "<a href=\"drivers/pmx485.html\">Powermax Modbus Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:190
msgid "<a href=\"drivers/servo-to-go.html\">Servo To Go Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:191
msgid ""
"<a href=\"drivers/shuttle.html\">ShuttleXpress and ShuttlePRO Driver</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:192
msgid "<a href=\"drivers/vfs11.html\">VFS11 Driver</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:196
msgid "<a onclick=\"return toggle('sec10')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:196
msgid "Hardware Examples</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:199
msgid ""
"<a href=\"examples/pci-parallel-port.html\">PCI Parallel Port Example</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:200
msgid "<a href=\"examples/spindle.html\">Spindle Control Example</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:201
msgid "<a href=\"examples/mpg.html\">MPG Example</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:202
msgid "<a href=\"examples/gs2-example.html\">GS2 Example</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:206
msgid "<a onclick=\"return toggle('sec9')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:206
msgid "ClassicLadder</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:210
msgid ""
"ClassicLadder is a software PLC (Programmable Logic Controller) built into "
"LinuxCNC."
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:211
msgid "<a href=\"ladder/ladder-intro.html\">ClassicLadder Introduction</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:212
msgid "<a href=\"ladder/classic-ladder.html\">ClassicLadder Programming</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:213
msgid "<a href=\"ladder/ladder-examples.html\">ClassicLadder Examples</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:217
msgid "<a onclick=\"return toggle('sec12')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:217
msgid "Advanced Topics</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:220
msgid "<a href=\"motion/kinematics.html\">Kinematics</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:221
msgid "<a href=\"motion/dh-parameters.html\">DH Parameters</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:222
msgid "<a href=\"motion/5-axis-kinematics.html\">5-Axis-Kinematics</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:223
msgid "<a href=\"motion/switchkins.html\">Switchable Kinematics</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:224
msgid "<a href=\"motion/pid-theory.html\">PID theory</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:225
msgid "<a href=\"remap/remap.html\">Remap: Extending LinuxCNC</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:226
msgid "<a href=\"config/moveoff.html\">Moveoff Component</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:227
msgid "<a href=\"code/rs274.html\">Stand Alone Interpreter</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:228
msgid "<a href=\"motion/external-offsets.html\">External Offsets</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:229
msgid "<a href=\"tooldatabase/tooldatabase.html\">Tool Database Interface</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:233
msgid "<a onclick=\"return toggle('sec13')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:233
msgid "Integrator Information</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:236
msgid "<a href=\"integrator/steppers.html\">Stepper Information</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:237
msgid "<a href=\"integrator/stepper-timing.html\">Stepper Drive Timing</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:238
msgid "<a href=\"integrator/wiring.html\">Best Wiring Practices</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:244
msgid "<a onclick=\"return toggle('sec3')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:244
msgid "User Interfaces</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:247
msgid "<a href=\"gui/axis.html\">AXIS, Keyboard GUI</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:248
msgid "<a href=\"gui/gmoccapy.html\">GMOCCAPY, Touchscreen GUI</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:249
msgid "<a href=\"gui/touchy.html\">Touchy, Touchscreen GUI</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:250
msgid "<a href=\"gui/gscreen.html\">Gscreen, Customizable Touchscreen GUI</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:251
msgid "<a href=\"gui/qtdragon.html\">QtDragon, Customizable Qt based GUI</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:252
msgid "<a href=\"gui/ngcgui.html\">NGCGUI, Subroutine GUI</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:253
msgid "<a href=\"gui/tklinuxcnc.html\">TkLinuxCNC, (no opengl) GUI</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:254
msgid ""
"<a href=\"plasma/qtplasmac.html\">QtPlasmaC, A Complete Plasma Cutting "
"Configuration</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:255
msgid ""
"<a href=\"gui/mdro.html\">MDRO, A Display for Digital Read Out scales</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:259
msgid "<a onclick=\"return toggle('sec4')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:259
msgid "G-code Programming</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:262
msgid "<a href=\"gcode/coordinates.html\">Coordinate System</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:263
msgid "<a href=\"gcode/tool-compensation.html\">Tool Compensation</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:264
msgid "<a href=\"gui/tooledit.html\">Tool Table Editor</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:265
msgid "<a href=\"gcode/overview.html\">G-code Overview</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:266
msgid "<a href=\"gcode/g-code.html\">G-codes</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:267
msgid "<a href=\"gcode/m-code.html\">M-codes</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:268
msgid "<a href=\"gcode/o-code.html\">O-codes</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:269
msgid "<a href=\"gcode/other-code.html\">Other Codes</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:270
msgid "<a href=\"examples/gcode.html\">G-code Examples</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:271
msgid "<a href=\"gui/image-to-gcode.html\">Image to G-code</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:272
msgid "<a href=\"gcode/rs274ngc.html\">RS274/NGC Differences</a>"
msgstr ""

#. type: Content of: <html><body><h3>
#: src/index.tmpl:276
msgid "Customization &amp; Development"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:278
msgid "<a onclick=\"return toggle('sec6')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:278
msgid "Virtual Control Panels</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:281
msgid "<a href=\"gui/pyvcp.html\">Python Virtual Control Panel (PyVCP)</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:282
msgid "<a href=\"gui/pyvcp-examples.html\">PyVCP Examples</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:283
msgid ""
"<a href=\"gui/gladevcp.html\">Glade Virtual Control Panel (GladeVCP)</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:284
msgid "<a href=\"gui/gladevcp-libraries.html\">GladeVCP Libraries</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:285
msgid "<a href=\"gui/qtvcp.html\">QtVCP</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:286
msgid "<a href=\"gui/qtvcp-vcp-panels.html\">QtVCP -VCP Panels</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:287
msgid "<a href=\"gui/qtvcp-widgets.html\">QtVCP -widgets</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:288
msgid "<a href=\"gui/qtvcp-libraries.html\">QtVCP -libraries</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:289
msgid "<a href=\"gui/qtvcp-vismach.html\">QtVCP -Vismach</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:290
msgid "<a href=\"gui/qtvcp-custom-widgets.html\">QtVCP -Custom Widgets</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:291
msgid "<a href=\"gui/qtvcp-code-snippets.html\">QtVCP -Code Snippets</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:292
msgid "<a href=\"gui/qtvcp-development.html\">QtVCP -Development</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:296
msgid "<a onclick=\"return toggle('sec7')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:296
msgid "User Interface Programming</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:299
msgid "<a href=\"gui/panelui.html\">Panelui</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:300
msgid "<a href=\"gui/filter-programs.html\">Filter Programs</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:301
msgid ""
"<a href=\"gui/halui.html\" class=\"tooltips\">HALUI, Hardware Abstract Layer "
"User Interface</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:302
msgid "<a href=\"hal/halui-examples.html\">HALUI Examples</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:303
msgid "<a href=\"config/python-interface.html\">Python Interface</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:304
msgid "<a href=\"gui/gstat.html\">GStat Module</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:305
msgid "<a href=\"gui/vismach.html\">Vismach Virtual Machines</a>"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:310
msgid "<a onclick=\"return toggle('sec14')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:310
msgid "Developer Information</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:313
msgid "<a href=\"hal/general-ref.html\">General Reference</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:314
msgid "<a href=\"code/code-notes.html\">Code Notes</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:315
msgid "<a href=\"code/nml-messages.html\">NML Messages</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:316
msgid "<a href=\"code/style-guide.html\">Style Guide</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:317
msgid "<a href=\"code/adding-configs.html\">Adding Configs for Selection</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:318
msgid ""
"<a href=\"code/contributing-to-linuxcnc.html\">Contributing to LinuxCNC</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:319
msgid "<a href=\"code/building-linuxcnc.html\">Building LinuxCNC</a>"
msgstr ""

#. type: Content of: <html><body><h3>
#: src/index.tmpl:323
msgid "General Information"
msgstr ""

#. type: Content of: <html><body><p><a>
#: src/index.tmpl:325
msgid "<a onclick=\"return toggle('sec15')\">"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:325
msgid "Glossary, Copyright, History &amp; Overview</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:328
msgid "<a href=\"common/overleaf.html\">LinuxCNC Document Overview</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:329
msgid "<a href=\"common/emc-history.html\">LinuxCNC History</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:330
msgid "<a href=\"common/glossary.html\">Glossary</a>"
msgstr ""

#. type: Content of: <html><body><div><ul><li>
#: src/index.tmpl:331
msgid ""
"<a href=\"common/gpld-copyright.html\">Copyright &amp; Documentation "
"License</a>"
msgstr ""

#. type: Content of: <html><body><h3>
#: src/index.tmpl:335
msgid "Man Pages"
msgstr ""

#. type: Content of: <html><body><div><p>
#: src/index.tmpl:337
msgid ""
"For more information about man pages see the <a href=\"common/linux-faq."
"html#faq:man-pages\">Linux FAQ</a>"
msgstr ""

#. type: Content of: <html><body><p>
#: src/index.tmpl:339
msgid ""
"<input type=\"button\" value=\"Expand Man Pages\" onclick=\"return "
"toggle_section(this);\" id=\"manExpand\"/> <input type=\"button\" value="
"\"Collapse Man Pages\" onclick=\"return toggle_section(this);\" id="
"\"manCollapse\"/>"
msgstr ""
