From fb3e8fbc31f871eb94356e7a758a05dd8f75e444 Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Mon, 14 Mar 2022 01:11:56 +0100 Subject: [PATCH 01/53] Anchor before chapter/section headings - corrected all occurences docs: reviewed formatting of src/hal docs: Review of src/user docs: Reviewed src/integrator docs: Reviewed src/ladder docs: Reviewed src/getting-started docs: Reviewed src/drivers docs: Reviewed src/remap docs: Reviewed src/motion docs: Reviewed src/{source-highlight,tooldatabase,plasma] docs: Review of src/{code,common,user} docs: Removed stale link in _es Changes performed on English documents to help po4a These are mostly addressing the indentation. A few artifacts from franctic bug searches are possible but should be an exception. Also fixed references when porting paragraphs between languages, the one or other extra syntax fix. Also adjusting a few tables. Circumventing what I consider a highlighting bug reviewed rtcoms*.adoc Further experiments to overcome ':images' problem Increasingly clueless why Spanish PDF is not built Review formatting of FAQ_fr Uncommenting another images because of weird build error Avoiding different make docs failure with cross-ref Syntax arrangements to overcome ref error More scrutiny - preparing for [[anchors]] in = line https://docs.asciidoctor.org/asciidoc/latest/attributes/id/#anchor --- docs/README.adoc | 87 +- docs/src/Master_Developer.adoc | 18 +- docs/src/Master_Documentation.adoc | 3 +- docs/src/Master_Getting_Started.adoc | 5 +- docs/src/Master_Getting_Started_zh_CN.adoc | 2 +- docs/src/Master_Integrator.adoc | 2 +- docs/src/code/adding-configs.adoc | 4 + docs/src/code/adding-configs_es.adoc | 2 + docs/src/code/building-linuxcnc.adoc | 8 +- docs/src/code/building-linuxcnc_es.adoc | 11 +- docs/src/code/code-notes.adoc | 404 ++- docs/src/code/code-notes_es.adoc | 215 +- docs/src/code/contributing-to-linuxcnc.adoc | 2 + .../src/code/contributing-to-linuxcnc_es.adoc | 2 +- docs/src/code/nml-messages.adoc | 4 + docs/src/code/nml-messages_es.adoc | 2 + docs/src/code/rs274.adoc | 5 +- docs/src/code/rs274_es.adoc | 2 +- docs/src/code/style-guide.adoc | 6 +- docs/src/common/GPLD_Copyright_fr.adoc | 2 + docs/src/common/Integrator_Concepts_fr.adoc | 3 +- docs/src/common/emc-history.adoc | 8 +- docs/src/common/emc-history_es.adoc | 1 - docs/src/common/glossary.adoc | 2 + docs/src/common/gpld-copyright.adoc | 6 +- docs/src/common/gpld-copyright_es.adoc | 2 + docs/src/common/gpld-copyright_zh_CN.adoc | 2 + docs/src/common/linux-faq.adoc | 53 +- docs/src/common/linux-faq_es.adoc | 32 +- docs/src/common/outdated-notice_fr.adoc | 2 + docs/src/common/overleaf.adoc | 2 + docs/src/common/overleaf_es.adoc | 4 +- docs/src/common/overleaf_fr.adoc | 2 + docs/src/config/core-components.adoc | 460 ++- docs/src/config/ini-config.adoc | 1484 ++++----- docs/src/config/ini-config_es.adoc | 34 +- docs/src/config/ini-homing.adoc | 3 +- docs/src/config/integrator-concepts.adoc | 9 +- docs/src/config/iov2.adoc | 3 +- docs/src/config/lathe-config.adoc | 3 +- docs/src/config/moveoff.adoc | 41 +- docs/src/config/pncconf.adoc | 3 +- docs/src/config/python-interface.adoc | 15 +- docs/src/config/python-interface_es.adoc | 1 - docs/src/config/stepconf.adoc | 380 +-- docs/src/config/stepconf_es.adoc | 3 +- docs/src/config/stepper-diagnostics.adoc | 78 +- docs/src/config/stepper-diagnostics_es.adoc | 3 +- docs/src/config/stepper-quickstart.adoc | 131 +- docs/src/config/stepper.adoc | 24 +- docs/src/drivers/AX5214H_fr.adoc | 3 +- docs/src/drivers/ax5214h.adoc | 4 +- docs/src/drivers/gm.adoc | 411 +-- docs/src/drivers/gs2.adoc | 61 +- docs/src/drivers/hostmot2.adoc | 407 +-- docs/src/drivers/hostmot2_fr.adoc | 209 +- docs/src/drivers/mb2hal.adoc | 18 +- docs/src/drivers/mitsub_vfd.adoc | 109 +- docs/src/drivers/motenc.adoc | 54 +- docs/src/drivers/opto22.adoc | 71 +- docs/src/drivers/opto22_fr.adoc | 2 + docs/src/drivers/pico-ppmc.adoc | 210 +- docs/src/drivers/pluto-p.adoc | 129 +- docs/src/drivers/pluto_p_fr.adoc | 61 +- docs/src/drivers/pmx485.adoc | 27 +- docs/src/drivers/servo-to-go.adoc | 53 +- docs/src/drivers/servo_to_go_fr.adoc | 6 +- docs/src/drivers/shuttle.adoc | 3 +- docs/src/drivers/vfs11.adoc | 216 +- docs/src/examples/gcode.adoc | 46 +- docs/src/examples/gs2-example.adoc | 20 +- docs/src/examples/mpg.adoc | 25 +- docs/src/examples/pci-parallel-port.adoc | 26 +- docs/src/examples/spindle.adoc | 110 +- docs/src/gcode/coordinates.adoc | 77 +- docs/src/gcode/g-code.adoc | 229 +- docs/src/gcode/gcode_fr.adoc | 8 +- docs/src/gcode/m-code.adoc | 127 +- docs/src/gcode/m-code_es.adoc | 1 - docs/src/gcode/m-code_fr.adoc | 3 +- docs/src/gcode/machining-center.adoc | 170 +- docs/src/gcode/o-code.adoc | 107 +- docs/src/gcode/other-code.adoc | 39 +- docs/src/gcode/overview.adoc | 43 +- docs/src/gcode/overview_es.adoc | 1 - docs/src/gcode/overview_fr.adoc | 3 +- docs/src/gcode/rs274ngc.adoc | 19 +- docs/src/gcode/tool-compensation.adoc | 89 +- ...ing-Started-with-LinuxCNC.contents_fr.adoc | 2 + docs/src/getting-started/Linux_FAQ_fr.adoc | 74 +- .../getting-started/Running-LinuxCNC_fr.adoc | 4 +- .../System_Requirements_fr.adoc | 4 +- docs/src/getting-started/about-linuxcnc.adoc | 101 +- .../getting-started/about-linuxcnc_es.adoc | 6 +- .../src/getting-started/getting-linuxcnc.adoc | 47 +- .../src/getting-started/running-linuxcnc.adoc | 96 +- .../getting-started/running-linuxcnc_es.adoc | 20 +- .../running-linuxcnc_zh_CN.adoc | 7 +- .../stepper_quickstart_fr.adoc | 13 +- .../getting-started/system-requirements.adoc | 17 +- .../system-requirements_es.adoc | 4 +- .../system-requirements_zh_CN.adoc | 1 - .../getting-started/updating-linuxcnc.adoc | 127 +- docs/src/gui/GStat.adoc | 3 +- docs/src/gui/axis.adoc | 388 +-- docs/src/gui/axis_es.adoc | 72 +- docs/src/gui/axis_fr.adoc | 69 +- docs/src/gui/filter_programs.adoc | 5 +- docs/src/gui/gladevcp.adoc | 222 +- docs/src/gui/gladevcp_es.adoc | 2913 ----------------- docs/src/gui/gladevcp_fr.adoc | 82 +- docs/src/gui/gmoccapy.adoc | 482 +-- docs/src/gui/gmoccapy_hu.adoc | 45 +- docs/src/gui/gscreen.adoc | 3 +- docs/src/gui/halui.adoc | 15 +- docs/src/gui/image-to-gcode.adoc | 14 +- docs/src/gui/ngcgui.adoc | 3 +- docs/src/gui/panelui.adoc | 7 +- docs/src/gui/panelui_es.adoc | 5 +- docs/src/gui/pyvcp-examples.adoc | 360 +- docs/src/gui/pyvcp.adoc | 111 +- docs/src/gui/pyvcp_fr.adoc | 186 +- docs/src/gui/qtdragon.adoc | 6 +- docs/src/gui/qtdragon_es.adoc | 88 +- docs/src/gui/qtvcp.adoc | 9 +- docs/src/gui/qtvcp_code_snippets.adoc | 3 +- docs/src/gui/qtvcp_custom_widgets.adoc | 3 +- docs/src/gui/qtvcp_development.adoc | 3 +- docs/src/gui/qtvcp_libraries.adoc | 3 +- docs/src/gui/qtvcp_widgets.adoc | 3 +- docs/src/gui/tklinuxcnc.adoc | 118 +- docs/src/gui/tklinuxcnc_fr.adoc | 6 +- docs/src/gui/tooledit.adoc | 51 +- docs/src/gui/touchy.adoc | 51 +- docs/src/gui/vismach.adoc | 3 +- docs/src/hal/basic-hal.adoc | 36 +- docs/src/hal/basic-hal_es.adoc | 38 +- docs/src/hal/canonical-devices.adoc | 42 +- docs/src/hal/comp.adoc | 311 +- docs/src/hal/comp_es.adoc | 6 +- docs/src/hal/components.adoc | 120 +- docs/src/hal/components_es.adoc | 7 +- docs/src/hal/general-ref.adoc | 3 +- docs/src/hal/hal-examples.adoc | 111 +- docs/src/hal/halmodule.adoc | 70 +- docs/src/hal/halshow.adoc | 82 +- docs/src/hal/haltcl.adoc | 6 +- docs/src/hal/halui-examples.adoc | 23 +- docs/src/hal/intro.adoc | 4 +- docs/src/hal/intro_es.adoc | 1 - docs/src/hal/intro_fr.adoc | 3 +- docs/src/hal/parallel-port.adoc | 62 +- docs/src/hal/parallel-port_es.adoc | 2 +- docs/src/hal/rtcomps.adoc | 439 ++- docs/src/hal/rtcomps_es.adoc | 292 +- docs/src/hal/rtcomps_fr.adoc | 295 +- docs/src/hal/tools.adoc | 48 +- docs/src/hal/tutorial.adoc | 39 +- docs/src/hal/twopass.adoc | 48 +- docs/src/install/latency-test.adoc | 140 +- docs/src/integrator/stepper-timing.adoc | 7 +- docs/src/integrator/steppers.adoc | 27 +- docs/src/integrator/wiring.adoc | 13 +- docs/src/ladder/classic-ladder.adoc | 563 ++-- docs/src/ladder/classic-ladder_es.adoc | 1164 ------- docs/src/ladder/ladder-examples.adoc | 77 +- docs/src/ladder/ladder-intro.adoc | 159 +- docs/src/lathe/lathe-user.adoc | 130 +- docs/src/motion/5-axis-kinematics.adoc | 39 +- docs/src/motion/dh-parameters.adoc | 21 +- docs/src/motion/external-offsets.adoc | 11 +- docs/src/motion/kinematics.adoc | 37 +- docs/src/motion/kinematics_es.adoc | 11 +- docs/src/motion/kinematics_fr.adoc | 4 +- docs/src/motion/pid-theory.adoc | 28 +- docs/src/motion/switchkins.adoc | 10 +- docs/src/motion/tweaking-steppers.adoc | 41 +- docs/src/motion/tweaking_steppers_fr.adoc | 26 +- docs/src/plasma/plasma-cnc-primer.adoc | 36 +- docs/src/plasma/plasma-cnc-primer_es.adoc | 2 +- docs/src/plasma/qtplasmac.adoc | 196 +- docs/src/remap/remap.adoc | 249 +- docs/src/remap/remap_es.adoc | 86 +- docs/src/source-highlight/hal-demo.adoc | 1 + docs/src/source-highlight/ini-demo.adoc | 1 + docs/src/source-highlight/ngc-demo.adoc | 1 + docs/src/tooldatabase/tooldatabase.adoc | 27 +- docs/src/user/starting-linuxcnc.adoc | 11 +- docs/src/user/user-concepts.adoc | 133 +- docs/src/user/user-concepts_es.adoc | 4 +- docs/src/user/user-concepts_fr.adoc | 4 +- docs/src/user/user-foreword.adoc | 6 +- docs/src/user/user-foreword_es.adoc | 7 +- docs/src/user/user-foreword_fr.adoc | 7 +- docs/src/user/user-intro.adoc | 107 +- docs/src/user/user-intro_es.adoc | 16 +- docs/src/user/user-intro_fr.adoc | 29 +- 197 files changed, 6751 insertions(+), 11400 deletions(-) delete mode 100644 docs/src/gui/gladevcp_es.adoc delete mode 100644 docs/src/ladder/classic-ladder_es.adoc diff --git a/docs/README.adoc b/docs/README.adoc index b1c71d5e054..f7aa97d8e46 100644 --- a/docs/README.adoc +++ b/docs/README.adoc @@ -122,6 +122,87 @@ Drawings from QCAD - Export the image as 480 x 480 Resolution Auto .png +Dealing with translations +------------------------- + +Translation of our documentation is in transition at the moment. + +We have some old-style translations that are separate asciidoc .adoc files +checked into git. These started out as copies of the english master +docs at some point, and diverged from there over time. This turned out +not to be an ideal situation. + +We are experimenting with a new system using +[po4a](https://po4a.alioth.debian.org/). 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 po4a(7) manpage, and +online here: + + https://po4a.alioth.debian.org/man/man7/po4a.7.php + +We are using po4a version 0.62, available in Debian Bullseye. + + +To transition a translated file to po4a +--------------------------------------- + +If there is a pre-existing translation of the file to your language, +create a .po translation database seeded by the old translation. + +If the english file is called "file.adoc" then the old pre-existing +translated file is probably called "file_fr.adoc" (for the french +translation, as an example), and the translation database should be +called "file.fr.po". Creating PO file from adoc can be done by +running this command: + + (f=getting-linuxcnc; l=cn; po4a-gettextize --format asciidoc -m ${f}.adoc -M utf8 -l ${f}_${l}.adoc -L utf8 -p ${f}.${l}.po) + +Similarly, for translated manual pages: + + (f=elbpcom.1; l=es; po4a-gettextize --format asciidoc -m man/man1/${f} -M utf8 -l man/${l}/man1/${f} -L utf8 -p ${f}.${l}.po) + + +To append the extracted translations to the combined PO file, do +something like this: + + msgcat --use-first po/Documentation.es.po elbpcom.1.es.po \ + > po/Documentation.es.po + +To create a new po4a translation of an untranslated file +-------------------------------------------------------- + +If there is no pre-existing translation of the file to your language, +create an empty .po file to start with. If the english file is called +"file.adoc" then the translation database should be called "file.se.po" +(for the swedish translation, as an example). It is created by running +this command: + + po4a-gettextize --format text -m file.adoc -M utf8 -p file.se.po + + +Improving the translation of a po4a-managed file +------------------------------------------------ + +Translations are done paragraph by paragraph. + +You can use a GUI tool like poedit or gtranslator or others, or you can +(carefully!) edit the .po file by hand. + +The next time the translated document gets rebuilt, the updated +translations will be used. + + +When the master document (english) changes +------------------------------------------ + +When the master document (english) file has changed, use the po4a-updatepo +to update the .po files: + + po4a-updatepo -f text -m file.adoc -p file.fr.po + + How to add a new translation language ------------------------------------- @@ -134,8 +215,10 @@ Add the asciidoc source files containing your new translation. Usually that means copying the language files from one of the existing languages, probably English since that's usually the most up-to-date. -Add the new files to the proper place in docs/src/Submakefile, to ensure -they get built. +Copy the docs/po/Documentation.pot todocs/po/Documentation.$LANG.po. +where $LANG is a two letter language code according to ISO 639-1, or +three letter code according to ISO 639-2 if no two letter code exist. +Add the new language code to the proper place in docs/po4a.conf. 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 diff --git a/docs/src/Master_Developer.adoc b/docs/src/Master_Developer.adoc index 345513acf13..570b2bcf224 100644 --- a/docs/src/Master_Developer.adoc +++ b/docs/src/Master_Developer.adoc @@ -1,37 +1,25 @@ +:lang: en :lversion: {sys: cat ../VERSION} :date: {sys: LANG=C date --date="@$(dpkg-parsechangelog --file ../debian/changelog -S timestamp)" '+%d %b %Y'} -Developer Manual V{lversion}, {date} -==================================== - -:lang: en +:ascii-ids: :masterdir: {indir} :revdate: 2021-10-28 - - += Developer Manual V{lversion}, {date} == Introduction image::common/images/emc2-intro.png[] include::common/overleaf.adoc[] - :leveloffset: 1 include::code/code-notes.adoc[] - include::code/nml-messages.adoc[] - include::code/style-guide.adoc[] - include::code/building-linuxcnc.adoc[] - include::code/adding-configs.adoc[] - include::code/contributing-to-linuxcnc.adoc[] - include::common/glossary.adoc[] - include::common/gpld-copyright.adoc[] // vim: set syntax=asciidoc: - diff --git a/docs/src/Master_Documentation.adoc b/docs/src/Master_Documentation.adoc index 180af613018..e5d49f72849 100644 --- a/docs/src/Master_Documentation.adoc +++ b/docs/src/Master_Documentation.adoc @@ -1,8 +1,8 @@ +:lang: en :lversion: {sys: cat ../VERSION} :date: {sys: LANG=C date --date="@$(dpkg-parsechangelog --file ../debian/changelog -S timestamp)" '+%d %b %Y'} LinuxCNC V{lversion}, {date} ============================ -:lang: en :revdate: 2021-10-28 = Contents @@ -59,6 +59,7 @@ include::plasma/plasma-cnc-primer.adoc[] :leveloffset: 1 + = User Interfaces :leveloffset: 2 diff --git a/docs/src/Master_Getting_Started.adoc b/docs/src/Master_Getting_Started.adoc index 405a4a4e8aa..8fd67c6a880 100644 --- a/docs/src/Master_Getting_Started.adoc +++ b/docs/src/Master_Getting_Started.adoc @@ -1,8 +1,7 @@ +:lang: en :lversion: {sys: cat ../VERSION} :date: {sys: LANG=C date --date="@$(dpkg-parsechangelog --file ../debian/changelog -S timestamp)" '+%d %b %Y'} -Getting Started V{lversion}, {date} -=================================== -:lang: en += Getting Started V{lversion}, {date} :masterdir: {indir} :revdate: 2021-10-28 diff --git a/docs/src/Master_Getting_Started_zh_CN.adoc b/docs/src/Master_Getting_Started_zh_CN.adoc index d1b76a88983..6a50a41aee4 100644 --- a/docs/src/Master_Getting_Started_zh_CN.adoc +++ b/docs/src/Master_Getting_Started_zh_CN.adoc @@ -1,8 +1,8 @@ +:lang: zh_CN :lversion: {sys: cat ../VERSION} :date: {sys: LANG=C date --date="@$(dpkg-parsechangelog --file ../debian/changelog -S timestamp)" '+%d %b %Y'} Getting Started V{lversion}, {date} =================================== -:lang: zh_CN :masterdir: {indir} :revdate: 2021-10-28 diff --git a/docs/src/Master_Integrator.adoc b/docs/src/Master_Integrator.adoc index 15fc1ccb46d..51c7ab0dc48 100644 --- a/docs/src/Master_Integrator.adoc +++ b/docs/src/Master_Integrator.adoc @@ -1,8 +1,8 @@ +:lang: en :lversion: {sys: cat ../VERSION} :date: {sys: LANG=C date --date="@$(dpkg-parsechangelog --file ../debian/changelog -S timestamp)" '+%d %b %Y'} Integrator Information V{lversion}, {date} ========================================== -:lang: en :masterdir: {indir} :revdate: 2021-10-28 diff --git a/docs/src/code/adding-configs.adoc b/docs/src/code/adding-configs.adoc index cf4305d51d7..f0921149b69 100644 --- a/docs/src/code/adding-configs.adoc +++ b/docs/src/code/adding-configs.adoc @@ -1,3 +1,5 @@ +:lang: en + = Adding Configuration Selection Items Example Configurations can be added to the Configuration Selector @@ -24,3 +26,5 @@ by two methods: ==== export LINUXCNC_AUX_CONFIGS=~/myconfigs:/opt/otherconfigs ==== + +// vim: set syntax=asciidoc: diff --git a/docs/src/code/adding-configs_es.adoc b/docs/src/code/adding-configs_es.adoc index 8f0d8ebbef4..68f6e9d1676 100644 --- a/docs/src/code/adding-configs_es.adoc +++ b/docs/src/code/adding-configs_es.adoc @@ -26,3 +26,5 @@ por dos métodos: ==== export LINUXCNC_AUX_CONFIGS=~/myconfigs:/opt/otherconfigs ==== + +// vim: set syntax=asciidoc: diff --git a/docs/src/code/building-linuxcnc.adoc b/docs/src/code/building-linuxcnc.adoc index ec5b3e160ef..c4a00708d54 100644 --- a/docs/src/code/building-linuxcnc.adoc +++ b/docs/src/code/building-linuxcnc.adoc @@ -1,3 +1,5 @@ +:lang: en + = Building LinuxCNC == Introduction @@ -9,7 +11,6 @@ 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 - [[Quick-Start]] === Quick Start @@ -352,7 +353,6 @@ missing packages. This section describes the special steps needed to set up a machine to run the LinuxCNC programs, including the tests. - === Increase the locked memory limit LinuxCNC tries to improve its realtime latency by locking the memory it @@ -391,7 +391,6 @@ the memory lock limit is raised using the following command: > ulimit -l ----- - == Options for checking out the git repo The <> instructions at the top of this @@ -399,7 +398,6 @@ 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. - === Fork us on Github The LinuxCNC project git repo is at http://github.com/LinuxCNC/linuxcnc. @@ -414,3 +412,5 @@ 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. + +// vim: set syntax=asciidoc: diff --git a/docs/src/code/building-linuxcnc_es.adoc b/docs/src/code/building-linuxcnc_es.adoc index 29fb0eda2e1..e6ff4d26993 100644 --- a/docs/src/code/building-linuxcnc_es.adoc +++ b/docs/src/code/building-linuxcnc_es.adoc @@ -11,7 +11,6 @@ un usuario que está probando ramas de desarrollo, aunque también se tiene la opción de instalar paquetes unicos Debian desde buildboot: http://buildbot.linuxcnc.org - [[Quick-Start]] === Inicio rápido @@ -48,7 +47,6 @@ Después de haber compilado con éxito LinuxCNC, es hora de ejecutar las pruebas ¡Esto también podría fallar!. Lea todo este documento, pero especialmente la sección. en <>. - == Plataformas compatibles El proyecto LinuxCNC apunta a distribuciones modernas basadas en Debian, que incluyen @@ -61,7 +59,6 @@ LinuxCNC compila en la mayoría de las otras distribuciones de Linux, aunque la de dependencias será más manual. Siempre son bienvenidos parches para mejorar la portabilidad a nuevas plataformas . - === Realtime LinuxCNC es un controlador de máquina herramienta, y requiere una plataforma en tiempo real @@ -93,7 +90,6 @@ partes, ejecute este comando adicional después del `make` que construye LinuxCN > sudo make setuid ----- - === Sin Tiempo Real LinuxCNC también se puede construir y ejecutar en plataformas que no son de tiempo real, como @@ -109,7 +105,6 @@ tipos de componentes y controladores de dispositivos). Hay dos formas de tener LinuxCNCen una maquina: "ejecución en el sitio” (run-in-place o RIP, el modo de mayor libertad) y el modo “empaquetado Debian”, fácil de usar para el usuario (pero difícilmente modificable). - === Compilacion Run-In-Place En una compilación Run-In-Place, los programas LinuxCNC se compilan desde las fuentes @@ -245,7 +240,6 @@ el directorio `linuxcnc-dev`, *no* desde `linuxcnc-dev/debian`): > dpkg-buildpackage -b -uc ----- - [[debian-configure-arguments]] ==== Argumentos `debian/configure` @@ -294,7 +288,6 @@ Los valores normales para este argumento son: kernel RTAI coincidente, no podrá ejecutar LinuxCNC, incluyendo el conjunto de pruebas. - [[Satisfying-Build-Dependencies]] == Satisfacer Dependencias de Construcción @@ -338,14 +331,12 @@ en su sistema, pero que aún no están instalados. Instalelos todos con Puede volver a ejecutar `dpkg-checkbuilddeps`, en el momento que desee, para enumerar cualquier paquete faltante. - [[Setting-up-the-environment]] == Configuración del entorno Esta sección describe los pasos especiales necesarios para configurar una máquina para ejecutar los programas LinuxCNC, incluidas las pruebas. - === Aumentar el límite de memoria bloqueada LinuxCNC intenta mejorar su latencia en tiempo real bloqueando la memoria que @@ -384,7 +375,6 @@ que el límite de bloqueo de memoria se aumentó con el siguiente comando: > ulimit -l ----- - == Opciones para ver el repositorio de git Las instrucciones <> en la parte superior de este @@ -408,3 +398,4 @@ la comunidad pueda beneficiarse de su trabajo. Github hace que compartir sea muy fácil; después de pulir sus cambios y añadirlos a su bifurcacion github, envíenos una solicitud de extracción. +// vim: set syntax=asciidoc: diff --git a/docs/src/code/code-notes.adoc b/docs/src/code/code-notes.adoc index b022366dce2..d744d319399 100644 --- a/docs/src/code/code-notes.adoc +++ b/docs/src/code/code-notes.adoc @@ -1,3 +1,5 @@ +:lang: en + = Code Notes == Intended audience @@ -17,48 +19,48 @@ very much a work in progress, and its layout may change in the future. == Terms and definitions * '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.) + 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.) * '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. + 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. * 'POSE' - A pose is a fully specified position in 3-D 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). + 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). == Architecture overview @@ -707,7 +709,6 @@ 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. - == Backlash and Screw Error Compensation + @@ -723,29 +724,25 @@ image::task-state-transitions.svg[align="center"] == IO controller (EMCIO) -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 + - + +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. -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. + - + +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. -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. + - + +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. iocontrol main loop process: -- registers for SIGTERM and SIGINT signals from the OS. + -- checks to see it HAL inputs have changed + -- checks if read_tool_inputs() indicates the tool change is finished and set emcioStatus.status + -- checks for I/O related NML messages + - + +- registers for SIGTERM and SIGINT signals from the OS. +- checks to see it HAL inputs have changed +- checks if read_tool_inputs() indicates the tool change is finished and set emcioStatus.status +- checks for I/O related NML messages nml message numbers: from emc.hh: @@ -872,7 +869,7 @@ and rcslib code. Much of this needs to be edited and re-written in a coherent manner before publication. -/////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// == Configuration file format @@ -891,7 +888,7 @@ The original NIST format of the buffer line is: * 'host' - is either an IP address or host name for the NML server * 'size' - is the size of the buffer * 'neut' - a boolean to indicate if the data in the buffer is encoded in a - machine independent format, or raw. + machine independent format, or raw. * 'RPC#' - Obsolete - Place holder retained for backward compatibility only. * 'buffer#' - A unique ID number used if a server controls multiple buffers. * 'max_procs' - is the maximum processes allowed to connect to this buffer. @@ -909,16 +906,16 @@ buffer type will be covered. * 'mutex=no_interrupts' - not applicable on a Linux system * 'mutex=no_switching' - not applicable on a Linux system * '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. + one process to access part of the buffer whilst a second process is + writing to another part. * 'TCP=(port number)' - Specifies which network port to use. * 'UDP=(port number)' - ditto * 'STCP=(port number)' - ditto * 'serialPortDevName=(serial port)' - Undocumented. * 'passwd=file_name.pwd' - Adds a layer of security to the buffer by - requiring each process to provide a password. + requiring each process to provide a password. * 'bsem' - NIST documentation implies a key for a blocking semaphore, - and if bsem=-1, blocking reads are prevented. + and if bsem=-1, blocking reads are prevented. * 'queue' - Enables queued message passing. * 'ascii' - Encode messages in a plain text format * 'disp' - Encode messages in a format suitable for display (???) @@ -1099,14 +1096,12 @@ Recompile, and the new message should be there. The next part is to send such messages from somewhere, and receive them in another place, and do some stuff with it. - == The Tool Table and Toolchanger LinuxCNC interfaces with toolchanger hardware, and has an internal toolchanger abstraction. LinuxCNC manages tool information in a tool table file. - === Toolchanger abstraction in LinuxCNC LinuxCNC supports two kinds of toolchanger hardware, @@ -1114,7 +1109,6 @@ called _nonrandom_ and _random_. The ini setting <> controls which of these kinds of hardware LinuxCNC thinks it's connected to. - ==== Nonrandom Toolchangers Nonrandom toolchanger hardware puts each tool back in the pocket it was @@ -1169,12 +1163,12 @@ tool number:: nonrandom toolchangers: * When LinuxCNC is configured for a nonrandom toolchanger this - number must be positive. T0 gets special handling and is not - allowed to appear in the tool table. + number must be positive. T0 gets special handling and is not + allowed to appear in the tool table. * When LinuxCNC is configured for a random toolchanger this number - must be non-negative. T0 is allowed in the tool table, and is - usually used to represent "no tool", ie the empty pocket. + must be non-negative. T0 is allowed in the tool table, and is + usually used to represent "no tool", ie the empty pocket. pocket number:: @@ -1184,15 +1178,15 @@ pocket number:: toolchangers: * When LinuxCNC is configured for a nonrandom toolchanger, the pocket - number in the tool file can be any positive integer (pocket - 0 is not allowed). LinuxCNC silently compactifies the pocket - numbers when it loads the tool file, so there may be a difference - between the pocket numbers in the tool file and the internal - pocket numbers used by LinuxCNC-with-nonrandom-toolchanger. + number in the tool file can be any positive integer (pocket + 0 is not allowed). LinuxCNC silently compactifies the pocket + numbers when it loads the tool file, so there may be a difference + between the pocket numbers in the tool file and the internal + pocket numbers used by LinuxCNC-with-nonrandom-toolchanger. * When LinuxCNC is configured for a random toolchanger, the pocket - numbers in the tool file must be between 0 and 1000, inclusive. - Pockets 1-1000 are in the toolchanger, pocket 0 is the spindle. + numbers in the tool file must be between 0 and 1000, inclusive. + Pockets 1-1000 are in the toolchanger, pocket 0 is the spindle. diameter:: @@ -1203,12 +1197,10 @@ tool length offset:: Tool length offset (also called TLO), in up to 9 axes, in machine units. Axes that don't have a specified TLO get 0. - === G-codes affecting tools The G-codes that use or affect tool information are: - ==== Txxx Tells the toolchanger hardware to prepare to switch to a specified @@ -1216,25 +1208,25 @@ tool +xxx+. Handled by +Interp::convert_tool_select()+. -. The machine is asked to prepare to switch to the selected tool by - calling the Canon function +SELECT_TOOL()+ with the tool number - of the requested tool. +. 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. - .. (saicanon) No-op. + .. (saicanon) No-op. - .. (emccanon) Builds an +EMC_TOOL_PREPARE+ message with the requested - pocket number and sends it to Task, which sends it on - to IO. IO gets the message and asks HAL to prepare - the pocket by setting +iocontrol.0.tool-prep-pocket+, - +iocontrol.0.tool-prep-number+, and +iocontrol.0.tool-prepare+. - IO then repeatedly calls +read_tool_inputs()+ to poll the HAL pin - +iocontrol.0.tool-prepared+, which signals from the toolchanger - hardware, via HAL, to IO that the requested tool prep is complete. - When that pin goes True, IO sets +emcioStatus.tool.pocketPrepped+ - to the requested tool's pocket number. + .. (emccanon) Builds an +EMC_TOOL_PREPARE+ message with the requested + pocket number and sends it to Task, which sends it on + to IO. IO gets the message and asks HAL to prepare + the pocket by setting +iocontrol.0.tool-prep-pocket+, + +iocontrol.0.tool-prep-number+, and +iocontrol.0.tool-prepare+. + IO then repeatedly calls +read_tool_inputs()+ to poll the HAL pin + +iocontrol.0.tool-prepared+, which signals from the toolchanger + hardware, via HAL, to IO that the requested tool prep is complete. + When that pin goes True, IO sets +emcioStatus.tool.pocketPrepped+ + to the requested tool's pocket number. -. Back in interp, +settings->selected_pocket+ is assigned the tooldata - index of the requested tool _xxx_. +. Back in interp, +settings->selected_pocket+ is assigned the tooldata + index of the requested tool _xxx_. [NOTE] The legacy names *selected_pocket* and *current_pocket* actually reference @@ -1248,39 +1240,39 @@ by the previous Txxx command). Handled by +Interp::convert_tool_change()+. -. The machine is asked to change to the selected tool - by calling the Canon function +CHANGE_TOOL()+ with - +settings->selected_pocket+ (a tooldata index). - - .. (saicanon) Sets sai's +_active_slot+ to the passed-in pocket - number. Tool information is copied from the selected pocket - of of the tool table (ie, from sai's +_tools[_active_slot]+) - to the spindle (aka sai's +_tools[0]+). - - .. (emccanon) Sends an +EMC_TOOL_LOAD+ message to Task, which - sends it to IO. IO sets +emcioStatus.tool.toolInSpindle+ - to the tool number of the tool in the pocket identified - by +emcioStatus.tool.pocketPrepped+ (set by +Txxx+ - aka +SELECT_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. - - ... +load_tool()+ with a nonrandom toolchanger - config copies the tool information from the selected pocket - to the spindle (pocket 0). - - ... +load_tool()+ with a random toolchanger config swaps tool - information between pocket 0 (the spindle) and the selected - pocket, then saves the tool table. - -. Back in interp, +settings->current_pocket+ is assigned the new - tooldata index from +settings->selected_pocket+ (set by +Txxx+). The relevant - numbered parameters (<>) are - updated with the new tool information from pocket 0 (spindle). +. The machine is asked to change to the selected tool + by calling the Canon function +CHANGE_TOOL()+ with + +settings->selected_pocket+ (a tooldata index). + + .. (saicanon) Sets sai's +_active_slot+ to the passed-in pocket + number. Tool information is copied from the selected pocket + of of the tool table (ie, from sai's +_tools[_active_slot]+) + to the spindle (aka sai's +_tools[0]+). + + .. (emccanon) Sends an +EMC_TOOL_LOAD+ message to Task, which + sends it to IO. IO sets +emcioStatus.tool.toolInSpindle+ + to the tool number of the tool in the pocket identified + by +emcioStatus.tool.pocketPrepped+ (set by +Txxx+ + aka +SELECT_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. + + ... +load_tool()+ with a nonrandom toolchanger + config copies the tool information from the selected pocket + to the spindle (pocket 0). + + ... +load_tool()+ with a random toolchanger config swaps tool + information between pocket 0 (the spindle) and the selected + pocket, then saves the tool table. + +. Back in interp, +settings->current_pocket+ is assigned the new + tooldata index from +settings->selected_pocket+ (set by +Txxx+). The relevant + numbered parameters (<>) are + updated with the new tool information from pocket 0 (spindle). ==== G43/G43.1/G49 @@ -1292,26 +1284,26 @@ the offset for all axes). Handled by +Interp::convert_tool_length_offset()+. -. It starts by building an +EmcPose+ containing the 9-axis offsets - to use. For +G43.1+, these tool offsets come from axis words in the - current block. For +G43+ these offsets come from the current tool - (the tool in pocket 0), or from the tool specified by the H-word in - the block. For G49, the offsets are all 0. +. It starts by building an +EmcPose+ containing the 9-axis offsets + to use. For +G43.1+, these tool offsets come from axis words in the + current block. For +G43+ these offsets come from the current tool + (the tool in pocket 0), or from the tool specified by the H-word in + the block. For G49, the offsets are all 0. -. The offsets are passed to Canon's +USE_TOOL_LENGTH_OFFSET()+ function. +. The offsets are passed to Canon's +USE_TOOL_LENGTH_OFFSET()+ function. - .. (saicanon) Records the TLO in +_tool_offset+. + .. (saicanon) Records the TLO in +_tool_offset+. - .. (emccanon) Builds an +EMC_TRAJ_SET_OFFSET+ message containing the - offsets and sends it to Task. Task copies the offsets to - +emcStatus->task.toolOffset+ and sends them on to Motion via - an +EMCMOT_SET_OFFSET+ command. Motion copies the offsets - to +emcmotStatus->tool_offset+, where it gets used to offset - future motions. + .. (emccanon) Builds an +EMC_TRAJ_SET_OFFSET+ message containing the + offsets and sends it to Task. Task copies the offsets to + +emcStatus->task.toolOffset+ and sends them on to Motion via + an +EMCMOT_SET_OFFSET+ command. Motion copies the offsets + to +emcmotStatus->tool_offset+, where it gets used to offset + future motions. -. Back in interp, the offsets are recorded in +settings->tool_offset+. - The effective pocket is recorded in +settings->tool_offset_index+, - though this value is never used. +. Back in interp, the offsets are recorded in +settings->tool_offset+. + The effective pocket is recorded in +settings->tool_offset_index+, + though this value is never used. ==== G10 L1/L10/L11 @@ -1320,60 +1312,59 @@ Modifies the tool table. Handled by +Interp::convert_setup_tool()+. -. Picks the tool number out of the P-word in the block and finds the - pocket for that tool: - - .. With a nonrandom toolchanger config this is always the - pocket number in the toolchanger (even when the tool is in - the spindle). - - .. With a random toolchanger config, if the tool is currently - loaded it uses pocket 0 (pocket 0 means "the spindle"), - and if the tool is not loaded it uses the pocket number in - the tool changer. (This difference is important.) - -. Figures out what the new offsets should be. - -. The new tool information (diameter, offsets, angles, and orientation), - along with the tool number and pocket number, are passed to the Canon - call SET_TOOL_TABLE_ENTRY(). - - .. (saicanon) Copy the new tool information to the specified pocket - (in sai's internal tool table, +_tools+). - - .. (emccanon) Build an +EMC_TOOL_SET_OFFSET+ message with the new - tool information, and send it to Task, which passes it - to IO. IO updates the specified pocket in its internal - copy of the tool table (+emcioStatus.tool.toolTable+), and - if the specified tool is currently loaded (it is compared to - +emcioStatus.tool.toolInSpindle+) then the new tool information - is copied to pocket 0 (the spindle) as well. (FIXME: that's a - buglet, should only be copied on nonrandom machines.) Finally IO - saves the new tool table. - -. Back in interp, if the modified tool is currently loaded in the - spindle, and if the machine is a non-random toolchanger, then - the new tool information is copied from the tool's home pocket - to pocket 0 (the spindle) in interp's copy of the tool table, - +settings->tool_table+. (This copy is not needed on random tool - changer machines because there, tools don't have a home pocket and - instead we just updated the tool in pocket 0 directly.) - -. The relevant numbered parameters - (<>) are updated from the tool - information in the spindle (by copying the information from interp's - +settings->tool_table+ to +settings->parameters+). (FIXME: this is - a buglet, the params should only be updated if it was the current - tool that was modified). - -. If the modified tool is currently loaded in the - spindle, and if the config is for a nonrandom toolchanger, then the - new tool information is written to the tool table's pocket 0 as well, - via a second call to SET_TOOL_TABLE_ENTRY(). (This second tool-table - update is not needed on random toolchanger machines because there, - tools don't have a home pocket and instead we just updated the tool - in pocket 0 directly.) - +. Picks the tool number out of the P-word in the block and finds the + pocket for that tool: + + .. With a nonrandom toolchanger config this is always the + pocket number in the toolchanger (even when the tool is in + the spindle). + + .. With a random toolchanger config, if the tool is currently + loaded it uses pocket 0 (pocket 0 means "the spindle"), + and if the tool is not loaded it uses the pocket number in + the tool changer. (This difference is important.) + +. Figures out what the new offsets should be. + +. The new tool information (diameter, offsets, angles, and orientation), + along with the tool number and pocket number, are passed to the Canon + call SET_TOOL_TABLE_ENTRY(). + + .. (saicanon) Copy the new tool information to the specified pocket + (in sai's internal tool table, +_tools+). + + .. (emccanon) Build an +EMC_TOOL_SET_OFFSET+ message with the new + tool information, and send it to Task, which passes it + to IO. IO updates the specified pocket in its internal + copy of the tool table (+emcioStatus.tool.toolTable+), and + if the specified tool is currently loaded (it is compared to + +emcioStatus.tool.toolInSpindle+) then the new tool information + is copied to pocket 0 (the spindle) as well. (FIXME: that's a + buglet, should only be copied on nonrandom machines.) Finally IO + saves the new tool table. + +. Back in interp, if the modified tool is currently loaded in the + spindle, and if the machine is a non-random toolchanger, then + the new tool information is copied from the tool's home pocket + to pocket 0 (the spindle) in interp's copy of the tool table, + +settings->tool_table+. (This copy is not needed on random tool + changer machines because there, tools don't have a home pocket and + instead we just updated the tool in pocket 0 directly.) + +. The relevant numbered parameters + (<>) are updated from the tool + information in the spindle (by copying the information from interp's + +settings->tool_table+ to +settings->parameters+). (FIXME: this is + a buglet, the params should only be updated if it was the current + tool that was modified). + +. If the modified tool is currently loaded in the + spindle, and if the config is for a nonrandom toolchanger, then the + new tool information is written to the tool table's pocket 0 as well, + via a second call to SET_TOOL_TABLE_ENTRY(). (This second tool-table + update is not needed on random toolchanger machines because there, + tools don't have a home pocket and instead we just updated the tool + in pocket 0 directly.) ==== M61 @@ -1388,7 +1379,6 @@ Canon: +CHANGE_TOOL_NUMBER()+ settings->current_pocket is assigned the tooldata index currently holding the tool specified by the Q-word argument. - ==== G41/G41.1/G42/G42.1 Enable cutter radius compensation (usually called _cutter comp_). @@ -1400,7 +1390,6 @@ table in the expected way: if a D-word tool number is supplied it looks up the pocket number of the specified tool number in the table, and if no D-word is supplied it uses pocket 0 (the spindle). - ==== G40 Cancel cutter radius compensation. @@ -1410,13 +1399,11 @@ Handled by +Interp::convert_cutter_compensation_off()+. No Canon call, cutter comp happens in the interpreter. Does not use the tool table. - === Internal state variables This is not an exhaustive list! Tool information is spread through out LinuxCNC. - ==== IO +emcioStatus+ is of type +EMC_IO_STAT+ @@ -1443,7 +1430,6 @@ emcioStatus.tool.toolTable[]:: of the tool information, maintained separately from Interp's +settings.tool_table+. - ==== interp +settings+ is of type +settings+, which is +struct setup_struct+. @@ -1493,10 +1479,10 @@ settings.tool_offset:: * Used to compute position in various places. * Sent to Motion via the +EMCMOT_SET_OFFSET+ message. - All motion does with the offsets is export them to the HAL pins - +motion.0.tooloffset.[xyzabcuvw]+. FIXME: export these from - someplace closer to the tool table (io or interp, probably) - and remove the EMCMOT_SET_OFFSET message. + All motion does with the offsets is export them to the HAL + pins +motion.0.tooloffset.[xyzabcuvw]+. FIXME: export these from + someplace closer to the tool table (io or interp, probably) + and remove the EMCMOT_SET_OFFSET message. settings.pockets_max:: @@ -1522,7 +1508,6 @@ settings.tool_change_with_spindle_on:: These are set from ini variables in the +[EMCIO]+ section, and control how tool changes are performed. - == Reckoning of joints and axes === In the status buffer @@ -1575,7 +1560,6 @@ 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. - === In Motion The Motion controller realtime component first gets the number of joints @@ -1587,3 +1571,5 @@ Motion's number of joints can be changed at runtime using the The Motion controller always operates on `EMCMOT_MAX_AXIS` axes. It always creates nine sets of `axis.*.*` pins. + +// vim: set syntax=asciidoc: diff --git a/docs/src/code/code-notes_es.adoc b/docs/src/code/code-notes_es.adoc index 0e283dc8f85..8e467cac8a2 100644 --- a/docs/src/code/code-notes_es.adoc +++ b/docs/src/code/code-notes_es.adoc @@ -1,6 +1,6 @@ -[[cha:code-notes]] :lang: es +[[cha:code-notes]] = Notas sobre el código == Audiencia @@ -20,71 +20,71 @@ un trabajo en progreso y su diseño puede cambiar en el futuro. == Términos y definiciones * 'EJE': un eje es uno de los nueve grados de libertad que define la posición - de una herramienta en el espacio cartesiano tridimensional. Los nueve ejes son - referidos como X, Y, Z, A, B, C, U, V y W. Las coordenadas lineales ortogonales - X, Y y Z determinan dónde está posicionada la punta de la herramienta. - Las coordenadas angulares A, B y C determinan la orientación de la herramienta. - Un segundo conjunto de coordenadas lineales ortogonales U, V y W - permite el movimiento de la herramienta (generalmente para acciones de corte) en relación con los - ejes previamente desplazados y rotados. - Lamentablemente, "eje" se usa a veces para significar un grado de libertad de la máquina en sí, - como los carros longitudinal y transversal o el avance fino del husillo de una fresadora vertical. - En estas maquinas, esto no causa confusión ya que, por ejemplo, el movimiento de la mesa - corresponde directamente al movimiento a lo largo del eje X. Sin embargo, las - articulaciones de hombro y codo de un brazo robótico y los actuadores lineales de un - hexápodo no se corresponde al movimiento a lo largo de ningún eje cartesiano y en - en general es importante hacer la distinción entre el eje cartesiano - y grados de libertad de la máquina. En este documento, esto último - se llamarán 'articulaciones', no ejes. (Las GUI y algunas otras partes de - el código no siempre sigue esta distinción, pero las partes internas de - el controlador de movimiento si lo hacen.) + de una herramienta en el espacio cartesiano tridimensional. Los nueve ejes son + referidos como X, Y, Z, A, B, C, U, V y W. Las coordenadas lineales ortogonales + X, Y y Z determinan dónde está posicionada la punta de la herramienta. + Las coordenadas angulares A, B y C determinan la orientación de la herramienta. + Un segundo conjunto de coordenadas lineales ortogonales U, V y W + permite el movimiento de la herramienta (generalmente para acciones de corte) en relación con los + ejes previamente desplazados y rotados. + Lamentablemente, "eje" se usa a veces para significar un grado de libertad de la máquina en sí, + como los carros longitudinal y transversal o el avance fino del husillo de una fresadora vertical. + En estas maquinas, esto no causa confusión ya que, por ejemplo, el movimiento de la mesa + corresponde directamente al movimiento a lo largo del eje X. Sin embargo, las + articulaciones de hombro y codo de un brazo robótico y los actuadores lineales de un + hexápodo no se corresponde al movimiento a lo largo de ningún eje cartesiano y en + en general es importante hacer la distinción entre el eje cartesiano + y grados de libertad de la máquina. En este documento, esto último + se llamarán 'articulaciones', no ejes. (Las GUI y algunas otras partes de + el código no siempre sigue esta distinción, pero las partes internas de + el controlador de movimiento si lo hacen.) * 'ARTICULACIÓN': una articulación es cada una de las partes móviles de la máquina. Las articulaciones son - distintas de los ejes, aunque los dos términos a veces se usan (incorrectamente) para - significa lo mismo. En LinuxCNC, una articulación es un objeto físico que puede ser - movido, no una coordenada en el espacio. Por ejemplo, todos los carros, la palanca del husillo o un plato giratorio - de una fresadora vertical son articulaciones. El hombro, el codo y - la muñeca de un brazo robótico son articulaciones, al igual que los actuadores lineales de un - hexápodo. Cada articulación tiene un motor o actuador de algún tipo asociado - con ella. Las articulaciones no corresponden necesariamente a los ejes X, Y y Z, - aunque para máquinas con cinemática trivial, puede ser el caso. - Incluso en esas máquinas, la posición articular y la posición del eje son - cosas inherentemente diferentes. En este documento, los términos 'articulación' y 'eje' - se utilizan con cuidado para respetar sus distintos significados. - Desafortunadamente, eso no es necesariamente cierto en ningún otro lado. En - en particular, las GUI para máquinas con cinemática trivial pueden pasar por alto o - oculta completamente la distinción entre articulaciones y ejes. Adicionalmente, - el archivo ini usa el término 'eje' para datos que serían más precisos - describirse como datos de articulaciones, como las escalas de entrada y salida, etc. - - N.T. En la version 2.8 de Linuxcnc ya se hace esta distinción. - El archivo .ini cuenta con la nueva sección [JOINT_]. Muchos de los parámetros que antes - eran propios de la sección [AXIS_] están ahora en la nueva sección. Otras secciones, - como por ejemplo [KINS], también adquieren nuevos parámetros para ajustarse a esto. - Se ha previsto un mecanismo para transformar archivos .ini antiguos a la nueva configuración - ejes/articulaciones. + distintas de los ejes, aunque los dos términos a veces se usan (incorrectamente) para + significa lo mismo. En LinuxCNC, una articulación es un objeto físico que puede ser + movido, no una coordenada en el espacio. Por ejemplo, todos los carros, la palanca del husillo o un plato giratorio + de una fresadora vertical son articulaciones. El hombro, el codo y + la muñeca de un brazo robótico son articulaciones, al igual que los actuadores lineales de un + hexápodo. Cada articulación tiene un motor o actuador de algún tipo asociado + con ella. Las articulaciones no corresponden necesariamente a los ejes X, Y y Z, + aunque para máquinas con cinemática trivial, puede ser el caso. + Incluso en esas máquinas, la posición articular y la posición del eje son + cosas inherentemente diferentes. En este documento, los términos 'articulación' y 'eje' + se utilizan con cuidado para respetar sus distintos significados. + Desafortunadamente, eso no es necesariamente cierto en ningún otro lado. En + en particular, las GUI para máquinas con cinemática trivial pueden pasar por alto o + oculta completamente la distinción entre articulaciones y ejes. Adicionalmente, + el archivo ini usa el término 'eje' para datos que serían más precisos + describirse como datos de articulaciones, como las escalas de entrada y salida, etc. + + N.T. En la version 2.8 de Linuxcnc ya se hace esta distinción. + El archivo .ini cuenta con la nueva sección [JOINT_]. Muchos de los parámetros que antes + eran propios de la sección [AXIS_] están ahora en la nueva sección. Otras secciones, + como por ejemplo [KINS], también adquieren nuevos parámetros para ajustarse a esto. + Se ha previsto un mecanismo para transformar archivos .ini antiguos a la nueva configuración + ejes/articulaciones. * 'POSE'- una pose es una posición completamente especificada en un espacio cartesiano 3-D. En - el controlador de movimiento LinuxCNC, cuando nos referimos a una pose nos referimos a una - estructura EmcPose, que contiene seis coordenadas lineales (X, Y, Z, U, - V y W) y tres angulares (A, B y C). + el controlador de movimiento LinuxCNC, cuando nos referimos a una pose nos referimos a una + estructura EmcPose, que contiene seis coordenadas lineales (X, Y, Z, U, + V y W) y tres angulares (A, B y C). * 'coord', o modo coordinado, significa que todas las articulaciones están sincronizadas y se - mueven juntas según lo ordenado por el código de nivel superior. Es el modo normal al mecanizar. - En el modo coordinado, se supone que los comandos se dan en el marco de referencia cartesiano, - y si la máquina no es cartesiana, los comandos son traducidos por la cinemática para impulsar - cada articulación en el espacio articular según sea necesario. + mueven juntas según lo ordenado por el código de nivel superior. Es el modo normal al mecanizar. + En el modo coordinado, se supone que los comandos se dan en el marco de referencia cartesiano, + y si la máquina no es cartesiana, los comandos son traducidos por la cinemática para impulsar + cada articulación en el espacio articular según sea necesario. * 'free', o modo libre, significa que los comandos se interpretan en el espacio articular. - Se usa para mover manualmente (jog) articulaciones individuales, aunque no impide que se muevan - múltiples articulaciones a la vez (creo). - El homing también se realiza en modo libre; de hecho, las máquinas con cinemática no trivial - deben ser homeadas antes de que puedan pasar al modo coord o teleop. + Se usa para mover manualmente (jog) articulaciones individuales, aunque no impide que se muevan + múltiples articulaciones a la vez (creo). + El homing también se realiza en modo libre; de hecho, las máquinas con cinemática no trivial + deben ser homeadas antes de que puedan pasar al modo coord o teleop. * 'teleop' es el modo que probablemente necesite si está haciendo 'jogging' con un hexápodo. - Los comandos de jog implementados por el controlador de movimiento son jogs articulares, que - funcionan en modo free. Pero si desea mover un hexápodo o una máquina similar a lo largo de un - eje cartesiano en particular, debe operar más de una articulación. Para eso está 'teleop'. + Los comandos de jog implementados por el controlador de movimiento son jogs articulares, que + funcionan en modo free. Pero si desea mover un hexápodo o una máquina similar a lo largo de un + eje cartesiano en particular, debe operar más de una articulación. Para eso está 'teleop'. == Descripción general de la arquitectura @@ -144,45 +144,45 @@ siete conjuntos de información de posición que forman el flujo principal de da controlador de movimiento. Las siete formas de datos de posición son las siguientes: . 'emcmotStatus\->carte_pos_cmd' - Esta es la posición deseada, en - coordenadas cartesianas. Se actualiza a tasa traj, no a tasa servo. - En modo coord, se determina por el planificador traj. En modo teleop, está - determinado por el planificador traj?. En modo libre, es - copiado de actualPos, o generado mediante la aplicación de cinemática directa a (2) o (3) + coordenadas cartesianas. Se actualiza a tasa traj, no a tasa servo. + En modo coord, se determina por el planificador traj. En modo teleop, está + determinado por el planificador traj?. En modo libre, es + copiado de actualPos, o generado mediante la aplicación de cinemática directa a (2) o (3) . 'emcmotStatus\->joints[n].coarse_pos' - Esta es la posición deseada, en - coordenadas articulares, pero antes de interpolación. Se actualiza a tasa traj, - no a tasa servo. En modo coord, se genera aplicando - cinematica inversa a (1). En modo teleop, se genera aplicando cinemática inversa a (1). - En modo libre, creo que se copia de (3). + coordenadas articulares, pero antes de interpolación. Se actualiza a tasa traj, + no a tasa servo. En modo coord, se genera aplicando + cinematica inversa a (1). En modo teleop, se genera aplicando cinemática inversa a (1). + En modo libre, creo que se copia de (3). . 'emcmotStatus\->joints[n].pos_cmd' - Esta es la posición deseada, en - coordenadas articulares, después de interpolación. En cada período servo, se genera - un nuevo conjunto de estas coordenadas. En modo coord, se genera a partir de (2) - por el interpolador. En modo teleop, se genera a partir de (2) por el - interpolador. En modo libre, es generado por el planificador traj de modo libre. + coordenadas articulares, después de interpolación. En cada período servo, se genera + un nuevo conjunto de estas coordenadas. En modo coord, se genera a partir de (2) + por el interpolador. En modo teleop, se genera a partir de (2) por el + interpolador. En modo libre, es generado por el planificador traj de modo libre. . 'emcmotStatus\->joints[n].motor_pos_cmd' - Esta es la posición deseada, - en coordenadas de motor. Las coordenadas del motor se generan agregando - compensación backlash, compensación de error del tornillo de avance y offset (para homing) a - (3). Se genera de la misma manera independientemente del modo, y es la - salida al lazo PID u otro bucle de posición. + en coordenadas de motor. Las coordenadas del motor se generan agregando + compensación backlash, compensación de error del tornillo de avance y offset (para homing) a + (3). Se genera de la misma manera independientemente del modo, y es la + salida al lazo PID u otro bucle de posición. . 'emcmotStatus\->joints[n].motor_pos_fb' - Esta es la posición real, en - en coordenadas de motor. Es la entrada de codificadores u otro dispositivo de retroalimentación - (o desde codificadores virtuales en máquinas de bucle abierto). Es "generado" por - la lectura del dispositivo de retroalimentación. + en coordenadas de motor. Es la entrada de codificadores u otro dispositivo de retroalimentación + (o desde codificadores virtuales en máquinas de bucle abierto). Es "generado" por + la lectura del dispositivo de retroalimentación. . 'emcmotStatus\->joints[n].pos_fb': esta es la posición real, en - coordenadas articulares. Se genera restando offsets, compensación de error del tornillo de avance - y compensación de backlash de (5). Se genera - del mismo modo, independientemente del modo operativo. + coordenadas articulares. Se genera restando offsets, compensación de error del tornillo de avance + y compensación de backlash de (5). Se genera + del mismo modo, independientemente del modo operativo. . 'emcmotStatus\->carte_pos_fb' - Esta es la posición real, en coordenadas cartesianas. - Se actualiza a tasa traj, no a tasa servo. - Idealmente, actualPos siempre se calcularía aplicando - cinemática directa a (6). Sin embargo, la cinemática directa puede no estar disponible, o - pueden ser inutilizable porque uno o más ejes no están homeados. En ese - caso, las opciones son: A) fingirla, copiando (1), o B) admitir que - realmente no se conocen las coordenadas cartesianas, y simplemente no actualizar - actualPos. Cualquiera que sea el enfoque utilizado, no veo ninguna razón para no hacerlo - de la misma manera, independientemente del modo de operación. Yo propondría lo - siguiente; si hay cinemática directa, usarla, a menos que no funcionen - debido a ejes sin home u otros problemas, en cuyo caso hacer (B). Si no hay cinemática directa, - hacer (A), ya que de lo contrario actualPos _nunca_ obtendrá actualización. + Se actualiza a tasa traj, no a tasa servo. + Idealmente, actualPos siempre se calcularía aplicando + cinemática directa a (6). Sin embargo, la cinemática directa puede no estar disponible, o + pueden ser inutilizable porque uno o más ejes no están homeados. En ese + caso, las opciones son: A) fingirla, copiando (1), o B) admitir que + realmente no se conocen las coordenadas cartesianas, y simplemente no actualizar + actualPos. Cualquiera que sea el enfoque utilizado, no veo ninguna razón para no hacerlo + de la misma manera, independientemente del modo de operación. Yo propondría lo + siguiente; si hay cinemática directa, usarla, a menos que no funcionen + debido a ejes sin home u otros problemas, en cuyo caso hacer (B). Si no hay cinemática directa, + hacer (A), ya que de lo contrario actualPos _nunca_ obtendrá actualización. == Homing @@ -720,36 +720,31 @@ casi idéntico para cada parámetro. === Estado -Task tiene tres estados internos posibles: *E-stop*, *E-stop Reset*, -y *Machine on*. +Task tiene tres estados internos posibles: *E-stop*, *E-stop Reset*, y *Machine on*. image::task-state-transitions.svg[align="center"] == Controlador IO (EMCIO) -El controlador de E/S es un módulo separado que acepta comandos NML de TASK. + -Interactúa con E/S externas utilizando pines HAL. + -iocontrol.cc se carga a través del script linuxcnc antes de TASK. + -Actualmente hay dos versiones de iocontrol. La segunda versión maneja los errores de hardware de cambio de herramienta + - + +El controlador de E/S es un módulo separado que acepta comandos NML de TASK. +Interactúa con E/S externas utilizando pines HAL. +iocontrol.cc se carga a través del script linuxcnc antes de TASK. +Actualmente hay dos versiones de iocontrol. La segunda versión maneja los errores de hardware de cambio de herramienta -Actualmente ESTOP/Enable, el refrigerante, el lubricante y el cambio de herramienta se manejan con + -iocontrol. Estos son eventos de velocidad relativamente baja; las E/S coordinadas de alta velocidad se manejan en motion. + - + +Actualmente ESTOP/Enable, el refrigerante, el lubricante y el cambio de herramienta se manejan con +iocontrol. Estos son eventos de velocidad relativamente baja; las E/S coordinadas de alta velocidad se manejan en motion. -emctaskmain.cc envía comandos de E/S a través de taskclass.cc + -Las funciones de Taskclass envían mensajes NML a iocontrol.cc + -taskclass usa los comandos definidos en c ++ en su archivo o, + -si está definido, ejecuta comandos basados ​​en python definidos en archivos proporcionados por el usuario. + - + +emctaskmain.cc envía comandos de E/S a través de taskclass.cc +Las funciones de Taskclass envían mensajes NML a iocontrol.cc +taskclass usa los comandos definidos en c ++ en su archivo o, +si está definido, ejecuta comandos basados ​​en python definidos en archivos proporcionados por el usuario. Proceso del bucle principal de iocontrol: -- registros para señales SIGTERM y SIGINT del sistema operativo. + -- comprueba si las entradas HAL han cambiado + -- comprueba si read_tool_inputs() indica que el cambio de herramienta ha finalizado y establece emcioStatus.status + -- busca mensajes NML relacionados con E/S + - + +- registros para señales SIGTERM y SIGINT del sistema operativo. +- comprueba si las entradas HAL han cambiado +- comprueba si read_tool_inputs() indica que el cambio de herramienta ha finalizado y establece emcioStatus.status +- busca mensajes NML relacionados con E/S números de mensaje nml: de emc.hh: @@ -1568,7 +1563,6 @@ un error, vea el tratamiento de los ejes en src/emc/ini/initraj.cc: loadTraj (). Indudablemente hay más, y necesito tu ayuda para encontrarlos y arreglalos. - === En motion El componente en tiempo real del controlador de movimiento obtiene primero el número de uniones @@ -1581,3 +1575,4 @@ Comando `EMCMOT_SET_NUM_JOINTS` de la tarea. El controlador de movimiento siempre funciona en los ejes `EMCMOT_MAX_AXIS`. Siempre crea nueve conjuntos de pines `axis. *. *`. +// vim: set syntax=asciidoc: diff --git a/docs/src/code/contributing-to-linuxcnc.adoc b/docs/src/code/contributing-to-linuxcnc.adoc index 675e0197e2f..98c3dbcf281 100644 --- a/docs/src/code/contributing-to-linuxcnc.adoc +++ b/docs/src/code/contributing-to-linuxcnc.adoc @@ -1,3 +1,5 @@ +:lang: en + = Contributing to LinuxCNC == Introduction diff --git a/docs/src/code/contributing-to-linuxcnc_es.adoc b/docs/src/code/contributing-to-linuxcnc_es.adoc index 5cb51696bd9..b801ad37327 100644 --- a/docs/src/code/contributing-to-linuxcnc_es.adoc +++ b/docs/src/code/contributing-to-linuxcnc_es.adoc @@ -226,4 +226,4 @@ Hay muchas formas de contribuir a LinuxCNC, que no se abordan en este documento. * Ayudando a probar características experimentales - +// vim: set syntax=asciidoc: diff --git a/docs/src/code/nml-messages.adoc b/docs/src/code/nml-messages.adoc index 62d5e9ffdf7..8f405dce939 100644 --- a/docs/src/code/nml-messages.adoc +++ b/docs/src/code/nml-messages.adoc @@ -1,3 +1,5 @@ +:lang: en + = NML Messages for details see src/emc/nml_intf/emc.hh @@ -199,3 +201,5 @@ for details see src/emc/nml_intf/emc.hh EMC_STAT_TYPE EMC_EXEC_PLUGIN_CALL_TYPE ---- + +// vim: set syntax=asciidoc: diff --git a/docs/src/code/nml-messages_es.adoc b/docs/src/code/nml-messages_es.adoc index d52e528a801..8a64b510a55 100644 --- a/docs/src/code/nml-messages_es.adoc +++ b/docs/src/code/nml-messages_es.adoc @@ -202,3 +202,5 @@ Para mas detalles, vea src/emc/nml_intf/emc.hh EMC_STAT_TYPE EMC_EXEC_PLUGIN_CALL_TYPE ---- + +// vim: set syntax=asciidoc: diff --git a/docs/src/code/rs274.adoc b/docs/src/code/rs274.adoc index d7a63c1b0fc..b497033936a 100644 --- a/docs/src/code/rs274.adoc +++ b/docs/src/code/rs274.adoc @@ -1,5 +1,6 @@ -[[cha:rs274]] +:lang: en +[[cha:rs274]] = Stand Alone Interpreter The rs274 stand alone interpreter is available for use via the command line. @@ -54,3 +55,5 @@ T3 P3 Z1.273 D0.201 ;#7 tap drill ---- rs274 -g test.ngc -t test.tbl ---- + +// vim: set syntax=asciidoc: diff --git a/docs/src/code/rs274_es.adoc b/docs/src/code/rs274_es.adoc index 1cde9b472ca..10c8282d281 100644 --- a/docs/src/code/rs274_es.adoc +++ b/docs/src/code/rs274_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:rs274]] - = Intérprete independiente El intérprete autónomo rs274 está disponible para su uso a través de la línea de comandos. @@ -57,3 +56,4 @@ T3 P3 Z1.273 D0.201; taladro de rosca n°7 rs274 -g test.ngc -t test.tbl ---- +// vim: set syntax=asciidoc: diff --git a/docs/src/code/style-guide.adoc b/docs/src/code/style-guide.adoc index edbe44f105a..6479dea27b1 100644 --- a/docs/src/code/style-guide.adoc +++ b/docs/src/code/style-guide.adoc @@ -1,3 +1,5 @@ +:lang: en + = Coding Style This chapter describes the source code style preferred by the LinuxCNC team. @@ -14,7 +16,7 @@ revision history of the file. 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) +modified, or word-wraps lines not otherwise modified). == Tab Stops @@ -146,7 +148,7 @@ 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. -== Shell Scripts & Makefiles +== Shell Scripts & Makefiles Not everyone has the same tools and packages installed. Some people use vi, others emacs - A few even avoid having either package diff --git a/docs/src/common/GPLD_Copyright_fr.adoc b/docs/src/common/GPLD_Copyright_fr.adoc index 187bfe81577..d817cbef5ee 100644 --- a/docs/src/common/GPLD_Copyright_fr.adoc +++ b/docs/src/common/GPLD_Copyright_fr.adoc @@ -1,3 +1,5 @@ +:lang: fr + = Legal Section Ce document n'est pas traduit en raison de la complexité de la diff --git a/docs/src/common/Integrator_Concepts_fr.adoc b/docs/src/common/Integrator_Concepts_fr.adoc index 9133f77eb77..1ecb16416f5 100644 --- a/docs/src/common/Integrator_Concepts_fr.adoc +++ b/docs/src/common/Integrator_Concepts_fr.adoc @@ -1,9 +1,8 @@ :lang: fr :toc: -= Concepts importants pour l'intégrateur - [[cha:concepts-integrateur]] += Concepts importants pour l'intégrateur == Système pas à pas diff --git a/docs/src/common/emc-history.adoc b/docs/src/common/emc-history.adoc index 7f923e502e4..35235d5798b 100644 --- a/docs/src/common/emc-history.adoc +++ b/docs/src/common/emc-history.adoc @@ -1,5 +1,6 @@ -[[cha:linuxcnc-history]] +:lang: en +[[cha:linuxcnc-history]](((History))) == Origin EMC (the Enhanced Machine Controller) was created by @@ -113,9 +114,8 @@ channels, and versions of the software and documentation since version 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 +The paper is also available at http://linuxcnc.org/files/RS274NGCv3.pdf . 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 +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 diff --git a/docs/src/common/emc-history_es.adoc b/docs/src/common/emc-history_es.adoc index 9405db57b69..ba5b31ae1a6 100644 --- a/docs/src/common/emc-history_es.adoc +++ b/docs/src/common/emc-history_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:linuxcnc-history]] - == Origen EMC (controlador de máquina mejorado) fue creado por el diff --git a/docs/src/common/glossary.adoc b/docs/src/common/glossary.adoc index f1c1b109dfa..59be9a911af 100644 --- a/docs/src/common/glossary.adoc +++ b/docs/src/common/glossary.adoc @@ -1,3 +1,5 @@ +:lang: en + = Glossary A listing of terms and what they mean. Some terms have a general diff --git a/docs/src/common/gpld-copyright.adoc b/docs/src/common/gpld-copyright.adoc index baea67b1ba8..a982a7b2d0b 100644 --- a/docs/src/common/gpld-copyright.adoc +++ b/docs/src/common/gpld-copyright.adoc @@ -1,8 +1,12 @@ +:lang: en + = Legal Section +Translations of this file provided in the source tree are not legally binding. + == Copyright Terms -Copyright (c) 2000-2020 LinuxCNC.org +Copyright (c) 2000-2022 LinuxCNC.org Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 diff --git a/docs/src/common/gpld-copyright_es.adoc b/docs/src/common/gpld-copyright_es.adoc index 087e8ef6b57..37d0cc48373 100644 --- a/docs/src/common/gpld-copyright_es.adoc +++ b/docs/src/common/gpld-copyright_es.adoc @@ -1,3 +1,5 @@ +:lang: es + = Seccion Legal N.T. Estos textos legales solo se muestra en Inglés ya que las traducciones no se reconocen oficialmente. diff --git a/docs/src/common/gpld-copyright_zh_CN.adoc b/docs/src/common/gpld-copyright_zh_CN.adoc index baea67b1ba8..b86e091fc2f 100644 --- a/docs/src/common/gpld-copyright_zh_CN.adoc +++ b/docs/src/common/gpld-copyright_zh_CN.adoc @@ -1,3 +1,5 @@ +:lang: en + = Legal Section == Copyright Terms diff --git a/docs/src/common/linux-faq.adoc b/docs/src/common/linux-faq.adoc index c9035bec7ef..d630f64c125 100644 --- a/docs/src/common/linux-faq.adoc +++ b/docs/src/common/linux-faq.adoc @@ -1,11 +1,33 @@ -[[cha:linux-faq]] +:lang: en -= Linux FAQ +[[cha:linux-faq]] += Linux FAQ(((Linux FAQ))) 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. +N.T. Debian Stretch usa por defecto el entorno de escritorio Xfce, con el gestor +de pantallas lightDM. Para obtener acceso automatico con Stretch: + +* En un terminal, use el comando: + +---- +$ /usr/sbin/lightdm --show-config +---- + +* Anote el path absoluto del archivo de configuracion lightdm.conf. +* Edite ese archivo con un editor de texto puro (gedit, nano, etc), como root. +* Busque y descomente las lineas: + +---- +#autologin-user= +#autologin-user-timeout=0 +---- + +* Haga autologin-user=su_nombre_usuario +* Guarde y reinicie. + == Automatic Login When you install LinuxCNC with the Ubuntu LiveCD the default is to have to @@ -16,13 +38,22 @@ 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). +Ejemplo: + +---- +linuxcnc /home/mill/linuxcnc/config/mill/mill.ini +---- + +N.T. En Debian Stretch, vaya a 'Aplicaciones > Configuracion > Administrador de Configuracion > Sesion e Inicio'. +En la pestaña 'Autoarranque de aplicaciones', use el boton 'Añadir'. De un nombre, una descripcion y una orden similar +al ejemplo anterior. En el proximo reinicio, LinuxCNC arrancara automaticamente. + == Automatic Startup 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. +picker dialog closes, add linuxcnc and a space in front of the path to your .ini file. Example: @@ -31,18 +62,21 @@ linuxcnc /home/mill/linuxcnc/config/mill/mill.ini ---- [[faq:terminal]] - == Terminal 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. Most modern file managers support the right key to open a terminal just +buffer with 'dmesg'. Ubuntu and Linux Mint have a keyboard shortcut Ctrl + Alt + t. +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. +N.T. Debia Stretch no tiene definido ningun atajo de teclado. Se puede crear facilmente +con el 'Administrador de Configuracion'. -[[faq:man-pages]] +La mayoría de los sistemas operativos tienen el terminal como elemento de menú, +generalmente en 'Accesorios'. -== Man Pages +[[faq:man-pages]] +== Man Pages(((Man Pages))) 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. @@ -126,7 +160,6 @@ pwd ---- [[faq:cd]] - === Changing Directories To move up one level in the terminal window type: diff --git a/docs/src/common/linux-faq_es.adoc b/docs/src/common/linux-faq_es.adoc index 60a8c130ae5..2aa4fc1e142 100644 --- a/docs/src/common/linux-faq_es.adoc +++ b/docs/src/common/linux-faq_es.adoc @@ -1,13 +1,14 @@ :lang: es -= Linux FAQ [[cha:linux-faq]] += Linux FAQ + Estos son algunos comandos básicos y técnicas para nuevos usuarios de linux. Información más completa se puede encontrar en la web o mediante las páginas del manual con el comando man. -== Login automatico (((Automatic Login))) +== Login automatico(((Automatic Login))) Al instalar LinuxCNC con el CD de Ubuntu por defecto se tiene que iniciar sesión cada vez que encienda el ordenador. Para activar autentificacion automática @@ -39,7 +40,7 @@ $ /usr/sbin/lightdm --show-config * Haga autologin-user=su_nombre_usuario * Guarde y reinicie. -== Inicio automatico de LinuxCNC (((Automatic Startup))) +== Inicio automatico de LinuxCNC(((Automatic Startup))) Para tener un inicio automático de LinuxCNC con su configuración después de encender el equipo vaya a 'System > Preferences > Sessions > Startup Applications', @@ -58,9 +59,7 @@ N.T. En Debian Stretch, vaya a 'Aplicaciones > Configuracion > Administrador de En la pestaña 'Autoarranque de aplicaciones', use el boton 'Añadir'. De un nombre, una descripcion y una orden similar al ejemplo anterior. En el proximo reinicio, LinuxCNC arrancara automaticamente. -[[faq:terminal]] - -== Terminal +== Terminal[[faq:terminal]] Hay que hacer muchas cosas desde la terminal, como verificar el búfer de mensajes del núcleo con 'dmesg'. Ubuntu y Linux Mint tienen un atajo de teclado Ctrl + Alt + t. @@ -74,9 +73,7 @@ directorio. La mayoría de los sistemas operativos tienen el terminal como elemento de menú, generalmente en 'Accesorios'. -== Paginas de manual [[sec:Man-Pages]] - -(((Man Pages))) +== Paginas de manual[[sec:Man-Pages]](((Man Pages))) Las páginas del manual son generadas automáticamente en la mayoría de los casos. Las páginas del manual estan generalmente disponibles para la @@ -116,9 +113,7 @@ si usted no cambio de directorio cuando abrio la terminal y será nombrado mymod.txt, o como usted lo haya nombrado. -== Edicion de archivos de root [[sec:Editing-a-Root-File]] - -(((Editing a Root File))) +== Edicion de archivos de root [[sec:Editing-a-Root-File]](((Editing a Root File))) Al abrir el explorador de archivos y ver que el propietario del archivo es el usuario root, se tienen que hacer algunos pasos adicionales para modificar ese archivo. @@ -126,10 +121,7 @@ La edición de algunos archivos puede tener malos resultados. Tenga cuidado al editar los archivos de root; generalmente usted puede ver y abrir los archivos root en modo de 'solo lectura'. - -=== Con la linea de comandos - -(((sudo gedit))) +=== Con la linea de comandos(((sudo gedit))) En una ventana de terminal teclee. @@ -139,9 +131,7 @@ sudo gedit Abrir el archivo con el menu File > Open > Edit, y proceda a editar. -=== Usando la interface grafica - -(((gksudo))) +=== Usando la interface grafica(((gksudo))) .Haga clic derecho sobre el escritorio y seleccione 'Crear lanzador' .Escriba un nombre como 'editar sudo' @@ -156,9 +146,7 @@ En Ubuntu (o Debian) puede convertirse en super usuario tecleando "sudo -i" en u Debera escribir su contraseña. Tenga cuidado porque usted puede dañar su instalacion si no sabe lo que esta haciendo. -== Comandos en la terminal [[sec:Terminal-Commands]] - -(((Terminal Commands))) +== Comandos en la terminal [[sec:Terminal-Commands]](((Terminal Commands))) === Directorio de trabajo (((Working Directory)))(((pwd))) diff --git a/docs/src/common/outdated-notice_fr.adoc b/docs/src/common/outdated-notice_fr.adoc index fcae870ce62..caf830f16b4 100644 --- a/docs/src/common/outdated-notice_fr.adoc +++ b/docs/src/common/outdated-notice_fr.adoc @@ -1,3 +1,5 @@ +:lang: fr + [NOTE] .AVIS ================================================= diff --git a/docs/src/common/overleaf.adoc b/docs/src/common/overleaf.adoc index 0e1a3e6b412..369d307864c 100644 --- a/docs/src/common/overleaf.adoc +++ b/docs/src/common/overleaf.adoc @@ -1,3 +1,5 @@ +:lang: en + 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 diff --git a/docs/src/common/overleaf_es.adoc b/docs/src/common/overleaf_es.adoc index aa72f17a12b..f72d55eee1d 100644 --- a/docs/src/common/overleaf_es.adoc +++ b/docs/src/common/overleaf_es.adoc @@ -1,4 +1,6 @@ -Este manual es un trabajo en progreso. Si puedes ayudar con +:lang: es + +Este manual es un trabajo en progreso. Si puedes ayudar con redacción, edición o preparación gráfica, comuníquese con cualquier miembro del equipo de redacción o únete y envía un correo electrónico a emc-users@lists.sourceforge.net. diff --git a/docs/src/common/overleaf_fr.adoc b/docs/src/common/overleaf_fr.adoc index beca4abbaf0..a4c552617e2 100644 --- a/docs/src/common/overleaf_fr.adoc +++ b/docs/src/common/overleaf_fr.adoc @@ -1,3 +1,5 @@ +:lang: fr + Ce manuel est en évolution permanente. Si vous voulez nous aider à son écriture, sa rédaction, sa traduction ou la préparation des graphiques, merci de contactez n'importe quel membre de l'équipe de traduction ou envoyez un courrier diff --git a/docs/src/config/core-components.adoc b/docs/src/config/core-components.adoc index 4782735ccb9..1890c0ea9a6 100644 --- a/docs/src/config/core-components.adoc +++ b/docs/src/config/core-components.adoc @@ -1,6 +1,7 @@ -= Core Components +:lang: en [[cha:core-components]] += Core Components(((Core components))) See also the man pages 'motion(9)'. @@ -38,8 +39,8 @@ 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 +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. @@ -63,212 +64,237 @@ of the low level motion planner. === Options 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. +can add up to 64 digital I/O by using the num_dio option when loading 'motmod'. 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. +can add up to 16 analog I/O by using the num_aio option when loading 'motmod'. 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: - unlock_joints_mask=0x38 selects joints 3,4,5 +joint(s). The LSB of the mask selects joint 0. +Example: + +---- +unlock_joints_mask=0x38 selects joints 3,4,5 +---- [[sec:motion-pins]] -=== Pins (((motion (HAL pins)))) +=== Pins(((motion (HAL pins)))) -These pins, parameters, and functions are created by the realtime -'motmod' module. +These pins, parameters, and functions are created by the realtime 'motmod' module. * '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. + (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. * 'motion.analog-in-00' - - (float, in) These pins (00, 01, 02, 03 or more if configured) are - controlled by M66. + (float, in) These pins (00, 01, 02, 03 or more if configured) are + controlled by M66. * 'motion.analog-out-00' - - (float, out) These pins (00, 01, 02, 03 or more if configured) are - controlled by M67 or M68. + (float, out) These pins (00, 01, 02, 03 or more if configured) are + controlled by M67 or M68. * 'motion.coord-error' - - (bit, out) TRUE when motion has encountered an error, such as - exceeding a soft limit + (bit, out) TRUE when motion has encountered an error, such as + exceeding a soft limit * 'motion.coord-mode' - - (bit, out) TRUE when motion is in 'coordinated mode', as opposed to - 'teleop mode' + (bit, out) TRUE when motion is in 'coordinated mode', as opposed to + 'teleop mode' * 'motion.current-vel' - - (float, out) The current tool velocity in user units per second. + (float, out) The current tool velocity in user units per second. * 'motion.digital-in-00' - - (bit, in) These pins (00, 01, 02, 03 or more if configured) are - controlled by M62-65. + (bit, in) These pins (00, 01, 02, 03 or more if configured) are + controlled by M62-65. * 'motion.digital-out-00' - - (bit, out) These pins (00, 01, 02, 03 or more if configured) are - controlled by the 'M62-65'. + (bit, out) These pins (00, 01, 02, 03 or more if configured) are + controlled by the 'M62-65'. * 'motion.distance-to-go' - - (float,out) The distance remaining in the current move. + (float,out) The distance remaining in the current move. * '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. + (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. * '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. + (bit, in) When Feed Stop Control is enabled with 'M53 P1', and this + bit is TRUE, the feed rate is set to 0. * '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. + (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. * 'motion.in-position' - - (bit, out) TRUE if the machine is in position. + (bit, out) TRUE if the machine is in position. * 'motion.motion-enabled' - - (bit, out) TRUE when in 'machine on' state. + (bit, out) TRUE when in 'machine on' state. * 'motion.motion-type' - - (s32, out) These values are from src/emc/nml_intf/motion_types.h - - - 0: Idle (no motion) - - - 1: Traverse - - - 2: Linear feed - - - 3: Arc feed - - - 4: Tool change - - - 5: Probing - - - 6: Rotary axis indexing + (s32, out) These values are from src/emc/nml_intf/motion_types.h + - 0: Idle (no motion) + - 1: Traverse + - 2: Linear feed + - 3: Arc feed + - 4: Tool change + - 5: Probing + - 6: Rotary axis indexing + +* 'motion.on-soft-limit' - (bit, out) TRUE when the machine is on a soft limit. + +* '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. + +* 'motion.program-line' - (s32, out) The current program line while executing. + Zero if not running or between lines while single stepping. + +* '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. + +* 'motion.teleop-mode' - (bit, out) TRUE when motion is in 'teleop mode', as opposed to 'coordinated mode' + +* '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 gcode ('G43.1' active) + +* 'spindle.0.at-speed' - (bit, in) + 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 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. * 'motion.on-soft-limit' - - (bit, out) TRUE when the machine is on a soft limit. + (bit, out) TRUE when the machine is on a soft limit. * '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. + (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. * 'motion.program-line' - - (s32, out) The current program line while executing. Zero if not - running or between lines while single stepping. + (s32, out) The current program line while executing. Zero if not + running or between lines while single stepping. * '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. + (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. * 'spindle.0.at-speed' - - (bit, in) 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 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. + (bit, in) 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 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. * 'spindle.N.brake' - - (bit, out) TRUE when the spindle brake should be applied. + (bit, out) TRUE when the spindle brake should be applied. * 'spindle.N.forward' - - (bit, out) TRUE when the spindle should rotate forward. + (bit, out) TRUE when the spindle should rotate forward. * '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. + (bit, I/O) For correct operation of spindle synchronized moves, this + pin must be hooked to the index-enable pin of the spindle encoder. * 'spindle.N.inhibit' - - (bit, in) When this bit is TRUE, the spindle speed is set to 0. + (bit, in) When this bit is TRUE, the spindle speed is set to 0. * 'spindle.N.on' - - (bit, out) TRUE when spindle should rotate. + (bit, out) TRUE when spindle should rotate. * 'spindle.N.reverse' - - (bit, out) TRUE when the spindle should rotate backward + (bit, out) TRUE when the spindle should rotate backward * '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. + (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. * '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'. + (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'. * 'spindle.N.speed-out' - - (float, out) Commanded spindle speed in rotations per minute. Positive - for spindle forward ('M3'), negative for spindle reverse ('M4'). + (float, out) Commanded spindle speed in rotations per minute. Positive + for spindle forward ('M3'), negative for spindle reverse ('M4'). * 'spindle.N.speed-out-abs' - - (float, out) Commanded spindle speed in rotations per minute. This will - always be a positive number. + (float, out) Commanded spindle speed in rotations per minute. This will + always be a positive number. * 'spindle.N.speed-out-rps' - - (float, out) Commanded spindle speed in rotations per second. Positive - for spindle forward ('M3'), negative for spindle reverse ('M4'). + (float, out) Commanded spindle speed in rotations per second. Positive + for spindle forward ('M3'), negative for spindle reverse ('M4'). * 'spindle.N.speed-out-rps-abs' - - (float, out) Commanded spindle speed in rotations per second. This will - always be a positive number. + (float, out) Commanded spindle speed in rotations per second. This will + always be a positive number. * 'motion.teleop-mode' - - (bit, out) TRUE when motion is in 'teleop mode', as opposed to - 'coordinated mode' + (bit, out) TRUE when motion is in 'teleop mode', as opposed to + 'coordinated mode' * '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) - -* `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. - -* `spindle.N.orient-mode` - - (s32,out) Desired spindle rotation mode M19. Default 0. - -* `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. - -* `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. - -* `spindle.N.orient-fault` - - (s32, in) Fault code input for orient cycle. Any value other - than zero will cause the orient cycle to abort. - -* `spindle.N.lock` - + (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) + +* '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. + +* 'spindle.N.orient-mode' - + (s32,out) Desired spindle rotation mode M19. Default 0. + +* '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. + +* '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. + +* 'spindle.N.orient-fault' - + (s32, in) Fault code input for orient cycle. Any value other + than zero will cause the orient cycle to abort. + +* 'spindle.N.lock' - (bit, out) Spindle orient complete pin. Cleared by any of M3,M4,M5. .HAL pin usage for M19 orient spindle @@ -279,30 +305,28 @@ Conceptually the spindle is in one of the following modes: - searching for desired orientation mode - orientation complete mode. -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. +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. 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. +HAL logic is expected to acknowledge this by asserting the `spindle.N.is-oriented` pin. 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. +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. 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. +is displayed, and the motion queue is flushed. +The spindle reverts to rotation mode. -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. +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. The `spindle-orient-mode` pin reflects the M19 P word and shall be interpreted as follows: @@ -320,61 +344,31 @@ and `spindle-orient-mode`. Many of these parameters serve as debugging aids, and are subject to change or removal at any time. -* 'motion-command-handler.time' - - (s32, RO) - -* 'motion-command-handler.tmax' - - (s32, RW) - -* 'motion-controller.time' - - (s32, RO) - -* 'motion-controller.tmax' - - (s32, RW) - -* 'motion.debug-bit-0' - - (bit, RO) This is used for debugging purposes. - -* 'motion.debug-bit-1' - - (bit, RO) This is used for debugging purposes. - -* 'motion.debug-float-0' - - (float, RO) This is used for debugging purposes. - -* 'motion.debug-float-1' - - (float, RO) This is used for debugging purposes. - -* 'motion.debug-float-2' - - (float, RO) This is used for debugging purposes. - -* 'motion.debug-float-3' - - (float, RO) This is used for debugging purposes. - -* 'motion.debug-s32-0' - - (s32, RO) This is used for debugging purposes. - -* 'motion.debug-s32-1' - - (s32, RO) This is used for debugging purposes. - -* '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 - -* 'motion.servo.last-period-ns' - - (float, RO) +* 'motion-command-handler.time' - (s32, RO) +* 'motion-command-handler.tmax' - (s32, RW) +* 'motion-controller.time' - (s32, RO) +* 'motion-controller.tmax' - (s32, RW) +* 'motion.debug-bit-0' - (bit, RO) This is used for debugging purposes. +* 'motion.debug-bit-1' - (bit, RO) This is used for debugging purposes. +* 'motion.debug-float-0' - (float, RO) This is used for debugging purposes. +* 'motion.debug-float-1' - (float, RO) This is used for debugging purposes. +* 'motion.debug-float-2' - (float, RO) This is used for debugging purposes. +* 'motion.debug-float-3' - (float, RO) This is used for debugging purposes. +* 'motion.debug-s32-0' - (s32, RO) This is used for debugging purposes. +* 'motion.debug-s32-1' - (s32, RO) This is used for debugging purposes. +* '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 +* 'motion.servo.last-period-ns' - (float, RO) === Functions Generally, these functions are both added to the servo-thread in the order shown. -* 'motion-command-handler' - - Processes motion commands coming from user space - -* 'motion-controller' - - Runs the LinuxCNC motion controller +* 'motion-command-handler' - Processes motion commands coming from user space +* 'motion-controller' - Runs the LinuxCNC motion controller == Axis and Joint Pins and Parameters @@ -395,46 +389,19 @@ synchronized i/o provided by <> instead. === Pins (((iocontrol (HAL pins)))) -* 'iocontrol.0.coolant-flood' - - (bit, out) TRUE when flood coolant is requested. - -* 'iocontrol.0.coolant-mist' - - (bit, out) TRUE when mist coolant is requested. - -* 'iocontrol.0.emc-enable-in' - - (bit, in) Should be driven FALSE when an external E-Stop condition - exists. - -* 'iocontrol.0.lube' - - (bit, out) TRUE when lube is commanded. - -* 'iocontrol.0.lube_level' - - (bit, in) Should be driven TRUE when lube level is high enough. - -* 'iocontrol.0.tool-change' - - (bit, out) TRUE when a tool change is requested. - -* 'iocontrol.0.tool-changed' - - (bit, in) Should be driven TRUE when a tool change is completed. - -* 'iocontrol.0.tool-number' - - (s32, out) The current tool number. - -* 'iocontrol.0.tool-prep-number' - - (s32, out) The number of the next tool, from the RS274NGC T-word. - -* 'iocontrol.0.tool-prepare' - - (bit, out) TRUE when a tool prepare is requested. - -* 'iocontrol.0.tool-prepared' - - (bit, in) Should be driven TRUE when a tool prepare is completed. - -* 'iocontrol.0.user-enable-out' - - (bit, out) FALSE when an internal E-Stop condition exists. - -* 'iocontrol.0.user-request-enable' - - (bit, out) TRUE when the user has requested that E-Stop be cleared. - +* 'iocontrol.0.coolant-flood' - (bit, out) TRUE when flood coolant is requested. +* 'iocontrol.0.coolant-mist' - (bit, out) TRUE when mist coolant is requested. +* 'iocontrol.0.emc-enable-in' - (bit, in) Should be driven FALSE when an external E-Stop condition exists. +* 'iocontrol.0.lube' - (bit, out) TRUE when lube is commanded. +* 'iocontrol.0.lube_level' - (bit, in) Should be driven TRUE when lube level is high enough. +* 'iocontrol.0.tool-change' - (bit, out) TRUE when a tool change is requested. +* 'iocontrol.0.tool-changed' - (bit, in) Should be driven TRUE when a tool change is completed. +* 'iocontrol.0.tool-number' - (s32, out) The current tool number. +* 'iocontrol.0.tool-prep-number' - (s32, out) The number of the next tool, from the RS274NGC T-word. +* 'iocontrol.0.tool-prepare' - (bit, out) TRUE when a tool prepare is requested. +* 'iocontrol.0.tool-prepared' - (bit, in) Should be driven TRUE when a tool prepare is completed. +* 'iocontrol.0.user-enable-out' - (bit, out) FALSE when an internal E-Stop condition exists. +* 'iocontrol.0.user-request-enable' - (bit, out) TRUE when the user has requested that E-Stop be cleared. == ini settings @@ -445,31 +412,18 @@ A number of ini settings are made available as hal input pins. N refers to a joint number, L refers to an axis letter * 'ini.N.ferror' - (float, in) [JOINT_N]FERROR - * 'ini.N.min_ferror' - (float, in) [JOINT_N]MIN_FERROR - * 'ini.N.backlash' - (float, in) [JOINT_N]BACKLASH - * 'ini.N.min_limit' - (float, in) [JOINT_N]MIN_LIMIT - * 'ini.N.max_limit' - (float, in) [JOINT_N]MAX_LIMIT - * 'ini.N.max_velocity' - (float, in) [JOINT_N]MAX_VELOCITY - * 'ini.N.max_acceleration' - (float, in) [JOINT_N]MAX_ACCELERATION - * 'ini.N.home' - (float, in) [JOINT_N]HOME - * 'ini.N.home_offset' - (float, in) [JOINT_N]HOME_OFFSET - * 'ini.N.home_offset' - (s32, in) [JOINT_N]HOME_SEQUENCE - * 'ini.L.min_limit' - (float, in) [AXIS_L]MIN_LIMIT - * 'ini.L.max_limit' - (float, in) [AXIS_L]MAX_LIMIT - * 'ini.L.max_velocity' - (float, in) [AXIS_L]MAX_VELOCITY - * 'ini.L.max_acceleration' - (float, in) [AXIS_L]MAX_ACCELERATION [NOTE] @@ -482,15 +436,10 @@ 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. - * 'ini.traj_arc_blend_enable' - (bit, in) [TRAJ]ARC_BLEND_ENABLE - * 'ini.traj_arc_blend_fallback_enable' - (bit, in) [TRAJ]ARC_BLEND_FALLBACK_ENABLE - * 'ini.traj_arc_blend_gap_cycles' - (float, in) [TRAJ]ARC_BLEND_GAP_CYCLES - * 'ini.traj_arc_blend_optimization_depth' - (float, in) [TRAJ]ARC_BLEND_OPTIMIZATION_DEPTH - * 'ini.traj_arc_blend_ramp_freq' - (float, in) [TRAJ]ARC_BLEND_RAMP_FREQ [NOTE] @@ -499,8 +448,5 @@ while a program is running may not have immediate effect due to queueing of commands. * 'ini.traj_default_acceleration' - (float, in) [TRAJ]DEFAULT_ACCELERATION - * 'ini.traj_default_velocity' - (float, in) [TRAJ]DEFAULT_VELOCITY - * 'ini.traj_max_acceleration' - (float, in) [TRAJ]MAX_ACCELERATION - diff --git a/docs/src/config/ini-config.adoc b/docs/src/config/ini-config.adoc index 6826bf82b5e..9a88a23c974 100644 --- a/docs/src/config/ini-config.adoc +++ b/docs/src/config/ini-config.adoc @@ -1,6 +1,7 @@ -[[cha:ini-configuration]] +:lang: en -= INI Configuration +[[cha:ini-configuration]] += INI Configuration(((INI Configuration))) == The INI File Components @@ -72,14 +73,13 @@ The following sections are used by LinuxCNC: * '[<>]' individual joint variables * '[<>]' individual axis variables * '[<>]' kinematics variables - * '[<>]' settings used by the I/O Controller === Variables 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 +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. @@ -113,7 +113,6 @@ names and variable names as shown. In the following example the variable 'MACHINE' is assigned the value 'My Machine'. [[sub:custom-variables]] - === Custom Sections and Variables Most sample configurations use custom sections and variables to put all of the @@ -171,8 +170,7 @@ G10 L20 P0 Z#<_ini[probe]z_offset> === Include Files -An INI file may include the contents of another file by using a #INCLUDE -directive. +An INI file may include the contents of another file by using a #INCLUDE directive. .#INCLUDE Format ---- @@ -181,10 +179,10 @@ directive. The filename can be specified as: - * a file in the same directory as the INI file - * a file located relative to the working directory - * an absolute file name (starts with a /) - * a user-home-relative file name (starts with a ~) +* a file in the same directory as the INI file +* a file located relative to the working directory +* an absolute file name (starts with a /) +* a user-home-relative file name (starts with a ~) Multiple #INCLUDE directives are supported. @@ -204,25 +202,21 @@ is .inc. Do not use a file extension of .ini for included files. == INI File Sections -[[sec:emc-section]](((INI File, EMC Section))) - -=== [EMC] Section +[[sec:emc-section]] +=== [EMC] Section(((INI File, EMC Section))) * '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. - + 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. * '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. - + 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. * 'DEBUG = 0' - Debug level 0 means no messages will be printed when LinuxCNC is run from a <>. Debug flags are usually only useful to developers. See src/emc/nml_intf/debugflags.h for other settings. -[[sec:display-section]](((INI File, DISPLAY Section))) - -=== [DISPLAY] Section +[[sec:display-section]] +=== [DISPLAY] Section(((INI File, DISPLAY Section))) Different user interface programs use different options, and not every option is supported by every user interface. There are several interfaces, @@ -234,215 +228,175 @@ Descriptions of the interfaces are in the Interfaces section of the User Manual. * 'DISPLAY = axis' - The name of the user interface to use. Valid options - may include: 'axis', 'touchy', 'gmoccapy', 'gscreen', 'tklinuxcnc', 'qtvcp' - + may include: 'axis', 'touchy', 'gmoccapy', 'gscreen', 'tklinuxcnc', 'qtvcp' * '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. - * '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. - * 'DRO_FORMAT_MM = %+08.6f' - Over-ride 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. - * 'DRO_FORMAT_IN = % 4.1f' - Over-ride 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. - * 'CONE_BASESIZE = .25' - Over-ride the default cone/tool base size of .5 in the graphics display - * 'MAX_FEED_OVERRIDE = 1.2' - The maximum feed override the user may select. 1.2 means 120% of the programmed feed rate. - * '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). - -* '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. Qtvcp only - +* '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. Qtvcp only. * 'MAX_SPINDLE_OVERRIDE = 1.0' - The maximum spindle override the user may select. 1.0 means 100% of the programmed spindle speed. - * '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. Qtvcp only - + On multi spindle machine there will be entries for each spindle number. Qtvcp only * '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. - deprecated - use the [SPINDLE_n] section instead - * '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. Qtvcp only - deprecated - use the [SPINDLE_n] section instead - * 'SPINDLE_INCREMENT = 200' - The increment used when clicking increase/decrease buttons Qtvcp only -- deprecated - use the [SPINDLE_n] section instead - + - deprecated - use the [SPINDLE_n] section instead * '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. Qtvcp only -- deprecated - use the [SPINDLE_n] section instead - + On multi spindle machine there will be entries for each spindle number. Qtvcp only + - deprecated - use the [SPINDLE_n] section instead * '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. Qtvcp only -- deprecated - use the [SPINDLE_n] section instead - + On multi spindle machine there will be entries for each spindle number. Qtvcp only + - deprecated - use the [SPINDLE_n] section instead * '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. - * 'INTRO_GRAPHIC = emc2.gif' - The image shown on the splash screen. - * 'INTRO_TIME = 5' - The maximum time to show the splash screen, in seconds. - -* '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. +* '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. [NOTE] The following [DISPLAY] items are used by GladeVCP, see the <> section of the GladeVCP Chapter. * 'EMBED_TAB_NAME=GladeVCP demo' - * 'EMBED_TAB_COMMAND=halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x {XID} -u ./gladevcp/hitcounter.py ./gladevcp/manual-example.ui' - [NOTE] Different user interface programs use different options, and not every option is supported by every user interface. See <> document for AXIS details. See <> document for Gmoccapy details. -* 'DEFAULT_LINEAR_VELOCITY = .25' - The default velocity for linear jogs, in , - <> per second. - +* 'DEFAULT_LINEAR_VELOCITY = .25' - The default velocity for linear jogs, + in <> per second. * 'MIN_VELOCITY = .01' - The approximate lowest value the jog slider. - * 'MAX_LINEAR_VELOCITY = 1.0' - The maximum velocity for linear jogs, in machine units per second. - * 'MIN_LINEAR_VELOCITY = .01' - The approximate lowest value the jog slider. - * 'DEFAULT_ANGULAR_VELOCITY = .25' - The default velocity for angular jogs, in machine units per second. - * 'MIN_ANGULAR_VELOCITY = .01' - The approximate lowest value the angular jog slider. - * 'MAX_ANGULAR_VELOCITY = 1.0' - The maximum velocity for angular jogs, in machine units per second. - * '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. - + 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. * 'GRIDS = 10 mm, 1 in, ...' - Defines the preset values for grid lines. - The value is interpreted the same way as 'INCREMENTS'. - -* '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. - -* '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. - + The value is interpreted the same way as 'INCREMENTS'. +* '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. +* '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. * '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. - -* 'PYVCP = /filename.xml' - The PyVCP panel description file. See the - <> for more information. - + 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. +* 'PYVCP = /filename.xml' - The PyVCP panel description file. See the <> for more information. * '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 <> for more information. - + If this variable is omitted the panel will default to the right side. The only valid + alternative is BOTTOM. See the <> for more information. * '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. - * 'BACK_TOOL_LATHE = 1' - Any non-empty value (including "0") causes axis to use "back tool lathe mode" with inverted X axis. - * 'FOAM = 1' - Any non-empty value (including "0") causes axis to change the display for foam-cutter mode. - * 'GEOMETRY = XYZABCUVW' - Controls the *preview* and *backplot* of motion. - This item consists of a sequence of axis letters and control characters: - -. The letters X,Y,Z specify translation along the named coordinate. -. The letters A,B,C specify rotation about the corresponding axes X,Y,Z. -. The letters U,V,W specify translation along the related axes X,Y,Z. -. Each letter specified must occur in [TRAJ]COORDINATES to have an effect. -. A "*-*" character preceding any letter inverts the direction of the operation. -. 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.) -. 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. -. 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. -. 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. -. Rotations applied after translations may use the "*!*" provision to - 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). -. 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 -. 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. + This item consists of a sequence of axis letters and control characters: + +. The letters X,Y,Z specify translation along the named coordinate. +. The letters A,B,C specify rotation about the corresponding axes X,Y,Z. +. The letters U,V,W specify translation along the related axes X,Y,Z. +. Each letter specified must occur in [TRAJ]COORDINATES to have an effect. +. A "*-*" character preceding any letter inverts the direction of the operation. +. 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.) +. 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. +. 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. +. 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. +. Rotations applied after translations may use the "*!*" provision to + 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). +. 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 +. 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. [NOTE] If no [DISPLAY]GEOMETRY is included in the inifile, a default is provided by the [DISPLAY]DISPLAY gui program (typically "XYZABCUVW") - -* '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%). - -* '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. - -* '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. - +* '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%). +* '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. +* '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. * 'JOG_INVERT =' - For each axis letter, the jog direction is inverted. The default is "X" for lathes and blank otherwise. [NOTE] 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 +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 - * '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`. @@ -451,9 +405,8 @@ The following [DISPLAY] item is used by the TKLinuxCNC interface only. * 'HELP_FILE = tklinucnc.txt' - Path to help file. -[[sec:filter-section]](((INI File, FILTER Section))) - -=== [FILTER] Section +[[sec:filter-section]] +=== [FILTER] Section(((INI File, FILTER Section))) 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 @@ -546,110 +499,99 @@ def main(argv): print "%s" % item if __name__ == "__main__": - main(sys.argv[1:]) + main(sys.argv[1:]) ---- [[sec:rs274ngc-section]](((INI File, RS274NGC Section))) [[gcode:ini-features]] - === [RS274NGC] Section * '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). + (((PARAMETER FILE))) The file located in the same directory as the ini + file which contains the parameters used by the interpreter (saved between runs). * 'ORIENT_OFFSET = 0' - - (((ORIENT OFFSET))) A float value added to the R word parameter - of an <> operation. Used to define an arbitrary - zero position regardless of encoder mount orientation. - -* '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. - -* '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. + (((ORIENT OFFSET))) A float value added to the R word parameter of an <> operation. + Used to define an arbitrary zero position regardless of encoder mount orientation. + +* '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. + +* '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. * 'CENTER_ARC_RADIUS_TOLERANCE_INCH = n' Default 0.00005 * 'CENTER_ARC_RADIUS_TOLERANCE_MM = n' Default 0.00127 * '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. -+ -A search is made for each possible user defined function, typically -(M100-M199). The search order is: -+ -. [DISPLAY]PROGRAM_PREFIX (if specified) -. If [DISPLAY]PROGRAM_PREFIX is not specified, search the default location: nc_files -. Then search each directory in the list [RS274NGC]USER_M_PATH -+ -The first executable M1xx found in the search is used for each M1xx. + 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. + + + A search is made for each possible user defined function, typically + (M100-M199). The search order is: + + + . [DISPLAY]PROGRAM_PREFIX (if specified) + . If [DISPLAY]PROGRAM_PREFIX is not specified, search the default location: nc_files + . Then search each directory in the list [RS274NGC]USER_M_PATH + + + The first executable M1xx found in the search is used for each M1xx. [NOTE] -The maximum number of USER_M_PATH directories is defined at compile -time (typ: 'USER_DEFINED_FUNCTION_MAX_DIRS == 5'). +The maximum number of USER_M_PATH directories is defined at compile time (typ: 'USER_DEFINED_FUNCTION_MAX_DIRS == 5'). * 'INI_VARS = 1' Default 1 -Allows G-code programs to read values from the INI file using the format -#<_ini[section]name>. See <>. + Allows G-code programs to read values from the INI file using the format #<_ini[section]name>. + See <>. * 'HAL_PIN_VARS = 1' Default 1 -Allows G-code programs to read the values of HAL pins using the format -#<_hal[Hal item]>. Variable access is read-only. -See <> for more details and an -important caveat. + Allows G-code programs to read the values of HAL pins using the format #<_hal[Hal item]>. + Variable access is read-only. + See <> for more details and an important caveat. * 'RETAIN_G43 = 0' Default 0 -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. + 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. * 'OWORD_NARGS = 0' Default 0 -If this feature is enabled then a called subroutine can determine the -number of actual positional parameters passed by inspecting the -+#+ parameter. + If this feature is enabled then a called subroutine can determine the + number of actual positional parameters passed by inspecting the +#+ parameter. * 'NO_DOWNCASE_OWORD = 0' Default 0 -Preserve case in O-word names within comments if set, enables reading of -mixed-case HAL items in structured comments like -'(debug, #<_hal[MixedCaseItem])'. + Preserve case in O-word names within comments if set, enables reading of + mixed-case HAL items in structured comments like '(debug, #<_hal[MixedCaseItem])'. * 'OWORD_WARNONLY = 0' Default 0 -Warn rather than error in case of errors in O-word subroutines. + Warn rather than error in case of errors in O-word subroutines. [NOTE] 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. +in versions of LinuxCNC prior to 2.8. This INI tag will no longer work. [NOTE] [WIZARD]WIZARD_ROOT is a valid search path but the Wizard has not been fully implemented and the results of using it are unpredictable. * 'REMAP=M400 modalgroup=10 argspec=Pq ngc=myprocedure' -See <> chapter for details. + See <> chapter for details. * 'ON_ABORT_COMMAND=O call' -See <> chapter for details. - -[[sec:emcmot-section]](((INI File, EMCMOT Section))) + See <> chapter for details. -=== [EMCMOT] Section +[[sec:emcmot-section]] +=== [EMCMOT] Section(((INI File, EMCMOT Section))) 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 @@ -657,80 +599,70 @@ more information on the motion controller see the <> Section. * 'EMCMOT = motmod' - the motion controller name is typically used here. - * 'BASE_PERIOD = 50000' - the 'Base' task period in nanoseconds. - * 'SERVO_PERIOD = 1000000' - This is the "Servo" task period in nanoseconds. - * 'TRAJ_PERIOD = 100000' - This is the 'Trajectory Planner' task period in nanoseconds. - * '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). - * 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) -[[sec:task-section]](((INI File, TASK Section))) - -=== [TASK] Section +[[sec:task-section]] +=== [TASK] Section(((INI File, TASK Section))) * '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. + 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. * '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. - -[[sec:hal-section]](((INI File, HAL Section))) + 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. -=== [HAL] section +[[sec:hal-section]] +=== [HAL] section(((INI File, HAL Section))) * 'HALFILE = example.hal' - Execute the file 'example.hal' at start up. - 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'). + 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'). - 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 halfiles. + 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 halfiles. - 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. + 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. - 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. + 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. * '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 - <> for more information. - -* '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. - -* '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. -+ + 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 + <> for more information. +* '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 <> for more information. +* '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. +* '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. + 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) @@ -739,287 +671,271 @@ 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: + ---- HALFILE = LIB:halcheck.tcl [ nopopup ] ---- + [NOTE] 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. +* '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. +* '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. -* '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. - -* '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. -+ For more information see the <> chapter. * '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. + 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. * '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. - -* '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 halfiles include Touchy, Axis, Gscreen, and - gmoccapy. + 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. - See section <> Section for more information. +* '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 halfiles include Touchy, Axis, Gscreen, and gmoccapy. -* 'HALUI = halui' - adds the HAL user interface pins. For more information see - the <> chapter. +  See section <> for more information. -[[sec:halui-section]](((INI File, HALUI Section))) +* 'HALUI = halui' - adds the HAL user interface pins. For more information see the <> chapter. -=== [HALUI] section +[[sec:halui-section]] +=== [HALUI] section(((INI File, HALUI Section))) * '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. + An MDI command can be executed by using halui.mdi-command-00. Increment + the number for each command listed in the [HALUI] section. -[[sec:applications-section]](((INI File, APPLICATIONS Section))) - -=== [APPLICATIONS] Section +[[sec:applications-section]] +=== [APPLICATIONS] Section(((INI File, APPLICATIONS Section))) 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). -* '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). +* '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). * '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. - - Examples: + 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. -** 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): + Examples: +** 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): APP = sim_pin motion.probe-input halui.abort motion.analog-in-00 - -** Invoke halshow with a previuosly saved watchlist. Since the linuxcnc script sets the working directory to the directory for the inifile, you can refer to files in that directory (example: my.halshow): +** Invoke halshow with a previuosly saved watchlist. + Since linuxcnc sets the working directory to the directory for the inifile, + you can refer to files in that directory (example: my.halshow): APP = halshow my.halshow - ** Alternatively, a watchlist file identified with a full pathname could be specified: - APP = halshow ~/saved_shows/spindle.halshow - -** Open halscope using a previously saved configuration: + APP = halshow ~/saved_shows/spindle.halshow +** Open halscope using a previously saved configuration: - APP = halscope -i my.halscope + APP = halscope -i my.halscope -[[sec:traj-section]](((INI File, TRAJ Section))) - -=== [TRAJ] Section +[[sec:traj-section]] +=== [TRAJ] Section(((INI File, TRAJ Section))) [WARNING] -The new Trajectory Planner (TP) is on by default. + +---- +The new Trajectory Planner (TP) is on by default. If you have no TP settings in your [TRAJ] section - LinuxCNC defaults to: + ARC_BLEND_ENABLE = 1 + ARC_BLEND_FALLBACK_ENABLE = 0 + ARC_BLEND_OPTIMIZATION_DEPTH = 50 + ARC_BLEND_GAP_CYCLES = 4 + ARC_BLEND_RAMP_FREQ = 100 +---- The [TRAJ] section contains general parameters for the trajectory planning module in 'motion'. -* 'ARC_BLEND_ENABLE = 1' - Turn on new TP. If set to 0 TP uses parabolic - blending (1 segment look ahead.) Default value 1. - -* '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. - +* 'ARC_BLEND_ENABLE = 1' - Turn on new TP. If set to 0 TP uses parabolic blending (1 segment look ahead). + Default value 1. +* '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. * 'ARC_BLEND_OPTIMIZATION_DEPTH = 50' - Look ahead depth in number of segments. -+ -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: -+ + + + 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: + + +---- # n = v_max / (2.0 * a_max * t_c) # where: # n = optimization depth # v_max = max axis velocity (UU / sec) # a_max = max axis acceleration (UU / sec) # t_c = servo period (seconds) -+ -So, a machine with a maximum axis velocity of 10 IPS, a max acceleration -of 100 IPS^2, and a servo period of 0.001 sec would need: -+ -10 / (2.0 * 100 * 0.001) = 50 segments to always reach maximum velocity -along the fastest axis. -+ -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. -+ -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: -+ +---- + + + So, a machine with a maximum axis velocity of 10 IPS, a max acceleration + of 100 IPS^2, and a servo period of 0.001 sec would need: + + + 10 / (2.0 * 100 * 0.001) = 50 segments to always reach maximum velocity + along the fastest axis. + + + 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. + + + 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: + + +---- # min_length ~= v_req * t_c # where: # v_req = desired velocity in UU / sec # t_c = servo period (seconds) -+ -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. - -* 'ARC_BLEND_GAP_CYCLES = 4' How short the previous segment must be before - the trajectory planner 'consumes' it. -+ -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. - -* 'ARC_BLEND_RAMP_FREQ = 20' - This is a 'cutoff' frequency for using ramped - velocity. -+ -'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. -+ -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 1kHz). -+ -You can characterize the worst-case loss of performance by comparing the -velocity that a trapezoidal profile reaches vs. the ramp: -+ +---- + + + 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. +* 'ARC_BLEND_GAP_CYCLES = 4' How short the previous segment must be before the trajectory planner 'consumes' it. + + + 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. +* 'ARC_BLEND_RAMP_FREQ = 20' - This is a 'cutoff' frequency for using ramped velocity. + + + '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. + + + 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 1kHz). + + + You can characterize the worst-case loss of performance by comparing the + velocity that a trapezoidal profile reaches vs. the ramp: + + +---- # v_ripple = a_max / (4.0 * f) # where: # v_ripple = average velocity "loss" due to ramping # a_max = max axis acceleration # f = cutoff frequency from INI -+ -For the aforementioned machine, the ripple for a 20Hz cutoff frequency -is 100 / (4 * 20) = 1.25 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 20Hz to 200Hz should be reasonable -to start. -+ +---- + + + For the aforementioned machine, the ripple for a 20Hz cutoff frequency + is 100 / (4 * 20) = 1.25 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 20Hz to 200Hz should be reasonable + to start. + Finally, no amount of tweaking will speed up a toolpath with lots of small, tight corners, since you're limited by cornering acceleration. * 'SPINDLES = 3' - The number of spindles to support. It is imperative that this - number matches the "num_spindles" parameter passed to the motion module. + number matches the "num_spindles" parameter passed to the motion module. * '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. + 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. * 'LINEAR_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). + Possible choices are mm or inch. + This does not affect the linear units in NC code (the G20 and G21 words do this). * 'ANGULAR_UNITS = ' - (((ANGULAR UNITS))) Specifies the 'machine units' for rotational axes. - Possible choices are 'deg', 'degree' (360 per circle), 'rad', 'radian' - (2pi 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. + Possible choices are 'deg', 'degree' (360 per circle), 'rad', 'radian' + (2pi 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. * '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. + machine units per second. The value shown in 'Axis' equals machine units per minute. * '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. + for "teleop" (Cartesian space) jogs, in 'machine units' per second per second. * '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. + move, in 'machine units' per second. + The value shown equals 300 units per minute. * 'MAX_LINEAR_ACCELERATION = 20.0' - (((MAX ACCELERATION))) The maximum acceleration for any axis or - coordinated axis move, in 'machine units' per second per second. + coordinated axis move, in 'machine units' per second per second. * '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. + 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. * '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. + 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. [WARNING] LinuxCNC will not know your joint travel limits when using 'NO_FORCE_HOMING = 1'. * '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. + 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. * TPMOD = alternate_trajectory_planning module [tp_parms=value] The TPMOD variable is optional. If specified, use a specified (user-built) @@ -1027,85 +943,68 @@ 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) -[[sec:kins-section]](((INI File, KINS Section))) - -=== [KINS] Section +[[sec:kins-section]] +=== [KINS] Section(((INI File, KINS Section))) * '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)). - The Axis gui, pncconf, and stepconf use this item. + 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)). + The Axis gui, pncconf, and stepconf use this item. * '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' - -[[sec:axis-section]](((INI File, AXIS Section))) + 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' -=== [AXIS_] Section +[[sec:axis-section]] +=== [AXIS_] Section(((INI File, AXIS Section))) The specifies one of: X Y Z A B C U V W -* 'MAX_VELOCITY = 1.2' - - Maximum velocity for this axis in <> per second. +* 'MAX_VELOCITY = 1.2' - Maximum velocity for this axis in <> per second. -* 'MAX_ACCELERATION = 20.0' - - Maximum acceleration for this axis in machine units per - second squared. - -* '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_] section a value of -1e99 is used. - -* '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_] section a value of 1e99 is used. - -* '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. - -* 'LOCKING_INDEXER_JOINT = 4' - This value selects a joint to use for - a locking indexer for the specified axis . 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: +* 'MAX_ACCELERATION = 20.0' - Maximum acceleration for this axis in machine units per second squared. - unlock_joints_mask=jointmask +* '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_] section a value of -1e99 is used. + +* '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_] section a value of 1e99 is used. + +* '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. - The jointmask bits are: (LSB)0:joint0, 1:joint1, 2:joint2, ... +* 'LOCKING_INDEXER_JOINT = 4' - This value selects a joint to use for a locking indexer for the specified axis . + 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: - Example: loadrt motmod ... unlock_joints_mask=0x38 - creates unlock pins for joints 3,4,5 + unlock_joints_mask=jointmask + + The jointmask bits are: (LSB)0:joint0, 1:joint1, 2:joint2, ... -* 'OFFSET_AV_RATIO = 0.1' - If nonzero, this item enables the use of - hal input pins for external axis offsets: + Example: loadrt motmod ... unlock_joints_mask=0x38 + creates unlock pins for joints 3,4,5 - 'axis..eoffset-enable' - 'axis..eoffset-counts' - 'axis..eoffset-scale' +* 'OFFSET_AV_RATIO = 0.1' - If nonzero, this item enables the use of hal input pins for external axis offsets: +---- + 'axis..eoffset-enable' + 'axis..eoffset-counts' + 'axis..eoffset-scale' +---- See the chapter: <> for usage information. -[[sec:joint-section]](((INI File, JOINT Section))) - -=== [JOINT_] Section +[[sec:joint-section]] +=== [JOINT_] Section(((INI File, JOINT Section))) The specifies the joint number 0 ... (num_joints-1) The value of 'num_joints' is set by [KINS]JOINTS= @@ -1136,58 +1035,51 @@ with coordinates=XZ, the joint-axes relationships are: For more information on kinematics modules see the manpage: '$ man kins' -* 'TYPE = LINEAR' - - The type of joint, either LINEAR or ANGULAR. +* 'TYPE = LINEAR' - The type of joint, either LINEAR or ANGULAR. -* '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) +* '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) * 'MAX_VELOCITY = 1.2' - - Maximum velocity for this joint in <> per second. + Maximum velocity for this joint in <> per second. * 'MAX_ACCELERATION = 20.0' - - Maximum acceleration for this joint in machine units per - second squared. - -* '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. + Maximum acceleration for this joint in machine units per second squared. + +* '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. // add a link to machine units -* '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. - + - + - If COMP_FILE is specified for an joint, BACKLASH is not used. A - 'COMP_FILE_TYPE' must be specified for each 'COMP_FILE'. +* '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. + + + + + If COMP_FILE is specified for an joint, BACKLASH is not used. + A 'COMP_FILE_TYPE' must be specified for each 'COMP_FILE'. * 'COMP_FILE_TYPE = 0 or 1' - Specifies the type of compensation file. The - first value is the nominal (commanded) position for both types. + first value is the nominal (commanded) position for both types. ** '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). - + - + -Type 0 Example -+ + 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). + + + Type 0 Example ---- -1.000 -1.005 -0.995 0.000 0.002 -0.003 @@ -1195,40 +1087,34 @@ Type 0 Example ---- ** '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. - + - + -Type 1 Example -+ + traveling in the positive direction. The third value specifies the negative + offset from nominal while traveling in a negative direction. + + + + + Type 1 Example ---- -1.000 0.005 -0.005 0.000 0.002 -0.003 1.000 0.003 -0.004 ---- -* '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. +* '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. - -* '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. +* '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. [NOTE] - 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. [NOTE] - 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 @@ -1241,130 +1127,112 @@ 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. -* '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. +* '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. * '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. - -* 'LOCKING_INDEXER = 1' - - Indicates the joint is used as a locking indexer. + 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. + +* 'LOCKING_INDEXER = 1' - Indicates the joint is used as a locking indexer. .Homing - These parameters are Homing related, for a better explanation read the <> Chapter. -* 'HOME = 0.0' - - The position that the joint will go to upon completion of the homing - sequence. +* 'HOME = 0.0' - The position that the joint will go to upon completion of the homing sequence. * 'HOME_OFFSET = 0.0' - - The joint position of the home switch or index pulse, in - <>. 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. - -* '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. + The joint position of the home switch or index pulse, in <>. + 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. + +* '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. * 'HOME_LATCH_VEL = 0.0' - - Homing velocity in machine units per second to the home - switch latch position. Sign denotes direction of travel. + Homing velocity in machine units per second to the home switch latch position. + Sign denotes direction of travel. * '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. + 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. * '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. + 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. * '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. + 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. * '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. + 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. * 'HOME_IS_SHARED = ' - - If the home input is shared by more than one joint set to 1 to - prevent homing from starting if the one of the shared switches is - already closed. Set to 0 to permit homing if a switch is closed. - -* '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. - -* 'HOME_SEQUENCE = ' - - Used to define the "Home All" sequence. 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: <> + If the home input is shared by more than one joint set to 1 to prevent homing + from starting if the one of the shared switches is already closed. + Set to 0 to permit homing if a switch is closed. + +* '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. + +* 'HOME_SEQUENCE = ' - Used to define the "Home All" sequence. + 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: <>. * '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. + 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. .Servo - These parameters are relevant to joints controlled by servos. [WARNING] 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 -<> subsection. +custom INI file entries see the <> subsection. The following items might be used by a PID component and the assumption is that the output is volts. -* 'DEADBAND = 0.000015' - How close is close enough to consider the motor in position, -in <>. 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. +* 'DEADBAND = 0.000015' - How close is close enough to consider the motor in position, in <>. + 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. 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 @@ -1386,78 +1254,62 @@ latexmath:[ \frac{X\, inches}{1\, encoder\, count} = image::images/encoder-counts-math.png[align="center"] * '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. - -* '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] + 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. + +* '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] //latexmath:[$\frac{volt}{mu}$]. -* '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] +* '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] //latexmath:[$\frac{volt}{mu\, s}$]. -* '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] +* '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] // latexmath:[$\frac{volt}{mu/s}$]. -* '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] +* '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] // latexmath:[$\frac{volt}{mu}$]. -* '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] +* '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] // latexmath:[$\frac{volt}{mu\, s}$]. -* '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] +* '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] // latexmath:[$\frac{volt}{mu\, s^{2}}$]. -* 'OUTPUT_SCALE = 1.000' - - -* 'OUTPUT_OFFSET = 0.000' - These two values are the scale and offset factors for - the joint 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. - 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[] +* 'OUTPUT_SCALE = 1.000' +* 'OUTPUT_OFFSET = 0.000' - These two values are the scale and offset factors for the joint 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. + 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[] // latexmath:[raw=\frac{output-offset}{scale}] @@ -1483,17 +1335,12 @@ gain, DAC non-linearity, DAC units, etc. To do this, follow this procedure. -. Build a calibration table for the output, driving the DAC with a - desired voltage and measuring the result. - -. Do a least-squares linear fit to get coefficients a, b such - that image:images/calibration-1.png[] -. Note that we want raw output such that our measured result is - identical to the commanded output. This means +. Build a calibration table for the output, driving the DAC with a desired voltage and measuring the result. +. Do a least-squares linear fit to get coefficients a, b such that image:images/calibration-1.png[] +. Note that we want raw output such that our measured result is identical to the commanded output. This means .. image:images/calibration-2.png[] .. image:images/calibration-3.png[] -. As a result, the a and b coefficients from the linear fit can be - used as the scale and offset for the controller directly. +. As a result, the a and b coefficients from the linear fit can be used as the scale and offset for the controller directly. See the following table for an example of voltage measurements. @@ -1507,30 +1354,25 @@ See the following table for an example of voltage measurements. |=============== |Raw | Measured |-10 | -9.93 -|-9 | -8.83 -|0 | -0.03 -|1 | 0.96 -|9 | 9.87 -|10 | 10.87 +| -9 | -8.83 +| 0 | -0.03 +| 1 | 0.96 +| 9 | 9.87 +| 10 | 10.87 |=============== -* '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. - +* '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. * 'INPUT_SCALE = 20000' - in Sample configs * 'ENCODER_SCALE = 20000' - 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. + +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: +For example, on a 2000 counts per rev encoder, and 10 revs/inch gearing, and desired units of inch, we have: image::images/encoder-scale.png[align="center"] @@ -1546,20 +1388,18 @@ These parameters are relevant to joints controlled by steppers. 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 -<> subsection. +custom INI file entries see the <> subsection. The following items might be used by a stepgen component. * 'SCALE = 4000' - in Sample configs * 'STEP_SCALE = 4000' - 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 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. + +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. For example, on a 1.8 degree stepper motor with half-stepping, and 10 @@ -1573,15 +1413,13 @@ image::images/stepper-scale.png[align="center"] //\frac{4000\, steps}{inch} ] * '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: + 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: image::images/encoder-scale.png[align="center"] @@ -1591,108 +1429,96 @@ image::images/encoder-scale.png[align="center"] * '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. + 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. * '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. + 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. -[[sec:spindle-section]](((INI File, SPINDLE Section))) +[[sec:spindle-section]] +=== [SPINDLE_] Section(((INI File, SPINDLE Section))) -=== [SPINDLE_] Section The specifies the spindle number 0 ... (num_spindles-1) The value of 'num_spindles' is set by [TRAJ]SPINDLES= * 'MAX_VELOCITY = 20000' - The maximum spindle speed (in rpm) for the specified spindle. Optional. + The maximum spindle speed (in rpm) for the specified spindle. Optional. * '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. + 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. * '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. + 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. * '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. + This setting is equivalent to MIN_VELOCITY but for reverse spindle + rotation. It will default to the MIN_VELOCITY if omitted. * '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. + 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. * '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. + 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. * '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 - -[[sec:emcio-section]](((INI File, EMCIO Section))) + 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 -=== [EMCIO] Section +[[sec:emcio-section]] +=== [EMCIO] Section(((INI File, EMCIO Section))) -* 'EMCIO = io' - Name of IO controller program +* 'EMCIO = io' - Name of IO controller program. -* '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. +* '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. -* 'TOOL_TABLE = tool.tbl' - - The file which contains tool information, described in - the User Manual. +* 'TOOL_TABLE = tool.tbl' - The file which contains tool information, described in the User Manual. -* '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) +* '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) * '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. + 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. * '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. + 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. * '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. + 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. * '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 - <> and - <>. + The machine is moved to reference point defined by parameters 5181-5186 for G30 if the value is 1. + For more information see <> and <>. * '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. - + 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. diff --git a/docs/src/config/ini-config_es.adoc b/docs/src/config/ini-config_es.adoc index 357ba1115bf..b602b24f93e 100644 --- a/docs/src/config/ini-config_es.adoc +++ b/docs/src/config/ini-config_es.adoc @@ -61,20 +61,20 @@ y finalizan en el siguiente nombre de sección. Las siguientes secciones son utilizadas por LinuxCNC: * '[<>]' información general -* '[<< sec:display-section,DISPLAY>>]' configuraciones relacionadas con la interfaz gráfica de usuario -* '[<< sec:sección de filtro,FILTER>>]' configuración de los programas de filtro de entrada -* '[<< sec:rs274ngc-section,RS274NGC>>]' configuración utilizada por el intérprete de código g -* '[<< sec:emcmot-section,EMCMOT>>]' configuraciones utilizadas por el controlador de movimiento en tiempo real -* '[<< sec:task-section,TASK>>]' configuraciones utilizadas por el controlador de tareas -* '[<< sec:hal-section,HAL>>]' especificar archivos .hal -* '[<< sec:halui-section,HALUI >>]' comandos MDI utilizados por HALUI -* '[<< sec:applications-section,APPLICATIONS>>]' otras aplicaciones que iniciará LinuxCNC -* '[<< sec:traj-section,TRAJ>>]' configuraciones adicionales utilizadas por el controlador de movimiento en tiempo real -* '[<< sec:joint-section,JOINT_n>>]' variables de articulaciones individuales -* '[<< sec:axis-section,AXIS_n>>]' variables de eje individuales -* '[<< sec:kins-section,KINS>>]' variables cinemáticas - -* '[<< sec:emcio-section,EMCIO>>]' configuración utilizada por el controlador de E/S +* '[<>]' configuraciones relacionadas con la interfaz gráfica de usuario +* '[<>]' configuración de los programas de filtro de entrada +* '[<>]' configuración utilizada por el intérprete de código g +* '[<>]' configuraciones utilizadas por el controlador de movimiento en tiempo real +* '[<>]' configuraciones utilizadas por el controlador de tareas +* '[<>]' especificar archivos .hal +* '[<>]' comandos MDI utilizados por HALUI +* '[<>]' otras aplicaciones que iniciará LinuxCNC +* '[<>]' configuraciones adicionales utilizadas por el controlador de movimiento en tiempo real +* '[<>]' variables de articulaciones individuales +* '[<>]' variables de eje individuales +* '[<>]' variables cinemáticas + +* '[<>]' configuración utilizada por el controlador de E/S === Variables @@ -424,8 +424,7 @@ El siguiente elemento [DISPLAY] es utilizado únicamente por la interfaz TKLinux * 'HELP_FILE = tklinucnc.txt' - Ruta al archivo de ayuda. -[[sec:filter-section]] (((Archivo INI, Sección FILTER))) - +[[sec:filter-section]](((Archivo INI, Sección FILTER))) === Sección [FILTER] AXIS y gmoccapy tienen la capacidad de enviar archivos cargados a través de un programa de filtro. @@ -524,8 +523,7 @@ main(sys.argv[1:]) [[sec:rs274ngc-section]](((Archivo INI, Sección RS274NGC))) [[gcode:ini-features]] - -=== Sección [RS274NGC] +=== Sección [RS274NGC] * 'PARAMETER_FILE = myfile.var' -     (((ARCHIVO DE PARÁMETROS))) El archivo ubicado en el mismo directorio que el archivo ini diff --git a/docs/src/config/ini-homing.adoc b/docs/src/config/ini-homing.adoc index e458a6b0e89..e34579094c3 100644 --- a/docs/src/config/ini-homing.adoc +++ b/docs/src/config/ini-homing.adoc @@ -1,6 +1,7 @@ -= Homing Configuration +:lang: en [[cha:homing-configuration]] += Homing Configuration == Overview diff --git a/docs/src/config/integrator-concepts.adoc b/docs/src/config/integrator-concepts.adoc index f271a2614f3..2c97e2060a0 100644 --- a/docs/src/config/integrator-concepts.adoc +++ b/docs/src/config/integrator-concepts.adoc @@ -1,5 +1,6 @@ -[[cha:integrator-concepts]] +:lang: en +[[cha:integrator-concepts]] = Integrator Concepts == File Locations @@ -140,8 +141,7 @@ 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. -.Servo Loop -image::images/servo-feedback.png[alt="simplified diagram of how a servomotor system is connected"] +image::images/servo-feedback.png["simplified diagram of how a servomotor system is connected"] This diagram shows that the input signal (and the feedback signal) drive the summing amplifier, the summing amplifier drives the power amplifier, @@ -172,8 +172,7 @@ 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. -.PID Loop -image::images/pid-feedback.png[alt="PID Loop, PID stands for Proportional, Integral, and Derivative"] +image::images/pid-feedback.png["PID Loop, PID stands for Proportional, Integral, and Derivative"] By 'tuning' the three constants in the PID controller algorithm, the controller can provide control action designed for specific process diff --git a/docs/src/config/iov2.adoc b/docs/src/config/iov2.adoc index 6333eeb0d77..b6767b22553 100644 --- a/docs/src/config/iov2.adoc +++ b/docs/src/config/iov2.adoc @@ -1,5 +1,6 @@ -[[cha:iov2]] +:lang: en +[[cha:iov2]] = I/O Control V2 == Description diff --git a/docs/src/config/lathe-config.adoc b/docs/src/config/lathe-config.adoc index 2872487b9a0..8c8d1ef8ed8 100644 --- a/docs/src/config/lathe-config.adoc +++ b/docs/src/config/lathe-config.adoc @@ -1,6 +1,7 @@ -= Lathe Configuration +:lang: en [[cha:lathe-configuration]] += Lathe Configuration == Default Plane diff --git a/docs/src/config/moveoff.adoc b/docs/src/config/moveoff.adoc index fbac1bd19d3..3787c2376cb 100644 --- a/docs/src/config/moveoff.adoc +++ b/docs/src/config/moveoff.adoc @@ -1,6 +1,7 @@ -= Moveoff Component +:lang: en [[cha:moveoff]] += Moveoff Component(((Moveoff))) The moveoff Hal component is a Hal-only method for implementing offsets. See the manpage ('$ man moveoff') @@ -15,7 +16,7 @@ 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 +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. @@ -82,13 +83,11 @@ 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. - Sim configurations that demonstrate the component and a gui (moveoff_gui) are located in: -* configs/sim/axis/moveoff (axis-ui) -* configs/sim/touchy/ngcgui (touchy-ui) - +* configs/sim/axis/moveoff (axis-ui) +* configs/sim/touchy/ngcgui (touchy-ui) == Modifying an existing configuration @@ -109,7 +108,6 @@ a configuration ini file, it will: . Set the moveoff component operating parameters and limits for each axis in accordance with additional ini file settings - 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 @@ -147,8 +145,8 @@ MAX_VELOCITY = MAX_ACCELERATION = ---- -Add ini file entries for moveoff component settings -(omit to use moveoff defaults): +Add ini file entries for moveoff component settings (omit to use moveoff defaults): + ---- [MOVEOFF] EPSILON = @@ -188,6 +186,7 @@ is automatically created if necessary. To use the moveoff_gui, add an entry in the ini file [APPLICATIONS] section as follows: + ---- [APPLICATIONS] # Note: a delay (specified in seconds) may be required if connections @@ -208,6 +207,7 @@ must make additional connections. For example, the supplied demonstration configs (configs/sim/axis/moveoff/*.ini) use a simple system halfile (named LIB:moveoff_external.hal) to connect the mv.move-enable,mv.offset-in-M, and mv.bactrack-enable pins to signals: + ---- [HAL] HALUI = halui @@ -218,8 +218,9 @@ HALFILE = LIB:moveoff_external.hal The connections made by LIB:moveoff_external.hal (for a three axis configuration) are: + ---- -net external_enable mv.move-enable +net external_enable mv.move-enable net external_offset_0 mv.offset-in-0 net external_offset_1 mv.offset-in-1 @@ -235,11 +236,13 @@ for current offset values and offset status. The moveoff_gui is configured with command line options. For details on the operation of moveoff_gui, see the man page: + ---- $ man moveoff_gui ---- -For a brief listing of command line options for moveoff_gui, use the command -line help option: + +For a brief listing of command line options for moveoff_gui, use the command line help option: + ---- $ moveoff_gui --help @@ -271,17 +274,17 @@ Options: Options for special cases: [-noentry] (default: notused) - (don't create entry widgets) + (don't create entry widgets) [-no_resume_inhibit] (default: notused) - (do not use a resume-inhibit-pin) + (do not use a resume-inhibit-pin) [-no_pause_requirement] (default: notused) - (no check for halui.program.is-paused) + (no check for halui.program.is-paused) [-no_cancel_autoresume] (default: notused) - (useful for retraact offsets with simple) - (external control ) + (useful for retraact offsets with simple) + (external control ) [-no_display] (default: notused) - (Use when both external controls and displays) - (are in use (see Note)) ) + (Use when both external controls and displays) + (are in use (see Note)) ) Note: If the moveoff move-enable pin (mv.move-enable) is connected when moveoff_gui is started, external controls are required and only diff --git a/docs/src/config/pncconf.adoc b/docs/src/config/pncconf.adoc index df91a8c1a17..bdc5adbc729 100644 --- a/docs/src/config/pncconf.adoc +++ b/docs/src/config/pncconf.adoc @@ -1,5 +1,6 @@ -[[cha:pncconf-wizard]] +:lang: en +[[cha:pncconf-wizard]] = Mesa Configuration Wizard PNCconf is made to help build configurations that utilize specific Mesa diff --git a/docs/src/config/python-interface.adoc b/docs/src/config/python-interface.adoc index aaaaa64170c..ef74e8ba559 100644 --- a/docs/src/config/python-interface.adoc +++ b/docs/src/config/python-interface.adoc @@ -1,5 +1,6 @@ -[[cha:python-interface]] +:lang: en +[[cha:python-interface]] = Python Interface :ini: {basebackend@docbook:'':ini} @@ -397,7 +398,8 @@ else: *velocity*:: '(returns float)' - This property is defined, but it does not have a useful interpretation. -=== The `axis` dictionary [[sec:the-axis-dictionary]] +[[sec:the-axis-dictionary]] +=== The `axis` dictionary The axis configuration and status values are available through a list of per-axis dictionaries. Here's an example how to access an attribute @@ -417,7 +419,8 @@ parameter, reflects [JOINT_n]MIN_LIMIT. *velocity*:: '(returns float)' - current velocity. -=== The `joint` dictionary [[sec:the-joint-dictionary]] +[[sec:the-joint-dictionary]] +=== The `joint` dictionary [source,python] --------------------------------------------------------------------- @@ -504,7 +507,8 @@ by the configuration parameter [JOINT_n]UNITS) *velocity*:: '(returns float)' - current velocity. -== The `spindle` dictionary [[sec:the-spindle-dictionary]] +[[sec:the-spindle-dictionary]] +== The `spindle` dictionary *brake*:: '(returns integer)' - value of the spindle brake flag. @@ -841,7 +845,8 @@ if error: --------------------------------------------------------------------- -== Reading ini file values [[python:reading-ini-values]] +[[python:reading-ini-values]] +== Reading ini file values Here's an example for reading values from an ini file through the `linuxcnc.ini` object: diff --git a/docs/src/config/python-interface_es.adoc b/docs/src/config/python-interface_es.adoc index da46111f461..a3c112ce053 100644 --- a/docs/src/config/python-interface_es.adoc +++ b/docs/src/config/python-interface_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:python-interface]] - = Interfaz de Python :ini: {basebackend@docbook:'':ini} diff --git a/docs/src/config/stepconf.adoc b/docs/src/config/stepconf.adoc index 60e0a3024eb..20b4e808b7c 100644 --- a/docs/src/config/stepconf.adoc +++ b/docs/src/config/stepconf.adoc @@ -1,6 +1,7 @@ -= Stepper Configuration Wizard +:lang: en [[cha:stepconf-wizard]] += Stepper Configuration Wizard == Introduction @@ -22,59 +23,61 @@ The file extension is .stepconf. The Stepconf Wizard works best with at least 800 x 600 screen resolution. - == Start Page +[[cap:init-Page]] .Entry Page +image::images/stepconf-start_en.png["Entry Page",align="center"] -image::images/stepconf-start_en.png[align="center", alt="Entry Page"] - -* 'Create New' - Creates a fresh configuration. - -* '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. +image::images/stepconf-start_2_es.png["Pagina de entrada",align="center"] -* '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. +The three first radio buttons are self-explanatory: -These next options will be recorded in a preference file for the next run of -Stepconf. - -* 'Create Desktop Shortcut' - This will place a link on your desktop to the -files. +* 'Create New' - Creates a fresh configuration. +* '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. +* '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. + +These next options will be recorded in a preference file for the next run of Stepconf. + +* 'Create Desktop Shortcut' - This will place a link on your desktop to the files. +* 'Create Desktop Launcher' - This will place a launcher on your desktop to start your application. +* 'Create Simulated Hardware' - This allows you to build a config for testing, even if you don't have the actual hardware. + +[[sec:Basic-Information]] +== Basic Information -* 'Create Desktop Launcher' - This will place a launcher on your desktop to -start your application. +[[cap:Basic-Information-Page]] +.Basic Information Page +image::images/stepconf-base_en.png["Basic Information Page",align="center"] * 'Create Simulated Hardware' - This allows you to build a config for testing, even if you don't have the actual hardware. -== Basic Information - -.Basic Information Page - -image::images/stepconf-base_en.png[align="center", alt="Basic Information Page"] - -* 'Machine Name' - Choose a name for your machine. Use only uppercase letters, -lowercase letters, digits, - and _. - -* 'Axis Configuration' - Choose XYZ (Mill), XYZA (4-axis mill) or XZ (Lathe). - -* '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. - -* '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.5us as 4500ns. +* 'Machine Name' - (((Machine Name))) + Choose a name for your machine. + Use only uppercase letters, lowercase letters, digits, - and _. + +* 'Axis Configuration' - (((Axis Configuration))) + Choose XYZ (Mill), XYZA (4-axis mill) or XZ (Lathe). + +* '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. + +* '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.5us as 4500ns. A list of some popular drives, along with their timing values, is on the LinuxCNC.org Wiki under @@ -88,34 +91,33 @@ drive requirements to allow for this. The LinuxCNC Configuration Selector has configs for Sherline already configured. * '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. + sure about this setting a value of 20,000 will work with most drives. * '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. + not sure about this setting a value of 20,000 will work with most drives. * '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. + direction in nanoseconds. If your not sure about this setting a value of + 20,000 will work with most drives. * '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. + step pulse in nanoseconds. If your not sure about this setting a value of + 20,000 will work with most drives. * 'One / Two Parport' - Select how many parallel port are to be configured. * '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 -<> section for more details. + To run a latency test press the 'Test Base Period Jitter' button. See the + <> section for more details. * 'Max Step Rate' -Stepconf automatically calculates the Max Step Rate based -on the driver characteristics entered and the latency test result. + on the driver characteristics entered and the latency test result. * 'Min Base Period' - Stepconf automatically determines the Min Base Period -based on the driver characteristics entered and latency test result. + based on the driver characteristics entered and latency test result. -[[latency-test]](((Latency Test))) - -== Latency Test +[[latency-test]] +== Latency Test(((Latency Test))) While the test is running, you should 'abuse' the computer. Move windows around on the screen. Surf the web. Copy some large files @@ -132,7 +134,7 @@ Do not attempt run LinuxCNC while the latency test is running. .Latency Test -image::images/latency-test_en.png[align="center", alt="Latency Test"] +image::images/latency-test_en.png["Latency Test",align="center"] 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 @@ -171,139 +173,88 @@ whether you use software stepping or not. .Parallel Port Setup Page -image::images/stepconf-parallel-1_en.png[align="center", alt="Parallel Port 1 Setup Page"] -You may specify the address as a hexadecimal (often 0x378) or as linux's default - port number (probably 0) - -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). +image::images/stepconf-parallel-1_en.png["Parallel Port 1 Setup Page",align="center"] -* '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). +You may specify the address as a hexadecimal (often 0x378) or as linux's default port number (probably 0) -* 'Inputs and Outputs' - If the input or output is not used set the option -to 'Unused'. +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). +* '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). +* 'Inputs and Outputs' - If the input or output is not used set the option to 'Unused'. * 'External E Stop' - This can be selected from an input pin drop down box. -A typical E Stop chain uses all normally closed contacts. - -* 'Homing & Limit Switches' - These can be selected from an input pin drop -down box for most configurations. - -* '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. - -* '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. + A typical E Stop chain uses all normally closed contacts. +* 'Homing & Limit Switches' - These can be selected from an input pin drop down box for most configurations. +* '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. +* '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. == Parallel Port 2 Setup .Parallel Port 2 Setup Page -image::images/stepconf-parallel-2_en.png[align="center", alt="Parallel Port 2 Setup Page"] +image::images/stepconf-parallel-2_en.png["Parallel Port 2 Setup Page",align="center"] -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). +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). -== Axis Configuration +== Axis Configuration[[sec:Axis-Configuration]](((Axis Configuration))) .Axis Configuration Page - -image::images/stepconf-axis-x_en.png[align="center", alt="Axis X Configuration Page"] - -* '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. - -* 'Driver Microstepping' - The amount of microstepping performed by the driver. -Enter '2' for half-stepping. - -* 'Pulley Ratio' - If your machine has pulleys between the motor and leadscrew, -enter the ratio here. If not, enter '1:1'. - -* '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. - -* 'Maximum Velocity' -Enter the maximum velocity for the axis in units per -second. - -* 'Maximum Acceleration' - The correct values for these items can only be -determined through experimentation. See -<> to set the speed and -<> to set the -acceleration. - -* '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. - -* '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. - -* '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. - -* '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'. - -* '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. - -* 'Time to accelerate to max speed' - Time to reach maximum speed calculated -from 'Max Acceleration' and 'Max Velocity'. - -* 'Distance to accelerate to max speed' - Distance to reach maximum speed from -a standstill. - -* '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) - +image::images/stepconf-axis-x_en.png["Axis X Configuration Page",align="center"] + +* '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. +* 'Driver Microstepping' - (((Driver Microstepping)))) + The amount of microstepping performed by the driver. + Enter '2' for half-stepping. +* 'Pulley Ratio' - (((Pulley Ratio))) + If your machine has pulleys between the motor and leadscrew, enter the ratio here. + If not, enter '1:1'. +* '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. +* 'Maximum Velocity' - (((Maximum Velocity))) + Enter the maximum velocity for the axis in units per second. +* 'Maximum Acceleration' - (((Maximum Acceleration))) + The correct values for these items can only be determined through experimentation. See <> to set the speed and <> to set the acceleration. +* '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. +* '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. +* '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. +* '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'. +* '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. +* 'Time to accelerate to max speed' - (((Time to accelerate to max speed))) + Time to reach maximum speed calculated from 'Max Acceleration' and 'Max Velocity'. +* 'Distance to accelerate to max speed' - (((Distance to accelerate to max speed))) + Distance to reach maximum speed from a standstill. +* '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) * 'Axis SCALE' - The number that will be used in the ini file [SCALE] setting. -This is how many steps per user unit. - -* '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. + This is how many steps per user unit. +* '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. -=== Test This Axis +//== Test This Axis C -.Test This Axis +.Test This Axis B -image::images/stepconf-x-test_en.png[align="center", alt="Test This Axis"] +image::images/stepconf-x-test_en.png["Test This Axis",align="center",] Test this axis is a basic tester that only outputs step and direction signals to try different values for acceleration and velocity. @@ -314,7 +265,6 @@ 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. [[sub:finding-maximum-velocity]] - .Finding Maximum Velocity Begin with a low Acceleration @@ -356,12 +306,10 @@ you turn Velocity, verify the following: - Physical problems with the motor, motor coupling, leadscrew, etc. 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'. - -[[sub:finding-maximum-acceleration]](((Finding Maximum Acceleration))) +during this testing procedure, reduce it by 10% and use that as the axis 'Maximum Velocity'. -.Finding Maximum Acceleration +[[sub:finding-maximum-acceleration]] +.Finding Maximum Acceleration(((Finding Maximum Acceleration))) With the Maximum Velocity you found in the previous step, enter the acceleration value to test. @@ -377,24 +325,22 @@ reduce it by 10% and use that as the axis Maximum Acceleration. .Spindle Configuration Page -image::images/stepconf-spindle_en.png[align="center", alt="Spindle Configuration Page"] +image::images/stepconf-spindle_en.png["Spindle Configuration Page",align="center"] -This page only appears when 'Spindle PWM' is chosen in the -'Parallel Port Pinout' page for one of the outputs. +This page only appears when 'Spindle PWM' is chosen in the 'Parallel Port Pinout' page for one of the outputs. === Spindle Speed Control -If 'Spindle PWM' appears on the pinout, -the following information should be entered: +If 'Spindle PWM' appears on the pinout, the following information should be entered: * '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. + '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. * '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 -<>. + 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 + <>. === Spindle-synchronized motion @@ -405,33 +351,31 @@ These signals are: * 'Spindle Index' - Is a pulse that occurs once per revolution of the spindle. * 'Spindle Phase A' - This is a pulse that occurs in multiple equally-spaced -locations as the spindle turns. + locations as the spindle turns. * '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. + an offset from Spindle Phase A. The advantages to using both A and B are + direction sensing, increased noise immunity, and increased resolution. If 'Spindle Phase A' and 'Spindle Index' appear on the pinout, the following information should be entered: * '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. + wait for the spindle to reach the commanded speed before feed moves. Select this + option and set the 'close enough' scale. -* 'Speed Display Filter Gain' - Setting for adjusting the stability of the -visual spindle speed display. +* 'Speed Display Filter Gain' - Setting for adjusting the stability of the visual spindle speed display. * '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' + during one revolution of the spindle. This option is only enabled when an + input has been set to 'Spindle Phase A' * '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. + For a high spindle RPM or a spindle encoder with high resolution, a low value + of 'BASE_PERIOD' is required. -[[sub:determining-spindle-calibration]](((Determining Spindle Calibration))) - -=== Determining Spindle Calibration +[[sub:determining-spindle-calibration]] +=== Determining Spindle Calibration(((Determining Spindle Calibration))) Enter the following values in the Spindle Configuration page: @@ -450,15 +394,13 @@ Valid numbers (at this point) range from 1 to 1000. 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. +For 'Speed' enter the measured speed, and for 'PWM' enter the S-number divided by 1000. Because most spindle drivers are somewhat nonlinear in their response curves, it is best to: - Make sure the two calibration speeds are not too close together in RPM -- Make sure the two calibration speeds are in the range of speeds you -will typically use while milling +- Make sure the two calibration speeds are in the range of speeds you will typically use while milling 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%), @@ -466,23 +408,23 @@ then find the PWM values that give 1600 RPM (40%) and 2800 RPM (70%). == Options -.Options Configuration +//.Options Configuration -image::images/stepconf-options_en.png[align="center", alt="Options Configuration"] +image::images/stepconf-options_en.png["Options Configuration",align="center"] * 'Include Halui' - This will add the Halui user interface component. See the -<> for more information on. + <> for more information on. * 'Include pyVCP' - This option adds the pyVCP panel base file or a sample file -to work on. See the <> for more information. + to work on. See the <> for more information. * 'Include ClassicLadder PLC' - This option will add the ClassicLadder PLC -(Programmable Logic Controller). See the -<> for more information. + (Programmable Logic Controller). See the + <> for more information. * '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. + pause and prompt you to change the tool when 'M6' is encountered. This feature + is usually only useful if you have presettable tools. == Machine Configuration Complete @@ -528,7 +470,8 @@ 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. -=== Operating without Home Switches[[sub:Operating-without-Home]] +[[sub:Operating-without-Home]] +=== Operating without Home Switches (((Operating without Home Switches))) A machine can be operated without home switches. @@ -565,13 +508,13 @@ Typically for a parallel port you might use 47k. Wiring N/C switches in series (simplified diagram) -image::images/switch-nc-series_en.svg[align="center", alt="Normally Closed Switches"] +image::images/switch-nc-series_en.svg["Normally Closed Switches",align="center"] .Normally Open Switches Wiring N/O switches in parallel (simplified diagram) -image::images/switch-no-parallel_en.svg[align="center", alt="Normally Open Switches"] +image::images/switch-no-parallel_en.svg["Normally Open Switches",align="center"] The following combinations of switches are permitted in Stepconf: @@ -583,4 +526,3 @@ The following combinations of switches are permitted in Stepconf: // vim: set syntax=asciidoc: - diff --git a/docs/src/config/stepconf_es.adoc b/docs/src/config/stepconf_es.adoc index c813476f849..23b67badb2a 100644 --- a/docs/src/config/stepconf_es.adoc +++ b/docs/src/config/stepconf_es.adoc @@ -257,7 +257,8 @@ para trabajar en el. Ver el <> para más información * 'Incluir ClassicLadder PLC' - Esta opción agregará el PLC ClassicLadder (Controlador lógico programable). Ver el -<> para más información. +Capitulo Classicladder para más información. +//<> - "all-english" document removed * 'Indicador en pantalla para cambio de herramienta' - Si esta casilla está marcada, LinuxCNC para y le pide que cambie la herramienta cuando se encuentre 'M6'. Esta característica diff --git a/docs/src/config/stepper-diagnostics.adoc b/docs/src/config/stepper-diagnostics.adoc index c5947ca82a2..dc32d33c130 100644 --- a/docs/src/config/stepper-diagnostics.adoc +++ b/docs/src/config/stepper-diagnostics.adoc @@ -1,13 +1,14 @@ -= Stepper Diagnostics +:lang: en [[cha:stepper-diagnostics]] += Stepper Diagnostics(((Stepper Diagnostics))) 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. +is not always the case, but it's usually a good place to start. == Common Problems @@ -15,7 +16,7 @@ is not always the case, but it's usually a good place to start. 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 +jog forward and jog backward keys, alternately , and the stepper moves one step each time, and in the same direction, there is your clue. === No Steppers Move @@ -39,16 +40,16 @@ 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. - - FERROR too small - - MIN_FERROR too small - - MAX_VELOCITY too fast - - MAX_ACCELERATION too fast - - BASE_PERIOD set too long - - Backlash added to an axis +- FERROR too small +- MIN_FERROR too small +- MAX_VELOCITY too fast +- MAX_ACCELERATION too fast +- BASE_PERIOD set too long +- Backlash added to an axis 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, +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. If you added backlash you need to increase the STEPGEN_MAXACCEL up to @@ -68,7 +69,7 @@ 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, +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 @@ -94,7 +95,7 @@ also possible you have either the MAX_ACCELERATION or MAX_VELOCITY set too high for that axis. The following program will test the Z axis configuration for proper -setup. Copy the program to your ~/emc2/nc_files directory and name it +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 @@ -102,29 +103,30 @@ 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. - ( test program to see if Z axis loses position ) - ( msg, test 1 of Z axis configuration ) - G20 #1000=100 ( loop 100 times ) - ( this loop has delays after moves ) - ( tests acc and velocity settings ) - o100 while [#1000] - G0 Z1.000 - G4 P0.250 - G0 Z0.500 - G4 P0.250 - #1000 = [#1000 - 1] - o100 endwhile - ( msg, test 2 of Z axis configuration S to continue) - M1 (stop here) - #1000=100 ( loop 100 times ) - ( the next loop has no delays after moves ) - ( tests direction hold times on driver config and also max accel setting ) - o101 while [#1000] - G0 Z1.000 - G0 Z0.500 - #1000 = [#1000 - 1] - o101 endwhile - ( msg, Done...Z should be exactly .5" above table ) - M2 - - +[source,{ngc}] +---- +( test program to see if Z axis loses position ) +( msg, test 1 of Z axis configuration ) +G20 #1000=100 ( loop 100 times ) +( this loop has delays after moves ) +( tests acc and velocity settings ) +o100 while [#1000] + G0 Z1.000 + G4 P0.250 + G0 Z0.500 + G4 P0.250 + #1000 = [#1000 - 1] +o100 endwhile +( msg, test 2 of Z axis configuration S to continue) +M1 (stop here) +#1000=100 ( loop 100 times ) +( the next loop has no delays after moves ) +( tests direction hold times on driver config and also max accel setting ) +o101 while [#1000] + G0 Z1.000 + G0 Z0.500 + #1000 = [#1000 - 1] +o101 endwhile +( msg, Done...Z should be exactly .5" above table ) +M2 +---- diff --git a/docs/src/config/stepper-diagnostics_es.adoc b/docs/src/config/stepper-diagnostics_es.adoc index 4cfb90f6e76..e00d08a2791 100644 --- a/docs/src/config/stepper-diagnostics_es.adoc +++ b/docs/src/config/stepper-diagnostics_es.adoc @@ -1,8 +1,7 @@ :lang: es -= Diagnósticos para steppers - [[cha:stepper-diagnostics]] += Diagnósticos para steppers :ini:{basebackend@docbook:'':ini} :hal:{basebackend@docbook:'':hal} diff --git a/docs/src/config/stepper-quickstart.adoc b/docs/src/config/stepper-quickstart.adoc index 1230c8a527a..9a6c1f7d0fc 100644 --- a/docs/src/config/stepper-quickstart.adoc +++ b/docs/src/config/stepper-quickstart.adoc @@ -1,5 +1,6 @@ -[[cha:stepper-quickstart]] +:lang: en +[[cha:stepper-quickstart]] = Stepper Quickstart This section assumes you have done a standard install from the Live @@ -12,20 +13,18 @@ latest updates for LinuxCNC and Ubuntu before continuing. 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 +first thing you need to do. Follow the instructions <> to run the latency test. -[[sec:sherline]](((Sherline))) - -== Sherline +[[sec:sherline]] +== Sherline(((Sherline))) 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. -[[sec:xylotex]](((Xylotex))) - -== Xylotex +[[sec:xylotex]] +== Xylotex(((Xylotex))) If you have a Xylotex you can skip the following sections and go straight to the <>. @@ -44,10 +43,10 @@ wiki site of more drives. [width="100%", options="header"] |==================================================================== |Axis | Drive Type | Step Time ns | Step Space ns | Dir. Hold ns | Dir. Setup ns -|X | | | | | -|Y | | | | | -|Z | | | | | -| | | | | | +|X | | | | | +|Y | | | | | +|Z | | | | | +| | | | | | |==================================================================== == Pinout Information @@ -58,18 +57,18 @@ PC parallel port. [width="100%", options="header"] |============================================================================== |Output Pin | Typ. Function | If Different | Input Pin | Typ. Function | If Different -|1 | E-Stop Out | | 10 | X Limit/Home | -|2 | X Step | | 11 | Y Limit/Home | -|3 | X Direction | | 12 | Z Limit/Home | -|4 | Y Step | | 13 | A Limit/Home | -|5 | Y Direction | | 15 | Probe In | -|6 | Z Step | | | | -|7 | Z Direction | | | | -|8 | A Step | | | | -|9 | A Direction | | | | -|14 | Spindle CW | | | | -|16 | Spindle PWM | | | | -|17 | Amplifier Enable | | | | +|1 | E-Stop Out | | 10 | X Limit/Home | +|2 | X Step | | 11 | Y Limit/Home | +|3 | X Direction | | 12 | Z Limit/Home | +|4 | Y Step | | 13 | A Limit/Home | +|5 | Y Direction | | 15 | Probe In | +|6 | Z Step | | | | +|7 | Z Direction | | | | +|8 | A Step | | | | +|9 | A Direction | | | | +|14 | Spindle CW | | | | +|16 | Spindle PWM | | | | +|17 | Amplifier Enable | | | | |============================================================================== Note any pins not used should be set to Unused in the drop down box. @@ -83,32 +82,32 @@ per user unit which is used for SCALE in the .ini file. [width="100%", options="header"] |============================================================================== |Axis | Steps/Rev. | Micro Steps | Motor Teeth | Leadscrew Teeth | Leadscrew Pitch -|X | | | | | -|Y | | | | | -|Z | | | | | -| | | | | | +|X | | | | | +|Y | | | | | +|Z | | | | | +| | | | | | |============================================================================== -* 'Steps per revolution' - is how many stepper-motor-steps it takes to turn -the stepper motor one revolution. -Typical is 200. +* 'Steps per revolution' - is how many stepper-motor-steps it takes to turn + the stepper motor one revolution. + Typical is 200. -* '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. +* '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. -* '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. +* '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. -* '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. +* '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. -The net result you're looking for is how many CNC-output-steps it takes +The net result you're looking for is how many CNC-output-steps it takes to move one user unit (inches or mm). .Units inches @@ -122,20 +121,21 @@ Leadscrew Pitch = 0.2000 inches per turn ............................................ ============================================ -From the above information, the leadscrew moves 0.200 inches per turn. - - The motor turns 2.000 times per 1 leadscrew turn. - - The drive takes 10 microstep inputs to make the stepper step once. - - The drive needs 2000 steps to turn the stepper one revolution. -So the scale needed is: +From the above information, the leadscrew moves 0.200 inches per turn. +- The motor turns 2.000 times per 1 leadscrew turn. +- The drive takes 10 microstep inputs to make the stepper step once. +- The drive needs 2000 steps to turn the stepper one revolution. + +So the scale needed is: image::images/step-calc-inch-math.png[align="center"] //////////////////////////////////////////// -latexmath:[ -\frac{200 motor steps}{1 motor rev} \times +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{2 motor revs}{1 leadscrew rev} \times +\frac{1 leadscrew revs}{0.2000 inch} = \frac{20,000 microsteps}{inch} ] /////////////////////////////////////////// @@ -144,30 +144,29 @@ latexmath:[ ............................................ Stepper = 200 steps per revolution Drive = 8 micro steps per step - Motor Teeth = 30 + Motor Teeth = 30 Leadscrew Teeth = 90 Leadscrew Pitch = 5.00 mm per turn ............................................ ============================================ -From the above information: - - The leadscrew moves 5.00 mm per turn. - - The motor turns 3.000 times per 1 leadscrew turn. - - The drive takes 8 microstep inputs to make the stepper step once. - - The drive needs 1600 steps to turn the stepper one revolution. -So the scale needed is: +From the above information: +- The leadscrew moves 5.00 mm per turn. +- The motor turns 3.000 times per 1 leadscrew turn. +- The drive takes 8 microstep inputs to make the stepper step once. +- The drive needs 1600 steps to turn the stepper one revolution. + +So the scale needed is: image::images/step-calc-mm-math.png[align="center"] ////////////////////////////////////////////// -latexmath:[ -\frac{200 motor steps}{1 motor rev} \times +latexmath:[ +\frac{200 motor steps}{1 motor rev} \times \frac{8 microsteps}{1 motor step} \times -\frac{3 motor revs}{1 leadscrew rev} \times -\frac{1 leadscrew revs}{5.000 mm} +\frac{3 motor revs}{1 leadscrew rev} \times +\frac{1 leadscrew revs}{5.000 mm} = \frac{960 microsteps}{mm} ] ///////////////////////////////////////////// // vim: set syntax=asciidoc: - - diff --git a/docs/src/config/stepper.adoc b/docs/src/config/stepper.adoc index 6699f1bc1bf..b636d6dc3c4 100644 --- a/docs/src/config/stepper.adoc +++ b/docs/src/config/stepper.adoc @@ -1,11 +1,12 @@ -[[cha:stepper-config]] +:lang: en -= Stepper Configuration +[[cha:stepper-config]] += Stepper Configuration(((Stepper Configuration))) == Introduction The preferred way to set up a standard stepper machine is with the -Step Configuration Wizard. See the +Step Configuration Wizard. See the <> Chapter. This chapter describes some of the more common settings for manually @@ -126,7 +127,7 @@ net spindle-on spindle.0.on => parport.0.pin-09-out ### ### Shared home switches all on one parallel port pin? -### that's ok, hook the same signal to all the axes, but be sure to +### that's ok, hook the same signal to all the axes, but be sure to ### set HOME_IS_SHARED and HOME_SEQUENCE in the ini file. ### @@ -160,13 +161,12 @@ guide the reader through the file. There are a couple of operations that get executed when the standard_pinout.hal gets executed/interpreted: -* The Parport driver gets loaded (see the <> - for details) +* The Parport driver gets loaded (see the <> for details) * The read & write functions of the parport driver get assigned to the - base thread footnote:[the fastest thread in the LinuxCNC setup, usually the - code gets executed every few tens of microseconds] + base thread footnote:[the fastest thread in the LinuxCNC setup, usually ther + code gets executed every few tens of microseconds] * The step & direction signals for axes X,Y,Z get linked to pins on the - parport + parport * Further I/O signals get connected (estop loopback, toolchanger loopback) * A spindle-on signal gets defined and linked to a parport pin @@ -180,14 +180,14 @@ Directions signals, all you need to do is to change the number in the 'parport.0.pin-XX-out' name: ---- -net Xstep parport.0.pin-03-out +net Xstep parport.0.pin-03-out net Xdir parport.0.pin-02-out ---- can be changed to: ---- -net Xstep parport.0.pin-02-out +net Xstep parport.0.pin-02-out net Xdir parport.0.pin-03-out ---- @@ -246,5 +246,5 @@ practice. === External ESTOP button -The standard_pinout.hal file assumes no external ESTOP button. For more +The standard_pinout.hal file assumes no external ESTOP button. For more information on an external E-Stop see the estop_latch man page. diff --git a/docs/src/drivers/AX5214H_fr.adoc b/docs/src/drivers/AX5214H_fr.adoc index 09d995b7e95..5ebf76ef909 100644 --- a/docs/src/drivers/AX5214H_fr.adoc +++ b/docs/src/drivers/AX5214H_fr.adoc @@ -1,3 +1,5 @@ +:lang: en + = AX5214H The Axiom Measurement & Control AX5214H is a 48 channel digital I/O @@ -59,4 +61,3 @@ high and turn the module OFF. - `(funct) ax5214..read` -- Reads all digital inputs on one board. - `(funct) ax5214..write` -- Writes all digital outputs on one board. - diff --git a/docs/src/drivers/ax5214h.adoc b/docs/src/drivers/ax5214h.adoc index dab5423db14..0128dac0f9e 100644 --- a/docs/src/drivers/ax5214h.adoc +++ b/docs/src/drivers/ax5214h.adoc @@ -1,5 +1,6 @@ -[[cha:ax5214-driver]] +:lang: en +[[cha:ax5214-driver]] = AX5214H Driver The Axiom Measurement & Control AX5214H is a 48 channel digital I/O @@ -63,4 +64,3 @@ high and turn the module OFF. * '(funct) ax5214..read' -- Reads all digital inputs on one board. * '(funct) ax5214..write' -- Writes all digital outputs on one board. - diff --git a/docs/src/drivers/gm.adoc b/docs/src/drivers/gm.adoc index 54db60e504f..1d351b1791a 100644 --- a/docs/src/drivers/gm.adoc +++ b/docs/src/drivers/gm.adoc @@ -1,40 +1,41 @@ -[[cha:gm-driver]] +:lang: en +[[cha:gm-driver]] = General Mechatronics Driver General Mechatronics GM6-PCI card based motion control system For detailed description, please refer to the http://www.generalmechatronics.com/data/products/robot_controller/PCI_UserManual_eng.pdf[System integration manual]. -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 +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: -* It can control up to six axis, each can be stepper or CAN bus + * It can control up to six axis, each can be stepper or CAN bus interface or analogue servo. - -* GPIO: Four time eight I/O pins are placed on standard flat cable headers. -* 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 + * GPIO: Four time eight I/O pins are placed on standard flat cable headers. + + * 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. - -* 20 optically isolated input pins: Six times three for the direct + + * 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. -image::images/GMsystem.png[align="center", scaledwidth="70%", alt="GM servo control system"] +image::images/GMsystem.png["GM servo control system",align="center",scaledwidth="70%"] Installing: ---- loadrt hal_gm ---- -During loading (or attempted loading) the driver prints some useful +During loading (or attempted loading) the driver prints some useful debugging messages to the kernel log, which can be viewed with dmesg. Up to 3 boards may be used in one system. @@ -43,14 +44,14 @@ The following connectors can be found on the GM6-PCI card: .GM6-PCI card connectors and LEDs(((pci-card connectors))) -image::images/GM_PCIpinout.png[align="center",scaledwidth="70%", alt="GM6-PCI card connectors and LEDs"] +image::images/GM_PCIpinout.png["GM6-PCI card connectors and LEDs",align="center",scaledwidth="70%"] == I/O connectors .Pin numbering of GPIO connectors(((pin-numbering-gpio))) -image::images/GM_IOpinout.png[align="center", alt="Pin numbering of GPIO connectors"] +image::images/GM_IOpinout.png["Pin numbering of GPIO connectors",align="center"] .Pinout of GPIO connectors @@ -66,22 +67,22 @@ image::images/GM_IOpinout.png[align="center", alt="Pin numbering of GPIO connect | GND | IOx/6 | IOx/4 | IOx/2 | IOx/0 |======================================== -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. +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: ---- -gm..gpio. +gm..gpio. ---- -,where is form 0 to 3. For example: +where is from 0 to 3. For example: ---- gm.0.gpio.0.in-0 ---- -indicates the state of the first pin of the first GPIO +indicates the state of the first pin of the first GPIO connector on the GM6-PCI card. Hal pins are updated by function ---- @@ -115,61 +116,61 @@ gm..read .Pin numbering of axis connectors(((pin-numbering-axis))) -image::images/GM_AXISpinout.png[align="center", alt="Pin numbering of axis connectors"] +image::images/GM_AXISpinout.png["Pin numbering of axis connectors",align="center"] .Pinout of axis connectors [width="40%", cols="^1,<4"] |======================================== -| 1 | Encoder A -| 2 | +5 Volt (PC) -| 3 | Encoder B -| 4 | Encoder Index -| 5 | Fault -| 6 | Power Enabled -| 7 | Step/CCW/B -| 8 | Direction/CW/A -| 9 | Ground (PC) +| 1 | Encoder A +| 2 | +5 Volt (PC) +| 3 | Encoder B +| 4 | Encoder Index +| 5 | Fault +| 6 | Power Enabled +| 7 | Step/CCW/B +| 8 | Direction/CW/A +| 9 | Ground (PC) | 10 | DAC serial line |======================================== === Axis interface modules -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 +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. -For evaluating the appropriate servo-drive structure the modules +For evaluating the appropriate servo-drive structure the modules have to be connected as the following block diagram shows: .Servo axis interfaces(((axis-iterface))) -image::images/GM_AxisInterface.png[align="center", scaledwidth="100%", alt="Servo axis interfaces"] +image::images/GM_AxisInterface.png["Servo axis interfaces",align="center",scaledwidth="100%"] === Encoder -The GM6-PCI motion control card has six encoder modules. +The GM6-PCI motion control card has six encoder modules. Each encoder module has three channels: -* Channel-A -* Channel-B -* Channel-I (index) + * Channel-A + * Channel-B + * Channel-I (index) -It is able to count quadrature encoder signals or step/dir signals. -Each encoder module is connected to the inputs of the corresponding +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. Every encoder pin and parameter name begins as follows: ---- -gm..encoder. +gm..encoder. ---- -,where is form 0 to 5. For example: +where is from 0 to 5. For example: ---- gm.0.encoder.0.position @@ -177,7 +178,7 @@ gm.0.encoder.0.position refers to the position of encoder module of axis 0. -The GM6-PCI card counts the encoder signal independently from LinuxCNC. +The GM6-PCI card counts the encoder signal independently from LinuxCNC. Hal pins are updated by function: ---- @@ -195,17 +196,17 @@ gm..read | .rawcounts | (s32, Out) | The raw count is the counts, but unaffected by reset or the index pulse. | .counts | (s32, Out) | Position in encoder counts. | .position | (float, Out) | Position in scaled units (=.counts/.position-scale). -| .index-enabled | (bit, IO) | When True, counts and position are rounded or reset - (depends on index-mode) on next rising edge of channel-I. - Every time position is reset because of Index, index-enabled - pin is set to 0 and remain 0 until connected hal pin does - not set it. -| .velocity | (float, Out) | Velocity in scaled units per second. GM encoder uses high - frequency hardware timer to measure time between encoder - pulses in order to calculate velocity. It greatly reduces - quantization noise as compared to simply differentiating - the position output. When the measured velocity is below - min-speed-estimate, the velocity output is 0. +| .index-enabled | (bit, IO) | When True, counts and position are rounded or reset + (depends on index-mode) on next rising edge of channel-I. + Every time position is reset because of Index, index-enabled + pin is set to 0 and remain 0 until connected hal pin does + not set it. +| .velocity | (float, Out) | Velocity in scaled units per second. GM encoder uses high + frequency hardware timer to measure time between encoder + pulses in order to calculate velocity. It greatly reduces + quantization noise as compared to simply differentiating + the position output. When the measured velocity is below + min-speed-estimate, the velocity output is 0. |======================================== .Parameters @@ -215,35 +216,35 @@ gm..read [width="80%", options="header", cols="<3,^2,<6"] |======================================== | Parameters | Type and Read/Write | Parameter description -| .counter-mode | (bit, R/W) | When True, the counter counts each rising edge of the - channel-A input to the direction determined by channel-B. - This is useful for counting the output of a single channel - (non-quadrature) or step/dir signal sensor. When false, it - counts in quadrature mode. -| .index-mode | (bit, R/W) | When True and .index-enabled is also true, .counts and - .position are rounded (based on .counts-per-rev) at rising - edge of channel-I. This is useful to correct few pulses - error caused by noise. In round mode, it is essential to - set .counts-per-rev parameter correctly. When .index-mode - is False and .index-enabled is true, .counts and .position - are reset at channel-I pulse. -| .counts-per-rev | (s32, R/V) | Determine how many counts are between two index pulses. It - is used only in round mode, so when both .index-enabled and - .index-mode parameters are True. GM encoder process encoder signal - in 4x mode, so for example in case of a 500 CPR encoder it should - be set to 2000. This parameter can be easily measured by setting - .index-enabled True and .index-mode False (so that .counts resets - at channel-I pulse), than move axis by hand and see the maximum - magnitude of .counts pin in halmeter. -| .index-invert | (bit, R/W) | When True, channel-I event (reset or round) occur on falling +| .counter-mode | (bit, R/W) | When True, the counter counts each rising edge of the + channel-A input to the direction determined by channel-B. + This is useful for counting the output of a single channel + (non-quadrature) or step/dir signal sensor. When false, it + counts in quadrature mode. +| .index-mode | (bit, R/W) | When True and .index-enabled is also true, .counts and + .position are rounded (based on .counts-per-rev) at rising + edge of channel-I. This is useful to correct few pulses + error caused by noise. In round mode, it is essential to + set .counts-per-rev parameter correctly. When .index-mode + is False and .index-enabled is true, .counts and .position + are reset at channel-I pulse. +| .counts-per-rev | (s32, R/V) | Determine how many counts are between two index pulses. It + is used only in round mode, so when both .index-enabled and + .index-mode parameters are True. GM encoder process encoder signal + in 4x mode, so for example in case of a 500 CPR encoder it should + be set to 2000. This parameter can be easily measured by setting + .index-enabled True and .index-mode False (so that .counts resets + at channel-I pulse), than move axis by hand and see the maximum + magnitude of .counts pin in halmeter. +| .index-invert | (bit, R/W) | When True, channel-I event (reset or round) occur on falling edge of channel-I signal, otherwise on rising edge. -| .min-speed-estimate | (float, R/W) | Determine the minimum measured velocity magnitude at which - .velocity will be set as nonzero. Setting this parameter too - low will cause it to take a long time for velocity to go to zero - after encoder pulses have stopped arriving. -| .position-scale | (float, R/W) | Scale in counts per length unit. .position=.counts/.position-scale. - For example, if position-scale is 2000, then 1000 counts of the - encoder will produce a position of 0.5 units. +| .min-speed-estimate | (float, R/W) | Determine the minimum measured velocity magnitude at which + .velocity will be set as nonzero. Setting this parameter too + low will cause it to take a long time for velocity to go to zero + after encoder pulses have stopped arriving. +| .position-scale | (float, R/W) | Scale in counts per length unit. .position=.counts/.position-scale. + For example, if position-scale is 2000, then 1000 counts of the + encoder will produce a position of 0.5 units. |======================================== .HAL example @@ -256,7 +257,7 @@ setp gm.0.encoder.0.index-mode 1 # 0: reset pos at index, 1:round pos setp gm.0.encoder.0.counts-per-rev 2000 # GM process encoder in 4x mode, 4x500=2000 setp gm.0.encoder.0.index-invert 0 setp gm.0.encoder.0.min-speed-estimate 0.1 # in position unit/s -setp gm.0.encoder.0.position-scale 20000 # 10 encoder rev cause the machine to +setp gm.0.encoder.0.position-scale 20000 # 10 encoder rev cause the machine to move one position unit (10x2000) ---- @@ -269,17 +270,17 @@ net Xpos-fb gm.0.encoder.0.position => joint.0.motor-pos-fb === Stepgen module 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 +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. Every stepgen pin and parameter name begins as follows: ---- -gm..stepgen. +gm..stepgen. ---- -,where nr of axis is form 0 to 5. For example: +where nr of axis is from 0 to 5. For example: ---- gm.0.stepgen.0.position-cmd @@ -287,7 +288,7 @@ gm.0.stepgen.0.position-cmd refers to the position command of stepgen module of axis 0 on card 0. -The GM6-PCI card generates step pulses independently from LinuxCNC. +The GM6-PCI card generates step pulses independently from LinuxCNC. Hal pins are updated by function ---- @@ -317,17 +318,17 @@ gm..write [width="80%", options="header", cols="<3,^2,<6"] |======================================== | Parameters | Type and Read/Write | Parameter description -| .step-type | (u32, R/W) | When 0, module produces Step/Dir signal. When 1, it - produces Up/Down step signals. And when it is 2, it +| .step-type | (u32, R/W) | When 0, module produces Step/Dir signal. When 1, it + produces Up/Down step signals. And when it is 2, it produces quadrature output signals. -| .control-type | (bit, R/W) | When True, .velocity-cmd is used as reference and velocity - control calculate pulse rate output. When False, .position-cmd +| .control-type | (bit, R/W) | When True, .velocity-cmd is used as reference and velocity + control calculate pulse rate output. When False, .position-cmd is used as reference and position control calculate pulse rate output. | .invert-step1 | (bit, R/W) | Invert the output of channel 1 (Step signal in StepDir mode) | .invert-step2 | (bit, R/W) | Invert the output of channel 2 (Dir signal in StepDir mode) -| .maxvel | (float, R/W) | Maximum velocity in position units per second. If it is set to 0.0, +| .maxvel | (float, R/W) | Maximum velocity in position units per second. If it is set to 0.0, .maxvel parameter is ignored. -| .maxaccel | (float, R/W) | Maximum acceleration in position units per second squared. If +| .maxaccel | (float, R/W) | Maximum acceleration in position units per second squared. If it is set to 0.0, .maxaccel parameter is ignored. | .position-scale | (float, R/W) | Scale in steps per length unit. | .steplen | (u32, R/W) | Length of step pulse in nano-seconds. @@ -341,7 +342,7 @@ For evaluating the appropriate values see the timing diagrams below: .Reference signal timing diagrams(((refsig-timing-diagram))) -image::images/GM_RefSignals.png[align="center", scaledwidth="70%", alt="Reference signal timing diagrams"] +image::images/GM_RefSignals.png["Reference signal timing diagrams",align="center", scaledwidth="70%"] .HAL example @@ -352,9 +353,9 @@ setp gm.0.stepgen.0.step-type 0 # 0:stepDir, 1:UpDown, 2:Quad setp gm.0.stepgen.0.control-type 0 # 0:Pos. control, 1:Vel. Control setp gm.0.stepgen.0.invert-step1 0 setp gm.0.stepgen.0.invert-step2 0 -setp gm.0.stepgen.0.maxvel 0 # do not set maxvel for step +setp gm.0.stepgen.0.maxvel 0 # do not set maxvel for step # generator, let interpolator control it. -setp gm.0.stepgen.0.maxaccel 0 # do not set max acceleration for +setp gm.0.stepgen.0.maxaccel 0 # do not set max acceleration for # step generator, let interpolator control it. setp gm.0.stepgen.0.position-scale 1000 # 1000 step/position unit setp gm.0.stepgen.0.steplen 1000 # 1000 ns = 1 us @@ -371,8 +372,8 @@ net Xen joint.0.amp-enable-out => gm.0.stepgen.0.enable === Enable and Fault signals -The GM6-PCI motion control card has one enable output and one fault -input HAL pins, both are connected to each RJ50 axis connector +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. Hal pins are updated by function: @@ -392,23 +393,23 @@ gm..read * and Watch Dog Timer is not expired * and there is no power fault - Then power enable pins of axis- and CAN connectors - are set to high, otherwise set to low. + Then power enable pins of axis- and CAN connectors + are set to high, otherwise set to low. | gm..power-fault | (bit, Out) | Power fault input. |======================================== === Axis DAC -The GM6-PCI motion control card has six serial axis DAC driver modules, +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: ---- -gm..dac. +gm..dac. ---- -,where nr of axis is form 0 to 5. For example: +where nr of axis is from 0 to 5. For example: ---- gm.0.dac.0.value @@ -430,9 +431,9 @@ gm..write [width="80%", options="header", cols="<3,^2,<6"] |======================================== | Pins | Type and direction | Pin description -| .enable | (bit, In) | Enable DAC output. When enable is +| .enable | (bit, In) | Enable DAC output. When enable is false, DAC output is 0.0 V. -| .value | (float, In) | Value of DAC output in Volts. +| .value | (float, In) | Value of DAC output in Volts. |======================================== .Parameters @@ -442,47 +443,47 @@ gm..write [width="80%", options="header", cols="<3,^2,<6"] |======================================== | Parameters | Type and direction | Parameter description -| .offset | (float, R/W) | Offset is added to the value before +| .offset | (float, R/W) | Offset is added to the value before the hardware is updated -| .high-limit | (float, R/W) | Maximum output voltage of the +| .high-limit | (float, R/W) | Maximum output voltage of the hardware in volts. -| .low-limit | (float, R/W) | Minimum output voltage of the +| .low-limit | (float, R/W) | Minimum output voltage of the hardware in volts. -| .invert-serial | (float, R/W) | GM6-PCI card is communicating with DAC - hardware via fast serial communication - to highly reduce time delay compared to - PWM. DAC module is recommended to be - isolated which is negating serial - communication line. In case of isolation, - leave this parameter to default (0), - while in case of none-isolation, set - this parameter to 1. +| .invert-serial | (float, R/W) | GM6-PCI card is communicating with DAC + hardware via fast serial communication + to highly reduce time delay compared to + PWM. DAC module is recommended to be + isolated which is negating serial + communication line. In case of isolation, + leave this parameter to default (0), + while in case of none-isolation, set + this parameter to 1. |======================================== == CAN-bus servo amplifiers -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 +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. -The frames are standard (11 bit) ID frames, with 4 byte data length. +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. -These configuration can be changed with the modifivation +These configuration can be changed with the modifivation of hal_gm.c and recompiling LinuxCNC. Every CAN pin and parameter name begins as follows: ---- -gm..can-gm. +gm..can-gm. ---- -,where is form 0 to 5. For example: +where is from 0 to 5. For example: ---- gm.0.can-gm.0.position @@ -547,25 +548,25 @@ Watchdog timer overrun causes the set of power-enable to low in hardware. [width="80%", options="header", cols="<3,^2,<6"] |======================================== | Parameters | Type and direction | Parameter description -| gm..watchdog-enable | (bit, R/W) | Enable watchdog timer. - It is strongly recommended to - enable watchdog timer, because - it can disables all the servo - amplifiers by pulling down all - enable signal in case of PC error. -| gm..watchdog-timeout-ns | (float, R/W) | Time interval in within the - gm..read function - must be executed. The gm..read - is typically added to servo-thread, so - watch timeout is typically set to 3 times - of the servo period. +| gm..watchdog-enable | (bit, R/W) | Enable watchdog timer. + It is strongly recommended to + enable watchdog timer, because + it can disables all the servo + amplifiers by pulling down all + enable signal in case of PC error. +| gm..watchdog-timeout-ns | (float, R/W) | Time interval in within the + gm..read function + must be executed. The gm..read + is typically added to servo-thread, so + watch timeout is typically set to 3 times + of the servo period. |======================================== == End-, homing- and E-stop switches .Pin numbering of homing & end switch connector(((pin-numbering-endsw))) -image::images/GM_ENDSWpinout.png[align="center", alt="Pin numbering of homing and end switch connector"] +image::images/GM_ENDSWpinout.png["Pin numbering of homing and end switch connector",align="center"] .End- and homing switch connector pinout @@ -584,10 +585,10 @@ image::images/GM_ENDSWpinout.png[align="center", alt="Pin numbering of homing an 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: ---- -gm..joint. +gm..joint. ---- -,where nr of axis is form 0 to 5. For example: +where nr of axis is from 0 to 5. For example: ---- gm.0.joint.0.home-sw-in @@ -634,73 +635,73 @@ gm..read === CAN Color: Orange -* Blink, during data communication. -* On, when any of the buffers are full - communication error. -* Off, when no data communication. + * Blink, during data communication. + * On, when any of the buffers are full - communication error. + * Off, when no data communication. === RS485 Color: Orange -* Blink, during initialization of modules on the bus -* On, when the data communication is up between all initialized modules. -* Off, when any of the initialized modules dropped off because of an error. + * Blink, during initialization of modules on the bus + * On, when the data communication is up between all initialized modules. + * Off, when any of the initialized modules dropped off because of an error. === EMC Color: White -* Blink, when LinuxCNC is running. -* Otherwise off. + * Blink, when LinuxCNC is running. + * Otherwise off. === Boot Color: Green -* On, when system booted successfully. -* Otherwise off. + * On, when system booted successfully. + * Otherwise off. === Error Color: Red -* Off, when there is no fault in the system. -* Blink, when PCI communication error. -* On, when watchdog timer overflowed. + * Off, when there is no fault in the system. + * Blink, when PCI communication error. + * On, when watchdog timer overflowed. == RS485 I/O expander modules -These modules were developed for expanding the I/O and function +These modules were developed for expanding the I/O and function capability along an RS485 line of the GM6-PCI motion control card. Available module types: -* 8-channel relay output module - gives eight NO-NC relay output + * 8-channel relay output module - gives eight NO-NC relay output on a three pole terminal connector for each channel. -* 8-channel digital input module - gives eight optical + * 8-channel digital input module - gives eight optical isolated digital input pins. -* 8 channel ADC and 4-channel DAC module - gives four digital-to-analogue - converter outputs and eight analogue-to-digital inputs. + * 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. *Automatic node recognizing:* -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 +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. *Fault handling:* 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 +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. *Connecting the nodes:* -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 +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. .Connecting the RS485 nodes to the GM6-PCI card(((connecting-rs485))) -image::images/GM_RS485topology.png[align="center", scaledwidth="60%", alt="Connecting the RS485 nodes to the GM6-PCI card"] +image::images/GM_RS485topology.png["Connecting the RS485 nodes to the GM6-PCI card",align="center",scaledwidth="60%"] *Addressing:* @@ -710,9 +711,9 @@ Each node on the bus has a 4 bit unique address that can be set with a red DIP s A green LED indicates the status of the module: -* Blink, when the module is only powered, but not jet identified, or when module is dropped down. -* Off, during identification (computer is on, but LinuxCNC not started) -* On, when it communicates continuously. + * Blink, when the module is only powered, but not jet identified, or when module is dropped down. + * Off, during identification (computer is on, but LinuxCNC not started) + * On, when it communicates continuously. === Relay output module @@ -723,18 +724,18 @@ http://www.generalmechatronics.com/data/products/robot_controller/PCI_UserManual All the pins and parameters are updated by the following function: ---- -gm..rs485 +gm..rs485 ---- -It should be added to servo thread or other thread with +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: ---- -gm..rs485. +gm..rs485. ---- -,where is form 00 to 15. +where is from 00 to 15. .Pins @@ -773,17 +774,17 @@ http://www.generalmechatronics.com/data/products/robot_controller/PCI_UserManual All the pins and parameters are updated by the following function: ---- -gm..rs485 +gm..rs485 ---- 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: ---- -gm..rs485. +gm..rs485. ---- -,where is form 00 to 15. +where is from 00 to 15. .Pins @@ -813,17 +814,17 @@ http://www.generalmechatronics.com/data/products/robot_controller/PCI_UserManual All the pins and parameters are updated by the following function: ---- -gm..rs485 +gm..rs485 ---- 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: ---- -gm..rs485. +gm..rs485. ---- -,where is form 00 to 15. +where is from 00 to 15. .Pins @@ -833,7 +834,7 @@ gm..rs485. |======================================== | Pins | Type and direction | Pin description | .adc-<0-7> | (float, Out) | Value of ADC input in Volts. -| .dac-enable-<0-3> | (bit, In) | Enable DAC output. When enable is +| .dac-enable-<0-3> | (bit, In) | Enable DAC output. When enable is false DAC output is set to 0.0 V. | .dac-<0-3> | (float, In) | Value of DAC output in Volts. |======================================== @@ -845,13 +846,13 @@ gm..rs485. [width="80%", options="header", cols="<3,^2,<6"] |======================================== | Parameters | Type and direction | Parameter description -| .adc-scale-<0-7> | (float, R/W) | The input voltage will be multiplied by +| .adc-scale-<0-7> | (float, R/W) | The input voltage will be multiplied by scale before being output to .adc- pin. -| .adc-offset-<0-7> | (float, R/W) | Offset is subtracted from the hardware input +| .adc-offset-<0-7> | (float, R/W) | Offset is subtracted from the hardware input voltage after the scale multiplier has been applied. | .dac-offset-<0-3> | (float, R/W) | Offset is added to the value before the hardware is updated. | .dac-high-limit-<0-3> | (float, R/W) | Maximum output voltage of the hardware in volts. -| .dac-low-limit-<0-3> | (float, R/W) | Minimum output voltage of the hardware in volts. +| .dac-low-limit-<0-3> | (float, R/W) | Minimum output voltage of the hardware in volts. |======================================== .HAL example @@ -871,17 +872,19 @@ http://www.generalmechatronics.com/data/products/robot_controller/PCI_UserManual All the pins and parameters are updated by the following function: ---- -gm..rs485 +gm..rs485 ---- 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: ---- -gm..rs485. +gm..rs485. ---- -,where is form 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. +where 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. .Pins @@ -906,10 +909,8 @@ gm..rs485. [width="80%", options="header", cols="<3,^2,<6"] |======================================== | Parameters | Type and direction | Parameter description -| .adc-scale-<0-5> | (float, R/W) | The input voltage will be multiplied by - scale before being output to .adc- pin. -| .adc-offset-<0-5> | (float, R/W) | Offset is subtracted from the hardware input - voltage after the scale multiplier has been applied. +| .adc-scale-<0-5> | (float, R/W) | The input voltage will be multiplied by scale before being output to .adc- pin. +| .adc-offset-<0-5> | (float, R/W) | Offset is subtracted from the hardware input voltage after the scale multiplier has been applied. | .enc-position-scale | (float, R/W) | Scale in per length unit. |======================================== @@ -930,13 +931,13 @@ The revision number in this section refers to the revision of the GM6-PCI card d .Rev. 1.2 -* Error: -The PCI card do not boot, when Axis 1. END B switch is active (low). -Found on November 16, 2013. +* Error: + The PCI card do not boot, when Axis 1. END B switch is active (low). + Found on November 16, 2013. -* Reason: -This switch is connected to a boot setting pin of FPGA +* Reason: + This switch is connected to a boot setting pin of FPGA -* Problem fix/workaround: -Use other switch pin, or connect only normally open switch to this switch input pin. +* Problem fix/workaround: + Use other switch pin, or connect only normally open switch to this switch input pin. diff --git a/docs/src/drivers/gs2.adoc b/docs/src/drivers/gs2.adoc index a807fccfc21..beb8890b078 100644 --- a/docs/src/drivers/gs2.adoc +++ b/docs/src/drivers/gs2.adoc @@ -1,9 +1,10 @@ -[[cha:gs2-vfd-driver]] +:lang: en +[[cha:gs2-vfd-driver]] = GS2 VFD Driver This is a userspace HAL program for the GS2 series of VFD's at -Automation Direct. +Automation Direct. footnote:[En Europe on trouve l'équivalent sous la marque Omron.] This component is loaded using the halcmd "loadusr" command: ---- @@ -11,43 +12,42 @@ loadusr -Wn spindle-vfd gs2_vfd -n spindle-vfd ---- The above command says: loadusr, wait for named to load, -component gs2_vfd, named spindle-vfd +component gs2_vfd, named spindle-vfd. +FIXME from French: La commande de HAL _loadusr_ est détaillée au +chapitre: <>. == Command Line Options -* '-b or --bits ' (default 8) Set number of data bits to , where n + * '-b' or '--bits ' (default 8) Set number of data bits to , where n must be from 5 to 8 inclusive -* '-d or --device ' (default /dev/ttyS0) Set the name of the serial + * '-d' or '--device ' (default /dev/ttyS0) Set the name of the serial device node to use -* '-g or --debug' Turn on debugging messages. This will also set the + * '-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. -* '-n or --name ' (default gs2_vfd) Set the name of the HAL + * '-n' or '--name ' (default gs2_vfd) Set the name of the HAL module. The HAL comp name will be set to , and all pin and parameter names will begin with . -* '-p or --parity {even,odd,none}' (default odd) Set serial parity to + * '-p' or '--parity {even,odd,none}' (default odd) Set serial parity to even, odd, or none. -* '-r or --rate ' (default 38400) Set baud rate to . It is an error + * '-r' or '--rate ' (default 38400) Set baud rate to . It is an error if the rate is not one of the following: 110, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 -* '-s or --stopbits {1,2}' (default 1) Set serial stop bits to 1 or 2 -* '-t or --target ' (default 1) Set MODBUS target (slave) number. This + * '-s' or '--stopbits {1,2}' (default 1) Set serial stop bits to 1 or 2 + * '-t' or '--target ' (default 1) Set MODBUS target (slave) number. This must match the device number you set on the GS2. -* '-v or --verbose' Turn on debug messages. - -* '-A or --accel-seconds' (default 10.0) Seconds to accelerate the spindle - from 0 to Max RPM. - -* '-D or --decel-seconds' (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. - -* '-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. + * '-v' or '--verbose' Turn on debug messages. + * '-A' or '--accel-seconds' (default 10.0) Seconds to accelerate the spindle + from 0 to Max RPM. + * '-D' or '--decel-seconds' (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. + * '-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. [NOTE] That if there are serial configuration errors, turning on verbose @@ -71,14 +71,13 @@ Where is gs2_vfd or the name given during loading with the -n option. * '.power-factor' (float, out) from the VFD * '.scale-frequency' (float, out) from the VFD * '.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 + It is an error to send a speed faster than the Motor Max RPM as set in + the VFD * '.spindle-fwd' (bit, in) 1 for FWD and 0 for REV sent to VFD * '.spindle-rev' (bit, in) 1 for REV and 0 if off * '.spindle-on' (bit, in) 1 for ON and 0 for OFF sent to VFD * '.status-1' (s32, out) Drive Status of the VFD (see the GS2 manual) -* '.status-2' (s32, out) Drive Status of the VFD (see the GS2 - manual) +* '.status-2' (s32, out) Drive Status of the VFD (see the GS2 manual) [NOTE] The status value is a sum of all the bits that are on. So a 163 @@ -97,7 +96,7 @@ Where is gs2_vfd or the name given during loading with the -n option. * '.tolerance' (s32, RW) speed tolerance (default 0.01) * '.ack-delay' (s32, RW) number of read/write cycles before checking at-speed (default 2) - + For an example of using this component to drive a spindle see the <> example. diff --git a/docs/src/drivers/hostmot2.adoc b/docs/src/drivers/hostmot2.adoc index 8a2718087de..bc30d3c4c6b 100644 --- a/docs/src/drivers/hostmot2.adoc +++ b/docs/src/drivers/hostmot2.adoc @@ -1,6 +1,7 @@ -= Mesa HostMot2 Driver +:lang: en [[cha:mesa-hostmot2-driver]] += Mesa HostMot2 Driver == Introduction @@ -102,34 +103,28 @@ exported: === Pins: -* '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. + * '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. === Parameters: -* '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. + * '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. == HostMot2 Functions -* 'hm2_..read' - - Read all inputs, update input HAL pins. + * 'hm2_..read' - Read all inputs, update input HAL pins. -* 'hm2_..write' - - Write all outputs. + * 'hm2_..write' - Write all outputs. -* 'hm2_..read_gpio' - - Read the GPIO input pins only. (This function - is not available on the 7i43 due to limitations of the EPP bus.) + * 'hm2_..read_gpio' - Read the GPIO input pins only. + (This function is not available on the 7i43 due to limitations of the EPP bus.) -* 'hm2_..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.) + * 'hm2_..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.) [NOTE] ===================================================================== @@ -247,8 +242,8 @@ 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. -.5i20 HAL Pins[[cap:5i20-HAL-Pins]] - +[[cap:5i20-HAL-Pins]] +.5i20 HAL Pins image::images/5i20-halpins.png[alt="5i20 HAL Pins"] == Configurations @@ -404,58 +399,50 @@ GPIO pins default to input. === Pins -* '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. + * '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. -* '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. + * '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. -* 'out' - - (Bit, In) Value to be written (possibly inverted) to the hardware - output pin. Only full GPIO pins have this pin. + * 'out' - (Bit, In) Value to be written (possibly inverted) to the hardware output pin. + Only full GPIO pins have this pin. === Parameters -* '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. - -* '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. - -* '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. + * '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. + + * '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. + + * '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. == StepGen -Stepgens have names like -'hm2_..stepgen..'. 'Instance' is a -two-digit number that corresponds to the HostMot2 stepgen instance -number. There are 'num_stepgens' instances, starting with 00. +Stepgens have names like 'hm2_..stepgen..'. +'Instance' is a two-digit number that corresponds to the HostMot2 stepgen instance number. +There are 'num_stepgens' instances, starting with 00. Each stepgen allocates 2-6 I/O pins (selected at firmware compile time), but currently only uses two: Step and Direction outputs.footnote:[At @@ -472,67 +459,45 @@ Each stepgen instance has the following pins and parameters: === Pins -* 'control-type' - - (Bit, In) Switches between position control mode (0) and velocity - control mode (1). Defaults to position control (0). + * 'control-type' - (Bit, In) Switches between position control mode (0) and velocity control mode (1). + Defaults to position control (0). -* 'counts' - - (s32, Out) Feedback position in counts (number of steps). + * 'counts' - (s32, Out) Feedback position in counts (number of steps). -* 'enable' - - (Bit, In) Enables output steps. When false, no steps are generated. + * 'enable' - (Bit, In) Enables output steps. When false, no steps are generated. -* 'position-cmd' - - (Float, In) Target position of stepper motion, in user-defined - position units. + * 'position-cmd' - (Float, In) Target position of stepper motion, in user-defined position units. -* 'position-fb' - - (Float, Out) Feedback position in user-defined position units (counts - / position_scale). + * 'position-fb' - (Float, Out) Feedback position in user-defined position units (counts / position_scale). -* '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). + * '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). -* 'velocity-fb' - - (Float, Out) Feedback velocity in user-defined position units per - second. + * 'velocity-fb' - (Float, Out) Feedback velocity in user-defined position units per second. === Parameters -* 'dirhold' - - (u32, RW) Minimum duration of stable Direction signal after a step - ends, in nanoseconds. + * 'dirhold' - (u32, RW) Minimum duration of stable Direction signal after a step ends, in nanoseconds. -* 'dirsetup' - - (u32, RW) Minimum duration of stable Direction signal before a step - begins, in nanoseconds. + * 'dirsetup' - (u32, RW) Minimum duration of stable Direction signal before a step begins, in nanoseconds. -* 'maxaccel' - - (Float, RW) Maximum acceleration, in position units per second per - second. If set to 0, the driver will not limit its acceleration. + * 'maxaccel' - (Float, RW) Maximum acceleration, in position units per second per second. + If set to 0, the driver will not limit its acceleration. -* '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). + * '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). -* 'position-scale' - - (Float, RW) Converts from counts to position units. position = counts - / position_scale + * 'position-scale' - (Float, RW) Converts from counts to position units. position = counts / position_scale -* '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. + * '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. -* 'steplen' - - (u32, RW) Duration of the step signal, in nanoseconds. + * 'steplen' - (u32, RW) Duration of the step signal, in nanoseconds. -* 'stepspace' - - (u32, RW) Minimum interval between step signals, in nanoseconds. + * 'stepspace' - (u32, RW) Minimum interval between step signals, in nanoseconds. === Output Parameters @@ -540,22 +505,20 @@ 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. -* '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. - -* '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. + * '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. + + * '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. == PWMGen @@ -577,50 +540,42 @@ component. Each pwmgen instance has the following pins and parameters: === Pins -* '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. + * '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. -* 'value' - - (Float, In) The current pwmgen command value, in arbitrary units. + * 'value' - (Float, In) The current pwmgen command value, in arbitrary units. === Parameters -* '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'). - -* '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. - -* '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 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 100 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 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. - -* '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 + * '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'). + + * '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. + + * '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 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 100 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 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. + + * '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 Hz up to 193 KHz. Note that the max frequency is determined by the ClockHigh frequency of the Anything I/O board; the 5i20 and 7i43 both @@ -636,13 +591,11 @@ component. Each pwmgen instance has the following pins and parameters: 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. -* 'invert_output' - - (Bit, RW) This parameter only has an effect if the 'is_output' + * '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. -* 'is_opendrain' - - (Bit, RW) If this parameter is false, the GPIO behaves as a normal + * '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' @@ -673,76 +626,63 @@ following pins and parameters: === Pins -* 'count' - - (s32, Out) Number of encoder counts since the previous reset. + * 'count' - (s32, Out) Number of encoder counts since the previous reset. -* '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. + * '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. -* 'position' - - (Float, Out) Encoder position in position units (count / scale). + * 'position' - (Float, Out) Encoder position in position units (count / scale). -* 'rawcounts' - - (s32, Out) Total number of encoder counts since the start, not - adjusted for index or reset. + * 'rawcounts' - (s32, Out) Total number of encoder counts since the start, not adjusted for index or reset. -* '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. + * '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. -* 'velocity' - - (Float, Out) Estimated encoder velocity in position units per second. + * 'velocity' - (Float, Out) Estimated encoder velocity in position units per second. === Parameters -* '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. - -* '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 MHz on the PCI Anything I/O cards and 50 MHz - on the 7i43. - -* '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. - -* '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). - -* '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. - -* '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 revelution as it only uses the - rising edge of A and direction is B. - -* '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. + * '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. + + * '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 MHz on the PCI Anything I/O cards and 50 MHz + on the 7i43. + + * '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. + + * '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). + + * '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. + + * '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 revelution as it only uses the + rising edge of A and direction is B. + + * '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. == 5i25 Configuration @@ -825,3 +765,4 @@ 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. + diff --git a/docs/src/drivers/hostmot2_fr.adoc b/docs/src/drivers/hostmot2_fr.adoc index 4de187211d3..129a5b6d25f 100644 --- a/docs/src/drivers/hostmot2_fr.adoc +++ b/docs/src/drivers/hostmot2_fr.adoc @@ -1,6 +1,8 @@ +:lang: en + = Mesa HostMot2 -== Introduction +== Introduction HostMot2 is an FPGA configuration developed by Mesa Electronics for their line of "Anything I/O" motion control cards. The firmware is open @@ -24,16 +26,16 @@ hostmot2-firmware distribution for up-to-date firmware lists.) * 5i22 (96 I/O pins): using hm2_pci module - 16-channel servo - - 8-channel servo plus 24 step/dir generators + - 8-channel servo plus 24 step/dir generators * 5i20, 5i23, 4i65, 4i68 (72 I/O pins): using hm2_pci module - 12-channel servo - 8-channel servo plus 4 step/dir generators - - 4-channel servo plus 8 step/dir generators + - 4-channel servo plus 8 step/dir generators * 7i43 (48 I/O pins): using hm2_7i43 module - 8-channel servo (8 PWM generators & 8 encoders) - - 4-channel servo plus 4 step/dir generators + - 4-channel servo plus 4 step/dir generators == Installing Firmware @@ -51,7 +53,7 @@ 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: - loadrt hostmot2 + loadrt hostmot2 See the hostmot2(9) man page for details. @@ -114,25 +116,25 @@ hm2_..pet-watchdog:: Pet the watchdog to keep it from biting us for a while. hm2_..read_gpio:: - Read the GPIO input pins only. (This function + Read the GPIO input pins only. (This function is not available on the 7i43 due to limitations of the EPP bus.) hm2_..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.) + Write the GPIO control registers and output pins only. (This function + is not available on the 7i43 due to limitations of the EPP bus.) [NOTE] ===================================================================== -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. - -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. +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. + +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. ===================================================================== == Pinouts @@ -164,44 +166,48 @@ your configuration. An example of a 5i20 configuration: - [HOSTMOT2] - DRIVER=hm2_pci - BOARD=5i20 - CONFIG="firmware=hm2/5i20/SVST8_4.BIT num_encoders=1 num_pwmgens=1 num_stepgens=3" +---- +[HOSTMOT2] +DRIVER=hm2_pci +BOARD=5i20 +CONFIG="firmware=hm2/5i20/SVST8_4.BIT num_encoders=1 num_pwmgens=1 num_stepgens=3" +---- The above configuration produced this printout. - [ 1141.053386] hm2/hm2_5i20.0: 72 I/O Pins used: - [ 1141.053394] hm2/hm2_5i20.0: IO Pin 000 (P2-01): IOPort - [ 1141.053397] hm2/hm2_5i20.0: IO Pin 001 (P2-03): IOPort - [ 1141.053401] hm2/hm2_5i20.0: IO Pin 002 (P2-05): Encoder #0, pin B (Input) - [ 1141.053405] hm2/hm2_5i20.0: IO Pin 003 (P2-07): Encoder #0, pin A (Input) - [ 1141.053408] hm2/hm2_5i20.0: IO Pin 004 (P2-09): IOPort - [ 1141.053411] hm2/hm2_5i20.0: IO Pin 005 (P2-11): Encoder #0, pin Index (Input) - [ 1141.053415] hm2/hm2_5i20.0: IO Pin 006 (P2-13): IOPort - [ 1141.053418] hm2/hm2_5i20.0: IO Pin 007 (P2-15): PWMGen #0, pin Out0 - (PWM or Up) (Output) - [ 1141.053422] hm2/hm2_5i20.0: IO Pin 008 (P2-17): IOPort - [ 1141.053425] hm2/hm2_5i20.0: IO Pin 009 (P2-19): PWMGen #0, pin Out1 - (Dir or Down) (Output) - [ 1141.053429] hm2/hm2_5i20.0: IO Pin 010 (P2-21): IOPort - [ 1141.053432] hm2/hm2_5i20.0: IO Pin 011 (P2-23): PWMGen #0, pin - Not-Enable (Output) - ... - [ 1141.053589] hm2/hm2_5i20.0: IO Pin 060 (P4-25): StepGen #2, pin Step (Output) - [ 1141.053593] hm2/hm2_5i20.0: IO Pin 061 (P4-27): StepGen #2, pin Direction (Output) - [ 1141.053597] hm2/hm2_5i20.0: IO Pin 062 (P4-29): StepGen #2, pin (unused) (Output) - [ 1141.053601] hm2/hm2_5i20.0: IO Pin 063 (P4-31): StepGen #2, pin (unused) (Output) - [ 1141.053605] hm2/hm2_5i20.0: IO Pin 064 (P4-33): StepGen #2, pin (unused) (Output) - [ 1141.053609] hm2/hm2_5i20.0: IO Pin 065 (P4-35): StepGen #2, pin (unused) (Output) - [ 1141.053613] hm2/hm2_5i20.0: IO Pin 066 (P4-37): IOPort - [ 1141.053616] hm2/hm2_5i20.0: IO Pin 067 (P4-39): IOPort - [ 1141.053619] hm2/hm2_5i20.0: IO Pin 068 (P4-41): IOPort - [ 1141.053621] hm2/hm2_5i20.0: IO Pin 069 (P4-43): IOPort - [ 1141.053624] hm2/hm2_5i20.0: IO Pin 070 (P4-45): IOPort - [ 1141.053627] hm2/hm2_5i20.0: IO Pin 071 (P4-47): IOPort - [ 1141.053811] hm2/hm2_5i20.0: registered - [ 1141.053815] hm2_5i20.0: initialized AnyIO board at 0000:02:02.0 +---- +[ 1141.053386] hm2/hm2_5i20.0: 72 I/O Pins used: +[ 1141.053394] hm2/hm2_5i20.0: IO Pin 000 (P2-01): IOPort +[ 1141.053397] hm2/hm2_5i20.0: IO Pin 001 (P2-03): IOPort +[ 1141.053401] hm2/hm2_5i20.0: IO Pin 002 (P2-05): Encoder #0, pin B (Input) +[ 1141.053405] hm2/hm2_5i20.0: IO Pin 003 (P2-07): Encoder #0, pin A (Input) +[ 1141.053408] hm2/hm2_5i20.0: IO Pin 004 (P2-09): IOPort +[ 1141.053411] hm2/hm2_5i20.0: IO Pin 005 (P2-11): Encoder #0, pin Index (Input) +[ 1141.053415] hm2/hm2_5i20.0: IO Pin 006 (P2-13): IOPort +[ 1141.053418] hm2/hm2_5i20.0: IO Pin 007 (P2-15): PWMGen #0, pin Out0 +(PWM or Up) (Output) +[ 1141.053422] hm2/hm2_5i20.0: IO Pin 008 (P2-17): IOPort +[ 1141.053425] hm2/hm2_5i20.0: IO Pin 009 (P2-19): PWMGen #0, pin Out1 +(Dir or Down) (Output) +[ 1141.053429] hm2/hm2_5i20.0: IO Pin 010 (P2-21): IOPort +[ 1141.053432] hm2/hm2_5i20.0: IO Pin 011 (P2-23): PWMGen #0, pin +Not-Enable (Output) + ... +[ 1141.053589] hm2/hm2_5i20.0: IO Pin 060 (P4-25): StepGen #2, pin Step (Output) +[ 1141.053593] hm2/hm2_5i20.0: IO Pin 061 (P4-27): StepGen #2, pin Direction (Output) +[ 1141.053597] hm2/hm2_5i20.0: IO Pin 062 (P4-29): StepGen #2, pin (unused) (Output) +[ 1141.053601] hm2/hm2_5i20.0: IO Pin 063 (P4-31): StepGen #2, pin (unused) (Output) +[ 1141.053605] hm2/hm2_5i20.0: IO Pin 064 (P4-33): StepGen #2, pin (unused) (Output) +[ 1141.053609] hm2/hm2_5i20.0: IO Pin 065 (P4-35): StepGen #2, pin (unused) (Output) +[ 1141.053613] hm2/hm2_5i20.0: IO Pin 066 (P4-37): IOPort +[ 1141.053616] hm2/hm2_5i20.0: IO Pin 067 (P4-39): IOPort +[ 1141.053619] hm2/hm2_5i20.0: IO Pin 068 (P4-41): IOPort +[ 1141.053621] hm2/hm2_5i20.0: IO Pin 069 (P4-43): IOPort +[ 1141.053624] hm2/hm2_5i20.0: IO Pin 070 (P4-45): IOPort +[ 1141.053627] hm2/hm2_5i20.0: IO Pin 071 (P4-47): IOPort +[ 1141.053811] hm2/hm2_5i20.0: registered +[ 1141.053815] hm2_5i20.0: initialized AnyIO board at 0000:02:02.0 +---- Note 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 @@ -209,18 +215,18 @@ and PWMGen will also show up as GPIOs in the HAL Configuration screen. == PIN Files -The default pinout is described in a .PIN file (human-readable text). -When you install a firmware package .deb, the .PIN files are installed in +The default pinout is described in a .PIN file (human-readable text). +When you install a firmware package .deb, the .PIN files are installed in - /usr/share/doc/hostmot2-firmware-/ + /usr/share/doc/hostmot2-firmware-/ == Firmware -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- package. There is more information about -firmware and configuration in the "Configurations" section. +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- package. There is more information about +firmware and configuration in the "Configurations" section. == HAL Pins @@ -231,37 +237,37 @@ configuration used above. .5i20 HAL Pins[[cap:5i20-HAL-Pins]] -image::images/5i20-halpins.png[alt="5i20 HAL Pins"] +image::images/5i20-halpins.png["5i20 HAL Pins"] == Configurations -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. - -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. - -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. - -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. - -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.) +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. + +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. + +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. + +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. + +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.) [width="90%", options="header"] |==================================================================== |Firmware | Encoder | PWMGen | StepGen | GPIO @@ -269,8 +275,8 @@ So far, all firmware is available in all gate sizes.) |SVST16_24 | 16 | 16 | 24 | 0 |==================================================================== -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.) +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.) [width="90%", options="header"] |==================================================================== |Firmware | Encoder | PWM | StepGen | GPIO @@ -355,12 +361,12 @@ So far, all firmware is available in all gate sizes.) |SVST2_4_7I47 | 4 | 2 | 4 | 24 |==================================================================== -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. +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. 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 @@ -443,8 +449,8 @@ two-digit number that corresponds to the HostMot2 stepgen instance number. There are "num_stepgens" instances, starting with 00. 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 +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.] The stepgen representation is modeled on the stepgen software @@ -528,7 +534,7 @@ output run dmesg as described above. 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. + GPIO will be the inverse of the value on the "out" HAL pin. is_opendrain:: (Bit, RW) If this parameter is false, the GPIO behaves as a normal @@ -624,7 +630,7 @@ which I/O pin belongs to which output run dmesg as described above. 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. + GPIO will be the inverse of the value on the "out" HAL pin. is_opendrain:: (Bit, RW) If this parameter is false, the GPIO behaves as a normal @@ -741,4 +747,3 @@ and parameters that your configuration gave you, open the Show HAL Configuration window from the Machine menu, or do dmesg as outlined above. - diff --git a/docs/src/drivers/mb2hal.adoc b/docs/src/drivers/mb2hal.adoc index ed6b8a6a413..0cfa9f69ef5 100644 --- a/docs/src/drivers/mb2hal.adoc +++ b/docs/src/drivers/mb2hal.adoc @@ -1,23 +1,23 @@ -[[cha:mb2hal]] +:lang: en +[[cha:mb2hal]] = MB2HAL 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: -. One option is to create a HAL component as a driver see -http://wiki.linuxcnc.org/cgi-bin/wiki.pl?VFD_Modbus[VFD Modbus]. -. Another option is to use Classic Ladder which has Modbus built in see -<>. +. One option is to create a HAL component as a driver see http://wiki.linuxcnc.org/cgi-bin/wiki.pl?VFD_Modbus[VFD Modbus]. +. Another option is to use Classic Ladder which has Modbus built in see <>. . Now there is a third option that consists of a "generic" driver configured by text file, this is called MB2HAL. + Why MB2HAL ? Consider using Mb2hal if: * You have to write a new driver and you don't know anything about programming. * You need to use Classic Ladder "only" to manage the Modbus connections. * You have to discover and configure first time the Modbus transactions. Mb2hal have debug levels to facilitate the low level protocol debug. -* 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. +* 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. * You want a protocol to connect your Arduino to HAL. Look the included sample configuration file, sketch and library for Arduino Modbus. == Usage @@ -143,8 +143,10 @@ Program or connection: * 0x11 (-17) - INVALID_EXCEPTION_CODE == Example config file + Click link:mb2hal_HOWTO.ini[here] to download. [source,{basebackend@docbook:'':ini}] + ---- include::../../../src/hal/user_comps/mb2hal/mb2hal_HOWTO.ini[] ---- @@ -199,4 +201,4 @@ Example: * `mb2hal.00.01.` (transaction=00, second register=01 (00 is the first one)) * `mb2hal.TxName.01.` (HAL_TX_NAME=TxName, second register=01 (00 is the first one)) -========================== \ No newline at end of file +========================== diff --git a/docs/src/drivers/mitsub_vfd.adoc b/docs/src/drivers/mitsub_vfd.adoc index d3dc2fd4fbf..fd086ad0517 100644 --- a/docs/src/drivers/mitsub_vfd.adoc +++ b/docs/src/drivers/mitsub_vfd.adoc @@ -1,3 +1,4 @@ +:lang: en = Mitsub VFD Driver @@ -22,7 +23,7 @@ loadusr -Wn coolant mitsub_vfd spindle=02 coolant=01 ---- The above command says: + -loadusr, wait for coolant pins to be ready, component mitsub_vfd, with 2 slaves +loadusr, wait for coolant pins to be ready, component mitsub_vfd, with 2 slaves named spindle (slave #2) and coolant (slave #1) == Command Line Options @@ -42,60 +43,60 @@ Turning on debugging will result in a flood of text in the terminal. Where is +mitsub_vfd+ or the name given during loading. -* '.fwd' (bit, in) - True sets motion forward, False sets reverse. + * '.fwd' (bit, in) + True sets motion forward, False sets reverse. -* '.run' (bit, in) - True sets the VFD in motion based on the .fwd pin. + * '.run' (bit, in) + True sets the VFD in motion based on the .fwd pin. -* '.debug' (bit, in) - Prints debug info to the terminal. + * '.debug' (bit, in) + Prints debug info to the terminal. -* '.alarm' (bit, out) - signals an alarm state of VFD. + * '.alarm' (bit, out) + signals an alarm state of VFD. -* '.up-to-speed' (bit, out) - when drive is at commanded speed (speed-tolerance is set on vfd) + * '.up-to-speed' (bit, out) + when drive is at commanded speed (speed-tolerance is set on vfd) -* '.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. + * '.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. -* '.motor-cmd' (float, in) - commanded speed to the VFD (scaled to hertz by default). + * '.motor-cmd' (float, in) + commanded speed to the VFD (scaled to hertz by default). -* '.motor-fb' (float, out) - feedback speed from the VFD (scaled to hertz by default). + * '.motor-fb' (float, out) + feedback speed from the VFD (scaled to hertz by default). -* '.motor-amps' (float, out) - Current amperage output of motor. + * '.motor-amps' (float, out) + Current amperage output of motor. -* '.motor-power' (float, out) - Current power output of motor. + * '.motor-power' (float, out) + Current power output of motor. -* '.scale-cmd' (float, in) - Scales the motor-cmd pin to arbitrary units. default 1 = Hertz. + * '.scale-cmd' (float, in) + Scales the motor-cmd pin to arbitrary units. default 1 = Hertz. -* '.scale-fb' (float, in) - Scales the motor-fb pin to arbitrary units. default 1 = Hertz. + * '.scale-fb' (float, in) + Scales the motor-fb pin to arbitrary units. default 1 = Hertz. -* '.scale-amps' (float, in) - Scales the motor-amps pin to arbitrary units. default 1 = amps. + * '.scale-amps' (float, in) + Scales the motor-amps pin to arbitrary units. default 1 = amps. -* '.scale-power' (float, in) - Scales the motor-power pin to arbitrary units. default 1 = . + * '.scale-power' (float, in) + Scales the motor-power pin to arbitrary units. default 1 = . -* '.estop' (bit, in) - puts the VFD into emergency-stopped status. + * '.estop' (bit, in) + puts the VFD into emergency-stopped status. -* '.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. + * '.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. == HAL example [source,{hal}] ---------------------------------------------------------------------- +---- # # example usage of the Mitsubishi VFD driver # @@ -103,8 +104,8 @@ loadusr -Wn coolant mitsub_vfd spindle=02 coolant=01 # **************** Spindle VFD setup slave 2 ********************* net spindle-vel-cmd spindle.motor-cmd -net spindle-cw spindle.fwd -net spindle-on spindle.run +net spindle-cw spindle.fwd +net spindle-on spindle.run net spindle-at-speed spindle.up-to-speed net estop-out spindle.estop # cmd scaled to RPM @@ -128,7 +129,7 @@ setp coolant.motor-cmd 60 # allows us to see status setp coolant.monitor 1 ---------------------------------------------------------------------- +---- == Configuring the Mitsubishi VFD for serial usage @@ -148,24 +149,34 @@ Referenced manuals: The VFD must have PR settings adjusted manually for serial communication. + One must power cycle the VFD for some of these to register eg PR 79 -* 'PR 77' set to 1 '-to unlock other PR modification.' + * 'PR 77' set to 1 + '-to unlock other PR modification.' -* 'PR 79' set to 1 or 0 '-for communication thru serial.' + * 'PR 79' set to 1 or 0 + '-for communication thru serial.' -* 'PR 117' set to 0-31 '-slave number, driver must reference same number.' + * 'PR 117' set to 0-31 + '-slave number, driver must reference same number.' -* 'PR 118' tested with 96 '-baud rate (can be set to 48,96,192) if driver is also set.' + * 'PR 118' tested with 96 + '-baud rate (can be set to 48,96,192) if driver is also set.' -* 'PR 119' set to 0 '-stop bit/data length (8 bits, two stop)' + * 'PR 119' set to 0 + '-stop bit/data length (8 bits, two stop)' -* 'PR 120' set to 0 '-no parity' + * 'PR 120' set to 0 + '-no parity' -* 'PR 121' set to 1-10 '-if 10 (maximuim) COM errors then VFD faults.' + * 'PR 121' set to 1-10 + '-if 10 (maximuim) COM errors then VFD faults.' -* 'PR 122' tested with 9999 '-if communication is lost VFD will not error.' + * 'PR 122' tested with 9999 + '-if communication is lost VFD will not error.' -* 'PR 123' set to 9999 '-no wait time is added to the serial data frame.' + * 'PR 123' set to 9999 + '-no wait time is added to the serial data frame.' -* 'PR 124' set to 0 '-no carriage return at end of line.' + * 'PR 124' set to 0 + '-no carriage return at end of line.' //Chris Morley; diff --git a/docs/src/drivers/motenc.adoc b/docs/src/drivers/motenc.adoc index c259047f1b0..ad8b5d28f7e 100644 --- a/docs/src/drivers/motenc.adoc +++ b/docs/src/drivers/motenc.adoc @@ -1,5 +1,6 @@ -[[cha:motenc-driver]] +:lang: en +[[cha:motenc-driver]] = Motenc Driver Vital Systems Motenc-100 and Motenc-LITE @@ -17,7 +18,7 @@ Installing: loadrt hal_motenc ---- -During loading (or attempted loading) the driver prints some useful +During loading (or attempted loading) the driver prints some useful debugging messages to the kernel log, which can be viewed with dmesg. Up to 4 boards may be used in one system. @@ -30,49 +31,49 @@ 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. -* '(s32) motenc..enc--count' - Encoder position, in counts. -* '(float) motenc..enc--position' - Encoder position, in + * '(s32) motenc..enc--count' - Encoder position, in counts. + * '(float) motenc..enc--position' - Encoder position, in user units. -* '(bit) motenc..enc--index' - Current status of index + * '(bit) motenc..enc--index' - Current status of index pulse input. -* '(bit) motenc..enc--idx-latch' - Driver sets this pin + * '(bit) motenc..enc--idx-latch' - Driver sets this pin true when it latches an index pulse (enabled by latch-index). Cleared by clearing latch-index. -* '(bit) motenc..enc--latch-index' - If this pin is true, + * '(bit) motenc..enc--latch-index' - If this pin is true, the driver will reset the counter on the next index pulse. -* '(bit) motenc..enc--reset-count' - If this pin is true, + * '(bit) motenc..enc--reset-count' - If this pin is true, the counter will immediately be reset to zero, and the pin will be cleared. -* '(float) motenc..dac--value' - Analog output value for + * '(float) motenc..dac--value' - Analog output value for DAC (in user units, see -gain and -offset) -* '(float) motenc..adc--value' - Analog input value read + * '(float) motenc..adc--value' - Analog input value read by ADC (in user units, see -gain and -offset) -* '(bit) motenc..in-' - State of digital input pin, see + * '(bit) motenc..in-' - State of digital input pin, see canonical digital input. -* '(bit) motenc..in--not' - Inverted state of digital + * '(bit) motenc..in--not' - Inverted state of digital input pin, see canonical digital input. -* '(bit) motenc..out-' - Value to be written to digital + * '(bit) motenc..out-' - Value to be written to digital output, seen canonical digital output. -* '(bit) motenc..estop-in' - Dedicated estop input, more details + * '(bit) motenc..estop-in' - Dedicated estop input, more details needed. -* '(bit) motenc..estop-in-not' - Inverted state of dedicated estop + * '(bit) motenc..estop-in-not' - Inverted state of dedicated estop input. -* '(bit) motenc..watchdog-reset' - Bidirectional, - Set TRUE to + * '(bit) motenc..watchdog-reset' - Bidirectional, - Set TRUE to reset watchdog once, is automatically cleared. == Parameters -* '(float) motenc..enc--scale' - The number of counts / + * '(float) motenc..enc--scale' - The number of counts / user unit (to convert from counts to units). -* '(float) motenc..dac--offset' - Sets the DAC offset. -* '(float) motenc..dac--gain' - Sets the DAC gain (scaling). -* '(float) motenc..adc--offset' - Sets the ADC offset. -* '(float) motenc..adc--gain' - Sets the ADC gain (scaling). -* '(bit) motenc..out--invert' - Inverts a digital output, + * '(float) motenc..dac--offset' - Sets the DAC offset. + * '(float) motenc..dac--gain' - Sets the DAC gain (scaling). + * '(float) motenc..adc--offset' - Sets the ADC offset. + * '(float) motenc..adc--gain' - Sets the ADC gain (scaling). + * '(bit) motenc..out--invert' - Inverts a digital output, see canonical digital output. -* '(u32) motenc..watchdog-control' - Configures the watchdog. The - value may be a bitwise OR of the following values: - + * '(u32) motenc..watchdog-control' - Configures the watchdog. The + value may be a bitwise OR of the following values: + [width="90%", options="header", cols="2*^1,^6"] |======================================== |Bit # | Value | Meaning @@ -81,7 +82,7 @@ board. |2 | 4 | Watchdog is enabled |3 | 8 | |4 | 16 | Watchdog is automatically reset by DAC writes (the HAL dac-write function) -|======================================== +|======================================== Typically, the useful values are 0 (watchdog disabled) or 20 (8ms watchdog enabled, cleared by dac-write). @@ -97,4 +98,3 @@ watchdog enabled, cleared by dac-write). * '(funct) motenc..digital-out-write' - Writes digital outputs. * '(funct) motenc..misc-update' - Updates misc stuff. - diff --git a/docs/src/drivers/opto22.adoc b/docs/src/drivers/opto22.adoc index de46f3aaf31..31fc38f59c8 100644 --- a/docs/src/drivers/opto22.adoc +++ b/docs/src/drivers/opto22.adoc @@ -1,5 +1,6 @@ -[[cha:opto22-driver]] +:lang: en +[[cha:opto22-driver]] = Opto22 Driver PCI AC5 ADAPTER CARD / HAL DRIVER @@ -12,7 +13,7 @@ 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 +software. The AC5 does not have any 'smart' logic on board, it is just an adapter. See the manufacturer's website for more info: @@ -22,12 +23,12 @@ http://www.opto22.com/site/pr_details.aspx?cid=4&item=PCI-AC5 I would like to thank Opto22 for releasing info in their manual, easing the writing of this driver! -== The Driver +== The Driver 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: +is (more cards are possible with a change in the source code). Load the +basic driver like so: ---- loadrt opto_ac5 @@ -39,50 +40,45 @@ 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: -* 'opto_ac5.0.port0.in-00' - They would be numbered from 00 to 11 - -* 'opto_ac5.0.port0.out-12' - They would be numbered 12 to 23 port 1 would -be the same. + * 'opto_ac5.0.port0.in-00' - They would be numbered from 00 to 11 + * 'opto_ac5.0.port0.out-12' - They would be numbered 12 to 23 port 1 would be the same. == Pins -* 'opto_ac5.[BOARDNUMBER].port[PORTNUMBER].in-[PINNUMBER] OUT bit' - + * 'opto_ac5.[BOARDNUMBER].port[PORTNUMBER].in-[PINNUMBER] OUT bit' - -* '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. + * '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. -* '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. + * '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. -* 'opto_ac5.[BOARDNUMBER].led[NUMBER] OUT bit' - -Turns one of the 4 onboard LEDs on/off. LEDs are numbered 0 to 3. + * 'opto_ac5.[BOARDNUMBER].led[NUMBER] OUT bit' - + Turns one of the 4 onboard LEDs on/off. LEDs are numbered 0 to 3. BOARDNUMBER can be 0-3 PORTNUMBER can be 0 or 1. Port 0 is closest to the card bracket. == Parameters -* '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. + * '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. -== FUNCTIONS +== FUNCTIONS -* 'opto_ac5.0.digital-read' - Add this to a thread to read all the input -points. + * 'opto_ac5.0.digital-read' - Add this to a thread to read all the input points. -* 'opto_ac5.0.digital-write' - Add this to a thread to write all the output -points and LEDs. + * 'opto_ac5.0.digital-write' - Add this to a thread to write all the output points and LEDs. -For example the pin names for the default I/O setting of port 0 would -be: +For example the pin names for the default I/O setting of port 0 would be: ---- opto_ac5.0.port0.in-00 @@ -151,9 +147,8 @@ 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. -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. - +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. diff --git a/docs/src/drivers/opto22_fr.adoc b/docs/src/drivers/opto22_fr.adoc index 7039e43935d..41b71dc0ae8 100644 --- a/docs/src/drivers/opto22_fr.adoc +++ b/docs/src/drivers/opto22_fr.adoc @@ -1,3 +1,5 @@ +:lang: en + = Opto22 PCI PCI AC5 ADAPTER CARD / HAL DRIVER This page is considered current as diff --git a/docs/src/drivers/pico-ppmc.adoc b/docs/src/drivers/pico-ppmc.adoc index 74d08b2435d..a42fc470c14 100644 --- a/docs/src/drivers/pico-ppmc.adoc +++ b/docs/src/drivers/pico-ppmc.adoc @@ -1,5 +1,7 @@ -[[cha:pico-drivers]] +:lang: en +:toc: +[[cha:pico-drivers]] = Pico Drivers Pico Systems has a family of boards for doing analog servo, stepper, @@ -19,14 +21,14 @@ Installing: loadrt hal_ppmc port_addr=[,[,...]] ---- -The 'port_addr' parameter tells the driver what parallel port(s) to -check. By default, '' is 0x0378, and '' 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'. +The 'port_addr' parameter tells the driver what parallel port(s) to +check. By default, '' is 0x0378, and '' 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'. Up to 3 parport buses may be used, and each bus may have up to 8 (or possibly 16 PPMC) devices on it. @@ -102,134 +104,128 @@ 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. -* '(All s32 output) ppmc..encoder..count' - Encoder - position, in counts. -* '(All s32 output) ppmc..encoder..delta' - Change in - counts since last read, in raw encoder count units. -* '(All float output) 'ppmc..encoder..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. -* '(All float output) ppmc..encoder..position' - - Encoder position, in user units. +* '(All s32 output) ppmc..encoder..count' - Encoder position, in counts. +* '(All s32 output) ppmc..encoder..delta' - Change in counts since last read, in raw encoder count units. +* '(All float output) 'ppmc..encoder..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. +* '(All float output) ppmc..encoder..position' - Encoder position, in user units. * '(All bit bidir) ppmc..encoder..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. + 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. * '(PPMC float output) ppmc..DAC..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. -* '(UPC bit input) ppmc..pwm..enable' - Enables a - PWM generator. -* '(UPC float input) ppmc..pwm..value' - Value - which determines the duty cycle of the PWM waveforms. The - value is divided by 'pwm..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. + signed value to the 16-bit Digital to Analog Converter on the PPMC DAC16 + board commanding the analog output voltage of that DAC channel. +* '(UPC bit input) ppmc..pwm..enable' - Enables a PWM generator. +* '(UPC float input) ppmc..pwm..value' - Value + which determines the duty cycle of the PWM waveforms. The + value is divided by 'pwm..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. * '(USC bit input) ppmc..stepgen..enable' - - Enables a step pulse generator. + Enables a step pulse generator. * '(USC float input) ppmc..stepgen..velocity' - - Value which determines the step frequency. The value is multiplied - by 'stepgen..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. + Value which determines the step frequency. The value is multiplied + by 'stepgen..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. * '(All bit output) ppmc..din..in' - State of digital - input pin, see canonical digital input. + input pin, see canonical digital input. * '(All bit output) ppmc..din..in-not' - Inverted - state of digital input pin, see canonical digital input. + state of digital input pin, see canonical digital input. * '(All bit input) ppmc..dout..out' - Value to be - written to digital output, see canonical digital output. + written to digital output, see canonical digital output. * '(Option float input) ppmc..DAC8-.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. + 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. * '(Option bit input) ppmc..dout..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. + 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. == Parameters * '(All float) ppmc..encoder..scale' - The number of - counts / user unit (to convert from counts to units). + counts / user unit (to convert from counts to units). * '(UPC float) ppmc..pwm..freq' - The PWM - carrier frequency, in Hz. Applies to a group of four - consecutive PWM generators, as indicated by ''. Minimum - is 610Hz, maximum is 500KHz. + carrier frequency, in Hz. Applies to a group of four + consecutive PWM generators, as indicated by ''. Minimum + is 610Hz, maximum is 500KHz. * '(PPMC float) ppmc..DAC..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. + 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. * '(UPC float) ppmc..pwm..scale' - Scaling for PWM - generator. If 'scale' is X, then the duty cycle will be 100% when the - 'value' pin is X (or -X). + generator. If 'scale' is X, then the duty cycle will be 100% when the + 'value' pin is X (or -X). * '(UPC float) ppmc..pwm..max-dc' - Maximum duty - cycle, from 0.0 to 1.0. + cycle, from 0.0 to 1.0. * '(UPC float) ppmc..pwm..min-dc' - Minimum duty - cycle, from 0.0 to 1.0. + cycle, from 0.0 to 1.0. * '(UPC float) ppmc..pwm..duty-cycle' - Actual duty - cycle (used mostly for troubleshooting.) + cycle (used mostly for troubleshooting.) * '(UPC bit) ppmc..pwm..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. -* '(USC u32) ppmc..stepgen..setup-time' - Sets - minimum time between direction change and step pulse, in - units of 100ns. Applies to a group of four consecutive step generators, - as indicated by ''. Values between 200 ns and 25.5 us -can be specified. -* '(USC u32) ppmc..stepgen..pulse-width' - Sets - width of step pulses, in units of 100ns. Applies to a group - of four consecutive step generators, as indicated by ''. + 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. +* '(USC u32) ppmc..stepgen..setup-time' - Sets + minimum time between direction change and step pulse, in + units of 100ns. Applies to a group of four consecutive step generators, + as indicated by ''. Values between 200 ns and 25.5 us can be specified. +* '(USC u32) ppmc..stepgen..pulse-width' - Sets + width of step pulses, in units of 100ns. Applies to a group + of four consecutive step generators, as indicated by ''. Values between 200 ns and 25.5 us may be specified. -* '(USC u32) ppmc..stepgen..pulse-space-min' - Sets - minimum time between pulses, in units of 100ns. - Applies to a group of four consecutive step generators, as indicated by - ''. Values between 200 ns and 25.5 us can be specified. - The maximum step rate is: - image:images/pico-ppmc-math.png[] +* '(USC u32) ppmc..stepgen..pulse-space-min' - Sets + minimum time between pulses, in units of 100ns. + Applies to a group of four consecutive step generators, as indicated by + ''. Values between 200 ns and 25.5 us can be specified. + The maximum step rate is: + image:images/pico-ppmc-math.png[] * '(USC float) ppmc..stepgen..scale' - Scaling for - step pulse generator. The step frequency in Hz is the - absolute value of 'velocity' * 'scale'. + step pulse generator. The step frequency in Hz is the + absolute value of 'velocity' * 'scale'. * '(USC float) ppmc..stepgen..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.) + value for 'velocity'. Commands greater than 'max-vel' will be clamped. + Also applies to negative values. (The absolute value is clamped.) * '(USC float) ppmc..stepgen..frequency' - Actual - step pulse frequency in Hz (used mostly for troubleshooting.) + step pulse frequency in Hz (used mostly for troubleshooting.) * '(Option float) ppmc..DAC8..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.) + 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.) * '(Option bit) ppmc..dout..invert' - Inverts a - digital output, see canonical digital output. + digital output, see canonical digital output. * '(Option bit) ppmc..dout..invert' - Inverts a - digital output pin of J8, see canonical digital output. + digital output pin of J8, see canonical digital output. == Functions * '(All funct) ppmc..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. + 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. * '(All funct) ppmc..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. - + 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. diff --git a/docs/src/drivers/pluto-p.adoc b/docs/src/drivers/pluto-p.adoc index 1cb90c2a279..a692932d5a3 100644 --- a/docs/src/drivers/pluto-p.adoc +++ b/docs/src/drivers/pluto-p.adoc @@ -1,5 +1,6 @@ -[[cha:pluto-p-driver]] +:lang: en +[[cha:pluto-p-driver]] = Pluto P Driver == General Info @@ -17,71 +18,71 @@ 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. -For more information on PCI EPP compatible parallel port cards see the +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. === Connectors -* The Pluto-P board is shipped with the left connector presoldered, with + * 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. -* The bottom and right connectors are on the same .1" grid, but the left + * 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. + connector. === Physical Pins -* Read the ACEX1K datasheet for information about input and output + * 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. -* Before configuration and after properly exiting LinuxCNC, all Pluto-P pins - are tristated with weak pull-ups (20k-ohms min, 50k-ohms max). If the - watchdog timer is enabled (the default), + * Before configuration and after properly exiting LinuxCNC, all Pluto-P pins + are tristated with weak pull-ups (20k-ohms min, 50k-ohms 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.5ms to activate. However, software bugs in the pluto_servo firmware or LinuxCNC can leave the Pluto-P pins in an undefined state. -* In pwm+dir mode, by default dir is HIGH for negative values and LOW + * 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. -* The index input is triggered on the rising edge. Initial testing has + * 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 25ns. Digital filtering has been added to filter pulses shorter than 175ns (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. -* The IN1…IN7 pins have 22-ohm series resistors to their associated FPGA + * The IN1…IN7 pins have 22-ohm 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. + protocol. === LED -* When the device is unprogrammed, the LED glows faintly. When the + * 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'). === Power -* A small amount of current may be drawn from VCC. The available current + * 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. -* The regulator on the Pluto-P board is a low-dropout type. Supplying 5V + * 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. === PC interface -* Only a single pluto_servo or pluto_step board is supported. + * Only a single pluto_servo or pluto_step board is supported. === Rebuilding the FPGA firmware @@ -89,8 +90,8 @@ 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. +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. Like the HAL hardware driver, the FPGA firmware is licensed under the @@ -114,54 +115,54 @@ limit switches. This driver features: -* 4 quadrature channels with 40MHz sample rate. The counters operate in + * 4 quadrature channels with 40MHz sample rate. The counters operate in '4x' mode. The maximum useful quadrature rate is 8191 counts per LinuxCNC servo cycle, or about 8MHz for LinuxCNC's default 1ms servo rate. -* 4 PWM channels, 'up/down' or 'pwm+dir' style. 4095 duty cycles from + * 4 PWM channels, 'up/down' or 'pwm+dir' style. 4095 duty cycles from -100% to +100%, including 0%. The PWM period is approximately 19.5kHz - (40MHz / 2047). A PDM-like mode is also available. -* 18 digital outputs: 10 dedicated, 8 shared with PWM functions. + (40MHz / 2047). A PDM-like mode is also available. + * 18 digital outputs: 10 dedicated, 8 shared with PWM functions. (Example: A lathe with unidirectional PWM spindle control may use 13 - total digital outputs) -* 20 digital inputs: 8 dedicated, 12 shared with Quadrature functions. + total digital outputs) + * 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) -* EPP communication with the PC. The EPP communication typically takes + digital inputs) + * EPP communication with the PC. The EPP communication typically takes around 100 us on machines tested so far, enabling servo rates above - 1kHz. + 1kHz. === Pinout -* '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. + * '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. -* '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. + * '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. -* '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. + * '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. -* '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. + * '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. -* 'INx' - Dedicated digital input #x + * 'INx' - Dedicated digital input #x -* 'OUTx' - Dedicated digital output #x + * 'OUTx' - Dedicated digital output #x -* 'GND' - Ground + * 'GND' - Ground -* 'VCC' - +3.3V regulated DC + * 'VCC' - +3.3V regulated DC .Pluto-Servo Pinout(((pluto-servo pinout))) -image::images/pluto-pinout.png[align="center", alt="Pluto-Servo Pinout"] +image::images/pluto-pinout.png["Pluto-Servo Pinout",align="center"] .Pluto-Servo Alternate Pin Functions @@ -200,12 +201,12 @@ image::images/pluto-pinout.png[align="center", alt="Pluto-Servo Pinout"] === Input latching and output updating -* PWM duty cycles for each channel are updated at different times. -* Digital outputs OUT0 through OUT9 are all updated at the same time. + * PWM duty cycles for each channel are updated at different times. + * 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. -* Digital inputs IN0 through IN19 are all latched at the same time. -* Quadrature positions for each channel are latched at different times. + * Digital inputs IN0 through IN19 are all latched at the same time. + * Quadrature positions for each channel are latched at different times. === HAL Functions, Pins and Parameters @@ -223,7 +224,8 @@ 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. -== Pluto Step[[sec:Pluto-step:-Hardware-step]](((pluto-step))) +[[sec:Pluto-step:-Hardware-step]] +== Pluto Step(((pluto-step))) 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 @@ -231,11 +233,11 @@ limit switches. The board features: -* 4 'step+direction' channels with 312.5kHz maximum step rate, + * 4 'step+direction' channels with 312.5kHz maximum step rate, programmable step length, space, and direction change times -* 14 dedicated digital outputs -* 16 dedicated digital inputs -* EPP communication with the PC + * 14 dedicated digital outputs + * 16 dedicated digital inputs + * EPP communication with the PC === Pinout @@ -243,11 +245,11 @@ The board features: * 'DIRx' - The 'direction' output of stepgen channel 'x' -* 'INx' - Dedicated digital input #x +* 'INx' - Dedicated digital input #x -* 'OUTx' - Dedicated digital output #x +* 'OUTx' - Dedicated digital output #x -* 'GND' - Ground +* 'GND' - Ground * 'VCC' - +3.3V regulated DC @@ -259,14 +261,14 @@ connector. .Pluto-Step Pinout (((pluto-step pinout))) -image::images/pluto-step-pinout.png[align="center", alt="Pluto-Step Pinout"] +image::images/pluto-step-pinout.png["Pluto-Step Pinout",align="center"] === Input latching and output updating * Step frequencies for each channel are updated at different times. * Digital outputs are all updated at the same time. * Digital inputs are all latched at the same time. -* Feedback positions for each channel are latched at different times. +* Feedback positions for each channel are latched at different times. === Step Waveform Timings @@ -280,11 +282,10 @@ step timings are always applied to all channels. .Pluto-Step Timings (((pluto-step timings))) -image::images/pluto_step_waveform.png[align="center", alt="Pluto-Step Timings"] +image::images/pluto_step_waveform.png["Pluto-Step Timings",align="center"] === HAL Functions, Pins and Parameters A list of all 'loadrt' arguments, HAL function names, pin names and parameter names is in the manual page, 'pluto_step.9'. - diff --git a/docs/src/drivers/pluto_p_fr.adoc b/docs/src/drivers/pluto_p_fr.adoc index 3f02f4dfebc..b20351667b2 100644 --- a/docs/src/drivers/pluto_p_fr.adoc +++ b/docs/src/drivers/pluto_p_fr.adoc @@ -1,3 +1,5 @@ +:lang: en + = Pluto-P == General Info @@ -20,7 +22,7 @@ ACEX1K(((ACEX1K))) chip from Altera. - 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. + connector. === Physical Pins @@ -28,8 +30,8 @@ ACEX1K(((ACEX1K))) chip from Altera. voltage thresholds. The pins are all configured in "LVTTL/LVCMOS" mode and are generally compatible with 5V TTL logic. - Before configuration and after properly exiting LinuxCNC, all Pluto-P pins - are tristated with weak pull-ups (20k-ohms min, 50k-ohms max). If the - watchdog timer is enabled (the default), + are tristated with weak pull-ups (20k-ohms min, 50k-ohms 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.5ms to activate. However, software bugs in the pluto_servo firmware @@ -49,13 +51,13 @@ ACEX1K(((ACEX1K))) chip from Altera. 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. + protocol. === LED - 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*). + (*LED* = *UP0* 'xor' *DOWN0*) or STEPGEN0 (*LED* = *STEP0* 'xor' *DIR0*). === Power @@ -102,21 +104,21 @@ limit switches. This driver features: - - 4 quadrature channels with 40MHz sample rate. The counters operate in + - 4 quadrature channels with 40MHz sample rate. The counters operate in "4x" mode. The maximum useful quadrature rate is 8191 counts per LinuxCNC servo cycle, or about 8MHz for LinuxCNC's default 1ms servo rate. - - 4 PWM channels, "up/down" or "pwm+dir" style. 4095 duty cycles from + - 4 PWM channels, "up/down" or "pwm+dir" style. 4095 duty cycles from -100% to +100%, including 0%. The PWM period is approximately 19.5kHz - (40MHz / 2047). A PDM-like mode is also available. - - 18 digital outputs: 10 dedicated, 8 shared with PWM functions. + (40MHz / 2047). A PDM-like mode is also available. + - 18 digital outputs: 10 dedicated, 8 shared with PWM functions. (Example: A lathe with unidirectional PWM spindle control may use 13 - total digital outputs) - - 20 digital inputs: 8 dedicated, 12 shared with Quadrature functions. + total digital outputs) + - 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) - - EPP communication with the PC. The EPP communication typically takes + digital inputs) + - EPP communication with the PC. The EPP communication typically takes around 100 us on machines tested so far, enabling servo rates above - 1kHz. + 1kHz. === Pinout @@ -132,7 +134,7 @@ DNx:: 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 ouput invert may be set to - TRUE to make DNx active low rather than active high. + TRUE to make DNx active low rather than active high. QAx, QBx:: The A and B signals for Quadrature counter X. May be used as a digital @@ -141,23 +143,23 @@ QAx, QBx:: 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. + channel is unused. INx:: - Dedicated digital input #x + Dedicated digital input #x OUTx:: - Dedicated digital output #x + Dedicated digital output #x GND:: - Ground + Ground VCC:: +3.3V regulated DC .Pluto-Servo Pinout[[fig:Pluto-Servo-Pinout]](((pluto-servo pinout))) -image::images/pluto-pinout.png[alt="Pluto-Servo Pinout"] +image::images/pluto-pinout.png["Pluto-Servo Pinout"] .Pluto-Servo Alternate Pin Functions[[table:Pluto-Servo-Alternate-Pin]](((pluto-servo alternate pin functions))) @@ -201,7 +203,7 @@ image::images/pluto-pinout.png[alt="Pluto-Servo Pinout"] Digital outputs OUT10 through OUT17 are updated at the same time as the PWM function they are shared with. - Digital inputs IN0 through IN19 are all latched at the same time. - - Quadrature positions for each channel are latched at different times. + - Quadrature positions for each channel are latched at different times. === HAL Functions, Pins and Parameters @@ -212,8 +214,8 @@ parameter names is in the manual page, 'pluto_servo.9'. A schematic for a 2A, 2-axis PWM servo amplifier board is available (http://emergent.unpy.net/projects/01148303608[http://emergent.unpy.net/projects/01148303608]). -The L298 H-Bridge is inexpensive and can easily be used for motors up to -4A (one motor per L298) or up to 2A (two motors per L298) with the supply +The L298 H-Bridge is inexpensive and can easily 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 @@ -242,13 +244,13 @@ DIRx:: The “direction” output of stepgen channel *x* INx:: - Dedicated digital input #x + Dedicated digital input #x OUTx:: - Dedicated digital output #x + Dedicated digital output #x GND:: - Ground + Ground VCC:: +3.3V regulated DC @@ -261,14 +263,14 @@ connector. .Pluto-Step Pinout[[fig:Pluto-Step-Pinout]](((pluto-step pinout))) -image::images/pluto-step-pinout.png[alt="Pluto-Step Pinout"] +image::images/pluto-step-pinout.png["Pluto-Step Pinout"] === Input latching and output updating - Step frequencies for each channel are updated at different times. - Digital outputs are all updated at the same time. - Digital inputs are all latched at the same time. - - Feedback positions for each channel are latched at different times. + - Feedback positions for each channel are latched at different times. === Step Waveform Timings @@ -282,11 +284,10 @@ step timings are always applied to all channels. .Pluto-Step Timings[[fig:Pluto-Step-Timings]](((pluto-step timings))) -image::images/pluto_step_waveform.png[alt="Pluto-Step Timings"] +image::images/pluto_step_waveform.png["Pluto-Step Timings"] === HAL Functions, Pins and Parameters A list of all 'loadrt' arguments, HAL function names, pin names and parameter names is in the manual page, 'pluto_step.9'. - diff --git a/docs/src/drivers/pmx485.adoc b/docs/src/drivers/pmx485.adoc index 42c56a7c642..9d0a7442328 100644 --- a/docs/src/drivers/pmx485.adoc +++ b/docs/src/drivers/pmx485.adoc @@ -1,13 +1,14 @@ -[[cha:pmx485-driver]] +:lang: en +[[cha:pmx485-driver]] = Powermax Modbus Driver This is a userspace HAL program, written in python, to control Hypetherm Powermax plasma cutters using the Modbus ASCII protocol over RS485. + -NOTE: 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 +NOTE: 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. This component is loaded using the halcmd "loadusr" command: @@ -15,7 +16,7 @@ This component is loaded using the halcmd "loadusr" command: loadusr -Wn pmx485 pmx485 /dev/ttyUSB0 ---- -This will load the pmx485 component using the /dev/ttyUSB0 port and wait for +This will load the pmx485 component using the /dev/ttyUSB0 port and wait for it to become ready. It is necessary to name the port to use for communications. @@ -24,7 +25,7 @@ It is necessary to name the port to use for communications. * *pmx485.mode-set* (bit, in) #set cutting mode -* *pmx485.current-set* (bit, in) #set cutting current +* *pmx485.current-set* (bit, in) #set cutting current * *pmx485.pressure-set* (bit, in) #set gas pressure @@ -52,7 +53,7 @@ It is necessary to name the port to use for communications. == Description 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 +and it may then initiate a request to the Powermax by writing a valid string to the following pins: * *mode-set* @@ -62,18 +63,18 @@ to the following pins: NOTE: A *pressure-set* value of zero is valid, the Powermax will then calculate the required pressure internally. -Communications may be validated from the Powermax display or the *status* pin. +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. To terminate the communications, do one of the following: -* Set all set pins to zero: *mode-set*, *current-set*, and *pressure-set*. -* 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. + * Set all set pins to zero: *mode-set*, *current-set*, and *pressure-set*. + * 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. == Reference: * Hypertherm Application Note #807220 + -"Powermax45 XP/65/85/105/125® Serial Communication Protocol" + "Powermax45 XP/65/85/105/125® Serial Communication Protocol" diff --git a/docs/src/drivers/servo-to-go.adoc b/docs/src/drivers/servo-to-go.adoc index b4d30ad7ebc..7d4bacddd19 100644 --- a/docs/src/drivers/servo-to-go.adoc +++ b/docs/src/drivers/servo-to-go.adoc @@ -1,6 +1,7 @@ -= Servo To Go Driver +:lang: en [[cha:servo-to-go-driver]] += Servo To Go Driver 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 @@ -44,7 +45,7 @@ loadrt hal_stg base=0x300 num_chan=4 dio="IOIO" ---- This example installs the STG driver for a card found at the base -address of 0x300, 4 channels of encoder feedback, DACs and ADCs, +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 @@ -61,19 +62,17 @@ configured as Output. == Pins -* 'stg..counts' - (s32) Tracks the counted encoder ticks. -* 'stg..position' - (float) Outputs a converted position. -* 'stg..dac-value' - (float) Drives the voltage for the - corresponding DAC. -* 'stg..adc-value' - (float) Tracks the measured voltage from the - corresponding ADC. -* 'stg.in-' - (bit) Tracks a physical input pin. -* 'stg.in--not' - (bit) Tracks a physical input pin, but inverted. -* 'stg.out-' - (bit) Drives a physical output pin + * 'stg..counts' - (s32) Tracks the counted encoder ticks. + * 'stg..position' - (float) Outputs a converted position. + * 'stg..dac-value' - (float) Drives the voltage for the corresponding DAC. + * 'stg..adc-value' - (float) Tracks the measured voltage from the corresponding ADC. + * 'stg.in-' - (bit) Tracks a physical input pin. + * 'stg.in--not' - (bit) Tracks a physical input pin, but inverted. + * 'stg.out-' - (bit) Drives a physical output pin For each pin, is the axis number, and 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 +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). The in- HAL pin is TRUE if the physical pin is high, and FALSE if the @@ -83,30 +82,26 @@ other, the user can determine the state of the input. == Parameters -* 'stg..position-scale' - (float) The number of counts / user unit + * 'stg..position-scale' - (float) The number of counts / user unit (to convert from counts to units). -* 'stg..dac-offset' - (float) Sets the offset for the corresponding - DAC. -* 'stg..dac-gain' - (float) Sets the gain of the corresponding DAC. -* 'stg..adc-offset' - (float) Sets the offset of the corresponding - ADC. -* 'stg..adc-gain' - (float) Sets the gain of the corresponding ADC. -* 'stg.out--invert' - (bit) Inverts an output pin. + * 'stg..dac-offset' - (float) Sets the offset for the corresponding DAC. + * 'stg..dac-gain' - (float) Sets the gain of the corresponding DAC. + * 'stg..adc-offset' - (float) Sets the offset of the corresponding ADC. + * 'stg..adc-gain' - (float) Sets the gain of the corresponding ADC. + * 'stg.out--invert' - (bit) Inverts an output pin. 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. +TRUE, then setting the HAL out- pin TRUE will drive the physical pin low. == Functions -* 'stg.capture-position' - Reads the encoder counters from the axis - . -* 'stg.write-dacs' - Writes the voltages to the DACs. -* 'stg.read-adcs' - Reads the voltages from the ADCs. -* 'stg.di-read' - Reads physical in- pins of all ports and updates + * 'stg.capture-position' - Reads the encoder counters from the axis . + * 'stg.write-dacs' - Writes the voltages to the DACs. + * 'stg.read-adcs' - Reads the voltages from the ADCs. + * 'stg.di-read' - Reads physical in- pins of all ports and updates all HAL in- and in--not pins. -* 'stg.do-write' - Reads all HAL out- pins and updates all + * 'stg.do-write' - Reads all HAL out- pins and updates all physical output pins. diff --git a/docs/src/drivers/servo_to_go_fr.adoc b/docs/src/drivers/servo_to_go_fr.adoc index 76383958cd1..2eb9d5f5259 100644 --- a/docs/src/drivers/servo_to_go_fr.adoc +++ b/docs/src/drivers/servo_to_go_fr.adoc @@ -1,3 +1,5 @@ +:lang: en + = Servo-To-Go The Servo-To-Go (STG) is one of the first PC motion control cards supported @@ -30,7 +32,7 @@ base address). For example: loadrt hal_stg base=0x300 num_chan=4 dio="IOIO" This example installs the STG driver for a card found at the base -address of 0x300, 4 channels of encoder feedback, DACs and ADCs, +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 @@ -91,6 +93,6 @@ low. - stg.read-adcs (funct) Reads the voltages from the ADCs. - stg.di-read (funct) Reads physical in- pins of all ports and updates all HAL in- and in--not pins. - - stg.do-write (funct) Reads all HAL out- pins and updates all + - stg.do-write (funct) Reads all HAL out- pins and updates all physical output pins. diff --git a/docs/src/drivers/shuttle.adoc b/docs/src/drivers/shuttle.adoc index 395179d3665..a345a387497 100644 --- a/docs/src/drivers/shuttle.adoc +++ b/docs/src/drivers/shuttle.adoc @@ -1,5 +1,6 @@ -[[cha:shuttle]] +:lang: en +[[cha:shuttle]] = Shuttle == Description diff --git a/docs/src/drivers/vfs11.adoc b/docs/src/drivers/vfs11.adoc index 9ff1778b2d4..bce45ceb388 100644 --- a/docs/src/drivers/vfs11.adoc +++ b/docs/src/drivers/vfs11.adoc @@ -1,15 +1,14 @@ +:lang: en +[[cha:vfs11-vfd-driver]] = VFS11 VFD Driver - :ini: {basebackend@docbook:'':ini} :hal: {basebackend@docbook:'':hal} :ngc: {basebackend@docbook:'':ngc} -[[cha:vfs11-vfd-driver]] - This is a userspace HAL program to control the S11 series of VFD's from -Toshiba. +Toshiba. vfs11_vfd supports serial and TCP connections. Serial connections may be RS232 or RS485. RS485 is supported in full- and half-duplex @@ -21,10 +20,10 @@ Regardless of the connection type, vfs11_vfd operates as a Modbus master. This component is loaded using the halcmd "loadusr" command: ---- -loadusr -Wn spindle-vfd vfs11_vfd -n spindle-vfd +loadusr -Wn spindle-vfd vfs11_vfd -n spindle-vfd ---- -The above command says: loadusr, wait for named to load, +The above command says: loadusr, wait for named to load, component vfs11_vfd, named spindle-vfd == Command Line Options @@ -33,10 +32,8 @@ component vfs11_vfd, named spindle-vfd line options are: * '-n or --name ' : set the HAL component name -* '-I or --ini ' : take configuration from this ini -file. Defaults to environment variable INI_FILE_NAME. -* '-S or --section
' : take configuration from this -section in the ini file. Defaults to 'VFS11'. +* '-I or --ini ' : take configuration from this ini file. Defaults to environment variable INI_FILE_NAME. +* '-S or --section
' : take configuration from this section in the ini file. Defaults to 'VFS11'. * '-d or --debug' enable debug messages on console output. * '-m or --modbus-debug' enable modbus messages on console output * '-r or --report-device' report device properties on console at startup @@ -53,140 +50,140 @@ may result in a flood of timeout errors. Where is +vfs11_vfd+ or the name given during loading with the -n option. -* '.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. + * '.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. -* '.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. + * '.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. -* '.at-speed' (bit, out) - when drive is at commanded speed (see speed-tolerance below) + * '.at-speed' (bit, out) + when drive is at commanded speed (see speed-tolerance below) -* '.current-load-percentage' (float, out) - reported from the VFD + * '.current-load-percentage' (float, out) + reported from the VFD -* '.dc-brake' (bit, in) - engage the DC brake. Also turns off spindle-on. + * '.dc-brake' (bit, in) + engage the DC brake. Also turns off spindle-on. -* '.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). + * '.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). -* '.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. + * '.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. -* '.estop' (bit, in) - put the VFD into emergency-stopped status. No operation possible until cleared with err-reset or powercycling. + * '.estop' (bit, in) + put the VFD into emergency-stopped status. No operation possible until cleared with err-reset or powercycling. -* '.frequency-command' (float, out) - current target frequency in HZ as set through speed-command (which is in RPM), from the VFD + * '.frequency-command' (float, out) + current target frequency in HZ as set through speed-command (which is in RPM), from the VFD -* '.frequency-out' (float, out) - current output frequency of the VFD + * '.frequency-out' (float, out) + current output frequency of the VFD -* '.inverter-load-percentage' (float, out) - current load report from VFD + * '.inverter-load-percentage' (float, out) + current load report from VFD -* '.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. + * '.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. -* '.is-stopped' (bit, out) - true when the VFD reports 0 Hz output + * '.is-stopped' (bit, out) + true when the VFD reports 0 Hz output -* '.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 80Hz, 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. + * '.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 80Hz, 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. -* '.modbus-ok' (bit, out) - true when the Modbus session is successfully established and the last 10 transactions returned without error. + * '.modbus-ok' (bit, out) + true when the Modbus session is successfully established and the last 10 transactions returned without error. -* '.motor-RPM' (float, out) - estimated current RPM value, from the VFD + * '.motor-RPM' (float, out) + estimated current RPM value, from the VFD -* '.output-current-percentage' (float, out) - from the VFD + * '.output-current-percentage' (float, out) + from the VFD -* '.output-voltage-percentage' (float, out) - from the VFD + * '.output-voltage-percentage' (float, out) + from the VFD -* '.output-voltage' (float, out) - from the VFD + * '.output-voltage' (float, out) + from the VFD -* '.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 + * '.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 -* '.spindle-fwd' (bit, in) - 1 for FWD and 0 for REV, sent to VFD + * '.spindle-fwd' (bit, in) + 1 for FWD and 0 for REV, sent to VFD -* '.spindle-on' (bit, in) - 1 for ON and 0 for OFF sent to VFD, only on when running + * '.spindle-on' (bit, in) + 1 for ON and 0 for OFF sent to VFD, only on when running -* '.spindle-rev' (bit, in) - 1 for ON and 0 for OFF, only on when running + * '.spindle-rev' (bit, in) + 1 for ON and 0 for OFF, only on when running -* '.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 5Hz). This might - be useful for spindle orientation. In normal mode, the - VFD shuts off if the frequency drops below 12Hz. + * '.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 5Hz). This might + be useful for spindle orientation. In normal mode, the + VFD shuts off if the frequency drops below 12Hz. -* '.status' (s32, out) - Drive Status of the VFD (see the TOSVERT VF-S11 Communications Function Instruction Manual, register FD01). A - bitmap. + * '.status' (s32, out) + Drive Status of the VFD (see the TOSVERT VF-S11 Communications Function Instruction Manual, register FD01). A + bitmap. -* '.trip-code' (s32, out) - trip code if VF-S11 is in tripped state. + * '.trip-code' (s32, out) + trip code if VF-S11 is in tripped state. -* '.error-count' (s32, out) - number of Modbus transactions which returned an error + * '.error-count' (s32, out) + number of Modbus transactions which returned an error -* '.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. + * '.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. == Parameters Where is +vfs11_vfd+ or the name given during loading with the -n option. -* '.frequency-limit' (float, RO) - upper limit read from VFD setup. + * '.frequency-limit' (float, RO) + upper limit read from VFD setup. -* '.loop-time' (float, RW) - how often the Modbus is polled (default interval 0.1 seconds) + * '.loop-time' (float, RW) + how often the Modbus is polled (default interval 0.1 seconds) -* '.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. + * '.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. -* '.nameplate-RPM' (float, RW) - Nameplate RPM of motor (default 1410) + * '.nameplate-RPM' (float, RW) + Nameplate RPM of motor (default 1410) -* '.rpm-limit' (float, RW) - do-not-exceed soft limit for motor RPM (defaults to nameplate-RPM ). + * '.rpm-limit' (float, RW) + do-not-exceed soft limit for motor RPM (defaults to nameplate-RPM ). -* '.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) + * '.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) == INI file configuration This lists all options understood by vfs11_vfd. Typical setups for -RS232, RS485 and TCP can be found in 'src/hal/user_comps/vfs11_vfd/*.ini'. +RS-232, RS-485 and TCP can be found in 'src/hal/user_comps/vfs11_vfd/*.ini'. [source,{ini}] --------------------------------------------------------------------- [VFS11] -# serial connection +# serial connection TYPE=rtu # serial port @@ -205,7 +202,7 @@ TYPE=tcpclient TCPDEST=192.168.1.1 #---------- meaningful only if TYPE=rtu ------- -# serial device detail +# serial device detail # 5 6 7 8 BITS= 5 @@ -216,7 +213,7 @@ PARITY=none BAUD=19200 # 1 2 -STOPBITS=1 +STOPBITS=1 #rs232 rs485 SERIAL_MODE=rs485 @@ -275,7 +272,7 @@ net vfs11-RPM spindle-vfd.speed-command <= spindle.0.speed-out # better be driven by a monoflop which triggers on spindle-on falling edge #net vfs11-spindle-brake spindle.N.brake => spindle-vfd.dc-brake -# to use the VFS11 jog mode for spindle orient +# to use the VFS11 jog mode for spindle orient # see orient.9 and motion.9 net spindle-orient spindle.0.orient spindle-vfd.max-speed spindle-vfd.jog-mode @@ -302,7 +299,7 @@ document number E6581158). == Error Recovery +vfs11_vfd+ recovers from I/O errors as follows: First, all HAL pins -are set to default values, and the driver will sleep for +are set to default values, and the driver will sleep for +RECONNECT_DELAY+ seconds (default 1 second). * Serial (+TYPE=rtu+) mode: on error, close and reopen the serial port. @@ -346,14 +343,14 @@ To increase the upper frequency limit, the UL and FH parameters must be changed on the panel. I increased them from 50 to 80. See dump-params.mio for a description of non-standard VF-S11 -parameters of my setup. This file is for the +parameters of my setup. This file is for the http://git.mah.priv.at/gitweb/modio.git[modio Modbus interactive utility]. == Programming Note 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+. +in +gs2_vfd+. The Ubuntu +libmodbus5+ and +libmodbus-dev+ packages are only available starting from Ubuntu 12 ('Precise Pengolin'). Moreover, @@ -362,15 +359,12 @@ flags. Therefore, building vfs11_vfd using this library might generate a warning if RTS_MODE= is specified in the ini file. To use the full functionality on lucid and precise: -* remove the libmodbus packages: `sudo apt-get remove libmodbus5 -libmodbus-dev` -* build and install libmodbus version 3 from source as outlined -https://github.com/stephane/libmodbus/blob/master/README.rst[here]. + * remove the libmodbus packages: `sudo apt-get remove libmodbus5 libmodbus-dev` + * build and install libmodbus version 3 from source as outlined + https://github.com/stephane/libmodbus/blob/master/README.rst[here]. Libmodbus does not build on Ubuntu Hardy, hence vfs11_vfd is not available on hardy. // Michael Haberler; loosely based on gs2_vfd by Steve Padnos and John Thornton. - - diff --git a/docs/src/examples/gcode.adoc b/docs/src/examples/gcode.adoc index 89b92641486..01111eeba7c 100644 --- a/docs/src/examples/gcode.adoc +++ b/docs/src/examples/gcode.adoc @@ -1,5 +1,7 @@ -[[cha:gcode-examples]] +:lang: en +:toc: +[[cha:gcode-examples]] = G-Code Examples After you install LinuxCNC several sample files are placed in the @@ -10,41 +12,47 @@ machine before running. === Helical Hole Milling -File Name: useful-subroutines.ngc +- File Name: useful-subroutines.ngc -Description: Subroutine for milling a hole using parameters. +- Description: Subroutine for milling a hole using parameters. === Slotting -File Name: useful-subroutines.ngc +- File Name: useful-subroutines.ngc -Description: Subroutine for milling a slot using parameters. +- Description: Subroutine for milling a slot using parameters. + +image::images/useful-subroutines-ngc.png["Useful subroutines"] === Grid Probe -File Name: gridprobe.ngc +- File Name: gridprobe.ngc -Description: Rectangular Probing +- Description: Rectangular Probing 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. +image::images/gridprobe-ngc.png["Grill probe"] + === Smart Probe -File Name: smartprobe.ngc +- File Name: smartprobe.ngc -Description: Rectangular Probing +- Description: Rectangular Probing 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. +image::images/smartprobe-ngc.png["La grille de palpage plus fine"] + === Tool Length Probe -File Name: tool-length-probe.ngc +- File Name: tool-length-probe.ngc -Description: Tool Length Probing +- Description: Tool Length Probing This program shows an example of how to measure tool lengths automatically using a switch hooked to the probe input. This is useful @@ -53,24 +61,30 @@ different every time it is inserted. === Hole Probe -File Name: probe-hole.ngc +- File Name: probe-hole.ngc -Description: Finding the Center and Diameter of a hole. +- Description: Finding the Center and Diameter of a hole. The program demonstrates how to find the center of a hole, measure the hole diameter and record the results. === Cutter Compensation -To be added +- File Name: comp-g1.ngc + +- Description: Entry and exit movements with compensation of tool radius. + +This program demonstrates the peculiarity of the toolpath without and with +tool radius compensation. The tool radius is taken from the +tool table. == Lathe Examples === Threading -File Name lathe-g76.ngc +- File Name lathe-g76.ngc -Description: Facing, threading and parting off. +- Description: Facing, threading and parting off. This file shows an example of threading on a lathe using parameters. diff --git a/docs/src/examples/gs2-example.adoc b/docs/src/examples/gs2-example.adoc index 0fd56d36e74..12b6b13e2b3 100644 --- a/docs/src/examples/gs2-example.adoc +++ b/docs/src/examples/gs2-example.adoc @@ -1,10 +1,14 @@ -[[cha:gs2-spindle]] +:lang: en +:toc: +[[cha:gs2-spindle]] = GS2 Spindle +== Example + 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. +GS2 VFD to drive a spindle. +The spindle speed and direction is controlled by LinuxCNC. Using the GS2 component involves very little to set up. We start with a Stepconf Wizard generated config. Make sure the pins with "Spindle @@ -13,8 +17,6 @@ screen. In the custom.hal file we place the following to connect LinuxCNC to the GS2 and have LinuxCNC control the drive. - -.GS2 Example ---- # load the user space component for the Automation Direct GS2 VFD's loadusr -Wn spindle-vfd gs2_vfd -r 9600 -p none -s 2 -n spindle-vfd @@ -47,13 +49,11 @@ information on the drive parameters. * The communications switches must be set to RS-232C * The motor parameters must be set to match the motor * P3.00 (Source of Operation Command) must be set to Operation - determined by RS-485 interface, 03 or 04 + determined by RS-485 interface, 03 or 04 * P4.00 (Source of Frequency Command) must be set to Frequency - determined by RS232C/RS485 communication interface, 05 + determined by RS232C/RS485 communication interface, 05 * P9.01 (Transmission Speed) must be set to 9600 baud, 01 * P9.02 (Communication Protocol) must be set to "Modbus RTU mode, - 8 data bits, no parity, 2 stop bits", 03 + 8 data bits, no parity, 2 stop bits", 03 A PyVCP panel based on this example is <>. - - diff --git a/docs/src/examples/mpg.adoc b/docs/src/examples/mpg.adoc index a685b96f527..9468708e8bc 100644 --- a/docs/src/examples/mpg.adoc +++ b/docs/src/examples/mpg.adoc @@ -1,5 +1,7 @@ -[[cha:mpg-pendant]] +:lang: en +:toc: +[[cha:mpg-pendant]] = MPG Pendant This example is to explain how to hook up the common MPG pendants @@ -21,17 +23,18 @@ 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. -.jog.hal +jog.hal + ---- -# Jog Pendant -loadrt encoder num_chan=1 -loadrt mux4 count=1 -addf encoder.capture-position servo-thread -addf encoder.update-counters base-thread +# Jog Pendant +loadrt encoder num_chan=1 +loadrt mux4 count=1 +addf encoder.capture-position servo-thread +addf encoder.update-counters base-thread addf mux4.0 servo-thread -# If your MPG outputs a quadrature signal per click set x4 to 1 -# If your MPG puts out 1 pulse per click set x4 to 0 +# If your MPG outputs a quadrature signal per click set x4 to 1 +# If your MPG puts out 1 pulse per click set x4 to 0 setp encoder.0.x4-mode 0 # For velocity mode, set to 1 @@ -79,7 +82,8 @@ If the machine is capable of high acceleration to smooth out the moves for each click of the MPG use the <> component to limit the acceleration. -.jog.hal with ilowpass +jog.hal with ilowpass + ---- loadrt encoder num_chan=1 loadrt mux4 count=1 @@ -142,4 +146,3 @@ net encoder-counts => axis.x.jog-counts net encoder-counts => axis.y.jog-counts net encoder-counts => axis.z.jog-counts ---- - diff --git a/docs/src/examples/pci-parallel-port.adoc b/docs/src/examples/pci-parallel-port.adoc index e8b599e2760..1653c8efb0f 100644 --- a/docs/src/examples/pci-parallel-port.adoc +++ b/docs/src/examples/pci-parallel-port.adoc @@ -1,5 +1,7 @@ -[[cha:pci-parallel-port]] +:lang: en +:toc: +[[cha:pci-parallel-port]] = PCI Parallel Port When you add a second parallel port to your PCI bus you have to find @@ -17,14 +19,14 @@ else on the PCI bus: ---- 0000:00:10.0 Communication controller: \ - NetMos Technology PCI 1 port parallel adapter (rev 01) - Subsystem: LSI Logic / Symbios Logic: Unknown device 0010 - Flags: medium devsel, IRQ 11 - I/O ports at a800 [size=8] - I/O ports at ac00 [size=8] - I/O ports at b000 [size=8] - I/O ports at b400 [size=8] - I/O ports at b800 [size=8] + NetMos Technology PCI 1 port parallel adapter (rev 01 + Subsystem: LSI Logic / Symbios Logic: Unknown device 0010 + Flags: medium devsel, IRQ 11 + I/O ports at a800 [size=8] + I/O ports at ac00 [size=8] + I/O ports at b000 [size=8] + I/O ports at b400 [size=8] + I/O ports at b800 [size=8] I/O ports at bc00 [size=16] ---- @@ -42,14 +44,12 @@ loadrt hal_parport cfg="0x378 0xa800 in" (Note the double quotes surrounding the addresses.) -and then added the following lines so the parport will be read and written: +and then added the following lines so the parport will be read and written: ---- -addf parport.1.read base-thread +addf parport.1.read base-thread addf parport.1.write base-thread ---- After doing the above then run your config and verify that the parallel port got loaded in Machine/Show HAL Configuration window. - - diff --git a/docs/src/examples/spindle.adoc b/docs/src/examples/spindle.adoc index 727757a40c1..3ad6c9225b2 100644 --- a/docs/src/examples/spindle.adoc +++ b/docs/src/examples/spindle.adoc @@ -1,6 +1,7 @@ -[[cha:spindle-control]] +:lang: en -LinuxCNC can control up to 8 spindles. The number is set in the INI file. +[[cha:spindle-control]] +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 @@ -8,17 +9,15 @@ additional pins exist with names such as spindle.6... = Spindle Control -(((0-10v Spindle Speed Example))) +== 0-10v Spindle Speed(((0-10v Spindle Speed Example))) -== 0-10v Spindle Speed - -If your spindle speed is controlled by an analog signal, +If your spindle speed is controlled by an analog signal, (for example, by a VFD with a 0 to 10 volt signal) and -you're using a DAC card like the m5i20 to output the control signal: +you're using a DAC card like the m5i20 to output the control signal: First you need to figure the scale of spindle speed to control signal. For this example the spindle top speed of 5000 RPM is equal to 10 -volts. +volts. image::images/spindle-math.png[align="center"] @@ -29,22 +28,20 @@ card does not do scaling. ---- loadrt scale count=1 addf scale.0 servo-thread -setp scale.0.gain 0.002 +setp scale.0.gain 0.002 net spindle-speed-scale spindle.0.speed-out => scale.0.in -net spindle-speed-DAC scale.0.out => +net spindle-speed-DAC scale.0.out => ---- -(((PWM Spindle Speed Example))) - -== PWM Spindle Speed +== PWM Spindle Speed (((PWM Spindle Speed Example))) -If your spindle can be controlled by a PWM signal, +If your spindle can be controlled by a PWM signal, use the pwmgen component to create the signal: ---- -loadrt pwmgen output_type=0 +loadrt pwmgen output_type=0 addf pwmgen.update servo-thread -addf pwmgen.make-pulses base-thread +addf pwmgen.make-pulses base-thread net spindle-speed-cmd spindle.0.speed-out => pwmgen.0.value net spindle-on spindle.0.on => pwmgen.0.enable net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out @@ -57,13 +54,11 @@ This assumes that the spindle controller's response to PWM is simple: PWM required to get the spindle to turn, follow the example in the nist-lathe sample configuration to use a scale component. -(((Spindle Enable Example))) +== Spindle Enable (((Spindle Enable Example))) -== Spindle Enable - -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 +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. @@ -71,9 +66,7 @@ pin that is connected to your control device. net spindle-enable spindle.0.on => parport.0.pin-14-out ---- -(((Spindle Direction Example))) - -== Spindle Direction +== Spindle Direction (((Spindle Direction Example))) If you have direction control of your spindle the HAL pins spindle.N.forward and spindle.N.reverse are controlled by M3 @@ -89,38 +82,40 @@ net spindle-fwd spindle.0.forward => parport.0.pin-16-out net spindle-rev spindle.0.reverse => parport.0.pin-17-out ---- -(((Spindle Soft Start Example))) - -== Spindle Soft Start +== Spindle Soft Start (((Spindle Soft Start Example))) 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 +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. In the 0-10 volt example the line - 'net spindle-speed-scale spindle.0.speed-out => scale.0.in' + +---- +net spindle-speed-scale spindle.0.speed-out => scale.0.in +---- + is changed as shown in the following example: .Intro to HAL components limit2 and near: -********************************************************************* -In case you have not run across them before, here's a quick introduction -to the two HAL components used in the following example. +**** +In case you have not run across them before, here's a quick introduction +to the two HAL components used in the following example. -* 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. +* 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. -* A "near" is a HAL component (floating point) with a binary output - that says whether two inputs are approximately equal. +* A "near" is a HAL component (floating point) with a binary output + that says whether two inputs are approximately equal. -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. -********************************************************************* +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. +**** ---- # load real time a limit2 and a near with names so it is easier to follow @@ -141,7 +136,7 @@ net spindle-cmd <= spindle.0.speed-out => spindle-ramp.in # the output of spindle ramp is sent to the scale in net spindle-ramped <= spindle-ramp.out => scale.0.in -# to know when to start the motion we send the near component +# to know when to start the motion we send the near component # (named spindle-at-speed) to the spindle commanded speed from # the signal spindle-cmd and the actual spindle speed # provided your spindle can accelerate at the maxv setting. @@ -155,15 +150,13 @@ net spindle-ready <= spindle-at-speed.out => spindle.0.at-speed == Spindle Feedback -(((Spindle Synchronized Motion Example))) - -=== Spindle Synchronized Motion +=== Spindle Synchronized Motion (((Spindle Synchronized Motion Example))) Spindle feedback is needed by LinuxCNC to perform any spindle coordinated -motions like threading and constant surface speed. +motions like threading and constant surface speed. LinuxCNC can perform synchronised 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. +possible with several spindles simultaneously. The StepConf Wizard can perform the connections for a single-spindle configuration for you if you select Encoder Phase A and Encoder Index as @@ -172,7 +165,7 @@ inputs. Hardware assumptions: * An encoder is connected to the spindle and puts out 100 pulses per - revolution on phase A + revolution on phase A * The encoder A phase is connected to the parallel port pin 10 * The encoder index pulse is connected to the parallel port pin 11 @@ -181,11 +174,11 @@ 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 +it behaves as both an input and an output, see the <> 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.] +that we can get away with 'quadrature' counting without having any +B quadrature input.] ---- # add the encoder to HAL and attach it to threads. @@ -206,20 +199,19 @@ net spindle-index-enable encoder.3.index-enable <=> spindle.0.index-enable # connect the HAL encoder inputs to the real encoder. net spindle-phase-a encoder.3.phase-A <= parport.0.pin-10-in -net spindle-phase-b encoder.3.phase-B +net spindle-phase-b encoder.3.phase-B net spindle-index encoder.3.phase-Z <= parport.0.pin-11-in ---- -(((Spindle At Speed Example))) - -=== Spindle At Speed +[[sec:Vitesse-Broche-Atteinte]] +=== Spindle At Speed(((Spindle At Speed Example))) To enable LinuxCNC to wait for the spindle to be at speed before executing a series of moves. You need to set spindle.N.at-speed to true when the spindle is at the commanded speed. To do 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. +component to determine that the two numbers are close enough. The connections needed are from the spindle velocity command signal to near.n.in1 and from the spindle velocity @@ -227,7 +219,7 @@ 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. +hardware. 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 diff --git a/docs/src/gcode/coordinates.adoc b/docs/src/gcode/coordinates.adoc index 95e0ddefb5f..1c151a603c6 100644 --- a/docs/src/gcode/coordinates.adoc +++ b/docs/src/gcode/coordinates.adoc @@ -1,9 +1,15 @@ -= Coordinate Systems +:lang: en +:toc: [[cha:coordinate-system]] += Coordinate Systems(((Coordinate Systems))) == Introduction +Missing in src/gcode/coordinates.adoc but seems nice in French 1. + +Missing in src/gcode/coordinates.adoc but seems nice in French 2. + This chapter introduces you to offsets as they are used by the LinuxCNC. These include: @@ -12,7 +18,6 @@ These include: * Global Offsets (G92) and Local Offsets (G52) [[sec.machine-coordinate-system]] - == Machine Coordinate System When LinuxCNC is started the positions of each axis is the machine origin. Once @@ -23,11 +28,11 @@ machine coordinate system. == Coordinate Systems +[[fig:decalages-ilots]] .Example of Coordinate Systems -image::images/offsets.png[align="center", alt="Example of Coordinate Systems"] +image::images/offsets.png["Example of Coordinate Systems",align="center"] .Coordinate System Offsets - * G54 - use coordinate system 1 * G55 - use coordinate system 2 * G56 - use coordinate system 3 @@ -59,18 +64,18 @@ etc are better ways to set the variables. .Example of G55 parameters [width="40%",cols="^,^,^",options="header"] -|==== -|Axis | Variable | Value -| X |5241 |2.000000 -| Y |5242 |1.000000 -| Z |5243 |-2.000000 -| A |5244 |0.000000 -| B |5245 |0.000000 -| C |5246 |0.000000 -| U |5247 |0.000000 -| V |5248 |0.000000 -| W |5249 |0.000000 -|==== +|========================== +|Axis | Variable | Value +| X | 5241 | 2.000000 +| Y | 5242 | 1.000000 +| Z | 5243 | -2.000000 +| A | 5244 | 0.000000 +| B | 5245 | 0.000000 +| C | 5246 | 0.000000 +| U | 5247 | 0.000000 +| V | 5248 | 0.000000 +| W | 5249 | 0.000000 +|========================== 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. @@ -122,15 +127,15 @@ revert to the default value of 1.00000 on start up. The G10 L2x command can be used to set coordinate system offsets: -* 'G10 L2 P(1-9)' - Set offset(s) to a value. Current position irrelevant. - (see <> for details) +* 'G10 L2 P(1-9)' - Set offset(s) to a value. Current position irrelevant (see <> for details). -* 'G10 L20 P(1-9)' - Set offset(s) so current position becomes a value. - (see <> for details) +* 'G10 L20 P(1-9)' - Set offset(s) so current position becomes a value (see <> for details). -== Local and Global Offsets[[sec:g52-and-g92-offsets]] +[[sec:g52-and-g92-offsets]] +== Local and Global Offsets -=== The G52 command[[sec:g52]] +[[sec:g52]] +=== The G52 command 'G52' is used in a part program as a temporary "local coordinate system offset" within the workpiece coordinate system. An example use @@ -151,17 +156,16 @@ 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 <> below. +these parameters. +See <> below. [CAUTION] '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 -<> -below. +interactions may result in unexpected offsets. +See <> below. Programming 'G52 X1 Y2' offsets the current workpiece coordinate system X axis by 1 and Y axis by 2. Accordingly, on the DRO, the @@ -176,19 +180,18 @@ not explicitly zeroed will retain the previous offset. 'G52' shares the same offset registers as 'G92', and thus 'G52' is visible on the DRO and preview labeled with 'G92'. -=== The G92 commands[[sec:g92-commands]] +[[sec:g92-commands]] +=== The G92 commands 'G92' is typically used in two conceptually different ways: as a "global coordinate system offset" or as a "local coordinate system offset". The 'G92' set of commands includes: -* 'G92' - This command, when used with axis names, sets values to offset - variables. +* 'G92' - This command, when used with axis names, sets values to offset variables. * 'G92.1' - This command sets zero values to the G92 variables. -* 'G92.2' - This command suspends but does not zero out the G92 - variables. +* 'G92.2' - This command suspends but does not zero out the G92 variables. * 'G92.3' - This command applies offset values that have been suspended. @@ -259,7 +262,8 @@ 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. -=== G92 Persistence Cautions[[sec:g92-persistence-cautions]] +[[sec:g92-persistence-cautions]] +=== G92 Persistence Cautions By default, the values of a 'G92' offset will be saved in the VAR file and be restored after a machine reset or startup. @@ -306,11 +310,12 @@ expect it. Additionally, 'G92' persistence may be disabled by setting 'DISABLE_G92_PERSISTENCE = 1' in the '[RS274NGC]' section of the '.ini' file. -=== G92 and G52 Interaction Cautions[[sec:g92-g52-interaction-cautions]] +[[sec:g92-g52-interaction-cautions]] +=== G92 and G52 Interaction Cautions 'G52' and 'G92' share the same offset registers. Unless 'G92' -persistence is disabled in the '.ini' file (see <>), 'G52' offsets will also persist after machine reset, +persistence is disabled in the '.ini' file (see <>), +'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 <> above. diff --git a/docs/src/gcode/g-code.adoc b/docs/src/gcode/g-code.adoc index bb37298ac3a..91cdd9bd404 100644 --- a/docs/src/gcode/g-code.adoc +++ b/docs/src/gcode/g-code.adoc @@ -1,3 +1,5 @@ +:lang: en + [[cha:g-codes]] = G-Codes @@ -48,9 +50,8 @@ value of parameter 100 were 2, 'G10 L#100' would also mean the same. If 'L-' is written in a prototype the '-' will often be referred to as the 'L number', and so on for any other letter. -== G-Code Quick Reference Table[[gcode:quick-reference-table]] - -(((G-Code Table))) +[[gcode:quick-reference-table]] +== G-Code Quick Reference Table(((G-Code Table))) [width="75%", options="header", cols="2^,5<"] |==================================================================== @@ -114,8 +115,7 @@ as the 'L number', and so on for any other letter. |==================================================================== [[gcode:g0]] -== G0 Rapid Move -(((G0 Rapid Move))) +== G0 Rapid Move(((G0 Rapid Move))) ------------------- G0 axes @@ -158,9 +158,8 @@ It is an error if: * An axis letter is without a real value. * An axis letter is used that is not configured -[[gcode:g1]](((G1 Linear Move))) - -== G1 Linear Move +[[gcode:g1]] +== G1 Linear Move(((G1 Linear Move))) ------------------- G1 axes @@ -196,8 +195,7 @@ It is an error if: * An axis letter is used that is not configured [[gcode:g2-g3]] -== G2, G3 Arc Move -(((G2, G3 Arc Move))) +== G2, G3 Arc Move(((G2, G3 Arc Move))) ---- G2 or G3 axes offsets (center format) @@ -369,7 +367,7 @@ G2 X1 Y1 I1 F10 (clockwise arc in the XY plane) .G2 Example -image::images/g2_en.svg[align="center", alt="G2 Example"] +image::images/g2_en.svg["G2 Example",align="center"] 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 @@ -387,7 +385,7 @@ G3 X0 Y0 I1 J-0.5 F25 (counterclockwise arc in the XY plane) .G2-G3 Example -image::images/g2-3_en.svg[align="center", alt="G2-G3 Example"] +image::images/g2-3_en.svg["G2-G3 Example",align="center"] In the next example we show how the arc can make a helix in the Z axis by adding the Z word. @@ -458,8 +456,7 @@ of Z is 5, this is an arc of a circle parallel to the XY-plane; otherwise it is a helical arc. [[gcode:g4]] -== G4 Dwell -(((G4 Dwell))) +== G4 Dwell(((G4 Dwell))) ---- G4 P- @@ -480,8 +477,7 @@ It is an error if: * the P number is negative or not specified. [[gcode:g5]] -== G5 Cubic Spline -(((G5 Cubic spline))) +== G5 Cubic Spline(((G5 Cubic spline))) ---- G5 X- Y- P- Q- @@ -527,8 +523,7 @@ It is an error if: * The active plane is not G17 [[gcode:g5.1]] -== G5.1 Quadratic Spline -(((G5.1 Quadratic spline))) +== G5.1 Quadratic Spline(((G5.1 Quadratic spline))) ---- G5.1 X- Y- I- J- @@ -556,8 +551,7 @@ It is an error if: * The active plane is not G17 [[gcode:g5.2-g5.3]] -== G5.2 G5.3 NURBS Block -(((G5.2 G5.3 NURBS Block))) +== G5.2 G5.3 NURBS Block(((G5.2 G5.3 NURBS Block))) ---- G5.2 @@ -601,15 +595,14 @@ M2 .Sample NURBS Output -image:images/nurbs01.png[align="center", alt="Sample NURBS Output"] +image:images/nurbs01.png["Sample NURBS Output",align="center"] More information on NURBS can be found here: http://wiki.linuxcnc.org/cgi-bin/wiki.pl?NURBS[http://wiki.linuxcnc.org/cgi-bin/wiki.pl?NURBS] [[gcode:g7]] -== G7 Lathe Diameter Mode -(((G7 Lathe Diameter Mode))) +== G7 Lathe Diameter Mode(((G7 Lathe Diameter Mode))) ---- G7 @@ -621,8 +614,7 @@ 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. [[gcode:g8]] -== G8 Lathe Radius Mode -(((G8 Lathe Radius Mode))) +== G8 Lathe Radius Mode(((G8 Lathe Radius Mode))) ---- G8 @@ -634,8 +626,7 @@ center. Thus a cut at X1 would result in a part that is 2" in diameter. G8 is default at power up. [[gcode:g10-l0]] -== G10 L0 Reload Tool Table Data -(((G10 L0 Reload Tool Table Data))) +== G10 L0 Reload Tool Table Data(((G10 L0 Reload Tool Table Data))) ---- G10 L0 @@ -653,8 +644,7 @@ commands. Existing G43 tool length compensation values will remain in effect until updated by new G43 commands. [[gcode:g10-l1]] -== G10 L1 Set Tool Table -(((G10 L1 Tool Table))) +== G10 L1 Set Tool Table(((G10 L1 Tool Table))) ---- G10 L1 P- axes @@ -683,11 +673,10 @@ It is an error if: * The P number is 0 For more information on cutter orientation used by the 'Q' word, -see the <> diagram. +see the <> diagram. [[gcode:g10-l2]] -== G10 L2 Set Coordinate System -(((G10 L2 Coordinate System))) +== G10 L2 Set Coordinate System(((G10 L2 Coordinate System))) ---- G10 L2 P- @@ -768,8 +757,7 @@ The above example sets the XYZ coordinates of the coordinate system 1 to the mac The coordinate system is described in the <> Section. [[gcode:g10-l10]] -== G10 L10 Set Tool Table -(((G10 L10 Set Tool Table))) +== G10 L10 Set Tool Table(((G10 L10 Set Tool Table))) ---- G10 L10 P- axes @@ -805,8 +793,7 @@ It is an error if: * The P number is 0 [[gcode:g10-l11]] -== G10 L11 Set Tool Table -(((G10 L11 Set Tool Table))) +== G10 L11 Set Tool Table(((G10 L11 Set Tool Table))) ---- G10 L11 P- axes @@ -840,8 +827,7 @@ It is an error if: * The P number is 0 [[gcode:g10-l20]] -== G10 L20 Set Coordinate System -(((G10 L20 Set Coordinate System))) +== G10 L20 Set Coordinate System(((G10 L20 Set Coordinate System))) ---- G10 L20 P- axes @@ -863,8 +849,7 @@ It is an error if: * An axis is programmed that is not defined in the configuration. [[gcode:g17-g19.1]] -== G17 - G19.1 Plane Select -(((G17 - G19.1 Plane Select))) +== G17 - G19.1 Plane Select(((G17 - G19.1 Plane Select))) These codes set the current plane as follows: @@ -884,8 +869,7 @@ The effects of having a plane selected are discussed in Section <> and Section <> [[gcode:g20-g21]] -== G20, G21 Units -(((G20 Units))) +== G20, G21 Units(((G20 Units))) * 'G20' - to use inches for length units. * 'G21' - to use millimeters for length units. @@ -894,8 +878,7 @@ It is a good idea to include units in the preamble of each G-code file. [[gcode:g28-g28.1]] -== G28, G28.1 Go/Set Predefined Position -(((G28 Go/Set Predefined Position))) +== G28, G28.1 Go/Set Predefined Position(((G28 Go/Set Predefined Position))) [WARNING] Only use G28 when your machine is homed to a repeatable position and the @@ -928,8 +911,7 @@ It is an error if : * Cutter Compensation is turned on [[gcode:g30-g30.1]] -== G30, G30.1 Go/Set Predefined Position -(((G30 Go/Set Predefined Position))) +== G30, G30.1 Go/Set Predefined Position(((G30 Go/Set Predefined Position))) [WARNING] Only use G30 when your machine is homed to a repeatable position and the @@ -967,8 +949,7 @@ It is an error if : * Cutter Compensation is turned on [[gcode:g33]] -== G33 Spindle Synchronized Motion -(((G33 Spindle Synchronized Motion))) +== G33 Spindle Synchronized Motion(((G33 Spindle Synchronized Motion))) ---- G33 X- Y- Z- K- $- @@ -998,7 +979,8 @@ 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. -.Technical Info[[gcode:g33-tech-info]] +[[gcode:g33-tech-info]] +.Technical Info 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 @@ -1033,11 +1015,10 @@ It is an error if: * All axis words are omitted. * The spindle is not turning when this command is executed * The requested linear motion exceeds machine velocity limits - due to the spindle speed + due to the spindle speed [[gcode:g33.1]] -== G33.1 Rigid Tapping -(((G33.1 Rigid Tapping))) +== G33.1 Rigid Tapping(((G33.1 Rigid Tapping))) ---------------- G33.1 X- Y- Z- K- I- $- @@ -1060,18 +1041,18 @@ for each revolution of the spindle. A rigid tapping move consists of the following sequence: . 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. + with the selected spindle at the given ratio and starting from the + current coordinate with a spindle index pulse. . 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). . Continued synchronized motion beyond the specified end coordinate - until the spindle actually stops and reverses. + until the spindle actually stops and reverses. . Continued synchronized motion back to the original coordinate. . When reaching the original coordinate, - a command to reverse the spindle a second time - (e.g., from counterclockwise to clockwise). + a command to reverse the spindle a second time + (e.g., from counterclockwise to clockwise). . Continued synchronized motion beyond the original coordinate - until the spindle actually stops and reverses. + until the spindle actually stops and reverses. . An *unsynchronized* move back to the original coordinate. Spindle-synchronized motions wait for spindle index, @@ -1098,8 +1079,7 @@ It is an error if: due to the spindle speed [[gcode:g38]] -== G38.n Straight Probe -(((G38.n Probe))) +== G38.n Straight Probe(((G38.n Probe))) ---- G38.n axes @@ -1163,8 +1143,7 @@ It is an error if: * the probe is already in the target state [[gcode:g40]] -== G40 Compensation Off -(((G40 Cutter Compensation Off))) +== G40 Compensation Off(((G40 Cutter Compensation Off))) * 'G40' - turn cutter compensation off. If tool compensation was on the next move must be a linear move and longer than the tool diameter. @@ -1185,8 +1164,7 @@ It is an error if: * The linear move after turning compensation off is less than the tool diameter. [[gcode:g41-g42]] -== G41, G42 Cutter Compensation -(((G41 G42 Cutter Compensation))) +== G41, G42 Cutter Compensation(((G41 G42 Cutter Compensation))) ---- G41 (left of programmed path) @@ -1238,15 +1216,14 @@ It is an error if: * Cutter compensation is commanded to turn on when it is already on. [[gcode:g41.1-g42.1]] -== G41.1, G42.1 Dynamic Cutter Compensation -(((G41.1 G42.1 Dynamic Compensation))) +== G41.1, G42.1 Dynamic Cutter Compensation(((G41.1 G42.1 Dynamic Compensation))) ---- G41.1 D- (left of programmed path) G42.1 D- (right of programmed path) ---- * 'D' - cutter diameter -* 'L' - tool orientation (see <>) +* 'L' - tool orientation (see <>) 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. @@ -1259,8 +1236,7 @@ It is an error if: * Cutter compensation is commanded to turn on when it is already on. [[gcode:g43]] -== G43 Tool Length Offset -(((G43 Tool Length Offset))) +== G43 Tool Length Offset(((G43 Tool Length Offset))) ---- G43 @@ -1301,10 +1277,8 @@ It is an error if: tool number on nonrandom tool changer machines, it means "the tool currently in the spindle") - [[gcode:g43.1]] -== G43.1 Dynamic Tool Length Offset -(((G43.1 Dynamic Tool Length Offset))) +== G43.1 Dynamic Tool Length Offset(((G43.1 Dynamic Tool Length Offset))) ---- G43.1 axes @@ -1331,8 +1305,7 @@ It is an error if: NOTE: G43.1 does not write to the tool table. [[gcode:g43.2]] -== G43.2 Apply additional Tool Length Offset -(((G43.2 Apply additional Tool Length Offset))) +== G43.2 Apply additional Tool Length Offset(((G43.2 Apply additional Tool Length Offset))) ---- G43.2 H- axes- @@ -1366,8 +1339,7 @@ It is an error if: NOTE: G43.2 does not write to the tool table. [[gcode:g49]] -== G49 Cancel Tool Length Compensation -(((G49 Cancel Tool Length Offset))) +== G49 Cancel Tool Length Compensation(((G49 Cancel Tool Length Offset))) * 'G49' - cancels tool length compensation @@ -1375,10 +1347,8 @@ 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. - [[gcode:g52]] -== G52 Local Coordinate System Offset -(((Local Offsets))) +== G52 Local Coordinate System Offset(((Local Offsets))) ---- G52 axes @@ -1388,10 +1358,8 @@ 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 <> section. - [[gcode:g53]] -== G53 Move in Machine Coordinates -(((G53 Machine Coordinates))) +== G53 Move in Machine Coordinates(((G53 Machine Coordinates))) ---- G53 axes @@ -1418,8 +1386,7 @@ It is an error if: * or G53 is used while cutter compensation is on. [[gcode:g54-g59.3]] -== G54-G59.3 Select Coordinate System -(((G54-G59.3 Select Coordinate System))) +== G54-G59.3 Select Coordinate System(((G54-G59.3 Select Coordinate System))) * 'G54' - select coordinate system 1 * 'G55' - select coordinate system 2 @@ -1459,22 +1426,19 @@ See the <> Section for an overview of c systems. [[gcode:g61]] -== G61 Exact Path Mode -(((G61 G61.1 G64 Path Mode))) +== G61 Exact Path Mode(((G61 G61.1 G64 Path Mode))) * '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. -[[gcode:g61.1]] -== G61.1 Exact Stop Mode +== G61.1 Exact Stop Mode[[gcode:g61.1]] * 'G61.1' - Exact stop mode, movement will stop at the end of each programmed segment. [[gcode:g64]] -== G64 Path Blending -(((G64 Path Blending))) +== G64 Path Blending(((G64 Path Blending))) ---- G64 > @@ -1517,8 +1481,7 @@ It is a good idea to include a path control specification in the preamble of each G-code file. [[gcode:g70]] -== G70 Lathe finishing cycle -(((G70 Lathe finishing cycle))) +== G70 Lathe finishing cycle(((G70 Lathe finishing cycle))) ---- G70 Q- @@ -1560,8 +1523,7 @@ It is an error if: * <> has not been used to select the ZX plane. [[gcode:g71-g72]] -== G71 G72 Lathe roughing cycle -(((G71 G72 Lathe roughing cycle))) +== G71 G72 Lathe roughing cycle(((G71 G72 Lathe roughing cycle))) ---- G71 Q- @@ -1623,8 +1585,7 @@ It is an error if: * <> is active. [[gcode:g73]] -== G73 Drilling Cycle with Chip Breaking -(((G73 Drilling Cycle Chip Break))) +== G73 Drilling Cycle with Chip Breaking(((G73 Drilling Cycle Chip Break))) ---- G73 X- Y- Z- R- Q- @@ -1651,10 +1612,8 @@ It is an error if: * the Q number is negative or zero. * the R number is not specified - [[gcode:g74]] -== G74 Left-hand Tapping Cycle, Dwell -(((G74 Left-hand Tapping Cycle Dwell))) +== G74 Left-hand Tapping Cycle, Dwell(((G74 Left-hand Tapping Cycle Dwell))) ---- G74 (X- Y- Z-) or (U- V- W-) R- L- P- $- F- @@ -1691,16 +1650,14 @@ The length of the dwell is specified by a 'P-' word in the G74 block. The feed r In example S100 with 1.25MM per revolution thread pitch gives a feed of F125. [[gcode:g76]] -== G76 Threading Cycle -(((G76 Threading Cycle))) +== G76 Threading Cycle(((G76 Threading Cycle))) ---- G76 P- Z- I- J- R- K- Q- H- E- L- $- ---- .G76 Threading - -image::images/g76-threads_en.svg[align="center", alt="G76 Threading"] +image::images/g76-threads_en.svg["G76 Threading",align="center"] * 'Drive Line' - A line through the initial X position parallel to the Z. @@ -1821,12 +1778,10 @@ and the exit path on the left from the L2 E0.045. The white lines are the cutting moves. .G76 Example - -image::images/g76-01.png[align="center", alt="G76 Example"] +image::images/g76-01.png["G76 Example",align="center"] [[gcode:g80-g89]] -== Canned Cycles -(((G80-G89 Canned Cycles))) +== Canned Cycles(((G80-G89 Canned Cycles))) The canned cycles 'G81' through 'G89' and the canned cycle stop 'G80' are described in this section. @@ -1891,8 +1846,7 @@ 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 <> Section. -[[gcode:canned-cycle-errors]] -=== Canned Cycle Errors +=== Canned Cycle Errors[[gcode:canned-cycle-errors]] It is an error if: @@ -1914,8 +1868,7 @@ if: If other planes are active, the error conditions are analogous to the XY conditions above. -[[gcode:preliminary-motion]] -=== Preliminary and In-Between Motion +=== Preliminary and In-Between Motion[[gcode:preliminary-motion]] 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, @@ -1993,10 +1946,8 @@ 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. - [[gcode:g80]] -== G80 Cancel Canned Cycle -(((G80 Cancel Modal Motion))) +== G80 Cancel Canned Cycle(((G80 Cancel Modal Motion))) * '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 @@ -2067,8 +2018,7 @@ is not so obvious that all of the blocks between N120 and N200 belong to the canned cycle. [[gcode:g81]] -== G81 Drilling Cycle -(((G81 Drilling Cycle))) +== G81 Drilling Cycle(((G81 Drilling Cycle))) ---- G81 (X- Y- Z-) or (U- V- W-) R- L- @@ -2086,7 +2036,8 @@ The cycle functions as follows: . The Z-axis does a <> to clear Z. -.Example 1 - Absolute Position G81[[gcode:g81-example]] +[[gcode:g81-example]] +.Example 1 - Absolute Position G81 Suppose the current position is (X1, Y2, Z3) and the following line of NC code is interpreted. @@ -2211,8 +2162,7 @@ depth being 0.6 below the R value. The repeat function would make the Z move in the same location again. [[gcode:g82]] -== G82 Drilling Cycle, Dwell -(((G82 Drilling Cycle Dwell))) +== G82 Drilling Cycle, Dwell(((G82 Drilling Cycle Dwell))) ---- G82 (X- Y- Z-) or (U- V- W-) R- L- P- @@ -2232,8 +2182,7 @@ 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. [[gcode:g83]] -== G83 Peck Drilling Cycle -(((G83 Peck Drilling))) +== G83 Peck Drilling Cycle(((G83 Peck Drilling))) ---- G83 (X- Y- Z-) or (U- V- W-) R- L- Q- @@ -2264,8 +2213,7 @@ It is an error if: * the Q number is negative or zero. [[gcode:g84]] -== G84 Right-hand Tapping Cycle, Dwell -(((G84 Right-hand Tapping Cycle Dwell))) +== G84 Right-hand Tapping Cycle, Dwell(((G84 Right-hand Tapping Cycle Dwell))) ---- G84 (X- Y- Z-) or (U- V- W-) R- L- P- $- F- @@ -2302,8 +2250,7 @@ The length of the dwell is specified by a 'P-' word in the G84 block. The feed r In example S100 with 1.25MM per revolution thread pitch gives a feed of F125. [[gcode:g85]] -== G85 Boring Cycle, Feed Out -(((G85 Boring, Feed Out))) +== G85 Boring Cycle, Feed Out(((G85 Boring, Feed Out))) ---- G85 (X- Y- Z-) or (U- V- W-) R- L- @@ -2321,8 +2268,7 @@ for drilling or milling. . Retract at the traverse rate to clear Z. [[gcode:g86]] -== G86 Boring Cycle, Spindle Stop, Rapid Move Out -(((G86 Boring, Spindle Stop, Rapid Move Out))) +== G86 Boring Cycle, Spindle Stop, Rapid Move Out(((G86 Boring, Spindle Stop, Rapid Move Out))) ---- G86 (X- Y- Z-) or (U- V- W-) R- L- P- $- @@ -2355,8 +2301,7 @@ This code is currently unimplemented in LinuxCNC. It is accepted, but the behavior is undefined. [[gcode:g89]] -== G89 Boring Cycle, Dwell, Feed Out -(((G89 Boring, Dwell, Feed Out))) +== G89 Boring Cycle, Dwell, Feed Out(((G89 Boring, Dwell, Feed Out))) ---- G89 (X- Y- Z-) or (U- V- W-) R- L- P- @@ -2373,8 +2318,7 @@ where P specifies the number of seconds to dwell. . Retract the Z-axis at the current feed rate to clear Z. [[gcode:g90-g91]] -== G90, G91 Distance Mode -(((G90, G91 Distance Mode))) +== G90, G91 Distance Mode(((G90, G91 Distance Mode))) * 'G90' - absolute distance mode In absolute distance mode, axis numbers (X, Y, Z, A, B, C, U, V, W) @@ -2401,8 +2345,7 @@ G0 X2.5 (rapid move 2.5 from current position along the X axis) * See <> section for more information. [[gcode:g90.1-g91.1]] -== G90.1, G91.1 Arc Distance Mode -(((Arc Distance Mode))) +== G90.1, G91.1 Arc Distance Mode(((Arc Distance Mode))) * '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 @@ -2412,8 +2355,7 @@ G0 X2.5 (rapid move 2.5 from current position along the X axis) I, J & K to their default behavior. [[gcode:g92]] -== G92 Coordinate System Offset -(((G92 Coordinate System Offset))) +== G92 Coordinate System Offset(((G92 Coordinate System Offset))) ---- G92 axes @@ -2472,8 +2414,7 @@ overview of coordinate systems. See the <> Section for more information. -[[gcode:g92.1-g92.2]] -== G92.1, G92.2 Reset G92 Offsets +== G92.1, G92.2 Reset G92 Offsets[[gcode:g92.1-g92.2]] * 'G92.1' - turn off G92 offsets and reset <> 5211 - 5219 to zero. * 'G92.2' - turn off G92 offsets but keep <> 5211 - 5219 available. @@ -2483,8 +2424,7 @@ G92.1 only clears G92 offsets, to change G53-G59.3 coordinate system offsets in G-code use either <> or <>. [[gcode:g92.3]] -== G92.3 Restore G92 Offsets -(((G92.3 Restore G92 Offsets))) +== G92.3 Restore G92 Offsets(((G92.3 Restore G92 Offsets))) * 'G92.3' - set the G92 offset to the values saved in parameters 5211 to 5219 @@ -2497,8 +2437,7 @@ Use 'G92.3' near the beginning of the second program. That will restore the offsets saved in the first program. [[gcode:g93-g94-g95]] -== G93, G94, G95 Feed Rate Mode -(((G93, G94, G95 Feed Rate Mode))) +== G93, G94, G95 Feed Rate Mode(((G93, G94, G95 Feed Rate Mode))) * '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] @@ -2528,12 +2467,11 @@ to which the feed is synchronised is chosen by the $ parameter It is an error if: * Inverse time feed mode is active and a line with G1, G2, or G3 - (explicitly or implicitly) does not have an F word. + (explicitly or implicitly) does not have an F word. * A new feed rate is not specified after switching to G94 or G95 [[gcode:g96-g97]] -== G96, G97 Spindle Control Mode -(((G96, G97 Spindle Control Mode))) +== G96, G97 Spindle Control Mode(((G96, G97 Spindle Control Mode))) ---- G96 S- <$-> (Constant Surface Speed Mode) @@ -2569,8 +2507,7 @@ It is an error if: * A feed move is specified in G96 mode while the spindle is not turning [[gcode:g98-g99]] -== G98, G99 Canned Cycle Return Level -(((G98, G99 Canned Cycle Return))) +== G98, G99 Canned Cycle Return Level(((G98, G99 Canned Cycle Return))) * 'G98' - retract to the position that axis was in just before this series of one or more contiguous canned cycles was started. diff --git a/docs/src/gcode/gcode_fr.adoc b/docs/src/gcode/gcode_fr.adoc index c86d475f75c..50ef61e2e1d 100644 --- a/docs/src/gcode/gcode_fr.adoc +++ b/docs/src/gcode/gcode_fr.adoc @@ -2007,17 +2007,13 @@ C'est une erreur si: * La valeur de Q est négative ou égale à zéro. -[[sec:G84-Taraudage-a-droite]] -== G84 Cycle de taraudage à droite -(((G84 Cycle de taraudage))) +== G84 Cycle de taraudage à droite[[sec:G84-Taraudage-a-droite]](((G84 Cycle de taraudage))) Ce code n'est pas encore implémenté dans LinuxCNC. Il est accepté mais son comportement n'est pas défini. Voir le <>. -[[sec:G85-Alesage-retrait-travail]] -== G85 Cycle d'alésage, sans temporisation, retrait en vitesse travail -(((G85 Cycle d'alésage))) +== G85 Cycle d'alésage, sans temporisation, retrait en vitesse travail[[sec:G85-Alesage-retrait-travail]](((G85 Cycle d'alésage))) ---- G85 (X- Y- Z-) or (U- V- W-) R- L- diff --git a/docs/src/gcode/m-code.adoc b/docs/src/gcode/m-code.adoc index e78e9173198..20604c0afc5 100644 --- a/docs/src/gcode/m-code.adoc +++ b/docs/src/gcode/m-code.adoc @@ -1,5 +1,6 @@ -[[cha:m-codes]] +:lang: en +[[cha:m-codes]] = M-Codes :ini: {basebackend@docbook:'':ini} @@ -36,10 +37,8 @@ |<> | User Defined M-Codes |======================================== - [[mcode:m0-m1]] -== M0, M1 Program Pause -(((M0, M1 Program Pause))) +== M0, M1 Program Pause(((M0, M1 Program Pause))) * 'M0' - pause a running program temporarily. LinuxCNC remains in the Auto Mode so MDI and other manual actions are not enabled. Pressing the resume @@ -57,8 +56,7 @@ because normal behavior in MDI mode is to stop after each line of input anyway. [[mcode:m2-m30]] -== M2, M30 Program End -(((M2, M30 Program End))) +== M2, M30 Program End(((M2, M30 Program End))) * 'M2' - end the program. Pressing `Cycle Start` ("R" in the Axis GUI) will restart the program at the beginning of the file. @@ -90,8 +88,7 @@ Using % to wrap the G-code does not do the same thing as a 'Program End'. See % does not do. [[mcode:m60]] -== M60 Pallet Change Pause -(((M60 Pallet Change Pause))) +== M60 Pallet Change Pause(((M60 Pallet Change Pause))) * 'M60' - exchange pallet shuttles and then pause a running program temporarily (regardless of the setting of the optional stop @@ -99,15 +96,14 @@ Using % to wrap the G-code does not do the same thing as a 'Program End'. See will restart the program at the following line. [[mcode:m3-m4-m5]] -== M3, M4, M5 Spindle Control -(((M3, M4, M5 Spindle Control))) +== M3, M4, M5 Spindle Control(((M3, M4, M5 Spindle Control))) * 'M3 [$n]' - start the selected spindle clockwise at the 'S' speed. * 'M4 [$n]' - start the selected spindle counterclockwise at the 'S' speed. * 'M5 [$n]' - stop the selected spindle. -Use $ to operate on specific spindles. If $ is omitted then the commands -default to operating on spindle.0 +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. This example will start spindles 0, 1, and 2 simultaneously at different @@ -147,8 +143,7 @@ It is OK to use 'M3' or 'M4' when the spindle is already turning or to use 'M5' when the spindle is already stopped. [[mcode:m6]] -== M6 Tool Change -(((M6-Tool-Change))) +== M6 Tool Change(((M6-Tool-Change))) === Manual Tool Change @@ -191,8 +186,7 @@ changer will have to be setup to perform the tool change in hal and possibly classicladder. [[mcode:m7-m8-m9]] -== M7, M8, M9 Coolant Control -(((M7, M8, M9 Coolant Control))) +== M7, M8, M9 Coolant Control(((M7, M8, M9 Coolant Control))) * 'M7' - turn mist coolant on. M7 controls iocontrol.0.coolant-mist pin. * 'M8' - turn flood coolant on. M8 controls iocontrol.0.coolant-flood pin. @@ -205,8 +199,7 @@ It is OK to use any of these commands, regardless of the current coolant state. [[mcode:m19]] -== M19 Orient Spindle -(((M19 Orient Spindle))) +== M19 Orient Spindle(((M19 Orient Spindle))) * 'M19 R- Q- [P-] [$-]' @@ -235,35 +228,34 @@ ORIENT_OFFSET = 0-360 (fixed offset in degrees added to M19 R word) HAL Pins -* '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. +* '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. -* 'spindle.N.orient-mode' (out s32) -Desired spindle rotation mode. Reflects M19 P parameter word, Default = 0 +* 'spindle.N.orient-mode' (out s32) + + Desired spindle rotation mode. Reflects M19 P parameter word, Default = 0 -* 'spindle.N.orient' (out bit) -Indicates start of spindle orient cycle. Set by M19. Cleared by any of -M3,M4,M5. +* '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. + M19 command fails with an error message. -* 'spindle.N.is-oriented' (in bit) -Acknowledge pin for spindle-orient. Completes orient cycle. If -spindle-orient was true when spindle-is-oriented +* '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. + pin is asserted. Also, the spindle-brake pin is asserted. -* 'spindle.N.orient-fault' (in s32) +* 'spindle.N.orient-fault' (in s32) + Fault code input for orient cycle. Any value other than zero will -cause the orient cycle to abort. + cause the orient cycle to abort. -* 'spindle.N.locked' (out bit) -Spindle orient complete pin. Cleared by any of M3,M4,M5. +* 'spindle.N.locked' (out bit) + + Spindle orient complete pin. Cleared by any of M3,M4,M5. [[mcode:m48-m49]] -== M48, M49 Speed and Feed Override Control -(((M48, M49 Speed and Feed Override Control))) +== M48, M49 Speed and Feed Override Control(((M48, M49 Speed and Feed Override Control))) * 'M48' - enable the spindle speed and feed rate override controls. * 'M49' - disable both controls. @@ -276,8 +268,7 @@ they are already enabled or disabled. See the <> Section for more details. [[mcode:m50]] -== M50 Feed Override Control -(((M50 Feed Override Control))) +== M50 Feed Override Control(((M50 Feed Override Control))) * 'M50 ' - enable the feed rate override control. The P1 is optional. @@ -288,8 +279,7 @@ and the motion will be executed at programmed feed rate. (unless there is an adaptive feed rate override active). [[mcode:m51]] -== M51 Spindle Speed Override Control -(((M51 Spindle Speed Override))) +== M51 Spindle Speed Override Control(((M51 Spindle Speed Override))) * 'M51 <$->'- enable the spindle speed override control for the selected spindle. The P1 is optional. @@ -300,8 +290,7 @@ and the motion will be executed at programmed feed rate. (described in <> Section). [[mcode:m52]] -== M52 Adaptive Feed Control -(((M52 Adaptive Feed Control))) +== M52 Adaptive Feed Control(((M52 Adaptive Feed Control))) * 'M52 ' - use an adaptive feed. The P1 is optional. * 'M52 P0' - stop using adaptive feed. @@ -318,8 +307,7 @@ 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. [[mcode:m53]] -== M53 Feed Stop Control -(((M53 Feed Stop Control))) +== M53 Feed Stop Control(((M53 Feed Stop Control))) * 'M53 ' - enable the feed stop switch. The P1 is optional. Enabling the feed stop switch will allow motion to be @@ -331,8 +319,7 @@ cutters and wire spark eroders but it is not limited to such applications. will have no effect on feed when M53 is not active. [[mcode:m61]] -== M61 Set Current Tool -(((M61 Set Current Tool))) +== M61 Set Current Tool(((M61 Set Current Tool))) * 'M61 Q-' - change the current tool number without a tool change. One use is when you power up LinuxCNC with a tool currently in the spindle, @@ -349,8 +336,7 @@ It is an error if: * Q- is not 0 or greater [[mcode:m62-m65]] -== M62 - M65 Digital Output Control -(((M62 - M65 Digital Output Control))) +== M62 - M65 Digital Output Control(((M62 - M65 Digital Output Control))) * 'M62 P-' - turn on digital output synchronized with motion. The P- word specifies the digital output number. @@ -388,8 +374,7 @@ M62-65 will not function unless the appropriate motion.digital-out-nn pins are connected in your hal file to outputs. [[mcode:m66]] -== M66 Wait on Input -(((M66 Wait on Input))) +== M66 Wait on Input(((M66 Wait on Input))) ---- M66 P- | E- @@ -397,12 +382,12 @@ M66 P- | E- * 'P-' - specifies the digital input number from 0 to 3. * 'E-' - specifies the analog input number from 0 to 3. * 'L-' - specifies the wait mode type. -** 'Mode 0: IMMEDIATE' - no waiting, returns immediately. - The current value of the input is stored in parameter #5399 -** 'Mode 1: RISE' - waits for the selected input to perform a rise event. -** 'Mode 2: FALL' - waits for the selected input to perform a fall event. -** 'Mode 3: HIGH' - waits for the selected input to go to the HIGH state. -** 'Mode 4: LOW' - waits for the selected input to go to the LOW state. +** 'Mode 0: IMMEDIATE' - no waiting, returns immediately. + The current value of the input is stored in parameter #5399 +** 'Mode 1: RISE' - waits for the selected input to perform a rise event. +** 'Mode 2: FALL' - waits for the selected input to perform a fall event. +** 'Mode 3: HIGH' - waits for the selected input to go to the HIGH state. +** 'Mode 4: LOW' - waits for the selected input to go to the LOW state. * '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). @@ -437,8 +422,7 @@ net signal-name motion.digital-in-00 <= parport.0.pin10-in ---- [[mcode:m67]] -== M67 Analog Output,Synchronized -(((M67 Analog Output, Synchronized))) +== M67 Analog Output,Synchronized(((M67 Analog Output, Synchronized))) ---- M67 E- Q- @@ -462,8 +446,7 @@ M67 will not function unless the appropriate motion.analog-out-nn pins are connected in your hal file to outputs. [[mcode:m68]] -== M68 Analog Output, Immediate -(((M68 Analog Output))) +== M68 Analog Output, Immediate(((M68 Analog Output))) ---- M68 E- Q- @@ -485,8 +468,7 @@ M68 will not function unless the appropriate motion.analog-out-nn pins are connected in your hal file to outputs. [[mcode:m70]] -== M70 Save Modal State -(((M70 Save Modal State))) +== M70 Save Modal State(((M70 Save Modal State))) 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 @@ -497,7 +479,6 @@ protect a program against inadvertent modal changes within subroutines. [[mcode:m70-saved-state]] - The state saved consists of: * current G20/G21 settings (imperial/metric) @@ -536,8 +517,7 @@ Note that in particular, the motion mode (G1 etc) is NOT restored. A recursive invocation of a subroutine introduces a new call level. [[mcode:m71]] -== M71 Invalidate Stored Modal State -(((M71 Invalidate Stored Modal State))) +== M71 Invalidate Stored Modal State(((M71 Invalidate Stored Modal State))) Modal state saved with an 'M70' or by an 'M73' at the current call level is invalidated (cannot be restored from anymore). @@ -551,8 +531,7 @@ The usefulness of this feature is dubious. It should not be relied upon as it mi go away. [[mcode:m72]] -== M72 Restore Modal State -(((M72 Restore Modal State))) +== M72 Restore Modal State(((M72 Restore Modal State))) <> code can be restored by executing an 'M72'. @@ -605,8 +584,7 @@ m2 ---- [[mcode:m73]] -== M73 Save and Autorestore Modal State -(((M73 Save and Autorestore Modal State))) +== M73 Save and Autorestore Modal State(((M73 Save and Autorestore Modal State))) To save modal state within a subroutine, and restore state on subroutine 'endsub' or any 'return' path, program 'M73'. @@ -657,11 +635,11 @@ m2 ---- [[mcode:m98-m99]] -== M98 and M99 == +== M98 and M99 The interpreter supports Fanuc-style main- and sub-programs with the -'M98' and 'M99' M-codes. See <>. +'M98' and 'M99' M-codes. +See <>. === Selectively Restoring Modal State @@ -695,8 +673,7 @@ O endsub ---- [[mcode:m100-m199]] -== M100 - M199 User Defined Commands -(((M100 - M199 User Defined Commands))) +== M100 - M199 User Defined Commands(((M100 - M199 User Defined Commands))) ---- M1-- diff --git a/docs/src/gcode/m-code_es.adoc b/docs/src/gcode/m-code_es.adoc index e54872c9bf2..6e6493f7725 100644 --- a/docs/src/gcode/m-code_es.adoc +++ b/docs/src/gcode/m-code_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:m-codes]] - = Códigos M :ini: {basebackend@docbook:'':ini} diff --git a/docs/src/gcode/m-code_fr.adoc b/docs/src/gcode/m-code_fr.adoc index 17cfb209743..cebdb04001e 100644 --- a/docs/src/gcode/m-code_fr.adoc +++ b/docs/src/gcode/m-code_fr.adoc @@ -1,9 +1,8 @@ :lang: fr :toc: -= Les M-codes - [[cha:M-codes]] += Les M-codes :ini: {basebackend@docbook:'':ini} :hal: {basebackend@docbook:'':hal} diff --git a/docs/src/gcode/machining-center.adoc b/docs/src/gcode/machining-center.adoc index e4fcf26c9df..79e91677b69 100644 --- a/docs/src/gcode/machining-center.adoc +++ b/docs/src/gcode/machining-center.adoc @@ -1,6 +1,8 @@ -[[cha:cnc-machine-overview]] +:lang: en +:toc: -= CNC Machine Overview +[[cha:cnc-machine-overview]] += CNC Machine Overview(((Machine Overview))) This section gives a brief description of how a CNC machine is viewed from the input and output ends of the Interpreter. @@ -14,20 +16,28 @@ 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. -=== Axes +=== Axes(((axes))) 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. footnote:[If the -motion of mechanical components is not independent, as with +kinematics rather than by a second linear axis. + +NOTE: +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'.] +This is called 'kinematics'. + +NOTE: +Avec LinuxCNC, le cas de la machine à portique XYYZ avec deux +moteurs pour un axe est mieux traité par la cinématique que par un +axe linéaire supplémentaire. .Primary Linear Axes (((axes, primary linear))) @@ -35,13 +45,11 @@ The X, Y, and Z axes produce linear motion in three mutually orthogonal directions. .Secondary Linear Axes (((axes, secondary linear))) - 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. .Rotational Axes (((axes, rotational))) - 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. @@ -53,14 +61,14 @@ 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. +directions. -=== Coolant (((coolant))) +=== Coolant(((coolant))) If a CNC machine has components to provide mist coolant and/or flood coolant they can be controlled by G-codes. -=== Feed and Speed Override +=== Feed and Speed Override(((correcteurs vitesse)))(((correcteur vitesse broche))) A CNC machine can have separate feed and speed override controls, which let the operator specify that the actual feed rate or spindle @@ -68,13 +76,13 @@ speed used in machining at some percentage of the programmed rate. === Block Delete Switch -A CNC machine can have a block delete switch. See the -<> Section. +A CNC machine can have a block delete switch. +See the <> Section. === Optional Program Stop Switch -A CNC machine can have an optional program stop switch. See the -<> Section. +A CNC machine can have an optional program stop switch. +See the <> Section. == Control and Data Components @@ -108,7 +116,8 @@ 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.] -=== Controlled Point +[[sec:controlled-point]] +=== Controlled Point(((Controlled Point))) The controlled point is the point whose position and rate of motion are controlled. When the tool length offset is zero (the default @@ -124,11 +133,12 @@ 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). +[[sec:Mouvement-lineaire-coordonne]] === Coordinated Linear Motion 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 +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 @@ -145,9 +155,8 @@ 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. -[[sub:feed-rate]](((Feed Rate))) - -=== Feed Rate +[[sub:feed-rate]] +=== Feed Rate(((Feed Rate))) 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 @@ -155,31 +164,31 @@ rate is interpreted as follows (unless 'inverse time feed' or 'feed per revolution' modes are being used, in which case see Section <>). - . If any of XYZ are moving, F is in units per minute in the XYZ + . 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. - . Otherwise, if any of UVW are moving, F is in units per minute in the + stop in coordinated fashion. + . 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. - . Otherwise, the move is pure rotary motion and the F word is in rotary + stop in coordinated fashion. + . Otherwise, the move is pure rotary motion and the F word is in rotary units in the ABC 'pseudo-cartesian' system. -=== Coolant (((coolant))) +=== Coolant(((coolant))) Flood coolant and mist coolant may each be turned on independently. -The RS274/NGC language turns them off together see Section +The RS274/NGC language turns them off together see Section <>. -=== Dwell (((dwell))) +=== Dwell(((dwell))) 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 +dwell. Regardless of the Path Control Mode (see Section <>) the machine will stop exactly at the end of the previous programmed move, as though it was in exact path mode. -=== Units (((units))) +=== Units(((units))) 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 @@ -187,19 +196,19 @@ 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 -<>. +minute, or length units per spindle revolution, as described in Section +<>. === Current Position -The controlled point is always at some location called the 'current -position', and the controller always knows where that is. The numbers +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: . Length units are changed. . Tool length offset is changed. - . Coordinate system offsets are changed. + . Coordinate system offsets are changed. === Selected Plane @@ -220,20 +229,38 @@ A machining center may be commanded to change tools. The two pallets may be exchanged by command. -[[sec:path-control-mode]](((Path Control Mode))) +=== Boutons des correcteurs de vitesses -=== Path Control Mode +Taken from the _fr.adoc: Les boutons des correcteurs de vitesses peuvent être activés (ils +fonctionnent normalement) ou rendus inopérants (Ils n'ont plus aucun +effet). Le langage RS274/NGC dispose d'une commande qui active tous les +boutons et une autre qui les désactive. Voir l'inhibition et l'activation +<>. +Voir également <>. -The machining center may be put into any one of three path control -modes: (1) exact stop mode, (2) exact path mode, or (3) continuous mode -with optional tolerance. In exact stop mode, the machine stops briefly -at the end of each programmed move. 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. 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). See -Sections <> and <>. +[[sec:path-control-mode]] +=== Path Control Mode(((Path Control Mode))) +The machining center may be put into any one of three path control +modes: + +* exact stop mode:: + In exact stop mode, the machine stops briefly at the end of each + programmed move. +* exact path mode:: + 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. +* continuous mode:: + 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). + +See Sections <> and <>. + +[[sec:Interaction-vitesses]](((Interraction vitesse))) +[[sec:Interaction-effacement-de-bloc]](((effacement de bloc))) +[[sec:Interaction-arrets-optionnels]](((Arrêts optionnels))) == Interpreter Interaction with Switches The Interpreter interacts with several switches. This section @@ -244,18 +271,15 @@ Interpreter know what the setting of any of these switches is. 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 +moves, such as the traverse out of the end of a thread during a threading cycle, the switches are disabled automatically. LinuxCNC reacts to the speed and feed override settings when these switches are enabled. -See the <> section for more -information. +See the <> section for more information. [[sub:block-delete-switch]] - === Block Delete Switch If the block delete switch is on, lines of G-code which start @@ -264,17 +288,17 @@ switch is off, such lines are interpreted. Normally the block delete switch should be set before starting the NGC program. [[sub:optional-program-stop]] - === Optional Program Stop Switch If this switch is on and an M1 code is encountered, program execution is paused. -== Tool Table +[[sec:Tool-Table]] +== Tool Table(((Tool-Table))) -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: +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: ---- [EMCIO] @@ -283,9 +307,9 @@ each tool is. The name of the tool table is defined in the ini file: TOOL_TABLE = tooltable.tbl ---- -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: +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: ---- TOOL_TABLE = acme_300.tbl @@ -297,10 +321,11 @@ or TOOL_TABLE = EMC-AXIS-SIM.tbl ---- -For more information on the specifics of the tool table format, -see the <> Section. +For more information on the specifics of the tool table format, see the +<> Section. -== Parameters +[[sec:parametres]] +== Parameters(((Parameters))) In the RS274/NGC language view, a machining center maintains an array of numerical parameters defined by a system definition @@ -309,9 +334,8 @@ 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. +Interpreter the responsibility for maintaining the file. The Interpreter +reads the file when it starts up, and writes the file when it exits. All parameters are available for use in G-code programs. @@ -320,7 +344,7 @@ 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 +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. @@ -332,7 +356,7 @@ 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 +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 @@ -345,13 +369,11 @@ 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. .Parameter File Format - [width="75%", options="header", cols="^,^,<"] -|======================================== +|=== |Parameter Number | Parameter Value | Comment -|5161 | 0.0 | G28 Home X -|5162 | 0.0 | G28 Home Y -|======================================== +|5161 | 0.0 | G28 Home X +|5162 | 0.0 | G28 Home Y +|=== See the <> section for more information. - diff --git a/docs/src/gcode/o-code.adoc b/docs/src/gcode/o-code.adoc index 046659e79d7..ebb869aab25 100644 --- a/docs/src/gcode/o-code.adoc +++ b/docs/src/gcode/o-code.adoc @@ -1,6 +1,10 @@ +:lang: en +:toc: + [[cha:o-codes]] += O Codes(((O Codes))) -= O Codes +== Use of O-codes 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 @@ -9,8 +13,10 @@ number zero as the first character in the number like O100 or o100. == Numbering -Numbered O codes must have a unique number for each subroutine, +Numbered O codes must have a unique number for each subroutine, + .Numbering Example + ---- (the start of o100) o100 sub @@ -26,8 +32,7 @@ o100 endsub ---- [[ocode:comments]] -== Comments -(((Comments))) +== Comments(((Comments))) Comments on the same line as the O word should not be used as the behavior can change in the future. @@ -39,13 +44,12 @@ The behavior is undefined if: * Comments are used on a line with an O-word [NOTE] -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. +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'. [[ocode:subroutines]] -== Subroutines -(((Subroutines))) +== Subroutines(((Subroutines))) 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 @@ -61,8 +65,8 @@ o100 endsub o100 call M2 ---- -See <> & <> & <> sections for more -information. + +See <>, <> and <> sections for more information. .O- Return Inside a subroutine, 'O- return' can be executed. This immediately @@ -80,21 +84,19 @@ o100 sub (DEBUG, parameter 1 is [#1]) o100 endsub ---- -See the <> & <> sections for more information. +See the <> and <> sections for more information. .O- Call -'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 +'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. 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: +enclosed in square brackets. The following calls a subroutine with 3 arguments: .O- Call Example ---- @@ -122,8 +124,7 @@ be visible to the calling code. Subroutines may also change the value of global named parameters. [[ocode:fanuc-style-programs]] -=== Fanuc-Style Numbered Programs === -(((Subroutines, M98, M99))) +=== Fanuc-Style Numbered Programs(((Subroutines, M98, M99))) Numbered programs (both main and subprograms), the 'M98' call and 'M99' return M-codes, and their respective semantic differences are an @@ -131,11 +132,9 @@ alternative to the rs274ngc subroutines described above, provided for compatibility with Fanuc and other machine controllers. 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. +placing `DISABLE_FANUC_STYLE_SUB = 1` in the `[RS274NGC]` section of the `.ini` file. [NOTE] - 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 @@ -153,32 +152,32 @@ o100 ; Beginning of subprogram 100 M99 ; Return from subprogram 100 ---- -.`o1 (Title)` +.'o1 (Title)' 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. -.`M98 P- ` +.'M98 P- ' 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. -.`M30` +.'M30' The main program must be terminated with `M02` or `M30` (or `M99`; see below). -.`O-` subprogram definition start +.'O-' subprogram definition start 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. -.`M99` return from numbered subroutine +.'M99' return from numbered subroutine The block `M99` is analogous to the traditional `o100 endsub` syntax, but may only terminate a numbered program (`o100` in this example), @@ -188,22 +187,20 @@ syntax. The `M98` subprogram call differs from rs274ngc `O call` in the following ways: -* 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. +* 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. * 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. + 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. * `M98` subprogram calls have no return value. -* `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. +* `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. In rare cases, the `M99` M-code may be used to terminate the main program, where it indicates an 'endless program'. When the @@ -244,8 +241,7 @@ 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`. [[ocode:looping]] -== Looping -(((Subroutines, Looping))) +== Looping(((Subroutines, Looping))) The 'while loop' has two structures: 'while/endwhile', and 'do/while'. In each case, the loop is exited when the 'while' condition evaluates to @@ -290,15 +286,14 @@ condition. If it is still true, the loop begins again at the top. If it is false, it exits the loop. [[ocode:conditional]] -== Conditional -(((Subroutines, Conditional Loops))) +== Conditional(((Subroutines, Conditional Loops))) 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'. If the 'if' conditional evaluates to true then the group of statements -following the 'if' up to the next conditional line are executed. +following the 'if' up to the next conditional line are executed. 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 @@ -347,15 +342,14 @@ O102 endif ---- [[ocode:repeat]] -== Repeat -(((Subroutines, Repeat Loop))) +== Repeat(((Subroutines, Repeat Loop))) 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. -.Repeat Example +.Example with 'repeat' ---- (Mill 5 diagonal shapes) G91 (Incremental mode) @@ -367,8 +361,7 @@ G90 (Absolute mode) ---- [[ocode:indirection]] -== Indirection -(((Indirection))) +== Indirection(((Indirection))) The O-number may be given by a parameter and/or calculation. @@ -386,8 +379,7 @@ For more information on computing values see the following sections * <> [[ocode:calling-files]] -== Calling Files -(((Calling Files))) +== Calling Files(((Calling Files))) 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 @@ -435,14 +427,13 @@ o123 endsub [3 * 4] ---- A subroutine return value is stored in the '#<_value>' -<> , and +<> , 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. [[ocode:errors]] -== Errors -(((O-Code Errors))) +== Errors(((O-Code Errors))) The following statements cause an error message and abort the interpreter: @@ -455,9 +446,9 @@ interpreter: - a label on `else`, `elseif` or `endif` not pointing to a matching `if` - a label on `break` or `continue` which does not point to a matching `while` or `do` - a label on `endrepeat` or `endwhile` no referring to a corresponding `while` or `repeat` - -To make these errors non-fatal warnings on stderr, set bit 0x20 in -the `[RS274NGC]FEATURE=` mask ini option. +To make these errors non-fatal warnings on stderr, set bit 0x20 in +the `[RS274NGC]FEATURE=` mask ini option. // vim: set syntax=asciidoc: + diff --git a/docs/src/gcode/other-code.adoc b/docs/src/gcode/other-code.adoc index 16046ee0446..c5c83fe6f26 100644 --- a/docs/src/gcode/other-code.adoc +++ b/docs/src/gcode/other-code.adoc @@ -1,10 +1,11 @@ -[[cha:other-codes]] +:lang: en +:toc: -= Other Codes +[[cha:other-codes]] += Other Codes(((Other Codes))) [[sec:set-feed-rate]] -== F: Set Feed Rate -(((F: Set Feed Rate))) +== F: Set Feed Rate(((F: Set Feed Rate))) 'Fx' - set the feed rate to 'x'. 'x' is usually in machine units (inches or millimeters) per minute. @@ -15,8 +16,7 @@ or 'feed per revolution mode' are in effect, in which case the feed rate is as described in the <> Section. [[sec:set-spindle-speed]] -== S: Set Spindle Speed -(((S: Set Spindle Speed))) +== S: Set Spindle Speed(((S: Set Spindle Speed))) '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 $ @@ -25,7 +25,7 @@ the command will default to spindle.0 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. +be different from what is programmed. It is OK to program S0, the spindle will not turn if that is done. @@ -33,9 +33,15 @@ It is an error if: * the S number is negative. +Introduced in _fr: Comme décrit dans la section (G84-Taraudage-a-droite) sur le cycle de +taraudage à droite>>, si un cycle de perçage 'G84' (taraudage) est actif et que +les potentiomètres de vitesse et d'avance sont autorisés, celui qui a le +réglage le plus bas sera utilisé. La vitesse de rotation et d'avance resterons +synchronisées. Dans ce cas, la vitesse peut différer de celle programmée, même +si le potentiomètre de correction de vitesse travail est sur 100%. + [[sec:select-tool]] -== T: Select Tool -(((T: Select Tool))) +== T: Select Tool(((T: Select Tool))) 'Tx' - prepare to change to tool 'x'. @@ -46,13 +52,13 @@ lines with no tool change. Only the the most recent T word will take effect at the next tool change. NOTE: When LinuxCNC is configured for a nonrandom toolchanger (see -the entry for RANDOM_TOOLCHANGER in the <>), 'T0' gets special handling: no tool will be selected. This +the entry for RANDOM_TOOLCHANGER in the <>), +'T0' gets special handling: no tool will be selected. This is useful if you want the spindle to be empty after a tool change. NOTE: When LinuxCNC is configured for a random toolchanger (see -the entry for RANDOM_TOOLCHANGER in the <>), 'T0' does not get any special treatment: T0 is a valid +the entry for RANDOM_TOOLCHANGER in the <>), +'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. @@ -60,10 +66,9 @@ toolchanger machine and unloads the spindle. It is an error if: * a negative T number is used, - -* 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). +* 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). On some machines, the carousel will move when a T word is programmed, at the same time machining is occurring. On such machines, programming diff --git a/docs/src/gcode/overview.adoc b/docs/src/gcode/overview.adoc index 208fff289bf..bd7b57cb187 100644 --- a/docs/src/gcode/overview.adoc +++ b/docs/src/gcode/overview.adoc @@ -1,5 +1,6 @@ -[[cha:g-code-overview]] +:lang: en +[[cha:g-code-overview]] = G-Code Overview :ini: {basebackend@docbook:'':ini} @@ -72,9 +73,8 @@ 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. -[[sub:block-delete]](((Block Delete))) - -=== Block Delete +[[sub:block-delete]] +=== Block Delete(((Block Delete))) 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 @@ -167,10 +167,8 @@ 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. - -[[gcode:parameters]](((Parameters))) - -== Parameters +[[gcode:parameters]] +== Parameters(((Parameters))) The RS274/NGC language supports 'parameters' - what in other programming languages would be called 'variables'. There are several @@ -237,7 +235,6 @@ are read/write (can be assigned a value). running version. They are read-only. [[sub:numbered-parameters]] - === Numbered Parameters A numbered parameter is the pound character '#' followed by an @@ -386,7 +383,6 @@ The original file is saved as a backup file when the new file is written. [[gcode:format-parameter-file]] - .Parameter File Format [width="90%", options="header"] @@ -397,7 +393,6 @@ is written. |==== [[sub:subroutine-parameters]] - === Subroutine Parameters * '1-30' Subroutine local parameters of call arguments. These parameters are @@ -456,7 +451,6 @@ ends, and have these values when the program is run again. The <> tests whether a given named parameter exists. [[gcode:predefined-named-parameters]] - === Predefined Named Parameters The following global read only named parameters are available to @@ -576,7 +570,6 @@ can be added easily without changes to the source code. Return 1 if G99 is on, else 0. [[sub:system-parameters]] - === System Parameters * '#<_spindle_rpm_mode>' - @@ -706,7 +699,6 @@ can be added easily without changes to the source code. to the remap level. For debugging. [[gcode:ini-hal-params]] - == HAL pins and INI values If enabled in the <> G-code has access to the values of INI file entries and HAL pins. @@ -780,7 +772,6 @@ non-mnemonic namespace and is unnecessarily cumbersome just as a UI/Interpreter communications mechanism. [[gcode:expressions]] - == Expressions An expression is a set of characters starting with a left bracket '[' @@ -792,7 +783,6 @@ is read, before anything on the line is executed. An example of an expression is '[1 + acos[0] - [#3 ** [4.0/2]]]'. [[gcode:binary-operators]] - == Binary Operators Binary operators only appear inside expressions. There are four basic @@ -842,7 +832,6 @@ difference is less than 0.0001 (this value is defined as 'TOLERANCE_EQUAL' in src/emc/rs274ngc/interp_internal.hh). [[gcode:functions]] - == Functions The available functions are shown in following table. Arguments to unary @@ -1027,9 +1016,8 @@ It is an error if: * An incremental move is started at the origin * A mix of Polar and X or Y words are used -[[gcode:modal-groups]](((Modal Groups))) - -== Modal Groups +[[gcode:modal-groups]] +== Modal Groups(((Modal Groups))) 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 @@ -1039,8 +1027,8 @@ 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. -.G-Code Modal Groups[[cap:modal-groups]] - +[[cap:modal-groups]] +.G-Code Modal Groups [width="80%", cols="4,6", options="header"] |==== |Modal Group Meaning | Member Words @@ -1171,22 +1159,19 @@ Examples of logging are in 'nc_files/examples/smartprobe.ngc' and in 'nc_files/ngcgui_lib/rectange_probe.ngc' sample G-code files. [[gcode:debug]] -== Debug Messages -(((Debug Messages))) +== Debug Messages(((Debug Messages))) * '(DEBUG,)' - displays a message like '(MSG,)' with the addition of special handling for comment parameters as described below. [[gcode:print]] -== Print Messages -(((Print Messages))) +== Print Messages(((Print Messages))) * '(PRINT,)' - messages are output to 'stderr' with special handling for comment parameters as described below. [[gcode:comment-parameters]] -== Comment Parameters -(((Comment Parameters))) +== Comment Parameters(((Comment Parameters))) In the DEBUG, PRINT and LOG comments, the values of parameters in the message are expanded. @@ -1207,7 +1192,6 @@ will have white space removed from them. So, '\#' will be converted to '#'. [[gcode:file-requirements]] - == File Requirements A G-code file must contain one or more lines of G-code and be terminated @@ -1242,7 +1226,6 @@ part programs. In Axis sections of the preview can be turned off using <> comments. [[gcode:order-of-execution]](((G-Code Order of Execution))) - == G-Code Order of Execution The order of execution of items on a line is defined not by the diff --git a/docs/src/gcode/overview_es.adoc b/docs/src/gcode/overview_es.adoc index f88a7d2b5cc..dc5b9f89af3 100644 --- a/docs/src/gcode/overview_es.adoc +++ b/docs/src/gcode/overview_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:g-code-overview]] - = Descripcion general del codigo G :ini: {basebackend@docbook:'':ini} diff --git a/docs/src/gcode/overview_fr.adoc b/docs/src/gcode/overview_fr.adoc index 51f96109011..aa55cbef6cb 100644 --- a/docs/src/gcode/overview_fr.adoc +++ b/docs/src/gcode/overview_fr.adoc @@ -1,9 +1,8 @@ :lang: fr :toc: -= Vue générale du langage G-codes de LinuxCNC - [[cha:Vue-generale-G-code]] += Vue générale du langage G-codes de LinuxCNC :ini: {basebackend@docbook:'':ini} :hal: {basebackend@docbook:'':hal} diff --git a/docs/src/gcode/rs274ngc.adoc b/docs/src/gcode/rs274ngc.adoc index f340421d3e5..a3dd5c06ae1 100644 --- a/docs/src/gcode/rs274ngc.adoc +++ b/docs/src/gcode/rs274ngc.adoc @@ -1,5 +1,7 @@ -[[cha:rs274ngc-programs]] +:lang: en +:toc: +[[cha:rs274ngc-programs]] = RS274/NGC Differences == Changes from RS274/NGC @@ -39,13 +41,14 @@ future release of LinuxCNC. G28, G30 with axis words:: -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: -+ -G0 X- Y- (axes to move to intermediate point) G28 (move all axes -to predefined point) +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: +---- +G0 X- Y- (axes to move to intermediate point) +G28 (move all axes to predefined point) +---- == Additions to RS274/NGC diff --git a/docs/src/gcode/tool-compensation.adoc b/docs/src/gcode/tool-compensation.adoc index f53eb7893c5..e8c7121b941 100644 --- a/docs/src/gcode/tool-compensation.adoc +++ b/docs/src/gcode/tool-compensation.adoc @@ -1,6 +1,7 @@ -[[cha:tool-compensation]] +:lang: en -= Tool Compensation +[[cha:tool-compensation]] += Tool Compensation Title(((Tool Compensation))) == Tool Length Offsets @@ -12,10 +13,8 @@ tool table automatically. Typical steps for updating the tool table: * After homing load a tool with 'Tn M6' where 'n' is the tool number. -* Move tool to an established point using a gauge or take a test cut and - measure. -* Click the "Touch Off" button in the Manual Control tab (or hit the - End button on your keyboard). +* Move tool to an established point using a gauge or take a test cut and measure. +* Click the "Touch Off" button in the Manual Control tab (or hit the End button on your keyboard). * Select 'Tool Table' in the Coordinate System drop down box. * Enter the gauge or measured dimension and select OK. @@ -26,26 +25,19 @@ available when a tool is loaded with 'Tn M6'. .Touch Off Tool Table -image::images/ToolTable-TouchOff.png[align="center", alt="Touch Off Tool Table"] +//image::images/ToolTable-TouchOff.png["Touch Off Tool Table",align="center"] === Using G10 L1/L10/L11 The G10 L1/L10/L11 commands can be used to set tool table offsets: -* 'G10 L1 Pn' - Set offset(s) to a value. Current position irrelevant. - (see <> for details) - -* 'G10 L10 Pn' - Set offset(s) so current position w/ fixture 1-8 becomes a value. - (see <> for details) - -* 'G10 L11 Pn' - Set offset(s) so current position w/ fixture 9 becomes a value. - (see <> for details) +* 'G10 L1 Pn' - Set offset(s) to a value. Current position irrelevant (see <> for details). +* 'G10 L10 Pn' - Set offset(s) so current position w/ fixture 1-8 becomes a value (see <> for details). +* 'G10 L11 Pn' - Set offset(s) so current position w/ fixture 9 becomes a value (see <> for details). [[sec:tool-table]] - == Tool Table - 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 @@ -53,20 +45,21 @@ 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 <> Section for an example of -the lathe tool table format. The maximum pocket number is 1000. +the lathe tool table format. The maximum pocket number is 1000. The <> 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 +tool table. If you use a text editor make sure you reload the tool table in the GUI. -=== Tool Table Format -(((Tool-Table-Format))) +[[sec:Table-Outils]] +=== Tool Table Format(((Tool-Table-Format))) .Tool Table Format [width="100%", options="header"] |==== |T# |P# |X |Y |Z |A |B |C |U |V |W |Dia |FA |BA |Ori |Rem +|; 15+^|(sin datos después de punto y coma) |T1 |P17 |X0 |Y0 |Z0 |A0 |B0 |C0 |U0 |V0 |W0 |D0 |I0 |J0 |Q0 |;rem |T2 |P5 |X0 |Y0 |Z0 |A0 |B0 |C0 |U0 |V0 |W0 |D0 |I0 |J0 |Q0 |;rem |T3 |P12 |X0 |Y0 |Z0 |A0 |B0 |C0 |U0 |V0 |W0 |D0 |I0 |J0 |Q0 |;rem @@ -74,9 +67,9 @@ the GUI. In general, the new tool table line format is: + - ; - punto y coma de apertura, sin datos - T - tool number (tool numbers must be unique) - - P - pocket number, 1-1000 (pocket numbers must be unique, Pocket 0 - represents the spindle) + - P - pocket number, 1-1000 (pocket numbers must be unique, Pocket 0 represents the spindle) - X..W - tool offset on specified axis - floating-point - D - tool diameter - floating-point, absolute value - I - front angle (lathe only) - floating-point @@ -84,6 +77,13 @@ In general, the new tool table line format is: - Q - tool orientation (lathe only) - integer, 0-9 - ; - beginning of comment or remark - text +El archivo consta de un punto y coma de apertura en la primera línea, seguido de hasta un máximo de 1000 entradas de herramientas. + +[NOTE] +Aunque se permiten números de herramienta hasta 99999, el número de entradas en +la tabla de herramientas, por el momento, todavía está limitada a un máximo de 1000 herramientas por +razones técnicas. Los desarrolladores de LinuxCNC planean eliminar esa limitación. +Si tiene un cambiador de herramientas muy grande, sea paciente. 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 @@ -170,7 +170,6 @@ type of description is OK. This column is for the benefit of human readers only. The comment must be preceded by a semicolon. [[sec:tool-io]] - === Tool IO The userspace program specified by *[EMCIO]EMCIO = io* is conventionally @@ -192,10 +191,9 @@ Tooldata is accessed by an ordered index (idx) that depends on the type of toolchanger specified by *[EMCIO]RANDOM_TOOLCHANGER=type*. . 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. - + toolchanger) idx is a number indicating the sequence in which tooldata was loaded. . For *RANDOM_TOOLCHANGER = 1*, idx is the *current* pocket number -for the toolnumber specified by the gcode select tool command *Tn*. + for the toolnumber specified by the gcode select tool command *Tn*. The io program provides hal output pins to facilitate toolchanger management: @@ -227,7 +225,6 @@ The io program provides hal output pins to facilitate toolchanger management: .. *iocontrol.0.tool-prep-pocket* = pocket number for tool N [[sec:tool-changers]] - === Tool Changers LinuxCNC supports three types of tool changers: 'manual', 'random location' @@ -236,6 +233,14 @@ is in the <> of the INI chapter. .Manual Tool Changer +El cambiador manual de herramientas (cambiar la herramienta a mano) se trata como un +cambiador de herramienta de ubicación fija y el número P se ignora. Utilizar +el cambiador manual de herramientas solo tiene sentido si tiene portaherramientas que +permanezcan con la herramienta (Cat, NMTB, Kwik Switch, etc.) cuando se cambia +preservando así la ubicación de la herramienta en el husillo. Máquinas con R-8 o +los portaherramientas de tipo collar de enrutadores no conservan la ubicación de +la herramienta y el cambiador de herramientas manual no debe usarse. + 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 @@ -244,10 +249,8 @@ with ini statements: ---- [HAL] -... HALFILE = axis_manualtoolchange.hal -... ----- +---- .Fixed Location Tool Changers @@ -255,8 +258,7 @@ 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. +and rewritten) by LinuxCNC, so you can use P for any bookkeeping number you want. .Random Location Tool Changers @@ -268,7 +270,6 @@ are. T can be any number but P must be a number that makes sense for the machine. [[sec:cutter-compensation]] - == Cutter Compensation Cutter Compensation allows the programmer to program the tool @@ -292,7 +293,7 @@ on the next move. .Compensation End Point -image::images/comp-path_en.svg[align="center", alt="Compensation End Point"] +image::images/comp-path_en.svg["Compensation End Point",align="center"] === Overview @@ -318,14 +319,13 @@ entry move. .Entry Move -image::images/comp02_en.svg[alt="Entry Move"] +image::images/comp02_en.svg["Entry Move"] .Z Motion 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. +Z axis above the part and by extending the Z-axis at the next start point. .Rapid Moves @@ -336,16 +336,7 @@ Rapid moves may be programmed while compensation is turned on. - Start a program with G40 to make sure compensation is off. === Examples - .Outside Profile - -.Outside Profile - -image::images/outside-comp.png[alt="Outside Profile"] - -.Inside Profile - +image::images/outside-comp.png["Outside Profile"] .Inside Profile - -image::images/inside-comp.png[alt="Inside Profile"] - +image::images/inside-comp.png["Inside Profile"] diff --git a/docs/src/getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc b/docs/src/getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc index 5c57c09d2b0..0c6a74eaaf9 100644 --- a/docs/src/getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc +++ b/docs/src/getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc @@ -1,3 +1,5 @@ +:lang: fr + :leveloffset: 1 include::../common/outdated-notice_fr.adoc[] diff --git a/docs/src/getting-started/Linux_FAQ_fr.adoc b/docs/src/getting-started/Linux_FAQ_fr.adoc index 17ec4a61516..117935fb175 100644 --- a/docs/src/getting-started/Linux_FAQ_fr.adoc +++ b/docs/src/getting-started/Linux_FAQ_fr.adoc @@ -1,9 +1,7 @@ :lang: fr -= Petite FAQ Linux - [[cha:FAQ-Linux]] - += Petite FAQ Linux Voici quelques commandes et techniques de base pour l'utilisateur débutant sous Linux. Beaucoup d'autres informations peuvent être @@ -24,17 +22,18 @@ _Sécurité_, cochez la case _Activer les connexions automatiques_ et saisissez votre nom d'utilisateur ou choisissez en un dans la liste déroulante. Vous êtes maintenant dispensé de la fenêtre de connexion. -== Les Man Pages[[sec:Man-Pages]] - -(((Man Pages))) +[[sec:Man-Pages]] +== Les Man Pages(((Man Pages))) Les Man pages sont des pages de manuel générées automatiquement le plus souvent. Les Man pages existent pour quasiment tous les programmes et les commandes de Linux. -Pour visualiser une man page ouvrez un terminal depuis _Applications → - Accessoires → Terminal_. Par exemple si vous voulez trouver quelques +Pour visualiser une man page ouvrez un terminal +depuis _Applications → Accessoires → Terminal_. +Par exemple si vous voulez trouver quelques choses concernant la commande _find_, tapez alors dans le terminal: + ---- man find ---- @@ -46,12 +45,14 @@ défiler le texte et la touche *Q* pour quitter. En cas de problème il est parfois utile de connaître la liste des modules du noyau qui sont chargés. Ouvrez une console et tapez: + ---- lsmod ---- Si vous voulez, pour le consulter tranquillement, envoyer le résultat de la commande dans un fichier, tapez la sous cette forme: + ---- lsmod > mes_modules.txt ---- @@ -59,10 +60,8 @@ lsmod > mes_modules.txt Le fichier mes_modules.txt résultant, se trouvera alors dans votre répertoire home si c'est de là que vous avez ouvert la console. - -== Éditer un fichier en root[[sec:Editer-un-fichier-en-root]] - -(((Éditer un fichier en root))) +[[sec:Editer-un-fichier-en-root]] +== Éditer un fichier en root(((Éditer un fichier en root))) Éditer certains fichiers du système en root peut donner des résultats inattendus! Soyez très vigilant quand vous éditez en root, une erreur peut @@ -70,22 +69,19 @@ compromettre tout le système et l'empêcher de redémarrer. Vous pouvez ouvrir et lire de nombreux fichiers systèmes appartenant au root qui sont en mode lecture seule. -=== A la ligne de commande - -(((sudo gedit))) +=== A la ligne de commande(((sudo gedit))) Ouvrir un terminal depuis _Applications → Accessoires → Terminal_. Dans ce terminal, tapez: + ---- sudo gedit ---- Ouvrez un fichier depuis _Fichiers → Ouvrir_ puis éditez le. -=== En mode graphique - -(((gksudo))) +=== En mode graphique(((gksudo))) . Faites un clic droit sur le bureau et choisissez _Créer un lanceur.._. . Tapez un nom tel que _éditeur_, dans la zone _Nom_. @@ -93,29 +89,27 @@ Ouvrez un fichier depuis _Fichiers → Ouvrir_ puis éditez le. . Glissez un fichier et déposez le sur votre lanceur, il s'ouvrira alors directement dans l'éditeur. -== Commandes du terminal[[sec:Commandes-Terminal]] +[[sec:Commandes-Terminal]] +== Commandes du terminal(((Terminal Commands))) -(((Terminal Commands))) - -=== Répertoire de travail - -(((repertoire de travail))) (((pwd))) +=== Répertoire de travail(((repertoire de travail))) (((pwd))) Pour afficher le chemin du répertoire courant dans le terminal tapez: + ---- pwd ---- -=== Changer de répertoire - -(((Changer de repertoire))) (((cd))) +=== Changer de répertoire(((Changer de repertoire))) (((cd))) Pour remonter dans le répertoire précédent, tapez dans le terminal: + ---- cd .. ---- Pour remonter de deux niveaux de répertoire, tapez dans le terminal: + ---- cd ../.. ---- @@ -125,21 +119,19 @@ Pour aller directement dans le sous-répertoire linuxcnc/configs tapez: cd linuxcnc/configs ---- -=== Lister les fichiers du répertoire courant - -(((Lister le répertoire courant))) (((ls))) +=== Lister les fichiers du répertoire courant(((Lister le répertoire courant))) (((ls))) Pour voir le contenu du répertoire courant tapez: + ---- ls ---- -=== Trouver un fichier - -(((Trouver un fichier))) (((find))) +=== Trouver un fichier(((Trouver un fichier))) (((find))) La commande _find_ peut être un peu déroutante pour le nouvel utilisateur de Linux. La syntaxe de base est: + ---- find répertoire_de_départ ---- @@ -147,30 +139,31 @@ find répertoire_de_départ Par exemple, pour trouver tous les fichiers .ini dans votre répertoire linuxcnc utilisez d'abord la commande _pwd_ pour trouver le répertoire courant. Ouvrez un nouveau terminal et tapez: + ---- pwd ---- il vous est retourné par exemple le résultat suivant: + ---- /home/robert ---- Avec cette information vous pouvez taper, par exemple, la commande: + ---- find /home/robert/linuxcnc -name *.ini -print ---- Le _-name_ est le nom du fichier que vous recherchez et le _-print_ indique à find d'afficher le résultat dans le terminal. Le _*.ini_ -indique à find de retourner tous les fichiers portant l'extension -_.ini_ - -=== Rechercher un texte +indique à find de retourner tous les fichiers portant l'extension _.ini_ -(((Rechercher un texte)))(((grep))) +=== Rechercher un texte(((Rechercher un texte)))(((grep))) Tapez dans un terminal: + ---- grep -lir "texte à rechercher" * ---- @@ -188,6 +181,7 @@ Le caractère *** est un jocker indiquant _tous les fichiers_. Pour visualiser les messages du boot utilisez la commande _dmesg_ depuis un terminal. Pour enregistrer ces messages dans un fichier, redirigez les avec: + ---- dmesg > dmesg.txt ---- @@ -197,6 +191,7 @@ destination des personnes en ligne qui vous aideront à diagnostiquer votre problème. Pour nettoyer le tampon des messages tapez cette commande: + ---- sudo dmesg -c ---- @@ -216,12 +211,14 @@ dmesg|grep parport Pour voir la liste du matériel installé sur les ports PCI de votre carte mère, tapez la commande suivante dans un terminal: + ---- lspci -v ---- Pour voir la liste du matériel installé sur les ports USB de votre carte mère, tapez la commande suivante dans un terminal: + ---- lsusb -v ---- @@ -238,4 +235,3 @@ https://help.ubuntu.com/community/FixVideoResolutionHowto[https://help.ubuntu.co // vim: set syntax=asciidoc: - diff --git a/docs/src/getting-started/Running-LinuxCNC_fr.adoc b/docs/src/getting-started/Running-LinuxCNC_fr.adoc index 5eb57e563b4..10269e79d5b 100644 --- a/docs/src/getting-started/Running-LinuxCNC_fr.adoc +++ b/docs/src/getting-started/Running-LinuxCNC_fr.adoc @@ -1,4 +1,6 @@ -= Lancer LinuxCNC +:lang: fr + += Lancer LinuxCNC LinuxCNC se lance comme un autre programme Linux: depuis un terminal en passant la commande _linuxcnc_, diff --git a/docs/src/getting-started/System_Requirements_fr.adoc b/docs/src/getting-started/System_Requirements_fr.adoc index f226480a191..22ec2bb8a46 100644 --- a/docs/src/getting-started/System_Requirements_fr.adoc +++ b/docs/src/getting-started/System_Requirements_fr.adoc @@ -1,9 +1,9 @@ :lang: fr -= Configuration requise - [[cha:Configuration-requise]] += Configuration requise + == Configuration minimale La configuration minimale pour faire tourner LinuxCNC sous Debian / Ubuntu varie diff --git a/docs/src/getting-started/about-linuxcnc.adoc b/docs/src/getting-started/about-linuxcnc.adoc index 3e67046cec4..2cbdbc8d82b 100644 --- a/docs/src/getting-started/about-linuxcnc.adoc +++ b/docs/src/getting-started/about-linuxcnc.adoc @@ -1,7 +1,11 @@ +:lang: en + = About LinuxCNC == The Software +//// +//// * 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. @@ -9,73 +13,83 @@ are entirely licensed under the GNU General Public License and Lesser GNU General Public License (GPL and LGPL) * LinuxCNC provides: +** From French: Une installation facile à partir d'un CD live. ** a graphical user interface (actually several interfaces to choose from) ** an interpreter for 'G-code' (the RS-274 machine tool programming language) ** a realtime motion planning system with look-ahead ** operation of low-level machine electronics such as sensors and motor drives -** an easy to use 'breadboard' layer for quickly creating a unique +** an easy to use 'breadboard' layer for quickly creating a unique configuration for your machine ** a software PLC programmable with ladder diagrams ** easy installation with a Live-CD -* It does not provide drawing (CAD - Computer Aided Design) or G-code - generation from the drawing (CAM - Computer Automated Manufacturing) - functions. -* It can simultaneously move up to 9 axes and supports a variety of - interfaces. +* It does not provide drawing (CAD - Computer Aided Design) or G-code generation + from the drawing (CAM - Computer Automated Manufacturing) functions. +* It can simultaneously move up to 9 axes and supports a variety of interfaces. * 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. + loop closed by the LinuxCNC software at the computer, or open loop with step-servos or stepper motors. * 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. + threading, synchronized axis motion, adaptive feedrate, operator + feed override, and constant velocity control. * 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. -* LinuxCNC runs on Linux using real time extensions. +* LinuxCNC runs on Linux using real time extensions. == The Operating System LinuxCNC is available as ready-to-use packages for the Ubuntu and Debian distributions. - -== Getting Help + - Ubuntu sera toujours gratuit, et il n'y a aucun frais supplémentaire pour la + version _"Enterprise Edition"_, + nous rendons nos travaux disponibles pour tout le monde dans les mêmes + conditions de gratuité. + - LinuxCNC est jumelé avec les versions LTS d'Ubuntu qui apportent le soutien et + les correctifs de sécurité de l'équipe Ubuntu pour 3 à 5 ans. + - Ubuntu utilise les meilleurs outils de traductions et d'accessibilité + à l'infrastructure, que la communauté du logiciel libre a à offrir, pour + rendre Ubuntu accessible à un maximum de personnes. + - La communauté Ubuntu a entièrement souscrit aux principes du développement de + logiciels libres, nous encourageons tout le monde à utiliser des logiciels + open source, à les améliorer et à les transmettre. + +[[sec:Trouver-aide]] +== Getting Help(((Trouver de l'aide))) === IRC -IRC stands for Internet Relay Chat. -It is a live connection to other LinuxCNC users. -The LinuxCNC IRC channel is #linuxcnc on freenode. +IRC stands for Internet Relay Chat. +It is a live connection to other LinuxCNC users. +The LinuxCNC IRC channel is #linuxcnc on libera. -The simplest way to get on the IRC is to use -the embedded client on this +The simplest way to get on the IRC is to use the embedded client on this https://web.libera.chat/#linuxcnc[page]. -.Some IRC etiquette - -* Ask specific questions... Avoid questions like "Can someone help me?". -* 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. -* 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. -* 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 +Some IRC etiquette:: + +* Ask specific questions... Avoid questions like "Can someone help me?". +* 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. +* 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. +* 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. -.Sharing Files +Sharing Files:: -The most common way to share files on the IRC is to upload the file +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: -* 'For text' - http://pastebin.com/ , http://pastie.org/, https://gist.github.com/ -* 'For pictures' - http://imagebin.org/ , http://imgur.com/ , http://bayimg.com/ -* 'For files' - https://filedropper.com/ , http://filefactory.com/ , http://1fichier.com/ +* 'For text': http://pastebin.com/ , http://pastie.org/, https://gist.github.com/ +* 'For pictures': http://imagebin.org/ , http://imgur.com/ , http://bayimg.com/ +* 'For files': https://filedropper.com/ , http://filefactory.com/ , http://1fichier.com/ === Mailing List @@ -92,7 +106,7 @@ https://lists.sourceforge.net/lists/listinfo/emc-users === Web Forum 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. +top of the linuxcnc.org home page. 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 @@ -100,16 +114,11 @@ developers then the mailing list is to be preferred. === LinuxCNC Wiki -A Wiki site is a user maintained web site -that anyone can add to or edit. +A Wiki site is a user maintained web site that anyone can add to or edit. -The user maintained LinuxCNC Wiki site contains a -wealth of information and tips at: - -link:http://wiki.linuxcnc.org/[http://wiki.linuxcnc.org] +The user maintained LinuxCNC Wiki site contains a +wealth of information and tips at: link:http://wiki.linuxcnc.org/[http://wiki.linuxcnc.org] === Bug Reports -Report bugs to the LinuxCNC -link:http:///github.com/LinuxCNC/linuxcnc/issues[github bug tracker]. - +Report bugs to the LinuxCNC link:http:///github.com/LinuxCNC/linuxcnc/issues[github bug tracker]. diff --git a/docs/src/getting-started/about-linuxcnc_es.adoc b/docs/src/getting-started/about-linuxcnc_es.adoc index 79e3846ce56..7b9db86c2a3 100644 --- a/docs/src/getting-started/about-linuxcnc_es.adoc +++ b/docs/src/getting-started/about-linuxcnc_es.adoc @@ -22,15 +22,15 @@ de generación de código G a partir de dibujos (CAM - Fabricación automatizada por computadora) * Puede mover simultáneamente hasta 9 ejes y admite una variedad de interfaces * El control puede operar servos verdaderos (analógicos o PWM) con retroalimentación - de bucle cerrado por el software LinuxCNC en la computadora, o bucle abierto, con + de bucle cerrado por el software LinuxCNC en la computadora, o bucle abierto, con   servomotores o motores paso a paso. * Las características de control de movimiento incluyen: compensación del radio de corte y longitud  de herramienta, desviación de trayectoria limitada a una tolerancia especificada, roscado en torno,  movimientos de eje sincronizados, avance adaptativo, control de ajuste de avance por el operador  y control de velocidad constante. * Soporte para sistemas de movimiento no cartesianos, a través de - módulos cinemáticos personalizados. Las arquitecturas disponibles incluyen hexapodos ( -plataformas Stewart y conceptos similares) y sistemas con articulaciones rotativas para +  módulos cinemáticos personalizados. Las arquitecturas disponibles incluyen hexapodos ( + plataformas Stewart y conceptos similares) y sistemas con articulaciones rotativas para  proporcionar movimiento como robots PUMA o SCARA. * LinuxCNC se ejecuta en Linux usando extensiones en tiempo real. diff --git a/docs/src/getting-started/getting-linuxcnc.adoc b/docs/src/getting-started/getting-linuxcnc.adoc index fda667fb4e0..f464c4403c7 100644 --- a/docs/src/getting-started/getting-linuxcnc.adoc +++ b/docs/src/getting-started/getting-linuxcnc.adoc @@ -1,10 +1,11 @@ -[[cha:getting-linuxcnc]] +:lang: en -= Getting LinuxCNC +[[cha:getting-linuxcnc]] += Getting LinuxCNC(((Getting LinuxCNC))) This section describes the recommended way to download and make a fresh install of LinuxCNC. There are also -<<_alternate_install_methods,Alternate Install Methods>> for the +<> for the adventurous. If you have an existing install that you want to upgrade, go to the <> section instead. @@ -28,13 +29,11 @@ The outline of the process looks like this: . Boot the Live system to test out LinuxCNC. . Boot the Installer to install LinuxCNC. - == Download the image -This section describes some methods for downloading the Live/Install -Image. - +This section describes some methods for downloading the Live/Install Image. +[[sec:_normal_download]] === Normal Download For x86 PCs Download the Live/Install CD by clicking here: @@ -43,8 +42,7 @@ http://www.linuxcnc.org/iso/linuxcnc-2.8.2-buster.iso For the Raspberry Pi a complete SD card image is available here: -http://www.linuxcnc.org/iso/linuxcnc-2.8.1-pi4.zip (this will auto-update -to 2.8.2 ) +http://www.linuxcnc.org/iso/linuxcnc-2.8.1-pi4.zip (this will auto-update to 2.8.2) This can be installed using the normal Pi https://www.raspberrypi.org/documentation/installation/installing-images/README.md[install process] @@ -64,7 +62,7 @@ USB card reader) 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 <<_normal_download,Normal Download>> +downloading the image using the <> method. .zsync in Linux @@ -103,7 +101,7 @@ https://www.assembla.com/spaces/zsync-windows/documents md5sum linuxcnc-2.8.2-buster.iso ---- + -or +\o + ---- sha256sum linuxcnc-2.8.2-buster.iso @@ -129,7 +127,7 @@ https://www.raspberrypi.org/documentation/installation/installing-images/README. 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. +used to boot a computer. The image is too large to fit on a CD. .Writing the image to a USB storage device in Linux @@ -187,8 +185,8 @@ sudo dd if=/path-to.iso of=/dev/rdiskN bs=1m burning program: http://infrarecorder.org/ . Insert a blank CD in the drive and select Do nothing or Cancel if an auto-run dialog pops up. -. Open Infra Recorder, and select the - 'Actions' menu, then 'Burn image'. +. Open Infra Recorder, and select the + 'Actions' menu, then 'Burn image'. .Writing the image to a DVD in Mac OSX @@ -235,15 +233,17 @@ 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. -WARNING: Do not upgrade the operating system if prompted to do so. You +[WARNING] +Do not upgrade the operating system if prompted to do so. You should accept OS _updates_ however, especially security updates. == Install Problems 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 Live CD install it cannot recognize the hard drive during the boot up. +[[sec:_alternate_install_methods]] == Alternate Install Methods The easiest, preferred way to install LinuxCNC is to use the Live/Install @@ -292,8 +292,7 @@ debian archive. The apt source is: NOTE: 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. +for a new install, and to seriously consider upgrading an existing installation. The Buster / RTAI package is only available on amd64, but there are very few surviving systems that can not run a 64-bit OS. @@ -311,8 +310,7 @@ project developers. === Installing on Debian Buster (with Preempt-RT kernel) . Install Debian Buster (Debian 10), amd64 version. -You can download the installer here: - https://www.debian.org/releases/buster/ + You can download the installer here: https://www.debian.org/releases/buster/ . 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 @@ -333,13 +331,11 @@ sudo apt-get dist-upgrade + ---- sudo apt-get install linux-image-rt-amd64 - ---- . 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. + 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. + ---- uname -v @@ -385,8 +381,7 @@ sudo apt-get install linuxcnc-uspace sudo apt install mesaflash ---- -[[cha:Installing-RTAI]] -=== Installing on Debian Buster (with experimental RTAI kernel) +=== Installing on Debian Buster (with experimental RTAI kernel)[[cha:Installing-RTAI]] WARNING: This kernel has known stability problems. It appears to run reliably once LinuxCNC is loaded. However kernel panics have been seen diff --git a/docs/src/getting-started/running-linuxcnc.adoc b/docs/src/getting-started/running-linuxcnc.adoc index 45726f4f14b..71a9a792d1d 100644 --- a/docs/src/getting-started/running-linuxcnc.adoc +++ b/docs/src/getting-started/running-linuxcnc.adoc @@ -1,13 +1,17 @@ +:lang: en +:toc: + [[cha:running-emc]] -= Running LinuxCNC += Running LinuxCNC(((Running LinuxCNC))) == Invoking LinuxCNC -After installation, LinuxCNC starts just like any other Linux program: +After installation, LinuxCNC starts just like any other Linux program: run it from the <> by issuing the command 'linuxcnc', or select it in the 'Applications -> CNC' menu. -== Configuration Launcher +[[sec:config-launcher]] +== Configuration Launcher(((Configuracion Launcher))) When starting LinuxCNC from the CNC menu or from the command line without specifying an ini file the Configuration Selector dialog starts. @@ -22,40 +26,35 @@ The Configuration Selector offers a selection of configurations organized: * 'My Configurations' - User configurations located in ~/linuxcnc/configs - -* 'Sample Configurations' - Sample configurations, when selected are copied to - ~/linuxcnc/configs. Once you copy a sample configuration if you use the - launcher pick it from 'My Configurations' - -** 'sim' - Configurations that include simulated hardware. These can be used - for testing or learning how LinuxCNC works. - +* 'Sample Configurations' - Sample configurations, when selected are copied to ~/linuxcnc/configs. + Once you copy a sample configuration if you use the launcher pick it from 'My Configurations' + Los nombres corresponden a los directorios bajo ../configs/ +** 'sim' - Configurations that include simulated hardware. These can be used for testing or learning how LinuxCNC works. ** 'by_interface' - Configurations organized by GUI. - ** 'by_machine' - Configurations organized by machine. - -** 'apps' - Applications that do not require starting LinuxCNC but may be - useful for testing or trying applications like <> or - <>. - +** 'apps' - Applications that do not require starting linuxcnc but may + be useful for testing or trying applications like <> + or <>. ** 'attic' - Obsolete or historical configurations. The sim configurations are often the most useful starting point for new users and are organized around supported guis: -* axis - Keyboard and Mouse Gui -* gmoccapy - Touch Screen Gui -* gscreen - Touch Screen Gui -* low_graphics - Keyboard Gui -* tklinuxcnc - Keyboard and Mouse Gui(no longer maintained) -* touchy - Touch Screen Gui +* 'axis' - Keyboard and Mouse Gui +* 'gmoccapy' - Touch Screen Gui +* 'gscreen' - Touch Screen Gui +* 'low_graphics' - Keyboard Gui +* 'pyvcp_demo' - Paneles de Control Virtuales Python +* 'qtvcp_screens' - Guis diseñadas con Qt5 y Python +* 'tklinuxcnc' - Keyboard and Mouse Gui(no longer maintained) +* 'touchy' - Touch Screen Gui A gui configuration directory may contain subdirectories with configurations that illustrate special situations or the embedding of other applications. -The by_interface configurations are organized around common, supported +The 'by_interface' configurations are organized around common, supported interfaces like: * general mechatronics @@ -70,21 +69,22 @@ interfaces like: Related hardware may be required to use these configurations as starting points for a system. - -The by_machine configurations are organized around complete, known +The 'by_machine' configurations are organized around complete, known systems like: * boss * cooltool +* plasmac +* scortbot erIII * sherline * smithy * tormach A complete system may be required to use these configurations. -The apps items are typically 1) utilities that don't require -starting LinuxCNC or 2) demonstrations of applications that can -be used with LinuxCNC: +The 'apps items' are typically 1) utilities that don't require starting +linuxcnc or 2) demonstrations of applications that can be used with +linuxcnc: * info - creates a file with system information that may be useful for problem diagnosis. @@ -103,28 +103,24 @@ Under the Apps directory, only applications that are usefully modified by the user are offered for copying to the user's directory. .LinuxCNC Configuration Selector[[cap:LinuxCNC-Configuration-Selector]] +image::images/configuration-selector.png["Configuration Selector"] -image::images/configuration-selector.png[alt="LinuxCNC Configuration Selector"] +Click any of the listed configurations to display specific information about it. +Double-click a configuration or click OK to start the configuration. -Click any of the listed configurations -to display specific information about it. -Double-click a configuration or click OK -to start the configuration. -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. +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. -When you select a configuration from the Sample Configurations section, +When you select a configuration from the Sample Configurations section, it will automatically place a copy of that config in the -linuxcnc/configs directory. +~/linuxcnc/configs directory. == Next steps in configuration -After finding the sample configuration that uses +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. +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. == Simulator Configurations @@ -143,8 +139,8 @@ available in other GUIs as well. == Configuration Resources -The Configuration Selector copies all files needed for -a configuration to a new subdirectory of ~/linuxcnc/configs +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. @@ -173,11 +169,9 @@ the system Halfile library. This link simplifies copying a library file. For example, to copy the library core_sim.hal file in order to make local modifications: -==== - cd ~/linuxcnc/configs/name_of_configuration - cp hallib/core_sim.hal core_sim.hal -==== +---- +cd ~/linuxcnc/configs/name_of_configuration +cp hallib/core_sim.hal core_sim.hal +---- // vim: set syntax=asciidoc: - - diff --git a/docs/src/getting-started/running-linuxcnc_es.adoc b/docs/src/getting-started/running-linuxcnc_es.adoc index af7e9b04182..750328f86a6 100644 --- a/docs/src/getting-started/running-linuxcnc_es.adoc +++ b/docs/src/getting-started/running-linuxcnc_es.adoc @@ -28,20 +28,20 @@ El selector de configuración ofrece una selección de configuraciones organizad * 'Mis configuraciones' - Configuraciones de usuario ubicadas en ~/linuxcnc/configs * 'Configuraciones de ejemplo' - Estas configuraciones, cuando se seleccionan, se copian en - ~/linuxcnc/configs. Una vez que copie una configuración, si usa el - selector, selecciónela desde 'Mis configuraciones'. - Los nombres corresponden a los directorios bajo ../configs/ + ~/linuxcnc/configs. Una vez que copie una configuración, si usa el + selector, selecciónela desde 'Mis configuraciones'. + Los nombres corresponden a los directorios bajo ../configs/ ** 'sim' - Configuraciones que incluyen hardware simulado. Pueden ser usadas - para probar o aprender cómo funciona LinuxCNC. + para probar o aprender cómo funciona LinuxCNC. ** 'by_interface' - Configuraciones organizadas por tipo de GUI. ** 'by_machine' - Configuraciones organizadas por tipo de máquina. ** 'apps' - aplicaciones que no requieren iniciar linuxcnc pero pueden ser - útiles para pruebas o aplicaciones como <> + útiles para pruebas o aplicaciones como <> ** 'attic' - Configuraciones obsoletas o históricas. @@ -179,9 +179,9 @@ la biblioteca de sistema Halfile. Este enlace simplifica el copiado de un archivo de biblioteca. Por ejemplo, para copiar el archivo de biblioteca core_sim.hal para hacer modificaciones locales: -==== - cd ~/linuxcnc/configs/nombre_de_configuracion - cp hallib/core_sim.hal core_sim.hal -==== +---- +cd ~/linuxcnc/configs/nombre_de_configuracion +cp hallib/core_sim.hal core_sim.hal +---- // vim: set syntax = asciidoc: diff --git a/docs/src/getting-started/running-linuxcnc_zh_CN.adoc b/docs/src/getting-started/running-linuxcnc_zh_CN.adoc index d448abb1941..76e16174727 100644 --- a/docs/src/getting-started/running-linuxcnc_zh_CN.adoc +++ b/docs/src/getting-started/running-linuxcnc_zh_CN.adoc @@ -1,5 +1,4 @@ [[cha:running-emc]] - = 运行LinuxCNC == 调用LinuxCNC @@ -8,9 +7,8 @@ 在 http://linuxcnc.org/docs/2.8/html/common/linux-faq.html#faq:terminal[终端]通过运行命令'linuxcnc'运行, 或在菜单“应用程序-CNC”中选择。 -[[sec:config-launcher]] (((Configuration Launcher))) - -== 配置启动器 +[[sec:config-launcher]] +== 配置启动器 (((Configuration Launcher))) 当从CNC菜单或命令行启动LinuxCNC而未指定ini文件时,将启动“配置选择器”对话框。 @@ -117,7 +115,6 @@ by the user are offered for copying to the user's directory. 在应用程序目录下,仅提供经用户有用修改的应用程序才能复制到用户目录。 .LinuxCNC Configuration Selector[[cap:LinuxCNC-Configuration-Selector]] - image::images/configuration-selector.png[alt="LinuxCNC配置选择器"] Click any of the listed configurations diff --git a/docs/src/getting-started/stepper_quickstart_fr.adoc b/docs/src/getting-started/stepper_quickstart_fr.adoc index ffacebafccf..22027bf17bc 100644 --- a/docs/src/getting-started/stepper_quickstart_fr.adoc +++ b/docs/src/getting-started/stepper_quickstart_fr.adoc @@ -1,9 +1,9 @@ :lang: fr -= Configuration rapide pour moteurs pas à pas - [[cha:stepper-quickstart]] += Configuration rapide pour moteurs pas à pas + Cette section suppose qu'une installation du logiciel à partir du CD Live a été faite. Après cette installation et avant de continuer, il est recommandé de connecter le PC sur Internet pour y faire les dernières @@ -19,17 +19,13 @@ CNC. Ce test est la toute première chose à faire pour valider un PC. Pour le lancer, suivre les instructions de la section <>. -[[sec:Sherline]] -== Sherline -(((Sherline))) +== Sherline[[sec:Sherline]](((Sherline))) Si vous avez une machine Sherline plusieurs configurations prédéfinies sont fournies. Au premier démarrage de LinuxCNC, le sélecteur de configuration s'ouvre, sélectionnez alors le modèle correspondant à votre machine _Sherline_, puis acceptez d'enregistrer une copie. -[[sec:Xylotex]] -== Xylotex -(((Xylotex))) +== Xylotex[[sec:Xylotex]](((Xylotex))) Si vous avez une machine _Xylotex_ vous pouvez utiliser l'assistant graphique de configuration fourni avec LinuxCNC et créer rapidement votre configuration @@ -162,4 +158,3 @@ l'assistant graphique PNCconf au chapitre <> above. +* Open Synaptic using the instructions in <<_setting_apt_sources,Setting apt sources>> above. * Click the `Reload` button. @@ -149,20 +142,17 @@ Debian Wheezy and Stretch both use the Synaptic Package Manager. === Ubuntu Precise * Click on the `Dash Home` icon in the top left. - * In the `Search` field, type "update", then click on the `Update Manager` icon. - * Click the `Check` button to fetch the list of packages available. - * Click the `Install Updates` button to install the new versions of all packages. -[[getting-started:update-no-network]] -== Updating without Network +== Updating without Network[[getting-started:update-no-network]] 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/ + You have to drill down from the above link to find the correct deb for your installation. Open a <> and type in 'lsb_release -ic' to find the name of your OS. @@ -176,11 +166,10 @@ Codename: buster 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. -Next pick the type of computer you have: binary-amd64 for any 64-bit x86, -binary-i386 for 32 bit, binary-armhf for RaspBerry Pi. +Next pick the type of computer you have: binary-amd64 for any 64-bit x86, binary-i386 for 32 bit, binary-armhf for RaspBerry Pi. 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) +'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 @@ -288,7 +277,7 @@ The gentrivkins and gantrykins kinematics modules have been removed as their functionality is now available in the updated trivkins module. The gentrivkins module has only been available in prior joints_axes -branches. To convert, it is necessary to change the name. +branches. To convert, it is necessary to change the name. Hal file examples: @@ -424,23 +413,23 @@ with an additional rotary coordinate: ----- 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'). +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'). Note: For trivkins module loading, do not include spaces about the = sign or letters: - +---- This: [KINS]KINEMATICS = trivkins coordinates=XZ NOT This: [KINS]KINEMATICS = trivkins coordinates = X Z +---- 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'). - +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'). === Home sequences @@ -448,7 +437,7 @@ Note: Custom kinematics modules that implement non-identity kinematics (like named [JOINT_n]HOME_SEQUENCE. Prior to joints_axes incorporation a value of -1 or the omission of the item indicated no sequence was applicable. Now, only omission of the item is used for that purpose. -See the chapter: <> +See the chapter: <> for more information. === Locking rotary indexer (updates for joints_axes) @@ -491,8 +480,7 @@ 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) +Z==>joint2, B==>joint3. The mask to specify joint 3 is 000001000 (binary) == 0x08 (hexadecimal) The required ini file entries for this trivkins XYZB example are: ---- @@ -633,8 +621,7 @@ both joint and teleop (world) jogging. === Ini Hal pins -Hal pins are created for ini file items for both joints ([JOINT_N] stanzas) -and axes ([AXIS_L] stanzas): +Hal pins are created for ini file items for both joints ([JOINT_N] stanzas) and axes ([AXIS_L] stanzas): For N = 0 ... [KINS](JOINTS -1) Ini File Item hal pin name @@ -655,10 +642,7 @@ and axes ([AXIS_L] stanzas): [AXIS_L]MAX_VELOCITY ini.L.max_velocity [AXIS_L]MAX_ACCELERATION ini.L.max_acceleration -Note: 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 ('$ man milltask') for more information +Note: 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 ('$ man milltask') for more information == Hal Changes (Other 2.8.x) @@ -746,8 +730,8 @@ 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 -<> +changes to world mode automatically. +See <> Machines that do not use home switches may require manual jogging in joint mode before homing each and every joint. It is also @@ -762,7 +746,7 @@ 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 +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, @@ -837,7 +821,7 @@ with related pins. ==== Identity Kinematics -The axis gui continues to support identity kinematics configurations. This gui +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. @@ -898,12 +882,11 @@ 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 inifile directives in the -<> +<>. Note that the parameters used for jogging may not be appropriate for both modes for machines with non-identity kinematics. - === tklinuxcnc The tklinuxcnc gui supports both identity and non-identity kinematics, includes @@ -955,7 +938,6 @@ The gmoccapy gui continues to support the identity kinematics configurations that it supported prior to joints_axes incorporation. Jogging is done in teleop mode. - === `shuttlexpress` driver renamed to `shuttle` The HAL driver for the Contour Designs ShuttleXpress device has been @@ -966,7 +948,6 @@ some variant of "loadusr shuttlexpress", replace "shuttlexpress" with Support has been added for the ShuttlePRO, a bigger version of the ShuttleXpress, so the old driver name is no longer accurate. - === linuxcncrsh "Home All" is now supported with the set home subcommand @@ -1009,13 +990,10 @@ L is an axis coordinate letter (X,Y,Z,A,B,C,U,V,W), and S is a spindle number (0 .. 9) [NOTE] - The number of allowed spindles is 8 but legacy configurations -may include a stanza [SPINDLE_9] unrelated to an actual spindle -number. +may include a stanza [SPINDLE_9] unrelated to an actual spindle number. [NOTE] - The [TUNE] stanza may be used for specifying tunable items not relevant to the other supported stanzas. @@ -1078,18 +1056,17 @@ JOINTS = number_of_joints Functions supported include: . 'ddts' -- differentiator hal components are loaded and connected -for each joint (and xy, xyz for trivkins machines) + for each joint (and xy, xyz for trivkins machines) -. '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. +. '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. . 'use_hal_manualtoolchange' -- the user space hal_manualtoolchange -component is loaded and connected. + component is loaded and connected. . 'sim_spindle' -- the sim_spindle component is loaded and connected to -additional loaded hal components to simulate the inertia of a rotating -spindle mass. + additional loaded hal components to simulate the inertia of a rotating + spindle mass. The functions are activated by default but can be excluded using options: '-no_make_ddts', '-no_simulated_home', '-no_use_hal_manualtoolchange', @@ -1127,8 +1104,7 @@ The equivalent halfile can be used to create a new configuration based on the original configuration made with LIB:basic_sim.tcl with the following steps: -1) Run the simulator configuration to create a new equivalent halfile, -for example: 'example_cmds.hal'. +1) Run the simulator configuration to create a new equivalent halfile, for example: 'example_cmds.hal'. To use this new equivalent halfile in the original simulator configuration inifile (or a copy of it), edit to change: @@ -1206,7 +1182,7 @@ Remove unused pin 'jogenable-off' 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' +are typically connected to 'halui.mode.is-manual' and 'halui.mode.is-teleop' respectively. ==== xhc_hb04.tcl (optional LIB configuration halfile) @@ -1399,7 +1375,7 @@ is specified. lib/python/vismach.py: new hal pin vismach.plotclear -=== Hal +=== HAL ==== Components @@ -1420,4 +1396,9 @@ specify that displayed rotations respect G5x,G92 offsets. sim/configs/axis/axis_9axis: demonstrate simulated encoder index +== Cambios 2.8.x + +Las versiones futuras de este documento tendrán en cuenta los cambios realizados en la rama de +desarrollo posteriores a la ultima versión 2.8.x. + // vim: set syntax=asciidoc: diff --git a/docs/src/gui/GStat.adoc b/docs/src/gui/GStat.adoc index b2fa5b1cce8..7846a12af09 100644 --- a/docs/src/gui/GStat.adoc +++ b/docs/src/gui/GStat.adoc @@ -1,5 +1,6 @@ -[[cha:GStat]] +:lang: en +[[cha:GStat]] = GStat == Intro diff --git a/docs/src/gui/axis.adoc b/docs/src/gui/axis.adoc index 8a29ccbaba7..236eca5be72 100644 --- a/docs/src/gui/axis.adoc +++ b/docs/src/gui/axis.adoc @@ -1,6 +1,8 @@ -[[cha:axis-gui]] +:lang: en +:toc: -= AXIS GUI + += [[cha:axis-gui]](((axis-gui)))AXIS GUI == Introduction @@ -8,9 +10,7 @@ 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. -.AXIS Window - -image::images/axis.png[align="center", alt="AXIS Window"] +image::images/axis.png["AXIS Window",align="center"] == Getting Started @@ -22,8 +22,11 @@ section '[DISPLAY]' change the 'DISPLAY' line to read The sample configuration 'sim/axis.ini' is already configured to use AXIS as its front-end. +From French: Quand AXIS démarre, une fenêtre telle que celle de la figure +cap:Fenetre-AXIS,ci-dessus s'ouvre. === INI settings + For more information on ini file settings that can change how AXIS works see the <> of the INI Configuration Chapter. @@ -55,97 +58,108 @@ then you might need to only run the program again. See the <> for more information on the run command. +From French: + . Lancer LinuxCNC et sélectionner un fichier de configuration. + . Relâcher le bouton d'arrêt d'urgence 'A/U'(((A/U))) et presser + celui de 'Marche' machine. + . Faire les prises d'origine machine 'POM' pour chacun des axes. + . Charger un fichier d'usinage. + . Utiliser l'affichage du parcours d'outil pour vérifier que le + programme est correct. + . Brider le brut à usiner sur la table. + . Faire les prises d'origine pièce 'POP' de chacun des axes avec le jog + et en utilisant le bouton 'Toucher'.(((Toucher))) + . Lancer le programme. + . Pour usiner le même fichier une nouvelle fois, retourner à l'étape 6. + Pour usiner un fichier différent, retourner à l'étape 4. Quand le travail + est terminé, quitter AXIS. + == AXIS Display The AXIS window contains the following elements: * A display area that shows one of the following: - ** a preview of the loaded file (in this case, +** 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' - ** a large readout showing the current position and all offsets. +** a large readout showing the current position and all offsets. * A menu bar and toolbar that allow you to perform various actions * '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. + machine move, turn the spindle on or off, and turn the coolant on or + off if included in the ini file. * '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. -* '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 <> of the - INI file for more information. -* 'Spindle Override' - which allows you to - scale the spindle speed up or down. -* 'Jog Speed' - which allows you to set the jog speed - within the limits set in the ini file. See the - <> of the INI file for more information. + one line at a time. This also shows the 'Active G Codes' which shows + which modal G Codes are in effect. +* '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 <> of the + INI file for more information. +* 'Spindle Override' - which allows you to scale the spindle speed up or down. +* 'Jog Speed' - which allows you to set the jog speed within the limits set in the ini file. + See the <> of the INI file for more information. * 'Max Velocity' - which allows you to restrict the maximum velocity of all - programmed motions (except spindle synchronized motion). + programmed motions (except spindle synchronized motion). * A text display area that shows the loaded G-Code. * 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). + 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). === Menu Items -Some menu items might be grayed out depending on how you have your -.ini file configured. For more information on configuration see the +Some menu items might be grayed out depending on how you have your .ini +file configured. For more information on configuration see the <>. .File Menu * '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 <> of the INI configuration - for more information. + you have configured LinuxCNC to use a filter program you can also open it + up. See the <> of the INI configuration + for more information. * 'Recent Files' - Displays a list of recently opened files. -* 'Edit...' - Open the current G-code file for editing if you have an editor - configured in your ini file. See the <> - for more information on specifying an editor to use. +* 'Edit...' - Open the current G code file for editing if you have an editor + configured in your ini file. See the <> + for more information on specifying an editor to use. -* '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. +* '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. * 'Save G-code as...' - Save the current file with a new name. * '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. + acceleration, blending or path mode so time reported will never + be less than the actual run time. * 'Edit tool table...' - Same as Edit if you have defined an editor - you can open the tool table and edit it. + you can open the tool table and edit it. * 'Reload tool table' - After editing the tool table you must reload it. * 'Ladder editor' - If you have loaded Classic Ladder you can edit it from - here. See the <> - for more information. + here. See the <> + for more information. * 'Quit' - - Terminates the current LinuxCNC session. + Terminates the current LinuxCNC session. [[sub:axis-machine-menu]] - .Machine Menu * 'Toggle Emergency Stop F1' - Change the state of the Emergency Stop. -* 'Toggle Machine Power F2' - Change the state of the Machine Power if - the Emergency Stop is not on. +* 'Toggle Machine Power F2' - Change the state of the Machine Power if the Emergency Stop is not on. * 'Run Program' - Run the currently loaded program from the beginning. * '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. + 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. [WARNING] Do not use 'Run From Selected Line' if your g code program contains subroutines. @@ -156,14 +170,11 @@ Do not use 'Run From Selected Line' if your g code program contains subroutines. * 'Resume' - Resume running from a pause. -* 'Stop' - Stop a running program. When run is selected after a stop the program - will start from the beginning. +* 'Stop' - Stop a running program. When run is selected after a stop the program will start from the beginning. -* 'Stop at M1' - If an M1 is reached, and this is checked, program execution - will stop on the M1 line. Press Resume to continue. +* 'Stop at M1' - If an M1 is reached, and this is checked, program execution will stop on the M1 line. Press Resume to continue. -* 'Skip lines with "/"' - If a line begins with '/' and this is checked, - the line will be skipped. +* 'Skip lines with "/"' - If a line begins with '/' and this is checked, the line will be skipped. * 'Clear MDI history' - Clears the MDI history window. @@ -172,15 +183,14 @@ Do not use 'Run From Selected Line' if your g code program contains subroutines. * 'Paste to MDI history' - Paste from the clipboard to the MDI history window * '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. + 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. * 'Show HAL Configuration' - Opens the HAL Configuration window where you can - monitor HAL Components, Pins, Parameters, Signals, Functions, and Threads. + monitor HAL Components, Pins, Parameters, Signals, Functions, and Threads. -* 'HAL Meter' - Opens a window where you can monitor a single HAL Pin, Signal, or - Parameter. +* 'HAL Meter' - Opens a window where you can monitor a single HAL Pin, Signal, or Parameter. * 'HAL Scope' - Opens a virtual oscilloscope that allows plotting HAL values vs. time. @@ -192,23 +202,21 @@ Do not use 'Run From Selected Line' if your g code program contains subroutines. * 'Unhoming' - Unhome one or all axes. -* 'Zero Coordinate System' - Set all offsets to zero in the coordinate - system chosen. - -[[axis:tool-touch-off]] (((Axis, Tool Touch Off))) +* 'Zero Coordinate System' - Set all offsets to zero in the coordinate system chosen. +[[axis:tool-touch-off]](((Axis, Tool Touch Off))) * '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 <> in the G-code chapter. + 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 <> in the G code chapter. * '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 <> in the G-code chapter. + 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 <> in the G code chapter. .View Menu @@ -252,61 +260,60 @@ 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. **** - * 'Display Inches' - Set the AXIS display scaling for inches. * 'Display MM' - Set the AXIS display scaling for millimeters. -* 'Show Program' - The preview display of the loaded G-code program can be entirely - disabled if desired. +* 'Show Program' - The preview display of the loaded G code program can be entirely + disabled if desired. -* 'Show Program Rapids' - The preview display of the loaded G-code program will always show the - feedrate moves (G1,G2,G3) in white. But the display of rapid moves (G0) - in cyan can be disabled if desired. +* 'Show Program Rapids' - The preview display of the loaded G code program will always show the + feedrate moves (G1,G2,G3) in white. But the display of rapid moves (G0) + in cyan can be disabled if desired. * 'Alpha-blend Program' - This option makes the preview of complex programs easier to see, but - may cause the preview to display more slowly. + may cause the preview to display more slowly. * 'Show Live Plot' - The highlighting of the feedrate paths (G1,G2,G3) as the tool moves - can be disabled if desired. + can be disabled if desired. * 'Show Tool' - The display of the tool cone/cylinder can be disabled if desired. * 'Show Extents' - The display of the extents (maximum travel in each axis direction) - of the loaded G-code program can be disabled if desired. + of the loaded G code program can be disabled if desired. * '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. + 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. * '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. + 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. * '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. + machine is running to its design velocities. It can be disabled + if desired. * '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. + 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. -* '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. +* '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. * '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. + has stopped, this is the position LinuxCNC will try to hold. * '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. + 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. * 'Show Machine Position' - This is the position in unoffset coordinates, as established by Homing. @@ -316,51 +323,49 @@ So be familiar with your machine's design and interpret the display as needed. * 'About Axis' - We all know what this is. - * 'Quick Reference' - Shows the keyboard shortcut keys. === Toolbar buttons From left to right in the Axis display, the toolbar buttons (keyboard shortcuts shown [in brackets]) are: -* image:images/tool_estop.png[alt="Toggle Emergency Stop"] Toggle Emergency Stop [F1] (also called E-Stop) - -* image:images/tool_power.png[alt="Toggle Machine Power"] Toggle Machine Power [F2] +* image:images/tool_estop.png["Toggle Emergency Stop"] Toggle Emergency Stop [F1] (also called E-Stop) -* image:images/tool_open.png[alt="Open G-code file"] Open G-code file [O] +* image:images/tool_power.png["Toggle Machine Power"] Toggle Machine Power [F2] -* image:images/tool_reload.png[alt="Reload current file"] Reload current file [Ctrl-R] +* image:images/tool_open.png["Open G Code file"] Open G Code file [O] -* image:images/tool_run.png[alt="Begin executing the current file"] Begin executing the current file [R] +* image:images/tool_reload.png["Reload current file"] Reload current file [Ctrl-R] -* image:images/tool_step.png[alt="Execute next line"] Execute next line [T] +* image:images/tool_run.png["Begin executing the current file"] Begin executing the current file [R] -* image:images/tool_pause.png[alt="Pause Execution - Resume Execution"] Pause Execution [P] Resume Execution [S] +* image:images/tool_step.png["Execute next line"] Execute next line [T] -* image:images/tool_stop.png[alt="Stop Program Execution"] Stop Program Execution [ESC] +* image:images/tool_pause.png["Pause Execution - Resume Execution"] Pause Execution [P] Resume Execution [S] -* image:images/tool_blockdelete.png[alt="Toggle Skip lines"] Toggle Skip lines with "/" [Alt-M-/] +* image:images/tool_stop.png["Stop Program Execution"] Stop Program Execution [ESC] -* image:images/tool_optpause.png[alt="Toggle Optional Pause"] Toggle Optional Pause [Alt-M-1] +* image:images/tool_blockdelete.png["Toggle Skip lines"] Toggle Skip lines with "/" [Alt-M-/] -* image:images/tool_zoomin.png[alt="Zoom In"] Zoom In +* image:images/tool_optpause.png["Toggle Optional Pause"] Toggle Optional Pause [Alt-M-1] -* image:images/tool_zoomout.png[alt="Zoom Out"] Zoom Out +* image:images/tool_zoomin.png["Zoom In"] Zoom In -* image:images/tool_axis_z.png[alt="Top view"] Top view +* image:images/tool_zoomout.png["Zoom Out"] Zoom Out -* image:images/tool_axis_z2.png[alt="Rotated Top view"] Rotated Top view +* image:images/tool_axis_z.png["Top view"] Top view -* image:images/tool_axis_x.png[alt="Side view"] Side view +* image:images/tool_axis_z2.png["Rotated Top view"] Rotated Top view -* image:images/tool_axis_y.png[alt="Front view"] Front view +* image:images/tool_axis_x.png["Side view"] Side view -* image:images/tool_axis_p.png[alt="Perspective view"] Perspective view +* image:images/tool_axis_y.png["Front view"] Front view -* image:images/tool_rotate.png[alt="Toggle between Drag and Rotate Mode"] Toggle between Drag and Rotate Mode [D] +* image:images/tool_axis_p.png["Perspective view"] Perspective view -* image:images/tool_clear.png[alt="Clear live backplot"] Clear live backplot [Ctrl-K] +* image:images/tool_rotate.png["Toggle between Drag and Rotate Mode"] Toggle between Drag and Rotate Mode [D] +* image:images/tool_clear.png["Clear live backplot"] Clear live backplot [Ctrl-K] === Graphical Display Area @@ -368,9 +373,9 @@ From left to right in the Axis display, the toolbar buttons (keyboard shortcuts 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[alt="origin symbol is shown if the axis has been homed"] is shown if the axis has been homed. +image:images/axis-homed.png["origin symbol is shown if the axis has been homed"] is shown if the axis has been homed. -A limit symbol image:images/axis-limit.png[alt="limit symbol"] is shown on the right side of the +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. To properly interpret the coordinate position numbers, refer to the 'Position:' @@ -379,7 +384,7 @@ 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 <> -image:images/axis-machineorigin.png[alt="cyan machine origin"] marker. +image:images/axis-machineorigin.png["cyan machine origin"] marker. 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 @@ -387,8 +392,7 @@ 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). +position might be 0.0033, but the 'Actual' position will be 0.0025 (2 steps) or 0.00375 (3 steps). .Preview Plot @@ -424,7 +428,7 @@ 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. -image::images/axis-outofrange.png[align="center",alt="The extents of the program in x axis are shown"] +image::images/axis-outofrange.png["The extents of the program in x axis are shown",align="center"] .Tool Cone When no tool is loaded, the location of the tip of the tool is @@ -474,13 +478,12 @@ the center of rotation is the center of the line. Otherwise, the center of rotation is the center of the entire program. -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, +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. -By clicking one of the 'Preset View' icons, -or by pressing 'V', several preset views may be selected. +By clicking one of the 'Preset View' icons, or by pressing 'V', several +preset views may be selected. === Text Display Area @@ -493,7 +496,7 @@ the text display will automatically scroll to show the current line. .Current and Selected Lines -image::images/axis-currentandselected.png[align="center", alt="Current and Selected Lines"] +image::images/axis-currentandselected.png["Current and Selected Lines",align="center"] === Manual Control @@ -558,8 +561,12 @@ The dropdown menu Machine/Homing provides an alternate method to home axes. The dropdown menu Machine/Unhoming provides means to unhome axes. -See the <> for more -information. +Si su máquina no tiene interruptores home definidos en la +configuración, el botón 'Home' establecerá la posición actual del eje seleccionado +como la posición absoluta 0 para ese eje y +activara el bit 'is-homed' para ese eje. + +See the <> for more information. .Homing (Non-Identity Kinematics) @@ -569,8 +576,7 @@ 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'. -See the <> for more -information. +See the <> for more information. .Touch Off @@ -582,7 +588,7 @@ resulting value is shown as a number. .Touch Off -image::images/touchoff.png[align="center", alt="Touch Off"] +image::images/touchoff.png["Touch Off",align="center"] .Tool Touch Off @@ -592,7 +598,7 @@ position matches the entered coordinate. .Tool Touch Off -image::images/tooltouchoff.png[align="center", alt="Touch Off"] +image::images/tooltouchoff.png["Touch Off",align="center"] See also the 'Tool touch off to workpiece' and 'Tool touch off to fixture' options in the Machine menu. @@ -621,9 +627,8 @@ sets the 'S' speed to 1. .The Coolant group -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. +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. === MDI @@ -633,17 +638,17 @@ running, the MDI controls are unavailable. .The MDI tab -image::images/axis-mdi.png[align="center", alt="MDI tab"] +image::images/axis-mdi.png["MDI tab",align="center"] * 'History' - This shows MDI commands that have been typed earlier in this session. * 'MDI Command' - This allows you to enter a G-code command to be executed. Execute the - command by pressing Enter or by clicking 'Go'. + command by pressing Enter or by clicking 'Go'. * '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. + 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. === Feed Override @@ -685,8 +690,11 @@ Many of the shortcuts are unavailable when in MDI mode. .Feed Override Keys -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 +[NOTE] +For details on the Spanish keyboard layout please inspect the translated documentation. + +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 @@ -737,7 +745,7 @@ Show LinuxCNC Status .LinuxCNC Status Window -image::images/axis-emc-status.png[align="center", alt="LinuxCNC Status Window"] +image::images/axis-emc-status.png["LinuxCNC Status Window",align="center"] 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 @@ -777,7 +785,6 @@ commands to a running AXIS. The available commands are shown by running file ('--reload'), and making AXIS exit ('--quit'). [[sec:manual-tool-change]](((Axis, Manual Tool Change))) - == Manual Tool Change LinuxCNC includes a userspace HAL component called 'hal_manualtoolchange', @@ -805,7 +812,7 @@ program a G1 with no move after the T. .The Manual Toolchange Window -image::images/manual-tool-change.png[align="center", alt="The Manual Toolchange Window"] +image::images/manual-tool-change.png["The Manual Toolchange Window",align="center"] == Python modules @@ -823,8 +830,7 @@ source code. These modules include: 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'. +running 'in-place', this can be done by using 'scripts/rip-environment'. == Using AXIS in Lathe Mode @@ -836,19 +842,19 @@ 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. -image::images/axis-lathe.png[align="center", alt="Back Tool Lathe"] +image::images/axis-lathe.png["Back Tool Lathe",align="center"] Pressing 'V' zooms out to show the entire file, if one is loaded. When in lathe mode, the shape of the loaded tool (if any) is shown. -image::images/axis-lathe-tool.png[align="center", alt="Lathe Tool Shape"] +image::images/axis-lathe-tool.png["Lathe Tool Shape",align="center"] 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. -image::images/axis-back-tool-lathe.png[align="center", alt="Back Tool Lathe"] +image::images/axis-back-tool-lathe.png["Back Tool Lathe",align="center"] == Using AXIS in Foam Cutting mode @@ -861,19 +867,21 @@ set the Z coordinates of these planes, which default to 0 and 1.5 machine units. .Foam cutting mode -image::images/axis-foam.png[align="center", alt="Foam cutting mode"] - +image::images/axis-foam.png["Foam cutting mode",align="center"] == Advanced Configuration 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='. + -Typically '' would be the configs base name + '_postgui' + '.hal' + -eg. 'lathe_postgui.hal', but can be any legal filename. + +the HAL file named in the INI file: '[HAL]POSTGUI_HALFILE='. +Typically '' 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=' in the INI. + -Each will be run one after the other in the order they appear. + +guaranteeing the widget's HAL pins are available. +You can have multiple line of 'POSTGUI_HALFILE=' in the INI. +Each will be run one after the other in the order they appear. + +Para obtener más información sobre la configuración del archivo ini que puede cambiar la forma en que AXIS +trabaja, consulte la sección << sec:display-section,Seccion Display>> del capitulo de configuración INI. === Program Filters @@ -912,7 +920,7 @@ series of holes along the circumference of a circle. .Circular Holes -image::images/holes.png[align="center", alt="Circular Holes"] +image::images/holes.png["Circular Holes",align="center"] If the environment variable AXIS_PROGRESS_BAR is set, then lines written to stderr of the form @@ -1018,11 +1026,9 @@ of the INI Configuration Chapter. AXIS can display a custom virtual control panel in the right-hand pane. You can program buttons, indicators, data displays and more. For -more information, see the <> and the -<>. +more information, see the <> and the <> chapters. [[axis:preview-control]] - === Preview Control Special comments can be inserted into the G-code file to control how @@ -1037,14 +1043,14 @@ 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). - - (AXIS,hide) Stops the preview (must be first) - - (AXIS,show) Resumes the preview (must follow a hide) - - (AXIS,stop) Stops the preview from here to the end of the file. - - (AXIS,notify,the_text) Displays the_text as an info display -This display can be useful in the Axis preview when (debug,message) -comments are not displayed. +- (AXIS,hide) Stops the preview (must be first) +- (AXIS,show) Resumes the preview (must follow a hide) +- (AXIS,stop) Stops the preview from here to the end of the file. +- (AXIS,notify,the_text) Displays the_text as an info display -=== Axisui Pins +This display can be useful in the Axis preview when (debug,message) comments are not displayed. + +== Axisui 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 @@ -1057,22 +1063,22 @@ Axis has Hal pins to indicate which jog radio button is selected in the 'Manual Control' tab. ---- -Type Dir Name -bit OUT axisui.jog.x -bit OUT axisui.jog.y -bit OUT axisui.jog.z -bit OUT axisui.jog.a -bit OUT axisui.jog.b -bit OUT axisui.jog.c -bit OUT axisui.jog.u -bit OUT axisui.jog.v -bit OUT axisui.jog.w +Type Dir Name +bit OUT axisui.jog.x +bit OUT axisui.jog.y +bit OUT axisui.jog.z +bit OUT axisui.jog.a +bit OUT axisui.jog.b +bit OUT axisui.jog.c +bit OUT axisui.jog.u +bit OUT axisui.jog.v +bit OUT axisui.jog.w ---- Axis has a Hal pin to indicate the jog increment selected on the 'Manual Tab'. ---- -Type Dir Name -float OUT axisui.jog.increment +Type Dir Name +float OUT axisui.jog.increment ---- Axis has a Hal output pin that indicates when an abort has occurred. The @@ -1122,7 +1128,6 @@ 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. [source,python] ---- - # continuous update function def user_live_update(): print 'i am printed every update...' @@ -1516,3 +1521,4 @@ try: except Exception as e: print (e) ---- + diff --git a/docs/src/gui/axis_es.adoc b/docs/src/gui/axis_es.adoc index 4af7922f418..f2625c39c36 100644 --- a/docs/src/gui/axis_es.adoc +++ b/docs/src/gui/axis_es.adoc @@ -1,8 +1,6 @@ :lang: es -[[cha:axis-gui]] - -= GUI AXIS += [[cha:axis-gui]]GUI AXIS == Introducción @@ -11,7 +9,7 @@ Tk y OpenGL para mostrar la interfaz de usuario. .Ventana de AXIS -image::images/axis_es.png[align="center",alt="Ventana AXIS"] +image::images/axis_es.png["Ventana AXIS",align="center"] == Primeros pasos @@ -109,8 +107,8 @@ archivo .ini configurado. Para más información sobre configuración vea el * 'Recargar tabla de herramientas': después de editar la tabla de herramientas, debe volve a cargarla. * 'Editor Ladder' - Si has cargado Classic Ladder puedes editarlo desde - aquí. Vea el capítulo <> -- all-english file removed * 'Salir' - Termina la sesión actual de LinuxCNC. @@ -301,43 +299,43 @@ Familiarícese con el diseño de su máquina e interprete la pantalla según sea De izquierda a derecha en la pantalla de Axis, los botones de la barra de herramientas (atajos de teclado mostrados [entre corchetes]) son: -* image:images/tool_estop.png[alt="Stop de Emergencia"] Stop de Emergencia [F1] (también llamado E-Stop) +* image:images/tool_estop.png["Stop de Emergencia"] Stop de Emergencia [F1] (también llamado E-Stop) -* image:images/tool_power.png[alt="Encendido de Maquina"] Encendido de Maquina [F2] +* image:images/tool_power.png["Encendido de Maquina"] Encendido de Maquina [F2] -* image:images/tool_open.png[alt="Abrir archivo de código G"] Abrir archivo de código G [O] +* image:images/tool_open.png["Abrir archivo de código G"] Abrir archivo de código G [O] -* image:images/tool_reload.png[alt="Recargar archivo actual"] Recargar archivo actual [Ctrl-R] +* image:images/tool_reload.png["Recargar archivo actual"] Recargar archivo actual [Ctrl-R] -* image:images/tool_run.png[alt="Comenzar a ejecutar el archivo actual"] Comenzar a ejecutar el archivo actual [R] +* image:images/tool_run.png["Comenzar a ejecutar el archivo actual"] Comenzar a ejecutar el archivo actual [R] -* image:images/tool_step.png[alt="Ejecutar línea siguiente"] Ejecutar línea siguiente [T] +* image:images/tool_step.png["Ejecutar línea siguiente"] Ejecutar línea siguiente [T] -* image:images/tool_pause.png[alt="Pausar ejecución - Reanudar ejecución"] Pausar ejecución [P] Reanudar ejecución [S] +* image:images/tool_pause.png["Pausar ejecución - Reanudar ejecución"] Pausar ejecución [P] Reanudar ejecución [S] -* image:images/tool_stop.png[alt="Detener la ejecución del programa"] Detener la ejecución del programa [ESC] +* image:images/tool_stop.png["Detener la ejecución del programa"] Detener la ejecución del programa [ESC] -* image:images/tool_blockdelete.png[alt="Saltar lineas"] Saltar lineas con "/" [Alt-M- /] +* image:images/tool_blockdelete.png["Saltar lineas"] Saltar lineas con "/" [Alt-M- /] -* image:images/tool_optpause.png[alt="Pausa Opcional"] Pausa Opcional [Alt-M-1] +* image:images/tool_optpause.png["Pausa Opcional"] Pausa Opcional [Alt-M-1] -* image:images/tool_zoomin.png[alt="Zoom +"] Zoom (mas) +* image:images/tool_zoomin.png["Zoom +"] Zoom (mas) -* image:images/tool_zoomout.png[alt="Zoom -"] Zoom (menos) +* image:images/tool_zoomout.png["Zoom -"] Zoom (menos) -* image:images/tool_axis_z.png[alt="Vista superior"] Vista superior +* image:images/tool_axis_z.png["Vista superior"] Vista superior -* image:images/tool_axis_z2.png[alt="Vista superior girada"] Vista superior girada +* image:images/tool_axis_z2.png["Vista superior girada"] Vista superior girada -* image:images/tool_axis_x.png[alt="Vista lateral"] Vista lateral +* image:images/tool_axis_x.png["Vista lateral"] Vista lateral -* image:images/tool_axis_y.png[alt="Vista frontal"] Vista frontal +* image:images/tool_axis_y.png["Vista frontal"] Vista frontal -* image:images/tool_axis_p.png[alt="Vista en perspectiva"] Vista en perspectiva +* image:images/tool_axis_p.png["Vista en perspectiva"] Vista en perspectiva -* image:images/tool_rotate.png[alt="Alternar entre los modos arrastrar/rotar"] Alternar entre los modos de arrastrar/rotar [D] +* image:images/tool_rotate.png["Alternar entre los modos arrastrar/rotar"] Alternar entre los modos de arrastrar/rotar [D] -* image:images/tool_clear.png[alt="Limpiar backplot en vivo"] Limpiar backplot en vivo [Ctrl-K] +* image:images/tool_clear.png["Limpiar backplot en vivo"] Limpiar backplot en vivo [Ctrl-K] === Área de visualización gráfica @@ -345,9 +343,9 @@ De izquierda a derecha en la pantalla de Axis, los botones de la barra de herram En la esquina superior izquierda de la pantalla del programa está la visualizacion de las coordenadas de posicion para cada eje. A la derecha del número, un símbolo de origen -image:images/axis-homed.png[alt="el símbolo de origen se muestra si el eje ha sido localizado"] que se muestra si el eje ha sido dotado de home. +image:images/axis-homed.png["el símbolo de origen se muestra si el eje ha sido localizado"] que se muestra si el eje ha sido dotado de home. -Una símbolo de límite image:images/axis-limit.png[alt="símbolo de límite"] se muestra en el lado derecho del +Una símbolo de límite image:images/axis-limit.png["símbolo de límite"] se muestra en el lado derecho del número de coordenada de posición, si el eje está en uno de sus interruptores de límite. Para interpretar correctamente los números de coordenadas de posición, consulte el indicador 'Posición:' @@ -356,7 +354,7 @@ el número mostrado está en el sistema de coordenadas de la máquina. Si se mue 'Relative Actual', entonces el número mostrado está en la coordenada del sistema con desplazamiento. Cuando las coordenadas mostradas son relativas y se ha establecido un desplazamiento, la pantalla incluirá un marcador <> -image:images/axis-machineorigin.png[alt="Origen maquina cian"] cian. +image:images/axis-machineorigin.png["Origen maquina cian"] cian. Si la posición es 'Comandada', entonces la coordenada exacta dada en un comando de código G es la mostrada. Si es 'Actual', entonces es la posición real a la que la máquina @@ -396,7 +394,7 @@ y el programa requiere 3,83 pulgadas de recorrido X. Para que el movimiento programado esté dentro del recorrido de la máquina en este caso, haga jog a la izquierda y vuelva a hacer Touch Off X. -image::images/axis-outofrange.png[align="center",alt="Se muestran las extensiones del programa en el eje x"] +image::images/axis-outofrange.png["Se muestran las extensiones del programa en el eje x",align="center",] .Herramienta Cono @@ -463,7 +461,7 @@ la pantalla de texto se desplazará automáticamente para mostrar la línea actu Líneas actuales y seleccionadas -image::images/axis-currentandselected_es.png[align="center",alt="Líneas actuales y seleccionadas"] +image::images/axis-currentandselected_es.png["Líneas actuales y seleccionadas",align="center"] === Control manual @@ -534,7 +532,7 @@ El valor resultante se muestra como un número. .Touch Off -image::images/touchoff_es.png[align="center", alt="Touch Off"] +image::images/touchoff_es.png["Touch Off",align="center"] Consulte también las opciones 'Tool touch off to workpiece' y 'Tool touch off to fixture' en el menú Machine. @@ -576,7 +574,7 @@ en ejecución, los controles MDI no están disponibles. La pestaña MDI -image::images/axis-mdi_es.png[align="center",alt="pestaña MDI"] +image::images/axis-mdi_es.png["pestaña MDI",align="center"] * 'Historial' - Muestra los comandos MDI que se han escrito anteriormente en esta sesión. @@ -686,7 +684,7 @@ Mostrar estado de LinuxCNC .Ventana de estado de LinuxCNC -image::images/axis-emc-status_es.png[align="center",alt="Status LinuxCNC"] +image::images/axis-emc-status_es.png["Status LinuxCNC",align="center"] El nombre de cada elemento se muestra en la columna izquierda. El valor actual se muestra en la columna derecha. Si el valor ha cambiado recientemente, @@ -755,7 +753,7 @@ programe un G1 sin movimiento después de T. .Ventana de cambio de herramientas manual -image::images/manual-tool-change_es.png[align="center",alt="Ventana de cambio de herramientas manual"] +image::images/manual-tool-change_es.png["Ventana de cambio de herramientas manual",align="center"] == Módulos de Python @@ -791,7 +789,7 @@ En el modo de torno, se muestra la forma de la herramienta cargada (si existe). .La forma de la herramienta del torno -image::images/axis-lathe-tool.png[align="center", alt="Forma de herramienta del torno"] +image::images/axis-lathe-tool.png["Forma de herramienta del torno",align="center"] == Usando AXIS en el modo de corte de espuma @@ -804,7 +802,7 @@ establecen las coordenadas Z de estos planos, que por defecto son 0 y 1,5 unidad .Modo de corte de espuma. -image::images/axis-foam_es.png[align="center",alt="Modo de corte de espuma"] +image::images/axis-foam_es.png["Modo de corte de espuma",align="center"] == Configuración avanzada @@ -854,7 +852,7 @@ serie de agujeros a lo largo de la circunferencia de un círculo. .Agujeros circulares -image::images/holes.png[align="center",alt="Agujeros circulares"] +image::images/holes.png["Agujeros circulares",align="center"] Si la variable de entorno AXIS_PROGRESS_BAR está establecida, entonces las líneas escriben al stderr del formulario diff --git a/docs/src/gui/axis_fr.adoc b/docs/src/gui/axis_fr.adoc index 5f1d03b6eb6..527bb41ff37 100644 --- a/docs/src/gui/axis_fr.adoc +++ b/docs/src/gui/axis_fr.adoc @@ -1,9 +1,7 @@ :lang: fr :toc: -= L'interface graphique AXIS - -[[cha:Axis]] += [[cha:Axis]]L'interface graphique AXIS == Introduction @@ -15,7 +13,7 @@ afficher son interface graphique. [[cap:Fenetre-AXIS]] .Fenêtre d'AXIS -image::../user/images/axis_25_fr.png[alt="Fenêtre d'AXIS"] +image::../user/images/axis_25_fr.png["Fenêtre d'AXIS"] == Commencer avec AXIS @@ -349,45 +347,45 @@ l'affichage comme il se doit. Signification des boutons de la fenêtre d'AXIS, de gauche à droite: -* image:images/tool_estop.png[alt="Arrêt d'urgence (A/U)"] 'Arrêt d'urgence' (A/U) +* image:images/tool_estop.png["Arrêt d'urgence (A/U)"] 'Arrêt d'urgence' (A/U) (en Anglais, E-Stop)(((Arrêt d'urgence))) -* image:images/tool_power.png[alt="Marche/Arrêt puissance machine"] Marche/Arrêt puissance machine(((Marche/Arret))) +* image:images/tool_power.png["Marche/Arrêt puissance machine"] Marche/Arrêt puissance machine(((Marche/Arret))) -* image:images/tool_open.png[alt="Ouvrir un fichier"] Ouvrir un fichier +* image:images/tool_open.png["Ouvrir un fichier"] Ouvrir un fichier -* image:images/tool_reload.png[alt="Recharger le fichier courant"] Recharger le fichier courant +* image:images/tool_reload.png["Recharger le fichier courant"] Recharger le fichier courant -* image:images/tool_run.png[alt="Départ cycle"] Départ cycle +* image:images/tool_run.png["Départ cycle"] Départ cycle -* image:images/tool_step.png[alt="Cycle en pas à pas"] Cycle en pas à pas +* image:images/tool_step.png["Cycle en pas à pas"] Cycle en pas à pas -* image:images/tool_pause.png[alt="Pause/Reprise"] Pause/Reprise +* image:images/tool_pause.png["Pause/Reprise"] Pause/Reprise -* image:images/tool_stop.png[alt="Stopper l'exécution du programme"] Stopper l'exécution du programme +* image:images/tool_stop.png["Stopper l'exécution du programme"] Stopper l'exécution du programme -* image:images/tool_blockdelete.png[alt="Sauter ou non les lignes commençant par /"] Sauter ou non les lignes commençant par */* +* image:images/tool_blockdelete.png["Sauter ou non les lignes commençant par /"] Sauter ou non les lignes commençant par */* -* image:images/tool_optpause.png[alt="Avec ou sans pause optionnelle"] Avec ou sans pause optionnelle +* image:images/tool_optpause.png["Avec ou sans pause optionnelle"] Avec ou sans pause optionnelle -* image:images/tool_zoomin.png[alt="Zoom plus"] Zoom plus +* image:images/tool_zoomin.png["Zoom plus"] Zoom plus -* image:images/tool_zoomout.png[alt="Zoom moins"] Zoom moins +* image:images/tool_zoomout.png["Zoom moins"] Zoom moins -* image:images/tool_axis_z.png[alt="Vue prédéfinie Z (vue de dessus)"] Vue prédéfinie *Z* (vue de dessus) +* image:images/tool_axis_z.png["Vue prédéfinie Z (vue de dessus)"] Vue prédéfinie *Z* (vue de dessus) -* image:images/tool_axis_z2.png[alt="Vue prédéfinie Z basculée"] Vue prédéfinie *Z basculée* +* image:images/tool_axis_z2.png["Vue prédéfinie Z basculée"] Vue prédéfinie *Z basculée* -* image:images/tool_axis_x.png[alt="Vue prédéfinie X (vue de côté)"] Vue prédéfinie *X* (vue de côté) +* image:images/tool_axis_x.png["Vue prédéfinie X (vue de côté)"] Vue prédéfinie *X* (vue de côté) -* image:images/tool_axis_y.png[alt="Vue prédéfinie Y (vue de face)"] Vue prédéfinie *Y* (vue de face) +* image:images/tool_axis_y.png["Vue prédéfinie Y (vue de face)"] Vue prédéfinie *Y* (vue de face) -* image:images/tool_axis_p.png[alt="Vue prédéfinie P (vue en perspective)"] Vue prédéfinie *P* (vue en perspective) +* image:images/tool_axis_p.png["Vue prédéfinie P (vue en perspective)"] Vue prédéfinie *P* (vue en perspective) -* image:images/tool_rotate.png[alt="Orienter la vue avec le bouton"] Orienter la vue avec le bouton +* image:images/tool_rotate.png["Orienter la vue avec le bouton"] Orienter la vue avec le bouton gauche de la souris -* image:images/tool_clear.png[alt="Rafraîchir le parcours d'outil"] Rafraîchir le parcours d'outil +* image:images/tool_clear.png["Rafraîchir le parcours d'outil"] Rafraîchir le parcours d'outil === Zones d'affichage graphique du programme @@ -398,12 +396,12 @@ Il montre les positions de la machine. A gauche du nom de l'axe, un symbole d'origine est visible si la prise d'origine de l'axe a été faite. -image:images/axis-homed.png[alt="Symbole de prise d'origine faite"] Symbole de prise d'origine faite. +image:images/axis-homed.png["Symbole de prise d'origine faite"] Symbole de prise d'origine faite. A droite du nom de l'axe, un symbole de limite est visible si l'axe est sur un de ses capteurs de limite. -image:images/axis-limit.png[alt="Symbole de limite d'axe"] Symbole de limite d'axe. +image:images/axis-limit.png["Symbole de limite d'axe"] Symbole de limite d'axe. Pour interpréter correctement ces valeurs, référez vous à l'indicateur 'Position' de la barre d'état. Si la position est 'Absolue', alors les @@ -465,7 +463,7 @@ l'origine pièce. [[cap:Etendues-Depassees]] .Limites logicielles -image::images/axis-outofrange.png[alt="Limites logicielles"] +image::images/axis-outofrange.png["Limites logicielles"] .Le cône d'outil @@ -520,7 +518,7 @@ le texte défile automatiquement pour toujours laisser la ligne courante visible .Ligne courante et ligne en surbrillance -image::images/axis-currentandselected_fr.png[alt="Ligne courante et ligne en surbrillance"] +image::images/axis-currentandselected_fr.png["Ligne courante et ligne en surbrillance"] === Contrôle manuel (((Contrôle manuel))) @@ -593,7 +591,7 @@ du bloc. .Fenêtre du Toucher -image::images/touchoff_fr.png[alt="Fenêtre du Toucher"] +image::images/touchoff_fr.png["Fenêtre du Toucher"] Voir aussi les options du menu Machine: 'Toucher la pièce' et 'Toucher le porte-pièce'. @@ -636,7 +634,7 @@ programme est en cours d'exécution, cet onglet n'est pas opérationnel. .L'onglet 'Données manuelles' -image::images/axis-codeentry_fr.png[alt="L'onglet 'Données manuelles"] +image::images/axis-codeentry_fr.png["L'onglet 'Données manuelles"] * 'Historique' - Affiche les commandes précédemment tapées et au cours des session précédentes. @@ -748,7 +746,7 @@ d'état de LinuxCNC. .Fenêtre d'état de LinuxCNC -image::images/axis-emc-status.png[alt="Fenêtre d'état de LinuxCNC"] +image::images/axis-emc-status.png["Fenêtre d'état de LinuxCNC"] Le nom de chaque entrée est affiché dans la colonne de gauche. La valeur courante de chaque entrée s'affiche dans la colonne de droite. @@ -817,7 +815,7 @@ après un M6 T. [[cap:Changement-manuel-d-outil]] .La fenêtre de changement manuel d'outil -image::images/manualtoolchange_fr.png[alt="La fenêtre de changement manuel d'outil"] +image::images/manualtoolchange_fr.png["La fenêtre de changement manuel d'outil"] == Modules en Python @@ -862,7 +860,7 @@ représentés. .Représentation de l'outil en mode tour -image::images/axis-lathe-tool.png[alt="Représentation de l'outil en mode tour"] +image::images/axis-lathe-tool.png["Représentation de l'outil en mode tour"] == Configuration avancée d'AXIS @@ -908,7 +906,7 @@ une série de trous suivant un arc de cercle. .Perçages circulaires -image::images/holes.png[alt="Perçages circulaires"] +image::images/holes.png["Perçages circulaires"] Si la variable d'environnement: AXIS_PROGRESS_BAR est active, alors les lignes seront écrites sur stderr de la forme: @@ -987,14 +985,13 @@ En définissant: [DISPLAY]EDITOR , les options de menu: 'Fichier' → Deux valeurs qui fonctionnent bien: EDITOR=gedit et 'EDITOR=gnome-terminal -e nano'. -=== Panneau de contrôle virtuel -(((Panneau de contrôle virtuel))) +=== (((Panneau de contrôle virtuel)))Panneau de contrôle virtuel AXIS peut afficher un panneau de commande virtuel personnalisé dans le volet de droite. Il est possible d'y placer des boutons, des indicateurs qui afficheront des données et plus encore. Voir le manuel de l'intégrateur. -=== Commentaires spéciaux[[sub:Commentaires-speciaux]](((Commentaires spéciaux))) +=== [[sub:Commentaires-speciaux]](((Commentaires spéciaux)))Commentaires spéciaux Les commentaires spéciaux peuvent être insérés dans le fichier de G-code pour contrôler le comportement de l'affichage d'AXIS. Pour limiter l'aperçu au seul diff --git a/docs/src/gui/filter_programs.adoc b/docs/src/gui/filter_programs.adoc index f3095b11510..d302438f77e 100644 --- a/docs/src/gui/filter_programs.adoc +++ b/docs/src/gui/filter_programs.adoc @@ -1,7 +1,9 @@ +:lang: en = Filter Programs == Introduction + Most of Linuxcnc's screens have the ability to send loaded files through a 'filter program' or + use the filter program to make Gcode. + This filter can do any desired task: Something as simple as making sure + @@ -9,6 +11,7 @@ the file ends with 'M2', or something as complicated as generating + G-Code from an image. + == Setting up the INI for Program Filters + + 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. + @@ -38,7 +41,6 @@ treated as G-code. One such example script is available at + series of holes along the circumference of a circle. + .Circular Holes - image::images/holes.png[align="center", alt="Circular Holes"] If the filter program sends lines to stderr of the form: @@ -84,6 +86,7 @@ Here is a similar program but it actually could filters. + 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 does along it updates any process listening to standard error output' + [source,python] ---- #!/usr/bin/env python3 diff --git a/docs/src/gui/gladevcp.adoc b/docs/src/gui/gladevcp.adoc index fb60d2ca855..cf77cfe6088 100644 --- a/docs/src/gui/gladevcp.adoc +++ b/docs/src/gui/gladevcp.adoc @@ -1,6 +1,6 @@ -[[cha:glade-vcp]] +:lang: en -= Glade Virtual Control Panel += [[cha:glade-vcp]]Glade Virtual Control Panel // TODO: // - manual-example.ui layout - really bad @@ -21,10 +21,10 @@ GladeVCP is an LinuxCNC component which adds the ability to add a new user interface panel to LinuxCNC user interfaces like: - -Axis - -Touchy - -Gscreen - -Gmoccapy + - Axis + - Touchy + - Gscreen + - Gmoccapy Unlike PyVCP, GladeVCP is not limited to displaying and setting HAL pins, as arbitrary actions can be executed in Python code - in fact, a @@ -58,7 +58,7 @@ linked to a HAL pin, which in turn interfaces to the rest of LinuxCNC. - any HAL pin change may be directed to call back into a user-defined Python event handler - any GTK signal (key/button press, window, I/O, timer, network events) may be associated with user-defined handlers in Python - 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 + commands to call a G-code subroutine, plus support for status change operations through Action Widgets - several independent GladeVCP panels may be run in different tabs - separation of user interface appearance and functionality: change appearance without touching any code @@ -118,6 +118,7 @@ FIXME: there is a conflict for motion.N.spindle-speed-out since it is used by bo 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 & @@ -197,6 +198,7 @@ and in the right bottom window, under the 'General' tab, the 'MDI command' property. === Exploring the Python callback + See how a Python callback is integrated into the example: - in glade, see the +hits+ label widget (a plain GTK+ widget) @@ -209,9 +211,7 @@ handled in more detail in the == Creating and Integrating a Glade user interface -[[gladevcp:prerequisites]] - -=== Prerequisite: Glade installation +=== [[gladevcp:prerequisites]]Prerequisite: Glade installation 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: @@ -223,6 +223,7 @@ it with the command: Older versions will not work, you will get a python error. === Running Glade to create a new user interface + 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 @@ -252,6 +253,7 @@ older 'libglade' format correctly but there is no point in using it. The convention for GtkBuilder file extension is '.ui'. === Testing a panel + You're now ready to give it a try (while LinuxCNC, e.g. Axis is running) it with: gladevcp myui.ui @@ -298,6 +300,7 @@ POSTGUI_HALFILE = ./manual-example.hal # gladevcp Demo specific Oword subs live here SUBROUTINE_PATH = ../../nc_files/gladevcp_lib ---- + The default HAL component name of a GladeVCP application started with the GLADEVCP option is: +gladevcp+. The command line actually run by Axis in the above configuration is as follows: @@ -308,12 +311,14 @@ You may add arbitrary gladevcp options here, as long as they dont collide with the above command line options. It is possible to create a custom HAL component name by adding the +-c+ option: + [source,{ini}] ---- [DISPLAY] # add GladeVCP panel where PyVCP used to live: GLADEVCP= -c example -u ./hitcounter.py ./manual-example.ui ---- + The command line actually run by Axis for the above is: halcmd loadusr -Wn example gladevcp -c example -x {XID} -u ./hitcounter.py ./manual-example.ui @@ -330,9 +335,7 @@ might not be needed in your setup. The relative path specifier ../../nc_files/g is constructed to work with directories copied by the configuration picker and when using a run-in-place setup. -[[gladevcp:embeding-tab]] - -=== Embeding as a Tab +=== [[gladevcp:embeding-tab]]Embeding as a Tab To do so, edit your .ini file and add to the DISPLAY and HAL sections of ini file as follows: @@ -485,11 +488,10 @@ So, in case you run gladeVCP from a separate shell window (i.e. not started by the GUI in an embedded fashion): - 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 + commands being run 'at the right point in time', so comment that out + in the ini file - explicitly pass the HAL command file which refers to gladeVCP pins -to gladeVCP with the '-H ' option (see previous section). - + to gladeVCP with the '-H ' option (see previous section). == HAL Widget reference @@ -536,7 +538,7 @@ Exceptions to this rule currently are. - 'HAL_Spinbutton' and 'HAL_ComboBox', which have two pins: a +-f+ (float) and a +-s+ (s32) pin - 'HAL_ProgressBar', which has a +-value+ input pin, and a +-scale+ input pin. -=== Python attributes and methods of HAL Widgets +=== Python attributes and methods of HAL Widgets HAL widgets are instances of GtKWidgets and hence inherit the methods, properties and signals of the applicable GtkWidget class. For @@ -596,9 +598,7 @@ widget, that is, has been created by the +hal_glib.GPin(halcomp.newpin(,,)+ method (see <> for an example). -[[gladevcp:hal-pin-changed-signal]] - -=== The hal-pin-changed signal +=== [[gladevcp:hal-pin-changed-signal]]The hal-pin-changed signal Event-driven programming means that the UI tells your code when "something happens" - through a callback, like when a button was pressed. The @@ -616,9 +616,7 @@ image::images/hal-pin-change-66.png[] The example in +configs/apps/gladevcp/complex+ shows how this is handled in Python. -[[gladevcp:hal-buttons]] - -=== Buttons +=== [[gladevcp:hal-buttons]]Buttons This group of widgets are derived from various Gtk buttons and consists of HAL_Button, HAL_ToggleButton, HAL_RadioButton and CheckButton @@ -647,19 +645,17 @@ Toggle button: image:images/button.png[] [TIP] +---- Defining radio button groups in Glade: - + - decide on default active button - + - in the other button's 'General→Group' select the default active -button's name in the 'Choose a Radio Button in this project' dialog. - + + button's name in the 'Choose a Radio Button in this project' dialog. +---- + See +configs/apps/gladevcp/by-widget/+ for a GladeVCP applications and UI file for working with radio buttons. -[[gladevcp:hal-scales]] - -=== Scales +=== [[gladevcp:hal-scales]]Scales HAL_HScale and HAL_VScale are derived from the GtkHScale and GtkVScale + respectively. + @@ -679,9 +675,7 @@ Example HAL_HScale: image:images/hscale.png[] . -[[gladevcp:hal-spinbutton]] - -=== SpinButton +=== [[gladevcp:hal-spinbutton]]SpinButton HAL SpinButton is derived from GtkSpinButton and holds two pins: @@ -720,6 +714,7 @@ Hal_Dial exports it's count value as hal pins: -delta-scaled:: out FLOAT pin ---- + It has the following properties: cpr:: @@ -752,7 +747,6 @@ scale:: Set this to scale the counts. + default = 1.0 - Direct program control:: There are ways to directly control the widget using Python. @@ -793,9 +787,7 @@ Example Hal_Dial: image::images/Hal_Dial.png[] -[[gladevcp:jogwheel]] - -=== Jog Wheel +=== [[gladevcp:jogwheel]]Jog Wheel 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, + @@ -814,7 +806,6 @@ JogWheel exports it's count value as hal pin: -s:: out S32 pin - It has the following properties: size:: @@ -848,9 +839,7 @@ Example JogWheel: image::images/JogWheel.png[] -[[gladevcp:speedcontrol]] - -=== Speed Control +=== [[gladevcp:speedcontrol]]Speed Control SpeedControl is a widget specially made to control an adjustment with a touch screen. It is a replacement to the normal scale widget @@ -978,10 +967,7 @@ Example Speedcontrol: image::images/SpeedControl.png[] - -[[gladevcp:hal-label]] - -=== Label +=== [[gladevcp:hal-label]]Label HAL_Label is a simple widget based on GtkLabel which represents a HAL pin value in a user-defined format. @@ -999,9 +985,7 @@ text_template:: Example: +Distance: %.03f+ will display the text and the pin value with 3 fractional digits padded with zeros for a FLOAT pin. -[[gladevcp:hal-table]] - -=== Containers +=== [[gladevcp:hal-table]]Containers * HAL_HideTable * HAL_Table State_Sensitive_Table @@ -1034,9 +1018,7 @@ Future versions of gladeVCP may remove this widget completely and then you will If you find some part of your GladeVCP application is 'grayed out' (insensitive), see whether a HAL_Table pin is unset or unconnected. -[[gladevcp:hal-led]] - -=== LED +=== [[gladevcp:hal-led]]LED The hal_led simulates a real indicator LED. + It has a single input BIT pin which controls it's state: ON or OFF. + @@ -1081,9 +1063,7 @@ start up to report the current value. Example LEDs: image:images/leds.png[] -[[gladevcp:hal-progressbar]] - -=== ProgressBar +=== [[gladevcp:hal-progressbar]]ProgressBar [NOTE] This widget might go away. Use the HAL_HBar and HAL_VBar widgets @@ -1151,9 +1131,7 @@ mode to pick a float value from the ListStore. If you're confused like me about how to edit ComboBox ListStores and CellRenderer, see http://www.youtube.com/watch?v=Z5_F-rW2cL8. -[[gladevcp:hal-bars]] - -=== Bars +=== [[gladevcp:hal-bars]]Bars HAL Bar and VBar widgets for horizontal and vertical bars representing float values. They have one input FLOAT hal pin. Both bars have the @@ -1209,9 +1187,7 @@ Vertical bar: image:images/vscale.png[] . -[[gladevcp:hal-meter]] - -=== Meter +=== [[gladevcp:hal-meter]]Meter HAL Meter is a widget similar to PyVCP meter - it represents a float value and has one input FLOAT hal pin. HAL Meter has the following properties: @@ -1250,9 +1226,7 @@ image:images/hal_meter.png[] This widget is for plotting values over time. -[[gladevcp:hal-gremlin]] - -=== Gremlin tool path preview for .ngc files +=== [[gladevcp:hal-gremlin]]Gremlin tool path preview for .ngc files 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 @@ -1354,20 +1328,18 @@ Direct program control:: Hints:: - If you set all the plotting options false but show_offsets true you get an - offsets page instead of a graphics plot. + offsets page instead of a graphics plot. - If you get the zoom distance before changing the view then reset the zoom - distance, it's much more user friendly. + distance, it's much more user friendly. - if you select an element in the preview, the selected element will be used - as rotation center point + as rotation center point Example: image:images/gremlin.png[] -[[gladevcp:hal-offset]] - -=== HAL_Offset +=== [[gladevcp:hal-offset]]HAL_Offset The HAL_Offset widget is used to display the offset of a single axis. It has the following properties: @@ -1384,9 +1356,7 @@ Text template for imperial units:: Reference Type:: 0:G5x 1:tool 2:G92 3:Rotation around Z -[[gladevcp:dro_widget]] - -=== DRO widget +=== [[gladevcp:dro_widget]]DRO widget The DRO widget is used to display the current axis position. It has the following properties: @@ -1439,18 +1409,16 @@ Direct program control:: [widget name].set_dro_inch() [widget name].set_dro_metric() -[[gladevcp:combi_dro]] - -=== Combi_DRO widget +=== [[gladevcp:combi_dro]]Combi_DRO widget -The Combi_DRO widget is used to display the current , the relative axis position and the distance to go in one DRO. + -By clicking on the DRO the Order of the DRO will toggle around. + +The Combi_DRO widget is used to display the current , the relative axis position and the distance to go in one DRO. +By clicking on the DRO the Order of the DRO will toggle around. In Relative Mode the actual coordinate system will be displayed. It has the following properties: joint_number:: - Used to select which axis (technically which joint) is displayed. + + Used to select which axis (technically which joint) is displayed. On a trivialkins machine (mill, lathe, router) axis vrs. joint number are: + '0:X 1:Y 2:Z etc' @@ -1503,16 +1471,16 @@ font_size:: default is 25 toggle_readout:: - A left mouse click will toggle the DRO readout through the different modes ["Rel", "Abs", "DTG"]. + - By unchecking the box you can disable that behavior. The toggling can still be done with [widget name].toggle_readout() + + A left mouse click will toggle the DRO readout through the different modes ["Rel", "Abs", "DTG"]. + By unchecking the box you can disable that behavior. The toggling can still be done with [widget name].toggle_readout(). Value must be bool + default is TRUE cycle_time:: The time the DRO waits between two polls, - the value must be an integer in the range of 100 to 1000, + - default is 150, 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 value must be an integer in the range of 100 to 1000, + default is 150, 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. Direct program control:: @@ -1601,16 +1569,14 @@ There are some information you can get through commands, which may be of interes [widget name].machine_units 0 if Imperial, 1 if Metric -Example, Three Combi_DRO in a window + +Example, Three Combi_DRO in a window: + X = Relative Mode + Y = Absolute Mode + Z = DTG Mode + image::images/combi_dro.png[] -[[gladevcp:iconview]] - -=== IconView (File Select) +=== [[gladevcp:iconview]]IconView (File Select) This is touch screen friendly widget to select a file and to change directories. @@ -1715,7 +1681,6 @@ The widget will emit the following signals: This signal is emitted, when the exit button has been pressed to close the IconView mostly needed if the application is started as stand alone. - Example: image::images/iconview.png[] @@ -1750,9 +1715,7 @@ Direct program control:: [widget name].get_preset_value() Returns the recorded value: a float. -[[gladevcp:tooledit]] - -=== Tooleditor widget +=== [[gladevcp:tooledit]]Tooleditor widget This is a tooleditor widget for displaying and modifying a tool editor file. + If in lathe mode, it will display wear offsets and tool offsets separately. + @@ -1764,7 +1727,8 @@ It has the following properties: Hidden Columns:: This will hide the given columns: The columns are designated (in order) as such: + s,t,p,x,y,z,a,b,c,u,v,w,d,i,j,q,; + - You can hide any number of columns including the select and comments + + You can hide any number of columns including the select and comments + Direct program control:: There a couple ways to directly control the widget using Python. @@ -1813,9 +1777,7 @@ Direct program control:: image::images/gtk-tooledit.png[] -[[gladevcp:offsetpage]] - -=== Offsetpage +=== [[gladevcp:offsetpage]]Offsetpage The Offsetpage widget is used to display/edit the offsets of all the axes. + It has convenience buttons for zeroing G92 and Rotation-Around-Z offsets. + @@ -1883,16 +1845,14 @@ Direct program control:: image::images/offsetpage.png[] -[[gladevcp:hal-sourceview]] - -=== HAL_sourceview widget +=== [[gladevcp:hal-sourceview]]HAL_sourceview widget -This is for displaying and simple editing of G-code. + +This is for displaying and simple editing of G-code. It looks for .ngc highlight specs in ~/share/gtksourceview-2.0/language-specs/ -The current running line will be highlighted. + -With external python glue code: + - *It can search for text, undo and redo changes. + - *It can be used for program line selection. + +The current running line will be highlighted. +With external python glue code: + * It can search for text, undo and redo changes. + * It can be used for program line selection. Direct program control:: @@ -1921,7 +1881,6 @@ Direct program control:: image::images/hal_sourceview.png[] [[gladevcp:mdi-history]] - === MDI history This is for displaying and entering MDI codes. + @@ -1973,12 +1932,12 @@ widget in a nutshell: - it is an object available in Glade - it has no visual appearance by itself - - it's purpose: associate a visible, sensitive UI component like menu, + - it's purpose: associate a visible, sensitive UI component like menu, toolbutton, button with a command. See these widget's 'General→Related Action' property. - - the "canned action" will be executed when the associated UI component + - the "canned action" will be executed when the associated UI component is triggered (button press, menu click..) - - it provides an easy way to execute commands without resorting to + - it provides an easy way to execute commands without resorting to Python programming. The appearance of VCP Actions in Glade is roughly as follows: @@ -1987,7 +1946,6 @@ image::images/vcp-actions.png[] Tooltip hovers provide a description. - === VCP Action widgets VCP Action widgets are one-shot type widgets. They implement a single action and @@ -1995,7 +1953,7 @@ are for use in simple buttons, menu entries or radio/check groups. === VCP Action python -This widget is used to execute small arbitrary python code. + +This widget is used to execute small arbitrary python code. The command string may use special keywords to access important functions. * 'GSTAT' for access to the Gstat library that is used for linuxcnc status @@ -2005,26 +1963,31 @@ The command string may use special keywords to access important functions. * 'linuxcnc' for access to the linuxcnc python module * 'self' for access to the widget instance -There are options to select when the widget will be active. + -There are options to set the mode before the command is executed. + -example command to just print a message to the terminal: + +There are options to select when the widget will be active. +There are options to set the mode before the command is executed. +example command to just print a message to the terminal: + [source,python] ---- print('action activated') ---- -example command to set the machine to off state: + +example command to set the machine to off state: + [source,python] ---- CMD.state(linuxcnc.STATE_OFF) ---- -example command to call a handler function that passes data: + +example command to call a handler function that passes data: + [source,python] ---- EXT.on_button_press(self, 100) ---- + You can use a colon to separate multiple commands. + [source,python] ---- print('Set Machine Off');CMD.state(linuxcnc.STATE_OFF) @@ -2191,9 +2154,7 @@ signals: - +all-homed+ - +not-all-homed+ -[[gladevcp:programming]] - -== GladeVCP Programming +== [[gladevcp:programming]]GladeVCP Programming === User Defined Actions @@ -2326,9 +2287,9 @@ 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: - - one or more several class definition(s) with one or several methods, + - one or more several class definition(s) with one or several methods, in one module or split over several modules, - - a function 'get_handlers' in each module which will return a list of + - 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 @@ -2413,25 +2374,25 @@ First, modules are imported and initialized in command line order. After successful import, `get_handlers()` is called in the following state: - - the widget tree is created, but not yet realized (no toplevel + - the widget tree is created, but not yet realized (no toplevel `window.show()` has been executed yet) - - the halcomp HAL component is set up and all HAL widget's pins have + - the halcomp HAL component is set up and all HAL widget's pins have already been added to it - - it is safe to add more HAL pins because `halcomp.ready()` has not yet + - 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. Once all modules have been imported and method names extracted, the following steps happen: - - all qualifying method names will be connected to the widget tree with + - 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). - the HAL component is finalized with halcomp.ready() - - if a window ID was passed as argument, the widget tree is re-parented + - 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) - - if a HAL command file was passed with `-H halfile`, it is executed + - if a HAL command file was passed with `-H halfile`, it is executed with halcmd - the Gtk main loop is run. @@ -2638,7 +2599,6 @@ bad inifile will be renamed to have the .BAD suffix. Subsequent bad ini files overwrite earlier .BAD files. [[gladevcp:adding-hal-pins]] - === Adding HAL pins If you need HAL pins which are not associated with a specific HAL @@ -2813,18 +2773,18 @@ I defined a `hal_spinbutton` widget in glade, and set a default `value` property == Troubleshooting - - make sure you have the development version of LinuxCNC installed. You + - 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. - - run GladeVCP or Axis from a terminal window. If you get Python errors, + - 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 underscore); if yes, remove the +hal.so+ file. It has been superseded by hal.py in the same directory and confuses the import mechanism. - - if you're using run-in-place, do a 'make clean' to remove any + - if you're using run-in-place, do a 'make clean' to remove any accidentally left over hal.so file, then 'make'. - - if you're using 'HAL_table' or 'HAL_HBox' widgets, be aware they have + - 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. diff --git a/docs/src/gui/gladevcp_es.adoc b/docs/src/gui/gladevcp_es.adoc deleted file mode 100644 index 9f3e81c7a0e..00000000000 --- a/docs/src/gui/gladevcp_es.adoc +++ /dev/null @@ -1,2913 +0,0 @@ -[[cha:glade-vcp]] - -= Glade Virtual Control Panel - -// TODO: -// - manual-example.ui layout - really bad -// - restructure faq/troubleshooting/notes section -// - check wiki vs docs -// - check other gladevcp docs branch against this - -:ini: {basebackend@docbook:'':ini} -:hal: {basebackend@docbook:'':hal} -:ngc: {basebackend@docbook:'':ngc} -// begin a listing of ini/hal/ngc files like so: -//[source,{ini}] -//[source,{hal}] -//[source,{ngc}] - -== What is GladeVCP? - -GladeVCP is an LinuxCNC component which adds the ability to add a new user -interface panel to LinuxCNC user interfaces like: - - -Axis - -Touchy - -Gscreen - -Gmoccapy - -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. - -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 http://www.pygtk.org/[PyGTK] 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. - - -=== PyVCP versus GladeVCP at a glance - -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. - -*PyVCP:* - - - widget set: uses TkInter widgets - - user interface creation: "edit XML file / run result / evaluate looks" cycle - - no support for embedding user-defined event handling - - no LinuxCNC interaction beyond HAL pin I/O supported - -*GladeVCP:* - - - widget set: relies on the http://www.gtk.org/[GTK+] widget set. - - user interface creation: uses the http://glade.gnome.org/[Glade] WYSIWYG user interface editor - - any HAL pin change may be directed to call back into a user-defined Python event handler - - any GTK signal (key/button press, window, I/O, timer, network events) may be associated with user-defined handlers in Python - - 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 - - several independent GladeVCP panels may be run in different tabs - - separation of user interface appearance and functionality: change appearance without touching any code - -== A Quick Tour with the Example Panel - -GladeVCP panel windows may be run in three different setups: - - - always visible integrated into Axis at the right side, exactly like PyVCP panels - - 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 - - as a standalone toplevel window, which can be iconifyed/deiconified independent of the main window. - -.Installed LinuxCNC -If you're using an installed version of LinuxCNC the examples shown below are in -the <> in the 'Sample -Configurations > apps > gladevcp' branch. - -.Git Checkout -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. - -[NOTE] -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. - -Run the sample GladeVCP panel integrated into Axis like PyVCP as follows: - ----- -$ cd configs/sim/axis/gladevcp -$ linuxcnc gladevcp_panel.ini ----- - -image::images/example-panel-small.png[] - -Run the same panel, but as a tab inside Axis: - ----- -$ cd configs/sim/axis/gladevcp -$ linuxcnc gladevcp_tab.ini ----- - -image::images/example-tabbed-small.png[] - -//// -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[] -//// - -To run this panel inside 'Touchy': - ----- -$ cd configs/sim/touchy/gladevcp -$ linuxcnc gladevcp_touchy.ini ----- - -image::images/touchy-tab-33.png[] - - -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. - -=== Exploring the example panel - -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'. - -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' and 'M6' -commands in the MDI window will change the current and prepared tool -number fields. - -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. - -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 - -=== Exploring the User Interface description - -The user interface is created with the glade UI editor - to explore -it, you need to have <>. To -edit the user interface, run the command - - $ glade configs/axis/gladevcp/manual-example.ui - -(The required glade program may be named glade-gtk2 on more recent systems.) - -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. - -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. - -=== Exploring the Python callback -See how a Python callback is integrated into the example: - - - in glade, see the +hits+ label widget (a plain GTK+ widget) - - in the +button1+ widget, look at the 'Signals' tab, and find the signal 'pressed' associated with the handler 'on_button_press' - - in hitcounter.py, see the method 'on_button_press' and see how it sets the label property in the 'hits' object - -The is just touching upon the concept - the callback mechanism will be -handled in more detail in the -<> section. - -== Creating and Integrating a Glade user interface - -[[gladevcp:prerequisites]] - -=== Prerequisite: Glade installation -To view or modify Glade UI files, you need glade 3.8.0 installed - it is not -needed just to run a GladeVCP panel. If the glade command is missing, install -it with the command: - - $ sudo apt-get install glade-gtk2 - -Verify the version number to be 3.8.0 or less - - $ glade-gtk2 --version -glade3 3.8.0 - -=== Running Glade to create a new user interface -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]. - -Either modify an existing UI component by running +glade .ui+ -or start a new one by just running the +glade+ command from the shell. - -- If LinuxCNC was not installed from a package, the LinuxCNC shell environment needs to be set up with -+. /scripts/rip-environment+, otherwise glade won't find the LinuxCNC-specific widgets. -- When asked for unsaved Preferences, just accept the defaults and hit 'Close'. -- 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. -- In the left tab, scroll down and expand 'HAL Python' and 'VCP Actions'. -- add a container like a HAL_Box or a HAL_Table from 'HAL Python' to the frame -- pick and place some elements like LED, button, etc. within a container - -This will look like so: - -image::images/glade-manual-small.png[] - -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'. - -=== Testing a panel -You're now ready to give it a try (while LinuxCNC, e.g. Axis is running) it with: - - gladevcp myui.ui - -GladeVCP creates a HAL component named like the basename of the UI -file - 'myui' in this case - unless overridden by the +-c + option. If running Axis, just try 'Show HAL configuration' and -inspect its pins. - -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. - -To just activate a container, execute the HAL command +setp gladevcp. 1+. - -=== Preparing the HAL command file -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. - -CAUTION: 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. - -=== Integrating into Axis like PyVCP - -Place the GladeVCP panel in the righthand side panel by specifying the -following in the ini file: - -[source,{ini}] ----- -[DISPLAY] -# add GladeVCP panel where PyVCP used to live: -GLADEVCP= -u ./hitcounter.py ./manual-example.ui - -[HAL] -# HAL commands for GladeVCP components in a tab must be executed via POSTGUI_HALFILE -POSTGUI_HALFILE = ./manual-example.hal - -[RS274NGC] -# gladevcp Demo specific Oword subs live here -SUBROUTINE_PATH = ../../nc_files/gladevcp_lib ----- -The default HAL component name of a GladeVCP application started with the GLADEVCP option is: +gladevcp+. - -The command line actually run by Axis in the above configuration is as follows: - - halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x {XID} -u ./hitcounter.py ./manual-example.ui - -You may add arbitrary gladevcp options here, as long as they dont collide with -the above command line options. - -It is possible to create a custom HAL component name by adding the +-c+ option: -[source,{ini}] ----- -[DISPLAY] -# add GladeVCP panel where PyVCP used to live: -GLADEVCP= -c example -u ./hitcounter.py ./manual-example.ui ----- -The command line actually run by Axis for the above is: - - halcmd loadusr -Wn example gladevcp -c example -x {XID} -u ./hitcounter.py ./manual-example.ui - -[NOTE] -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)) - -[NOTE] -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. - -[[gladevcp:embeding-tab]] - -=== Embeding as a Tab - -To do so, edit your .ini file and add to the DISPLAY and HAL sections of ini -file as follows: - -[source,{ini}] ----- -[DISPLAY] -# add GladeVCP panel as a tab next to Preview/DRO: -EMBED_TAB_NAME=GladeVCP demo -EMBED_TAB_COMMAND=halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x {XID} -u ./gladevcp/hitcounter.py ./gladevcp/manual-example.ui - -[HAL] -# HAL commands for GladeVCP components in a tab must be executed via POSTGUI_HALFILE -POSTGUI_HALFILE = ./gladevcp/manual-example.hal - -[RS274NGC] -# gladevcp Demo specific Oword subs live here -SUBROUTINE_PATH = ../../nc_files/gladevcp_lib ----- - -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. - -When changing the component name in the above example, note that the -names used in +-Wn + and +-c + must be -identical. - -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. - -[NOTE] -Make sure the UI file is the last option passed to GladeVCP in -both the +GLADEVCP=+ and +EMBED_TAB_COMMAND=+ statements. - -=== Integrating into Touchy -To do add a GladeVCP tab to 'Touchy', edit your .ini file as follows: - -[source,{ini}] ----- -[DISPLAY] -# add GladeVCP panel as a tab -EMBED_TAB_NAME=GladeVCP demo -EMBED_TAB_COMMAND=gladevcp -c gladevcp -x {XID} -u ./hitcounter.py -H ./gladevcp-touchy.hal ./manual-example.ui - -[RS274NGC] -# gladevcp Demo specific Oword subs live here -SUBROUTINE_PATH = ../../nc_files/gladevcp_lib ----- - -[NOTE] -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)) - - -Note the following differences to the Axis tab setup: - - - 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. - - - there is no 'POSTGUI_HALFILE=' ini option, but passing the HAL command file on the 'EMBED_TAB_COMMAND=' line is ok - - - the 'halcmd loaduser -Wn ...' incantation is not needed. - -== GladeVCP command line options - -See also 'man gladevcp' . These are the gladevcp command line options: - -Usage: gladevcp [options] myfile.ui - -Options: - --h, --help:: - show this help message and exit - --c NAME:: - Set component name to NAME. Default is base name of UI file - --d:: - Enable debug output - --g GEOMETRY:: - Set geometry WIDTHxHEIGHT+XOFFSET+YOFFSET. Values are in pixel units, - XOFFSET/YOFFSET is referenced from top left of screen. - Use -g WIDTHxHEIGHT for just setting size or -g +XOFFSET+YOFFSET for just - position - --H FILE:: - execute hal statements from FILE with halcmd after the - component is set up and ready - --m MAXIMUM:: - force panel window to maximize. Together with the -g geometry option - one can move the panel to a second monitor and force it to use all of the screen - --t THEME:: - set gtk theme. Default is system theme. Different panels can have different themes. - An example theme can be found in the http://wiki.linuxcnc.org/cgi-bin/wiki.pl?GTK_Themes[EMC Wiki]. - --x XID:: - Re-parent GladeVCP into an existing window XID instead of creating a - new top level window - --u FILE:: - Use File's as additional user defined modules with handlers - --U USEROPT:: - pass USEROPTs to Python modules - -== Understanding the gladeVCP startup process - -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. - -The normal LinuxCNC startup process does the following: - -- the realtime environment is started -- all HAL components are loaded -- the HAL components are linked together through the .hal cmd scripts -- task, iocontrol and eventually the user interface is started -- pre-gladeVCP the assumption was: by the time the UI starts, all of HAL is loaded, plumbed and ready to go - -The introduction of gladeVCP brought the following issue: - -- 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) -- this requires the master GUI to run before the gladeVCP window can be hooked into the master GUI -- however gladeVCP is also a HAL component, and creates HAL pins of its own. -- as a consequence, all HAL plumbing involving gladeVCP HAL pins as source or destination must be run *after* the GUI has been set up - -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 gladVCP 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. - -So, in case you run gladeVCP from a separate shell window (i.e. not -started by the GUI in an embedded fashion): - -- 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 -- explicitly pass the HAL command file which refers to gladeVCP pins -to gladeVCP with the '-H ' option (see previous section). - - -== HAL Widget reference - -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. - -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 <>. 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. - - - Widgets for indicating "bit" signals: <> - - Widgets for controlling "bit" signals: <> - - Widgets for indicating "number" signals: <>, - <>, - <>, <> - - Widgets for controlling "number" signals: <>, - <>, <>, <> - - Sensitive control widgets: <> - - Tool Path preview: <> - - Widgets to show axis positions: <>, - <> - - Widgets for file handling: <> - - Widgets for display/edit of all axes offsets: <> - - Widgets for display/edit of all tool offsets: <> - - Widget for Gcode display and edit: <> - - widget for MDI input and history display: <> - -=== Widget and HAL pin naming - -Most HAL widgets have a single associated HAL pin with the same HAL name -as the widget (glade: General→Name). - -Exceptions to this rule currently are. - -- 'HAL_Spinbutton' and 'HAL_ComboBox', which have two pins: a +-f+ (float) and a +-s+ (s32) pin -- 'HAL_ProgressBar', which has a +-value+ input pin, and a +-scale+ input pin. - -=== Python attributes and methods of HAL Widgets - -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]. - -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'. - -HAL Widgets also have a few HAL-specific Python attributes: - -hal_pin:: - the underlying HAL pin Python object in case the widget has a - single pin type - -hal_pin_s, hal_pin_f:: - the S32 and float pins of the 'HAL_Spinbutton' and - 'HAL_ComboBox' widgets - note these widgets do not have a - 'hal_pin' attribute! - -hal_pin_scale:: - the float input pin of 'HAL_ProgressBar' widget representing - the maximum absolute value of input. - -The are several HAL-specific methods of HAL Widgets, but the only -relevant method is: - -.get():: - Retrieve the value of the current HAL pin, where '' is - the applicable HAL pin name listed above. - - -=== Setting pin and widget values - -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!. - -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 halfile for testing though. - -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(,,)+ method (see -<> for an example). - -[[gladevcp:hal-pin-changed-signal]] - -=== The hal-pin-changed signal - -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. - -Here is an example how to set a +hal-pin-changed+ signal for a HAL_LED -in the Glade UI editor: - -image::images/hal-pin-change-66.png[] -The example in +configs/apps/gladevcp/complex+ shows how -this is handled in Python. - -[[gladevcp:hal-buttons]] - -=== Buttons - -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. - - - HAL_Button: instantaneous action, does not retain state. Important - signal: +pressed+ - - HAL_ToggleButton, HAL_CheckButton: retains on/off state. Important - signal: +toggled+ - - HAL_RadioButton: a one-of-many group. Important signal: +toggled+ (per - button). - - Important common methods: +set_active()+, +get_active()+ - - Important properties: +label+, +image+ - - -// .Buttons -Check button: -image:images/checkbutton.png[] - -Radio buttons: -image:images/radiobutton.png[] - -Toggle button: -image:images/button.png[] - -[TIP] -Defining radio button groups in Glade: - + -- decide on default active button - + -- in the other button's 'General→Group' select the default active -button's name in the 'Choose a Radio Button in this project' dialog. - + -See +configs/apps/gladevcp/by-widget/+ for a GladeVCP applications -and UI file for working with radio buttons. - -[[gladevcp:hal-scales]] - -=== Scales - -HAL_HScale and HAL_VScale are derived from the GtkHScale and GtkVScale + -respectively. + - -:: - out FLOAT pin --s:: - out S32 pin - -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. + - -Example HAL_HScale: -image:images/hscale.png[] -. - -[[gladevcp:hal-spinbutton]] - -=== SpinButton - -HAL SpinButton is derived from GtkSpinButton and holds two pins: - --f:: - out FLOAT pin --s:: - out S32 pin - -To be useful, Spinbuttons need an adjustment value like scales, -see above. - -Example SpinButton: -image:images/spinbutton.png[] - -=== Hal_Dial - -The hal_dial widget simulates a jogwheel or adjustment dial. + -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. + -By double clicking the left or right button the scale factor can be increased or decreased. + - - * Counterclockwise = reduce counts - * Clockwise = increase counts - * Wheel up = increase counts - * Wheel down = reduce counts - * left Double Click = x10 scale - * Right Double Click = /10 scale - ----- -Hal_Dial exports it's count value as hal pins: - -:: - out S32 pin --scaled:: - out FLOAT pin --delta-scaled:: - out FLOAT pin ----- -It has the following properties: - -cpr:: - Sets the Counts per Revolution, allowed values are in the range from 25 to 360 + - default = 100 -show_counts:: - Set this to False, if you want to hide the counts display in the middle of the widget. + - default = True -label:: - Set the content of the label which may be shown over the counts value. + - If the label given is longer than 15 Characters, it will be cut to 15 Characters. + - default = blank -center_color:: - This allows one to change the color of the wheel. It uses a GDK color string. + - default = #bdefbdefbdef (gray) -count_type_shown:: - There are three counts available 0) Raw CPR counts 1) Scaled counts 2) Delta scaled counts. + - default = 1 - * count is based on the CPR selected - it will count positive and negative. It is available as a S32 pin. + - * Scaled-count is CPR count times the scale - it can be positive and negative. + - If you change the scale the output will immediately reflect the change. It is available as a FLOAT pin. + - * Delta-scaled-count is cpr count CHANGE, times scale. + - If you change the scale, only the counts after that change will be scaled and then added to the current value. + - It is available as a FLOAT pin. -scale_adjustable:: - Set this to False if you want to disallow scale changes by double clicking the widget. + - If this is false the scale factor will not show on the widget. + - default = True -scale:: - Set this to scale the counts. + - default = 1.0 - - -Direct program control:: - - There are ways to directly control the widget using Python. - - Using goobject to set the above listed properties: - [widget name].set_property("cpr",int(value)) - [widget name].set_property("show_counts, True) - [widget name].set_property("center_color",gtk.gdk.Color('#bdefbdefbdef')) - [widget name].set_property('label', 'Test Dial 12345') - [widget name].set_property('scale_adjustable', True) - [widget name].set_property('scale', 10.5) - [widget name].set_property('count_type_shown', 0) - - There are python methods: - [widget name].get_value() - Will return the counts value as a s32 integer - [widget name].get_scaled_value() - Will return the counts value as a float - [widget name].get_delta_scaled_value() - Will return the counts value as a float - [widget name].set_label("string") - Sets the label content with "string" - - There are two GObject signals emitted: - count_changed - emitted when the widget's count changes eg. from being wheel scrolled. - scale_changed - emitted when the widget's scale changes eg. from double clicking. + - connect to these like so: - [widget name].connect('count_changed', [count function name]) - [widget name].connect('scale_changed', [scale function name]) + - The callback functions would use this pattern: - def [count function name](widget, count,scale,delta_scale): - This will return: the widget, the current count, scale and delta scale of that widget. - - -Example Hal_Dial: - -image::images/Hal_Dial.png[] - -[[gladevcp:jogwheel]] - -=== Jog Wheel - -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. + - - * Counterclockwise = reduce counts - * Clockwise = increase counts - * Wheel up = increase counts - * Wheel down = reduce counts - -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. - -JogWheel exports it's count value as hal pin: - --s:: - out S32 pin - - -It has the following properties: - -size:: - Sets the size in pixel of the widget, allowed values are in the range of 100 to 500 - default = 200 -cpr:: - Sets the Counts per Revolution, allowed values are in the range from 25 to 100 - default = 40 -show_counts:: - Set this to False, if you want to hide the counts display in the middle of the widget. -label:: - 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. - - -Direct program control:: - - There a couple ways to directly control the widget using Python. - - Using gobject to set the above listed properties: - [widget name].set_property("size",int(value)) - [widget name].set_property("cpr",int(value)) - [widget name].set_property("show_counts, True) - - There are two python methods: - [widget name].get_value() - Will return the counts value as integer - [widget name].set_label("string") - Sets the label content with "string" - -Example JogWheel: - -image::images/JogWheel.png[] - -[[gladevcp:speedcontrol]] - -=== Speed Control - -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. - -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. - -SpeedControl offers some hal pin: - --value:: - out float pin - The shown value of the widget - --scaled-value:: - out float pin - 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 - --scale:: - in float pin - The scale to apply - Default is 60 - --increase:: - in bit pin - As long as the pin is true, the value will increase - Very handy with connected momentary switch - --decrease:: - in bit pin - As long as the pin is true, the value will decrease - Very handy with connected momentary switch - -It has the following properties: - -height:: - integer - The height of the widget in pixel - allowed values are 24 to 96 - default is 36 - -value:: - float - The start value to set - allowed values are in the range from 0.001 to 99999.0 - default is 10.0 - -min:: - float - The min allowed value - allowed values are 0.0 to 99999.0 - default is 0.0 - If you change this value, the increment will be reseted to default, so it might be necessary to set afterwards a new increment. - -max:: - float - The max allowed value - allowed values are 0.001 to 99999.0 - default is 100.0 - If you change this value, the increment will be reseted to default, so it might be necessary to set afterwards a new increment. - -increment:: - float - sets the applied increment per mouse click - allowed values are 0.001 to 99999.0 and -1 - default is -1 resulting in 100 increments from min to max - -inc_speed:: - integer - Sets the timer delay for the increment speed holding pressed the buttons - allowed values are 20 to 300 - default is 100 - -unit:: - string - Sets the unit to be shown in the bar after the value - any string is allowed - default is "" - -color:: - Color - Sets the color of the bar - any hex color is allowed - default is "#FF8116" - -template:: - String - Text template to display the value Python formatting is used - Any allowed format - default is "%.1f" - -do_hide_button:: - Boolean - Whether to show or hide the increment an decrement button - True or False - Default = False - -Direct program control:: - - There a couple ways to directly control the widget using Python. - - Using gobject to set the above listed properties: - [widget name].set_property("do_hide_button",bool(value)) - [widget name].set_property("color","#FF00FF") - [widget name].set_property("unit", "mm/min") - etc. - - There are also python methods to modify the widget: - [widget name].set_adjustment(gtk-adjustment) - 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 reseted to its default (100 steps from MIN to MAX) - [widget name].get_value() - Will return the counts value as float - [widget name].set_value(float(value)) - Sets the widget to the commanded value - [widget name].set_digits(int(value)) - Sets the digits of the value to be used - [widget name].hide_button(bool(value)) - Hide or show the button - -Example Speedcontrol: - -image::images/SpeedControl.png[] - - -[[gladevcp:hal-label]] - -=== Label - -HAL_Label is a simple widget based on GtkLabel which represents a HAL -pin value in a user-defined format. - -label_pin_type:: - 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). - -text_template:: - 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. + - Example: +Distance: %.03f+ will display the text and the pin value with - 3 fractional digits padded with zeros for a FLOAT pin. - -[[gladevcp:hal-table]] - -=== Containers - -* HAL_HideTable -* HAL_Table State_Sensitive_Table -* HAL_HBox - -These containers are meant to be used to sensitize (grey out) or hide their children. + -Insensitived children will not respond to input. + -HAL_HideTable has one HAL BIT input pin which controls if it's child widgets are hidden or not. + - -.:: - -If the pin is low then child widgets are visible which is the default state. - -HAL_Table and HAL_Hbox have one HAL BIT input pin which controls if their child widgets are sensitive or not. + -These widgets's pin name uses the convention: + - -.:: - -If the pin is low then child widgets are inactive which is the default state. - -State_Sensitive_table responds to the state to linuxcnc's interpreter. + -optionally selectable to respond to 'must-be-all-homed','must-be-on' and 'must-be-idle' + -You can combine them. It will always be insensitive at Estop. + - + -* HAL_Hbox is depreceiated - use HAL_Table. + -If current panels use it it won't fail. You just won't find it in the GLADE editor anymore. + -Future vesions of gladeVCP may remove this widget completely and then you will need to update the panel. + - -[TIP] -If you find some part of your GladeVCP application is 'grayed -out' (insensitive), see whether a HAL_Table pin is unset or unconnected. - -[[gladevcp:hal-led]] - -=== LED - -The hal_led simulates a real indicator LED. + -It has a single input BIT pin which controls it's state: ON or OFF. + -LEDs have several properties which control their look and feel: + - -on_color:: - a String defining ON color of LED. May be any valid - gtk.gdk.Color name. Not working on Ubuntu 8.04. -off_color:: - String defining OFF color of LED. May be any valid - gtk.gdk.Color name or special value `dark`. `dark` means that OFF color - will be set to 0.4 value of ON color. Not working on Ubuntu 8.04. -pick_color_on, pick_color_off:: - Colors for ON and OFF states may be - represented as `#RRRRGGGGBBBB` strings. These are optional properties - which have precedence over `on_color` and `off_color`. -led_size:: - LED radius (for square - half of LED's side) -led_shape:: - LED Shape. Valid values are 0 for round, 1 for oval and 2 - for square shapes. -led_blink_rate:: - if set and LED is ON then it's blinking. Blink - period is equal to "led_blink_rate" specified in milliseconds. -create hal pin:: - select/deselect making of HAL pin to control LED. With no HAL pin created - LED can be controlled with a python function. -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: - -[source,python] ----------------------------------- -def on_led_pin_changed(self,hal_led,data=None): - print "on_led_pin_changed() - HAL pin value:",hal_led.hal_pin.get() ----------------------------------- - -This will be called at any edge of the signal and also during program -start up to report the current value. - -Example LEDs: -image:images/leds.png[] - -[[gladevcp:hal-progressbar]] - -=== ProgressBar - -[NOTE] -This widget might go away. Use the HAL_HBar and HAL_VBar widgets -instead. - -The HAL_ProgressBar is derived from gtk.ProgressBar and has two float -HAL input pins: - -:: - the current value to be displayed --scale:: - the maximum absolute value of input - -It has the following properties: - -scale:: - value scale. set maximum absolute value of input. Same as - setting the .scale pin. A float, range from - -2^24 to +2^24. -green_limit:: - green zone limit lower limit -yellow_limit:: - yellow zone limit lower limit -red_limit:: - red zone limit lower limit -text_template:: - Text template to display the current value of the - ++ pin. Python formatting may be used for dict - +{"value":value}+ - -Example HAL_ProgressBar: -image:images/progressbar2.png[] - -=== ComboBox - -HAL_ComboBox is derived from gtk.ComboBox. It enables choice of a -value from a dropdown list. - -It exports two HAL pins: - - -f:: - the current value, type FLOAT - -s:: - the current value, type S32 - -It has the following property which can be set in Glade: - -column:: - the column index, type S32, defaults to -1, range from -1..100 . - -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. - -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. - -There's an example in -+configs/apps/by-widget/combobox.{py,ui}+ which uses column -mode to pick a float value from the ListStore. - -If you're confused like me about how to edit ComboBox ListStores and -CellRenderer, see http://www.youtube.com/watch?v=Z5_F-rW2cL8. - -[[gladevcp:hal-bars]] - -=== Bars - -HAL Bar and VBar widgets for horizontal and vertical bars representing -float values. They have one input FLOAT hal pin. Both bars have the -following properties: - -invert:: - Swap min and max direction. An inverted HBar grows from right - to left, an inverted VBar from top to bottom. -min, max:: - Minimum and maximum value of desired range. It is not an - error condition if the current value is outside this range. -show limits:: - Used to select/deselect the limits text on bar. -zero:: - Zero point of range. 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. Useful to represent values that may be both positive or - negative. -force_width, force_height:: - Forced width or height of widget. If not - set then size will be deduced from packing or from fixed widget size - and bar will fill whole area. -text_template:: - Like in Label sets text format for min/max/current - values. Can be used to turn off value display. -value:: - Sets the bar display to the value entered: used only for testing in - GLADE editor. The vaue will be set from A HAL pin. -target value:: - Sets the target line to the value entered: used only for testing in - GLADE editor. The value will can be set in a Python function -target_width:: - Width of the line that marks the target value. -bg_color:: - Background (inactive) color of bar. -target_color:: - Color of the the target line. -z0_color, z1_color, z2_color:: - Colors of different value zones. - Defaults are `green`, `yellow` and `red`. For description of zones see - `z*_border` properties. -z0_border, z1_border:: - Define up bounds of color zones. 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. Borders are set as fractions, values - from 0 to 1. - -Horizontal bar: -image:images/hal_hbar.png[] -Vertical bar: -image:images/vscale.png[] -. - -[[gladevcp:hal-meter]] - -=== Meter - -HAL Meter is a widget similar to PyVCP meter - it represents a float value and has -one input FLOAT hal pin. HAL Meter has the following properties: - -min, max:: - Minimum and maximum value of desired range. It is not an - error condition if the current value is outside this range. -force_size:: - Forced diameter of widget. 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. -text_template:: - Like in Label sets text format for current value. Can - be used to turn off value display. -label:: - Large label above center of meter. -sublabel:: - Small label below center of meter. -bg_color:: - Background color of meter. -z0_color, z1_color, z2_color:: - Colors of different value - zones. Defaults are `green`, `yellow` and `red`. For description of - zones see `z*_border` properties. -z0_border, z1_border:: - Define up bounds of color zones. 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. Borders are set as values in range min-max. - -Example HAL Meters: -image:images/hal_meter.png[] - -=== HAL_Graph - -This widget is for plotting values over time. - -[[gladevcp:hal-gremlin]] - -=== Gremlin tool path preview for .ngc files - -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. - -Gremlin does not export any HAL pins. It has the following properties: - -show tool speed:: - This displays the tool speed. Defaults true -show commanded:: - This selects the DRO to use commanded or actual values. Defaults true -use metric units:: - This selects the DRO to use metric or imperial units. Defaults true -show rapids:: - This tells the plotter to show the rapid moves. Defaults true -show DTG:: - This selects the DRO to display the distance-to-go value. Defaults true -show relative:: - This selects the DRO to show values relative to user system or machine - cordinates. Defaults true -show live plot:: - This tells the plotter to draw or not. Defaults true -show limits:: - This tells the plotter to show the machine's limits. Defaults true -show lathe radius:: - 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). Defaults false -show extents:: - This tells the plotter to show the extents. Defaults true -show tool:: - This tells the plotter to draw the tool. Defaults true -show program:: - TODO -use joints mode:: - Used in non trivialkins machines (eg robots). Defaults false -grid size:: - Sets the size of the grid. which is only visible in the X, Y and Z view. - Defaults to 0 -use default mouse controls:: - This disables the default mouse controls. This is most useful when using a - touchscreen as the default controls do not work well. You can programically - add controls using python and the handler file technique. Defaults to 'True' -view :: - may be any of `x`, `y`, 'y2' , `z`, 'z2' , `p` (perspective) . Defaults to - `z` view. -enable_dro :: - boolean; whether to draw a DRO on the plot or not. - Defaults to `True` -mouse_btn_mode :: - integer; mouse button handling, leads to different functions of the button - 0 = default: left rotate, middle move, right zoom - 1 = left zoom, middle move, right rotate - 2 = left move, middle rotate, right zoom - 3 = left zoom, middle rotate, right move - 4 = left move, middle zoom, right rotate - 5 = left rotate, middle zoom, right move - 6 = left move, middle zoom, right zoom - - mode 6 is reccomended for plasmas and lathes, as rotation is not needed for such machines - -Direct program control:: - - There a couple ways to directly control the widget using Python. - - Using goobject to set the above listed properties: - [widget name].set_property('view','P') - [widget name].set_property('metric_units',False) - [widget name].set_property('use_default_controls',False) - [widget name].set_property('enable_dro' False)) - [widget name].set_property('show_program', False) - [widget name].set_property('show_limits', False) - [widget name].set_property('show_extents_option', False) - [widget name].set_property('show_live_plot', False) - [widget name].set_property('show_tool', False) - [widget name].set_property('show_lathe_radius',True) - [widget name].set_property('show_dtg',True) - [widget name].set_property('show_velocity',False) - [widget name].set_property('mouse_btn_mode', 4) - - There are python methods: - [widget name].show_offsets = True - [widget name].grid_size = .75 - [widget name].select_fire(event.x,event.y) - [widget name].select_prime(event.x,event.y) - [widget name].start_continuous_zoom(event.y) - [widget name].set_mouse_start(0,0) - [widget name].gremlin.zoom_in() - [widget name].gremlin.zoom_out() - [widget name].get_zoom_distance() - [widget name].set_zoom_distance(dist) - [widget name].clear_live_plotter() - [widget name].rotate_view(x,y) - [widget name].pan(x,y) - -Hints:: - - If you set all the plotting options false but show_offsets true you get an - offsets page instead of a graphics plot. - - - If you get the zoom distance before changing the view then reset the zoom - distance, it's much more user friendly. - - - if you select an element in the preview, the selected element will be used - as rotation center point - -Example: -image:images/gremlin.png[] - -[[gladevcp:hal-offset]] - -=== HAL_Offset - -The HAL_Offset widget is used to display the offset of a single axis. -It has the following properties: - -Joint Number:: - Used to select which axis (technically which joint) is displayed. - On a trivialkins machine (mill, lathe, router) axis vrs joint number are: - - 0:X 1:Y 2:Z 3:A 4:B 5:C 6:U 7:V 8:W -Text template for metric units:: - You can use python formatting to display the position with different precision. -Text template for imperial units:: - You can use python formatting to display the position with different precision. -Reference Type:: - 0:G5x 1:tool 2:G92 3:Rotation around Z - -[[gladevcp:dro_widget]] - -=== DRO widget - -The DRO widget is used to display the current axis position. -It has the following properties: - -Actual Position:: - select actual (feedback) position or commanded position. -Text template for metric units:: - You can use python formatting to display the position with different precision. -Text template for imperial units:: - You can use python formatting to display the position with different precision. -Reference Type:: - Absolute <>, Relative - (to current user coordinate origin - G5x) - or Distance-to-go (relative to current user coordinate origin) -Joint Number:: - Used to select which axis (technically which joint) is displayed. - On a trivialkins machine (mill, lathe, router) axis vrs joint number are: - - 0:X 1:Y 2:Z 3:A 4:B 5:C 6:U 7:V 8:W - -Display units:: - Used to toggle the display units between metric and imperial. - -Hints:: - - If you want the display to be right justified, set the X align to 1.0 - - - 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) - - - 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 backgroud. There is a - special technique to do this. See the animated function diagrams below. - - - 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. - -Direct program control:: - - There a couple ways to directly control the widget using Python. - - Using goobject to set the above listed properties: - [widget name].set_property("display_units_mm",True) - [widget name].set_property("actual",True) - [widget name].set_property("mm_text_template","%f") - [widget name].set_property("imperial_text_template","%f") - [widget name].set_property("Joint_number",3) - [widget name].set_property("reference_type",3) - - There are two python methods: - [widget name].set_dro_inch() - [widget name].set_dro_metric() - -[[gladevcp:combi_dro]] - -=== Combi_DRO widget - -The Combi_DRO widget is used to display the current , the relative axis position and the distance to go in one DRO. + -By clicking on the DRO the Order of the DRO will toggle around. + -In Relative Mode the actual coordinate system will be displayed. - -It has the following properties: - -joint_number:: - Used to select which axis (technically which joint) is displayed. + - On a trivialkins machine (mill, lathe, router) axis vrs. joint number are: + - '0:X 1:Y 2:Z etc' - -actual:: - select actual (feedback) or commanded position. - -metric_units:: - Used to toggle the display units between metric and imperial. - -auto_units:: - Units will toggle between metric and imperial according to the - active gcode being G20 or G21 + - default is TRUE - -diameter:: - Whether to display position as diameter or radius, in diameter mode - the DRO will display the joint value multiplied by 2 - -mm_text_template:: - You can use python formatting to display the position with different precision. + - default is "%10.3f" - -imperial_text_template:: - You can use python formatting to display the position with different precision. + - default is "%9.4f" - -homed_color:: - The foreground color of the DRO numbers if the joint is homed + - default is green - -unhomed_color:: - The foreground color of the DRO numbers if the joint is not homed + - default is red - -abs_color:: - the background color of the DRO, if main DRO shows absolute coordinates + - default is blue - -rel_color:: - the background color of the DRO, if main DRO shows relative coordinates + - default is black - -dtg_color:: - the background color of the DRO, if main DRO shows distance to go + - default is yellow - -font_size:: - The font size of the big numbers, the small ones will be 2.5 times smaller, - the value must be an integer in the range of 8 to 96, + - default is 25 - -toggle_readout:: - A left mouse click will toggle the DRO readout through the different modes ["Rel", "Abs", "DTG"]. + - By unchecking the box you can disable that behavior. The toggling can still be done with [widget name].toggle_readout() + - Value must be bool + - default is TRUE - -cycle_time:: - The time the DRO waits between two polls, - the value must be an integer in the range of 100 to 1000, + - default is 150, 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. - -Direct program control:: - Using gobject to set the above listed properties: - - [widget name].set_property(property, value) - -There are several python methods to control the widget: - - [widget name].set_to_inch(state) - sets the DRO to show imperial units - state = boolean (True or False) - - [widget name].set_auto_units(state) - if True the DRO will change units according to active gcode (G20 / G21) - state = boolean (True or False) - Default is True - - [widget name].set_to_diameter(state) - if True the DRO will show the diameter not the radius, specially needed for lathes - the DRO will display the axis value multiplied by 2 - state = boolean (True or False) - Default is False - - [widget name].toggle_readout() - toggles the order of the DRO in the widget - - [widget name].change_axisletter(letter) - changes the automatically given axis letter - very useful to change an lathe DRO from X to R or D - letter = string - - [widget name].get_order() - returns the order of the DRO in the widget mainly used to maintain them consistent - the order will also be transmitted with the clicked signal - returns a list containing the order - - [widget name].set_order(order) - sets the order of the DRO, mainly used to maintain them consistent - order = list object, must be one of - ["Rel", "Abs", "DTG"] - ["DTG", "Rel", "Abs"] - ["Abs", "DTG", "Rel"] - Default = ["Rel", "Abs", "DTG"] - - [widget name].get_position() - returns the position of the DRO as a list of floats - the order is independent of the order shown on the DRO - and will be given as [Absolute , relative , DTG] - Absolute = the machine coordinates, depends on the actual property - will give actual or commanded position - Relative = will be the coordinates of the actual coordinate system - DTG = the distance to go, will mostly be 0, as this function should not be used - while the machine is moving, because of time delays - -The widget will emit the following signals: - - clicked - This signal is emitted, when the user has clicked on the Combi_DRO widget, - it will send the following data: - widget = widget object = The widget object that sends the signal - joint_number = integer = The joint number of the DRO, where '0:X 1:Y 2:Z etc' - order = list object = the order of the DRO in that widget - the order may be used to set other Combi_DRO widgets to the same order with [widget name].set_order(order) - - units_changed - This signal is emitted, if the DRO units are changed, it will send the following data: - widget = widget object = The widget object that sends the signal - metric_units = boolean = True if the DRO does display metric units, False in case of imperial display - - system_changed - This signal is emitted, if the DRO units are changed, it will send the following data: - widget = widget object = The widget object that sends the signal - system = string = 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 - -There are some information you can get through commands, which may be of interest for you: - - [widget name].system - The actual system, as mentioned in the system_changed signal - - [widget name].homed - True if the joint is homed - - [widget name].machine_units - 0 if Imperial, 1 if Metric - -Example, Three Combi_DRO in a window + -X = Relative Mode + -Y = Absolute Mode + -Z = DTG Mode + - -image::images/combi_dro.png[] - -[[gladevcp:iconview]] - -=== IconView (File Select) - -This is touch screen friendly widget to select a file and to change directories. - -The widget has the following properties: - - -icon_size:: - Sets the size of the displayed icon. + - Allowed values are integers in the range from 12 to 96 + - default is 48 - -start_dir:: - Sets the directory to start in when the widget is shown first time, + - must be a string, containing a valid directory path, + - default is "/" - -jump_to_dir:: - Sets the directory "jump to" directory, which is selected by the corresponding - button in the bottom button list, the 5th button counting from the left, + - must be a string, containing a valid directory path, + - default is "~" - -filetypes:: - Sets the file filter for the objects to be shown + - Must be a string containing a comma separated list of extensions to be shown + - Default is "ngc,py" - -sortorder:: - Sets the sorting order of the displayed icon - must be an integer value from 0 to 3, where + - 0 = ASCENDING (sorted according to file names) + - 1 = DESCENDING (sorted according to file names) + - 2 = FOLDERFIRST (show the folders first, then the files) + - 3 = FILEFIRST (show the files first, then the folders), + - Default = 2 = FOLDERFIRST - - - -Direct program control:: - -Using goobject to set the above listed properties: - - [widget name].set_property(property,Value) - -There are python methods to control the widget: - - [widget name].show_buttonbox(state) - if False the bottom button box will be hidden, this is helpful in custom screens, - with special buttons layouts to not alter the layout of the GUI, good example - for that is gmoccapy - state = boolean (True or False) - Default is True - - [widget name].show_filelabel(state) - if True the file label (between the IconView window and the bottom button box will be shown. - Hiding this label may save place, but showing it is very useful for debugging reasons, - state = boolean (True or False) - Default is True - - [widget name].set_icon_size(iconsize) - sets the icon size - must be an integer in the range from 12 to 96 - Default = 48 - - [widget name].set_directory(directory) - Allows to set an directory to be shown - directory = string (a valid file path) - - [widget name].set_filetypes(filetypes) - sets the file filter to be used, only files with the given extensions will be shown - filetypes = string containing a comma separated list of extensions - Default = "ngc,py" - - [widget name].get_selected() - Returns the path of the selected file, or None if an directory has been selected - - [widget name].refresh_filelist() - Refreshes the filelist, needed if you add a file without changing the directory - -If the button box has been hidden, you can reach the functions of this button -through it's clicked signals like so: - - [widget name].btn_home.emit("clicked") - [widget name].btn_jump_to.emit("clicked") - [widget name].btn_sel_prev.emit("clicked") - [widget name].btn_sel_next.emit("clicked") - [widget name].btn_get_selected.emit("clicked") - [widget name].btn_dir_up.emit("clicked") - [widget name].btn_exit.emit("clicked") - -The widget will emit the following signals: - - selected - This signal is emitted, when the user selects an icon, it will return a string containing a - file path if a file has been selected, or None if an directory has been selected - sensitive - This signal is emitted, when the buttons change there state from sensitive to not sensitive or vice versa. - This signal is useful to maintain surrounding GUI synchronized with the button of the widget. See gmoccapy as example. - It will return the buttonname and the new state. Buttonname is one of "btn_home", "btn_dir_up", "btn_sel_prev", - "btn_sel_next", "btn_jump_to" or "btn_select". State is a boolean and will be True or False. - exit - This signal is Emmit, when the exit button has been pressed to close the IconView - mostly needed if the application is started as stand alone. - - -Example: - -image::images/iconview.png[] - -=== Calculator widget - -This is a simple calculator widget, that can be used for numerical input. + -You can preset the display and retrieve the result or that preset value. + -It has the following properties: - -Is editable:: - This allows the entry display to be typed into from a keyboard. -Set Font:: - This allows you to set the font of the display. - -Direct program control:: - - There a couple ways to directly control the widget using Python. - - Using goobject to set the above listed properties: - [widget name].set_property("is_editable",True) - [widget name].set_property("font","sans 25") - - There are python methods: - [widget name].set_value(2.5) - This presets the display and is recorded. - [widget name].set_font("sans 25") - [widget name].set_editable(True) - [widget name].get_value() - Returns the calculated value - a float. - [widget name].set_editable(True) - [widget name].get_preset_value() - Returns the recorded value: a float. - -[[gladevcp:tooledit]] - -=== Tooleditor widget - -This is a tooleditor widget for displaying and modifying a tool editor file. + -If in lathe mode, it will display wear offsets and tool offsets separately. + -Wear offsets are designated by tool number above 10000 (Fanuc style) + -Note linuxcnc requires remapping of tool calls to actually use wear offsets + -It checks the current file once a second to see if linuxcnc updated it. + -It has the following properties: - -Hidden Columns:: - This will hide the given columns: The columns are designated (in order) as such: + - s,t,p,x,y,z,a,b,c,u,v,w,d,i,j,q,; + - You can hide any number of columns including the select and comments + -Direct program control:: - - There a couple ways to directly control the widget using Python. - - using goobject to set the above listed properties: - [widget name].set_properties('hide_columns','uvwijq') - This would hide the uvwij and q columns and show all others. - - There are python methods: - [widget name].set_visible("ijq",False) - Would hide ij and Q columns and leave the rest as they were. - [widget name].set_filename(path_to_file) - Sets and loads the tool file. - [widget name].reload(None) - Reloads the current toolfile - [widget name].set_font('sans 16,tab='1') - Sets the (Pango) font on the Tab, column title, and tool data. - 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. Default is all the tabs - set. - [widget name].set_title_font('sans 16,tab='1') - Sets the (Pango) font on the column titles only. - 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. Default is all the tabs - set. - [widget name].set_tab_font('sans 16,tab='1') - Sets the (Pango) font on the tabs only. - 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. Default is all the tabs - set. - [widget name].set_col_visible("abcUVW", False, tab='1') - This would hide (False) the abcuvw columns on tab 1 (all_offsets) - [widget name].set_lathe_display(value) - hides or shows the wear and tool offset tabs used for lathes - [widget name].get_toolinfo(toolnum) - Returns the tool information array of the requested toolnumber - or current tool if no tool number is specified - returns None if tool not found in table or if there is no current tool - [widget name].hide_buttonbox(self, True) - 'convenience' method to hide buttons - you must call this after show_all() - [widget name].get_selected_tool() - return the user selected (highlighted) tool number - [widget name].set_selected_tool(toolnumber) - Selects (highlights) the requested tool - -image::images/gtk-tooledit.png[] - -[[gladevcp:offsetpage]] - -=== Offsetpage - -The Offsetpage widget is used to display/edit the offsets of all the axes. + -It has convenience buttons for zeroing G92 and Rotation-Around-Z offsets. + -It will only allow you to select the edit mode when the machine is on and idle. + -You can directly edit the offsets in the table at this time. Unselect the edit + -button to allow the OffsetPage to reflect changes. - -It has the following properties: - -Hidden Columns:: - A no-space list of columns to hide: The columns are designated (in order) as such: + - xyzabcuvwt + - You can hide any of the columns. -Hidden Rows:: - A no-space list of rows to hide: the rows are designated (in order) as such + - 0123456789abc + - You can hide any of the rows. -Pango Font:: - Sets text font type and size -HighLight color:: - when editing this is the high light color -Active color:: - when OffsetPage detects an active user coordinate system it will use this + - color for the text -Text template for metric units:: - You can use python formatting to display the position with different precision. -Text template for imperial units:: - You can use python formatting to display the position with different precision. - -Direct program control:: - - There a couple ways to directly control the widget using Python. - - Using goobject to set the above listed properties: - [widget name].set_property("highlight_color",gtk.gdk.Color('blue')) - [widget name].set_property("foreground_color",gtk.gdk.Color('black')) - [widget name].set_property("hide_columns","xyzabcuvwt") - [widget name].set_property("hide_rows","123456789abc") - [widget name].set_property("font","sans 25") - - There are python methods to control the widget: - [widget name].set_filename("../../../configs/sim/gscreen/gscreen_custom/sim.var") - [widget name].set_col_visible("Yabuvw",False) - [widget name].set_row_visible("456789abc",False) - [widget name].set_to_mm() - [widget name].set_to_inch() - [widget name].hide_button_box(True) - [widget name].set_font("sans 20") - [widget name].set_highlight_color("violet") - [widget name].set_foreground_color("yellow") - [widget name].mark_active("G55") - Allows you to directly set a row to highlight. - (eg in case you wish to use your own navigation controls. - See <> - [widget name].selection_mask = ("Tool","Rot","G5x") - These rows are NOT selectable in edit mode. - [widget name].set_names([['G54','Default'],["G55","Vice1"],['Rot','Rotational']]) - This allows you to set the text of the 'T' column of each/any row. - This is a list of a list of offset-name/user-name pairs. - The default text is the same as the offset name. - [widget name].get_names() - This returns a list of a list of row-keyword/user-name pairs. - The user name column is editable, so saving this list is user friendly. - see set_names above. - -image::images/offsetpage.png[] - -[[gladevcp:hal-sourceview]] - -=== HAL_sourceview widget - -This is for displaying and simple editing of Gcode. + -It looks for .ngc highlight specs in ~/share/gtksourceview-2.0/language-specs/ -The current running line will be highlighted. + -With external python glue code: + - *It can search for text, undo and redo changes. + - *It can be used for program line selection. + - - -Direct program control:: - - There are python methods to control the widget: - - [widget name].redo() - redo one level of changes. - [widget name].undo() - undo one level of changes - [widget name].text_search(direction=True,mixed_case=True,text='G92') - Searches forward (direction = True) or back, + - Searches with mixed case (mixed_case = True) or exact match - [widget name].set_line_number(linenumber) - Sets the line to high light. Uses the sourceview line numbers. - [widget name].get_line_number() - returns the currently high lighted line. - [widget name].line_up() - Moves the High lighted line up one line - [widget name].line_down() - Moves the High lighted line down one line - [widget name].load_file('filename') - loads a file. Using None (not a filename string) will reload the same program. - [widget name].get_filename() - -image::images/hal_sourceview.png[] - -[[gladevcp:mdi-history]] - -=== MDI history - -This is for displaying and entering MDI codes. + -It will automatically gray out when MDI is not available. + -Eg during Estop and program running. - -font_size_tree:: - a integer value between 8 and 96+ - will modify the default font size of the treeview + - to the selected value + -font_size_entry:: - a integer value between 8 and 96+ - will modify the default font size of the entry + - to the selected value + -use_double_click:: - True or False, setting this to True will enable the mouse double click + - feature and a double click on an entry will submit that command + - It is not recommended to use this feature on real machines, as a double + - click on a wrong entry may cause dangerous situations - -Using goobject to set the above listed properties:: - - Using goobject to set the listed properties: - [widget name].set_property("font_size_tree", 10) - [widget name].set_property("font_size_entry", 20) - [widget name].set_property("use_double_click", False) - -=== Animated function diagrams: HAL widgets in a bitmap - -For some applications it might be desirable to have background image - -like a functional diagram - and position widgets at appropriate places -in that diagram. 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+: - -image:images/small-screenshot.png[] - -== Action Widgets reference - -GladeVcp includes a collection of "canned actions" called VCP Action -Widgets for the Glade user interface editor. Other than HAL widgets, -which interact with HAL pins, VCP Actions interact with LinuxCNC and the -G-code interpreter. - -VCP Action Widgets are derived from the Gtk.Action widget. The Action -widget in a nutshell: - - - it is an object available in Glade - - it has no visual appearance by itself - - it's purpose: associate a visible, sensitive UI component like menu, - toolbutton, button with a command. See these widget's 'General→Related - Action' property. - - the "canned action" will be executed when the associated UI component - is triggered (button press, menu click..) - - it provides an easy way to execute commands without resorting to - Python programming. - -The appearance of VCP Actions in Glade is roughly as follows: - -image::images/vcp-actions.png[] - -Tooltip hovers provide a description. - - -=== VCP Action widgets - -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. - -=== VCP Action python - -This widget is used to execute small arbitrary python code. + -The command string may use special keywords to access important functions. - - * 'GSTAT' for access to the Gstat library that is used for linuxcnc status - * 'STAT' for access to linuxcnc's status via the linuxcnc python module - * 'CMD' for access to linuxcnc's commands via the linuxcnc python module - * 'EXT' for access to the handler file functions if available - * 'linuxcnc' for access to the linuxcnc python module - * 'self' for access to the widget instance - -There are options to select when the widget will be active. + -There are options to set the mode before the command is executed. + -example command to just print a message to the terminal: + -[source,python] ----- -print('action activated') ----- - -example command to set the machine to off state: + -[source,python] ----- -CMD.state(linuxcnc.STATE_OFF) ----- - -example command to call a handler function that passes data: + -[source,python] ----- -EXT.on_button_press(self, 100) ----- -You can use a colon to separate multiple commands. -[source,python] ----- -print('Set Machine Off');CMD.state(linuxcnc.STATE_OFF) ----- - -=== VCP ToggleAction widgets - -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. - -Currently the following widgets are available: - - - The ESTOP toggle sends ESTOP or ESTOP_RESET commands to LinuxCNC depending - on it's state. - - The ON/OFF toggle sends STATE_ON and STATE_OFF commands. - - Pause/Resume sends AUTO_PAUSE or AUTO_RESUME commands. - -The following toggle actions have only one associated command and use -the 'pressed' state to indicate that the requested operation is -running: - - - The Run toggle sends an AUTO_RUN command and waits in the pressed - state until the interpreter is idle again. - - 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. - - The MDI toggle sends given MDI command and waits for its completion in - 'pressed' inactive state. - -=== The Action_MDI Toggle and Action_MDI widgets - -These widgets provide a means to execute arbitrary MDI commands. The -Action_MDI widget does not wait for command completion as the -Action_MDI Toggle does, which remains disabled until command complete. - -=== A simple example: Execute MDI command on button press - -+configs/apps/gladevcp/mdi-command-example/whoareyou.ui+ is a Glade UI file which conveys the basics: - -Open it in Glade and study how it's done. Start Axis, and then start -this from a terminal window with `gladevcp whoareyou.ui`. 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: - -image::images/whoareyou.png[] - -You'll notice that the button associated with the Action_MDI action is -grayed out if the machine is off, in E-Stop or 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. - -=== Parameter passing with Action_MDI and ToggleAction_MDI widgets - -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: - - - assume you have a 'HAL SpinBox' named +speed+, and you want to pass it's - current value as a parameter in an MDI command. - - The HAL SpinBox will have a float-type HAL pin named speed-f (see - HalWidgets description). - - To substitute this value in the MDI command, insert the HAL pin name - enclosed like so: `${pin-name}` - - for the above HAL SpinBox, we could use `(MSG, "The speed is: - ${speed-f}")` just to show what's happening. - -The example UI file is +configs/apps/gladevcp/mdi-command-example/speed.ui+. Here's what you get when running it: - - -image::images/speed.png[] - -=== An advanced example: Feeding parameters to an O-word subroutine - -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+. - -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: - -image::images/oword.png[] - -=== Preparing for an MDI Action, and cleaning up afterwards - -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. - -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. - -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: - -[source,python] ----------------------------------- - def on_mdi_command_start(self, action, userdata=None): - action.stat.poll() - self.start_feed = action.stat.settings[1] - - def on_mdi_command_stop(self, action, userdata=None): - action.linuxcnc.mdi('F%.1f' % (self.start_feed)) - while action.linuxcnc.wait_complete() == -1: - pass ----------------------------------- - -Only the Action_MDI Toggle widget supports these signals. - -[NOTE] -In a later release of LinuxCNC, the new M-codes M70-M72 are available which -make it saving state before a subroutine call, and restoring state on return much easier. - -=== Using the LinuxCNC Stat object to deal with status changes - -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. - -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. - -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: - -* state-related: emitted when E-Stop condition occurs, is reset, machine is turned on, or is turned off - - +state-estop+ - - +state-estop-reset+ - - +state-on+, - - +state-off+ -* mode-related: emitted when LinuxCNC enters that particular mode - - +mode-manual+ - - +mode-mdi+ - - +mode-auto+ -* interpreter-related: emitted when the G-code interpreter changes into that mode - - +interp-run+ - - +interp-idle+ - - +interp-paused+ - - +interp-reading+ - - +interp-waiting+ - - +file-loaded+ - - +line-changed+ -* homing-related: emitted when linuxcnc is homed or not - - +all-homed+ - - +not-all-homed+ - -[[gladevcp:programming]] - -== GladeVCP Programming - -=== User Defined Actions - -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. - -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. - -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. - -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. - -=== An example: adding custom user callbacks in Python - -This is just a minimal example to convey the idea - details are laid -out in the rest of this section. - -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: - -Write a Python module like so and save as e.g. handlers.py: - -[source,python] ----------------------------------- -nhits = 0 -def on_button_press(gtkobj,data=None): - global nhits nhits += 1 gtkobj.set_label("hits: %d" % nhits) ----------------------------------- - -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. - -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 ' options. - -Now, pressing the button should change its label since it's set in the -callback function. - -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. - -Or do some more useful stuff, like calling an MDI command! - -=== HAL value change events - -HAL input widgets, like a LED, automatically associate their HAL pin state -(on/off) with the optical appearance of the widget (LED lit/dark). - -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. - -For user-defined HAL pins not associated with a particular HAL widget, -the signal name is 'value-changed'. See the -<> section below for -details. - -HAL widgets come with a pre-defined signal called 'hal-pin-changed'. See the -<> for details. - -=== Programming model - -The overall approach is as follows: - - - design your UI with Glade, and set signal handlers where you want - actions associated with a widget - - write a Python module which contains callable objects (see 'handler - models' below) - - pass your module's path name to gladevcp with the '-u ' option - - gladevcp imports the module, inspects it for signal handlers and - connects them to the widget tree - - the main event loop is run. - -.The simple handler model - -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': - -[source,python] ----------------------------------- -nhits = 0 -def on_button_press(gtkobj,data=None): - global nhits - nhits += 1 - gtkobj.set_label("hits: %d" % nhits) ----------------------------------- - -Add this function to a Python file and run as follows: - - gladevcp -u .py mygui.ui - -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. - -.The class-based handler model - -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: - - - one or more several class definition(s) with one or several methods, - in one module or split over several modules, - - 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 - -Here is a minimum user-defined handler example module: - -[source,python] ----------------------------------- -class MyCallbacks : - def on_this_signal(self,obj,data=None): - print "this_signal happened, obj=",obj - -def get_handlers(halcomp,builder,useropts): - return [MyCallbacks ()] ----------------------------------- - -Now, 'on_this_signal' will be available as signal handler to your -widget tree. - -.GladeVCP-specific signals - -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.) -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: - -[source, python] ----------------------------------- - # This catches our messages from another program - def event(self,w,event): - print event.message_type,event.data - if event.message_type == 'Gladevcp': - if event.data[:7] == 'Visible': - self.active = True - else: - self.active = False - - # connect to client-events from the host GUI - def on_map_event(self, widget, data=None): - top = widget.get_toplevel() - print "map event" - top.connect('client-event', self.event) ----------------------------------- - - -.The get_handlers protocol - -If during module inspection GladeVCP finds a function `get_handlers`, -it calls it as follows: - - get_handlers(halcomp,builder,useropts) - -the arguments are: - - - halcomp - refers to the HAL component under construction - - builder - widget tree - result of reading the UI definition (either - referring to a GtkBuilder or libglade-type object) - - useropts - a list of strings collected from the gladevcp - command line `-U ` option - -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. - -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()`. Also, the complete list of -widgets is available as `builder.get_objects()` regardless of UI -format. - -=== Initialization sequence - -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: - - - the widget tree is created, but not yet realized (no toplevel - `window.show()` has been executed yet) - - the halcomp HAL component is set up and all HAL widget's pins have - already been added to it - - 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. - -Once all modules have been imported and method names extracted, the -following steps happen: - - - 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). - - the HAL component is finalized with halcomp.ready() - - 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) - - if a HAL command file was passed with `-H halfile`, it is executed - with halcmd - - the Gtk main loop is run. - -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. - -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 halfile has been -run, and GladeVCP is about to enter the Gtk main loop. - -=== Multiple callbacks with the same name - -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()`. - -=== The GladeVCP `-U ` flag - -Instead of extending GladeVCP for any conceivable option which could -potentially be useful for a handler class, you may use the -U - flag (repeatedly if you wish). This flag collects a list -of 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: - -[source,python] ----------------------------------- -debug = 0 -... -def get_handlers(halcomp,builder,useropts): - ... - global debug # assuming there's a global var - for cmd in useropts: - exec cmd in globals() ----------------------------------- - -This way you can pass arbitrary Python statements to your module -through the gladevcp -U option, for example: - - gladevcp -U debug=42 -U "print 'debug=%d' % debug" ... - -This should set debug to 2 and confirm that your module actually did it. - -=== Persistent variables in GladeVCP - -A 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. - -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). - -This mechanism uses the popular '.ini' file format to save and reload -persistent attributes. - -.Persistence, program versions and the signature check - -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. - -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. - -=== Using persistent variables - -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: - - - import the +gladevcp.persistence+ module - - decide which instance attributes, and their default values you want to - have retained, if any - - decide which widgets should have their state retained - - describe these decisions in your handler class' +__init__()+ method - through a nested dictionary as follows: - -[source,python] ----------------------------------- -def __init__(self, halcomp,builder,useropts): - self.halcomp = halcomp - self.builder = builder - self.useropts = useropts - self.defaults = { - # the following names will be saved/restored as method attributes - # the save/restore mechanism is strongly typed - the variables type will be derived from the type of the - # initialization value. Currently supported types are: int, float, bool, string - IniFile.vars : { 'nhits' : 0, 'a': 1.67, 'd': True ,'c' : "a string"}, - # to save/restore all widget's state which might remotely make sense, add this: - IniFile.widgets : widget_defaults(builder.get_objects()) - # a sensible alternative might be to retain only all HAL output widgets' state: - # IniFile.widgets: widget_defaults(select_widgets(self.builder.get_objects(), hal_only=True,output_only = True)), - } ----------------------------------- - -Then associate an .ini file with this descriptor: - -[source,python] ----------------------------------- -self.ini_filename = __name__ + '.ini' -self.ini = IniFile(self.ini_filename,self.defaults,self.builder) -self.ini.restore_state(self) ----------------------------------- - -After `restore_state()`, self will have attributes set if as running the -following: - -[source,python] ----------------------------------- -self.nhits = 0 -self.a = 1.67 -self.d = True -self.c = "a string" ----------------------------------- - -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. - -After this incantation, you can use the following IniFil methods: - -ini.save_state(obj):: - saves objs's attributes as per IniFil.vars - dictionary and the widget state as described in IniFile.widgets in - self.defaults -ini.create_default_ini():: - create a .ini file with default values -ini.restore_state(obj):: - restore HAL out pins and obj's attributes as - saved/initialized to default as above - -=== Saving the state on Gladvcp shutdown - -To save the widget and/or variable state on exit, proceed as follows: - -- select some interior widget (type is not important, for instance a -table). -- in the 'Signals' tab, select 'GtkObject'. It should show a 'destroy' -signal in the first column. -- add the handler name, e.g. 'on_destroy' to the second column. -- add a Python handler like below: - -[source,python] ----------------------------------- -import gtk -... -def on_destroy(self,obj,data=None): - self.ini.save_state(self) ----------------------------------- - -This will save state and shutdown GladeVCP properly, regardless -whether the panel is embedded in Axis, or a standalone window. - -CAUTION: 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. - -Next time you start the GladeVCP application, the widgets should come -up in the state when the application was closed. - -CAUTION: 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. - -=== Saving state when Ctrl-C is pressed - -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 (actuall on the SIGINT and SIGTERM signals). Example - - -[source,python] ----------------------------------- -def on_unix_signal(self,signum,stack_frame): - print "on_unix_signal(): signal %d received, saving state" % (signum) - self.ini.save_state(self) ----------------------------------- - -=== Hand-editing .ini files - -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. - -[[gladevcp:adding-hal-pins]] - -=== Adding HAL pins - -If you need HAL pins which are not associated with a specific HAL -widget, add them as follows: - -[source,python] ----------------------------------- -import hal_glib -... -# in your handler class __init__(): -self.example_trigger = hal_glib.GPin(halcomp.newpin('example-trigger', hal.HAL_BIT, hal.HAL_IN)) ----------------------------------- - -To get a callback when this pin's value changes, associate a -+value-change+ callback with this pin, add: - -[source,python] ----------------------------------- -self.example_trigger.connect('value-changed', self._on_example_trigger_change) ----------------------------------- - -and define a callback method (or function, in this case leave out the -+self+ parameter): - -[source,python] ----------------------------------- -# note '_' - this method will not be visible to the widget tree -def _on_example_trigger_change(self,pin,userdata=None): - print "pin value changed to:" % (pin.get()) ----------------------------------- - -=== Adding timers - -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: - -[source,python] ----------------------------------- -def _on_timer_tick(self,userdata=None): - ... - return True # to restart the timer; return False for on-shot -... -# demonstrate a slow background timer - granularity is one second -# for a faster timer (granularity 1 ms), use this: -# glib.timeout_add(100, self._on_timer_tick,userdata) # 10Hz -glib.timeout_add_seconds(1, self._on_timer_tick) ----------------------------------- - -=== Setting HAL widget properties programmatically - -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. - -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: - -[source,python] ----------------------------------- -import linuxcnc -import os -import hal -import hal_glib - -class HandlerClass: - - def _on_max_value_change(self,hal_pin,data=None): - self.meter.max = float(hal_pin.get()) - self.meter.queue_draw() # force a widget redraw - - def __init__(self, halcomp,builder,useropts): - self.builder = builder - - # hal pin with change callback. - # When the pin's value changes the callback is executed. - self.max_value = hal_glib.GPin(halcomp.newpin('max-value', hal.HAL_FLOAT, hal.HAL_IN)) - self.max_value.connect('value-changed', self._on_max_value_change) - - inifile = linuxcnc.ini(os.getenv("INI_FILE_NAME")) - mmin = float(inifile.find("METER", "MIN") or 0.0) - self.meter = self.builder.get_object('meter') - self.meter.min = mmin - - -def get_handlers(halcomp,builder,useropts): - return [HandlerClass(halcomp,builder,useropts)] ----------------------------------- - - -=== Examples, and rolling your own GladeVCP application - -Visit +linuxcnc_root_directory/configs/apps/gladevcp+ for running -examples and starters for your own projects. - - -== FAQ - -[qanda] - -I get an unexpected unmap event in my handler function right after startup. What's this?:: - - 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. - -My GladeVCP program starts, but no window appears where I expect it to be?:: - - 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 ' and its window has reasonable geometry, it - should come up in Axis properly as well. - -I want a blinking LED, but it wont blink:: - - 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. - -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:: - 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. - - -I want to set the background color or text of a HAL_Label widget depending on its HAL pin value:: - - - 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. - - -I defined a `hal_spinbutton` widget in glade, and set a default `value` property in the corresponding adjustment. It comes up with zero?:: - - - 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 mentione 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}`. - - -== Troubleshooting - - - 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. - - 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 underscore); if yes, - remove the +hal.so+ file. It has been superseded by hal.py in the same - directory and confuses the import mechanism. - - if you're using run-in-place, do a 'make clean' to remove any - accidentally left over hal.so file, then 'make'. - - 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. - -== Implementation note: Key handling in Axis - -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: - -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. - -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. - -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`. - -== Adding Custom Widgets - -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] - -== Auxiliary Gladevcp Applications - -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: - -==== - $ linuxcnc_var LINUXCNC_AUX_GLADEVCP - /usr/share/linuxcnc/aux_gladevcp - $ linuxcnc_var LINUXCNC_AUX_EXAMPLES - /usr/share/linuxcnc/aux_examples -==== - -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. - -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'. - -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: - -==== - export GLADEVCP_EXTRAS=~/mygladevcp:/opt/othergladevcp -==== - -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 inidicating rejected duplicates are printed to -stdout. - -[NOTE] - -Support for auxiliary gladevcp applications requires a python -module named 'importlib'. This module may not be available in -older installations like Ubuntu-Lucid. diff --git a/docs/src/gui/gladevcp_fr.adoc b/docs/src/gui/gladevcp_fr.adoc index a8d4773fbef..e91d3a0cba4 100644 --- a/docs/src/gui/gladevcp_fr.adoc +++ b/docs/src/gui/gladevcp_fr.adoc @@ -1,10 +1,7 @@ :lang: fr :toc: -= Création d'interfaces graphiques avec GladeVCP - -[[cha:GladeVCP]] - += [[cha:GladeVCP]]Création d'interfaces graphiques avec GladeVCP == Qu'est-ce que GladeVCP? @@ -190,8 +187,7 @@ Programmation de GladeVCP>>. == Créer et intégrer une interface utilisateur Glade -[[gladevcp:Pre-requis]] -=== Pré-requis: Installation de Glade +=== [[gladevcp:Pre-requis]]Pré-requis: Installation de Glade Pour visualiser ou modifier les fichiers d'une interface Glade, Glade doit être installé. Ce n'est pas nécessaire pour seulement essayer un panneau GladeVCP. @@ -302,6 +298,7 @@ Le nom de composant HAL d'une application GladeVCP lancé avec l'option GLADEVCP est toujours: +gladevcp+. La ligne de commande actuellement lancée par Axis dans la configuration ci-dessous est la suivante: + ---- halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x {XID} ---- @@ -318,6 +315,7 @@ n'est peut être pas nécessaire dans votre configuration. Pour cela, éditer le fichier .ini et ajouter dans les sections DISPLAY et HAL, les lignes suivantes: + [source,{ini}] ---- [DISPLAY] @@ -377,7 +375,7 @@ Noter les différences suivantes avec la configuration de l'onglet d'Axis: raccourcis ont été pris. - Il n'y a pas d'option _POSTGUI_HALFILE=_, mais il est correct, de passer -le fichier de commandes HAL, + + le fichier de commandes HAL, + par la ligne _EMBED_TAB_COMMAND=_. - L'appel _halcmd loaduser -Wn ..._ n'est pas nécessaire. @@ -501,8 +499,7 @@ pas déjà associée avec un autre widget, ce qui aurait pu être créé par la Voir la <> pour d'autres exemples. -[[gladevcp::hal-pin-changed_signal]] -=== Le signal _hal-pin-changed_ +=== [[gladevcp::hal-pin-changed_signal]]Le signal _hal-pin-changed_ La programmation événementielle signifie que l'interface graphique indique au code quand "quelque chose se produit", grâce à une fonction de rappel, comme quand un @@ -520,8 +517,7 @@ image::images/hal-pin-change-66.png[] L'exemple dans +configs/gladevcp/examples/complex+ montre comment c'est géré en Python. -[[gladevcp:HAL_Button]] -=== Les boutons (HAL Button) +=== [[gladevcp:HAL_Button]]Les boutons (HAL Button) Ce groupe de widgets est dérivé de divers boutons Gtk, ce sont les widgets HAL_Button, HAL_ToggleButton, HAL_RadioButton et CheckButton. Tous ont une seule @@ -562,10 +558,7 @@ Voir +configs/gladevcp/by-widget/radiobutton+ pour une application GladeVCP avec un fichier d'interface utilisateur, pour travailler sur les boutons radio. ==== -[[gladevcp:HAL_VScale]] - -[[gladevcp:HAL_HScale]] -=== Les échelles (Scales) +=== [[gladevcp:HAL_VScale]][[gladevcp:HAL_HScale]]Les échelles (Scales) HAL_HScale et HAL_VScale sont respectivement dérivées de GtkHScale et GtkVScale. Elles ont une pin de sortie FLOAT portant le même nom que le widget. Les échelles @@ -579,9 +572,7 @@ l'ajustement sur automatique pour éviter les warnings. Exemple d'échelle (HAL_hscale): image:images/hscale.png[] - -[[gladevcp:HAL_SpinButton]] -=== La boîte d'incrément (SpinButton) +=== [[gladevcp:HAL_SpinButton]]La boîte d'incrément (SpinButton) La boîte d'incrément de HAL est dérivée de GtkSpinButton, elle a deux pins de sortie: @@ -596,9 +587,7 @@ l'échelle, vue précédemment. Exemple de boîte d'incrément: image:images/spinbutton.png[] - -[[gladevcp:HAL_Label]] -=== Les labels +=== [[gladevcp:HAL_Label]]Les labels Le Label HAL est un simple widget basé sur GtkLabel qui représente la valeur d'une pin de HAL dans un format défini par l'utilisateur. @@ -616,11 +605,7 @@ text template:: Exemple: +Distance: %.03f+ va afficher le texte et la valeur de la pin avec 3 digits fractionnaires remplis avec des zéros pour une pin FLOAT. - -[[gladevcp:HAL_Table]] - -[[gladevcp:HAL_HBox]] -=== Les conteneurs: HAL_HBox et HAL_Table +=== [[gladevcp:HAL_Table]][[gladevcp:HAL_HBox]]Les conteneurs: HAL_HBox et HAL_Table Comparés à leurs contreparties Gtk ils ont une pin d'entrée BIT qui contrôle si les enfants des widgets sont sensitifs ou non. Si la pin est basse, alors @@ -630,8 +615,7 @@ les widgets enfants sont inactifs, ce qui est le comportement par défaut. Si vous trouvez que certaines parties de votre application GladeVCP sont _grisées_ (insensible), vérifiez que les pins d'un conteneur ne soient pas inutilisées. -[[gladevcp:HAL_LED]] -=== Les Leds +=== [[gladevcp:HAL_LED]]Les Leds La Led hal simule un vrai indicateur à Led. Elle a une seule pin d'entrée BIT qui contrôle son état: ON ou OFF. Les Leds ont quelques propriétés pour @@ -674,8 +658,7 @@ pour reporter la valeur courante. Exemple de Leds: image:images/leds.png[] -[[gladevcp:HAL_ProgressBar]] -=== La barre de progression (ProgressBar) +=== [[gladevcp:HAL_ProgressBar]]La barre de progression (ProgressBar) [NOTE] Ce widget pourrait disparaître. Utilisez les widgets HAL_HBar et HAL_VBar à sa @@ -707,9 +690,7 @@ text_template:: Exemple de barre de progression: image:images/progressbar2.png[] - -[[gladevcp:HAL_ComboBox]] -=== La boîte combinée (ComboBox) +=== [[gladevcp:HAL_ComboBox]]La boîte combinée (ComboBox) La comboBox HAL est dérivée de gtk.ComboBox. Elle valide le choix d'une valeur dans une liste déroulante. @@ -743,10 +724,7 @@ colonne pour prendre une valeur flottante dans un stockage de liste. Si comme moi, vous êtes désorienté pour éditer une liste de stockage de ComboBox ou de CellRenderer, voyez http://www.youtube.com/watch?v=Z5_F-rW2cL8. -[[gladevcp:HAL_VBar]] - -[[gladevcp:HAL_HBar]] -=== Les barres +=== [[gladevcp:HAL_VBar]][[gladevcp:HAL_HBar]]Les barres Les widgets HAL, HBar et VBar pour barres Horizontale et Verticale, représentent des valeurs flottantes. Elles ont une pin d'entrée de HAL FLOAT. Chaque barre a @@ -782,14 +760,12 @@ z0_border, z1_border:: remplir de la première à la seconde bordure et zone 2 depuis la dernière bordure jusqu'à 1. Les bordures se règlent comme des fractions, les valeurs vont de 0 à 1. -Barre horizontale: +.Barre horizontale: image:images/hal_hbar.png[] -Barre verticale: +.Barre verticale: image:images/vscale.png[] - -[[gladevcp:HAL_Meter]] -=== L'indicateur (HAL Meter) +=== [[gladevcp:HAL_Meter]]L'indicateur (HAL Meter) L'indicateur est un widget similaire à celui de PyVCP, il représente une valeur flottante et a une pin d'entrée de HAL FLOAT. @@ -824,13 +800,10 @@ z0_border, z1_border:: zone 2 depuis la dernière bordure jusqu'à max. Les bordures se règlent sur une étendue comprise en min et max. -Exemples d'indicateurs: - +.Exemples d'indicateurs: image::images/hal_meter.png[] - -[[gladevcp:HAL_Gremlin]] -=== Gremlin, visualiseur de parcours d'outil pour fichiers .ngc +=== [[gladevcp:HAL_Gremlin]]Gremlin, visualiseur de parcours d'outil pour fichiers .ngc Gremlin est un traceur de parcours d'outil similaire à celui d'Axis. Il demande un environnement LinuxCNC en fonctionnement, comme Axis ou Touchy. @@ -852,7 +825,6 @@ Exemple: image::images/gremlin.png[] - === Fonction de diagrammes animés: Widgets HAL dans un bitmap Pour certaines applications, il est intéressant d'avoir une image de fond, @@ -1055,8 +1027,7 @@ Une fois ajouté, vous pouvez associer des gestionnaires avec les signaux suivan - +interp-waiting+ -[[gladevcp:GladeVCP_Programming]] -== Programmation de GladeVCP +== [[gladevcp:GladeVCP_Programming]]Programmation de GladeVCP === Actions définies par l'utilisateur @@ -1436,8 +1407,7 @@ détectée, un message émis dans la console, donneront des indices sur ce qui s passé et le mauvais fichier ini sera renommé avec le suffixe .BAD. Après une mauvaise initialisation, les fichiers .BAD les plus anciens seront écrasés. -[[gladevcp:Adding_HAL_pins]] -=== Ajouter des pins de HAL +=== [[gladevcp:Adding_HAL_pins]]Ajouter des pins de HAL Si il faut des pins de HAL non associées avec un widget HAL, les ajouter comme ci-dessous: @@ -1539,18 +1509,18 @@ Mon panneau gladevcp ne marche pas dans Axis, il n'enregistre pas les états qua == Troubleshooting // FIXME this is out of date - - make sure your have the development version of LinuxCNC installed. You + - make sure your 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. - - run GladeVCP or Axis from a terminal window. If you get Python errors, + - 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 underscore); if yes, remove the +hal.so+ file. It has been superseded by hal.py in the same directory and confuses the import mechanism. - - if you're using run-in-place, do a 'make clean' to remove any + - if you're using run-in-place, do a 'make clean' to remove any accidentally left over hal.so file, then 'make'. - - if you're using 'HAL_table' or 'HAL_HBox' widgets, be aware they have + - 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. diff --git a/docs/src/gui/gmoccapy.adoc b/docs/src/gui/gmoccapy.adoc index 4cf72027bc6..0acda1b8c26 100644 --- a/docs/src/gui/gmoccapy.adoc +++ b/docs/src/gui/gmoccapy.adoc @@ -1,5 +1,6 @@ -[[cha:gmoccapy]] +:lang: en +[[cha:gmoccapy]] = GMOCCAPY == Introduction @@ -9,15 +10,15 @@ 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. -It offers the possibility to display up to 9 axis, 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. +It offers the possibility to display up to 9 axis, 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] -NOTE: gmoccapy 3 does support up to 9 axis 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! +* gmoccapy 3 does support up to 9 axis 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! 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 @@ -30,8 +31,8 @@ stuff. The files are placed in */src/po/gmoccapy*. You could just copy the gmocc 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 presented 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 +'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*. @@ -39,10 +40,10 @@ image::images/gmoccapy_5_axis.png[align="left"] == Requirements -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 -axis. So it do support also gantry configs. if you use other versions, please +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 +axis. So it do support 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 @@ -61,7 +62,7 @@ from the CD / DVD /USB-Stick. You will receive updates with the regular deb packages. -Gmoccapy 3 is only included in the actual 2.8 and master release. +Gmoccapy 3 is only included in the actual 2.8 and master release. You will get a similar screen to the following: The design may variate depending on your config. @@ -70,7 +71,7 @@ image::images/gmoccapy_3_axis.png[align="left"] == Basic Configuration -There is really not to much to configure just to run gmoccapy, but there are some points +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. You will find a lot of simulation configurations (INI files) included, just to show the basics: + @@ -98,10 +99,10 @@ The names should explain the main intention of the different INI Files. + If you use an existing configuration of your machine, just edit your INI according to this document. + -IMPORTANT: If you want to use <>, don't forget to set the path to your macros or +IMPORTANT: If you want to use <>, don't forget to set the path to your macros or subroutines folder as described below. -So let us take a closer look to the the INI file and what you need to include +So let us take a closer look to the the INI file and what you need to include to use gmoccapy on your machine: + [[gmoccapy:display-section]] @@ -129,11 +130,11 @@ The most important part is to tell LinuxCNC to use gmoccapy, editing the [DISPLA gmoccapy 3 does support the following command line options: * -user_mode : If set, the setup button will be disabled, so normal machine opperators are not able to edit the settings of the machine * - * -logo : If given, the logo will hide the jog button tab in manual mode, this is only useful for machines with hardware button for jogging and increment selection + + * -logo : If given, the logo will hide the jog button tab in manual mode, this is only useful for machines with hardware button for jogging and increment selection + The line 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 <> for more details. +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 <> for more details. [NOTE] If no path or file is given, gmoccapy will use as default @@ -148,7 +149,7 @@ MAX_FEED_OVERRIDE = 1.5 ---- Sets the maximum feed override, in the example given, you will be allowed to -override the feed by 150%. +override the feed by 150%. [NOTE] If no value is given, it will be set to 1.0 @@ -258,9 +259,9 @@ hitcounter.py and make all connections after realizing the panel according to manual-example.hal. [NOTE] -If you make any hal connections to you custom glade panel, you need to do that in the hal file -specified in the EMBEDDED_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 pin need to be made in the +If you make any hal connections to you custom glade panel, you need to do that in the hal file +specified in the EMBEDDED_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 pin need to be made in the postgui hal file specified in your INI file, because this pin do not exist prior of realizing the GUI Here are some examples: @@ -283,11 +284,11 @@ image::images/gmoccapy_with_right_panel_in_MDI_mode.png[align="left"] .Configuration of User Created Messages -Gmoccapy has the ability to create hal driven user messages. To use them you +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. -Here is how to set up 3 user pop up message dialogs the messages support pango -markup language. Detailed information about the markup language can be found at +Here is how to set up 3 user pop up message dialogs 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] ---- @@ -328,7 +329,6 @@ The specific hal pin conventions for these can be found under the <> hal pin section. [[gmocappy:rs274ngc]] - === The RS274NGC Section ---- @@ -340,7 +340,6 @@ Sets the path to search for macros and other subroutines. If you want to use several subroutine paths, just separate them with ":" [[gmoccapy:macros]] - === The MACRO Section You can add macros to gmoccapy, similar to touchy's way. A macro is nothing @@ -359,8 +358,8 @@ MACRO = go_to_position X-pos Y-pos Z-pos This will add 5 macros to the MDI button list. [NOTE] -As maximum 16 macros will appear in the GUI, due to space reasons you may need to -click on an arrow to switch page and display hidden macro button. +As maximum 16 macros will appear in the GUI, due to space reasons you may need to +click on an arrow to switch page and display hidden macro button. It is no error placing more in your INI file. The macro button will be displayed in the order of the INI entries. @@ -375,8 +374,7 @@ line. So the macro '*i_am_lost*' will call the file '*i_am_lost.ngc*'. line, just with the ngc extension (case sensitive) * The file must contain a subroutine like so: '*O sub*', the name of the sub must match exactly (*case sensitive*) the name of the macro -* the file must end with an endsub '*O endsub*' followed by an - '*M2*' command +* the file must end with an endsub '*O endsub*' followed by an '*M2*' command * the files need to be placed in a folder specified in your INI file in the RS274NGC section (see <>) @@ -385,7 +383,7 @@ corresponding macro button. [NOTE] You will find the sample macros in macros folder placed in the gmoccapy -sim folder. If you have given several subroutine paths, they will be searched +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. Gmoccapy will also accept macros asking for parameters like: @@ -394,8 +392,7 @@ Gmoccapy will also accept macros asking for parameters like: go_to_position X-pos Y-pos Z-pos ---- -The parameters must be separated by spaces. This calls a file -'go_to_position.ngc' with the following content: +The parameters must be separated by spaces. This calls a file 'go_to_position.ngc' with the following content: ---- ; Test file go to position @@ -433,7 +430,6 @@ If you would like to use a macro without any movement, see also the notes in <'. + -Typically '' would be the configs base name + '_postgui' + '.hal' +Typically '' 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 +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=' in the INI. + Each will be run one after the other in the order they appear. + -See <> -for details. +See <> for details. === Right And Bottom Button Lists @@ -601,7 +596,7 @@ in tool mode: in edit mode: -* gmoccapy.h-button.button-0 == +* gmoccapy.h-button.button-0 == * gmoccapy.h-button.button-1 == reload file * gmoccapy.h-button.button-2 == save * gmoccapy.h-button.button-3 == save as @@ -635,72 +630,78 @@ image::images/gmoccapy_0_9_7_sim_hardware_button.png[align="left"] === Velocities And Overrides -All sliders from gmoccapy can be connected to hardware encoder or hardware -potentiometers. +All sliders from gmoccapy can be connected to hardware encoder or hardware potentiometers. [NOTE] for gmoccapy 3 the hal pin name has changed, as new controls has been implemented, -max velocity does not exist any more, as rapid override has been implemented. +max velocity does not exist any more, as rapid override has been implemented. This change has been done as many user ask for that. -To connect encoders the following pin are exported: - -* gmoccapy.jog.jog-velocity.counts = HAL_S32 Jog velocity -* gmoccapy.jog.jog-velocity.count-enable = HAL_BIT Must be True, to enable counts - -* gmoccapy.feed.feed-override.counts = HAL_S32 feed override -* gmoccapy.feed.feed-override.count-enable = HAL_BIT Must be True, to enable counts -* gmoccapy.feed.reset-feed-override = HAL_BIT reset the feed override to 100 % - -* gmoccapy.spindle.spindle-override.counts = HAL_S32 spindle override -* gmoccapy.spindle.spindle-override.count-enable = HAL_BIT Must be True, to enable counts -* gmoccapy.spindle.reset-spindle-override = HAL_BIT reset the spindle override to 100 % - -* gmoccapy.rapid.rapid-override.counts = HAL_S32 Maximal Velocity of the machine -* gmoccapy.rapid.rapid-override.count-enable = HAL_BIT Must be True, to enable counts - -To connect potentiometers, use the following hal pin: - -* gmoccapy.jog.jog-velocity.direct-value = HAL_FLOAT To adjust the jog velocity slider -* gmoccapy.jog.jog-velocity.analog-enable = HAL_BIT Must be True, to allow analog inputs - -* gmoccapy.feed.feed-override.direct-value = HAL_FLOAT To adjust the feed override slider -* gmoccapy.feed.feed-override.analog-enable = HAL_BIT Must be True, to allow analog inputs - -* gmoccapy.spindle.spindle-override.direct-value = HAL_FLOAT To adjust the spindle override slider -* gmoccapy.spindle.spindle-override.analog-enable = HAL_BIT Must be True, to allow analog inputs - -* gmoccapy.rapid.rapid-override.direct-value = HAL_FLOAT To adjust the max velocity slider -* gmoccapy.rapid.rapid-override.analog-enable = HAL_BIT Must be True, to allow analog inputs +To connect 'encoders' the following pin are exported: + +[width="80%", options="header", cols="^,<,^"] +|====================================================================== +| PIN | TYPE | FUNCTION +| gmoccapy.jog.jog-velocity.counts | HAL_S32 | Jog velocity +| gmoccapy.jog.jog-velocity.count-enable | HAL_BIT | Must be True, to enable counts +| gmoccapy.feed.feed-override.counts | HAL_S32 | feed override +| gmoccapy.feed.feed-override.count-enable | HAL_BIT | Must be True, to enable counts +| gmoccapy.feed.reset-feed-override | HAL_BIT | reset the feed override to 100% +| gmoccapy.spindle.spindle-override.counts | HAL_S32 | spindle override +| gmoccapy.spindle.spindle-override.count-enable | HAL_BIT | Must be True, to enable counts +| gmoccapy.spindle.reset-spindle-override | HAL_BIT | reset the spindle override to 100% +| gmoccapy.rapid.rapid-override.counts | HAL_S32 | Maximal Velocity of the machine +| gmoccapy.rapid.rapid-override.count-enable | HAL_BIT | Must be True, to enable counts +|====================================================================== + +To connect 'potentiometers', use the following hal pin: + +[width="80%", options="header", cols="^,<,^"] +|======================================================================== +| PIN | TYPE | FUNCTION +| gmoccapy.jog.jog-velocity.direct-value | HAL_FLOAT | To adjust the jog velocity slider +| gmoccapy.jog.jog-velocity.analog-enable | HAL_BIT | Must be True, to allow analog inputs +| gmoccapy.feed.feed-override.direct-value | HAL_FLOAT | To adjust the feed override slider +| gmoccapy.feed.feed-override.analog-enable | HAL_BIT | Must be True, to allow analog inputs +| gmoccapy.spindle.spindle-override.direct-value | HAL_FLOAT | To adjust the spindle override slider +| gmoccapy.spindle.spindle-override.analog-enable | HAL_BIT | Must be True, to allow analog inputs +| gmoccapy.rapid.rapid-override.direct-value | HAL_FLOAT | To adjust the max velocity slider +| gmoccapy.rapid.rapid-override.analog-enable | HAL_BIT | Must be True, to allow analog inputs +|======================================================================== In addition gmoccapy 3 offers additional hal pin 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 +or decrease will be, must be set in the glade file. In a future release it will be integrated in the settings page. -* gmoccapy.spc_jog_vel.increase = HAL_BIT IN as long as True the value of the slider will increase -* gmoccapy.spc_jog_vel.decrease = HAL_BIT IN as long as True the value of the slider will decrease -* gmoccapy.spc_jog_vel.scale = HAL_FLOAT IN A value to scale the output value (Handy to change units/min to units/sec -* gmoccapy.spc_jog_vel.value = HAL_FLOAT OUT value of the widget -* gmoccapy.spc_jog_vel.scaled-value = HAL_FLOAT OUT scaled value of the widget - -* gmoccapy.spc_feed.increase = HAL_BIT IN as long as True the value of the slider will increase -* gmoccapy.spc_feed.decrease = HAL_BIT IN as long as True the value of the slider will decrease -* gmoccapy.spc_feed.scale = HAL_FLOAT IN A value to scale the output value (Handy to change units/min to units/sec -* gmoccapy.spc_feed.value = HAL_FLOAT OUT value of the widget -* gmoccapy.spc_feed.scaled-value = HAL_FLOAT OUT scaled value of the widget - -* gmoccapy.spc_spindle.increase = HAL_BIT IN as long as True the value of the slider will increase -* gmoccapy.spc_spindle.decrease = HAL_BIT IN as long as True the value of the slider will decrease -* gmoccapy.spc_spindle.scale = HAL_FLOAT IN A value to scale the output value (Handy to change units/min to units/sec -* gmoccapy.spc_spindle.value = HAL_FLOAT OUT value of the widget -* gmoccapy.spc_spindle.scaled-value = HAL_FLOAT OUT scaled value of the widget - -* gmoccapy.spc_rapid.increase = HAL_BIT IN as long as True the value of the slider will increase -* gmoccapy.spc_rapid.decrease = HAL_BIT IN as long as True the value of the slider will decrease -* gmoccapy.spc_rapid.scale = HAL_FLOAT IN A value to scale the output value (Handy to change units/min to units/sec -* gmoccapy.spc_rapid.value = HAL_FLOAT OUT value of the widget -* gmoccapy.spc_rapid.scaled-value = HAL_FLOAT OUT scaled value of the widget +[width="80%", options="header", cols="^,<,^"] +|============================================================== +| PIN | TYPE | FUNCTION +| SPEED | | +| gmoccapy.spc_jog_vel.increase | HAL_BIT IN | as long as True the value of the slider will increase +| gmoccapy.spc_jog_vel.decrease | HAL_BIT IN | as long as True the value of the slider will decrease +| gmoccapy.spc_jog_vel.scale | HAL_FLOAT IN | A value to scale the output value (Handy to change units/min to units/sec +| gmoccapy.spc_jog_vel.value | HAL_FLOAT OUT | value of the widget +| gmoccapy.spc_jog_vel.scaled-value | HAL_FLOAT OUT | scaled value of the widget +| FEED | | +| gmoccapy.spc_feed.increase | HAL_BIT IN | as long as True the value of the slider will increase +| gmoccapy.spc_feed.decrease | HAL_BIT IN | as long as True the value of the slider will decrease +| gmoccapy.spc_feed.scale | HAL_FLOAT IN | A value to scale the output value (Handy to change units/min to units/sec +| gmoccapy.spc_feed.value | HAL_FLOAT OUT | value of the widget +| gmoccapy.spc_feed.scaled-value | HAL_FLOAT OUT | scaled value of the widget +| SPINDLE | | +| gmoccapy.spc_spindle.increase | HAL_BIT IN | as long as True the value of the slider will increase +| gmoccapy.spc_spindle.decrease | HAL_BIT IN | as long as True the value of the slider will decrease +| gmoccapy.spc_spindle.scale | HAL_FLOAT IN | A value to scale the output value (Handy to change units/min to units/sec +| gmoccapy.spc_spindle.value | HAL_FLOAT OUT | value of the widget +| gmoccapy.spc_spindle.scaled-value | HAL_FLOAT OUT | scaled value of the widget +| RAPIDS | | +| gmoccapy.spc_rapid.increase | HAL_BIT IN | as long as True the value of the slider will increase +| gmoccapy.spc_rapid.decrease | HAL_BIT IN | as long as True the value of the slider will decrease +| gmoccapy.spc_rapid.scale | HAL_FLOAT IN | A value to scale the output value (Handy to change units/min to units/sec +| gmoccapy.spc_rapid.value | HAL_FLOAT OUT | value of the widget +| gmoccapy.spc_rapid.scaled-value | HAL_FLOAT OUT | scaled value of the widget +|============================================================== The float pin do accept values from 0.0 to 1.0, being the percentage value you want to set the slider value. @@ -709,7 +710,7 @@ you want to set the slider value. 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. -[IMPORTANT] Please be aware, jog velocity depends on the turtle button state, +[IMPORTANT] Please be aware, 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 to <> for more @@ -755,7 +756,6 @@ For a "C" axis you will see: * gmoccapy.jog.axis.jog-c-minus [[gmoccapy:jog-velocity]] - === Jog Velocities And Turtle-Jog Hal Pin The jog velocity can be selected with the corresponding slider. The scale of @@ -780,6 +780,9 @@ of 10 hal pin 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. +[NOTE] +Gmoccapy 3 utiliza diferentes nombres de pin hal + If you have 6 increments in your hal you will get *7* pins: jog-inc-0 is unchangeable and will represent continuous jogging. @@ -796,7 +799,6 @@ gmoccapy offers also a hal pint to output the selected jog invrement * gmoccapy.jog.jog-increment [[gmoccapy:hardware-unlock]] - === Hardware Unlock Pin To be able to use a key switch to unlock the settings page the following @@ -821,7 +823,6 @@ NOTE: Messages or user infos will not affect the gmoccapy.error pin, but the gmo pin will delete the last message if no error is shown! [[gmoccapy:user-created-message]] - === User Created Message HAL Pins gmoccapy may react to external errors, using 3 different user messages: @@ -906,6 +907,8 @@ 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. +.Manual tool change + image::images/manual_toolchange.png[align="left"] * gmoccapy.toolchange-number _S32 IN_ The number of the tool to be changed @@ -931,6 +934,8 @@ 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. +.Tool information + image::images/gmoccapy_0_9_7_tool_info.png[align="left"] * gmoccapy.tooloffset-x @@ -940,7 +945,7 @@ image::images/gmoccapy_0_9_7_tool_info.png[align="left"] Please take care, that this connections have to be done in the postgui hal file! [NOTE] -the tooloffset-x line is not needed on a mill, and will not be displayed on a +the tooloffset-x line is not needed on a mill, and will not be displayed on a mill with trivial kinematics. ---- net tooloffset-x gmoccapy.tooloffset-x <= motion.tooloffset.x @@ -955,7 +960,6 @@ So writing a program makes you responsible to include an G43 after each tool change! [[gmoccapy:auto-tool-measurement]] - == Auto Tool Measurement Gmoccapy offers an integrated auto tool measurement. To use this feature, you @@ -963,7 +967,7 @@ 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. [IMPORTANT] Before starting the first test, do not forget to enter the probe -height and probe velocities on the settings page! See +height and probe velocities on the settings page! See <> It might be also a good idea to take a look at the tool measurement video: @@ -980,6 +984,8 @@ You should follow these steps: here is a small sketch: +.Tool measurement data + image::images/sketch_auto_tool_measurement.png[align="left"] With the first given tool change the tool will be measured and the offset will @@ -1067,8 +1073,8 @@ TOPLEVEL = python/toplevel.py You must copy the following files to your config directory First make a directory 'python' in your config folder from -'your_linuxcnc-dev_directory/configs/sim/gmoccapy/python' copy 'toplevel.py' to -your 'config_dir/python' folder. Copy 'remap.py' to your +'your_linuxcnc-dev_directory/configs/sim/gmoccapy/python' copy 'toplevel.py' +to your 'config_dir/python' folder. Copy 'remap.py' to your 'config_dir/python' folder Copy 'stdglue.py' to your 'config_dir/python' folder. @@ -1078,6 +1084,7 @@ copy 'on_abort.ngc' to the directory specified in the SUBROUTINE_PATH see From 'your_linuxcnc-dev_directory/configs/sim/gmoccapy/macros' copy 'change.ngc' to the directory specified as SUBROUTINE_PATH see <>. + Open 'change.ngc' with a editor and uncomment the following lines (49 and 50): @@ -1119,7 +1126,6 @@ net tool-prep-loop iocontrol.0.tool-prepare <= iocontrol.0.tool-prepared ------- [[gmoccapy:settings-page]] - == The Settings Page To enter the page you will have to click on @@ -1130,7 +1136,7 @@ at this time you will have to edit the hidden preference file, see The page looks at the moment like so: -image::images/gmoccapy_settings_appearance.png[align="left"] +image::images/gmoccapy_settings_appearance.png[Configuration page,align="left"] The page is separated in three main tabs: @@ -1139,17 +1145,17 @@ The page is separated in three main tabs: On this tab you will find the following options: Main Window:: - Here you can select how you wish the GUI to start. The main reason for this was the wish to get an easy + + 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: + + You have three options: + * start as full screen * start maximized * 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. + + 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. + @@ -1157,13 +1163,13 @@ Main Window:: use a touch screen. Keyboard:: - The check-boxes allows the user to select if he want 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 been affected by this settings, + - so you be able to show or hide the keyboard by pressing the button. The default behavior will be set by + - the check-boxes. + - + - Default are : + + The check-boxes allows the user to select if he want 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 been affected by this settings, + + so you be able to show or hide the keyboard by pressing the button. The default behavior will be set by + + the check-boxes. + + + + Default are : + [NOTE] If this section is not sensitive, you have not installed a virtual keyboard, @@ -1198,7 +1204,7 @@ For matchbox-keyboard you will have to make your own layout, for a German layout ask in the forum. On Touch Off:: - give the option to show the preview tab or the offset page tab if you enter the touch off mode by clicking the + give the option to show the preview tab or the offset page tab if you enter the touch off mode by clicking the corresponding bottom button. * show preview @@ -1207,6 +1213,13 @@ On Touch Off:: As the notebook tabs are shown, you are able to switch between both views in any case. +Mostrar pantalla auxiliar:: + Al hacer clic en este botón se abrirá una ventana adicional. Este botón solo es sensible si un archivo llamado 'Gmoccapy 3.glade' + se encuentra en su carpeta de configuración. Puedes construir la pantalla Aux usando Glade. + +[WARNING] +'La ventana principal de la pantalla auxiliar debe llamarse window2' + DRO Options:: 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 @@ -1223,41 +1236,58 @@ The foreground color of the DRO can be selected with: * unhomed color = red 'show dro in preview' + -the DRO will be shown in the preview window + + +the DRO will be shown in the preview window + + -'show offsets'+ -the Offsets will be shown in the preview window + + +'show offsets' + +the Offsets will be shown in the preview window + + -'show DTG' + -the distance to go will be shown in the preview window + + +'show DTG' + +the distance to go will be shown in the preview window + + + +'mostrar boton DRO' + +le permitirá mostrar botones adicionales en el lado izquierdo del DRO. + + +Se mostrará: + +* Un botón para cambiar de coordenadas relativas a absolutas, + +* un botón para alternar entre la distancia a recorrer y los otros estados + +* y un botón para alternar las unidades de métricas a imperiales y viceversa. -[NOTE] -*You can change through the DRO modes (absolute, relative, distance -to go) by clicking 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 axis, making it easier to set the value, as you will not need to go over the touch off bottom button. Clicking the numbers (right side of the DRO) will toggle through the DRO modes as described above. * +[WARNING] +No se recomienda usar esta opción, porque el usuario +puede perder la opción de unidad automática, que alternará las unidades según el +gcode activo G20/G21. + +[NOTE] +You can change through the DRO modes (absolute, relative, distance +to go) by clicking 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 axis, making it easier to set the value, as you will not need to go over the touch off bottom button. Clicking the numbers (right side of the DRO) will toggle through the DRO modes as described above.* -'size' + -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 axis, the DRO font size will be 3/4 of the value, because of space reason. + + +'Usar unidades automáticas' + +permite deshabilitar la opción de unidades automáticas de la pantalla, para que pueda ejecutar un programa en pulgadas y ver el DRO en mm. + + -'digits' + -sets the number of digits of the DRO from 1 to 5. + - -NOTE: 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. +'size' + +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 axis, the DRO font size will be 3/4 of the value, because of space reason. + + -'toggle DRO mode' + -if not active, a mouse click on the DRO will not take any action. + -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). + -Neverthereless a click on the axis letter will open the popup dialog to set the axis value + + +'digits' + +sets the number of digits of the DRO from 1 to 5. + +[NOTE] +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. + +'toggle DRO mode' + +if not active, a mouse click on the DRO will not take any action. + +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). + +Neverthereless a click on the axis letter will open the popup dialog to set the axis value. Preview:: -'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 +'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. -[NOTE] The grid will not be shown in perspective view. +[NOTE] +The grid will not be shown in perspective view. 'Show DRO' + Will show the a DRO also in the preview window, it will be shown automatically in fullsize preview @@ -1271,7 +1301,7 @@ preview, only if Show DRO is active and not full size preview. get in full size preview a offset page 'Mouse Button Mode' this combobox you can select the button behavior of the -mouse to rotate, move or zoom within the preview. +mouse to rotate, move or zoom within the preview: * left rotate, middle move, right zoom * left zoom, middle move, right rotate @@ -1289,7 +1319,7 @@ 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. File to load on start up:: - Select the file you want to be loaded on start up. + Select the file you want to be loaded on start up. In other GUI changing this was very cumbersome, because the users where forced to edit the INI File. Select the file you want to be loaded on start up. If a file is loaded, it can @@ -1301,26 +1331,26 @@ 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 Jump to dir:: - you can set here the directory to jump to if you press the corresponding button + you can set here the directory to jump to if you press the corresponding button in the file selection dialog. -image::images/gmoccapy_file_selection_dialog_with_keyboard.png[align="left"] +image::images/gmoccapy_file_selection_dialog_with_keyboard.png["Directory selection",align="left"] Themes and Sounds:: 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. -=== Hardware +=== Hardware2 -image::images/gmoccapy_settings_hardware.png[align="left"] +image::images/gmoccapy_settings_hardware.png["Hardware settings",align="left"] Hardware MPG Scales:: For the different Hal Pin 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 has an MPG Wheel with 500 ipr and wants to set the spindle override which has -limits from 50% to 120%, so he goes from min to max within 70 impulses, meaning not even 1/4 turn. +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. By default all scales are set using the calculation: @@ -1330,8 +1360,8 @@ By default all scales are set using the calculation: Keyboard shortcuts:: 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. It is not recommended to use keyboard jogging, -as it represents a serious risk for operator and machine. +So everybody can select whether to use them or not. +It is not recommended to use keyboard jogging, as it represents a serious risk for operator and machine. Default is not to use keyboard shortcuts. @@ -1349,9 +1379,9 @@ See <> * F2 = Machine on * F3 = manual mode * F5 = MDI mode - + * ESC = Abort - + In AUTO Mode we will allow the following key shortcuts * R or r = run program * P or p = pause program @@ -1362,7 +1392,7 @@ There are additional keys for message handling, see <> * WINDOWS = Delete last message - * = Delete all messages + * = Delete all messages Unlock options:: @@ -1379,7 +1409,7 @@ Spindle:: The start RPM sets the rpm to be used if the spindle is started and no S value has been set. [NOTE] -This value will be preseted according to your settings in +This value will be preseted according to your settings in [DISPLAY] DEFAULT_SPINDLE_SPEED of your INI. If you change the settings on the settings page, that value will be default from that moment, your INI File will not be modified. @@ -1396,28 +1426,25 @@ MAX = 6000 ---- [[gmoccapy:turtle-jog]] - Turtle Jog:: [[sub:turtle_jog]] This settings will have influence on the jog velocities. * 'hide turtle jog button' will hide the button right of the jog velocity -slider, if you hide this button, please take care that it shows the rabbit -icon, otherwise you will not be able to jog faster than the turtle jog velocity, -which is calculated using the turtle jog factor. + slider, if you hide this button, please take care that it shows the rabbit + icon, otherwise you will not be able to jog faster than the turtle jog velocity, + which is calculated using the turtle jog factor. * 'Turtle jog factor' sets the scale to apply for turtle jog mode. If you set -a factor of 20, the turtle max jog velocity will be 1/20 of max velocity of the machine -if in turtle mode (button pressed, showing the turtle) + a factor of 20, the turtle max jog velocity will be 1/20 of max velocity of the machine + if in turtle mode (button pressed, showing the turtle) [NOTE] -This button can be activated using the -<> hal pin. +This button can be activated using the <> hal pin. +[[gmoccapy:tool-measurement]] === Advanced Settings -image::images/gmoccapy_settings_advanced.png[align="left"] - -[[gmoccapy:tool-measurement]] +image::images/gmoccapy_settings_advanced.png["Advanced settings",align="left"] .Tool Measurement @@ -1425,78 +1452,82 @@ image::images/gmoccapy_settings_advanced.png[align="left"] If this part is not sensitive, you do not have a valid INI file configuration to use tool measurement. -Please check <> +Please check <> * 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 an -G43 will be executed after the change. + measurement will be done, the result will be stored in the tool table and an + G43 will be executed after the change. .Probe Information The following information is taken from your INI file and must be given in absolute coordinates - * X Pos. = The X position of the tool switch - * Y Pos. = The Y position of the tool switch - * Z Pos. = The Z position of the tool switch, we will go as rapid move to - this coordinate +* X Pos. = The X position of the tool switch +* Y Pos. = The Y position of the tool switch +* Z Pos. = The Z position of the tool switch, we will go as rapid move to this coordinate +* Max. Probe = is the distance to search for contact, an error will be launched, if no contact is given. + 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! +* Probe Height = is 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. - * Max. Probe = is the distance to search for contact, an error will be - launched, if no contact is given. 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! +.Probe velocities - * Probe Height = is 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. +* Search Vel. = The velocity to search for the tool switch, after contact + the tool will go up again and then goes toward the probe again with probe + vel, so you will get better results. -.Probe velocities +* Probe Vel. = Is the velocity for the second movement to the switch, it + should be slower to get better touch results.(In sim mode, this is + commented out in macros/change.ngc, otherwise the user would have to click + twice on the probe button) - * Search Vel. = The velocity to search for the tool switch, after contact - the tool will go up again and then goes toward the probe again with probe - vel, so you will get better results. +.Cambiador de herramientas - * Probe Vel. = Is the velocity for the second movement to the switch, it - should be slower to get better touch results.(In sim mode, this is - commented out in macros/change.ngc, otherwise the user would have to click - twice on the probe button) +Si su cuarto eje 'se utiliza en un cambiador de herramientas, es posible que desee ocultar el DRO +y todos los demás botones relacionados con ese eje. -[[gmoccapy:reload-tool-on-start]] +Puedes hacerlo marcando la casilla de verificación, que ocultará: -If checked, the tool in spindle will be saved on each change in the preference +* 4º eje DRO +* 4º eje boton Jog +* 4º eje botón de referencia (home) +* Columna del 4º eje en la página offset. +* Columna del 4º eje en el editor de herramientas. + +[[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 axis 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. [[gmoccapy:message-behavior]] - .Message Behavior And Appearance - This will display small pop up windows displaying the message or error text, the behavior is very similar to the one axis uses. You can delete a specific message, by clicking on it's close button, if you want to delete the last one, just hit the WINDOWS key on your keyboard, or delete all messages at ones -with . +with . You are able to set some options: - * 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. - * 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. - * Width = The width of the message box - * max = The maximum messages you want to see at ones, if you set this to 10, - the 11th message will delete the first one, so you will only see the last 10 - ones. - * Font = The font and size you want to use to display the messages - * 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. - * The button launch test message will just do what it is supposed to, it will - show a message, so you can see the changes of your settings without the need - to generate an error. +* 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. +* 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. +* Width = The width of the message box +* max = The maximum messages you want to see at ones, if you set this to 10, + the 11th message will delete the first one, so you will only see the last 10 + ones. +* Font = The font and size you want to use to display the messages +* 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. +* The button launch test message will just do what it is supposed to, it will + show a message, so you can see the changes of your settings without the need + to generate an error. .Run From Line Option @@ -1511,7 +1542,6 @@ are very probable. [[gmoccapy:lathe-section]] - == Lathe Specific Section If in the INI File LATHE = 1 is given, the GUI will change its appearance @@ -1555,7 +1585,7 @@ offset and the tool table is showing all lathe relevant information. == Plasma Specific Section -image::images/gmoccapy_plasma.png[align="left"] +image::images/gmoccapy_plasma.png["Plasma GUI",align="left"] 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] @@ -1590,7 +1620,6 @@ English = http://www.youtube.com/watch?v=ItVWJBK9WFA http://www.youtube.com/watch?v=rG1zmeqXyZI [[gmoccapy:tool-measurement-videos]] - === Tool Measurement Videos Auto Tool Measurement Simulation = http://youtu.be/rrkMw6rUFdk @@ -1599,19 +1628,20 @@ Auto Tool Measurement Screen = http://youtu.be/Z2ULDj9dzvk Auto Tool Measurement Machine = http://youtu.be/1arucCaDdX4 -== Known problems +== Known problems === Strange numbers in the info area If you get strange numbers in the info area of gmoccapy like: -image::images/strange_numbers.png[align="left"] +image::images/strange_numbers.png["Strange numbers",align="left"] 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 +MAX_LINEAR_VELOCITY = xxx. Change that entry to MAX_VELOCITY = xxx -=== Not ending macro [[sub:NOT_ENDING_MACROS]] +[[sub:NOT_ENDING_MACROS]] +=== Not ending macro If you use a macro without movement, like this one: @@ -1624,13 +1654,13 @@ G40 G10 L20 P0 X0 Y0 -o endsub +o endsub m2 --------- -gmoccapy will not see the end of the macro, because the interpreter needs to +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. +a new state. To avoid that just add a G4 P0.1 line to get the needed signal. The correct macro would be: --------- @@ -1644,7 +1674,7 @@ G10 L20 P0 X0 Y0 G4 P0.1 -o endsub +o endsub m2 --------- diff --git a/docs/src/gui/gmoccapy_hu.adoc b/docs/src/gui/gmoccapy_hu.adoc index 08cecab5adc..db642993eb4 100644 --- a/docs/src/gui/gmoccapy_hu.adoc +++ b/docs/src/gui/gmoccapy_hu.adoc @@ -1,6 +1,7 @@ -= gmoccapy +:lang: hu [[cha:gmoccapy-hu]] += gmoccapy == Bevezetés @@ -72,7 +73,8 @@ Egy létezõ konfiguráció használata esetén módosítani kell az INI fájlt Vegyünk egy közelebbi pillantást az INI fájlra, minek kell szerepelni a gmoccapy használatához: + -=== A DISPLAY fejezet [[sub:the_display_section]] +[[sub:the_display_section]] +=== A DISPLAY fejezet [DISPLAY] DISPLAY = gmoccapy @@ -286,7 +288,8 @@ Részletes leírás a pango nyelvrõl itt található: https://developer.gnome.o Az idetartozó HAL láb névkonvenciók a HAl lábak fejezetben találhatóak <> -=== The RS274NGC Fejezet [[sub:RS274NGC]] +[[sub:RS274NGC]] +=== The RS274NGC Fejezet [RS274NGC] SUBROUTINE_PATH = macros @@ -294,7 +297,8 @@ Az idetartozó HAL láb névkonvenciók a HAl lábak fejezetben találhatóak << A fenti sor beállítja a makrók és egyéb szubrutinok elérési útvonalát -=== The MACRO Fejezet [[sub:MACROS]] +[[sub:MACROS]] +=== The MACRO Fejezet A Touchy felülethez hasonlóan a gmoccapy-ban is van lehetõség a makrók definiálására. + A makró semmi más mint egy G-kódot tartalmazó fájl. + MDI módban lehetõség van ezeket a makrókat egy gombnyomásra végrehajtani. + @@ -364,7 +368,8 @@ Az adott makróhoz tartozó gomb lenyomásakor a makró bekéri az X-pos, Y-pos, image::images/gmoccapy_getting_macro_info.png[align="left"] -=== The TRAJ Fejezet[[sub:The_TRAJ_Section]] +[[sub:The_TRAJ_Section]] +=== The TRAJ Fejezet MAX_VELOCITY = 230.000 @@ -484,7 +489,8 @@ ha az INI fájlban 4. tengely van definiálva, akkor az alábbi két láb elérh * gmoccapy.jog-c-plus * gmoccapy.jog-c-minus -=== Léptetési sebességek és teknős-lépés HAL láb [[sub:Jog_Vel_and_Turtle-Jog]] +[[sub:Jog_Vel_and_Turtle-Jog]] +=== Léptetési sebességek és teknős-lépés HAL láb A léptetési sebesség értéke beállítható a megfelelő csúszkával. + A csúszka léptéke változik a lassú ("teknős") módba való kapcsolással. Ha a gomb nem látható akkor lehet, hogy letiltásra került itt: <>. Ha a nyulat ábrázoló gomb látszik akkor a sebssség a minimális és maximális értékek között változhat. Ha a gomb teknőst ábrázol, akkor a maximális sebesség 1/20-a lesz csak elérhető alapértelmezésben. @@ -510,7 +516,8 @@ Ha 6 inkrementum van akkor a következő HAL *7* láb lesz elérhető: jog-inc-0 értéke nem változtatható és folyamatos léptetést jelent. -=== Hardver zárolás láb [[sub:hardware_unlock_pin]] +[[sub:hardware_unlock_pin]] +=== Hardver zárolás láb A beállítások zárolásához és a zárolás feloldásához lehetséges egy kölső hardver kulccsal is, ennek érdekében egy HAL láb kerül kiexportálásra: * gmoccapy.unlock-settings @@ -530,7 +537,8 @@ delete the first error and reset the gmoccapy.error pin to False after the last NOTE: 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! -=== User Created Message HAL Pins [[sub:User_Created_Message_HAL_Pins]] +[[sub:User_Created_Message_HAL_Pins]] +=== User Created Message HAL Pins gmoccapy may react to external errors, using 3 different user messages: + Mind HAL_BIT lábak. + @@ -635,7 +643,8 @@ sending an G43 after any tool change, *but not in auto mode!* IMPORTANT: So writing a program makes you responsible to include an G43 after each tool change! -== Auto Tool Measurement [[sub:Auto_Tool_Measurement]] +[[sub:Auto_Tool_Measurement]] +== Auto Tool Measurement 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 @@ -768,7 +777,8 @@ In your postgui.hal file add: net tool-prep-loop iocontrol.0.tool-prepare <= iocontrol.0.tool-prepared ------- -== The settings page [[sub:The_settings_page]] +[[sub:The_settings_page]] +== The settings page To enter the page you will have to click on: image::images/gmoccapy_settings_button.png[align="left"] @@ -1007,7 +1017,8 @@ the main screen. It is no error giving wrong values. If you give a maximum of 20 MIN = 0 MAX = 6000 -==== Turtle Jog [[sub:turtle_jog]] +[[sub:turtle_jog]] +==== Turtle Jog This settings will have influence on the jog velocities. * 'hide turtle jog button' will hide the button right of the jog velocity slider, if you hide this button, please take care that it shows the rabbit icon, otherwise you will not be able to jog faster than the turtle jog velocity, which is calculated using the turtle jog factor. @@ -1019,7 +1030,8 @@ NOTE: This button can be activated using the <> @@ -1062,7 +1074,8 @@ You can do that by checking the checkbox, that will hide: + * column of 4'th axis in the offsetpage * column of 4'th axis in the tolleditor -==== Message behavior and appearance [[sub:Message_behavior_and_appearance]] +[[sub:Message_behavior_and_appearance]] +==== Message behavior and appearance This will display small popup windows displaying the message or error text, the behavior is very similar to the one axis uses. You can delete a specific message, by clicking on it's close button, if you want to delete the last one, just hit the WINDOWS key on your keyboard, or delete all messages @@ -1095,7 +1108,8 @@ Default is disable run from line If this button is active, nearly every button press or relevant action of LinuxCNC will be logged in the ALARM history. This is very useful for debugging. -== LATHE specific section [[sub:LATHE_specific_section]] +[[sub:LATHE_specific_section]] +== LATHE specific section 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. @@ -1163,7 +1177,8 @@ Hardveres nyomógombok angolul = http://www.youtube.com/watch?v=ItVWJBK9WFA === Felhasználói fülek Felhasználói fülek angolul = http://www.youtube.com/watch?v=rG1zmeqXyZI -=== Tool_Measurement_Video [[sub:Tool_Measurement_Videos]] +[[sub:Tool_Measurement_Videos]] +=== Tool_Measurement_Video English Auto Tool Measurement Simmulation = http://youtu.be/rrkMw6rUFdk + English Auto Tool Measurement Screen = http://youtu.be/Z2ULDj9dzvk + English Auto Tool Measurement Machine = http://youtu.be/1arucCaDdX4 + diff --git a/docs/src/gui/gscreen.adoc b/docs/src/gui/gscreen.adoc index a64b9f2dd1d..a7b1ac86862 100644 --- a/docs/src/gui/gscreen.adoc +++ b/docs/src/gui/gscreen.adoc @@ -1,5 +1,6 @@ -[[cha:gscreen]] +:lang: en +[[cha:gscreen]] = Gscreen == Intro diff --git a/docs/src/gui/halui.adoc b/docs/src/gui/halui.adoc index dfaba852e41..1bc37ddf57c 100644 --- a/docs/src/gui/halui.adoc +++ b/docs/src/gui/halui.adoc @@ -1,5 +1,6 @@ -[[cha:hal-user-interface]] +:lang: en +[[cha:hal-user-interface]] = HAL User Interface == Introduction @@ -32,7 +33,7 @@ to the ini file in the [HALUI] section: Example: ---- -[HALUI] +[HALUI] MDI_COMMAND = G0 X0 MDI_COMMAND = G0 G53 Z0 MDI_COMMAND = G28 @@ -70,7 +71,7 @@ Owner Type Dir Value Name 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 +This will not always succeed depending on the current operating mode (e.g., while in AUTO halui can't successfully send MDI commands). == Example Configuration @@ -106,7 +107,7 @@ $ man halui * 'halui.feed-override.scale' (float, in) - pin for setting the scale for increase and decrease of 'feed-override'. * 'halui.feed-override.value' (float, out) - current FO value -=== Mist +=== Mist * 'halui.mist.is-on' (bit, out) - indicates mist is on * 'halui.mist.off' (bit, in) - pin for requesting mist off @@ -149,7 +150,7 @@ that is set in the [TRAJ] section of the ini file. * 'halui.max-velocity.decrease' (bit, in) - pin for decreasing max velocity * 'halui.max-velocity.increase' (bit, in) - pin for increasing max velocity * '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. -* 'halui.max-velocity.value' (float, out) - is the maximum linear velocity in machine units per second. +* 'halui.max-velocity.value' (float, out) - is the maximum linear velocity in machine units per second. === MDI @@ -284,11 +285,11 @@ L = axis letter (xyzabcuvw) * 'halui.spindle.N.override.count-enable' (bit, in) - must be true for 'counts' or 'direct-value' to work. * 'halui.spindle.N.override.counts' (s32, in) - counts * scale = SO percentage. Can be used with an encoder or 'direct-value'. * 'halui.spindle.N.override.decrease' (bit, in) - pin for decreasing the SO (-=scale) -* 'halui.spindle.N.override.direct-value' (bit, in) - false when using encoder to change counts, +* 'halui.spindle.N.override.direct-value' (bit, in) - false when using encoder to change counts, true when setting counts directly. * 'halui.spindle.N.override.increase' (bit, in) - pin for increasing the SO (+=scale) * 'halui.spindle.N.override.scale' (float, in) - pin for setting the scale on changing the SO -* 'halui.spindle.N.override.value' (float, out) - current SO value +* 'halui.spindle.N.override.value' (float, out) - current SO value === Spindle diff --git a/docs/src/gui/image-to-gcode.adoc b/docs/src/gui/image-to-gcode.adoc index 76c8ac95faa..27162c5e3e4 100644 --- a/docs/src/gui/image-to-gcode.adoc +++ b/docs/src/gui/image-to-gcode.adoc @@ -1,5 +1,7 @@ -[[cha:image-to-g-code]] +:lang: en +:toc: +[[cha:image-to-g-code]] = Image to G-Code image::images/image-to-gcode.png[align="center", alt="Image to G-Code"] @@ -82,15 +84,15 @@ object from a 400x400 image file, use a pixel size of .00625, because === Plunge Feed Rate (units per minute) -The feed rate for the initial plunge movement. +The feed rate for the initial plunge movement. === Feed Rate (units per minute) -The feed rate for other parts of the path. +The feed rate for other parts of the path. === Spindle Speed (RPM) -The spindle speed S code that should be put into the gcode file. +The spindle speed S code that should be put into the gcode file. === Scan Pattern @@ -161,7 +163,7 @@ columns are being milled. Possible bounding options are: === Contact angle -When 'Lace bounding' is not 'None', slopes greater than 'Contact angle' +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. @@ -179,5 +181,5 @@ offset is 0.1 inches. .Roughing passes and final pass -image::images/i2g-roughing.png[alt="Roughing passes and final pass"] +image::images/i2g-roughing.png["Roughing passes and final pass"] diff --git a/docs/src/gui/ngcgui.adoc b/docs/src/gui/ngcgui.adoc index 4fff0a72e29..b0b0f8445e7 100644 --- a/docs/src/gui/ngcgui.adoc +++ b/docs/src/gui/ngcgui.adoc @@ -1,5 +1,6 @@ -[[cha:ngcgui]] +:lang: en +[[cha:ngcgui]] = NGCGUI .NGCGUI embedded into Axis diff --git a/docs/src/gui/panelui.adoc b/docs/src/gui/panelui.adoc index 5d9dabd78fa..cbf7113f837 100644 --- a/docs/src/gui/panelui.adoc +++ b/docs/src/gui/panelui.adoc @@ -1,11 +1,12 @@ -[[cha:Panelui]](((Panelui))) +:lang: en + +[[cha:Panelui]] += Panelui(((Panelui))) :ini: {basebackend@docbook:'':ini} :hal: {basebackend@docbook:'':hal} :ngc: {basebackend@docbook:'':ngc} -= Panelui - == Introduction Panelui is a userspace component to interface buttons to linuxcnc or HAL. + diff --git a/docs/src/gui/panelui_es.adoc b/docs/src/gui/panelui_es.adoc index c91c5cdac79..abc36f4cfa9 100644 --- a/docs/src/gui/panelui_es.adoc +++ b/docs/src/gui/panelui_es.adoc @@ -1,11 +1,12 @@ +:lang: en + [[cha:Panelui]](((Panelui))) += Panelui :ini: {basebackend@docbook:'':ini} :hal: {basebackend@docbook:'':hal} :ngc: {basebackend@docbook:'':ngc} -= Panelui - == Introduction Panelui is a userspace component to interface buttons to linuxcnc or HAL. + diff --git a/docs/src/gui/pyvcp-examples.adoc b/docs/src/gui/pyvcp-examples.adoc index 18651a7c5ff..b033793bec6 100644 --- a/docs/src/gui/pyvcp-examples.adoc +++ b/docs/src/gui/pyvcp-examples.adoc @@ -1,3 +1,5 @@ +:lang: en + = PyVCP Examples == AXIS @@ -7,13 +9,12 @@ attached to the right of AXIS you need to do the following basic things. * Create an .xml file that contains your panel description and put it in - your config directory. -* Add the PyVCP entry to the [DISPLAY] section of the ini file with your - .xml file name. + your config directory. +* Add the PyVCP entry to the [DISPLAY] section of the ini file with your .xml file name. * Add the POSTGUI_HALFILE entry to the [HAL] section of the ini file - with the name of your postgui HAL file name. + with the name of your postgui HAL file name. * Add the links to HAL pins for your panel in the postgui.hal file to - 'connect' your PyVCP panel to LinuxCNC. + 'connect' your PyVCP panel to LinuxCNC. == Floating Panels @@ -21,22 +22,23 @@ To create floating PyVCP panels that can be used with any interface you need to do the following basic things. * Create an .xml file that contains your panel description and put it in - your config directory. + your config directory. * Add a loadusr line to your .hal file to load each panel. * Add the links to HAL pins for your panel in the postgui.hal file to - 'connect' your PyVCP panel to LinuxCNC. + 'connect' your PyVCP panel to LinuxCNC. 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. [source,c] ---- -loadusr -Wn btnpanel pyvcp -c btnpanel panel1.xml +loadusr -Wn btnpanel pyvcp -c btnpanel panel1.xml loadusr -Wn sppanel pyvcp -c sppanel panel2.xml ---- -The -Wn makes HAL 'Wait for name' to be loaded before proceeding. The -pyvcp -c makes PyVCP name the panel. +The -Wn makes HAL 'Wait for name' to be loaded before proceeding. + +The pyvcp -c makes PyVCP name the panel. The HAL pins from panel1.xml will be named btnpanel. @@ -45,10 +47,10 @@ The HAL pins from panel2.xml will be named sppanel. Make sure the loadusr line is before any nets that make use of the PyVCP pins. -== Jog Buttons +== Jog Buttons Example -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 +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 @@ -56,9 +58,9 @@ following figure. For this example we named the configuration 'pyvcp_xyz' on the Basic Machine Information page of the Stepconf Wizard. -.XYZ Wizard Configuration[[cap:XYZ-Wizard-Configuration]] - -image::images/xyz_ACO.png[alt="XYZ Wizard Configuration"] +[[cap:XYZ-Wizard-Configuration]] +.XYZ Wizard Configuration +image::images/xyz_ACO.png["XYZ Wizard Configuration"] The Stepconf Wizard will create several files and place them in the linuxcnc/configs/pyvcp_xyz directory. If you left the create link checked @@ -71,87 +73,86 @@ Open up the custompanel.xml file by right clicking on it and selecting the widgets for our panel. Look in the PyVCP Widgets Reference section of the manual for more -detailed information on each widget. +detailed information on each widget <>. In your custompanel.xml file we will add the description of the widgets. -[source,xml] ---- - + ("Helvetica",16) - - - RAISED - 3 - - + + + RAISED + 3 + + - - - RAISED - 3 - - + + + RAISED + 3 + + - - - RAISED - 3 - - + + + RAISED + 3 + + - - - RAISED - 3 - - - ("Helvetica",14) - "jog-speed" - 1 - HORIZONTAL - 0 - 80 - + + + RAISED + 3 + + + ("Helvetica",14) + "jog-speed" + 1 + HORIZONTAL + 0 + 80 + @@ -164,9 +165,7 @@ 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. -.Jog Buttons[[cap:Jog-Buttons]] - -image::images/xyz_buttons.png[alt="Jog Buttons"] +image::images/xyz_buttons.png["Jog Buttons Image"] === Make Connections @@ -203,7 +202,6 @@ PyVCP and HAL. First create the ptest.xml file with the following code to create the panel description. -[source,xml] ---- @@ -269,14 +267,11 @@ panel description. This will create the following floating panel which contains a couple of in pins and a couple of out pins. -.Port Tester Panel[[cap:Port-Tester-Panel]] - -image::images/ptest.png[alt="Port Tester Panel"] +image::images/ptest.png["Port Tester Panel"] To run the HAL commands that we need to get everything up and running we put the following in our ptest.hal file. -[source,c] ---- loadrt hal_parport cfg="0x378 out" loadusr -Wn ptest pyvcp -c ptest ptest.xml @@ -298,12 +293,9 @@ To run the HAL file we use the following command from a terminal window. The following figure shows what a complete panel might look like. -.Port Tester Complete[[cap:Port-Tester-Complete]] - -image::images/ptest-final.png[alt="Port Tester Complete"] +image::images/ptest-final.png["Port Tester Complete Image"] -To add the rest of the parallel port pins just modify the .xml and -.hal files. +To add the rest of the parallel port pins just modify the .xml and .hal files. To show the pins after running the HAL script use the following command at the halcmd prompt: @@ -345,8 +337,8 @@ Owner Type Dir Value Name This will show you what pins are IN and what pins are OUT as well as any connections. - -== GS2 RPM Meter[[gs2-rpm-meter]] +[[gs2-rpm-meter]] +== GS2 RPM Meter 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 @@ -356,97 +348,94 @@ on the GS2 example in the Hardware Examples section this manual. To create the panel we add the following to the .xml file. -[source,xml] ---- - - - RAISED - 3 - - "spindle_rpm" - "Spindle" - "RPM" - 200 - 0 - 3000 - 500 - 100 - 0,10,"yellow" - + + + RAISED + 3 + + "spindle_rpm" + "Spindle" + "RPM" + 200 + 0 + 3000 + 500 + 100 + 0,10,"yellow" + - - - RAISED - 3 - - RAISED - 2 - - 5 - - + + + RAISED + 3 + + RAISED + 2 + + 5 + + - - - RAISED - 2 - - + + + RAISED + 2 + + + ---- The above gives us a PyVCP panel that looks like the following. -.GS2 Panel[[cap:GS2-Panel]] - -image::images/gs2_panel.png[alt="GS2 Panel"] +image::images/gs2_panel.png["GS2 Panel"] === The Connections @@ -454,20 +443,20 @@ To make it work we add the following code to the custom_postgui.hal file. ---- -# display the rpm based on freq * rpm per hz -loadrt mult2 -addf mult2.0 servo-thread -setp mult2.0.in1 28.75 -net cypher_speed mult2.0.in0 <= spindle-vfd.frequency-out -net speed_out pyvcp.spindle_rpm <= mult2.0.out - -# run led +# display the rpm based on freq * rpm per hz +loadrt mult2 +addf mult2.0 servo-thread +setp mult2.0.in1 28.75 +net cypher_speed mult2.0.in0 <= spindle-vfd.frequency-out +net speed_out pyvcp.spindle_rpm <= mult2.0.out + +# run led net gs2-run => pyvcp.on-led -# fwd led +# fwd led net gs2-fwd => pyvcp.fwd-led -# rev led +# rev led net running-rev spindle-vfd.spindle-rev => pyvcp.rev-led ---- @@ -476,7 +465,6 @@ 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. - == Rapid to Home Button This example creates a button on the PyVCP side panel when pressed will send diff --git a/docs/src/gui/pyvcp.adoc b/docs/src/gui/pyvcp.adoc index 447532ebe19..ef2e7a34493 100644 --- a/docs/src/gui/pyvcp.adoc +++ b/docs/src/gui/pyvcp.adoc @@ -1,5 +1,6 @@ -[[cha:pyvcp]] +:lang: en +[[cha:pyvcp]] = Python Virtual Control Panel == Introduction @@ -72,7 +73,6 @@ action available to Python programs. Only use PyVCP .xml files from a source that you trust. [[sec:pyvcp-with-axis]] - == AXIS Since AXIS uses the same GUI toolkit (Tkinter) as PyVCP, it is @@ -159,31 +159,31 @@ loadusr -Wn mypanel pyvcp -g WxH+X+Y -c mypanel panel_file.xml You would use this if you wanted a floating panel or a panel with a GUI other than AXIS. -* '-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. - -* '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. - -* '-g <+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. - -* '-c panelname' - - tells PyVCP what to call the component and also the title of the - window. The panelname can be any name without spaces. +* '-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. + +* '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. + +* '-g <+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. + +* '-c panelname' - + tells PyVCP what to call the component and also the title of the + window. The panelname can be any name without spaces. To load a 'stand alone' PyVCP panel without LinuxCNC use this command: @@ -224,6 +224,7 @@ 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. +[[sec:Documentation-des-widgets]] == Widgets HAL signals come in two variants, bits and numbers. Bits are off/on @@ -350,7 +351,7 @@ The label has an optional disable pin that is created when you add ------------------------------------------------- -The above code produced this example. +The above code produced this example. image::images/pyvcp_label.png[] @@ -458,8 +459,8 @@ This is a variant of the 'led' widget. ------------------------------------------------- -The above code produced this example. -Also showing a vertical box with relief. +The above code produced this example. +Also showing a vertical box with relief. image::images/pyvcp_rectled.png[] @@ -501,7 +502,7 @@ add True. --------------------------------------- -The above code produced this example. -The coolant checkbutton is checked. -Notice the extra spaces in the Chips text -to keep the checkbuttons aligned. +The above code produced this example. +The coolant checkbutton is checked. +Notice the extra spaces in the Chips text +to keep the checkbuttons aligned. image::images/pyvcp_checkbutton.png[] @@ -551,7 +552,7 @@ number pin set TRUE will have that value. ------------------------------------------------- -The above code produced this example. +The above code produced this example. image::images/pyvcp_radiobutton.png[] @@ -581,10 +582,10 @@ The number widget displays the value of a float signal. ("Helvetica",24) "+4.4f" ---------------------------------------- +--------------------------------------- The above code produced this example. - + image::images/pyvcp_number.png[] * '' - is a Tkinter font type and size specification. One font that @@ -615,7 +616,7 @@ width is wide enough to cover the largest number you expect to use. ------------------------------------------------- -The above code produced this example. +The above code produced this example. image::images/pyvcp_s32.png[] @@ -672,7 +673,7 @@ them to the same color). --------------------------------------- -The above code produced this example. +The above code produced this example. image::images/pyvcp_bar.png[] @@ -697,7 +698,7 @@ Meter displays the value of a FLOAT signal using a traditional dial indicator. ------------------------------------------------- -The above code produced this example. +The above code produced this example. image::images/pyvcp_meter.png[] @@ -725,7 +726,7 @@ value without HID input. --------------------------------------- -The above code produced this example. +The above code produced this example. image::images/pyvcp_spinbox.png[] @@ -806,11 +807,11 @@ image::images/pyvcp_dial.png[] 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. Optional tags +motion, or by rolling the mouse-wheel. Optional tags '"My Text"' displays text '"grey" "green"' background & active colors '1' creates scale text and a FLOAT.scale pin to display jog scale -'1' creates DRO and a BIT.reset pin to reset DRO. Needs scale_pin +'1' creates DRO and a BIT.reset pin to reset DRO. Needs scale_pin for scaled DRO. shift+click resets DRO also [source,xml] @@ -893,10 +894,10 @@ Container borders are specified with two tags used together. The width of the border. * 'type' - - Where 'type' is FLAT, SUNKEN, RAISED, GROOVE, or RIDGE + Where 'type' is FLAT, SUNKEN, RAISED, GROOVE, or RIDGE -* 'n' - - Where 'n' is the width of the border. +* 'n' - + Where 'n' is the width of the border. [source,xml] ---- @@ -937,11 +938,11 @@ image::images/pyvcp_borders.png[] .Fill Container fill are specified with the '' tag. Valid entries -are none, x, y and both. The x fill is a horizontal fill and the y fill is a +are none, x, y and both. The x fill is a horizontal fill and the y fill is a vertical fill -* '' - - Where 'style' is none, x, y, or both. Default is x for Vbox and y for Hbox. +* '' - + Where 'style' is none, x, y, or both. Default is x for Vbox and y for Hbox. .Anchor @@ -951,15 +952,14 @@ n, s, e, w, for center, north, south, east and west. Combinations like sw, se, nw and ne are also valid. * '' - - Where 'position' is center, n, s, e, w, ne, nw, se or sw. Default is center. + Where 'position' is center, n, s, e, w, ne, nw, se or sw. Default is center. .Expand Container expand is specified with the boolean tag. Valid entries are yes, no. -* '' - - Where 'boolean' is either yes or no. Default is yes. +* '' - Where 'boolean' is either yes or no. Default is yes. .Hbox @@ -1008,8 +1008,8 @@ The above code produced this example. image::images/pyvcp_vbox.png[] -Inside a Vbox, you can use the '', '' -, and '' tags to choose how items in the box behave +Inside a Vbox, you can use the '', '', +jnd '' 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. @@ -1117,4 +1117,3 @@ image::images/pyvcp_tabs2.png[] image::images/pyvcp_tabs3.png[] - diff --git a/docs/src/gui/pyvcp_fr.adoc b/docs/src/gui/pyvcp_fr.adoc index 935ab4daa1a..cdfe9ac2a38 100644 --- a/docs/src/gui/pyvcp_fr.adoc +++ b/docs/src/gui/pyvcp_fr.adoc @@ -1,16 +1,16 @@ :lang: fr :toc: -= PyVCP - [[cha:Panneau-Virtuel-Control]] += PyVCP + == Introduction Panneau virtuel de contrôle en python (**Py**thon **V**irtual **C**ontrol **P**anel) -Le panneau de contrôle virtuel pyVCP a été créé pour donner à +Le panneau de contrôle virtuel pyVCP a été créé pour donner à l'intégrateur la possibilité de personnaliser l'interface graphique d'AXIS avec des boutons et des indicateurs destinés aux tâches spéciales. @@ -162,7 +162,7 @@ loadusr -Wn monpanneau pyvcp -g WxH+X+Y -c monpanneau fichier_panneau.xml Vous l'utiliserez pour avoir un panneau flottant ou un panneau avec une interface graphique autre que Axis. -* '-Wn monpanneau' - +* '-Wn monpanneau' - Fait attendre à HAL que le composant _monpanneau_ soit chargé (devienne _ready_ en langage HAL), avant d'exécuter d'autres commandes HAL. C'est important parce-que les panneaux PyVCP exportent des pins de HAL @@ -171,14 +171,14 @@ une interface graphique autre que Axis. minuscule. Si vous utilisez l'option -Wn vous devez également utiliser l'option -c pour nommer le panneau. -* 'pyvcp < -g> < -c> panneau.xml' - +* 'pyvcp < -g> < -c> panneau.xml' - Construit le panneau avec la géométrie optionnelle et/ou le nom de panneau depuis le fichier panneau.xml. Le fichier panneau.xml peut avoir n'importe quel nom avec l'extension .xml. Le fichier .xml décrit comment construire le panneau. Il est nécessaire d'ajouter le nom du chemin si le panneau n'est pas dans le répertoire dans lequel se trouve le script HAL. -* '-g <+X+Y>' - +* '-g <+X+Y>' - Spécifie la géométrie à utiliser quand le panneau est construit. La syntaxe est _Largeur x Hauteur + Ancrage X + Ancrage Y_. La taille ou la position, ou les deux peuvent être fixés. Le point d'ancrage est le coin @@ -186,7 +186,7 @@ une interface graphique autre que Axis. panneau à 250 pixels de large, 500 pixels de haut avec le point d'ancrage placé en X800 Y0. -* '-c nompanneau' - +* '-c nompanneau' - Indique à PyVCP quel composant appeler et le titre de la fenêtre. Le nom du fichier _nompanneau_ peut être n'importe quel nom sans espace. @@ -233,9 +233,7 @@ fermé avant de continuer avec d'autres commandes. C'est généralement défini comme étant la dernière commande, de sorte que HAL s'arrêtera si le panneau est fermé. -[[sec:Documentation-des-widgets]] -== Documentation des widgets de pyVCP -(((Documentation des widgets))) +== Documentation des widgets de pyVCP[[sec:Documentation-des-widgets]](((Documentation des widgets))) Les signaux de HAL existent en deux variantes, BIT et FLOAT. pyVCP peut afficher la valeur d'un signal avec un widget indicateur, ou @@ -277,7 +275,7 @@ suivantes sont utilisées pour convertir les valeurs des attributs en valeurs Python: . Si le premier caractère de l'attribut est un des suivants: _{(["'_ , - il est évalué comme une expression Python. + il est évalué comme une expression Python. . Si la chaine est acceptée par int(), la valeur est traitée comme un entier. . Si la chaine est acceptée par float(), la valeur est traitée comme un @@ -300,7 +298,7 @@ Pour ajouter un commentaire utiliser la syntaxe de xml. === Editer un fichier XML Editer le fichier XML avec un éditeur de texte. La plupart du temps un -double click sur le nom de fichier permet de choisir +double click sur le nom de fichier permet de choisir _ouvrir avec l'editeur de texte_ ou similaire. === Couleurs @@ -355,7 +353,7 @@ Une led est utilisée pour indiquer l'état d'une pin de HAL de type bit. La couleur de la led sera on_color quand le signal est vrai et off_color autrement. * __ définit le nom de la pin, par défaut: _led.n_, où n est un entier. -* __ définit la taille de la led, par défaut: 20. +* __ définit la taille de la led, par défaut: 20. * __ définit la couleur de la led led quand la pin est vraie, par défaut: _green_ * __ définit la couleur de la led quand la pin est fausse, @@ -383,16 +381,16 @@ C'est une variante du widget _led_. [source,xml] ---- - - RIDGE - 6 - - "ma-led-rect" - "50" - "100" - "green" - "red" - + + RIDGE + 6 + + "ma-led-rect" + "50" + "100" + "green" + "red" + ---- @@ -499,10 +497,10 @@ L'affichage d'un nombre peux recevoir les options de formatage suivantes: Le widget _number_ affiche la valeur d'un signal de type flottant. ---- - - "number" - ("Helvetica",24) - "+4.4f" + + "number" + ("Helvetica",24) + "+4.4f" ---- @@ -545,11 +543,11 @@ prévoir une largeur suffisante pour afficher le nombre dans sa totalité. ---- - - "simple-number" - ("Helvetica",24) - "6d" - 6 + + "simple-number" + ("Helvetica",24) + "6d" + 6 ---- @@ -574,18 +572,18 @@ La bascule _image_bit_ bascule entre deux images selon la position vraie ou fausse de halpin. ---- - - - - - - + + + + + + ---- -En utilisant les deux images fwd.gif et rev.gif. -FWD est affiché quand _selectimage_ est fausse -et REV est affiché quand _selectimage_ est vraie. +En utilisant les deux images fwd.gif et rev.gif. +FWD est affiché quand _selectimage_ est fausse +et REV est affiché quand _selectimage_ est vraie. .selectimage fausse image::images/pyvcp_image01.png[] @@ -603,13 +601,13 @@ commençant à 0 pour la première image de la liste, à 1 pour la seconde image etc. ---- - - - - - - - + + + + + + + ---- @@ -787,7 +785,7 @@ image::images/pyvcp_jogwheel.png[] Les containers sont des widgets qui contiennent d'autres widgets. -=== Bordures +=== Bordures Le container bordure est spécifié avec deux balises utilisées ensembles. La balise spécifie le type de bordure et la balise spécifie la @@ -800,36 +798,36 @@ largeur de la bordure. La valeur de *n* fixe la largeur de la bordure. ---- - - - - - - + ---- @@ -854,7 +852,7 @@ horizontalement, les uns à côtés des autres. image::images/pyvcp_hbox.png[] -Á l'intérieur d'une Hbox, il est possible d'utiliser les balises +Á l'intérieur d'une Hbox, il est possible d'utiliser les balises __, __ et __ pour choisir le comportement des éléments contenus dans la boîte, lors d'un redimensionnement de la fenêtre. Pour des détails sur le @@ -882,7 +880,7 @@ verticalement, les uns au dessus des autres. image::images/pyvcp_vbox.png[] -Á l'intérieur d'une Vbox, vous pouvez utiliser les balises +Á l'intérieur d'une Vbox, vous pouvez utiliser les balises __, __ et __ pour choisir le comportement des éléments contenus dans la boîte, lors d'un redimensionnement de la fenêtre. Pour des détails sur le @@ -963,27 +961,27 @@ determine la largeur des onglets. [source,xml] ---- - - ["Spindle", "Green Eggs", "Ham"] - - - - "spindle-speed" - 5000 - - - - - - - - + + ["Spindle", "Green Eggs", "Ham"] + + + + "spindle-speed" + 5000 + + + + + + + + ---- diff --git a/docs/src/gui/qtdragon.adoc b/docs/src/gui/qtdragon.adoc index 34361495266..e01c6f652ad 100644 --- a/docs/src/gui/qtdragon.adoc +++ b/docs/src/gui/qtdragon.adoc @@ -1,11 +1,11 @@ -[[cha:qtdragon-gui]](((QtDragon))) +:lang: en +[[cha:qtdragon-gui]] += QtDragon GUI(((QtDragon))) :ini: {basebackend@docbook:'':ini} :hal: {basebackend@docbook:'':hal} -= QtDragon GUI - == Introduction QtDragon and QtDragon_hd are built with the QTVCP framework. + It is the creative vision of forum personality Persei8. + diff --git a/docs/src/gui/qtdragon_es.adoc b/docs/src/gui/qtdragon_es.adoc index 84bded316b9..a96a171fd2a 100644 --- a/docs/src/gui/qtdragon_es.adoc +++ b/docs/src/gui/qtdragon_es.adoc @@ -1,15 +1,15 @@ :lang: es -[[cha:qtdragon-gui]](((SilverDragon))) +[[cha:qtdragon-gui]](((SilverDragon))) += GUI SilverDragon :ini: {basebackend@docbook:'':ini} :hal: {basebackend@docbook:'':hal} -= GUI SilverDragon - == Introducción SilverDragon está construido con el marco QTVCP. Gran parte se basa en el excelente trabajo de otros en la comunidad LinuxCNC. + [NOTE] SilverDragon y QtVcp son nuevos programas agregados a linuxcnc. Errores y rarezas son posibles. Por favor pruebe cuidadosamente cuando use un @@ -21,16 +21,17 @@ image::images/silverdragon.png["QTDragon Router",scale="25%"] == Comenzando Si su configuración no está configurada actualmente para usar SilverDragon, -puede cambiarlo editando el archivo INI. + -En la sección '[DISPLAY]' cambie la línea 'DISPLAY' para que lea: + -<> +puede cambiarlo editando el archivo INI. +En la sección '[DISPLAY]' cambie la línea 'DISPLAY' para que lea: +<> + [source,{ini}] ---- [DISPLAY] DISPLAY = qtvcp qtdragon ---- -Para realizar un seguimiento de las preferencias, qtdragon busca un archivo de texto de preferencias. + +Para realizar un seguimiento de las preferencias, qtdragon busca un archivo de texto de preferencias. agregue la siguiente entrada bajo el encabezado '[DISPLAY]'. (son posibles otras opciones, consulte los documentos del widget screenoption del qtvcp). @@ -39,8 +40,8 @@ agregue la siguiente entrada bajo el encabezado '[DISPLAY]'. PREFERENCE_FILE_PATH = WORKINGFOLDER / qtdragon.pref ---- -Puede especificar dónde guardar el historial / registros. + -En la sección '[DISPLAY]' agregue: + +Puede especificar dónde guardar el historial / registros. +En la sección '[DISPLAY]' agregue: [source,{ini}] ---- @@ -49,24 +50,26 @@ MACHINE_LOG_PATH = machine_log.dat LOG_FILE = qtdragon.log ---- -Para que las rutinas básicas de la sonda funcionen, SUBROUTINE_PATH debe establecerse correctamente. + -(Su ruta puede ser diferente a esta muestra) + -<> +Para que las rutinas básicas de la sonda funcionen, SUBROUTINE_PATH debe establecerse correctamente. +(Su ruta puede ser diferente a esta muestra) + [source,{ini}] ---- [RS274NGC] SUBROUTINE_PATH = ../../../../nc_files/probe/basic_probe/macros ---- -También requiere pines de E / S analógicas adicionales para el sondeo. + -Asegúrese de que esta línea en el archivo HAL tenga la entrada 'num_aio = 13': + -El resto de la línea depende de su configuración y puede ser diferente y no debe cambiarse. + +También requiere pines de E / S analógicas adicionales para el sondeo. +Asegúrese de que esta línea en el archivo HAL tenga la entrada 'num_aio = 13': +El resto de la línea depende de su configuración y puede ser diferente y no debe cambiarse. + [source,{hal}] ---- loadrt motmod servo_period_nsec = [EMCMOT] SERVO_PERIOD num_joints = 4 num_aio = 13 ---- -SilverDragon tiene entradas INI personalizadas: + +SilverDragon tiene entradas INI personalizadas: + [source,{ini}] ---- [TOOLSENSOR] @@ -81,12 +84,14 @@ Y = -16.85 ---- La configuración de muestra -'sim / qtvcp_screens / qtdragon / qtdragon_xyza.ini' ya está configurado para usar SilverDragon como su front-end. + +'sim / qtvcp_screens / qtdragon / qtdragon_xyza.ini' ya está configurado para usar SilverDragon como su front-end. Hay varios otros, para demostrar diferentes configuraciones de máquina. == Vinculaciones de teclas -SilverDragon no está destinado a utilizar principalmente un teclado para el control de la máquina. + -Hay varias pulsaciones de teclas que controlarán la máquina para mayor comodidad. + + +SilverDragon no está destinado a utilizar principalmente un teclado para el control de la máquina. +Hay varias pulsaciones de teclas que controlarán la máquina para mayor comodidad. + ---- F1 - Estop encendido / apagado F2 - Encendido / apagado de la máquina @@ -101,22 +106,24 @@ Pausa-Pausa Movimiento de la máquina Los botones que son marcables cambiarán su color de texto cuando estén marcados. == Teclado virtual -QtDragon incluye un teclado virtual para usar con pantallas táctiles. + -Para habilitar el teclado, marque la casilla de verificación Usar teclado virtual en la página Configuración. + -Al hacer clic en cualquier campo de entrada, como parámetros de sonda o entradas de la tabla de herramientas, se mostrará el teclado. + -También se puede mostrar haciendo clic en el botón KEYBD en la parte superior de la pantalla, + -a menos que la máquina esté en modo AUTO. Para ocultar el teclado, realice una de las siguientes acciones: + - - haga clic en el botón de página PRINCIPAL + - - haga clic en el botón KEYBD - - ir al modo AUTO + +QtDragon incluye un teclado virtual para usar con pantallas táctiles. +Para habilitar el teclado, marque la casilla de verificación Usar teclado virtual en la página Configuración. +Al hacer clic en cualquier campo de entrada, como parámetros de sonda o entradas de la tabla de herramientas, se mostrará el teclado. +También se puede mostrar haciendo clic en el botón KEYBD en la parte superior de la pantalla, +a menos que la máquina esté en modo AUTO. Para ocultar el teclado, realice una de las siguientes acciones: + - haga clic en el botón de página PRINCIPAL + - haga clic en el botón KEYBD + - ir al modo AUTO -Cabe señalar que el desplazamiento del teclado está desactivado cuando se utiliza el teclado virtual. + +Cabe señalar que el desplazamiento del teclado está desactivado cuando se utiliza el teclado virtual. == Pines HAL -Estos pines son específicos de la pantalla qtDragon. Por supuesto, hay muchos más pines HAL + -que debe estar conectado para que linuxcnc funcione. + + +Estos pines son específicos de la pantalla qtDragon. Por supuesto, hay muchos más pines HAL +que debe estar conectado para que linuxcnc funcione. Si necesita un aviso de cambio de herramienta manual, agregue estas líneas en su archivo postgui. + [source,{hal}] ---- net tool-change hal_manualtoolchange.change <= iocontrol.0.tool-change @@ -125,6 +132,7 @@ net tool-prep-number hal_manualtoolchange.number <= iocontrol.0.tool-prep-number ---- Estos pines deben estar conectados en el archivo postgui para que el sondeo funcione: + [source,{hal}] ---- net xwidth motion.analog-out-00 => qtdragon.x_width @@ -143,6 +151,7 @@ net cal_offset motion.analog-out-12 => qtdragon.cal_offset ---- Este pin de entrada debe estar conectado para indicar el estado de la sonda: + [source,{hal}] ---- qtdragon.hal_led_probe @@ -172,6 +181,7 @@ qtdragon.spindle_pause ---- Estos pines de salida se pueden conectar para encender un láser: + [source,{hal}] ---- qtdragon.btn_laser_on @@ -179,6 +189,7 @@ qtdragon.btn_laser_on Estos pines de salida indican botones que fueron presionados, son probablemente de uso limitado: + [source,{hal}] ---- qtdragon.btn_dimensions @@ -197,6 +208,7 @@ qtdragon.btn_tool_delete ---- Estos pines están relacionados con compensaciones externas si se usan: + [source,{hal}] ---- qtdragon.eoffset_clear @@ -212,9 +224,11 @@ Los archivos HAL suministrados son solo para simulación. Una máquina real nece funciona con 3 o 4 ejes con una junta por eje o 3 o 4 ejes en una configuración de pórtico. (2 articulaciones en 1 eje) == Cambios manuales de herramientas -Si su máquina requiere cambios manuales de herramientas, SilverDragon puede abrir un cuadro de mensaje para dirigirlo. + + +Si su máquina requiere cambios manuales de herramientas, SilverDragon puede abrir un cuadro de mensaje para dirigirlo. Debe conectar el pin HAL adecuado en el archivo post_gui. Por ejemplo: + [source,{hal}] ---- net tool-change hal_manualtoolchange.change <= iocontrol.0.tool-change @@ -243,10 +257,10 @@ image::images/silverdragon_probe.png["QTDragon Probe",scale="25%"] == Ejecutar desde línea -Se puede iniciar un programa gcode en cualquier línea haciendo clic en la línea deseada en la pantalla de gcode mientras está en modo AUTO. + -Es responsabilidad del operador asegurarse de que la máquina esté en el modo operativo deseado. + -Se mostrará un cuadro de diálogo que permite preestablecer la dirección y la velocidad del husillo. + -La línea de inicio se indica en el cuadro LÍNEA, junto al botón INICIO DE CICLO. + +Se puede iniciar un programa gcode en cualquier línea haciendo clic en la línea deseada en la pantalla de gcode mientras está en modo AUTO. +Es responsabilidad del operador asegurarse de que la máquina esté en el modo operativo deseado. +Se mostrará un cuadro de diálogo que permite preestablecer la dirección y la velocidad del husillo. +La línea de inicio se indica en el cuadro LÍNEA, junto al botón INICIO DE CICLO. La función Ejecutar desde línea se puede deshabilitar en la página de configuración. [NOTE] @@ -260,7 +274,8 @@ Cuando la cruz se coloca sobre un punto de referencia deseado en la pieza de tra los desplazamientos X e Y a los valores indicados por los campos DESPLAZAMIENTO LÁSER en la página Configuración y el archivo INI. == Pestaña de configuración -Es posible cargar el archivo Html (finalización .html) con notas de configuración. Se mostrarán en la pestaña de configuración. + + +Es posible cargar el archivo Html (finalización .html) con notas de configuración. Se mostrarán en la pestaña de configuración. Algunos programas, como Fusion y Aspire, crearán estos archivos por usted. .qtdragon - Ejemplo de pestaña de configuración @@ -290,4 +305,3 @@ El sitio web LinuxCNC tiene una extensa documentación sobre la instalación y e .qtdragon - Silverdragon personalizado image::images/silverdragon_custom.png["QTDragon customized",scale=25] - diff --git a/docs/src/gui/qtvcp.adoc b/docs/src/gui/qtvcp.adoc index 80457f4a079..99b939c1e25 100644 --- a/docs/src/gui/qtvcp.adoc +++ b/docs/src/gui/qtvcp.adoc @@ -1,5 +1,6 @@ -[[cha:qtvcp]] +:lang: en +[[cha:qtvcp]] = Qtvcp Qtvcp is an infrastructure to display a custom CNC screen or control panel in LinuxCNC. + @@ -23,9 +24,8 @@ image::images/qtvcp-cam-align.png["QTscreen x1mill",align="left"] .test panel - Test Panel VCP image::images/test_panel.png["Test Panel",align="left"] -[[sec:qtvcp-overview]](((QtVcp Overview))) - -== Overview +[[sec:qtvcp-overview]] +== Overview(((QtVcp Overview))) There are two files that can be used, individually or in combination to add + customization. + @@ -737,7 +737,6 @@ them to widgets using signals. + In the handler file you would create the slot's functions defined in Designer. + [[cha:designer-slots]] - === Using Designer to add slots When you have loaded your screen into designer add a plain PushButton to the screen. + You could change the name of the button to something interesting like 'test_button' + diff --git a/docs/src/gui/qtvcp_code_snippets.adoc b/docs/src/gui/qtvcp_code_snippets.adoc index 2a2cb7cefb8..0c0b5d04096 100644 --- a/docs/src/gui/qtvcp_code_snippets.adoc +++ b/docs/src/gui/qtvcp_code_snippets.adoc @@ -1,5 +1,6 @@ -[[cha:qtvcp-code]] +:lang: en +[[cha:qtvcp-code]] = QTvcp Handler file code snippets Here are bits of ideas to put in the handler file. + diff --git a/docs/src/gui/qtvcp_custom_widgets.adoc b/docs/src/gui/qtvcp_custom_widgets.adoc index bda37115e1d..47b4fed1175 100644 --- a/docs/src/gui/qtvcp_custom_widgets.adoc +++ b/docs/src/gui/qtvcp_custom_widgets.adoc @@ -1,5 +1,6 @@ -[[cha:qtvcp-custom-widgets]] +:lang: en +[[cha:qtvcp-custom-widgets]] = QTvcp Building Custom Widgets == Overview diff --git a/docs/src/gui/qtvcp_development.adoc b/docs/src/gui/qtvcp_development.adoc index 07e73153cbf..a45f457b838 100644 --- a/docs/src/gui/qtvcp_development.adoc +++ b/docs/src/gui/qtvcp_development.adoc @@ -1,5 +1,6 @@ -[[cha:qtvcp-development]] +:lang: en +[[cha:qtvcp-development]] = QTvcp Development The intention of QtVCP is to supply an infrastructure to support + diff --git a/docs/src/gui/qtvcp_libraries.adoc b/docs/src/gui/qtvcp_libraries.adoc index a6ce9c545cc..261c5c56ab7 100644 --- a/docs/src/gui/qtvcp_libraries.adoc +++ b/docs/src/gui/qtvcp_libraries.adoc @@ -1,5 +1,6 @@ -[[cha:qtvcp-libraries]] +:lang: en +[[cha:qtvcp-libraries]] = QTvcp Libraries modules libraries are prebuilt python modules that give added features to QTvcp. + diff --git a/docs/src/gui/qtvcp_widgets.adoc b/docs/src/gui/qtvcp_widgets.adoc index ea5ae703472..b5055ba2c29 100644 --- a/docs/src/gui/qtvcp_widgets.adoc +++ b/docs/src/gui/qtvcp_widgets.adoc @@ -1,5 +1,6 @@ -[[cha:qtvcp-widgets]] +:lang: en +[[cha:qtvcp-widgets]] = QTvcp Widgets Qtscreen uses QTvcp widgets for linuxcnc integration. + diff --git a/docs/src/gui/tklinuxcnc.adoc b/docs/src/gui/tklinuxcnc.adoc index 28352e31f1f..11752c85ecf 100644 --- a/docs/src/gui/tklinuxcnc.adoc +++ b/docs/src/gui/tklinuxcnc.adoc @@ -1,7 +1,9 @@ -[[cha:tklinuxcnc-gui]] +:lang: en +[[cha:tklinuxcnc-gui]] = TkLinuxCNC GUI +[[sec:tklinuxcnc-introduction]] == Introduction TkLinuxCNC is one of the first graphical front-ends @@ -12,7 +14,7 @@ shown. .TkLinuxCNC Window -image::images/tkemc.png[align="center", alt="TkLinuxCNC Window"] +image::images/tkemc.png["TkLinuxCNC Window",align="center"] == Getting Started @@ -26,21 +28,22 @@ DISPLAY = tklinuxcnc 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. +From French: Quand LinuxCNC est lancé avec TkLinuxCNC, une fenêtre +<>. + === A typical session with TkLinuxCNC . Start LinuxCNC and select a configuration file. -. Clear the 'E-STOP' condition and turn the machine on (by - pressing F1 then F2). +. Clear the 'E-STOP' condition and turn the machine on (by pressing F1 then F2). . 'Home' each axis. . Load the file to be milled. . Put the stock to be milled on the table. . 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.] + 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.] . Run the program. . 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. + file, return to step 4. When you're done, exit LinuxCNC. == Elements of the TkLinuxCNC window @@ -51,9 +54,7 @@ The TkLinuxCNC window contains the following elements: start/stop spindle and other relevant I/O * Status bar for various offset related displays * Coordinate display area -* A set of sliders which control 'Jogging speed', 'Feed Override' - , and 'Spindle speed Override' which allow you to increase or - decrease those settings +* A set of sliders which control 'Jogging speed', 'Feed Override' , and 'Spindle speed Override' which allow you to increase or decrease those settings * Manual data input text box 'MDI' * Status bar display with active G-codes, M-codes, F- and S-words * Interpreter related buttons @@ -63,11 +64,10 @@ The TkLinuxCNC window contains the following elements: From left to right, the buttons are: -* Machine enable: 'ESTOP' > 'ESTOP RESET' > 'ON' +* Machine enable: 'ESTOP' > 'ESTOP RESET' > 'ON' * Toggle mist coolant * Decrease spindle speed -* Set spindle direction 'SPINDLE OFF' > 'SPINDLE FORWARD' . - 'SPINDLE REVERSE' +* Set spindle direction 'SPINDLE OFF' > 'SPINDLE FORWARD' . 'SPINDLE REVERSE' * Increase spindle speed * Abort @@ -105,10 +105,14 @@ 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). -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 +* MATCH ME +* MATCH ME +* MATCH ME +* MATCH ME +* MATCH ME + +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). .Backplot @@ -116,21 +120,23 @@ in the Integrator Manual). When the machine moves, it leaves a trail called the backplot. You can start the backplot window by selecting View→Backplot. +[[cap:TkLinuxCNC-Interpreteur]] === Automatic control -.Buttons for control +image::images/tkemc-interp.png["TkLinuxCNC Interpreter / program control",align="center"] + +.Control Buttons The buttons in the lower part of TkLinuxCNC are used to control the execution of a -program: 'Open' to load a program, 'Verify' to -check it for errors, 'Run' to start the actual cutting, -'Pause' to stop it while running, 'Resume' to -resume an already paused program, 'Step' to advance one line -in the program and 'Optional Stop' to toggle the -optional stop switch (if the button is green the program execution will -be stopped on any M1 encountered). +program: -.TkLinuxCNC Interpreter / program control -image::images/tkemc-interp.png[align="center", alt="TkLinuxCNC Interpreter / program control"] +* 'Open' to load a program, +* 'Verify' to check it for errors, +* 'Run' to start the actual cutting, +* 'Pause' to stop it while running, +* 'Resume' to resume an already paused program, +* 'Step' to advance one line in the program and +* 'Optional Stop' to toggle the optional stop switch (if the button is green the program execution will be stopped on any M1 encountered). .Text Program Display Area @@ -145,14 +151,17 @@ show the current line. 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). +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). 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: -'1.0000, 0.1000, 0.0100, 0.0010, 0.0001' + +---- +1.0000, 0.1000, 0.0100, 0.0010, 0.0001 +---- 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 @@ -165,11 +174,10 @@ 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). -.TkLinuxCNC Override Limits & Jogging increments example - -image::images/tkemc-override-limits.png[align="center", alt="TkLinuxCNC Override Limits and Jogging increments example"] +.TkLinuxCNC Override Limits & Jogging increments example[[cap:Override-Limits]] +image::images/tkemc-override-limits.png["TkLinuxCNC Override Limits and Jogging increments example",align="center"] -.The Spindle group +.The Spindle group(((spindle))) The button on the first row selects the direction for the spindle to rotate: Counterclockwise, Stopped, Clockwise. The buttons next to it @@ -178,7 +186,7 @@ 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. -.The Coolant group +.The Coolant group(((Coolant))) 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 @@ -190,11 +198,7 @@ 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. -.The Code Entry tab - -image::images/tkemc-mdi.png[align="center", alt="The Code Entry tab"] - -.MDI: +image::images/tkemc-mdi.png["The Code Entry tab",align="center"] This allows you to enter a G-code command to be executed. Execute the command by pressing Enter. @@ -205,7 +209,7 @@ 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. -=== Jog Speed +=== Jog Speed 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 @@ -216,8 +220,8 @@ number to be entered. 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 +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. === Spindle speed Override @@ -239,24 +243,24 @@ Many of the shortcuts are unavailable when in MDI mode. The most frequently used keyboard shortcuts are shown in the following table. +[[cap:Raccourcis-clavier-frequents]] .Most Common Keyboard Shortcuts - [width="75%", options="header", cols="1^,3<"] |======================================== -|Keystroke | Action Taken -|F1 | Toggle Emergency Stop -|F2 | Turn machine on/off +|Keystroke | Action Taken +|F1 | Toggle Emergency Stop +|F2 | Turn machine on/off |`, 1 .. 9, 0 | Set feed override from 0% to 100% -|X, ` | Activate first axis -|Y, 1 | Activate second axis -|Z, 2 | Activate third axis -|A, 3 | Activate fourth axis -|Home | Send active axis Home -|Left, Right | Jog first axis -|Up, Down | Jog second axis +|X, ` | Activate first axis +|Y, 1 | Activate second axis +|Z, 2 | Activate third axis +|A, 3 | Activate fourth axis +|Home | Send active axis Home +|Left, Right | Jog first axis +|Up, Down | Jog second axis |Pg Up, Pg Dn | Jog third axis -|[, ] | Jog fourth axis -|ESC | Stop execution +|[, ] | Jog fourth axis +|ESC | Stop execution |======================================== diff --git a/docs/src/gui/tklinuxcnc_fr.adoc b/docs/src/gui/tklinuxcnc_fr.adoc index 1d5b0e5b8c8..2009823ad35 100644 --- a/docs/src/gui/tklinuxcnc_fr.adoc +++ b/docs/src/gui/tklinuxcnc_fr.adoc @@ -13,10 +13,10 @@ populaire après Axis, c'est l'interface traditionnelle de LinuxCNC. Elle est l'affichage. Le fait d'être écrite en TCL la rend vraiment très portable (elle fonctionne sur une multitude de plateformes). -[[cap:affichage-TkLinuxCNC]] +[[sec:affichage-TkLinuxCNC]] .L'affichage de TkLinuxCNC -image::images/tklinuxcnc_fr.png[alt="L'affichage de TkLinuxCNC"] +image::images/tklinuxcnc_fr.png["L'affichage de TkLinuxCNC"] == Utiliser TkLinuxCNC @@ -32,7 +32,7 @@ trouve dans _sim/tklinuxcnc/tklinuxcnc.ini_ est déjà configurée pour utiliser comme interface utilisateur. Quand LinuxCNC est lancé avec TkLinuxCNC, une fenêtre -<>. +<>. === Une session typique avec TkLinuxCNC diff --git a/docs/src/gui/tooledit.adoc b/docs/src/gui/tooledit.adoc index 456b426a67c..6ac73655e2b 100644 --- a/docs/src/gui/tooledit.adoc +++ b/docs/src/gui/tooledit.adoc @@ -1,10 +1,17 @@ -[[cha:tooledit-gui]] +:lang: en +:toc: +[[cha:tooledit-gui]] = Tool Edit GUI == Overview -image::images/tooledit.png[align="center", width="640", alt="Tool Edit GUI - Overview"] +[NOTE] +Les éléments de tooledit modifiables décrits ici sont disponibles +dans les versions 2.5.1 et suivantes. Dans la version 2.5.0, l'interface +graphique ne permet pas ces ajustements. + +image::images/tooledit.png["Tool Edit GUI - Overview",align="center",width="640"] The 'tooledit' program can update the tool table file with edited changes by using the SaveFile button. The SaveFile button @@ -21,35 +28,49 @@ 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. -image::images/tooledit-sort.png[align="center", alt="Tool Edit GUI - Column Sorting"] +image::images/tooledit-sort.png["Tool Edit GUI - Column Sorting",align="center"] + +From French: In Ubuntu Lucid 10.04 tcl/tk8.4 it is installed by défault. +The installation is performed as follows: + +---- +sudo apt-get install tcl8.5 tk8.5 +---- Depending upon other applications installed on the system, it may be necessary to enable tcl/tk8.5 with the commands: + ---- sudo update-alternatives --config tclsh ;# select the option for tclsh8.5 sudo update-alternatives --config wish ;# select the option for wish8.5 ---- == Column Selection + 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: -image::images/tooledit-columns.png[align="center", alt="Tool Edit GUI - Column Selection"] +image::images/tooledit-columns.png["Tool Edit GUI - Column Selection",align="center"] + +.Syntax of .INI file -.INI File Syntax ---- [DISPLAY] TOOL_EDITOR = tooledit column_name column_name ... ---- .Example for Z and DIAM columns + ---- [DISPLAY] TOOL_EDITOR = tooledit Z DIAM ---- +.Résultat obtenu +image::images/tooledit-columns_fr.png["Éditeur graphique de table d’outils - Choix des colonnes",align="left"] + == Stand Alone Use The 'tooledit' program can also be invoked as a standalone program. For example, if the program is in the user PATH, typing @@ -59,8 +80,10 @@ program. For example, if the program is in the user PATH, typing ---- tooledit Usage: -tooledit filename -tooledit [column_1 ... column_n] filename + tooledit filename + tooledit [column_1 ... column_n] filename + +Valid column names are: x y z a b c u v w diam front back orien ---- To synchronize a standalone 'tooledit' with a running LinuxCNC @@ -72,14 +95,18 @@ gcode 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: - Warning: File changed by another process +---- +Warning: File changed by another process +---- The 'tooledit' tool table display can be updated to read the modified file with the ReRead button. -he tool table is specified in the ini file with an entry: +The tool table is specified in the ini file with an entry: - [EMCIO]TOOL_TABLE = tool_table_filename +---- +[EMCIO]TOOL_TABLE = tool_table_filename +---- The tool table file can be edited with any simple text editor (not a word processor). @@ -87,7 +114,9 @@ a word processor). The axis GUI can optionally use an ini file setting to specify the tool editor program: - [DISPLAY]TOOL_EDITOR = path_to_editor_program +---- +DISPLAY]TOOL_EDITOR = path_to_editor_program +---- By default, the program named 'tooledit' is used. This editor supports all tool table parameters, allows addition and deletion diff --git a/docs/src/gui/touchy.adoc b/docs/src/gui/touchy.adoc index 53a07a59ccb..309367a3c20 100644 --- a/docs/src/gui/touchy.adoc +++ b/docs/src/gui/touchy.adoc @@ -1,6 +1,11 @@ +:lang: en + [[cha:touchy-gui]] += The Touchy Graphical User Interface(((touchygui))) -= Touchy GUI +:ini: {basebackend@docbook:'':ini} +:hal: {basebackend@docbook:'':hal} +:ngc: {basebackend@docbook:'':ngc} Touchy is a user interface for LinuxCNC meant for use on machine control panels, and therefore does not require keyboard or mouse. @@ -13,24 +18,22 @@ The 'Handwheel' tab has radio buttons to select between 'Feed Override', input. Radio buttons for axis selection and increment for jogging are also provided. -.Touchy - -image::images/touchy.png[align="center", alt="Touchy GUI"] +image::images/touchy.png["Touchy GUI",align="center"] == Panel Configuration === HAL connections -Touchy looks in the INI file, under the heading '[HAL]' for entries of 'POSTGUI_HALFILE=' + -Typically '' 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=' in the INI. + -Each will be run one after the other in the order they appear in the INI file. + +Touchy looks in the INI file, under the heading '[HAL]' for entries of 'POSTGUI_HALFILE='. +Typically '' 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=' in the INI. +Each will be run one after the other in the order they appear in the INI file. [NOTE] 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 +configuration directory (the directory your INI file is in). For legacy reasons this will continue to work, but INI based postgui files are preferred. For more information on HAL files and the net command see the @@ -39,18 +42,16 @@ For more information on HAL files and the net command see the Touchy has several output pins that are meant to be connected to the motion controller to control wheel jogging: - - 'touchy.jog.wheel.increment', - which is to be connected to the 'axis.N.jog-scale' pin of each axis N. + - 'touchy.jog.wheel.increment', which is to be connected to the 'axis.N.jog-scale' pin of each axis N. - - 'touchy.jog.wheel.N', which is to be connected to 'axis.N.jog-enable' - for each axis N. + - 'touchy.jog.wheel.N', which is to be connected to 'axis.N.jog-enable' for each axis N. [NOTE]'N' represents the axis number 0-8. - - 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'. + - 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'. .Required controls @@ -61,17 +62,17 @@ motion controller to control wheel jogging: .Optional controls - - For continuous jog, one center-off bidirectional momentary toggle + - 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. - - If a quill up button is wanted (to jog Z to the top of travel at top + - 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'. .Optional panel lamps - 'touchy.jog.active' shows when the panel jogging controls are live - 'touchy.status-indicator' is on when the machine is executing G-code, - and flashes when the machine is executing but is in pause/feedhold. + and flashes when the machine is executing but is in pause/feedhold. === Recommended for any setup @@ -90,7 +91,7 @@ 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. -The Status Window is a fixed height, set by the size of a fixed font. +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. @@ -103,7 +104,9 @@ 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 format -'MACRO=increment xinc yinc' +---- +MACRO=increment xinc yinc +---- In this example, increment is the name of the macro, and it accepts two parameters, named xinc and yinc. diff --git a/docs/src/gui/vismach.adoc b/docs/src/gui/vismach.adoc index 0d8afd6fba2..f8237d411d8 100644 --- a/docs/src/gui/vismach.adoc +++ b/docs/src/gui/vismach.adoc @@ -1,5 +1,6 @@ -[[cha:vismach]] +:lang: en +[[cha:vismach]] = Vismach Vismach is a set of Python functions that can be used to create and animate diff --git a/docs/src/hal/basic-hal.adoc b/docs/src/hal/basic-hal.adoc index 9eeb6e100b6..f347c608360 100644 --- a/docs/src/hal/basic-hal.adoc +++ b/docs/src/hal/basic-hal.adoc @@ -1,5 +1,6 @@ -[[cha:basic-hal-reference]] +:lang: en +[[cha:basic-hal-reference]] = HAL Basics :toc: :toclevels: 3 @@ -7,7 +8,7 @@ This document provides a reference to the basics of HAL. [[sec:hal-commands]] -== HAL Commands +== HAL Commands More detailed information can be found in the man page for halcmd: run 'man halcmd' in a terminal window. @@ -17,9 +18,7 @@ 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. -.HAL Configuration Window - -image::images/HAL_Configuration.png[align="center", alt="HAL Configuration Window"] +image::images/HAL_Configuration.png["HAL Configuration Window",align="center"] === loadrt @@ -94,6 +93,7 @@ addf mux4.0 servo-thread If the component requires a floating point thread that is usually the slower servo-thread. +[[sec:loadusr]] === loadusr The command 'loadusr' loads a user space HAL component. User space @@ -128,9 +128,8 @@ loadusr -Wn spindle gs2_vfd -n spindle In English it means 'loadusr wait for name spindle component gs2_vfd name spindle'. -[[sub:net]] (((net))) - -=== net +[[sub:net]] +=== net(((net))) 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. @@ -147,7 +146,7 @@ net home-x joint.0.home-sw-in <= parport.0.pin-11-in ---- 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 +'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. @@ -295,7 +294,6 @@ More information can be found in the HAL manual or the man pages for halrun. [[sec:hal-data]] - == HAL Data === Bit (((Bit))) @@ -334,12 +332,12 @@ A 'u32' number is a whole number that is positive only. If you used the Stepper Config Wizard to generate your config you will have up to three HAL files in your config directory. - - my-mill.hal (if your config is named 'my-mill') This file is loaded + - '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. - - custom.hal This file is loaded next and before the GUI loads. This is + - '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. - - custom_postgui.hal This file is loaded after the GUI loads. This is + GUI is loaded. + - '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. @@ -475,7 +473,7 @@ xor2[count=n] | [names=name1[,name2...]] Functions -+xor2.n+ ++xor2.n+ Pins @@ -487,10 +485,10 @@ Truth Table [width="90%", options="header"] |======================================== -|in0 | in1 | out -|True | False | True -|True | True | False -|False | True | True +|in0 | in1 | out +|True | False | True +|True | True | False +|False | True | True |False | False | False |======================================== diff --git a/docs/src/hal/basic-hal_es.adoc b/docs/src/hal/basic-hal_es.adoc index 7c37ac1fae7..c445ddcce3e 100644 --- a/docs/src/hal/basic-hal_es.adoc +++ b/docs/src/hal/basic-hal_es.adoc @@ -23,7 +23,7 @@ image::images/HAL_Configuration.png[align="center", alt="HAL Configuration Windo === loadrt -El comando 'loadrt' carga componentes HAL en tiempo real. +El comando 'loadrt' carga componentes HAL en tiempo real. Las funciones de los componentes de tiempo real deben agregarse a un hilo para ejecutarse a la velocidad de ese hilo. No puede cargar un componente de espacio de usuario en el espacio de tiempo real. @@ -52,7 +52,7 @@ en ese punto del hilo. Una posición negativa significa posición con respecto al final del hilo. Por ejemplo, '1' es al inicio del hilo, '-1' es al final de el hilo, '-3' es la tercera desde el final. -Es importante cargar algunas funciones en un orden determinado, como por ejemplo las +Es importante cargar algunas funciones en un orden determinado, como por ejemplo las funciones de lectura y escritura de puerto paralelo. El nombre de la función suele ser el nombre del componente más un número. En el siguiente ejemplo se carga el componente 'or2' y 'show function' muestra el nombre de la función or2 @@ -70,7 +70,7 @@ Debe agregar una función de un componente HAL en tiempo real a un hilo para que la función se ejecute a la velocidad del hilo. Por lo general hay dos hilos, como se muestra en este ejemplo. Algunos componentes usan -punto flotante matemático y se debe agregar a un hilo que admita punto flotante. +punto flotante matemático y se debe agregar a un hilo que admita punto flotante. La columna 'FP' indica si la matemática de coma flotante es compatible con ese hilo. ---- @@ -106,7 +106,7 @@ Esto ultimo significa: El comando 'loadusr' carga un componente HAL en espacio de usuario. Los programas en espacio de usuario tienen sus propios procesos separados que, opcionalmente, se comunican -con otros componentes HAL a través de pines y parámetros. No puede cargar componentes +con otros componentes HAL a través de pines y parámetros. No puede cargar componentes de tiempo real en el espacio de usuario. Las banderas pueden ser una o más de las siguientes: @@ -160,7 +160,7 @@ pines adicionales, siempre que se obedezcan las reglas anteriores. image::images/signal-direction.png[align="center", alt="Dirección de señal"] -El siguiente ejemplo muestra la señal xStep, siendo la fuente +El siguiente ejemplo muestra la señal xStep, siendo la fuente stepgen.0.out, y con dos lectores, parport.0.pin-02-out y parport.0.pin-08-out. Básicamente, el valor de stepgen.0.out se envía a la señal xStep y ese valor se envía a parport.0.pin-02-out @@ -340,7 +340,7 @@ tendrá hasta tres archivos HAL en su directorio de configuración. == Componentes HAL -A cada componente HAL, cuando es creado, se le agregan automáticamente dos parámetros. +A cada componente HAL, cuando es creado, se le agregan automáticamente dos parámetros. Estos parámetros permiten monitorizar el tiempo de ejecución de un componente. +.time+(((tiempo))) @@ -384,11 +384,11 @@ Tabla de verdad [width="40%", options="header"] |======================================== -|in0 | in1 | out +|in0 | in1 | out |False | False | False -|True | False | False -|False | True | False -|True | True | True +|True | False | False +|False | True | False +|True | True | True |======================================== === not @@ -444,10 +444,10 @@ Tabla de verdad [width="40%", options="header"] |======================================== -|in0 | in1 | out -|True | False | True -|True | True | True -|False | True | True +|in0 | in1 | out +|True | False | True +|True | True | True +|False | True | True |False | False | False |======================================== @@ -475,10 +475,10 @@ Tabla de verdad [width="40%", options="header"] |======================================== -|in0 | in1 | out -|True | False | True -|True | True | False -|False | True | True +|in0 | in1 | out +|True | False | True +|True | True | False +|False | True | True |False | False | False |======================================== @@ -537,7 +537,7 @@ del bit 0 es 1 y el 'peso' del bit 2 es 4, por lo que la suma es 5. .suma ponderada ----------------------------------------------------------- -Component Pins: +Component Pins: Owner Type Dir Value Name 10 bit In TRUE wsum.0.bit.0.in 10 s32 I/O 1 wsum.0.bit.0.weight diff --git a/docs/src/hal/canonical-devices.adoc b/docs/src/hal/canonical-devices.adoc index 2138fd534cf..ae858ddde42 100644 --- a/docs/src/hal/canonical-devices.adoc +++ b/docs/src/hal/canonical-devices.adoc @@ -1,16 +1,17 @@ -[[cha:canonical-device-interfaces]] +:lang: en +[[cha:canonical-device-interfaces]] = Canonical Device Interfaces == Introduction -The following sections show the pins, parameters, and functions that -are supplied by “canonical devices”. All HAL device drivers should +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. -Note that the only the `` and `` fields are -defined for a canonical device. The ``, ``, -and `` fields are set based on the characteristics of the +Note that the only the `` and `` fields are +defined for a canonical device. The ``, ``, +and `` fields are set based on the characteristics of the real device. == Digital Input @@ -37,18 +38,15 @@ simple. === Pins - - (bit) *out* -- Value to be written (possibly inverted) to the hardware - output. + - (bit) *out* -- Value to be written (possibly inverted) to the hardware output. === Parameters - - (bit) *invert* -- If TRUE, *out* is inverted before writing to the - hardware. + - (bit) *invert* -- If TRUE, *out* is inverted before writing to the hardware. === Functions - - (funct) *write* -- Read *out* and *invert*, and set hardware output - accordingly. + - (funct) *write* -- Read *out* and *invert*, and set hardware output accordingly. == Analog Input @@ -59,8 +57,8 @@ convert e.g. voltage to a continuous range of values. === Pins - (float) *value* -- The hardware reading, scaled according to the - *scale* and *offset* parameters. *Value* = ((input reading, in - hardware-dependent units) * *scale*) - *offset* + *scale* and *offset* parameters. + *Value* = ((input reading, in hardware-dependent units) * *scale*) - *offset* === Parameters @@ -75,14 +73,13 @@ convert e.g. voltage to a continuous range of values. === Functions - - (funct) *read* -- 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 + - (funct) *read* -- 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 == Analog Output The canonical analog output (I/O Type: *adcout*). This is intended -for any kind of hardware that can output a +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. @@ -98,7 +95,7 @@ converters or PWM generators. - (float) *offset* -- This will be added to the *value* before the hardware is updated - (float) *scale* -- This should be set so that an input of 1 on the - *value* pin will cause the analog output pin to read 1 volt. + *value* pin will cause the analog output pin to read 1 volt. - (float) *high_limit* (optional) -- When calculating the value to output to the hardware, if *value* + *offset* is greater than *high_limit*, then *high_limit* will be used instead. @@ -113,12 +110,11 @@ converters or PWM generators. === Functions (funct) *write* -- 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 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 +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. - diff --git a/docs/src/hal/comp.adoc b/docs/src/hal/comp.adoc index 1032c2cddad..351f0750641 100644 --- a/docs/src/hal/comp.adoc +++ b/docs/src/hal/comp.adoc @@ -1,5 +1,6 @@ -[[cha:hal-component-generator]] +:lang: en +[[cha:hal-component-generator]] = The HAL Component Generator == Introduction @@ -16,7 +17,6 @@ lines of code. The equivalent component is very short when written using the 'halcompile' preprocessor: [[code:simple-comp-example]] - .Simple Component Example ---- component ddt "Compute the derivative of the input function"; @@ -64,21 +64,21 @@ To test your component you can follow the examples in the == Definitions * '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. + 'halcmd loadrt'. One '.comp' file specifies one component. The component + name and file name must match. * '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. + 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. * '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) + 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) == Instance creation @@ -126,28 +126,27 @@ alternatives. Words in 'CAPITALS' indicate variable text, as follows: * 'NAME' - A standard C identifier * '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. + to declare instance variables that are pointers. Note that because of the + grammar, there may not be whitespace between the * and the variable name. * '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." instead of "component.." -+ + 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." instead of "component.." + If present, the prefix 'hal_' is removed from the beginning of the component name when creating pins, parameters and functions. -+ + 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. -+ + When used to create a C identifier, the following changes are applied to the HALNAME: -+ --- + . Any "#" characters, and any ".", "_" or "-" characters immediately before them, are removed. . Any remaining "." and "-" characters are replaced with "_". @@ -157,36 +156,36 @@ A trailing "_" is retained, so that HAL identifiers which would otherwise collide with reserved names or keywords (e.g., 'min') can be used. [width="90%", options="header"] -|======================================== +|=== |HALNAME | C Identifier | HAL Identifier |x_y_z | x_y_z | x-y-z |x-y.z | x_y_z | x-y.z |x_y_z_ | x_y_z_ | x-y-z |x.##.y | x_y(MM) | x.MM.z |x.## | x(MM) | x.MM -|======================================== --- +|=== + * 'if CONDITION' - An expression involving the variable 'personality' which is nonzero - when the pin or parameter should be created + when the pin or parameter should be created * 'SIZE' - A number that gives the size of an array. The array items are numbered - from 0 to 'SIZE'-1. + from 0 to 'SIZE'-1. * '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'. + expression involving the variable 'personality' and which always + evaluates to less than 'MAXSIZE'. When the array is created its size + will be 'CONDSIZE'. * 'DOC' - A string that documents the item. String can be a C-style "double - quoted" string, like: -+ + quoted" string, like: + + ---- "Selects the desired edge: TRUE means falling, FALSE means rising" ---- -+ -or a Python-style "triple quoted" string, which -may include embedded newlines and quote characters, such as: -+ + + + or a Python-style "triple quoted" string, which + may include embedded newlines and quote characters, such as: + + ---- """The effect of this parameter, also known as "the orb of zot", will require at least two paragraphs to explain. @@ -194,136 +193,136 @@ will require at least two paragraphs to explain. Hopefully these paragraphs have allowed you to understand "zot" better.""" ---- -+ -Or a string may be preceded by the literal character 'r', in which -case the string is interpreted like a Python raw-string. -+ -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: -+ ----- -"\\fIexample\\fB" ----- -+ -In this case, r-strings are particularly useful, because the backslashes -in an r-string need not be doubled: -+ ----- -r"\fIexample\fB" ----- + + + Or a string may be preceded by the literal character 'r', in which + case the string is interpreted like a Python raw-string. + + + 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: + + + ---- + "\\fIexample\\fB" + ---- + + + In this case, r-strings are particularly useful, because the backslashes + in an r-string need not be doubled: + + + ---- + r"\fIexample\fB" + ---- * '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. + names 's32' and 'u32' may also be used, but 'signed' and 'unsigned' are + preferred. * '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. + for an 'out' pin, it reads a value from an 'in' pin, and it may read or + set the value of an 'io' pin. * '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. + parameter, and it may read or set the value of a 'rw' parameter. * '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. + specified, then the default is '0' or 'FALSE', depending on the type of + the item. * 'HEADERFILE' - The name of a header file, either in double-quotes - (`include "myfile.h";`) or in angle brackets (`include - ;`). The header file will be included (using - C's #include) at the top of the file, before pin and parameter - declarations. + (`include "myfile.h";`) or in angle brackets (`include + ;`). The header file will be included (using + C's #include) at the top of the file, before pin and parameter + declarations. === HAL functions * 'fp' - Indicates that the function performs floating-point calculations. * '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. + 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. === Options The currently defined options are: * '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..item-name'. + 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..item-name'. * 'option default_count number' - (default: 1) - Normally, the module parameter 'count' defaults to 1. If specified, - the 'count' will default to this value instead. + Normally, the module parameter 'count' defaults to 1. If specified, + the 'count' will default to this value instead. * '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. + 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. * '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: - + - `int rtapi_app_main(void);` - + - `void rtapi_app_exit(void);` - + - 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`. + 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: + + + `int rtapi_app_main(void);` + + + `void rtapi_app_exit(void);` + + + 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`. * '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. + 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. * '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. + 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. * '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'. + 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'. * 'option userspace yes' - (default: no) - If specified, this file describes a userspace (ie, non-realtime) component, rather - than a regular (ie, 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. + If specified, this file describes a userspace (ie, non-realtime) component, rather + than a regular (ie, 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. * '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). + 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). * '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. + 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. * '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. + 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. * 'option homemod yes' - (default: no) Module is a custom Homing module loaded using [EMCMOT]HOMEMOD=modulename @@ -339,8 +338,8 @@ The result of using any other option is undefined. === License and Authorship * '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, + MODULE_LICENSE() module declaration. For example, to specify that the + module's license is GPL v2 or later, license "GPL"; // indicates GPL v2 or later + @@ -422,48 +421,48 @@ details of `struct __comp_state` and these macros may change from one version of 'halcompile' to the next. * '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. + was previously declared with 'function NAME'. The function includes a + parameter 'period' which is the integer number of nanoseconds + between calls to the + function. * '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. + 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. * '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. + 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. * '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'. + 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'. + When the item is a conditional item, it is only legal to refer to it when its 'condition' evaluated to a nonzero value. * '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]' + 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]' * 'data' - If "option data" is specified, this macro allows access to the - instance data. + instance data. * 'fperiod' - The floating-point number of seconds between calls to this realtime - function. + function. * '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. + 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. == Components with one function @@ -591,8 +590,8 @@ This only works for '.comp' files, not for '.c' files. === constant -Note that the declaration "function _" creates functions named "constant.0" -, etc. The file name must match the component name. +Note that the declaration "function _" creates functions named "constant.0", etc. +The file name must match the component name. [source,c] ---- diff --git a/docs/src/hal/comp_es.adoc b/docs/src/hal/comp_es.adoc index bb5142745db..cb56e8bb803 100644 --- a/docs/src/hal/comp_es.adoc +++ b/docs/src/hal/comp_es.adoc @@ -56,9 +56,9 @@ Los componentes deben cargarse y agregarse a un hilo antes de poder usarlos. Ejemplo: ---- - loadrt threads name1=servo-thread period1=1000000 - loadrt ddt - addf ddt.0 servo-thread +loadrt threads name1=servo-thread period1=1000000 +loadrt ddt +addf ddt.0 servo-thread ---- Se puede encontrar más información sobre loadrt y addf en la <> . diff --git a/docs/src/hal/components.adoc b/docs/src/hal/components.adoc index a5499a5ff05..1b433427268 100644 --- a/docs/src/hal/components.adoc +++ b/docs/src/hal/components.adoc @@ -1,21 +1,21 @@ -[[cha:hal-components]] +:lang: en -= HAL Components +[[cha:hal-components]] += HAL Components((("HAL Components"))) == Commands and Userspace Components -All of the commands in the following list have man pages. -Some will have expanded descriptions, some will have limited descriptions. +All of the commands in the following list have man pages. +Some will have expanded descriptions, some will have limited descriptions. Also, all of the components listed below have man pages. -From this list you know what components exist, -and you can use 'man n name' to get additional information. -To view the information in the man page, in a terminal window type: +From this list you know what components exist, +and you can use 'man n name' to get additional information. +To view the information in the man page, in a terminal window type: ---- man axis (or perhaps 'man 1 axis' if your system requires it.) ---- - axis:: AXIS LinuxCNC (The Enhanced Machine Controller) Graphical User Interface. axis-remote:: AXIS Remote Interface. comp:: Build, compile and install LinuxCNC HAL components. @@ -35,48 +35,50 @@ pyvcp:: Virtual Control Panel for LinuxCNC. shuttle:: control HAL pins with the ShuttleXpress and ShuttlePRO devices made by Contour Design. [[sec:realtime-components]] - == Realtime Components List Some of these will have expanded descriptions from the man pages. Some will have limited descriptions. All of the components have man pages. From this list you know what components exist and can use 'man n name' to -get additional information. To view the information in the man page, in a -terminal window type: +get additional information. To view the information in the man page, in a +terminal window type: ---- man motion (or perhaps 'man 9 motion' if your system requires it.) ---- +[NOTE] See also the 'Man Pages' section of the link:../index.html[docs main page] or the link:../man/man9/[directory listing of man9]. +[NOTE] +Si el componente requiere un hilo de punto flotante, suele ser el hilo servo, más lento. - +[[sec:Realtime-Components-coeur]] === Core LinuxCNC components motion:: (((motion)))Accepts NML motion commands, interacts with HAL in realtime. axis:: (((axis)))Accepts NML motion commands, interacts with HAL in realtime. -classicladder:: (((classicladder)))Realtime software PLC based on ladder logic. -See <> chapter for more information. +classicladder:: (((classicladder)))Realtime software PLC based on ladder logic. See <> chapter for more information. gladevcp:: (((gladevcp)))Displays Virtual Control Panels built with GTK/Glade. threads:: (((threads)))Creates hard realtime HAL threads. +[[sec:Realtime-Components-logic]] === Logic and Bitwise components -and2:: (((and2)))Two-input AND gate. For out to be true both inputs must be true. link:../man/man9/and2.9.html[Details] +and2:: (((and2)))Two-input AND gate. For out to be true both inputs must be true. link:../man/man9/and2.9.html[Details] + +not:: (((not)))Inverter. link:../man/man9/not.9.html[Details] -not:: (((not)))Inverter. link:../man/man9/not.9.html[Details] - -or2:: (((or2)))Two-input OR gate. link:../man/man9/or2.9.html[Details] +or2:: (((or2)))Two-input OR gate. link:../man/man9/or2.9.html[Details] -xor2:: (((xor2)))Two-input XOR (exclusive OR) gate. link:../man/man9/xor2.9.html[Details] +xor2:: (((xor2)))Two-input XOR (exclusive OR) gate. link:../man/man9/xor2.9.html[Details] -dbounce:: (((dbounce)))Filter noisy digital inputs. link:../man/man9/dbounce.9.html[Details]. +dbounce:: (((dbounce)))Filter noisy digital inputs. link:../man/man9/dbounce.9.html[Details]. debounce:: (((debounce)))Filter noisy digital inputs. link:../man/man9/debounce.9.html[Details]. <> @@ -94,8 +96,10 @@ match8:: (((match8)))8-bit binary match detector. select8:: (((select8)))8-bit binary match detector. +[[sec:Realtime-Components-flottant]] === Arithmetic and float-components + abs:: [[sub:abs]](((abs)))Compute the absolute value and sign of the input signal. blend:: (((blend)))Perform linear interpolation between two values. @@ -106,8 +110,10 @@ constant:: (((constant)))Use a parameter to set the value of a pin. sum2:: (((sum2)))Sum of two inputs (each with a gain) and an offset. -counter:: (((counter)))Counts input pulses (deprecated). -Use the <> component. +counter:: (((counter)))Counts input pulses (deprecated). Use the <> component. + +Utiliser le composant _encoder_ avec _... counter-mode = TRUE_. +See section <>. updown:: (((updown)))Counts up or down, with optional limits and wraparound behavior. @@ -153,8 +159,7 @@ is a position, this means that 'position' and 'velocity' are limited.] limit3:: (((limit3)))Limit the output signal to fall between min and max. Limit its slew rate to less than maxv per second. Limit its second derivative to less than MaxA per second squared. footnote:[When -the input is a position, this means that the 'position', 'velocity', and -'acceleration' are limited.] +the input is a position, this means that the 'position', 'velocity', and 'acceleration' are limited.] maj3:: (((maj3)))Compute the majority of 3 inputs. @@ -182,51 +187,28 @@ conv_u32_float:: (((conv_u32_float)))Convert a value from u32 to float. conv_u32_s32:: (((conv_u32_s32)))Convert a value from u32 to s32. +[[sec:Realtime-Components-pilotes]] === Hardware Drivers -(((hal_ppmc))) - -hal_ppmc:: Pico Systems <> for analog servo, PWM -and Stepper controller. - -(((hm2_7i43))) - -hm2_7i43:: Mesa Electronics driver for the 7i43 EPP Anything IO board with -HostMot2. (See the man page for more information) +hal_ppmc:: (((hal_ppmc))) Pico Systems <> for analog servo, PWM and Stepper controller. -(((hm2_pci))) +hm2_7i43:: (((hm2_7i43))) Mesa Electronics driver for the 7i43 EPP Anything IO board with HostMot2. (See the man page for more information) -hm2_pci:: 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) +hm2_pci:: (((hm2_pci))) 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) -(((hostmot2))) +hostmot2:: (((hostmot2))) Mesa Electronics <> for the HostMot2 firmware. -hostmot2:: Mesa Electronics <> for the -HostMot2 firmware. +mesa_7i65:: (((7i65))) Mesa Electronics driver for the 7i65 eight-axis servo card. (See the man page for more information) -(((7i65))) +pluto_servo:: (((pluto_servo))) Pluto-P <> and firmware for the parallel port FPGA, for servos. -mesa_7i65:: Mesa Electronics driver for the 7i65 eight-axis servo card. (See the -man page for more information) +pluto_step:: (((pluto_step))) Pluto-P <> for the parallel port FPGA, for steppers. -(((pluto_servo))) +thc:: (((torch height control))) Torch Height Control using a Mesa THC card or any analog to velocity input -pluto_servo:: Pluto-P <> and firmware for the -parallel port FPGA, for servos. - -(((pluto_step))) - -pluto_step:: Pluto-P <> for the parallel port FPGA, -for steppers. - -(((torch height control))) - -thc:: Torch Height Control using a Mesa THC card or any analog to velocity input - -(((serport))) - -serport:: Hardware driver for the digital I/O bits of the 8250 and 16550 serial port. +serport:: (((serport))) Hardware driver for the digital I/O bits of the 8250 and 16550 serial port. +[[sec:Realtime-Components-cinematiques]] === Kinematics kins:: (((kins)))kinematics definitions for LinuxCNC. @@ -236,26 +218,26 @@ gantrykins:: (((gantrykins)))A kinematics module that maps one axis to multiple genhexkins:: (((genhexkins)))Gives six degrees of freedom in position and orientation (XYZABC). The location of the motors is defined at compile time. -genserkins:: (((genserkins)))Kinematics that can model a general serial-link manipulator with up to +genserkins:: (((genserkins))) Kinematics that can model a general serial-link manipulator with up to 6 angular joints. -maxkins:: (((maxkins)))Kinematics for a tabletop 5 axis mill named 'max' with tilting head (B axis) and +maxkins:: (((maxkins))) 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. -tripodkins:: (((tripodkins)))The joints represent the distance of the controlled point from three +tripodkins:: (((tripodkins))) The joints represent the distance of the controlled point from three predefined locations (the motors), giving three degrees of freedom in position (XYZ). -trivkins:: (((trivkins)))There is a 1:1 correspondence between joints and axes. Most standard +trivkins:: (((trivkins))) There is a 1:1 correspondence between joints and axes. Most standard milling machines and lathes use the trivial kinematics module. -pumakins:: (((pumakins)))Kinematics for PUMA-style robots. +pumakins:: (((pumakins))) Kinematics for PUMA-style robots. -rotatekins:: (((rotatekins)))The X and Y axes are rotated 45 degrees compared to the joints 0 and 1. +rotatekins:: (((rotatekins))) The X and Y axes are rotated 45 degrees compared to the joints 0 and 1. -scarakins:: (((scarakins)))Kinematics for SCARA-type robots. +scarakins:: (((scarakins))) Kinematics for SCARA-type robots. === Motor control @@ -292,9 +274,8 @@ feedcomp:: (((feedcomp)))Multiply the input by the ratio of current velocity to gearchange:: (((gearchange)))Select from one of two speed ranges. -[[sec:ilowpass]] (((ilowpass))) - -ilowpass:: While it may find other applications, +[[sec:ilowpass]] +ilowpass:: (((ilowpass)))While it may find other applications, this component was written to create smoother motion while jogging with an MPG. + In a machine with high acceleration, a short jog can behave almost like a step @@ -345,8 +326,6 @@ buffer in electronics. tristate_float:: (((tristate_float)))Place a signal on an I/O pin only when enabled, similar to a tristate buffer in electronics. - - watchdog:: (((watchdog)))Monitor one to thirty-two inputs for a 'heartbeat'. @@ -451,4 +430,3 @@ rtapi_task_resume.3rtapi rtapi_task_start.3rtapi rtapi_task_wait.3rtapi .... - diff --git a/docs/src/hal/components_es.adoc b/docs/src/hal/components_es.adoc index c4056fa0b47..ac2e17d0452 100644 --- a/docs/src/hal/components_es.adoc +++ b/docs/src/hal/components_es.adoc @@ -51,7 +51,8 @@ motion:: (((motion))) Acepta comandos de movimiento NML e interactúa con HAL en axis:: (((axis))) Acepta comandos de movimiento NML e interactúa con HAL en tiempo real. classicladder:: (((classicladder))) Software PLC en tiempo real basado en lógica de escalera. -Consulte el capítulo <> para obtener más información. +Consulte el capítulo ClassicLadder para obtener más información. +//<> // all English _es file removed gladevcp:: (((gladevcp))) Muestra paneles de control virtuales construidos con GTK/Glade. @@ -253,9 +254,7 @@ feedcomp:: (((feedcomp))) Multiplica la entrada por la relación de la velocidad gearchange:: (((gearchange))) Seleccion de uno de dos rangos de velocidad. -[[sec:ilowpass]] (((ilowpass))) - -ilowpass:: Si bien puede encontrar otras aplicaciones, este componente se escribió para crear un movimiento más suave con un MPG. +ilowpass:: [[sec:ilowpass]](((ilowpass))) Si bien puede encontrar otras aplicaciones, este componente se escribió para crear un movimiento más suave con un MPG. + En una máquina con alta aceleración, un jog corto puede comportarse casi como una funcion paso. Al poner el componente ilowpass entre l a salida de cuentas del codificador MPG diff --git a/docs/src/hal/general-ref.adoc b/docs/src/hal/general-ref.adoc index 6a4b2ec4c98..96ab03d6126 100644 --- a/docs/src/hal/general-ref.adoc +++ b/docs/src/hal/general-ref.adoc @@ -1,5 +1,6 @@ -[[cha:general-reference]] +:lang: en +[[cha:general-reference]] = General Reference == General Naming Conventions diff --git a/docs/src/hal/hal-examples.adoc b/docs/src/hal/hal-examples.adoc index 9f4920635d2..142aef75f13 100644 --- a/docs/src/hal/hal-examples.adoc +++ b/docs/src/hal/hal-examples.adoc @@ -1,6 +1,8 @@ -[[cha:hal-examples]] +:lang: en +:toc: -= HAL Examples +[[cha:hal-examples]] += HAL Examples(((HAL Examples))) All of these examples assume you are starting with a stepconf based configuration and have two threads 'base-thread' and 'servo-thread'. The @@ -73,17 +75,17 @@ 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 +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. -This is an example of manual toolchange 'with' -the HAL Manual Toolchange component: +This is an example of manual toolchange 'with' +the HAL Manual Toolchange component: ---- -loadusr -W hal_manualtoolchange +loadusr -W hal_manualtoolchange net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed net external-tool-changed hal_manualtoolchange.change_button <= parport.0.pin-12-in @@ -91,13 +93,13 @@ net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared ---- -This is an example of manual toolchange 'without' -the HAL Manual Toolchange component: +This is an example of manual toolchange 'without' +the HAL Manual Toolchange component: ---- -net tool-number <= iocontrol.0.tool-prep-number -net tool-change-loopback iocontrol.0.tool-change => iocontrol.0.tool-changed -net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared +net tool-number <= iocontrol.0.tool-prep-number +net tool-change-loopback iocontrol.0.tool-change => iocontrol.0.tool-changed +net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared ---- == Compute Velocity @@ -116,27 +118,27 @@ correct value. Add the following to your custom.hal file. Load the realtime components. ---- -loadrt ddt count=1 -loadrt mult2 count=1 -loadrt abs count=1 +loadrt ddt count=1 +loadrt mult2 count=1 +loadrt abs count=1 ---- Add the functions to a thread so it will get updated. ---- -addf ddt.0 servo-thread -addf mult2.0 servo-thread -addf abs.0 servo-thread +addf ddt.0 servo-thread +addf mult2.0 servo-thread +addf abs.0 servo-thread ---- Make the connections. ---- -setp mult2.in1 60 -net xpos-cmd ddt.0.in -net X-IPS mult2.0.in0 <= ddt.0.out -net X-ABS abs.0.in <= mult2.0.out -net X-IPM abs.0.out +setp mult2.in1 60 +net xpos-cmd ddt.0.in +net X-IPS mult2.0.in0 <= ddt.0.out +net X-ABS abs.0.in <= mult2.0.out +net X-IPM abs.0.out ---- In this last section we are setting the mult2.0.in1 to 60 to convert @@ -153,9 +155,7 @@ 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. -.Velocity Example[[cap:Velocity-Example]] - -image::images/velocity-01.png[alt="Velocity Example"] +image::images/velocity-01.png["Velocity Example"] == Soft Start @@ -171,11 +171,11 @@ that the PID command value changes to new settings more slowly. Three built-in components that limit a signal are: -* 'limit2' limits the range and first derivative of a signal. +* 'limit2' limits the range and first derivative of a signal. -* 'limit3' limits the range, first and second derivatives of a signal. +* 'limit3' limits the range, first and second derivatives of a signal. -* 'lowpass' uses an exponentially-weighted moving average to track an input signal. +* 'lowpass' uses an exponentially-weighted moving average to track an input signal. To find more information on these HAL components check the man pages. @@ -183,26 +183,26 @@ Place the following in a text file called softstart.hal. If you're not familiar with Linux place the file in your home directory. ---- -loadrt threads period1=1000000 name1=thread -loadrt siggen -loadrt lowpass -loadrt limit2 -loadrt limit3 -net square siggen.0.square => lowpass.0.in limit2.0.in limit3.0.in -net lowpass <= lowpass.0.out -net limit2 <= limit2.0.out -net limit3 <= limit3.0.out -setp siggen.0.frequency .1 -setp lowpass.0.gain .01 -setp limit2.0.maxv 2 -setp limit3.0.maxv 2 -setp limit3.0.maxa 10 -addf siggen.0.update thread -addf lowpass.0 thread -addf limit2.0 thread -addf limit3.0 thread -start -loadusr halscope +loadrt threads period1=1000000 name1=thread +loadrt siggen +loadrt lowpass +loadrt limit2 +loadrt limit3 +net square siggen.0.square => lowpass.0.in limit2.0.in limit3.0.in +net lowpass <= lowpass.0.out +net limit2 <= limit2.0.out +net limit3 <= limit3.0.out +setp siggen.0.frequency .1 +setp lowpass.0.gain .01 +setp limit2.0.maxv 2 +setp limit3.0.maxv 2 +setp limit3.0.maxa 10 +addf siggen.0.update thread +addf lowpass.0 thread +addf limit2.0 thread +addf limit3.0 thread +start +loadusr halscope ---- Open a terminal window and run the file with the following command. @@ -227,9 +227,7 @@ start a run and when it finishes you will see your traces. 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. -.Softstart[[cap:Softstart]] - -image::images/softstart-scope.png[alt="Softstart"] +image::images/softstart-scope.png["Softstart"] 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 @@ -247,7 +245,7 @@ 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 EMC from loading. -For more information on Halscope see the HAL manual. +For more information on Halscope see the HAL manual and the tutorial. == Stand Alone HAL @@ -256,7 +254,7 @@ 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. -In the following example we have created a simple GladeVCP panel with one +In the following example we have created a simple GladeVCP panel with one .Basic Syntax ---- @@ -297,6 +295,3 @@ stop # unload HAL all components before exiting unloadrt all ---- - - - diff --git a/docs/src/hal/halmodule.adoc b/docs/src/hal/halmodule.adoc index 63317024989..cc3fe48ffec 100644 --- a/docs/src/hal/halmodule.adoc +++ b/docs/src/hal/halmodule.adoc @@ -1,6 +1,8 @@ -[[cha:halmodule]] +:lang: en +:toc: -= Creating Userspace Python Components +[[cha:halmodule]] += Creating Userspace Python Components(((Creating Userspace Python Components))) == Basic usage @@ -36,24 +38,24 @@ halcmd: loadusr passthrough halcmd: show pin - Component Pins: - Owner Type Dir Value Name - 03 float IN 0 passthrough.in - 03 float OUT 0 passthrough.out + Component Pins: + Owner Type Dir Value Name + 03 float IN 0 passthrough.in + 03 float OUT 0 passthrough.out -halcmd: setp passthrough.in 3.14 +halcmd: setp passthrough.in 3.14 halcmd: show pin - Component Pins: - Owner Type Dir Value Name - 03 float IN 3.14 passthrough.in - 03 float OUT 3.14 passthrough.out + Component Pins: + Owner Type Dir Value Name + 03 float IN 3.14 passthrough.in + 03 float OUT 3.14 passthrough.out ---- == Userspace components and delays -If you typed “show pin” quickly, you may see that 'passthrough.out' +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 @@ -90,11 +92,11 @@ and parameter direction. .HAL Option Names [width="100%",cols="<3s,4*<"] -|=========================================================== +|============================================================== |Pin and Parameter Types: |HAL_BIT |HAL_FLOAT |HAL_S32 |HAL_U32 |Pin Directions: |HAL_IN |HAL_OUT |HAL_IO | |Parameter Directions: |HAL_RO |HAL_RW | | -|=========================================================== +|============================================================== 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 @@ -154,15 +156,15 @@ 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. +another index pulse had been seen. == Exiting -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 +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. == Helpful Functions @@ -174,6 +176,7 @@ Example: + hal.component_exists("testpanel") + === component_is_ready + Is the specified component ready at this time. + Example: + hal.component_is_ready("testpanel") + @@ -230,6 +233,7 @@ paramValue1 = listOfDicts[0].get('VALUE') ---- === new_signal + Create a New signal of the type specified. + example" + hal.new_sig("signalname",hal.HAL_BIT) @@ -331,6 +335,7 @@ Read these to acquire information about the realtime system. * is_userspace == Use with hal_glib in GladeVCP Handler + GladeVCP uses the hal_glib library, which can be used to connect a "watcher" signal on a HAL input pin. + This signal can be used to register a function to call when the HAL pin changes state. + @@ -352,6 +357,7 @@ class HandlerClass: ---- And have a function to be called: + [source,python] ---- def _on_example_trigger_change(self,pin,userdata=None): @@ -375,6 +381,7 @@ import hal ---- Then make a pin and connect a 'value_changed' (the watcher) signal to a function call: + [source,python] ---- ######################## @@ -388,8 +395,9 @@ Then make a pin and connect a 'value_changed' (the watcher) signal to a function self.testPin.value_changed.connect(lambda s: self.setTestPin(s)) ---- -And have a function to be called. + -This shows ways to get the pin value and information. + +And have a function to be called. +This shows ways to get the pin value and information. + [source,python] ---- ##################### @@ -409,15 +417,13 @@ This shows ways to get the pin value and information. + == Project ideas * 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 - http://pyserial.sourceforge.net/[pyserial] - (Ubuntu package name “python-serial”, in the universe repository) + 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 + http://pyserial.sourceforge.net/[pyserial] + (Ubuntu package name “python-serial”, in the universe repository) * 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) + and use it to display a digital readout with information of your choice + (Ubuntu package name “lcdproc”, in the universe repository) * Create a virtual control panel using any GUI library supported by - Python (gtk, qt, wxwindows, etc) - - + Python (gtk, qt, wxwindows, etc) diff --git a/docs/src/hal/halshow.adoc b/docs/src/hal/halshow.adoc index bcfa48c551c..6ff96791199 100644 --- a/docs/src/hal/halshow.adoc +++ b/docs/src/hal/halshow.adoc @@ -1,6 +1,8 @@ -[[cha:halshow]] +:lang: en +:toc: -= Halshow +[[cha:halshow]] += Halshow(((Halshow))) 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. @@ -52,7 +54,7 @@ tabs for show and watch. [[cap:halshow-layout]] .Halshow Layout -image::images/halshow-1.png[align="center", alt="Halshow Layout"] +image::images/halshow-1.png["Halshow Layout",align="center"] 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 @@ -65,15 +67,14 @@ 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.) -.Show Menu -image::images/halshow-3.png[align="center", alt="Show Menu"] +image::images/halshow-3.png["Show Menu",align="center"] == HAL Show Area 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 <> shows a list exactly like -you will see if you click the "Components" name. +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 @@ -92,10 +93,10 @@ nature of the search routines in halcmd itself. If you search one pin you may get two, like this: ---- -Component Pins: -Owner Type Dir Value Name -06 bit -W TRUE parport.0.pin-10-in -06 bit -W FALSE parport.0.pin-10-in-not +Component Pins: +Owner Type Dir Value Name +06 bit -W TRUE parport.0.pin-10-in +06 bit -W FALSE parport.0.pin-10-in-not ---- The second pin's name contains the complete name of the first. @@ -152,19 +153,19 @@ 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: ---- -Exported Functions: -Owner CodeAddr Arg FP Users Name - 08 E0B97630 E0DC7674 YES 0 ddt.0 - 03 E0DEF83C 00000000 YES 1 motion-command-handler - 03 E0DF0BF3 00000000 YES 1 motion-controller - 06 E0B541FE E0DC75B8 NO 1 parport.0.read - 06 E0B54270 E0DC75B8 NO 1 parport.0.write - 06 E0B54309 E0DC75B8 NO 0 parport.read-all - 06 E0B5433A E0DC75B8 NO 0 parport.write-all - 05 E0AD712D 00000000 NO 0 scope.sample - 04 E0B618C1 E0DC7448 YES 1 stepgen.capture-position - 04 E0B612F5 E0DC7448 NO 1 stepgen.make-pulses - 04 E0B614AD E0DC7448 YES 1 stepgen.update-freq +Exported Functions: +Owner CodeAddr Arg FP Users Name + 08 E0B97630 E0DC7674 YES 0 ddt.0 + 03 E0DEF83C 00000000 YES 1 motion-command-handler + 03 E0DF0BF3 00000000 YES 1 motion-controller + 06 E0B541FE E0DC75B8 NO 1 parport.0.read + 06 E0B54270 E0DC75B8 NO 1 parport.0.write + 06 E0B54309 E0DC75B8 NO 0 parport.read-all + 06 E0B5433A E0DC75B8 NO 0 parport.write-all + 05 E0AD712D 00000000 NO 0 scope.sample + 04 E0B618C1 E0DC7448 YES 1 stepgen.capture-position + 04 E0B612F5 E0DC7448 NO 1 stepgen.make-pulses + 04 E0B614AD E0DC7448 YES 1 stepgen.update-freq ---- Here we look for owner #08 and see a function @@ -190,18 +191,17 @@ 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. -.Addf Command -image::images/halshow-2.png[align="center", alt="Addf Command"] +image::images/halshow-2.png["Addf Command",align="center"] 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: ---- -Component Pins: -Owner Type Dir Value Name -08 float R- 0.00000e+00 ddt.0.in -08 float -W 0.00000e+00 ddt.0.out +Component Pins: +Owner Type Dir Value Name +08 float R- 0.00000e+00 ddt.0.in +08 float -W 0.00000e+00 ddt.0.out ---- That looks easy enough to understand, but what signal or pin do we @@ -209,8 +209,8 @@ want 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: ---- -Component Pins: -Owner Type Dir Value Name +Component Pins: +Owner Type Dir Value Name 03 float -W 0.00000e+00 joint.0.motor-pos-cmd ==> Xpos-cmd ---- @@ -225,11 +225,11 @@ Now if we look at the Xpos-cmd signal using the tree node we'll see what we've done: ---- -Signals: -Type Value Name +Signals: +Type Value Name float 0.00000e+00 Xpos-cmd <== joint.0.motor-pos-cmd -==> ddt.0.in +==> ddt.0.in ==> stepgen.0.position-cmd ---- @@ -261,18 +261,16 @@ available in this area. That is where the HAL Watch Area is of value. 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 +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 +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 <>. - -.Watch Tab -image::images/halshow-4.png[align="center", alt="Watch Tab"] +image::images/halshow-4.png["Watch Tab",align="center"] Watch displays bit type (binary) values using colored circles representing LEDs. They show as dark red when a bit signal or pin is @@ -289,4 +287,4 @@ in halshow can be set up to watch a parport much as IO_Show did. [[cap:watch-tab-context-menu]] .Watch Tab context menu -image::images/halshow-5.png[align="center", alt="Watch Tab context menu"] \ No newline at end of file +image::images/halshow-5.png["Watch Tab context menu",align="center"] diff --git a/docs/src/hal/haltcl.adoc b/docs/src/hal/haltcl.adoc index 369cc239841..108cffd61cf 100644 --- a/docs/src/hal/haltcl.adoc +++ b/docs/src/hal/haltcl.adoc @@ -1,5 +1,7 @@ -[[cha:haltcl]] +:lang: en +:toc: +[[cha:haltcl]] = HALTCL Files The halcmd language excels in specifying components and connections but @@ -154,7 +156,7 @@ list ---> hal list == Haltcl Notes In haltcl, the value argument for the 'sets' and 'setp' commands -is implicitly treated as an expression in the tcl language. +is implicitly treated as an expression in the tcl language. .Example ---- diff --git a/docs/src/hal/halui-examples.adoc b/docs/src/hal/halui-examples.adoc index 0035444ff58..752611e1a17 100644 --- a/docs/src/hal/halui-examples.adoc +++ b/docs/src/hal/halui-examples.adoc @@ -1,6 +1,7 @@ -[[cha:halui-examples]] +:lang: en -= Halui Examples +[[cha:halui-examples]] += Halui Examples(((Halui Examples))) For any Halui examples to work you need to add the following line to the [HAL] section of the ini file. @@ -10,7 +11,6 @@ HALUI = halui ---- [[sec:halui-remote-start]] - == Remote Start To connect a remote program start button to LinuxCNC you use the @@ -25,19 +25,23 @@ If both the inputs to the `and2.0` component are on the `and2.0.out` will be on and this will start the program. .Remote Start Example -image::images/remote-start.png[alt="Remote Start Example"] +image::images/remote-start.png["Remote Start Example"] The hal commands needed to accomplish the above are: - net program-start-btn halui.mode.auto and2.0.in0 <= - net program-run-ok and2.0.in1 <= halui.mode.is-auto - net remote-program-run halui.program.run <= and2.0.out +---- +net program-start-btn halui.mode.auto and2.0.in0 <= +net program-run-ok and2.0.in1 <= halui.mode.is-auto +net remote-program-run halui.program.run <= and2.0.out +---- Notice on line one that there are two reader pins, this can also be split up to two lines like this: - net program-start-btn halui.mode.auto <= - net program-start-btn and2.0.in0 +---- +net program-start-btn halui.mode.auto <= +net program-start-btn and2.0.in0 +---- == Pause & Resume @@ -84,4 +88,3 @@ 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. - diff --git a/docs/src/hal/intro.adoc b/docs/src/hal/intro.adoc index 967b1ab7470..aae17df27dc 100644 --- a/docs/src/hal/intro.adoc +++ b/docs/src/hal/intro.adoc @@ -1,5 +1,6 @@ -[[cha:hal-introduction]] +:lang: en +[[cha:hal-introduction]] = HAL Introduction HAL(((HAL))) stands for Hardware Abstraction Layer. At the highest @@ -384,4 +385,3 @@ 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. - diff --git a/docs/src/hal/intro_es.adoc b/docs/src/hal/intro_es.adoc index 5429467acaa..656b4f3de34 100644 --- a/docs/src/hal/intro_es.adoc +++ b/docs/src/hal/intro_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:hal-introduction]] - = Introducción a HAL HAL(((HAL))) significa 'capa de abstracción de hardware'. Al más alto diff --git a/docs/src/hal/intro_fr.adoc b/docs/src/hal/intro_fr.adoc index b9a3f4bf4d0..78da363d615 100644 --- a/docs/src/hal/intro_fr.adoc +++ b/docs/src/hal/intro_fr.adoc @@ -1,9 +1,8 @@ :lang: fr :toc: -= Introduction à HAL - [[cha:HAL-Introduction]] += Introduction à HAL HAL(((HAL))) est le sigle de Hardware Abstraction Layer, le terme Anglais pour Couche d'Abstraction Matériel.footnote:[Note du diff --git a/docs/src/hal/parallel-port.adoc b/docs/src/hal/parallel-port.adoc index 72660fd1400..8bc6634e23d 100644 --- a/docs/src/hal/parallel-port.adoc +++ b/docs/src/hal/parallel-port.adoc @@ -1,5 +1,6 @@ -[[cha:parport]] +:lang: en +[[cha:parport]] = Parallel Port Driver The hal_parport component is a driver for the traditional PC parallel port. @@ -91,24 +92,24 @@ optionally be specified. The type is one of 'in', 'out', 'epp', or 'x'. .Parallel Port Direction [cols=">1,3*^2", width="50%", options="header"] |=========================== -|Pin|in|out/epp|x -|1|out|out|in -|2|in|out|out -|3|in|out|out -|4|in|out|out -|5|in|out|out -|6|in|out|out -|7|in|out|out -|8|in|out|out -|9|in|out|out -|10|in|in|in -|11|in|in|in -|12|in|in|in -|13|in|in|in -|14|out|out|in -|15|in|in|in -|16|out|out|in -|17|out|out|in +|Pin|in |out/epp|x +| 1|out|out |in +| 2|in |out |out +| 3|in |out |out +| 4|in |out |out +| 5|in |out |out +| 6|in |out |out +| 7|in |out |out +| 8|in |out |out +| 9|in |out |out +| 10|in |in |in +| 11|in |in |in +| 12|in |in |in +| 13|in |in |in +| 14|out|out |in +| 15|in |in |in +| 16|out|out |in +| 17|out|out |in |=========================== @@ -222,29 +223,28 @@ 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. [[sub:parport-functions]] - == Functions * 'parport.

.read' (funct) Reads physical input pins of port - '' and updates HAL '-in' and '-in-not' pins. + '' and updates HAL '-in' and '-in-not' pins. * 'parport.read-all' (funct) Reads physical input pins of all ports - and updates HAL '-in' and '-in-not' pins. + and updates HAL '-in' and '-in-not' pins. * 'parport.

.write' (funct) Reads HAL '-out' pins of port - '

' and updates that port's physical output pins. + '

' and updates that port's physical output pins. * 'parport.write-all' (funct) Reads HAL '-out' pins of all ports - and updates all physical output pins. + and updates all physical output pins. * 'parport.

.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 <> for that pin - must be set to 0 to enable doublefreq. + 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 <> for that pin + must be set to 0 to enable doublefreq. The individual functions are provided for situations where one port needs to be updated in a very fast thread, but other ports can be diff --git a/docs/src/hal/parallel-port_es.adoc b/docs/src/hal/parallel-port_es.adoc index 95bf10cf633..2826963ce78 100644 --- a/docs/src/hal/parallel-port_es.adoc +++ b/docs/src/hal/parallel-port_es.adoc @@ -242,7 +242,7 @@ al establecer el pin HAL '-out' TRUE, el pin físico estará bajo. en el mismo hilo, posterior a 'write'. Si '-reset' es TRUE, entonces la función 'reset' configurará el pin al valor de '-out-invert'. Esta puede usarse junto con 'doublefreq' de stepgen para producir un - paso por periodo El <> para ese pin + paso por periodo El <> para ese pin debe establecerse en 0 para habilitar doublefreq. Las funciones individuales se proporcionan para situaciones en las que un puerto diff --git a/docs/src/hal/rtcomps.adoc b/docs/src/hal/rtcomps.adoc index 958f0a4143a..0bb7655bbc5 100644 --- a/docs/src/hal/rtcomps.adoc +++ b/docs/src/hal/rtcomps.adoc @@ -1,10 +1,10 @@ -[[cha:realtime-components]] +:lang: en +[[cha:realtime-components]] = HAL Component Descriptions -[[sec:stepgen]] (((stepgen))) - -== Stepgen +[[sec:stepgen]] +== Stepgen(((stepgen))) This component provides software based generation of step pulses in response to position or velocity commands. In position mode, it has a @@ -20,13 +20,10 @@ step type '0', (step and direction). The second is for step type '1' control, and the third one shows velocity mode. Control mode and step type are set independently, and any combination can be selected. -(((Stepgen Block Diagram))) -.Step Pulse Generator Block Diagram position mode - +.Step Pulse Generator Block Diagram position mode(((Stepgen Block Diagram))) image::images/stepgen-block-diag.png[align="center"] .Installing - ---- halcmd: loadrt stepgen step_type= [ctrl_type=] ---- @@ -34,11 +31,11 @@ halcmd: loadrt stepgen step_type= [ctrl_type=] '' 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. '' is a comma separated +determines the stepping type. '' is a comma separated series of 'p' or 'v' characters, to specify position or velocity mode. 'ctrl_type' is optional, if omitted, all of the step generators will be position -mode. +mode. For example: ---- @@ -52,30 +49,27 @@ type '2' (quadrature) and runs in velocity mode. The default value for (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, '' +function(s) at the same time. In the following descriptions, '' is the number of a specific generator. The first generator is number 0. -(((Stepgen Block Diagram))) -.Removing +.Removing ---- halcmd: unloadrt stepgen ---- .Pins - -Each step pulse generator will have only some of these pins, depending on the step type and control type selected. * '(float) stepgen..position-cmd' - Desired motor position, in - position units (position mode only). + position units (position mode only). * '(float) stepgen..velocity-cmd' - Desired motor velocity, in - position units per second (velocity mode only). + position units per second (velocity mode only). * '(s32) stepgen..counts' - Feedback position in counts, - updated by 'capture_position()'. + updated by 'capture_position()'. * '(float) stepgen..position-fb' - Feedback position in - position units, updated by 'capture_position()'. + position units, updated by 'capture_position()'. * '(bit) stepgen..enable' - Enables output steps - when false, - no steps are generated. + no steps are generated. * '(bit) stepgen..step' - Step pulse output (step type 0 only). * '(bit) stepgen..dir' - Direction output (step type 0 only). * '(bit) stepgen..up' - UP pseudo-PWM output (step type 1 only). @@ -86,35 +80,34 @@ on the step type and control type selected. * '(bit) stepgen..phase-D' - Phase D output (step types 5-14 only). * '(bit) stepgen..phase-E' - Phase E output (step types 11-14 only). -.Parameters[[sub:stepgen-parameters]] - +.Parameters[[sec:stepgen-parameters]] * '(float) stepgen..position-scale' - Steps per position unit. - This parameter is used for both output and feedback. + This parameter is used for both output and feedback. * '(float) stepgen..maxvel' - Maximum velocity, in position - units per second. If 0.0, has no effect. + units per second. If 0.0, has no effect. * '(float) stepgen..maxaccel' - Maximum accel/decel rate, in - positions units per second squared. - If 0.0, has no effect. + positions units per second squared. + If 0.0, has no effect. * '(float) stepgen..frequency' - The current step rate, in - steps per second. + steps per second. * '(float) stepgen..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. + type 0 and 1) or minimum time in a + given state (step types 2-14), in nano-seconds. * '(float) stepgen..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 - <> must be enabled. + step pulses (step types 0 and 1 only), in nano-seconds. Set to 0 to + enable the stepgen 'doublefreq' function. To use 'doublefreq' the + <> must be enabled. * '(float) stepgen..dirsetup' - Minimum time from a direction - change to the beginning of the next - step pulse (step type 0 only), in nanoseconds. + change to the beginning of the next + step pulse (step type 0 only), in nanoseconds. * '(float) stepgen..dirhold' - Minimum time from the end of a - step pulse to a direction change - (step type 0 only), in nanoseconds. + step pulse to a direction change + (step type 0 only), in nanoseconds. * '(float) stepgen..dirdelay' - Minimum time any step to a step - in the opposite direction (step - types 1-14 only), in nano-seconds. + in the opposite direction (step + types 1-14 only), in nano-seconds. * '(s32) stepgen..rawcounts' - The raw feedback count, updated - by 'make_pulses()'. + by 'make_pulses()'. In position mode, the values of maxvel and maxaccel are used by the internal position loop to avoid generating step pulse trains that the @@ -137,7 +130,7 @@ generated pulse train. .Step Type 0 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 +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 @@ -145,7 +138,7 @@ multiple of the thread period for the threaed that calls and steplen is 20000, then the step pulses will be 2 x 16 = 32 us 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 +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 @@ -157,7 +150,6 @@ the <> function together with stepgen's 'doublefreq' setting. .Step and Direction Timing - image::images/stepgen-type0.png[align="center"] .Step Type 1 @@ -181,46 +173,38 @@ 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. -.Two-and-Three-Phase Step Types -(((Two and Three Phase))) - +.Two-and-Three-Phase Step Types(((Two and Three Phase))) image::images/stepgen-type2-4.png[align="center"] -.Four-Phase Step Types -(((Four Phase))) - +.Four-Phase Step Types(((Four Phase))) image::images/stepgen-type5-10.png[align="center"] -.Five-Phase Step Types -(((Five Phase))) - -image::images/stepgen-type11-14.png[align="center"] +.Five-Phase Step Types(((Five Phase))) +image::images/stepgen-type11-14.png["Five-Phase Step Types",align="center"] .Functions - The component exports three functions. Each function acts on all of the step pulse generators - running different generators in different threads is not supported. * '(funct) stepgen.make-pulses' - High speed function to generate - and count pulses (no floating point). + and count pulses (no floating point). * '(funct) stepgen.update-freq' - Low speed function does position - to velocity conversion, scaling and limiting. + to velocity conversion, scaling and limiting. * '(funct) stepgen.capture-position' - Low speed function for - feedback, updates latches and scales position. + feedback, updates latches and scales position. The high speed function 'stepgen.make-pulses' should be run in a very fast thread, from 10 to 50 us depending on the capabilities of the computer. That thread's period determines the - maximum step frequency, since 'steplen', 'stepspace', 'dirsetup', +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. -[[sec:pwmgen]] (((PWMgen))) - -== PWMgen +[[sec:pwmgen]] +== PWMgen(((PWMgen))) This component provides software based generation of PWM (Pulse Width Modulation) and PDM (Pulse Density Modulation) waveforms. It is a @@ -229,7 +213,6 @@ PWM frequencies from a few hundred Hertz at pretty good resolution, to perhaps 10KHz with limited resolution. .Installing - ---- loadrt pwmgen output_type= ---- @@ -250,77 +233,72 @@ loadrt pwmgen output_type=0,1,2 ---- .Removing - ---- unloadrt pwmgen ---- .Output Types - The PWM generator supports three different 'output types'. * '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). + negative values are treated as zero (and will be affected by the parameter + 'min-dc' if it is non-zero). * '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 <> component - to convert your PWM signal to positive value when a negative input is input. + 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 <> component + to convert your PWM signal to positive value when a negative input is input. * '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. + 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. .Pins - Each PWM generator will have the following pins: * '(float) pwmgen..value' - Command value, in arbitrary units. - Will be scaled by the 'scale' parameter (see below). + Will be scaled by the 'scale' parameter (see below). * '(bit) pwmgen..enable' - Enables or disables the PWM - generator outputs. + generator outputs. Each PWM generator will also have some of these pins, depending on the output type selected: * '(bit) pwmgen..pwm' - PWM (or PDM) output, (output types 0 - and 1 only). + and 1 only). * '(bit) pwmgen..dir' - Direction output (output type 1 only). * '(bit) pwmgen..up' - PWM/PDM output for positive input value - (output type 2 only). -* '(bit) pwmgen..down' - PWM/PDM output for negative input - value (output type 2 only). + (output type 2 only). +* '(bit) pwmgen..down' - PWM/PDM output for negative input value + (output type 2 only). .Parameters - * '(float) pwmgen..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..value is 4000 then it will - be 100% duty-cycle (always on). If the value is 2000 then it will be a 50% - 25Hz square wave. + from arbitrary units to duty cycle. For example if scale is set to 4000 + and the input value passed to the pwmgen..value is 4000 then it will + be 100% duty-cycle (always on). If the value is 2000 then it will be a 50% + 25Hz square wave. * '(float) pwmgen..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. + 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. * '(bit) pwmgen..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. + 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. * '(float) pwmgen..min-dc' - Minimum duty cycle, between 0.0 - and 1.0 (duty cycle will go to - zero when disabled, regardless of this setting). + and 1.0 (duty cycle will go to + zero when disabled, regardless of this setting). * '(float) pwmgen..max-dc' - Maximum duty cycle, between 0.0 - and 1.0. + and 1.0. * '(float) pwmgen..curr-dc' - Current duty cycle - after all - limiting and rounding (read only). + limiting and rounding (read only). .Functions - The component exports two functions. Each function acts on all of the PWM generators - running different generators in different threads is not supported. @@ -332,17 +310,16 @@ not supported. 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 25Hz 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 + 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) * '(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. -[[sec:encoder]](((encoder))) - -== Encoder +[[sec:encoder]] +== Encoder(((encoder))) This component provides software based counting of signals from quadrature (or single-pulse) encoders. It is a realtime component only, @@ -359,112 +336,115 @@ second or 50 us between counts. The Encoder Counter Block Diagram is a block diagram of one channel of an encoder counter. -(((Encoder Block Diagram))) - -.Encoder Counter Block Diagram - -image::images/encoder-block-diag.png[align="center"] +.Encoder Counter Block Diagram(((Encoder Block Diagram))) +//image::images/encoder-block-diag.png[align="center"] .Installing - ---- halcmd: loadrt encoder [num_chan=] ---- '' is the number of encoder counters that you want to install. If 'numchan' is not specified, three counters will be -installed. The maximum +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, '' is the number +the same time. In the following descriptions, '' is the number of a specific counter. The first counter is number 0. .Removing - ---- halcmd: unloadrt encoder ---- .Pins - * 'encoder..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. -* 'encoder..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. + 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. +* 'encoder..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. + * 'encoder..counts' (s32, Out) - Position in encoder counts. * 'encoder..counts-latched' (s32, Out) - Not used at this time. * 'encoder..index-enable' (bit, I/O) - When True, 'counts' and - 'position are' reset to zero on next rising edge of Phase Z. 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. + 'position are' reset to zero on next rising edge of Phase Z. + +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. + * 'encoder..latch-falling' (bit, In) (default: TRUE) - Not used - at this time. + at this time. * 'encoder..latch-input' (bit, In) (default: TRUE) - Not used at - this time. + this time. * 'encoder..latch-rising' (bit, In) - Not used at this time. * 'encoder..min-speed-estimate' (float, in) - Determine the - minimum true velocity magnitude at which - velocity will be estimated as nonzero and postition-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. + minimum true velocity magnitude at which + velocity will be estimated as nonzero and postition-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. + * 'encoder..phase-A' (bit, In) - Phase A of the quadrature encoder signal. * 'encoder..phase-B' (bit, In) - Phase B of the quadrature encoder signal. * 'encoder..phase-Z' (bit, In) - Phase Z (index pulse) of the quadrature encoder signal. * 'encoder..position' (float, Out) - Position in scaled units (see 'position-scale'). * 'encoder..position-interpolated' (float, Out) - Position in - scaled units, interpolated between - encoder counts. 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. - 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. + scaled units, interpolated between encoder counts. + +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. +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. + * 'encoder..position-latched (float, Out)' - Not used at this time. * 'encoder..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. + 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. * 'encoder..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. + by update-counters. This value is + updated more frequently than counts and position. It is also unaffected + by reset or the index pulse. * 'encoder..reset' (bit, In) - When True, force 'counts' and - 'position' to zero immediately. + 'position' to zero immediately. * 'encoder..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. + 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. * 'encoder..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. + 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. .Parameters -* 'encoder..capture-position.time (s32, RO)' +* 'encoder..capture-position.time (s32, RO)' * 'encoder..capture-position.tmax (s32, RW)' * 'encoder..update-counters.time (s32, RO)' * 'encoder..update-counter.tmax (s32, RW)' @@ -476,13 +456,12 @@ encoder counters - running different counters in different threads is not supported. * '(funct) encoder.update-counters' - High speed function to count - pulses (no floating point). + pulses (no floating point). * '(funct) encoder.capture-position' - Low speed function to update - latches and scale position. + latches and scale position. -[[sec:pid]](((PID))) - -== PID +[[sec:pid]] +== PID(((PID))) This component provides Proportional/Integral/Derivative control loops. It is a realtime component only. For simplicity, this discussion @@ -491,14 +470,11 @@ 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. -[[fig:pid-block-diag]] (((PID Block Diagram))) - -.PID Loop Block Diagram - +[[fig:pid-block-diag]] +.PID Loop Block Diagram(((PID Block Diagram))) image::images/pid-block-diag.png[align="center"] .Installing - ---- halcmd: loadrt pid [num_chan=] [debug=1] ---- @@ -507,7 +483,7 @@ halcmd: loadrt pid [num_chan=] [debug=1] '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, '' is the loop +independent. In the following descriptions, '' is the loop number of a specific loop. The first loop is number 0. If 'debug=1' is specified, the component will export a few extra @@ -517,21 +493,19 @@ pins are not exported, to save shared memory space and avoid cluttering the pin list. .Removing - ---- halcmd: unloadrt pid ---- .Pins - The three most important pins are * '(float) pid..command' - The desired position, as - commanded by another system component. + commanded by another system component. * '(float) pid..feedback' - The present position, as - measured by a feedback device such as an encoder. + measured by a feedback device such as an encoder. * '(float) pid..output' - A velocity command that attempts - to move from the present position to the desired position. + to move from the present position to the desired position. For a position loop, 'command' and 'feedback' are in position units. For a linear axis, this could be inches, mm, meters, or whatever is @@ -548,32 +522,32 @@ general operation of the component. * '(float) pid..error' - Equals '.command' minus '.feedback'. * '(bit) pid..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. + '.enable' is false, all integrators are reset, and the output is + forced to zero. If '.enable' is true, the loop operates normally. Pins used to report saturation. Saturation occurs when the output of the PID block is at its maximum or minimum limit. * '(bit) pid..saturated' - True when output is saturated. -* '(float) pid..saturated_s' - The time the output has been saturated. -* '(s32) pid..saturated_count' - The time the output has been saturated. +* '(float) pid..saturated_s' - The time the output has been saturated. +* '(s32) pid..saturated_count' - The time the output has been saturated. 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. -* '(float) pid..Pgain' - Proportional gain -* '(float) pid..Igain' - Integral gain -* '(float) pid..Dgain' - Derivative gain -* '(float) pid..bias' - Constant offset on output +* '(float) pid..Pgain' - Proportional gain +* '(float) pid..Igain' - Integral gain +* '(float) pid..Dgain' - Derivative gain +* '(float) pid..bias' - Constant offset on output * '(float) pid..FF0' - Zeroth order feedforward - output - proportional to command (position). + proportional to command (position). * '(float) pid..FF1' - First order feedforward - output - proportional to derivative of command (velocity). + proportional to derivative of command (velocity). * '(float) pid..FF2' - Second order feedforward - output - proportional to 2nd derivative - of command (acceleration). -* '(float) pid..deadband' - Amount of error that will be ignored + proportional to 2nd derivative + of command (acceleration). +* '(float) pid..deadband' - Amount of error that will be ignored * '(float) pid..maxerror' - Limit on error * '(float) pid..maxerrorI' - Limit on error integrator * '(float) pid..maxerrorD' - Limit on error derivative @@ -590,14 +564,13 @@ additional pins will be exported: * '(float) pid..commandDD' - 2nd derivative of the command. .Functions - 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. -* '(funct) pid..do_pid_calcs' - Performs all calculations - for a single PID loop. +* '(funct) pid..do_pid_calcs' - Performs all calculations + for a single PID loop. If you want to understand the exact algorithm used to compute the output of the PID loop, refer to figure <>, the @@ -605,16 +578,14 @@ 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()'. -[[sec:simulated-encoder]](((Simulated Encoder))) - -== Simulated Encoder +[[sec:simulated-encoder]] +== Simulated Encoder(((Simulated Encoder))) 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. .Installing - ---- halcmd: loadrt sim-encoder num_chan= ---- @@ -624,15 +595,13 @@ specified, one encoder will be installed. The maximum number is 8 (as defined by MAX_CHAN in sim_encoder.c). .Removing - ---- halcmd: unloadrt sim-encoder ---- .Pins - * '(float) sim-encoder..speed' - The speed command for the - simulated shaft. + simulated shaft. * '(bit) sim-encoder..phase-A' - Quadrature output. * '(bit) sim-encoder..phase-B' - Quadrature output. * '(bit) sim-encoder..phase-Z' - Index pulse output. @@ -640,37 +609,33 @@ halcmd: unloadrt sim-encoder When '.speed' is positive, '.phase-A' leads '.phase-B'. .Parameters - * '(u32) sim-encoder..ppr' - Pulses Per Revolution. * '(float) sim-encoder..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. +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. 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. .Functions - The component exports two functions. Each function affects all simulated encoders. * '(funct) sim-encoder.make-pulses' - High speed function to - generate quadrature pulses (no floating point). + generate quadrature pulses (no floating point). * '(funct) sim-encoder.update-speed' - Low speed function to read - 'speed', do scaling, and set up 'make-pulses'. - -[[sec:debounce]] (((debounce))) + 'speed', do scaling, and set up 'make-pulses'. -== Debounce +[[sec:debounce]] +== Debounce(((debounce))) 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. .Installing - ---- halcmd: loadrt debounce cfg= ---- @@ -700,20 +665,17 @@ first filter is group 0, filter 0. .Removing - ---- halcmd: unloadrt debounce ---- .Pins - Each individual filter has two pins. * '(bit) debounce...in' - Input of filter '' in group ''. * '(bit) debounce...out' - Output of filter '' in group ''. .Parameters - 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 @@ -736,15 +698,13 @@ updated from different threads at different periods. * '(funct) debounce.' - Updates all filters in group ''. -[[sec:siggen]](((Siggen))) - -== Siggen +[[sec:siggen]] +== Siggen(((Siggen))) Siggen is a realtime component that generates square, triangle, and sine waves. It is primarily used for testing. .Installing - ---- halcmd: loadrt siggen [num_chan=] ---- @@ -753,18 +713,16 @@ halcmd: loadrt siggen [num_chan=] 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, +generator is completely independent. In the following descriptions, '' is the number of a specific signal generator (the numbers start at 0). .Removing - ---- halcmd: unloadrt siggen ---- .Pins - Each generator has five output pins. * '(float) siggen..sine' - Sine wave output. @@ -778,11 +736,11 @@ All five outputs have the same frequency, amplitude, and offset. In addition to the output pins, there are three control pins: * '(float) siggen..frequency' - Sets the frequency in Hertz, - default value is 1 Hz. + default value is 1 Hz. * '(float) siggen..amplitude' - Sets the peak amplitude of the - output waveforms, default is 1. + output waveforms, default is 1. * '(float) siggen..offset' - Sets DC offset of the output - waveforms, default is 0. + waveforms, default is 0. 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' @@ -790,25 +748,21 @@ is 2.5 and 'siggen.0.offset' is 10.0, then the outputs will swing from 7.5 to 12.5. .Parameters - None. footnote:[Prior to version 2.1, frequency, amplitude, and offset were parameters. They were changed to pins to allow control by other components.] .Functions - * '(funct) siggen..update' - Calculates new values for all five outputs. -[[sec:lut5]](((lut5))) - -== lut5 +[[sec:lut5]] +== lut5(((lut5))) The lut5 component is a 5 input logic component based on a look up table. * 'lut5' does not require a floating point thread. .Installing - ---- loadrt lut5 [count=N|names=name1[,name2...]] addf lut5.N servo-thread | base-thread @@ -816,7 +770,6 @@ setp lut5.N.function 0xN ---- .Computing Function - 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 @@ -826,7 +779,7 @@ hexadecimal and that will be the value for function. .Look Up Table [width="50%",cols="6*^",options="header"] -|==================================== +|=== |Bit 4|Bit 3|Bit 2|Bit 1|Bit 0|Output |0|0|0|0|0| |0|0|0|0|1| @@ -860,22 +813,21 @@ hexadecimal and that will be the value for function. |1|1|1|0|1| |1|1|1|1|0| |1|1|1|1|1| -|==================================== +|=== .Two Input Example - In the following table we have selected the output state for each line that we wish to be true. .Look Up Table [width="50%",cols="6*^",options="header"] -|==================================== +|=== |Bit 4|Bit 3|Bit 2|Bit 1|Bit 0|Output |0|0|0|0|0|0 |0|0|0|0|1|1 |0|0|0|1|0|0 |0|0|0|1|1|1 -|==================================== +|=== 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 @@ -883,4 +835,3 @@ when Bit 0 or Bit 0 and Bit1 is on and nothing else. The binary number is calculator then change the display to hexadecimal and the number needed for function is '0xa'. The hexadecimal prefix is '0x'. - diff --git a/docs/src/hal/rtcomps_es.adoc b/docs/src/hal/rtcomps_es.adoc index 32aaba4d09d..3a549a38261 100644 --- a/docs/src/hal/rtcomps_es.adoc +++ b/docs/src/hal/rtcomps_es.adoc @@ -1,12 +1,10 @@ :lang: es [[cha:realtime-components]] - = Descripciones de Componentes HAL -[[sec:stepgen]] (((stepgen))) - -== Stepgen +[[sec:stepgen]] +== Stepgen(((stepgen))) Este componente proporciona generación de pulsos de paso, basada en software, en respuesta a comandos de posición o velocidad. En el modo posición tiene @@ -22,14 +20,11 @@ pasos tipo '0', (paso y dirección). El segundo es para el tipo de paso '1' y el tercero muestra el modo de velocidad. El modo de control y tipo de paso se configuran de forma independiente y se puede seleccionar cualquier combinación. -(((Stepgen Block Diagram))) - -.Diagramas de bloques del generador de pulsos, modo posición. +.Diagramas de bloques del generador de pulsos, modo posición.(((Stepgen Block Diagram))) image::images/stepgen-block-diag.png[align="center"] .Instalación - ---- halcmd: loadrt stepgen step_type= [ctrl_type=] ---- @@ -41,6 +36,7 @@ serán modo posición. '' es una serie de caracteres 'p' o 'v', separados por comas, para especificar modo posición o modo velocidad. Por ejemplo: + ---- halcmd: loadrt stepgen step_type=0,0,2 ctrl_type=p,p,v ---- @@ -53,62 +49,58 @@ instalará tres generadores de pasos. Los dos primeros usan el tipo de paso '0' Cada generador es independiente, pero todos son actualizados por la(s) misma(s) función(es) al mismo tiempo. En las siguientes descripciones, '' es el número de un generador específico. El primer generador es el número 0. -(((Stepgen Block Diagram))) .Eliminacion - ---- halcmd: unloadrt stepgen ---- .Pines - Cada generador de pulsos de paso tendrá varios de estos pines, dependiendo del tipo de paso y el tipo de control seleccionado: -* '(float) stepgen..position-cmd' - Posición deseada del motor, en + * '(float) stepgen..position-cmd' - Posición deseada del motor, en unidades de posición (para modo posición solamente). -* '(float) stepgen..velocity-cmd' - Velocidad deseada del motor, en + * '(float) stepgen..velocity-cmd' - Velocidad deseada del motor, en unidades de posición por segundo (para modo velocidad solamente). -* '(s32) stepgen..counts' - Posición de retroalimentación en conteos, + * '(s32) stepgen..counts' - Posición de retroalimentación en conteos, actualizado por 'capture_position()'. -* '(float) stepgen..position-fb' - Posición de retroalimentación en + * '(float) stepgen..position-fb' - Posición de retroalimentación en unidades de posición, actualizadas por 'capture_position()'. -* '(bit) stepgen..enable' - Habilita la salida de pasos. Cuando es falso, + * '(bit) stepgen..enable' - Habilita la salida de pasos. Cuando es falso, no se generan pasos -* '(bit) stepgen..step' - Salida de pulso de pasos (pasos tipo 0 solamente). -* '(bit) stepgen..dir' - Salida de pulso de dirección (pasos tipo 0 solamente). -* '(bit) stepgen..up' - Salida UP pseudo-PWM (pasos tipo 1 solamente). -* '(bit) stepgen..down' - Salida DOWN pseudo-PWM (paso tipo 1 solamente). -* '(bit) stepgen..phase-A' - Salida de fase A (tipos de paso 2-14 solamente). -* '(bit) stepgen..phase-B' - Salida de fase B (tipos de paso 2-14 solamente). -* '(bit) stepgen..phase-C' - Salida de fase C (tipos de paso 3-14 solamente). -* '(bit) stepgen..phase-D' - Salida de fase D (tipos de paso 5-14 solamente). -* '(bit) stepgen..phase-E' - Salida de fase E (tipos de pasos 11-14 solamente). - -.Parametros[[sub:stepgen-parameters]] - -* '(float) stepgen..position-scale' - Pasos por unidad de posición. + * '(bit) stepgen..step' - Salida de pulso de pasos (pasos tipo 0 solamente). + * '(bit) stepgen..dir' - Salida de pulso de dirección (pasos tipo 0 solamente). + * '(bit) stepgen..up' - Salida UP pseudo-PWM (pasos tipo 1 solamente). + * '(bit) stepgen..down' - Salida DOWN pseudo-PWM (paso tipo 1 solamente). + * '(bit) stepgen..phase-A' - Salida de fase A (tipos de paso 2-14 solamente). + * '(bit) stepgen..phase-B' - Salida de fase B (tipos de paso 2-14 solamente). + * '(bit) stepgen..phase-C' - Salida de fase C (tipos de paso 3-14 solamente). + * '(bit) stepgen..phase-D' - Salida de fase D (tipos de paso 5-14 solamente). + * '(bit) stepgen..phase-E' - Salida de fase E (tipos de pasos 11-14 solamente). + +.Parametros[[sec:stepgen-parameters]] + * '(float) stepgen..position-scale' - Pasos por unidad de posición. Este parámetro se usa tanto por la salida como por la retroalimentación. -* '(float) stepgen..maxvel' - Velocidad máxima, en unidades de posición + * '(float) stepgen..maxvel' - Velocidad máxima, en unidades de posición por segundo. Si es 0.0, no tiene efecto. -* '(float) stepgen..maxaccel' - Tasa máxima de aceleración/desaceleración, en + * '(float) stepgen..maxaccel' - Tasa máxima de aceleración/desaceleración, en unidades de posicion por segundo al cuadrado. Si es 0.0, no tiene efecto. -* '(float) stepgen..frequency' - Frecuencia actual de pasos, en + * '(float) stepgen..frequency' - Frecuencia actual de pasos, en pasos por segundo. -* '(float) stepgen..steplen' - Duración de un pulso de paso (pasos + * '(float) stepgen..steplen' - Duración de un pulso de paso (pasos tipo 0 y 1) o tiempo mínimo en un estado dado (tipos de pasos 2-14), en nanosegundos. -* '(float) stepgen..stepspace' - Espacio mínimo entre dos + * '(float) stepgen..stepspace' - Espacio mínimo entre dos pulsos de paso (tipos de pasos 0 y 1 solamente), en nanosegundos. Establecer a 0 para habilitar la función stepgen 'doublefreq'. Para usar 'doublefreq' la <> debe estar habilitada. -* '(float) stepgen..dirsetup' - Tiempo mínimo desde un cambio de dirección + * '(float) stepgen..dirsetup' - Tiempo mínimo desde un cambio de dirección hasta el comienzo del siguiente pulso de paso (pasos tipo 0 solamente), en nanosegundos. -* '(float) stepgen..dirhold' - Tiempo mínimo desde el final de un + * '(float) stepgen..dirhold' - Tiempo mínimo desde el final de un pulso de paso hasta un cambio de dirección (pasos tipo 0 solamente), en nanosegundos. -* '(float) stepgen..dirdelay' - Minimo tiempo entre cualquier paso a un paso + * '(float) stepgen..dirdelay' - Minimo tiempo entre cualquier paso a un paso en la dirección opuesta (paso tipos 1-14 solamente), en nanosegundos. -* '(s32) stepgen..rawcounts' - conteo de retroalimentacion sin procesar, actualizado + * '(s32) stepgen..rawcounts' - conteo de retroalimentacion sin procesar, actualizado por 'make_pulses()'. En el modo posición, los valores de 'maxvel' y 'maxaccel' son utilizados por el @@ -149,7 +141,6 @@ la función <> junto con la configuración 'doublefreq' de stepgen. .Temporizado de Paso y Dirección - image::images/stepgen-type0.png[align="center"] .Pasos Tipo 1 @@ -173,32 +164,25 @@ como una función del contador de estado. La frecuencia máxima es 1.000.000.000 divididos por 'steplen', y como en los otros modos, 'maxfreq' se reducirá si está por encima del límite. -.Tipos de pasos de dos y tres fases -(((Dos y Tres Fases))) - +.Tipos de pasos de dos y tres fases(((Dos y Tres Fases))) image::images/stepgen-type2-4.png[align="center"] -.Tipos de pasos de cuatro fases -(((Cuatro Fases))) - +.Tipos de pasos de cuatro fases(((Cuatro Fases))) image::images/stepgen-type5-10.png[align="center"] -.Fases de paso de cinco fases -(((Cinco Fases))) - +.Fases de paso de cinco fases(((Cinco Fases))) image::images/stepgen-type11-14.png[align="center"] .Funciones - El componente exporta tres funciones. Cada función actúa en todos los generadores de impulsos de pasos. No esta soportado ejecutar diferentes generadores en diferentes hilos. -* '(funct) stepgen.make-pulses' - Función de alta velocidad para generar + * '(funct) stepgen.make-pulses' - Función de alta velocidad para generar y contar pulsos (sin punto flotante). -* '(funct) stepgen.update-freq' - Función de baja velocidad para conversión de posición + * '(funct) stepgen.update-freq' - Función de baja velocidad para conversión de posición a velocidad, escala y limitación. -* '(funct) stepgen.capture-position' - Función de baja velocidad para + * '(funct) stepgen.capture-position' - Función de baja velocidad para retroalimentación, actualizaciones de latches y escalado de posición. La función de alta velocidad 'stepgen.make-pulses' debe ejecutarse en un @@ -208,9 +192,8 @@ capacidades de la computadora. El período de ese hilo determina la 'dirhold' y 'dirdelay' se redondean a un múltiplo entero del periodo del hilo en nanosegundos. Las otras dos funciones se pueden llamar a una tasa mucho más baja. -[[sec:pwmgen]] (((PWMgen))) - -== PWMgen +[[sec:pwmgen]] +== PWMgen(((PWMgen))) Este componente proporciona generación de PWM (modulacion de ancho de pulso) basada en software y formas de onda PDM (Modulación de Densidad de Pulso). Es un @@ -219,7 +202,6 @@ frecuencias PWM de unos pocos cientos de hercios con una resolución bastante bu quizás 10KHz con resolución limitada. .Instalación - ---- loadrt pwmgen output_type= ---- @@ -240,76 +222,71 @@ loadrt pwmgen output_type=0,1,2 ---- .Eliminacion - ---- unloadrt pwmgen ---- .Tipos de salida - El generador PWM admite tres diferentes 'tipos de salida'. -* 'Tipo de salida 0' - un solo pin de salida PWM. Solo se aceptan comandos positivos; + * 'Tipo de salida 0' - un solo pin de salida PWM. Solo se aceptan comandos positivos; los valores negativos se tratan como cero (y se verán afectados por el parámetro 'min-dc' si no son cero). -* 'Tipo de salida 1' - pines PWM/PDM y de dirección. Entradas positivas y negativas + * 'Tipo de salida 1' - pines PWM/PDM y de dirección. Entradas positivas y negativas saldran como PWM positivo y negativo. El pin de dirección es FALSO para comandos positivos, y VERDADERO para comandos negativos. Si su control necesita PWM positivo para CW y CCW, use el componente <> para convertir su señal PWM a un valor positivo cuando se ingrese una entrada negativa. -* 'Tipo de salida 2' - Pines UP y DOWN. Para comandos positivos, la señal PWM + * 'Tipo de salida 2' - Pines UP y DOWN. Para comandos positivos, la señal PWM aparece en la salida up, y la salida down permanece en FALSO. Para comandos negativos , la señal PWM aparece en la salida down, y la salida up sera FALSO. El tipo de salida 2 es el adecuado para conducir la mayoría de puentes H. .Pines - Cada generador de PWM tendrá los siguientes pines: -* '(float) pwmgen..value' - Valor de comando, en unidades arbitrarias. + * '(float) pwmgen..value' - Valor de comando, en unidades arbitrarias. Será escalado por el parámetro 'scale' (ver a continuación). -* '(bit) pwmgen..enable' - Activa o desactiva las + * '(bit) pwmgen..enable' - Activa o desactiva las salidas del generador PWM. Cada generador PWM también tendrá algunos de estos pines, dependiendo del tipo de salida seleccionado: -* '(bit) pwmgen..pwm' - Salida PWM (o PDM), (tipos de salida 0 + * '(bit) pwmgen..pwm' - Salida PWM (o PDM), (tipos de salida 0 y 1 solo). -* '(bit) pwmgen..dir' - Salida de dirección (salida tipo 1 solamente). -* '(bit) pwmgen..up' - Salida PWM/PDM para un valor de entrada positivo + * '(bit) pwmgen..dir' - Salida de dirección (salida tipo 1 solamente). + * '(bit) pwmgen..up' - Salida PWM/PDM para un valor de entrada positivo (salida tipo 2 solamente). -* '(bit) pwmgen..down' - Salida PWM/PDM para un valor de entrada negativa + * '(bit) pwmgen..down' - Salida PWM/PDM para un valor de entrada negativa (salida tipo 2 solamente). .Parámetros - -* '(float) pwmgen..scale' - Factor de escala para convertir 'value' + * '(float) pwmgen..scale' - Factor de escala para convertir 'value' desde unidades arbitrarias hasta valores de ciclo de trabajo. Por ejemplo, si la escala está configurada en 4000 y el valor de entrada pasado a pwmgen..value es 4000, se tomara el 100% duty-cycle (siempre activado). Si el valor es 2000, entonces será un 50% -* '(float) pwmgen..pwm-freq' - Frecuencia PWM deseada, en Hz. + * '(float) pwmgen..pwm-freq' - Frecuencia PWM deseada, en Hz. Si es 0.0, genera PDM en lugar de PWM. Si se establece más alto que los límites internos, la próxima llamada de 'update_freq()' lo establecerá en el límite interno. Si no es cero, y 'dither' es falso, la próxima llamada de 'update_freq()' lo configurará en el múltiplo entero más cercano del período de la función 'make_pulses ()'. -* '(bit) pwmgen..dither-pwm' - Si es verdadero, permite el tramado para + * '(bit) pwmgen..dither-pwm' - Si es verdadero, permite el tramado para alcanzar una frecuencia promedio PWM o ciclos de trabajo que no se pueden obtener con PWM puro. Si es falso, tanto la frecuencia PWM y el ciclo de trabajo se redondearán a valores que pueden ser logrados exactamente. -* '(float) pwmgen..min-dc' - Ciclo de trabajo mínimo, entre 0.0 + * '(float) pwmgen..min-dc' - Ciclo de trabajo mínimo, entre 0.0 y 1.0 (ciclo de trabajo irá a cero cuando está deshabilitado, independientemente de esta configuración). -* '(float) pwmgen..max-dc' - Ciclo de trabajo máximo, entre 0.0 + * '(float) pwmgen..max-dc' - Ciclo de trabajo máximo, entre 0.0 y 1.0. -* '(float) pwmgen..curr-dc' - Ciclo de trabajo actual - después de toda + * '(float) pwmgen..curr-dc' - Ciclo de trabajo actual - después de toda limitación y redondeo (solo lectura). .Funciones - El componente exporta dos funciones. Cada función actúa en todos los generadores PWM. No esta soportado ejecutar diferentes generadores en diferentes hilos @@ -327,9 +304,8 @@ generadores PWM. No esta soportado ejecutar diferentes generadores en diferentes matemática más complicada para calcular en cuántos periodos base el resultado debe ser alto, y en cuántos debe ser bajo. -[[sec:encoder]] (((encoder))) - -== Encoder +[[sec:encoder]] +== Encoder(((encoder))) Este componente proporciona un conteo, basado en software, de señales de encoders de cuadratura. Es un componente en tiempo real, y dependiendo de @@ -345,14 +321,10 @@ segundo o 50 us entre cuentas. El diagrama de bloques del encoder contador es un diagrama de un canal de encoder. -(((Diagrama de bloque del codificador))) - -.Diagrama de bloque de contador codificador - +.Diagrama de bloque de contador codificador(((Diagrama de bloque del codificador))) image::images/encoder-block-diag.png[align="center"] .Instalación - ---- halcmd: loadrt encoder [num_chan=] ---- @@ -371,38 +343,37 @@ halcmd: unloadrt encoder ---- .Pines - -* 'encoder..counter-mode' (bit, I/O) (predeterminado: FALSE) - Habilita el + * 'encoder..counter-mode' (bit, I/O) (predeterminado: FALSE) - Habilita el modo contador. Cuando es VERDADERO, el contador cuenta cada flanco ascendente de la entrada de la fase A, ignorando el valor en la fase B. Esto es útil para contar la salida de un solo canal del sensor (sin cuadratura). Cuando es FALSO, cuenta en modo cuadratura. -* 'encoder..counts' (s32, salida) - Posición, en conteos del codificador. -* 'encoder..counts-latched' (s32, salida) - No se usa en este momento. -* 'encoder..index-enable' (bit, I/O) - Cuando es VERDADERO, 'counts' y + * 'encoder..counts' (s32, salida) - Posición, en conteos del codificador. + * 'encoder..counts-latched' (s32, salida) - No se usa en este momento. + * 'encoder..index-enable' (bit, I/O) - Cuando es VERDADERO, 'counts' y 'position' se resetean a cero en el siguiente flanco ascendente de la Fase Z. Al mismo tiempo, 'index-enable' se resetea a cero para indicar que el flanco ascendente ha aparecido. El pin es bidireccional. Si 'index-enable' es FALSO, el canal de la fase Z del codificador será ignorado, y el contador contará normalmente. El controlador del codificador nunca pondra 'index-enable' en VERDADERO, pero otros componentes puede hacerlo. -* 'encoder..latch-falling' (bit, entrada) (predeterminado: TRUE) - No utilizado + * 'encoder..latch-falling' (bit, entrada) (predeterminado: TRUE) - No utilizado en este momento. -* 'encoder..latch-input' (bit, entrada) (predeterminado: TRUE) - No utilizado + * 'encoder..latch-input' (bit, entrada) (predeterminado: TRUE) - No utilizado en este momento. -* 'encoder..latch-rising' (bit, entrada) - No se usa en este momento. -* 'encoder..min-speed-estimate' (float, entrada) - Determina la + * 'encoder..latch-rising' (bit, entrada) - No se usa en este momento. + * 'encoder..min-speed-estimate' (float, entrada) - Determina la magnitud de velocidad verdadera mínima a la cual la velocidad se estimará como distinta de cero, y 'position-interpolated' es interpolada. Las unidades de 'min-speed-estimate' son las mismas que unidades de 'velocity'. El factor de escala, en cuentas por unidad de longitud. Ajustar este parámetro demasiado bajo hará que tome mucho tiempo el que la velocidad pase a 0 después de que los impulsos del encoder han dejado de llegar. -* 'encoder..phase-A' (bit, entrada) - Fase A de la señal del codificador en cuadratura. -* 'encoder..phase-B' (bit, entrada) - Fase B de la señal del codificador en cuadratura. -* 'encoder..phase-Z' (bit, entrada) - Fase Z (pulso de índice) de la señal del codificador en cuadratura. -* 'encoder..position' (float, salida) - Posición en unidades escaladas (ver 'position-scale'). -* 'encoder..position-interpolated' (float, salida) - Posición en unidades escaladas, interpoladas entre + * 'encoder..phase-A' (bit, entrada) - Fase A de la señal del codificador en cuadratura. + * 'encoder..phase-B' (bit, entrada) - Fase B de la señal del codificador en cuadratura. + * 'encoder..phase-Z' (bit, entrada) - Fase Z (pulso de índice) de la señal del codificador en cuadratura. + * 'encoder..position' (float, salida) - Posición en unidades escaladas (ver 'position-scale'). + * 'encoder..position-interpolated' (float, salida) - Posición en unidades escaladas, interpoladas entre cuenta del codificador. La 'posición interpolada' intenta interpolar entre cuentas del codificador, basandose ​​en la mayor velocidad medida reciente. Solo válido cuando la velocidad es aproximadamente @@ -411,30 +382,29 @@ halcmd: unloadrt encoder Sin embargo, permite usar un codificador de pocos impulsos (incluido un impulso por revolución) para roscado en el torno, y puede tener otros usos también. -* 'encoder..position-latched (float, salida)' - No utilizado en este momento. -* 'encoder..position-scale (float, I/O)' - Factor de escala, en + * 'encoder..position-latched (float, salida)' - No utilizado en este momento. + * 'encoder..position-scale (float, I/O)' - Factor de escala, en cuentas por unidad de longitud. Por ejemplo, si la escala de posición es 500, entonces 1000 conteos del codificador se reportarán como una posición de 2.0 unidades. -* 'encoder..rawcounts (s32, entrada)' - Conteo sin procesar, determinado por + * 'encoder..rawcounts (s32, entrada)' - Conteo sin procesar, determinado por la funcion 'update-counters'. Este valor es actualizado con más frecuencia que las cuentas y la posición. Tampoco se ve afectado por un reinicio o pulso de índice. -* 'encoder..reset' (bit, entrada) - Cuando es VERDADERO, fuerza 'count' y + * 'encoder..reset' (bit, entrada) - Cuando es VERDADERO, fuerza 'count' y 'position' a cero de inmediato. -* 'encoder..velocity' (float, salida) - Velocidad en unidades escaladas por segundo. + * 'encoder..velocity' (float, salida) - Velocidad en unidades escaladas por segundo. Se utiliza un algoritmo que reduce en gran medida la cuantificación de ruido comparado con una simple diferenciacion de la salida de 'position'. Cuando la magnitud de la verdadera velocidad está por debajo de la estimación de velocidad mínima, la salida de velocidad es 0. -* 'encoder..x4-mode (bit, I/O) (predeterminado: TRUE)' - Habilita el + * 'encoder..x4-mode (bit, I/O) (predeterminado: TRUE)' - Habilita el modo 4x. Cuando es VERDADERO, el contador cuenta cada borde de la forma de onda en cuadratura (cuatro cuentas por ciclo completo). Cuando es falso, solo cuenta una vez por ciclo completo. Cuando es FALSO, este parámetro es ignorado. El modo 1x es útil para algunos jogwheels. .Parámetros - * 'encoder..capture-position.time (s32, RO)' * 'encoder..capture-position.tmax (s32, RW)' * 'encoder..update-counters.time (s32, RO)' @@ -450,9 +420,8 @@ contadores de encoder - no esta soportado ejecutar diferentes contadores en dife * '(funct) encoder.capture-position' - Función de baja velocidad para actualizar latches y escala de posición. -[[sec:pid]] (((PID))) - -== PID +[[sec:pid]] +== PID(((PID))) Este componente proporciona control Proporcional/Integral/Derivativo en bucles. Es un componente en tiempo real solamente. Para simplificar, esta discusión @@ -461,14 +430,11 @@ componente se puede utilizar para implementar otros ciclos de retroalimentación altura de una antorcha, temperatura, etc. El diagrama de bloque de lazo PID es un diagrama de bloques de un solo bucle PID. -[[fig:pid-block-diag]](((Diagrama de bloques PID))) - -.PID Diagrama de bloque de bucle - +[[fig:pid-block-diag]] +.PID Diagrama de bloque de bucle(((Diagrama de bloques PID))) image::images/pid-block-diag.png[align="center"] .Instalación - ---- halcmd: loadrt pid [num_chan=] [debug=1] ---- @@ -486,20 +452,18 @@ no se exportan, para ahorrar espacio en la memoria compartida y evitar abarrotar la lista de pines. .Eliminacion - ---- halcmd: unloadrt pid ---- .Pines - Los tres pines más importantes son -* '(float) pid..command' - La posición deseada, que sera + * '(float) pid..command' - La posición deseada, que sera la comandada por otro componente del sistema. -* '(float) pid..feedback' - La posición actual, que sera + * '(float) pid..feedback' - La posición actual, que sera la medida por un dispositivo de retroalimentación tal como un encoder. -* '(float) pid..output' - Comando de velocidad que intenta + * '(float) pid..output' - Comando de velocidad que intenta pasar de la posición actual a la posición deseada. Para un bucle de posición, 'command' y 'feedback' están en unidades de posición. @@ -515,8 +479,8 @@ segundo. Cada bucle tiene dos pines que se utilizan para monitorizar o controlar la operación general del componente. -* '(float) pid..error' - Igual a '.command' menos '.feedback'. -* '(bit) pid. .enable' - Un bit que habilita el bucle. Si + * '(float) pid..error' - Igual a '.command' menos '.feedback'. + * '(bit) pid. .enable' - Un bit que habilita el bucle. Si '.enable' es falso, todos los integradores se resetean y la salida es obligada a cero. Si '.enable' es verdadero, el ciclo funciona normalmente. @@ -531,24 +495,24 @@ Las ganancias PID, los límites y otras características 'ajustables' del ciclo disponible como pines para que puedan ajustarse dinámicamente para obtener más posibilidades de ajuste avanzadas. -* '(float) pid..Pgain' - Ganancia proporcional -* '(float) pid..Igain' - Ganancia integral -* '(float) pid..Dgain' - Ganancia derivativa -* '(float) pid..bias' - Offset constante en la salida -* '(float) pid..FF0' - Zeroth Order feedforward - salida + * '(float) pid..Pgain' - Ganancia proporcional + * '(float) pid..Igain' - Ganancia integral + * '(float) pid..Dgain' - Ganancia derivativa + * '(float) pid..bias' - Offset constante en la salida + * '(float) pid..FF0' - Zeroth Order feedforward - salida proporcional al comando (posición). -* '(float) pid..FF1' - First order feedforward - salida + * '(float) pid..FF1' - First order feedforward - salida proporcional a la derivada del comando (velocidad). -* '(float) pid..FF2' - Second order feedforward - salida + * '(float) pid..FF2' - Second order feedforward - salida proporcional a la 2da derivada del comando (aceleración). -* '(float) pid..deadband' - Cantidad de error que se ignorará -* '(float) pid..maxerror' - Límite de error -* '(float) pid..maxerrorI' - Limite en error integrador -* '(float) pid..maxerrorD' - Límite de error derivativo -* '(float) pid..maxcmdD' - Límite de derivada del comando -* '(float) pid..maxcmdDD' - Límite de 2ª derivada del comando -* '(float) pid..maxoutput' - Límite en el valor de salida + * '(float) pid..deadband' - Cantidad de error que se ignorará + * '(float) pid..maxerror' - Límite de error + * '(float) pid..maxerrorI' - Limite en error integrador + * '(float) pid..maxerrorD' - Límite de error derivativo + * '(float) pid..maxcmdD' - Límite de derivada del comando + * '(float) pid..maxcmdDD' - Límite de 2ª derivada del comando + * '(float) pid..maxoutput' - Límite en el valor de salida Si se especificó 'debug=1' cuando el componente se instaló, se exportarán cuatro pines adicionales: @@ -559,13 +523,12 @@ se exportarán cuatro pines adicionales: * '(float) pid..commandDD' - 2da derivada del comando. .Funciones - El componente exporta una función para cada lazo PID. Esta función realiza todos los cálculos necesarios para el ciclo. Como cada ciclo tiene su propia función, los bucles individuales se pueden incluir en diferentes hilos y ejecutar a diferentes velocidades. -* '(funct) pid..do_pid_calcs' - Realiza todos los cálculos + * '(funct) pid..do_pid_calcs' - Realiza todos los cálculos para un solo bucle PID. Si quieres entender el algoritmo exacto utilizado para calcular la @@ -573,16 +536,14 @@ salida del bucle PID, consulte la figura < ---- @@ -592,25 +553,22 @@ especifica, se instalará un solo encoder simulado. El número máximo es 8 ( definido por MAX_CHAN en sim_encoder.c). .Eliminacion - ---- halcmd: unloadrt sim-encoder ---- .Pines - -* '(float) sim-encoder..speed' - El comando de velocidad para el + * '(float) sim-encoder..speed' - El comando de velocidad para el eje simulado. -* '(bit) sim-encoder..phase-A' - Salida de cuadratura. + * '(bit) sim-encoder..phase-A' - Salida de cuadratura. * '(bit) sim-encoder..phase-B' - Salida de cuadratura. -* '(bit) sim-encoder..phase-Z' - Salida de impulsos de índice. + * '(bit) sim-encoder..phase-Z' - Salida de impulsos de índice. Cuando '.speed' es positivo, '.phase-A' precede a '.phase-B'. .Parámetros - -* '(u32) Sim-encoder..ppr' - Impulsos por revolución. -* '(float) Sim-encoder..scale' - Factor de escala para 'speed'. + * '(u32) Sim-encoder..ppr' - Impulsos por revolución. + * '(float) Sim-encoder..scale' - Factor de escala para 'speed'. El valor predeterminado es 1.0, lo que significa que 'speed' está en revoluciones por segundo. Cambie a 60 para RPM, a 360 para grados por segundo, a 6.283185 para radianes por segundo, etc. @@ -624,21 +582,19 @@ los contadores contarán cuatro veces durante un ciclo completo. El componente exporta dos funciones. Cada función afecta a todos los encoder simulados -* '(funct) sim-encoder.make-pulses' - Función de alta velocidad para + * '(funct) sim-encoder.make-pulses' - Función de alta velocidad para generar impulsos de cuadratura (sin punto flotante). -* '(funct) sim-encoder.update-speed' - Función de baja velocidad para leer + * '(funct) sim-encoder.update-speed' - Función de baja velocidad para leer 'speed', escalar y configurar 'make-pulses'. -[[sec:debounce]] (((debounce))) - -== Debounce +[[sec:debounce]] +== Debounce(((debounce))) Debounce es un componente en tiempo real que puede filtrar los rebotes creados por interruptores de contactos mecánicos. También puede ser útil en otras aplicaciones donde los pulsos cortos deben ser rechazados. .Instalación - ---- halcmd: loadrt debounce cfg= ---- @@ -667,20 +623,17 @@ número de grupo y '' es el número de filtro dentro del grupo. El primer filtro es el grupo 0, filtro 0. .Eliminacion - ---- halcmd: unloadrt debounce ---- .Pines - Cada filtro individual tiene dos pines. * '(bit) debounce...in' - Entrada del filtro '' en el grupo ''. * '(bit) debounce...out' - Salida del filtro '' en el grupo ''. .Parámetros - Cada grupo de filtros tiene un parámetro footnote:[Cada filtro individual también tiene una variable de estado interna. Hay un switch en tiempo de compilacion que puede exportar esa variable como parámetro. Esta @@ -695,22 +648,19 @@ Si 'delay' es 4, todos los rebotes menores que o igual a cuatro períodos de hilo serán rechazados. .Funciones - Cada grupo de filtros tiene una función que actualiza todos los filtros en ese grupo 'simultáneamente'. Diferentes grupos de filtros pueden ser actualizado a partir de diferentes hilos en diferentes períodos. * '(funct) debounce.' - Actualiza todos los filtros en el grupo ''. -[[sec:siggen]] (((Siggen))) - -== Siggen +[[sec:siggen]] +== Siggen(((Siggen))) Siggen es un componente en tiempo real que genera ondas cuadradas, triángulares y sinusoidales. Se usa principalmente para pruebas. .Instalación - ---- halcmd: loadrt siggen [num_chan=] ---- @@ -723,13 +673,11 @@ El maximo número de generadores es 16 (como se define en MAX_CHAN en siggen.c). comenzar en 0). .Eliminacion - ---- halcmd: unloadrt siggen ---- .Pines - Cada generador tiene cinco pines de salida. * '(float) siggen..sine' - Salida de onda sinusoidal. @@ -742,11 +690,11 @@ Las cinco salidas tienen la misma frecuencia, amplitud y offset. Además de los pines de salida, hay tres pines de control: -* '(float) siggen..frequency' - Establece la frecuencia en hercios, + * '(float) siggen..frequency' - Establece la frecuencia en hercios, el valor predeterminado es 1 Hz. -* '(float) siggen..amplitude' - Establece la amplitud máxima de + * '(float) siggen..amplitude' - Establece la amplitud máxima de formas de onda de salida, por defecto es 1. -* '(float) siggen..offset' - Establece el desplazamiento DC de la salida de + * '(float) siggen..offset' - Establece el desplazamiento DC de la salida de formas de onda, por defecto es 0. Por ejemplo, si 'siggen.0.amplitude' es 1.0 y 'siggen.0.offset' es @@ -755,25 +703,21 @@ es 2.5 y 'siggen.0.offset' es 10.0, entonces las salidas oscilarán desde 7.5 a 12.5. .Parámetros - Ninguno. footnote:[Antes de la versión 2.1, frecuencia, amplitud y desplazamiento fueron parámetros. Se cambiaron a pines para permitir el control por otros componentes] .Funciones - * '(funct) siggen..update' - Calcula nuevos valores para las cinco salidas. -[[sec:lut5]] (((lut5))) - -== lut5 +[[sec:lut5]] +== lut5(((lut5))) El componente lut5 es un componente lógico de 5 entradas basado en una tabla de búsqueda. * 'lut5' no requiere un hilo de punto flotante. .Instalación y uso - ---- loadrt lut5 [count=N|names=name1[,name2...]] addf lut5.N servo-thread | base-thread @@ -781,7 +725,6 @@ setp lut5.N.function 0xN ---- .Función de computacion - Para calcular el número hexadecimal para la función comenzando desde la parte superior ponga un 1 o 0 para indicar si esa fila sería verdadera o falsa. A continuación, escriba cada número en la columna de salida comenzando desde arriba y escribiéndolos desde la derecha @@ -827,7 +770,6 @@ y luego conviértalo en hexadecimal; ese será el valor para la función. |==================================== .Ejemplo de dos entradas - En la siguiente tabla, hemos seleccionado el estado de salida para cada línea que deseamos sea verdad diff --git a/docs/src/hal/rtcomps_fr.adoc b/docs/src/hal/rtcomps_fr.adoc index a0aa03a3f9d..457ca0d5e8a 100644 --- a/docs/src/hal/rtcomps_fr.adoc +++ b/docs/src/hal/rtcomps_fr.adoc @@ -1,14 +1,11 @@ :lang: fr :toc: -= Les composants temps réel - [[cha:Composants-temps-reel]] - += Les composants temps réel [[sec:Stepgen]] -== Stepgen -(((stepgen))) +== Stepgen(((stepgen))) Ce composant fournit un générateur logiciel d'impulsions de pas répondant aux commandes de position ou de vitesse. En mode position, il @@ -29,15 +26,13 @@ pas, se règlent indépendamment et n'importe quelle combinaison peut être choisie. [[fig:Diagramme-bloc-stepgen]] -.Diagramme bloc du générateur de pas stepgen -(((Diagramme bloc stepgen))) - -image::images/stepgen-block-diag.png[] - +.Diagramme bloc du générateur de pas stepgen(((Diagramme bloc stepgen))) +image::images/stepgen-block-diag.png[align="center"] === L'installer + ---- -halcmd: loadrt stepgen step_type= [ctrl_type=] +halcmd: loadrt stepgen step_type= [ctrl_type=] ---- __ est une série d'entiers décimaux séparés par des @@ -45,11 +40,12 @@ virgules. Chaque chiffre provoquera le chargement d'un simple générateur d'impulsions de pas, la valeur de ce chiffre déterminera le type de pas. __ est une série de lettres _p_ ou _v_ séparées par -des virgules, qui spécifient le mode pas ou le mode vitesse. -_ctrl_type_ est optionnel, si il est omis, tous les générateurs de pas +des virgules, qui spécifient le mode pas ou le mode vitesse. +_ctrl_type_ est optionnel, si il est omis, tous les générateurs de pas seront en mode position. Par exemple, la commande: + ---- -halcmd: loadrt stepgen step_type=0,0,2 ctrl_type=p,p,v +halcmd: loadrt stepgen step_type=0,0,2 ctrl_type=p,p,v ---- va installer trois générateurs de pas. Les deux premiers utilisent le @@ -65,6 +61,7 @@ spécifiques. La numérotation des générateurs commence à 0. === Le désinstaller + ---- halcmd: unloadrt stepgen ---- @@ -82,27 +79,27 @@ pins, selon le type de pas et le mode de contrôle sélectionné. unités de comptage, actualisée par la fonction _capture_position()_. - _(float) stepgen..position-fb_ -- Rétroaction de la position en unités de longueur, actualisée par la fonction _capture_position()_. - - _(bit) stepgen..step_ -- Sortie des impulsions de pas + - _(bit) stepgen..step_ -- Sortie des impulsions de pas (type de pas 0 seulement). - _(bit) stepgen..dir_ -- Sortie direction (type de pas 0 seulement). - - _(bit) stepgen..up_ -- Sortie UP en pseudo-PWM + - _(bit) stepgen..up_ -- Sortie UP en pseudo-PWM (type de pas 1 seulement). - - _(bit) stepgen..down_ -- Sortie DOWN en pseudo-PWM + - _(bit) stepgen..down_ -- Sortie DOWN en pseudo-PWM (type de pas 1 seulement). - - _(bit) stepgen..phase-A_ -- Sortie phase A + - _(bit) stepgen..phase-A_ -- Sortie phase A (séquences de pas 2 à 14 seulement). - - _(bit) stepgen..phase-B_ -- Sortie phase B + - _(bit) stepgen..phase-B_ -- Sortie phase B (séquences de pas 2 à 14 seulement). - - _(bit) stepgen..phase-C_ -- Sortie phase C + - _(bit) stepgen..phase-C_ -- Sortie phase C (séquences de pas 3 à 14 seulement). - - _(bit) stepgen..phase-D_ -- Sortie phase D + - _(bit) stepgen..phase-D_ -- Sortie phase D (séquences de pas 5 à 14 seulement). - - _(bit) stepgen..phase-E_ -- Sortie phase E + - _(bit) stepgen..phase-E_ -- Sortie phase E (séquences de pas 11 à 14 seulement). === Paramètres - - _(float) stepgen..position-scale_ -- Pas par unité de longueur. + - _(float) stepgen..position-scale_ -- Pas par unité de longueur. Ce paramètre est utilisé pour les sorties et les rétroactions. - _(float) stepgen..maxvel_ -- Vitesse maximale, en unités de longueur par seconde. Si égal à 0.0, n'a aucun effet. @@ -125,7 +122,7 @@ pins, selon le type de pas et le mode de contrôle sélectionné. dans une direction et un pas dans la direction opposée (séquences de pas 1 à 14 seulement), en nanosecondes. - _(s32) stepgen..rawcounts_ -- Valeur de comptage brute - (count) de la rétroaction, réactualisée par la fonction _make_pulses()_. + (count) de la rétroaction, réactualisée par la fonction _make_pulses()_. En mode position, les valeurs de maxvel et de maxaccel sont utilisées par la boucle de position interne pour éviter de générer des trains @@ -144,18 +141,18 @@ vitesse commandée, maxaccel est utilisé pour créer une rampe avec la fréquence actuelle, si la vitesse commandée change brutalement. Comme dans le mode position, des valeurs appropriées de ces paramètres assurent que le moteur pourra suivre le train d'impulsions généré. -[[sub:Stepgen-sequences-de-pas]] +[[sub:Stepgen-sequences-de-pas]] === Séquences de pas Le générateur de pas supporte 15 différentes _séquences de pas_. Le type de pas 0 est le plus familier, c'est le standard pas et direction (step/dir). Quand stepgen est configuré pour le type 0, il y a quatre paramètres supplémentaires qui déterminent le timing exact des signaux -de pas et de direction. Voir la figure <> +de pas et de direction. Voir la figure <> pour la signification de ces paramètres. Les paramètres sont en nanosecondes, mais ils doivent être arrondis à un entier, multiple de la période du -thread qui appelle _make_pulses()_. Par exemple, si _make_pulses()_ +thread qui appelle _make_pulses()_. Par exemple, si _make_pulses()_ est appelée toutes les 16µs et que _steplen_ est à 20000, alors l'impulsion de pas aura une durée de 2 x 16 = 32µs. La valeur par défaut de ces quatre paramètres est de 1ns, mais l'arrondi automatique @@ -167,10 +164,7 @@ automatiquement. Si _maxfreq_ est à zéro, il restera à zéro, mais la fréquence de sortie sera toujours limitée. [[fig:StepDir-timing]] -.Timing pas et direction - -(((Timing pas et direction))) - +.Timing pas et direction(((Timing pas et direction))) image::images/stepgen-type0.png[] Le type de pas 1 a deux sorties, up et down. Les impulsions @@ -186,31 +180,25 @@ Les séquences 2 jusqu'à 14 sont basées sur les états et ont entre deux et cinq sorties. Pour chaque pas, un compteur d'état est incrémenté ou décrémenté. Les figures suivantes: - - <>, - - <>, + - <>, + - <>, - <> -montrent les différentes séquences des sorties en fonction de l'état du -compteur. La fréquence maximale est 1.000.000.000 (1*10^9^) divisé par -_steplen_ et comme dans les autres séquences, _maxfreq_ sera abaissé si +montrent les différentes séquences des sorties en fonction de l'état du +compteur. La fréquence maximale est 1.000.000.000 (1*10^9^) divisé par +_steplen_ et comme dans les autres séquences, _maxfreq_ sera abaissé si il est au dessus de cette limite. [[fig:Trois-phases-quadrature]] -.Séquences de pas à trois phases -(((Trois phases))) - +.Séquences de pas à trois phases(((Trois phases))) image::images/stepgen-type2-4.png[] [[fig:Quatre-phases]] -.Séquences de pas à quatre phases -(((Quatre phases))) - +.Séquences de pas à quatre phases(((Quatre phases))) image::images/stepgen-type5-10.png[] [[fig:Cinq-phases]] -.Séquence de pas à cinq phases -(((Cinq phases))) - +.Séquence de pas à cinq phases(((Cinq phases))) image::images/stepgen-type11-14.png[] === Fonctions @@ -236,8 +224,7 @@ entier de la période du thread en nanosecondes. Les deux autres fonctions peuvent être appelées beaucoup plus lentement. [[sec:PWMgen]] -== PWMgen -(((pwmgen))) +== PWMgen(((pwmgen))) Ce composant fournit un générateur logiciel de PWM (modulation de largeur d'impulsions) et PDM (modulation de densité d'impulsions). @@ -247,6 +234,7 @@ fréquences PWM de quelques centaines de Hertz en assez bonne résolution, à peut-être 10kHz avec une résolution limitée. === L'installer + ---- halcmd: loadrt pwmgen output_type= ---- @@ -274,6 +262,7 @@ spécifiques. La numérotation des générateurs de PWM commence à 0. === Le désinstaller + ---- halcmd: unloadrt pwmgen ---- @@ -338,7 +327,7 @@ par le paramètre _min-dc_ si il est différent de zéro). la direction. Le rapport cyclique d'une pin PWM est basé sur la valeur absolue de la commande, de sorte que les valeurs négatives sont acceptables. La pin de direction est fausse pour les commandes positives et vraie pour les -commandes négatives. +commandes négatives. * Le _type 2_ - A également deux sorties, appelées _up_ et _down_. Pour les commandes positives, le signal PWM apparaît sur la sortie _up_ et la sortie _down_ reste fausse. Pour les commandes négatives, le signal PWM apparaît sur @@ -357,43 +346,42 @@ threads n'est pas supporté. l'échelle, limitation des valeurs et traitement d'autres paramètres. La fonction haute vitesse _pwmgen.make-pulses_ devrait être lancée -dans un thread très rapide, entre 10 et 50 us +dans un thread très rapide, entre 10 et 50 us selon les capacités de l'ordinateur. C'est la période de ce thread qui détermine la fréquence maximale de la porteuse PWM, ainsi que la résolution des signaux PWM ou PDM. L'autre fonction peut être appelée beaucoup plus lentement. [[sec:Codeur]] -== Codeur -(((Codeur))) +== Codeur (((Codeur))) Ce composant fournit, en logiciel, le comptage des signaux provenant d'encodeurs en quadrature. Il s'agit d'un composant temps réel uniquement, il est dépendant de divers facteurs comme la vitesse du CPU, etc, il est capable de compter des signaux de fréquences comprises -entre 10kHz à peut être 50kHz. La figure ci-dessous représente le diagramme bloc +entre 10kHz à peut être 50kHz. La figure ci-dessous représente le diagramme bloc d'une voie de comptage de codeur. [[fig:Diagramme-bloc-du-codeur]] -.Diagramme bloc du codeur -(((Diagramme bloc du codeur))) - -image::images/encoder-block-diag.png[] +.Diagramme bloc du codeur(((Diagramme bloc du codeur))) +image::images/encoder-block-diag.png[align="center"] === L'installer + ---- halcmd: loadrt encoder [num_chan=] ---- __ est le nombre de compteurs de codeur à installer. Si _numchan_ n'est pas spécifié, trois compteurs seront installés. Le nombre -maximum de compteurs est de 8 (comme définit par MAX_CHAN dans encoder.c). -Chaque compteur est indépendant, mais tous sont mis à jour -par la même fonction(s) au même instant. Dans les descriptions qui -suivent, __ est le nombre de compteurs spécifiques. La -numérotation des compteurs commence à 0. +maximum de compteurs est de 8 (comme définit par MAX_CHAN dans encoder.c). +Chaque compteur est indépendant, mais tous sont mis à jour +par la même fonction(s) au même instant. Dans les descriptions qui +suivent, __ est le nombre de compteurs spécifiques. La +numérotation des compteurs commence à 0. === Le désinstaller + ---- halcmd: unloadrt encoder ---- @@ -401,72 +389,72 @@ halcmd: unloadrt encoder === Pins - _Encodeur counter-mode_ (bit, I/O) (par défaut: FALSE) -- Permet le - mode compteur. Lorsque TRUE, le compteur compte chaque front montant de - l'entrée phase-A, ignorant la valeur de la phase-B. Ceci est utile pour - compter la sortie d'un capteur simple canal (pas de quadrature). Si FALSE, - il compte en mode quadrature. - - _encoder..counts_ (s32, Out) -- Position en comptage du codeur. - - _encoder..counts-latched_ (s32, Out) -- Non utilisé à ce moment. - - _encoder. index-enable_ (bit, I/O) -- Si TRUE, _counts_ et - _position_ sont remis à zéro au prochain front montant de la phase Z. - En même temps, _index-enable_ est remis à zéro pour indiquer que le front - montant est survenu. La broche _index-enable_ est bi-directionnelle. Si - _index-enable_ est FALSE, la phase Z du codeur sera ignorée et le - compteur comptera normalement. Le pilote du codeur ne doit jamais mettre - _index-enable_ TRUE. Cependant, d'autres composants peuvent le faire. - - _encoder..latch-falling_ (bit, In) (par défaut: TRUE) -- Non utilisé + mode compteur. Lorsque TRUE, le compteur compte chaque front montant de + l'entrée phase-A, ignorant la valeur de la phase-B. Ceci est utile pour + compter la sortie d'un capteur simple canal (pas de quadrature). Si FALSE, + il compte en mode quadrature. + - _encoder..counts_ (s32, Out) -- Position en comptage du codeur. + - _encoder..counts-latched_ (s32, Out) -- Non utilisé à ce moment. + - _encoder. index-enable_ (bit, I/O) -- Si TRUE, _counts_ et + _position_ sont remis à zéro au prochain front montant de la phase Z. + En même temps, _index-enable_ est remis à zéro pour indiquer que le front + montant est survenu. La broche _index-enable_ est bi-directionnelle. Si + _index-enable_ est FALSE, la phase Z du codeur sera ignorée et le + compteur comptera normalement. Le pilote du codeur ne doit jamais mettre + _index-enable_ TRUE. Cependant, d'autres composants peuvent le faire. + - _encoder..latch-falling_ (bit, In) (par défaut: TRUE) -- Non utilisé à ce moment. - - _encoder..latch-input_ (bit, In) (par défaut: TRUE) -- Non utilisé à - ce moment. - - _encoder..latch-rising_ (bit, In) -- Non utilisé à ce moment. - - _encoder..min-speed-estimate_ (Float, In) -- Effectue une estimation - de la vitesse minimale réelle, à partir de laquelle, la vitesse sera estimée - comme non nulle et la position interpolées, comme étant interpolée. Les - unités de vitesse _min-speed-estimate_ sont les mêmes que les unités - de _velocity_. Le facteur d'échelle, en compte par unité de longueur. - Régler ce paramètre trop bas, fera prendre beaucoup de temps pour que la - vitesse arrive à 0 après que les impulsions du codeur aient cessé d'arriver. - - _encoder..phase-A_ (bit, In) -- Signal de la phase A du codeur en -quadrature. - - _encoder..phase-B_ (bit, In) -- Signal de la phase B du codeur en -quadrature. - - _encoder..phase-Z_ (bit, In) -- Signal de la phase Z (impulsion d'index) + - _encoder..latch-input_ (bit, In) (par défaut: TRUE) -- Non utilisé à + ce moment. + - _encoder..latch-rising_ (bit, In) -- Non utilisé à ce moment. + - _encoder..min-speed-estimate_ (Float, In) -- Effectue une estimation + de la vitesse minimale réelle, à partir de laquelle, la vitesse sera estimée + comme non nulle et la position interpolées, comme étant interpolée. Les + unités de vitesse _min-speed-estimate_ sont les mêmes que les unités + de _velocity_. Le facteur d'échelle, en compte par unité de longueur. + Régler ce paramètre trop bas, fera prendre beaucoup de temps pour que la + vitesse arrive à 0 après que les impulsions du codeur aient cessé d'arriver. + - _encoder..phase-A_ (bit, In) -- Signal de la phase A du codeur en + quadrature. + - _encoder..phase-B_ (bit, In) -- Signal de la phase B du codeur en + quadrature. + - _encoder..phase-Z_ (bit, In) -- Signal de la phase Z (impulsion d'index) du codeur en quadrature. - - _encoder..position_ (float, Out) - Position en unités mises à l'échelle + - _encoder..position_ (float, Out) - Position en unités mises à l'échelle (voir _position_ échelle). - _encoder..position-interpolated_ (float, Out) - Position en unités mises à l'échelle, interpolées entre les comptes du codeur. _position-interpolated_ tente d'interpoler entre les comptes du codeur, basée sur la mesure de vitesse la plus récente. Valable uniquement lorsque la vitesse est approximativement constante et supérieure à _min-speed-estimate_. Ne pas utiliser pour le - contrôle de position, puisque sa valeur est incorrecte en basse vitesse, lors + contrôle de position, puisque sa valeur est incorrecte en basse vitesse, lors des inversions de direction et pendant les changements de vitesse. - Toutefois, il permet à un codeur à PPR faible (y compris les codeur à une - impulsion par tour) d'être utilisé pour du filetage sur tour et peut aussi + Toutefois, il permet à un codeur à PPR faible (y compris les codeur à une + impulsion par tour) d'être utilisé pour du filetage sur tour et peut aussi avoir d'autres usages. - _encoder..position-latched_ (float, Out) -- Non utilisé à ce moment. - _encoder..position-scale_ (float, I/O) -- Le facteur d'échelle, en - comptes par unité de longueur. Par exemple, si _position-scale_ est à 500, + comptes par unité de longueur. Par exemple, si _position-scale_ est à 500, alors à 1000 comptes codeur, la position sera donnée à 2,0 unités. - - _encoder..rawcounts_ (s32, In) -- Le compte brut, tel que déterminé par - _update-counters. Cette valeur est mise à jour plus fréquemment que compte et + - _encoder..rawcounts_ (s32, In) -- Le compte brut, tel que déterminé par + _update-counters. Cette valeur est mise à jour plus fréquemment que compte et position. Il n'est également pas affecté par le reset ou l'impulsion d'index. - - _encoder..reset_ (bit, In) -- Si TRUE, force _counts_ et _position_ + - _encoder..reset_ (bit, In) -- Si TRUE, force _counts_ et _position_ immédiatement à zéro. - - _encoder..velocity_ (float, Out) -- Vitesse en unités mises à l'échelle - par secondes. _encoder_ utilise un algorithme qui réduit considérablement la - quantification du bruit comparé à simplement différencier la sortie _position_. - Lorsque la magnitude de la vitesse réelle est inférieure à + - _encoder..velocity_ (float, Out) -- Vitesse en unités mises à l'échelle + par secondes. _encoder_ utilise un algorithme qui réduit considérablement la + quantification du bruit comparé à simplement différencier la sortie _position_. + Lorsque la magnitude de la vitesse réelle est inférieure à _min-speed-estimate_, la sortie _velocity_ est à 0. - _encoder..x4-mode_ (bit, I/O) (par défaut: TRUE) -- Permet le mode - x4. Lorsqu'il est TRUE, le compteur compte chaque front de l'onde en - quadrature (quatre compte par cycle complet). Si FALSE, il ne compte qu'une - seule fois par cycle complet. En mode compteur, ce paramètre est ignoré. + x4. Lorsqu'il est TRUE, le compteur compte chaque front de l'onde en + quadrature (quatre compte par cycle complet). Si FALSE, il ne compte qu'une + seule fois par cycle complet. En mode compteur, ce paramètre est ignoré. Le mode 1x est utile pour certaines manivelles électroniques. === Paramètres - - _encoder..capture-position.time (s32, RO)_ + - _encoder..capture-position.time (s32, RO)_ - _encoder..capture-position.tmax (s32, RW)_ - _encoder..update-counters.time (s32, RO)_ - _encoder..update-counter.tmax (s32, RW)_ @@ -483,29 +471,27 @@ différents threads n'est pas supporté. d'actualisation des latches et mise à l'échelle de la position. [[sec:PID]] -== PID -(((pid))) - -Ce composant fournit une boucle de contrôle Proportionnelle/Intégrale/Dérivée. -C'est un composant temps réel uniquement. Par souci de simplicité, cette -discussion suppose que nous parlons de boucles de position, mais ce composant -peut aussi être utilisé pour implémenter d'autres boucles de rétroaction -telles que vitesse, hauteur de torche, température, etc. La figure -<> est le schéma fonctionnel d'une simple +== PID(((pid))) + +Ce composant fournit une boucle de contrôle Proportionnelle/Intégrale/Dérivée. +C'est un composant temps réel uniquement. Par souci de simplicité, cette +discussion suppose que nous parlons de boucles de position, mais ce composant +peut aussi être utilisé pour implémenter d'autres boucles de rétroaction +telles que vitesse, hauteur de torche, température, etc. La figure +<> est le schéma fonctionnel d'une simple boucle PID. [[fig:Diagramme-bloc-PID]] -.Diagramme bloc d'une boucle PID -(((Diagramme bloc PID))) - +.Diagramme bloc d'une boucle PID(((Diagramme bloc PID))) image::images/pid-block-diag.png[] === L'installer + ---- halcmd: loadrt pid [num_chan=] [debug=1] ---- -__ est le nombre de boucles PID à installer. Si _numchan_ +__ est le nombre de boucles PID à installer. Si _numchan_ n'est pas spécifié, une seule boucle sera installée. Le nombre maximum de boucles est de 16 (comme définit par MAX_CHAN dans pid.c). Chaque boucle est complétement indépendante. Dans les descriptions qui @@ -519,6 +505,7 @@ exportés, pour économiser la mémoire partagée et éviter d'encombrer la liste des paramètres. === Le désinstaller + ---- halcmd: unloadrt pid ---- @@ -532,7 +519,7 @@ Les trois principales pins sont: - _(float) pid..feedback_ -- La position actuelle (mesure), telle que mesurée par un organe de rétroaction comme un codeur de position. - _(float) pid..output_ -- Une commande de vitesse qui tend - à aller de la position actuelle à la position désirée. + à aller de la position actuelle à la position désirée. Pour une boucle de position, _command_ et _feedback_ sont en unités de longueur. Pour un axe linéaire, cela pourrait être des pouces, mm, @@ -552,10 +539,10 @@ surveiller ou contrôler le fonctionnement général du composant. _.feedback_. (consigne - mesure) - _(bit) pid..enable_ -- Un bit qui active la boucle. Si _.enable_ est faux, tous les intégrateurs sont remis à zéro et les - sorties sont forcées à zéro. Si _.enable_ est vrai, la boucle opère -normalement. + sorties sont forcées à zéro. Si _.enable_ est vrai, la boucle opère + normalement. -Pins utilisé pour signaler la saturation. La saturation se produit lorsque +Pins utilisé pour signaler la saturation. La saturation se produit lorsque la sortie de le bloc PID est à son maximum ou limiter au minimum. - _(bit) pid..saturated_ -- True lorsque la sortie est saturée. @@ -567,25 +554,25 @@ la sortie de le bloc PID est à son maximum ou limiter au minimum. Le gain PID, les limites et autres caractéristiques _accordables_ de la boucle sont implémentés comme des paramètres. - - _(float) pid..Pgain_ -- Gain de la composante proportionnelle. - - _(float) pid..Igain_ -- Gain de la composante intégrale. + - _(float) pid..Pgain_ -- Gain de la composante proportionnelle. + - _(float) pid..Igain_ -- Gain de la composante intégrale. - _(float) pid..Dgain_ -- Gain de la composante dérivée. - - _(float) pid..bias_ -- Constante du décalage de sortie. - - _(float) pid..FF0_ -- Correcteur prédictif d'ordre zéro -(retour vitesse) sortie proportionnelle à la commande (position). - - _(float) pid..FF1_ -- Correcteur prédictif de premier ordre -(retour vitesse) sortie proportionnelle à la dérivée de la commande (vitesse). - - _(float) pid..FF2_ -- Correcteur prédictif de second ordre -(retour vitesse) sortie proportionnelle à la dérivée seconde de la -commande (accélération). -footnote:[FF2 n'est actuellement pas implémenté, mais il pourrait l'être. -Considérez cette note comme un “FIXME” dans le code.] + - _(float) pid..bias_ -- Constante du décalage de sortie. + - _(float) pid..FF0_ -- Correcteur prédictif d'ordre zéro + (retour vitesse) sortie proportionnelle à la commande (position). + - _(float) pid..FF1_ -- Correcteur prédictif de premier ordre + (retour vitesse) sortie proportionnelle à la dérivée de la commande (vitesse). + - _(float) pid..FF2_ -- Correcteur prédictif de second ordre + (retour vitesse) sortie proportionnelle à la dérivée seconde de la + commande (accélération). + footnote:[FF2 n'est actuellement pas implémenté, mais il pourrait l'être. + Considérez cette note comme un “FIXME” dans le code.] - _(float) pid..deadband_ -- Définit la bande morte tolérable. - - _(float) pid..maxerror_ -- Limite d'erreur. - - _(float) pid..maxerrorI_ -- Limite d'erreur intégrale. - - _(float) pid..maxerrorD_ -- Limite d'erreur dérivée. - - _(float) pid..maxcmdD_ -- Limite de la commande dérivée. - - _(float) pid..maxcmdDD_ -- Limite de la commande dérivée seconde. + - _(float) pid..maxerror_ -- Limite d'erreur. + - _(float) pid..maxerrorI_ -- Limite d'erreur intégrale. + - _(float) pid..maxerrorD_ -- Limite d'erreur dérivée. + - _(float) pid..maxcmdD_ -- Limite de la commande dérivée. + - _(float) pid..maxcmdDD_ -- Limite de la commande dérivée seconde. - _(float) pid..maxoutput_ -- Limite de la valeur de sortie. Toutes les limites _max???,_ sont implémentées de sorte que si la @@ -598,7 +585,7 @@ paramètres supplémentaires seront exportés: - _(float) pid..errorI_ -- Intégrale de l'erreur. - _(float) pid..errorD_ -- Dérivée de l'erreur. - _(float) pid..commandD_ -- Dérivée de la commande. - - _(float) pid..commandDD_ -- Dérivée seconde de la commande. + - _(float) pid..commandDD_ -- Dérivée seconde de la commande. === Fonctions @@ -612,20 +599,20 @@ rythmes. d'une seule boucle PID. Si vous voulez comprendre exactement l'algorithme utilisé pour -calculer la sortie d'une boucle PID, référez vous à la figure +calculer la sortie d'une boucle PID, référez vous à la figure <>, les commentaires au début du source _linuxcnc/src/hal/components/pid.c_ et bien sûr, au code lui même. Les calculs de boucle sont dans la fonction C _calc_pid()_. [[sec:Codeur-simul]] -== Codeur simulé -(((sim-encoder))) +== Codeur simulé(((sim-encoder))) Le codeur simulé est exactement la même chose qu'un codeur. Il produit des impulsions en quadrature avec une impulsion d'index, à une vitesse contrôlée par une pin de HAL. Surtout utile pour les essais. === L'installer + ---- halcmd: loadrt sim-encoder num_chan= ---- @@ -635,6 +622,7 @@ canal sera installé. Le nombre maximum de canaux est de 8 (comme défini par MAX_CHAN dans sim_encoder.c). === Le désinstaller + ---- halcmd: unloadrt sim-encoder ---- @@ -645,7 +633,7 @@ halcmd: unloadrt sim-encoder l'arbre simulé. - _(bit) sim-encoder..phase-A_ -- Sortie en quadrature. - _(bit) sim-encoder..phase-B_ -- Sortie en quadrature. - - _(bit) sim-encoder..phase-Z_ -- Sortie de l'impulsion d'index. + - _(bit) sim-encoder..phase-Z_ -- Sortie de l'impulsion d'index. Quand _.speed_ est positive, _.phase-A_ mène _.phase-B_. @@ -676,8 +664,7 @@ codeurs simulés. _make-pulses_. [[sec:Anti-rebond]] -== Anti-rebond -(((Anti-rebond))) +== Anti-rebond(((Anti-rebond))) L'anti-rebond est un composant temps réel capable de filtrer les rebonds créés par les contacts mécaniques. Il est également très utile @@ -685,6 +672,7 @@ dans d'autres applications, où des impulsions très courtes doivent être supprimées. === L'installer + ---- halcmd: loadrt debounce cfg= ---- @@ -712,6 +700,7 @@ filtre est le filtre 0 dans le groupe 0. === Le désinstaller + ---- halcmd: unloadrt debounce ---- @@ -731,7 +720,7 @@ C'est un switch du compilateur qui peut exporter cette variable comme un paramètre. Ceci est prévu pour des essais et devrait juste être un gaspillage de mémoire partagée dans des circonstances normales.] - - _(s32) debounce..delay_ -- Délai de filtrage pour tous les filtres du + - _(s32) debounce..delay_ -- Délai de filtrage pour tous les filtres du groupe __. Le délai du filtre est dans l'unité de la période du thread. Le délai @@ -751,8 +740,7 @@ périodes. - _(funct) debounce._ -- Met à jour tous les filtres du groupe __. [[sec:Siggen]] -== Siggen -(((siggen))) +== Siggen(((siggen))) Siggen est un composant temps réel qui génère des signaux carrés, triangulaires et sinusoïdaux. Il est principalement utilisé pour les @@ -773,6 +761,7 @@ spécifique. Les numéros de générateur commencent à 0. === Le désinstaller + ---- halcmd: unloadrt siggen ---- @@ -824,7 +813,6 @@ de vérité. * 'lut5' ne requiert pas un thread à virgule flottante. .Installation - ---- loadrt lut5 [count=N|names=name1[,name2...]] addf lut5.N servo-thread | base-thread @@ -832,10 +820,9 @@ setp lut5.N.function 0xN ---- .Calcul de la valeur de la fonction - Pour calculer la valeur hexadécimale de la fonction, démarrer par le haut et entrer un 1 où un 0 pour indiquer si cette colonne devra être vraie où fausse. -Ensuite écrire les valeurs en dessous, d'abord dans la colonne de sortie en +Ensuite écrire les valeurs en dessous, d'abord dans la colonne de sortie en commençant par le haut puis en écrivant les valeurs correspondantes de la droite vers la gauche. Le nombre binaire sera celui contenu dans la colonne de sortie. Utiliser une calculette comme celle fournie sous Ubuntu, entrer ce nombre @@ -880,7 +867,6 @@ binaire et le convertir en hexadécimal pour obtenir la valeur pour la fonction. |==================================== .Un exemple de fonction. - Dans la table suivante nous avons sélectionné l'état de sortie pour chaque ligne que nous souhaitons vraie. @@ -900,3 +886,4 @@ Le nombre binaire est 'b1010' (rotation de la sortie de 90° en sens horaire). Entrer ce nombre dans une calculette, le convertir en hexadécimal et le nombre demandé pour cette fonction est '0xa'. Le préfixe '0x' étant celui des nombres hexadécimaux. + diff --git a/docs/src/hal/tools.adoc b/docs/src/hal/tools.adoc index 8ac56dd0010..c56d37d477a 100644 --- a/docs/src/hal/tools.adoc +++ b/docs/src/hal/tools.adoc @@ -1,9 +1,9 @@ -[[cha:hal-tools]] +:lang: en -= HAL Tools +[[cha:hal-tools]] += HAL Tools(((HAL Tools))) [[sec:halcmd]] - == Halcmd Halcmd is a command line tool for manipulating the HAL. There is a @@ -27,13 +27,12 @@ man halcmd The <> has a number of examples of halcmd usage, and is a good tutorial for halcmd. -[[sec:halmeter]](((Halmeter))) - -== Halmeter +[[sec:halmeter]] +== Halmeter(((Halmeter))) 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 +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 @@ -50,10 +49,10 @@ convenient if you want to look at a number of different items quickly. 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 +You can also make halmeter start displaying a specific item immediately, by adding 'pin|sig|par[am] ' to the command line. It will display the pin, signal, or -parameter +parameter 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 @@ -69,24 +68,24 @@ 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 -g X Y relative to the upper left corner of your screen. -For example: +one with -g X Y relative to the upper left corner of your screen. +For example: ---- loadusr halmeter pin hm2.0.stepgen.00.velocity-fb -g 0 500 ---- See the man page for more options. See section <>. - + .Halmeter -image::images/hal-meter01.png[alt="Halmeter"] +image::images/hal-meter01.png["Halmeter"] -image::images/hal-meter02.png[alt="Halmeter"] +image::images/hal-meter02.png["Halmeter"] == Halshow -Halshow (<>) +Halshow (<>) 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 @@ -138,7 +137,6 @@ lines beginning with a # character are ignored. [[sec:halscope]] - == Halscope Halscope is an 'oscilloscope' for the HAL. It lets you capture the @@ -153,6 +151,7 @@ the last configuration is saved in a file named autosave.halscope. Configuration files may also be specified when starting halscope from the commandline. Commandline help (-h) usage: + ---- halscope -h Usage: @@ -192,30 +191,37 @@ writable pins, parameters or signals. Usage: If the mode begins with an uppercase letter, the radio buttons for selecting other modes are not shown ---- + For complete information, see the man page: + ---- man sim_pin ---- + Example (with LinuxCNC running): + ---- halcmd loadrt mux2 names=example; halcmd net sig_example example.in0 sim_pin example.sel example.in1 sig_example & ---- -image::images/sim_pin.png[alt="sim_pin is a command line utility to display and update any number of writable pins, parameters or signals"] + +image::images/sim_pin.png["sim_pin is a command line utility to display and update any number of writable pins, parameters or signals"] == Simulate Probe -simulate_probe is a simple gui to simulate activation of the pin -motion.probe-input. Usage: +simulate_probe is a simple gui to simulate activation of the pin motion.probe-input. +Usage: + ---- simulate_probe & ---- -image::images/simulate_probe.png[alt="simulate_probe is a simple gui to simulate activation of the pin motion.probe-input"] +image::images/simulate_probe.png["simulate_probe is a simple gui to simulate activation of the pin motion.probe-input"] == Hal Histogram hal-histogram is a command line utility to display histograms for hal pins. + ---- Usage: hal-histogram --help | -? @@ -241,7 +247,7 @@ Notes: For a base thread, this may require using: loadrt motmod ... base_thread_fp=1 ---- -image::images/hal-histogram.png[alt="hal-histogram is a command line utility to display histograms for hal pins"] +image::images/hal-histogram.png["hal-histogram is a command line utility to display histograms for hal pins"] == Halreport diff --git a/docs/src/hal/tutorial.adoc b/docs/src/hal/tutorial.adoc index a86440d5d85..0db2282559d 100644 --- a/docs/src/hal/tutorial.adoc +++ b/docs/src/hal/tutorial.adoc @@ -1,5 +1,6 @@ -[[cha:hal-tutorial]] +:lang: en +[[cha:hal-tutorial]] = HAL Tutorial == Introduction @@ -413,9 +414,8 @@ following command in a terminal window. halrun -U ---- -[[sec:tutorial-halmeter]](((Halmeter,Tutorial Halmeter))) - -== Halmeter +[[sec:tutorial-halmeter]] +== Halmeter(((Halmeter,Tutorial Halmeter))) You can build very complex HAL systems without ever using a graphical interface. However there is something satisfying about seeing the @@ -448,7 +448,7 @@ The first window you will see is the 'Select Item to Probe' window. .Halmeter Select Window -image::images/halmeter-select.png[align="center", alt="Halmeter Select Window"] +image::images/halmeter-select.png["Halmeter Select Window",align="center"] 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 @@ -460,7 +460,7 @@ following figure. .Halmeter -image::images/halmeter-1.png[align="center", alt="Halmeter"] +image::images/halmeter-1.png["Halmeter",align="center"] To change what the meter displays press the 'Select' button which brings back the 'Select Item to Probe' window. @@ -794,9 +794,8 @@ generator is cranking out step pulses, varying from 10KHz forward to 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. -[[sec:tutorial-halscope]](((Tutorial Halscope))) - -== Halscope +[[sec:tutorial-halscope]] +== Halscope(((Tutorial Halscope))) 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 @@ -822,7 +821,7 @@ left click on the samples box. .Realtime function not linked dialog -image::images/halscope-01.png[align="center", alt="Realtime function not linked dialog"] +image::images/halscope-01.png["Realtime function not linked dialog",align="center"] 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 us @@ -834,7 +833,7 @@ figure. .Initial scope window -image::images/halscope-02.png[align="center", alt="Initial scope window"] +image::images/halscope-02.png["Initial scope window",align="center"] === Hooking up the scope probes @@ -855,7 +854,7 @@ of the signals in the HAL (only two for this example). .Select Channel Source -image::images/halscope-03.png[align="center", alt="Select Channel Source"] +image::images/halscope-03.png["Select Channel Source",align="center"] 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 @@ -863,7 +862,7 @@ to display the signal 'X-vel'. Click on the Signals tab then click on .Select Signal -image::images/halscope-04.png[align="center", alt="Select Signal"] +image::images/halscope-04.png["Select Signal",align="center"] 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 @@ -873,7 +872,7 @@ position and scale always work on the selected one. .Halscope -image::images/halscope-05.png[align="center", alt="Halscope"] +image::images/halscope-05.png["Halscope",align="center"] 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 @@ -899,7 +898,7 @@ something like the following figure. .Captured Waveforms -image::images/halscope-06.png[align="center", alt="Captured Waveforms"] +image::images/halscope-06.png["Captured Waveforms",align="center"] The 'Selected Channel' box at the bottom tells you that the purple trace is the currently selected one, channel 4, which is displaying the @@ -919,7 +918,7 @@ only. For larger adjustments the offset button should be used. .Vertical Adjustment -image::images/halscope-07.png[align="center", alt="Vertical Adjustment"] +image::images/halscope-07.png["Vertical Adjustment",align="center"] === Triggering @@ -932,7 +931,7 @@ use channel 3, the triangle wave as shown in the following figure. .Trigger Source Dialog -image::images/halscope-08.png[align="center", alt="Trigger Source Dialog"] +image::images/halscope-08.png["Trigger Source Dialog",align="center"] After setting the trigger source, you can adjust the trigger level and trigger position using the sliders in the 'Trigger' box along the right @@ -952,7 +951,7 @@ scope display looks something like the following figure. .Waveforms with Triggering -image::images/halscope-09.png[align="center", alt="Waveforms with Triggering"] +image::images/halscope-09.png["Waveforms with Triggering",align="center"] === Horizontal Adjustments @@ -972,7 +971,7 @@ samples at 20KHz, or about 0.20 seconds. .Sample Rate Dialog -image::images/halscope-10.png[align="center", alt="Sample Rate Dialog"] +image::images/halscope-10.png["Sample Rate Dialog",align="center"] === More Channels @@ -995,7 +994,7 @@ following figure. .Step Pulses -image::images/halscope-11.png[align="center", alt="Step Pulses"] +image::images/halscope-11.png["Step Pulses",align="center"] === More samples diff --git a/docs/src/hal/twopass.adoc b/docs/src/hal/twopass.adoc index 390ec0eeac6..ea8b2fa6a13 100644 --- a/docs/src/hal/twopass.adoc +++ b/docs/src/hal/twopass.adoc @@ -1,5 +1,6 @@ -[[cha:hal-twopass]] +:lang: en +[[cha:hal-twopass]] = HAL TWOPASS == TWOPASS @@ -17,7 +18,7 @@ places in your setup, you would need to have a single line somewhere to specify: ---- - loadrt and2 count=3 +loadrt and2 count=3 ---- resulting in components and2.0, and2.1, and2.2. @@ -71,21 +72,19 @@ Example: TWOPASS = on,verbose,nodelete ---- - 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 hal commands are executed in the initial pass. [NOTE] - User components should use the wait (-W) option to ensure the component is ready before other commands are executed. 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. +the 'count=' option or with all of the individual names specified +when using the 'names=' option. A second pass is then made to execute all of the other hal instructions specified in the HALFILES. The addf commands that @@ -93,19 +92,19 @@ associate a component's functions with thread execution are executed in the order of appearance with other commands during this second pass. -While you can use either the count= or names= options, they are -mutually exclusive -- only one type can be specified for a +While you can use either the 'count=' or 'names=' options, they are +mutually exclusive -- only one type can be specified for a given module. -TWOPASS processing is most effective when using the names= +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, +the 'count=' method will give arcane component names like ddt.0, ddt.1, ddt.2, etc. -Alternatively, using the names= option like: +Alternatively, using the 'names=' option like: ---- loadrt ddt names=xvel,yvel,zvel @@ -113,10 +112,10 @@ loadrt ddt names=xvel,yvel,zvel loadrt ddt names=xaccel,yaccel,zaccel ---- -results in components sensibly named xvel,yvel,zvel, xaccel,yaccel,zaccel. +results in components sensibly named xvel, yvel, zvel, xaccel, yaccel, zaccel. Many comps supplied with the distribution are created with the -halcompile utility and support the names= option. These include the +halcompile utility and support the 'names=' option. These include the common logic components that are the glue of many hal configurations. User-created comps that use the halcompile utility automatically @@ -125,6 +124,25 @@ 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. +El procesamiento en dos pasos ocurre antes de la carga de la interfaz gráfica de usuario. Cuando se utiliza un +[HAL]POSTGUI_HALFILE, es conveniente colocar todo las +declaraciones loadrt para los componentes necesarios en un halfile que se carge con anterioridad. + +Ejemplo de una sección HAL cuando se usa un POSTGUI_HALFILE: +---- +[HAL] + +TWOPASS = on +HALFILE = core_sim.hal +HALFILE = sim_spindle_encoder.hal +HALFILE = axis_manualtoolchange.hal +HALFILE = simulated_home.hal +HALFILE = load_for_postgui.hal <- líneas loadrt para componentes en postgui.hal + +POSTGUI_HALFILE = postgui.hal +HALUI = halui +---- + == Post GUI Some GUIs support halfiles that are processed after the GUI is started in order @@ -167,7 +185,6 @@ but loadrt ordering for special components can be enforced by placing the such loadrt directives in an excluded file. [NOTE] - 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. @@ -189,9 +206,8 @@ loadrt component_2 ---- [NOTE] - Case and whitespace within the magic comment are ignored. The loading of -components that use names= or count= parameters (typically built by +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 hal commands that create signals (net) and commands that establish execution order (addf) should not be diff --git a/docs/src/install/latency-test.adoc b/docs/src/install/latency-test.adoc index ade4bd69e9a..80ebb3f4b2f 100644 --- a/docs/src/install/latency-test.adoc +++ b/docs/src/install/latency-test.adoc @@ -1,44 +1,46 @@ -[[cha:latency-test]] +:lang: en +:toc: -= Latency Test +[[cha:latency-test]] += Latency Test(((Latency Test))) -This test is the first test that should be performed on a PC +This test is the first test that should be performed on a PC to see if it is able to drive a CNC machine. -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 +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. -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 +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. -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. - -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 +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. + +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: - - limited maximum step rate - - jitter in the generated pulses - - loads the CPU +- limited maximum step rate +- jitter in the generated pulses +- loads the CPU -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: +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: ---- latency-test @@ -63,53 +65,51 @@ latency-test -h After stating a latency test you should see something like this: -.HAL Latency Test +image::../config/images/latency-test_en.png["HAL Latency Test",align="center"] -image::../config/images/latency-test_en.png[align="center", alt="HAL Latency Test"] - -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. +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. [NOTE] Do not run LinuxCNC or Stepconf while the latency test is running. -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. +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. -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 +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 -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 +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. -Note that 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 +Note that 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. [NOTE] LinuxCNC does not require bleeding edge hardware. -For more information on stepper tuning see the +For more information on stepper tuning see the <> Chapter. *Additional command line tools are available for examining latency @@ -117,14 +117,15 @@ when LinuxCNC is not running.* = Latency Plot -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: +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: + ---- latency-plot --help Usage: - latency-plot --help | -? (this) + latency-plot --help | -? latency-plot --hal [Options] Options: @@ -134,16 +135,16 @@ Options: --relative (relative clock time (default)) --actual (actual clock time) ---- -image::../config/images/latency-plot.png[alt="latency-plot makes a strip chart recording for a base and a servo thread"] +image::../config/images/latency-plot.png["latency-plot makes a strip chart recording for a base and a servo thread"] = Latency Histogram latency-histogram displays a histogram of latency (jitter) for a base and servo thread. + ---- Usage: latency-histogram --help | -? -or latency-histogram [Options] Options: @@ -168,7 +169,4 @@ Notes: with special end bars. Use --show to show count for the off-chart [pos|neg] bin ---- -image::../config/images/latency-histogram.png[alt="latency-histogram displays a histogram of latency (jitter) for a base and servo thread"] - -// vim: set syntax=asciidoc: - +image::../config/images/latency-histogram.png["latency-histogram displays a histogram of latency (jitter) for a base and servo thread"] diff --git a/docs/src/integrator/stepper-timing.adoc b/docs/src/integrator/stepper-timing.adoc index fe11faf02ce..442c1acef25 100644 --- a/docs/src/integrator/stepper-timing.adoc +++ b/docs/src/integrator/stepper-timing.adoc @@ -1,9 +1,10 @@ This page is for step and direction timing of stepper drives. Please add to this list using the stepconf wizard format and in nanoseconds so -it will be uniform. +it will be uniform. -Some boards have know issues see the troubleshooting hardware page [[Hardware_Problems]] +[[Hardware_Problems]] +Some boards have know issues see the troubleshooting hardware page 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 @@ -20,7 +21,6 @@ you can confirm the values please do... Times listed are in nanoseconds (ns). Multiply microseconds (us) by 1000 to get nanoseconds (ns) - [width="100%",options="header"] |========================================================= |Manufacturer|Model|Step Time|Step Space|Direction Hold|Direction Setup|Steps on|Spec Sheet| @@ -80,3 +80,4 @@ nanoseconds (ns) |Pololu|DRV8825 Stepper Motor Driver Carrier|1900|1900|650|650|Rising Edge|http://www.pololu.com/catalog/product/2132/| |cnc4you|[[CW5045]]|2000|8000|5000|5000|Rising Edge|http://cnc4you.co.uk/resources/CW5045.pdf| |========================================================= + diff --git a/docs/src/integrator/steppers.adoc b/docs/src/integrator/steppers.adoc index a01267bfeda..9d21512deff 100644 --- a/docs/src/integrator/steppers.adoc +++ b/docs/src/integrator/steppers.adoc @@ -1,5 +1,6 @@ -[[cha:stepper-info]] +:lang: en +[[cha:stepper-info]] = Stepper Information == Stepper Motor Operation @@ -27,19 +28,19 @@ coil. The 4 milli-Henry coil (blue trace) takes twice as long to reach full curr trace), and the 8mH (red trace) coil takes twice as long again: image::images/inductance-step-response.png[align="center"] - + 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: image::images/inductance-pulse-response-slow-charge.png[align="center"] - + 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. +CNC system. 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: @@ -100,24 +101,24 @@ dramatically, and the motor may stall or even rotate in random directions. Some 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. +multiple new resonances introduced. Several methods exist to help control the effects of resonance, all with varying degrees of complexity, effectiveness and side effects: * 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. + smaller step changes cause less ringing in the motor and windings and thus cause less excitation at the point of + resonance. * 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. + reducing resonance, always accelerating or decelerating through the resonant peak. * 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. + accuracy. Elastomeric motor mounts, shaft couplings or bearing mounts can be employed. * 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. + 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. == Microstepping @@ -129,7 +130,7 @@ As each winding is energised the rotor clocks around fully from one detent to th 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. +step to the next. 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 @@ -179,7 +180,7 @@ Basic systems operating in this fashion may only close the loop between the moto 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. +compensate without losing steps. 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 diff --git a/docs/src/integrator/wiring.adoc b/docs/src/integrator/wiring.adoc index 816fd6f8483..fef7bde1a74 100644 --- a/docs/src/integrator/wiring.adoc +++ b/docs/src/integrator/wiring.adoc @@ -1,5 +1,6 @@ -[[cha:wiring]] +:lang:en +[[cha:wiring]] = Best Wiring Practices == Electrical Noise @@ -45,7 +46,7 @@ wire on the market means that its use should be encouraged wherever possible. 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. +wire end up outside the termination to prevent accidental shorting with adjacent terminations. 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 @@ -98,7 +99,7 @@ equipment. For example, if the incoming supply is also used to feed large motors 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. +noise immunity. 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 @@ -158,7 +159,7 @@ In situations where a DC circuit is run with the common point disconnected from 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 cancelled 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. +protection use twisted wire that is housed in a shielded jacket with the shield terminated to mains earth. Note however that twisted pairs of wires are less effective at combatting 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 @@ -196,11 +197,11 @@ enclosures will indicate a specific terminal as being the earthing point, in whi connected to earth via a dedicated wire. 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. +supply and motor drive output lines. 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. +shield on the output lines reduces the amount of noise they can radiate. == Variable Frequency Drives diff --git a/docs/src/ladder/classic-ladder.adoc b/docs/src/ladder/classic-ladder.adoc index 25c07d5f522..8a9173cdf5c 100644 --- a/docs/src/ladder/classic-ladder.adoc +++ b/docs/src/ladder/classic-ladder.adoc @@ -1,12 +1,13 @@ -[[cha:classicladder]] +:lang: en +[[cha:classicladder]] = Ladder Concepts Classic Ladder 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 +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. @@ -59,7 +60,7 @@ adds the function classicladder.0.refresh to the servo thread. This line makes Classic Ladder update at the servo thread rate. ---- -loadrt classicladder_rt +loadrt classicladder_rt addf classicladder.0.refresh servo-thread ---- @@ -86,23 +87,23 @@ default values. [width="90%", options="header", cols="<8,<4,<2"] |======================================== -|Object Name | Variable Name | Default Value -|Number of rungs | (numRungs) | 100 -|Number of bits | (numBits) | 20 -|Number of word variables | (numWords) | 20 -|Number of timers | (numTimers) | 10 -|Number of timers IEC | (numTimersIec) | 10 -|Number of monostables | (numMonostables) | 10 -|Number of counters | (numCounters) | 10 -|Number of HAL inputs bit pins | (numPhysInputs) | 15 -|Number of HAL output bit pins | (numPhysOutputs) | 15 +|Object Name | Variable Name | Default Value +|Number of rungs | (numRungs) | 100 +|Number of bits | (numBits) | 20 +|Number of word variables | (numWords) | 20 +|Number of timers | (numTimers) | 10 +|Number of timers IEC | (numTimersIec) | 10 +|Number of monostables | (numMonostables)| 10 +|Number of counters | (numCounters) | 10 +|Number of HAL inputs bit pins | (numPhysInputs) | 15 +|Number of HAL output bit pins | (numPhysOutputs)| 15 |Number of arithmetic expressions | (numArithmExpr) | 50 -|Number of Sections | (numSections) | 10 -|Number of Symbols | (numSymbols) | Auto -|Number of S32 inputs | (numS32in) | 10 -|Number of S32 outputs | (numS32out) | 10 -|Number of Float inputs | (numFloatIn) | 10 -|Number of Float outputs | (numFloatOut) | 10 +|Number of Sections | (numSections) | 10 +|Number of Symbols | (numSymbols) | Auto +|Number of S32 inputs | (numS32in) | 10 +|Number of S32 outputs | (numS32out) | 10 +|Number of Float inputs | (numFloatIn) | 10 +|Number of Float outputs | (numFloatOut) | 10 |======================================== Objects of most interest are numPhysInputs, numPhysOutputs, numS32in, @@ -152,20 +153,20 @@ loadusr classicladder myladder.clp Classic Ladder Loading Options -* '--nogui' - (loads without the ladder editor) normally used after + * '--nogui' - (loads without the ladder editor) normally used after debugging is finished. -* '--modbus_port=port' - (loads the modbus port number) -* '--modmaster' - (initializes MODBUS master) should load the ladder + * '--modbus_port=port' - (loads the modbus port number) + * '--modmaster' - (initializes MODBUS master) should load the ladder program at the same time or the TCP is default port. -* '--modslave' - (initializes MODBUS slave) only TCP + * '--modslave' - (initializes MODBUS slave) only TCP -To use Classic Ladder with HAL without EMC: +To use Classic Ladder with HAL without EMC: ---- loadusr -w classicladder ---- -The -w tells HAL not to close down the HAL environment +The -w tells HAL not to close down the HAL environment until Classic Ladder is finished. If you first load ladder program with the '--nogui' option then load @@ -185,8 +186,7 @@ When you first start up Classic Ladder you get an empty Sections Manager window. .Sections Manager Default Window - -image::images/Default_Sections_Manager.png[align="center", alt="Sections Manager Default Window"] +image::images/Default_Sections_Manager.png["Sections Manager Default Window",align="center"] 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 @@ -198,8 +198,7 @@ When you first start up Classic Ladder you get an empty Section Display window. Displayed is one empty rung. .Section Display Default Window - -image::images/Default_Section_Display.png[align="center", alt="Section Display Default Window"] +image::images/Default_Section_Display.png["Section Display Default Window",align="center"] Most of the buttons are self explanatory: @@ -234,22 +233,21 @@ it erase the codes with the editor and save the program. == The Variable Windows -This are two variable windows: the Bit Status Window (boolean) and -the Watch Window (signed integer). The Vars +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. .Bit Status Window +image::images/Bit_Status.png["Bit Status Window",align="center"] -image::images/Bit_Status.png[align="center",alt="Bit Status Window"] - -The Bit Status Window displays some of the boolean (on/off) variable data. +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, +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. @@ -258,8 +256,7 @@ running can not be changed and will be displayed as checked if on and unchecked if off. .Watch Window - -image::images/watch_window.png[align="center", alt="Watch Window"] +image::images/watch_window.png["Watch Window",align="center"] 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 @@ -268,15 +265,14 @@ 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 +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. == Symbol Window .Symbol Names window - -image::images/Default_Symbols_names.png[align="center", alt="Symbol Names window"] +image::images/Default_Symbols_names.png["Symbol Names window",align="center"] 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 @@ -293,13 +289,12 @@ ladder program is connected to! == The Editor window .Editor Window +image::images/Editor.png["Editor Window",align="center"] -image::images/Editor.png[align="center", alt="Editor Window"] - -* 'Add' - adds a rung after the selected rung -* 'Insert' - inserts a rung before the selected rung -* 'Delete' - deletes the selected rung -* 'Modify' - opens the selected rung for editing + * 'Add' - adds a rung after the selected rung + * 'Insert' - inserts a rung before the selected rung + * 'Delete' - deletes the selected rung + * 'Modify' - opens the selected rung for editing Starting from the top left image: @@ -308,31 +303,31 @@ Starting from the top left image: * Horizontal Connection, Vertical Connection , Long Horizontal Connection * Timer IEC Block, Counter Block, Compare Variable * Old Timer Block, Old Monostable Block (These have been replaced by the - IEC Timer) + IEC Timer) * COILS - N.O. Output, N.C. Output, Set Output, Reset Output * Jump Coil, Call Coil, Variable Assignment A short description of each of the buttons: * 'Selector' - allows you to select existing objects and - modify the information. + modify the information. * 'Eraser' - erases an object. * '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). + 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). * '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. -* '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. -* '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. -* 'Horizontal Connection' - creates a horizontal connection to objects. -* 'Vertical Connection' - creates a vertical connection to horizontal lines. -* 'Horizontal Running Connection' - creates a horizontal connection between + * '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. + * '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. + * 'Horizontal Connection' - creates a horizontal connection to objects. + * 'Vertical Connection' - creates a vertical connection to horizontal lines. + * '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. * 'IEC Timer' - creates a timer and replaces the 'Timer'. @@ -340,11 +335,11 @@ A short description of each of the buttons: * 'Monostable' - creates a one-shot monostable module * 'Counter' - creates a counter module. * '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. + variables. (eg %W1<=5 or %W1=%W2) Compare cannot be placed in the right + most side of the section display. * '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. + variables. (eg %W2=7 or %W1=%W2) ASSIGNMENT functions can only be + placed at the right most side of the section display. == Config Window @@ -352,8 +347,7 @@ The config window shows the current project status and has the Modbus setup tabs. .Config Window - -image::images/Config.png[align="center", alt="Config Window"] +image::images/Config.png["Config Window",align="center"] = Ladder objects @@ -373,13 +367,13 @@ 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.) -* 'N.O. Contact' - image:images/ladder_action_load.png[alt="Normally Open Contact"] (Normally Open) + * 'N.O. Contact' - image:images/ladder_action_load.png["Normally Open Contact"] (Normally Open) When the variable is false the switch is off. -* 'N.C. Contact' - image:images/ladder_action_loadbar.png[alt="Normally Closed Contact"] (Normally + * 'N.C. Contact' - image:images/ladder_action_loadbar.png["Normally Closed Contact"] (Normally Closed) When the variable is false the switch is on. -* 'Rising Edge Contact' - When the variable changes from false to true, + * 'Rising Edge Contact' - When the variable changes from false to true, the switch is PULSED on. -* 'Falling Edge Contact' - When the variable changes from true to false, + * 'Falling Edge Contact' - When the variable changes from true to false, the switch is PULSED on. == IEC TIMERS @@ -389,18 +383,18 @@ Monostables. IEC Timers have 2 contacts. -* 'I' - input contact -* 'Q' - output contact + * 'I' - input contact + * 'Q' - output contact There are three modes - TON, TOF, TP. -* 'TON' - When timer input is true countdown begins and continues as long + * '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. -* 'TOF' - When timer input is true, sets output true. When the input is + input is still true the output will be true. + * 'TOF' - When timer input is true, sets output true. When the input is false the timer counts down then sets output false. -* 'TP' - When timer input is pulsed true or held true timer sets output - true till timer counts down. (one-shot) + * 'TP' - When timer input is pulsed true or held true timer sets output + true till timer counts down. (one-shot) The time intervals can be set in multiples of 100ms, seconds, or minutes. @@ -429,19 +423,19 @@ The timer base can be multiples of milliseconds, seconds, or minutes. There are also Variables for timers that can be read and/or written to in compare or operate blocks. -* '%Txx.R' - Timer xx running (Boolean, read only) -* '%Txx.D' - Timer xx done (Boolean, read only) -* '%Txx.V' - Timer xx current value (integer, read only) +* '%Txx.R' - Timer xx running (Boolean, read only) +* '%Txx.D' - Timer xx done (Boolean, read only) +* '%Txx.V' - Timer xx current value (integer, read only) * '%Txx.P' - Timer xx preset (integer, read or write) == MONOSTABLES -Represent the original one-shot timers. This is now +Represent the original one-shot timers. This is now deprecated and replaced by IEC Timers. Monostables have 2 contacts, I and R. -* 'I' - input (input) will start the mono timer running. +* 'I' - input (input) will start the mono timer running. * 'R' - running (output) will be true while timer is running. The I contact is rising edge sensitive meaning it starts the timer @@ -454,8 +448,8 @@ minutes. There are also Variables for monostables that can be read and/or written to in compare or operate blocks. -* '%Mxx.R' - Monostable xx running (Boolean, read only) -* '%Mxx.V' - Monostable xx current value (integer, read only) +* '%Mxx.R' - Monostable xx running (Boolean, read only) +* '%Mxx.V' - Monostable xx current value (integer, read only) * '%Mxx.P' - Monostable xx preset (integer, read or write) == COUNTERS @@ -464,16 +458,16 @@ Represent up/down counters. There are 7 contacts: -* 'R' - reset (input) will reset the count to 0. -* 'P' - preset (input) will set the count to the preset number assigned + * 'R' - reset (input) will reset the count to 0. + * 'P' - preset (input) will set the count to the preset number assigned from the edit menu. -* 'U' - up count (input) will add one to the count. -* 'D' - down count (input) will subtract one from the count. -* 'E' - under flow (output) will be true when the count rolls over from 0 + * 'U' - up count (input) will add one to the count. + * 'D' - down count (input) will subtract one from the count. + * 'E' - under flow (output) will be true when the count rolls over from 0 to 9999. -* 'D' - done (output) will be true when the count equals the preset. -* 'F' - overflow (output) will be true when the count rolls over from 9999 - to 0. + * 'D' - done (output) will be true when the count equals the preset. + * 'F' - overflow (output) will be true when the count rolls over from 9999 + to 0. 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 @@ -484,10 +478,10 @@ The range is 0 to 9999. There are also Variables for counters that can be read and/or written to in compare or operate blocks. -* '%Cxx.D' - Counter xx done (Boolean, read only) -* '%Cxx.E' - Counter xx empty overflow (Boolean, read only) -* '%Cxx.F' - Counter xx full overflow (Boolean, read only) -* '%Cxx.V' - Counter xx current value (integer, read or write) +* '%Cxx.D' - Counter xx done (Boolean, read only) +* '%Cxx.E' - Counter xx empty overflow (Boolean, read only) +* '%Cxx.F' - Counter xx full overflow (Boolean, read only) +* '%Cxx.V' - Counter xx current value (integer, read or write) * '%Cxx.P' - Counter xx preset (integer, read or write) == COMPARE @@ -499,12 +493,12 @@ The compare block will be true when comparison is true. you can use most math symbols: * +, - ,* , /, = (standard math symbols) -* < (less than), > (greater than), <= (less or equal), >= (greater or - equal), <> (not equal) +* < (less than), > (greater than), <= (less or equal), >= (greater or + equal), <> (not equal) * (, ) 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. -* ^ (exponent),% (modulus),& (and),| (or),. - +* ^ (exponent),% (modulus),& (and),| (or),. - * ABS (absolute), MOY (French for average) ,AVG (average) For example ABS(%W2)=1, MOY(%W1,%W2)<3. @@ -569,8 +563,7 @@ pin classicladder.0.s32in-00 is 0 the HAL pin classicladder.0.out-00 will be set to True. .Assign/Compare Example - -image::images/AssignCompare-Ladder.png[align="center", alt="Assign/Compare Example"] +image::images/AssignCompare-Ladder.png["Assign/Compare Example",align="center"] image::images/Assignment_Expression.png[align="center"] @@ -586,19 +579,19 @@ digit number eg. %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. -* 'N.O. COIL' - (a relay coil.) When coil is energized it's N.O. contact + * 'N.O. COIL' - (a relay coil.) When coil is energized it's N.O. contact will be closed (on, true, etc) -* 'N.C. COIL' - (a relay coil that inverses its contacts.) When coil is - energized it"s N.O. contact will be open (off, false, etc) -* 'SET COIL' - (a relay coil with latching contacts) When coil is energized - it's N.O. contact will be latched closed. -* 'RESET COIL' - (a relay coil with latching contacts) When coil is - energized It's N.0. contact will be latched open. -* 'JUMP COIL' - (a 'goto' coil) when coil is energized ladder program jumps + * 'N.C. COIL' - (a relay coil that inverses its contacts.) When coil is + energized it"s N.O. contact will be open (off, false, etc) + * 'SET COIL' - (a relay coil with latching contacts) When coil is energized + it's N.O. contact will be latched closed. + * 'RESET COIL' - (a relay coil with latching contacts) When coil is + energized It's N.0. contact will be latched open. + * 'JUMP COIL' - (a 'goto' coil) when coil is energized 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) -* 'CALL COIL' - (a 'gosub' coil) when coil is energized program jumps to a + box) + * 'CALL COIL' - (a 'gosub' coil) when coil is energized program jumps to a subroutine section designated by a subroutine number -subroutines are designated SR0 to SR9 (designate them in the section manager) @@ -651,63 +644,61 @@ preset, or seeing if a timer is done running. List of variables : -* '%Bxxx' - Bit memory xxx (Boolean) -* '%Wxxx' - Word memory xxx (32 bits signed integer) -* '%IWxxx' - Word memory xxx (S32 in pin) -* '%QWxxx' - Word memory xxx (S32 out pin) -* '%IFxx' - Word memory xx (Float in pin) (*converted to S32 in Classic - Ladder*) -* '%QFxx' - Word memory xx (Float out pin) (*converted to S32 in Classic - Ladder*) -* '%Txx.R' - Timer xx running (Boolean, user read only) -* '%Txx.D' - Timer xx done (Boolean, user read only) -* '%Txx.V' - Timer xx current value (integer, user read only) -* '%Txx.P' - Timer xx preset (integer) -* '%TMxxx.Q' - Timer xxx done (Boolean, read write) -* '%TMxxx.P' - Timer xxx preset (integer, read write) -* '%TMxxx.V' - Timer xxx value (integer, read write) -* '%Mxx.R' - Monostable xx running (Boolean) -* '%Mxx.V' - Monostable xx current value (integer, user read only) -* '%Mxx.P' - Monostable xx preset (integer) -* '%Cxx.D' - Counter xx done (Boolean, user read only) -* '%Cxx.E' - Counter xx empty overflow (Boolean, user read only) -* '%Cxx.F' - Counter xx full overflow (Boolean, user read only) -* '%Cxx.V' - Counter xx current value (integer) -* '%Cxx.P' - Counter xx preset (integer) -* '%Ixxx' - Physical input xxx (Boolean) (HAL input bit) -* '%Qxxx' - Physical output xxx (Boolean) (HAL output bit) -* '%Xxxx' - Activity of step xxx (sequential language) -* '%Xxxx.V' - Time of activity in seconds of step xxx (sequential language) -* '%Exx' - Errors (Boolean, read write(will be overwritten)) -* 'Indexed or vectored variables' - These are variables indexed by another + * '%Bxxx' - Bit memory xxx (Boolean) + * '%Wxxx' - Word memory xxx (32 bits signed integer) + * '%IWxxx' - Word memory xxx (S32 in pin) + * '%QWxxx' - Word memory xxx (S32 out pin) + * '%IFxx' - Word memory xx (Float in pin) (*converted to S32 in Classic Ladder*) + * '%QFxx' - Word memory xx (Float out pin) (*converted to S32 in Classic Ladder*) + * '%Txx.R' - Timer xx running (Boolean, user read only) + * '%Txx.D' - Timer xx done (Boolean, user read only) + * '%Txx.V' - Timer xx current value (integer, user read only) + * '%Txx.P' - Timer xx preset (integer) + * '%TMxxx.Q' - Timer xxx done (Boolean, read write) + * '%TMxxx.P' - Timer xxx preset (integer, read write) + * '%TMxxx.V' - Timer xxx value (integer, read write) + * '%Mxx.R' - Monostable xx running (Boolean) + * '%Mxx.V' - Monostable xx current value (integer, user read only) + * '%Mxx.P' - Monostable xx preset (integer) + * '%Cxx.D' - Counter xx done (Boolean, user read only) + * '%Cxx.E' - Counter xx empty overflow (Boolean, user read only) + * '%Cxx.F' - Counter xx full overflow (Boolean, user read only) + * '%Cxx.V' - Counter xx current value (integer) + * '%Cxx.P' - Counter xx preset (integer) + * '%Ixxx' - Physical input xxx (Boolean) (HAL input bit) + * '%Qxxx' - Physical output xxx (Boolean) (HAL output bit) + * '%Xxxx' - Activity of step xxx (sequential language) + * '%Xxxx.V' - Time of activity in seconds of step xxx (sequential language) + * '%Exx' - Errors (Boolean, read write(will be overwritten)) + * '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 + if %W4 equals 23 it corresponds to %W23 = GRAFCET (State Machine) Programming [WARNING] -This is probably the least used and most poorly understood -feature of Classic Ladder. +This is probably the least used and most poorly understood +feature of Classic Ladder. 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 +do not work alone. There is always a ladder program as well that controls the variables. Here are the basic rules governing sequential programs: -* Rule 1 : Initial situation - The initial situation is characterized by + * 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. -* Rule 2 : R2, Clearing of a transition - A transition is either enabled + beginning of the operation.There shall be at least one initial step. + * 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. -* Rule 3 : R3, Evolution of active steps - The clearing of a transition + enabled, and its associated transition condition is true. + * 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). -* Rule 4 : R4, Simultaneous clearing of transitions - All simultaneous - cleared transitions are simultaneously cleared. -* Rule 5 : R5, Simultaneous activation and deactivation of a step - If + * Rule 4 : R4, Simultaneous clearing of transitions - All simultaneous + cleared transitions are simultaneously cleared. + * 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. @@ -717,22 +708,22 @@ Transition , Step and Transition Transition Link-Downside , Transition Link-Upside Pass-through Link-Downside , Pass-through Link-Upside Jump Link Comment Box [show sequential program] -* 'ORDINARY STEP' - has a unique number for each one -* 'STARTING STEP' - a sequential program must have one. This is where the + * 'ORDINARY STEP' - has a unique number for each one + * 'STARTING STEP' - a sequential program must have one. This is where the program will start. -* 'TRANSITION' - This shows the variable that must be true for control to + * 'TRANSITION' - This shows the variable that must be true for control to pass through to the next step. -* 'STEP AND TRANSITION' - Combined for convenience -* '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) -* 'TRANSITION LINK=UPSIDE' - combines two (OR) logic lines back in to one -* 'PASS-THROUGH LINK-DOWNSIDE' - splits the logic flow to two lines that - BOTH must be true to continue (Think AND logic) -* 'PASS-THROUGH LINK-UPSIDE' - combines two concurrent (AND logic) logic + * 'STEP AND TRANSITION' - Combined for convenience + * '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) + * 'TRANSITION LINK=UPSIDE' - combines two (OR) logic lines back in to one + * 'PASS-THROUGH LINK-DOWNSIDE' - splits the logic flow to two lines that + BOTH must be true to continue (Think AND logic) + * 'PASS-THROUGH LINK-UPSIDE' - combines two concurrent (AND logic) logic lines back together -* 'JUMP LINK' - connects steps that are not underneath each other such as - connecting the last step to the first -* 'COMMENT BOX' - used to add comments + * 'JUMP LINK' - connects steps that are not underneath each other such as + connecting the last step to the first + * 'COMMENT BOX' - used to add comments 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 @@ -751,19 +742,19 @@ to the beginning step. Things to consider: -* Modbus is a userspace program so it might have latency issues on a + * Modbus is a userspace program so it might have latency issues on a heavily laden computer. -* Modbus is not really suited to Hard real time events such as position - control of motors or to control E-stop. -* The Classic Ladder GUI must be running for Modbus to be running. -* Modbus is not fully finished so it does not do all modbus functions. + * Modbus is not really suited to Hard real time events such as position + control of motors or to control E-stop. + * The Classic Ladder GUI must be running for Modbus to be running. + * Modbus is not fully finished so it does not do all modbus functions. To get MODBUS to initialize you must specify that when loading the Classic Ladder userspace program. .Loading Modbus ---- -loadusr -w classicladder --modmaster myprogram.clp +loadusr -w classicladder --modmaster myprogram.clp ---- The -w makes HAL wait until you close Classic Ladder before closing realtime @@ -785,141 +776,139 @@ If you do not specify a '-- modmaster' when loading the Classic Ladder user program this page will not be displayed. .Config I/O - -image::images/Config-io.png[align="center", alt="Config I/O"] +image::images/Config-io.png["Config I/O",align="center"] .Config Coms +image::images/Config-com.png["Config Coms",align="center"] -image::images/Config-com.png[align="center", alt="Config Coms"] + * '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). -* '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). + * 'SERIAL SPEED' - Should be set to speed the slave is set for - 300, 600, 1200, 2400, + 4800, 9600, 19200, 38400, 57600, 115200 are supported. -* 'SERIAL SPEED' - Should be set to speed the slave is set for - 300, 600, 1200, 2400, - 4800, 9600, 19200, 38400, 57600, 115200 are supported. + * 'PAUSE AFTER TRANSMIT' - Pause (milliseconds) after transmit and before receiving answer, + some devices need more time (e.g., USB-to-serial converters). -* 'PAUSE AFTER TRANSMIT' - Pause (milliseconds) after transmit and before receiving answer, - some devices need more time (e.g., USB-to-serial converters). + * 'PAUSE INTER-FRAME' - Pause (milliseconds) after receiving answer from slave. This sets + the duty cycle of requests (it's a pause for EACH request). -* 'PAUSE INTER-FRAME' - Pause (milliseconds) after receiving answer from slave. This sets - the duty cycle of requests (it's a pause for EACH request). + * 'REQUEST TIMEOUT LENGTH' - Length (milliseconds) of time before we decide that the slave didn't + answer. -* 'REQUEST TIMEOUT LENGTH' - Length (milliseconds) of time before we decide that the slave didn't - answer. + * 'MODBUS ELEMENT OFFSET' - used to offset the element numbers by 1 (for manufacturers numbering + differences). -* 'MODBUS ELEMENT OFFSET' - used to offset the element numbers by 1 (for manufacturers numbering - differences). + * 'DEBUG LEVEL' - Set this to 0-3 (0 to stop printing debug info besides no-response + errors). -* 'DEBUG LEVEL' - Set this to 0-3 (0 to stop printing debug info besides no-response - errors). + * 'READ COILS/INPUTS MAP TO' - Select what variables that read coils/inputs will update. (B or Q). -* 'READ COILS/INPUTS MAP TO' - Select what variables that read coils/inputs will update. (B or Q). + * 'WRITE COILS MAP TO' - Select what variables that write coils will updated.from (B,Q,or I). -* 'WRITE COILS MAP TO' - Select what variables that write coils will updated.from (B,Q,or I). + * 'READ REGISTERS/HOLDING' - Select what variables that read registers will update. (W or QW). -* 'READ REGISTERS/HOLDING' - Select what variables that read registers will update. (W or QW). + * 'WRITE REGISTERS MAP TO' - Select what variables that read registers will updated from. (W, QW, + or IW). -* 'WRITE REGISTERS MAP TO' - Select what variables that read registers will updated from. (W, QW, - or IW). + * '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. -* '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. + * 'TYPE ACCESS' - This selects the MODBUS function code to send to the slave (eg what + type of request). -* 'TYPE ACCESS' - This selects the MODBUS function code to send to the slave (eg what - type of request). + * 'COILS / INPUTS' - Inputs and Coils (bits) are read from/written to I, B, or Q variables (user selects). -* 'COILS / INPUTS' - Inputs and Coils (bits) are read from/written to I, B, or Q variables (user selects). + * 'REGISTERS (WORDS)' - Registers (Words/Numbers) map to IW, W, or QW variables (user selects). -* 'REGISTERS (WORDS)' - Registers (Words/Numbers) map to IW, W, or QW variables (user selects). + * '1st MODBUS ELEMENT' - The address (or register number) of the first element in a group. + (remember to set MODBUS ELEMENT OFFSET properly). -* '1st MODBUS ELEMENT' - The address (or register number) of the first element in a group. - (remember to set MODBUS ELEMENT OFFSET properly). + * 'NUMBER OF ELEMENTS' - The number of elements in this group. -* 'NUMBER OF ELEMENTS' - The number of elements in this group. + * 'LOGIC' - You can invert the logic here. -* 'LOGIC' - You can invert the logic here. - -* '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). + * '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). In the example above: Port number - for my computer /dev/ttyS0 was my -serial port. +serial port. The serial speed is set to 9600 baud. 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). +meaning I can talk to 31 VFDs maximum on one system). 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 +register number (register 1). So register numbers 1-8 are mapped onto Classic Ladder's %B variables starting at %B1 and ending at %B8. 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 -Classic Ladder's %Q variables starting at %Q9 ending at %Q10. +register number (register 9) so register numbers 9-10 are mapped onto +Classic Ladder's %Q variables starting at %Q9 ending at %Q10. 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 Classic Ladder's %W variables starting at %W0 ending at %W1. +the 0th register number (register 0) so register numbers 0-1 are +mapped onto Classic Ladder's %W variables starting at %W0 ending at %W1. 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. +offset radio button to help with this. The documents for your modbus slave device will tell you how the registers are set up- there is no standard way. 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). +Radio buttons apply immediately). 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. The number 257 will be sent to the slave number you specified and the slave should send it back. you will need to have Classic Ladder running -in a terminal to see the message. +in a terminal to see the message. -== MODBUS Settings +== MODBUS Settings Serial: -* Classic Ladder uses RTU protocol (not ASCII). -* 8 data bits, No parity is used, and 1 stop bit is also known as 8-N-1. -* Baud rate must be the same for slave and master. Classic Ladder can + * Classic Ladder uses RTU protocol (not ASCII). + * 8 data bits, No parity is used, and 1 stop bit is also known as 8-N-1. + * Baud rate must be the same for slave and master. Classic Ladder can only have one baud rate so all the slaves must be set to the same rate. -* Pause inter frame is the time to pause after receiving an answer. -* MODBUS_TIME_AFTER_TRANSMIT is the length of pause after sending a + * Pause inter frame is the time to pause after receiving an answer. + * 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). + converters which are slow). == MODBUS Info -* Classic Ladder can use distributed inputs/outputs on modules using the + * Classic Ladder can use distributed inputs/outputs on modules using the modbus protocol ("master": polling slaves). -* The slaves and theirs I/O can be configured in the config window. -* 2 exclusive modes are available : ethernet using Modbus/TCP and serial + * The slaves and theirs I/O can be configured in the config window. + * 2 exclusive modes are available : ethernet using Modbus/TCP and serial using Modbus/RTU. -* No parity is used. -* If no port name for serial is set, TCP/IP mode will be used... -* The slave address is the slave address (Modbus/RTU) or the IP address. -* The IP address can be followed per the port number to use + * No parity is used. + * If no port name for serial is set, TCP/IP mode will be used... + * The slave address is the slave address (Modbus/RTU) or the IP address. + * 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. -* 2 products have been used for tests: a Modbus/TCP one (Adam-6051, + * 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). -* See examples: adam-6051 and modbus_rtu_serial. -* Web links: http://www.modbus.org and this interesting one: + (http://www.ipac.ws). + * See examples: adam-6051 and modbus_rtu_serial. + * Web links: http://www.modbus.org and this interesting one: http://www.iatips.com/modbus.html -* MODBUS TCP SERVER INCLUDED -* Classic Ladder has a Modbus/TCP server integrated. Default port is 9502. + * MODBUS TCP SERVER INCLUDED + * Classic Ladder has a Modbus/TCP server integrated. Default port is 9502. (the previous standard 502 requires that the application must be launched with root privileges). -* List of Modbus functions code supported are: 1, 2, 3, 4, 5, 6, 15 and 16. -* Modbus bits and words correspondence table is actually not parametric + * List of Modbus functions code supported are: 1, 2, 3, 4, 5, 6, 15 and 16. + * Modbus bits and words correspondence table is actually not parametric and correspond directly to the %B and %W variables. More information on modbus protocol is available on the internet. @@ -934,9 +923,10 @@ 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. == Debugging modbus problems + 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 +If you run linuxcnc/classocladder from a terminal, it will print the Modbus commands and slave responses. + Here we set Classiclader to request slave 1, + @@ -944,13 +934,13 @@ 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 + -image::images/modbus_register_setting.png[align="center", alt="Config I/O Register Setting"] +image::images/modbus_register_setting.png["Config I/O Register Setting",align="center"] 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 + - -image::images/modbus_com_setting.png[align="center", alt="Communication Setting"] + +image::images/modbus_com_setting.png["Communication Setting",align="center"] === Request Lets look at an example of reading one hold register at 8448 Decimal (0x2100 Hex) + @@ -958,15 +948,14 @@ Lets look at an example of reading one hold register at 8448 Decimal (0x2100 Hex Looking in the Modbus protocol reference: + .Read holding register request - [width="50%", options="header", cols="<6,<2,<6"] -|======================================== -|Name | number of bytes | Value (hex) -|Function code | (1 Byte) | 3 (0x03) -|Starting Address | (2 Bytes) | 0 - 65535 (0x0000 to 0xFFFF) -|Number of Registers | (2 Bytes) | 1 to 125 (0x7D) -|Checksum | (2 bytes) | Calculated automatically -|======================================== +|=== +|Name | number of bytes | Value (hex) +|Function code | (1 Byte) | 3 (0x03) +|Starting Address | (2 Bytes) | 0 - 65535 (0x0000 to 0xFFFF) +|Number of Registers | (2 Bytes) | 1 to 125 (0x7D) +|Checksum | (2 bytes) | Calculated automatically +|=== Here is an example sent command as printed in the terminal (all Hex): + @@ -988,14 +977,13 @@ Getting an error response means the slave is seeing the request command but can Looking in the Modbus protocol reference: + .Error returned for function code 3 (read holding register) - [width="50%", options="header", cols="<6,<2,<6"] -|======================================== -|Name | number of bytes | Value (hex) -|Error code | 1 Byte | 131 (0x83) -|Exception code | 1 Byte | 1-4 (0x01 to 0x04) -|Checksum | (2 bytes) | Calculated automatically -|======================================== +|=== +| Name | Number of bytes | Value (hex) +| Error code | 1 Byte | 131 (0x83) +| Exception code | 1 Byte | 1-4 (0x01 to 0x04) +| Checksum | (2 bytes) | Calculated automatically +|=== exception code meaning: @@ -1021,19 +1009,19 @@ Looking in the Modbus protocol reference for Response: + .Data response for function code 3 (read holding register) [width="50%", options="header", cols="<6,<2,<6"] -|======================================== -|Name | number of bytes | Value (hex) -|Function code | 1 Byte | 3 (0x03) -|Byte count | 1 Byte | 2 x N* -|Register value | N* x 2 Bytes | returned value of requested address -|Checksum | (2 bytes) | Calculated automatically -| ( *N = Number of Registers ) | | -|======================================== +|=== +|Name | number of bytes | Value (hex) +|Function code | 1 Byte | 3 (0x03) +|Byte count | 1 Byte | 2 x N* +|Register value | N* x 2 Bytes | returned value of requested address +|Checksum | (2 bytes) | calculated automatically +|=== +*N = Number of registers Here is an example received command as printed in the terminal (all Hex): + ---- -INFO CLASSICLADDER- Modbus I/O module received: Lgt=7 -> (Slave address-1 Function code-3 2 0 0 B8 44 +INFO CLASSICLADDER- Modbus I/O module received: Lgt=7 -> (Slave address-1 Function code-3 2 0 0 B8 44 ---- meaning (Hex): + @@ -1053,26 +1041,26 @@ If multiple registers are requested in one read/write then the variable number a == MODBUS Bugs -* In compare blocks the function %W=ABS(%W1-%W2) is accepted but does - not compute properly. only %W0=ABS(%W1) is currently legal. -* When loading a ladder program it will load Modbus info but will not + * In compare blocks the function %W=ABS(%W1-%W2) is accepted but does + not compute properly. only %W0=ABS(%W1) is currently legal. + * When loading a ladder program it will load Modbus info but will not tell Classic Ladder to initialize Modbus. You must initialize Modbus - when you first load the GUI by adding '--modmaster'. -* If the section manager is placed on top of the section display, across + when you first load the GUI by adding '--modmaster'. + * If the section manager is placed on top of the section display, across the scroll bar and exit is clicked the user program crashes. -* When using '--modmaster' you must load the ladder program at the same + * When using '--modmaster' you must load the ladder program at the same time or else only TCP will work. -* reading/writing multiple registers in Modbus has checksum errors. + * reading/writing multiple registers in Modbus has checksum errors. = Setting up Classic Ladder In this section we will cover the steps needed to add Classic Ladder to a Stepconf Wizard generated config. On the advanced Configuration -Options page of Stepconf Wizard check off "Include Classic Ladder PLC". +Options page of Stepconf Wizard check off "Include Classic Ladder PLC". .Stepconf Classic Ladder -image::images/stepconf_ladder.png[align="center", alt="Stepconf Classic Ladder"] +image::images/stepconf_ladder.png["Stepconf Classic Ladder",align="center"] == Add the Modules @@ -1107,44 +1095,38 @@ horizontal branches. While it is possible to have more than one circuit in a run the results are not predictable. .Section Display with Grid - -image::images/Section_Display_Grid.png[align="center", alt="Section Display with Grid"] +image::images/Section_Display_Grid.png["Section Display with Grid",align="center"] Now click on the N.O. Input in the Editor Window. .Editor Window - -image::images/Editor_NO_Input.png[align="center", alt="Editor Window"] +image::images/Editor_NO_Input.png["Editor Window",align="center"] Now click in the upper left grid to place the N.O. Input into the ladder. .Section Display with Input - -image::images/Section_Display_Build01.png[align="center", alt="Section Display with Input"] +image::images/Section_Display_Build01.png["Section Display with Input",align="center"] 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. .Section Display with Rung - -image::images/Section_Display_Build02.png[align="center", alt="Section Display with Rung"] +image::images/Section_Display_Build02.png["Section Display with Rung",align="center"] Now click on the OK button in the Editor window. Now your Section Display should look like this. .Section Display Finished - -image::images/Section_Display_Build03.png[align="center", alt="Section Display Finished"] +image::images/Section_Display_Build03.png["Section Display Finished",align="center"] 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. .Save As Dialog - -image::images/SaveAs.png[align="center", alt="Save As Dialog"] +image::images/SaveAs.png["Save As Dialog",align="center"] Again if you used the Stepconf Wizard to add Classic Ladder you can skip this step. @@ -1161,4 +1143,3 @@ 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. - diff --git a/docs/src/ladder/classic-ladder_es.adoc b/docs/src/ladder/classic-ladder_es.adoc deleted file mode 100644 index 9dc08337ae4..00000000000 --- a/docs/src/ladder/classic-ladder_es.adoc +++ /dev/null @@ -1,1164 +0,0 @@ -[[cha:classicladder]] - -= Ladder Concepts - -Classic Ladder 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. - -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. - -* the inputs are read and updated -* the logic is figured out -* the outputs are set - -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. - -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. - -= Languages - -The most common language used when working with Classic Ladder is -'ladder'. Classic Ladder also supports Sequential Function Chart -(Grafcet). - -= Components - -There are 2 components to Classic Ladder. - -* The real time module classicladder_rt -* The user space module (including a GUI) classicladder - -== Files - -Typically classic ladder 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. - -NOTE: Ladder files (.clp) must not contain any blank spaces in the name. - -== Realtime Module - -Loading the Classic Ladder real time module (classicladder_rt) is -possible from a HAL file, or directly using a halcmd instruction. The -first line loads real time the Classic Ladder module. The second line -adds the function classicladder.0.refresh to the servo thread. This -line makes Classic Ladder update at the servo thread rate. - ----- -loadrt classicladder_rt -addf classicladder.0.refresh servo-thread ----- - -The speed of the thread that Classic Ladder is running in directly -affects the responsiveness to inputs and outputs. If you can turn a -switch on and off faster than Classic Ladder can notice it then you may -need to speed up the thread. The fastest that Classic Ladder 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 Classic Ladder 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. - -== Variables - -It is possible to configure the number of each type of ladder object -while loading the Classic Ladder real time module. If you do not -configure the number of ladder objects Classic Ladder will use the -default values. - -.Default Variable Count - -[width="90%", options="header", cols="<8,<4,<2"] -|======================================== -|Object Name | Variable Name | Default Value -|Number of rungs | (numRungs) | 100 -|Number of bits | (numBits) | 20 -|Number of word variables | (numWords) | 20 -|Number of timers | (numTimers) | 10 -|Number of timers IEC | (numTimersIec) | 10 -|Number of monostables | (numMonostables) | 10 -|Number of counters | (numCounters) | 10 -|Number of HAL inputs bit pins | (numPhysInputs) | 15 -|Number of HAL output bit pins | (numPhysOutputs) | 15 -|Number of arithmetic expressions | (numArithmExpr) | 50 -|Number of Sections | (numSections) | 10 -|Number of Symbols | (numSymbols) | Auto -|Number of S32 inputs | (numS32in) | 10 -|Number of S32 outputs | (numS32out) | 10 -|Number of Float inputs | (numFloatIn) | 10 -|Number of Float outputs | (numFloatOut) | 10 -|======================================== - -Objects of most interest are numPhysInputs, numPhysOutputs, numS32in, -and numS32out. - -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. - -For example (you don't need all of these to change just a few): - ----- -loadrt classicladder_rt numRungs=12 numBits=100 numWords=10 -numTimers=10 numMonostables=10 numCounters=10 numPhysInputs=10 -numPhysOutputs=10 numArithmExpr=100 numSections=4 numSymbols=200 -numS32in=5 numS32out=5 ----- - -To load the default number of objects: - ----- -loadrt classicladder_rt ----- - -= Loading the Classic Ladder user module - -Classic Ladder 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 Classic Ladder HAL commands in the custom.hal -file. - -To load the user module: - ----- -loadusr classicladder ----- - -NOTE: Only one .clp file can be loaded. If you need to divide your ladder -use Sections. - -To load a ladder file: - ----- -loadusr classicladder myladder.clp ----- - -Classic Ladder Loading Options - -* '--nogui' - (loads without the ladder editor) normally used after - debugging is finished. -* '--modbus_port=port' - (loads the modbus port number) -* '--modmaster' - (initializes MODBUS master) should load the ladder - program at the same time or the TCP is default port. -* '--modslave' - (initializes MODBUS slave) only TCP - -To use Classic Ladder with HAL without EMC: - ----- -loadusr -w classicladder ----- - -The -w tells HAL not to close down the HAL environment -until Classic Ladder is finished. - -If you first load ladder program with the '--nogui' option then load -Classic Ladder again with no options the GUI -will display the last loaded ladder program. - -In AXIS you can load the GUI from File/Ladder Editor... - -= Classic Ladder GUI - -If you load Classic Ladder with the GUI it will display two windows: -section display, and section manager. - -== Sections Manager - -When you first start up Classic Ladder you get an empty Sections -Manager window. - -.Sections Manager Default Window - -image::images/Default_Sections_Manager.png[align="center", alt="Sections Manager Default Window"] - -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. - -== Section Display - -When you first start up Classic Ladder you get an empty Section -Display window. Displayed is one empty rung. - -.Section Display Default Window - -image::images/Default_Section_Display.png[align="center", alt="Section Display Default Window"] - -Most of the buttons are self explanatory: - -The Vars button is for looking at variables, toggle it to display one, -the other, both, then none of the windows. - -The Config button is used for modbus and shows the max number of -ladder elements that was loaded with the real time module. - -The Symbols button will display an editable list of symbols for the -variables (hint you can name the inputs, outputs, coils etc). - -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. - -The check box at the top right allows you to select whether variable -names or symbol names are displayed - -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. - -== The Variable Windows - -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. - -.Bit Status Window - -image::images/Bit_Status.png[align="center",alt="Bit Status Window"] - -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 Classic Ladder is -running can not be changed and will be displayed as checked if on and -unchecked if off. - -.Watch Window - -image::images/watch_window.png[align="center", alt="Watch Window"] - -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. - -== Symbol Window - -.Symbol Names window - -image::images/Default_Symbols_names.png[align="center", alt="Symbol Names window"] - -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! - -== The Editor window - -.Editor Window - -image::images/Editor.png[align="center", alt="Editor Window"] - -* 'Add' - adds a rung after the selected rung -* 'Insert' - inserts a rung before the selected rung -* 'Delete' - deletes the selected rung -* 'Modify' - opens the selected rung for editing - -Starting from the top left image: - -* Object Selector, Eraser -* N.O. Input, N.C. Input, Rising Edge Input , Falling Edge Input -* Horizontal Connection, Vertical Connection , Long Horizontal Connection -* Timer IEC Block, Counter Block, Compare Variable -* Old Timer Block, Old Monostable Block (These have been replaced by the - IEC Timer) -* COILS - N.O. Output, N.C. Output, Set Output, Reset Output -* Jump Coil, Call Coil, Variable Assignment - -A short description of each of the buttons: - -* 'Selector' - allows you to select existing objects and - modify the information. -* 'Eraser' - erases an object. -* '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). -* '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. -* '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. -* '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. -* 'Horizontal Connection' - creates a horizontal connection to objects. -* 'Vertical Connection' - creates a vertical connection to horizontal lines. -* '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. -* 'IEC Timer' - creates a timer and replaces the 'Timer'. -* 'Timer' - creates a Timer Module (depreciated use IEC Timer instead). -* 'Monostable' - creates a one-shot monostable module -* 'Counter' - creates a counter module. -* '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. -* '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. - -== Config Window - -The config window shows the current project status and has the Modbus -setup tabs. - -.Config Window - -image::images/Config.png[align="center", alt="Config Window"] - -= Ladder objects - -== CONTACTS - -Represent switches or relay contacts. They are controlled by the -variable letter and number assigned to them. - -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.) - -* 'N.O. Contact' - image:images/ladder_action_load.png[alt="Normally Open Contact"] (Normally Open) - When the variable is false the switch is off. -* 'N.C. Contact' - image:images/ladder_action_loadbar.png[alt="Normally Closed Contact"] (Normally - Closed) When the variable is false the switch is on. -* 'Rising Edge Contact' - When the variable changes from false to true, - the switch is PULSED on. -* 'Falling Edge Contact' - When the variable changes from true to false, - the switch is PULSED on. - -== IEC TIMERS - -Represent new count down timers. IEC Timers replace Timers and -Monostables. - -IEC Timers have 2 contacts. - -* 'I' - input contact -* 'Q' - output contact - -There are three modes - TON, TOF, TP. - -* '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. -* 'TOF' - When timer input is true, sets output true. When the input is - false the timer counts down then sets output false. -* 'TP' - When timer input is pulsed true or held true timer sets output - true till timer counts down. (one-shot) - -The time intervals can be set in multiples of 100ms, seconds, or -minutes. - -There are also Variables for IEC timers that can be read and/or -written to in compare or operate blocks. - -* '%TMxxx.Q' - timer done (Boolean, read write) -* '%TMxxx.P' - timer preset (read write) -* '%TMxxx.V' - timer value (read write) - -== TIMERS - -Represent count down timers. This is deprecated and replaced by IEC -Timers. - -Timers have 4 contacts. - -* 'E' - enable (input) starts timer when true, resets when goes false -* 'C' - control (input) must be on for the timer to run (usually connect to E) -* 'D' - done (output) true when timer times out and as long as E remains true -* 'R' - running (output) true when timer is running - -The timer base can be multiples of milliseconds, seconds, or minutes. - -There are also Variables for timers that can be read and/or written to -in compare or operate blocks. - -* '%Txx.R' - Timer xx running (Boolean, read only) -* '%Txx.D' - Timer xx done (Boolean, read only) -* '%Txx.V' - Timer xx current value (integer, read only) -* '%Txx.P' - Timer xx preset (integer, read or write) - -== MONOSTABLES - -Represent the original one-shot timers. This is now -deprecated and replaced by IEC Timers. - -Monostables have 2 contacts, I and R. - -* 'I' - input (input) will start the mono timer running. -* 'R' - running (output) will be true while timer is running. - -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. - -There are also Variables for monostables that can be read and/or -written to in compare or operate blocks. - -* '%Mxx.R' - Monostable xx running (Boolean, read only) -* '%Mxx.V' - Monostable xx current value (integer, read only) -* '%Mxx.P' - Monostable xx preset (integer, read or write) - -== COUNTERS - -Represent up/down counters. - -There are 7 contacts: - -* 'R' - reset (input) will reset the count to 0. -* 'P' - preset (input) will set the count to the preset number assigned - from the edit menu. -* 'U' - up count (input) will add one to the count. -* 'D' - down count (input) will subtract one from the count. -* 'E' - under flow (output) will be true when the count rolls over from 0 - to 9999. -* 'D' - done (output) will be true when the count equals the preset. -* 'F' - overflow (output) will be true when the count rolls over from 9999 - to 0. - -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). - -The range is 0 to 9999. - -There are also Variables for counters that can be read and/or written -to in compare or operate blocks. - -* '%Cxx.D' - Counter xx done (Boolean, read only) -* '%Cxx.E' - Counter xx empty overflow (Boolean, read only) -* '%Cxx.F' - Counter xx full overflow (Boolean, read only) -* '%Cxx.V' - Counter xx current value (integer, read or write) -* '%Cxx.P' - Counter xx preset (integer, read or write) - -== COMPARE - -For arithmetic comparison. Is variable %XXX = to this number (or -evaluated number) - -The compare block will be true when comparison is true. you can use -most math symbols: - -* +, - ,* , /, = (standard math symbols) -* < (less than), > (greater than), <= (less or equal), >= (greater or - equal), <> (not equal) -* (, ) 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 seperating the two groups of comparisions. -* ^ (exponent),% (modulus),& (and),| (or),. - -* ABS (absolute), MOY (French for average) ,AVG (average) - -For example ABS(%W2)=1, MOY(%W1,%W2)<3. - -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. - -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. - -To find out if word variable #1 is less than 2 times the current value -of counter #0 the syntax would be: - ----- -%W1<2*%C0.V ----- - -To find out if S32in bit 2 is equal to 10 the syntax would be: - ----- -%IW2=10 ----- - -Note: Compare uses the arithmetic equals not the double equals that -programmers are used to. - -== VARIABLE ASSIGNMENT - -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. - -When a new variable assignment block is opened be sure to delete the -# symbol when you enter an assignment. - -To assign a value of 10 to the timer preset of IEC Timer 0 the syntax -would be: - ----- -%TM0.P=10 ----- - -To assign the value of 12 to s32out bit 3 the syntax would be: - ----- -%QW3=12 ----- - -[NOTE] -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. - -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. - -.Assign/Compare Example - -image::images/AssignCompare-Ladder.png[align="center", alt="Assign/Compare Example"] - -image::images/Assignment_Expression.png[align="center"] - -image::images/Comparison_Expression.png[align="center"] - -== COILS - -Coils represent relay coils. They are controlled by the variable -letter and number assigned to them. - -The variable letter can be B or Q and the number can be up to a three -digit number eg. %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. - -* 'N.O. COIL' - (a relay coil.) When coil is energized it's N.O. contact - will be closed (on, true, etc) -* 'N.C. COIL' - (a relay coil that inverses its contacts.) When coil is - energized it"s N.O. contact will be open (off, false, etc) -* 'SET COIL' - (a relay coil with latching contacts) When coil is energized - it's N.O. contact will be latched closed. -* 'RESET COIL' - (a relay coil with latching contacts) When coil is - energized It's N.0. contact will be latched open. -* 'JUMP COIL' - (a 'goto' coil) when coil is energized 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) -* 'CALL COIL' - (a 'gosub' coil) when coil is energized program jumps to a - subroutine section designated by a subroutine number -subroutines are - designated SR0 to SR9 (designate them in the section manager) - -[WARNING] -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! - -.JUMP COIL - -A JUMP COIL is used to 'JUMP' to another section, like a goto in BASIC -programming language. - -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. - -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. - -When placing a JUMP COIL, add it in the rightmost position and change -the label to the rung you want to JUMP to. - -.CALL COIL - -A CALL COIL is used to go to a subroutine section then return, like a -gosub in BASIC programming language. - -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). - -Select a subroutine number (SR0 for example). An empty section will be -displayed and you can build your subroutine. - -When you've done that, go back to the section manager and click on the -your main section (default name prog1). - -Now you can add a CALL COIL to your program. CALL COILs are to be -placed at the rightmost position in the rung. - -Remember to change the label to the subroutine number you chose before. - -= Classic Ladder Variables - -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. - -List of variables : - -* '%Bxxx' - Bit memory xxx (Boolean) -* '%Wxxx' - Word memory xxx (32 bits signed integer) -* '%IWxxx' - Word memory xxx (S32 in pin) -* '%QWxxx' - Word memory xxx (S32 out pin) -* '%IFxx' - Word memory xx (Float in pin) (*converted to S32 in Classic - Ladder*) -* '%QFxx' - Word memory xx (Float out pin) (*converted to S32 in Classic - Ladder*) -* '%Txx.R' - Timer xx running (Boolean, user read only) -* '%Txx.D' - Timer xx done (Boolean, user read only) -* '%Txx.V' - Timer xx current value (integer, user read only) -* '%Txx.P' - Timer xx preset (integer) -* '%TMxxx.Q' - Timer xxx done (Boolean, read write) -* '%TMxxx.P' - Timer xxx preset (integer, read write) -* '%TMxxx.V' - Timer xxx value (integer, read write) -* '%Mxx.R' - Monostable xx running (Boolean) -* '%Mxx.V' - Monostable xx current value (integer, user read only) -* '%Mxx.P' - Monostable xx preset (integer) -* '%Cxx.D' - Counter xx done (Boolean, user read only) -* '%Cxx.E' - Counter xx empty overflow (Boolean, user read only) -* '%Cxx.F' - Counter xx full overflow (Boolean, user read only) -* '%Cxx.V' - Counter xx current value (integer) -* '%Cxx.P' - Counter xx preset (integer) -* '%Ixxx' - Physical input xxx (Boolean) (HAL input bit) -* '%Qxxx' - Physical output xxx (Boolean) (HAL output bit) -* '%Xxxx' - Activity of step xxx (sequential language) -* '%Xxxx.V' - Time of activity in seconds of step xxx (sequential language) -* '%Exx' - Errors (Boolean, read write(will be overwritten)) -* '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 - -= GRAFCET (State Machine) Programming - -[WARNING] -This is probably the least used and most poorly understood -feature of Classic Ladder. -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: - -* 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. -* 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. -* 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). -* Rule 4 : R4, Simultaneous clearing of transitions - All simultaneous - cleared transitions are simultaneously cleared. -* 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. - -This is the SEQUENTIAL editor window Starting from the top left image: -Selector arrow , Eraser Ordinary step , Initial (Starting) step -Transition , Step and Transition Transition Link-Downside , Transition -Link-Upside Pass-through Link-Downside , Pass-through Link-Upside Jump -Link Comment Box [show sequential program] - -* 'ORDINARY STEP' - has a unique number for each one -* 'STARTING STEP' - a sequential program must have one. This is where the - program will start. -* 'TRANSITION' - This shows the variable that must be true for control to - pass through to the next step. -* 'STEP AND TRANSITION' - Combined for convenience -* '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) -* 'TRANSITION LINK=UPSIDE' - combines two (OR) logic lines back in to one -* 'PASS-THROUGH LINK-DOWNSIDE' - splits the logic flow to two lines that - BOTH must be true to continue (Think AND logic) -* 'PASS-THROUGH LINK-UPSIDE' - combines two concurrent (AND logic) logic - lines back together -* 'JUMP LINK' - connects steps that are not underneath each other such as - connecting the last step to the first -* 'COMMENT BOX' - used to add comments - -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! - -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. - -= Modbus - -Things to consider: - -* Modbus is a userspace program so it might have latency issues on a - heavily laden computer. -* Modbus is not really suited to Hard real time events such as position - control of motors or to control E-stop. -* The Classic Ladder GUI must be running for Modbus to be running. -* Modbus is not fully finished so it does not do all modbus functions. - -To get MODBUS to initialize you must specify that when loading the -Classic Ladder userspace program. - -.Loading Modbus ----- -loadusr -w classicladder --modmaster myprogram.clp ----- - -The -w makes HAL wait until you close Classic Ladder before closing realtime -session. Classic Ladder also loads a TCP modbus slave if you add '--modserver' -on command line. - -.Modbus Functions -* '1' - read coils -* '2' - read inputs -* '3' - read holding registers -* '4' - read input registers -* '5' - write single coils -* '6' - write single register -* '8' - echo test -* '15' - write multiple coils -* '16' - write multiple registers - -If you do not specify a '-- modmaster' when loading the Classic Ladder user -program this page will not be displayed. - -.Config I/O - -image::images/Config-io.png[align="center", alt="Config I/O"] - -.Config Coms - -image::images/Config-com.png[align="center", alt="Config Coms"] - -* '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). - -* 'SERIAL SPEED' - Should be set to speed the slave is set for - 300, 600, 1200, 2400, - 4800, 9600, 19200, 38400, 57600, 115200 are supported. - -* 'PAUSE AFTER TRANSMIT' - Pause (milliseconds) after transmit and before receiving answer, - some devices need more time (e.g., USB-to-serial converters). - -* 'PAUSE INTER-FRAME' - Pause (milliseconds) after receiving answer from slave. This sets - the duty cycle of requests (it's a pause for EACH request). - -* 'REQUEST TIMEOUT LENGTH' - Length (milliseconds) of time before we decide that the slave didn't - answer. - -* 'MODBUS ELEMENT OFFSET' - used to offset the element numbers by 1 (for manufacturers numbering - differences). - -* 'DEBUG LEVEL' - Set this to 0-3 (0 to stop printing debug info besides no-response - errors). - -* 'READ COILS/INPUTS MAP TO' - Select what variables that read coils/inputs will update. (B or Q). - -* 'WRITE COILS MAP TO' - Select what variables that write coils will updated.from (B,Q,or I). - -* 'READ REGISTERS/HOLDING' - Select what variables that read registers will update. (W or QW). - -* 'WRITE REGISTERS MAP TO' - Select what variables that read registers will updated from. (W, QW, - or IW). - -* '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. - -* 'TYPE ACCESS' - This selects the MODBUS function code to send to the slave (eg what - type of request). - -* 'COILS / INPUTS' - Inputs and Coils (bits) are read from/written to I, B, or Q variables (user selects). - -* 'REGISTERS (WORDS)' - Registers (Words/Numbers) map to IW, W, or QW variables (user selects). - -* '1st MODBUS ELEMENT' - The address (or register number) of the first element in a group. - (remember to set MODBUS ELEMENT OFFSET properly). - -* 'NUMBER OF ELEMENTS' - The number of elements in this group. - -* 'LOGIC' - You can invert the logic here. - -* '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). - -In the example above: Port number - for my computer /dev/ttyS0 was my -serial port. - -The serial speed is set to 9600 baud. - -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). - -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 -Classic Ladder's %B variables starting at %B1 and ending at %B8. - -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 -Classic Ladder's %Q variables starting at %Q9 ending at %Q10. - -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 Classic Ladder's %W variables starting at %W0 ending at %W1. - -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. - -The documents for your modbus slave device will tell you how the -registers are set up- there is no standard way. - -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). - -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. - -The number 257 will be sent to the slave number you specified and the -slave should send it back. you will need to have Classic Ladder running -in a terminal to see the message. - -== MODBUS Settings - -Serial: - -* Classic Ladder uses RTU protocol (not ASCII). -* 8 data bits, No parity is used, and 1 stop bit is also known as 8-N-1. -* Baud rate must be the same for slave and master. Classic Ladder can - only have one baud rate so all the slaves must be set to the same rate. -* Pause inter frame is the time to pause after receiving an answer. -* 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). - -== MODBUS Info - -* Classic Ladder can use distributed inputs/outputs on modules using the - modbus protocol ("master": polling slaves). -* The slaves and theirs I/O can be configured in the config window. -* 2 exclusive modes are available : ethernet using Modbus/TCP and serial - using Modbus/RTU. -* No parity is used. -* If no port name for serial is set, TCP/IP mode will be used... -* The slave address is the slave address (Modbus/RTU) or the IP address. -* 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. -* 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). -* See examples: adam-6051 and modbus_rtu_serial. -* Web links: http://www.modbus.org and this interesting one: - http://www.iatips.com/modbus.html -* MODBUS TCP SERVER INCLUDED -* Classic Ladder has a Modbus/TCP server integrated. Default port is 9502. - (the previous standard 502 requires that the application must be - launched with root privileges). -* List of Modbus functions code supported are: 1, 2, 3, 4, 5, 6, 15 and 16. -* Modbus bits and words correspondence table is actually not parametric - and correspond directly to the %B and %W variables. - -More information on modbus protocol is available on the internet. - -http://www.modbus.org/[http://www.modbus.org/] - -== Communication Errors - -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. - -== Debugging modbus problems -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. + - -Here we set Classiclader 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 + - -image::images/modbus_register_setting.png[align="center", alt="Config I/O Register Setting"] - -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 + - -image::images/modbus_com_setting.png[align="center", alt="Comunication Setting"] - -=== Request -Lets look at an example of reading one hold register at 8448 Decimal (0x2100 Hex) + - -Looking in the Modbus protocol reference: + - -.Read holding register request - -[width="50%", options="header", cols="<6,<2,<6"] -|======================================== -|Name | number of bytes | Value (hex) -|Function code | (1 Byte) | 3 (0x03) -|Starting Address | (2 Bytes) | 0 - 65535 (0x0000 to 0xFFFF) -|Number of Registers | (2 Bytes) | 1 to 125 (0x7D) -|Checksum | (2 bytes) | Calculated automatically -|======================================== - - -Here is an example sent command as printed in the terminal (all Hex): + ----- -INFO CLASSICLADDER- Modbus I/O module to send: Lgt=8 <- Slave address-1 Function code-3 Data-21 0 0 1 8E 36 ----- -meaning (Hex): + - - * Lgt = 8 = message is 8 bytes long including slave number and checksum number + - * Slave number = 1 (0x1) = Slave address 1 - * Function code = 3 (0x3) = read holding register - * Start at address = highbyte 33 (0x21) lowbyte 0 (0x00) = combined address = 8448 (0x2100) - * Number of Registers = 1 (0x1) = return 1 2-byte register (holding and reading registers are always 2 bytes wide) - * Checksum = high byte 0x8E lowbyte 0x36 = (0x8E36) - -=== Error response -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: + - -.Error returned for function code 3 (read holding register) - -[width="50%", options="header", cols="<6,<2,<6"] -|======================================== -|Name | number of bytes | Value (hex) -|Error code | 1 Byte | 131 (0x83) -|Exception code | 1 Byte | 1-4 (0x01 to 0x04) -|Checksum | (2 bytes) | Calculated automatically -|======================================== - -exception code meaning: - - * 1 - illegal Function - * 2 - illegal data address - * 3 - illegal data value - * 4 - slave device failure - -Here is an example received command as printed in the terminal (all Hex): + ----- -INFO CLASSICLADDER- Modbus I/O module received: Lgt=5 -> (Slave address-1 Function code-83 ) 2 C0 F1 ----- -meaning (Hex): + - - * Slave number = 1 (0x1) = Slave address 1 - * Function code = 131 (0x83) = error while reading holding register - * Error code = 2 (0x2) = illegal data address requested - * Checksum = (0x8E36) - -=== Data response -Looking in the Modbus protocol reference for Response: + - -.Data response for function code 3 (read holding register) - -[width="50%", options="header", cols="<6,<2,<6"] -|======================================== -|Name | number of bytes | Value (hex) -|Function code | 1 Byte | 3 (0x03) -|Byte count | 1 Byte | 2 x N* -|Register value | N* x 2 Bytes | returned value of requested address -|Checksum | (2 bytes) | Calculated automatically -| ( *N = Number of Registers ) | | -|======================================== - - -Here is an example received command as printed in the terminal (all Hex): + ----- -INFO CLASSICLADDER- Modbus I/O module received: Lgt=7 -> (Slave address-1 Function code-3 2 0 0 B8 44 ----- - -meaning (Hex): + - - * Slave number = 1 (0x1) = Slave address 1 - * Requested function code = 3 (0x3) = read holding register requested - * count of byte registers = 2 (0x1) = return 2 bytes (each register value is 2 bytes wide) - * value of highbyte = 0 (0x0) = high byte value of address 8448 (0x2100) - * value of lowbyte = 0 (0x0) = high byte value of address 8448 (0x2100) - * Checksum = (0xB844) - -(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. + - -== MODBUS Bugs - -* In compare blocks the function %W=ABS(%W1-%W2) is accepted but does - not compute properly. only %W0=ABS(%W1) is currently legal. -* When loading a ladder program it will load Modbus info but will not - tell Classic Ladder to initialize Modbus. You must initialize Modbus - when you first load the GUI by adding '--modmaster'. -* If the section manager is placed on top of the section display, across - the scroll bar and exit is clicked the user program crashes. -* When using '--modmaster' you must load the ladder program at the same - time or else only TCP will work. -* reading/writing multiple registers in Modbus has checksum errors. - -= Setting up Classic Ladder - -In this section we will cover the steps needed to add Classic Ladder -to a Stepconf Wizard generated config. On the advanced Configuration -Options page of Stepconf Wizard check off "Include Classic Ladder PLC". - -.Stepconf Classic Ladder - -image::images/stepconf_ladder.png[align="center", alt="Stepconf Classic Ladder"] - -== Add the Modules - -If you used the Stepconf Wizard to add Classic Ladder you can skip -this step. - -To manually add Classic Ladder you must first add the modules. This is -done by adding a couple of lines to the custom.hal file. - -This line loads the real time module: - ----- -loadrt classicladder_rt ----- - -This line adds the Classic Ladder function to the servo thread: - ----- -addf classicladder.0.refresh servo-thread ----- - -== Adding Ladder Logic - -Now start up your config and select "File/Ladder Editor" to open up -the Classic Ladder 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. - -.Section Display with Grid - -image::images/Section_Display_Grid.png[align="center", alt="Section Display with Grid"] - -Now click on the N.O. Input in the Editor Window. - -.Editor Window - -image::images/Editor_NO_Input.png[align="center", alt="Editor Window"] - -Now click in the upper left grid to place the N.O. Input into the -ladder. - -.Section Display with Input - -image::images/Section_Display_Build01.png[align="center", alt="Section Display with Input"] - -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. - -.Section Display with Rung - -image::images/Section_Display_Build02.png[align="center", alt="Section Display with Rung"] - -Now click on the OK button in the Editor window. Now your Section -Display should look like this. - -.Section Display Finished - -image::images/Section_Display_Build03.png[align="center", alt="Section Display Finished"] - -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. - -.Save As Dialog - -image::images/SaveAs.png[align="center", alt="Save As Dialog"] - -Again if you used the Stepconf Wizard to add Classic Ladder you can -skip this step. - -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. - ----- -loadusr -w classicladder --nogui MyLadder.clp ----- - -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. - - diff --git a/docs/src/ladder/ladder-examples.adoc b/docs/src/ladder/ladder-examples.adoc index 18535cb038b..4896244f92d 100644 --- a/docs/src/ladder/ladder-examples.adoc +++ b/docs/src/ladder/ladder-examples.adoc @@ -1,6 +1,9 @@ -= Classicladder Examples +:lang: en [[cha:classicladder-examples]] += Classicladder Examples + += Classicladder Examples == Wrapping Counter @@ -16,7 +19,7 @@ counting backwards. .Wrapping Counter -image::images/wrapping-counter.png[align="center", alt="Wrapping Counter"] +image::images/wrapping-counter.png["Wrapping Counter",align="center"] == Reject Extra Pulses @@ -31,7 +34,7 @@ output until it times out. .Reject Extra Pulse -image::images/extra-pulse-reject.png[align="center", alt="Reject Extra Pulse"] +image::images/extra-pulse-reject.png["Reject Extra Pulse",align="center"] == External E-Stop @@ -47,7 +50,7 @@ commenting out by adding the pound sign as shown or removing the following lines. ---- -# net estop-out <= iocontrol.0.user-enable-out +# net estop-out <= iocontrol.0.user-enable-out # net estop-out => iocontrol.0.emc-enable-in ---- @@ -55,15 +58,15 @@ Next we add Classic Ladder to our custom.hal file by adding these two lines: ---- -loadrt classicladder_rt +loadrt classicladder_rt addf classicladder.0.refresh servo-thread ---- Next we run our config and build the ladder as shown here. -.E-Stop Section Display[[cap:E-Stop-Section-Display]] - -image::images/EStop_Section_Display.png[align="center", alt="E-Stop Section Display"] +[[cap:E-Stop-Section-Display]] +.E-Stop Section Display +image::images/EStop_Section_Display.png["E-Stop Section Display",align="center"] After building the ladder select Save As and save the ladder as estop.clp @@ -71,7 +74,7 @@ estop.clp Now add the following line to your custom.hal file. ---- -# Load the ladder +# Load the ladder loadusr classicladder --nogui estop.clp ---- @@ -90,23 +93,23 @@ Next we add the following lines to the custom_postgui.hal file ---- # E-Stop example using pyVCP buttons to simulate external components -# The pyVCP checkbutton simulates a normally closed external E-Stop +# The pyVCP checkbutton simulates a normally closed external E-Stop net ext-estop classicladder.0.in-00 <= pyvcp.py-estop -# Request E-Stop Enable from LinuxCNC +# Request E-Stop Enable from LinuxCNC net estop-all-ok iocontrol.0.emc-enable-in <= classicladder.0.out-00 -# Request E-Stop Enable from pyVCP or external source +# Request E-Stop Enable from pyVCP or external source net ext-estop-reset classicladder.0.in-03 <= pyvcp.py-reset -# This line resets the E-Stop from LinuxCNC +# This line resets the E-Stop from LinuxCNC net emc-reset-estop iocontrol.0.user-request-enable => classicladder.0.in-02 -# This line enables LinuxCNC to unlatch the E-Stop in Classic Ladder +# This line enables LinuxCNC to unlatch the E-Stop in Classic Ladder net emc-estop iocontrol.0.user-enable-out => classicladder.0.in-01 -# This line turns on the green indicator when out of E-Stop +# This line turns on the green indicator when out of E-Stop net estop-all-ok => pyvcp.py-es-status ---- @@ -115,32 +118,31 @@ to open it with the text editor not the default html viewer. [source,xml] ---- - - - - -"py-es-status" -50 -"green" -"red" - - -"py-estop" -"E-Stop" - - - + + + + +"py-es-status" +50 +"green" +"red" + + +"py-estop" +"E-Stop" + + + ---- Now start up your config and it should look like this. .AXIS E-Stop[[cap:AXIS-E-Stop]] - -image::images/axis_cl-estop.png[align="center", alt="AXIS E-Stop"] +image::images/axis_cl-estop.png["AXIS E-Stop",align="center"] 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 @@ -154,8 +156,7 @@ 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. .Timer/Operate Example[[cap:Timer/Operate-Example]] - -image::images/Tmr_Section_Display.png[align="center", alt="Timer/Operate Example"] +image::images/Tmr_Section_Display.png["Timer/Operate Example",align="center"] In this case %I0 is true so the timer preset value is 10. If %I0 was false the timer preset would be 5. @@ -194,7 +195,7 @@ are active and step 2 and/or 3 are inactive. Then when either %B3 OR %B4 are true, step 6 is true and steps 4 and 5 are inactive. Then when %B5 is true step 1 is active and step 6 is -inactive and it all starts again. +inactive and it all starts again. As shown, the sequence has been: %B0 was true making step 2 and 3 active, then %B1 became true diff --git a/docs/src/ladder/ladder-intro.adoc b/docs/src/ladder/ladder-intro.adoc index bb5e4fb4224..8a9cc8f2895 100644 --- a/docs/src/ladder/ladder-intro.adoc +++ b/docs/src/ladder/ladder-intro.adoc @@ -1,5 +1,7 @@ -[[cha:classicladder-introduction]] +:lang: en +:toc: +[[cha:classicladder-introduction]] = Classicladder Introduction == History @@ -32,7 +34,6 @@ currently being distributed along with LinuxCNC. If there are issues/problems/bugs please report them to the Enhanced Machine Controller project. - == Introduction Ladder logic or the Ladder programming language is a method of drawing @@ -40,9 +41,9 @@ 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 +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. A program in ladder logic, also called a ladder diagram, is similar to @@ -67,9 +68,9 @@ simultaneous and immediate execution is obtained. Ladder logic follows these general steps for operation. -* Read Inputs -* Solve Logic -* Update Outputs + * Read Inputs + * Solve Logic + * Update Outputs == Example @@ -81,89 +82,87 @@ coils (outputs). - the NC contact image:images/ladder_action_loadbar.png[] - the coil (output) image:images/ladder_action_out.png[] -Of course there are many more components to a full ladder language, +Of course there are many more components to a full ladder language, but understanding these will help you grasp the overall concept. The ladder consists of one or more rungs. These rungs are horizontal -traces (representing wires), with components on them (inputs, +traces (representing wires), with components on them (inputs, outputs and other), which get evaluated left to right. This example is the simplest rung: -image::images/example_link_contact_coil.png[align="center"] +image:images/example_link_contact_coil.png[align="center"] 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. +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. == Basic Latching On-Off Circuit -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. - -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. - -Let's take a look at it: - -image::images/example_link_contact_coil2.png[align="center"] - -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. - -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'. - -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. - -Here's how that would look: - -image::images/example_link_contact_coil3.png[align="center"] - -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. - -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. - -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. - - +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. + +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. + +Let's take a look at it: + +image:images/example_link_contact_coil2.png[align="center"] + +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. + +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'. + +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. + +Here's how that would look: + +image:images/example_link_contact_coil3.png[align="center"] + +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. + +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. + +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. diff --git a/docs/src/lathe/lathe-user.adoc b/docs/src/lathe/lathe-user.adoc index c402ecca507..32bf4d45949 100644 --- a/docs/src/lathe/lathe-user.adoc +++ b/docs/src/lathe/lathe-user.adoc @@ -1,6 +1,11 @@ +:lang: en +:toc: + [[cha:lathe-user-information]] += Lathe User Information(((Lathe User Information))) -= Lathe User Information +FIXME from French: Ce chapitre va regrouper les informations spécifiques aux tours, il +est encore en cours de rédaction. == Lathe Mode @@ -32,10 +37,10 @@ must program that in the preamble of each G-code file or RS274NGC_STARTUP_CODE = G18 G20 G90 --------------------------------------- -If your using Gmoccapy then see the -<>. +If your using Gmoccapy then see the <>. -== Lathe Tool Table [[sec:lathe-tool-table]] +[[sec:lathe-tool-table]] +== Lathe Tool Table 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. @@ -45,39 +50,33 @@ 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. -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 <> Section. +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 <> Section. -== Lathe Tool Orientation[[lathe-tool-orientation]] +[[sec:lathe-tool-orientation]] +== Lathe Tool Orientation -The following figure shows the lathe tool orientations -with the center line angle of each orientation and -info on FRONTANGLE and BACKANGLE. -The FRONTANGLE and BACKANGLE are clockwise starting at a line parallel to Z+. +The following figure shows the lathe tool orientations with the center line +angle of each orientation and info on FRONTANGLE and BACKANGLE. -.Lathe Tool Orientations +The FRONTANGLE and BACKANGLE are clockwise starting at a line parallel to Z+. -image::images/tool-positions_en.svg[align="center", alt="Lathe Tool Orientations"] +image::images/tool-positions_en.svg["Lathe Tool Orientations",align="center"] In AXIS the following figures show what the Tool Positions look like, as entered in the tool table. -.Tool Positions 1, 2, 3 & 4 - -image:images/tool-pos-1_en.svg[alt="Tool Position 1"] -image:images/tool-pos-2_en.svg[alt="Tool Position 2"] -image:images/tool-pos-3_en.svg[alt="Tool Position 3"] -image:images/tool-pos-4_en.svg[alt="Tool Position 4"] +.Tool Positions 1, 2, 3 & 4[[fig:Outil-Positions-1-2-3-4]](((Outils en positions 1, 2, 3 et 4))) +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"] -.Tool Positions 5, 6, 7 & 8 - -image:images/tool-pos-5_en.svg[alt="Tool Position 5"] -image:images/tool-pos-6_en.svg[alt="Tool Position 6"] -image:images/tool-pos-7_en.svg[alt="Tool Position 7"] -image:images/tool-pos-8_en.svg[alt="Tool Position 8"] +.Tool Positions 5, 6, 7 & 8[[fig:Outil-Positions-5-6-7-8]](((Outils en positions 5, 6, 7 et 8))) +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"] == Tool Touch Off @@ -92,16 +91,13 @@ For more information on tool touch off options in Axis see === X Touch Off -The X axis offset for each tool is normally an offset -from the center line of the spindle. +The X axis offset for each tool is normally an offset from the center line of the spindle. -One method is to take your normal turning tool and -turn down some stock to a known diameter. +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 +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. @@ -112,7 +108,7 @@ A typical session might be: . Home each axis if not homed. . Set the current tool with 'Tn M6 G43' where 'n' is the tool number. - . Select the X axis in the Manual Control window. + . Select the X axis in the 'Manual Control window'. . Move the X to a known position or take a test cut and measure the diameter. . Select Touch Off and pick Tool Table then enter the position or the diameter. . Follow the same sequence to correct the Z axis. @@ -122,7 +118,7 @@ Note: if you are in Radius Mode you must enter the radius, not the diameter. === Z Touch Off The Z axis offsets can be a bit confusing at first -because there are two elements to the Z offset. +ecause 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 @@ -137,9 +133,9 @@ A typical session might be: . Make sure no offsets are in effect for the current coordinate system. . Set the current tool with 'Tn M6 G43' where 'n' is the tool number. . Select the Z axis in the Manual Control window. - . Bring the tool close to the control surface. Using a cylinder move the - Z away from the control surface until the cylinder just passes between - the tool and the control surface. + . Bring the tool close to the control surface. + . Using a cylinder move the Z away from the control surface until the + cylinder just passes between the tool and the control surface. . Select Touch Off and pick Tool Table and set the position to 0.0. . Repeat for each tool using the same cylinder. @@ -210,9 +206,9 @@ typically set up with the imaginary Y axis (+) pointing at the floor. The following will be true on this type of setup: - - The Z axis (+) points to the right, away from the spindle. - - The X axis (+) points toward the operator, and when on the operator - side of the spindle the X values are positive. +- The Z axis (+) points to the right, away from the spindle. +- The X axis (+) points toward the operator, and when on the operator + side of the spindle the X values are positive. Some lathes with tools on the back side have the imaginary Y axis (+) pointing up. @@ -228,13 +224,10 @@ arc to appear to go in the correct direction. When calculating arcs in radius mode you only have to remember the direction of rotation as it applies to your lathe. -When calculating arcs in diameter mode X is diameter and the X offset -(I) is radius even if you're in G7 diameter mode. +When calculating arcs in diameter mode X is diameter and the X offset (I) is radius even if you're in G7 diameter mode. == Tool Path -=== Control Point - 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 @@ -245,29 +238,24 @@ 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. -.Control Point - -image::images/control-point_en.svg[align="center", alt="Control Point"] +image::images/control-point_en.svg["Control Point",align="center"] === Cutting Angles without Cutter Comp + 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. -.Ramp Entry - -image::images/ramp-entry_en.svg[align="center", alt="Ramp Entry"] +image::images/ramp-entry_en.svg["Ramp Entry",align="center"] 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. -.Ramp Path - -image::images/ramp-cut_en.svg[align="center", alt="Ramp Path"] +image::images/ramp-cut_en.svg["Ramp Path",align="center"] 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 @@ -280,25 +268,19 @@ 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. -.Turning Cut - -image::images/radius-1_en.svg[align="center", alt="Turning Cut"] +image::images/radius-1_en.svg["Turning Cut",align="center"] 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. -.Radius Cut - -image::images/radius-2_en.svg[align="center", alt="Radius Cut"] +image::images/radius-2_en.svg["Radius Cut",align="center"] Now you can see as the control point follows the radius programmed the tool tip has left the part and is now cutting air. -.Radius Cut - -image::images/radius-3_en.svg[align="center", alt="Radius Cut"] +image::images/radius-3_en.svg["Radius Cut",align="center"] 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 @@ -307,18 +289,12 @@ 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. -.Face Cut - -image::images/radius-4_en.svg[align="center", alt="Face Cut"] +image::images/radius-4_en.svg["Face Cut Image",align="center"] === Using Cutter Comp -When using cutter comp on a lathe think of the tool tip radius as the -radius of a round cutter. When using cutter comp the path must be large -enough for a round tool that will not gouge into the next line. 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. The entry move into a cutter -comp arc is important to get the correct results. - - +- When using cutter comp on a lathe think of the tool tip radius as the radius of a round cutter. +- When using cutter comp the path must be large enough for a round tool that will not gouge into the next line. +- 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. +- The entry move into a cutter comp arc is important to get the correct results. diff --git a/docs/src/motion/5-axis-kinematics.adoc b/docs/src/motion/5-axis-kinematics.adoc index ac75ad8afb6..fa9545cef47 100644 --- a/docs/src/motion/5-axis-kinematics.adoc +++ b/docs/src/motion/5-axis-kinematics.adoc @@ -1,10 +1,10 @@ //////////////////////////////////////////////// -useimage:: for equation png files -- no latexmath +use image:: for equation png files -- no latexmath //////////////////////////////////////////////// +:lang: en -[[cha:5-axis-kinematics]] (((5-Axis Kinematics))) - -= 5-Axis Kinematics +[[cha:5-axis-kinematics]] += 5-Axis Kinematics(((5-Axis Kinematics))) == Introduction @@ -54,7 +54,7 @@ In these machine tools the two rotational axes mount on the work table of the ma * 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. .General configuration and coordinate systems -image::5-axis-figures/Figure-2.png[align= "center"] +image::5-axis-figures/Figure-2.png[align="center"] 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 @@ -79,7 +79,7 @@ Then we develop the transformations for a xyzbc-trt configuration with rotating === Transformations for a xyzac-trt machine tool with work offsets === .vismach model of xyzac-trt with coincident rotation axes -image::5-axis-figures/Figure-3.png[align= "center"] +image::5-axis-figures/Figure-3.png[align="center"] 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. @@ -147,13 +147,13 @@ image::5-axis-figures/equation__17.png[align="center"] === Transformations for a xyzac-trt machine with rotary axis offsets .vismach model of xyzac-trt with rotational axis offsets (positive) -image::5-axis-figures/Figure-5.png[align= "center"] +image::5-axis-figures/Figure-5.png[align="center"] 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. .Table tilting/rotary xyzac-trt configuration, with axis offsets -image::5-axis-figures/Figure-6.png[align= "center",height=350] +image::5-axis-figures/Figure-6.png[align="center",height=350] ==== Forward Transformation @@ -210,12 +210,12 @@ image::5-axis-figures/equation__27.png[align="center"] === Transformations for a xyzbc-trt machine with rotary axis offsets .vismach model of xyzbc-trt with rotational axis offsets (negative) -image::5-axis-figures/Figure-7.png[align= "center"] +image::5-axis-figures/Figure-7.png[align="center"] 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. .Table tilting/rotary xyzbc-trt configuration, with axis offsets -image::5-axis-figures/Figure-8.png[align= "center",height=350] +image::5-axis-figures/Figure-8.png[align="center",height=350] ==== Forward Transformation @@ -378,13 +378,13 @@ setp xyzac-trt-kins.z-offset 20 == Figures .Table tilting/rotating configuration -image::5-axis-figures/Figure-9.png[align= "center",height=300] +image::5-axis-figures/Figure-9.png[align="center",height=300] .Spindle/table tilting configuration -image::5-axis-figures/Figure-10.png[align= "center",height=300] +image::5-axis-figures/Figure-10.png[align="center",height=300] .Spindle tilting/rotary configuration -image::5-axis-figures/Figure-11.png[align= "center",height=300] +image::5-axis-figures/Figure-11.png[align="center",height=300] ///////////////////////////////////////////////////// == References nope nope nope pdf nope @@ -393,16 +393,15 @@ image::5-axis-figures/Figure-11.png[align= "center",height=300] == REFERENCES . 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. + Tools: C-H She, R-S Lee, J Manufacturing Processes, V2 N2, 2000. . 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. + DW Lee, JS Kim, HS Mok, J Materials Processing Technology,130-131 (2002) + 641-646. - . 3D 6-DOF Serial Arm Robot Kinematics, RJ du Preez, SA-CNC-CLUB, Dec. -5, 2013. + . 3D 6-DOF Serial Arm Robot Kinematics, RJ du Preez, SA-CNC-CLUB, Dec. 5, 2013. . 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. + model of machine tool: C-H She, C-C Chang, Int. J Machine Tools & Manufacture, + 47 (2007) 537-545. diff --git a/docs/src/motion/dh-parameters.adoc b/docs/src/motion/dh-parameters.adoc index aaacd22832a..fb60738c992 100644 --- a/docs/src/motion/dh-parameters.adoc +++ b/docs/src/motion/dh-parameters.adoc @@ -1,7 +1,7 @@ -[[cha:dh-parameters]] (((DH parameters Examples))) +:lang: en -= Setting up "modified" Denavit-Hartenberg (DH) parameters for -'genserkins' +[[cha:dh-parameters]] += Setting up "modified" Denavit-Hartenberg (DH) parameters for 'genserkins'(((DH parameters Examples))) == Prelude @@ -13,13 +13,11 @@ This document illustrates a method to set up the DH-parameters for a Mitsubishi RV-6SDL in LinuxCNC using 'genserkins' kinematics. [NOTE] - 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. [NOTE] - There may be errors and/or shortcomings -- use at your own risk! == General @@ -35,11 +33,11 @@ that extends from a base to an end-effector. 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 +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 +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. @@ -102,10 +100,10 @@ impossible to define the 0° position of our robots joints arbitrarily. The three configurable parameters are: . *alpha* : positive or negative rotation (in radians) around the X-axis -of the "current coordinate system" + of the "current coordinate system" . *a* : positive distance, along X, between two joint axes specified in -'machine units' (mm or inch) defined in the system's ini file. + 'machine units' (mm or inch) defined in the system's ini file. . *d* : positive or negative length along Z (also in 'machine units') @@ -200,4 +198,3 @@ image::rv-6sl/rv-6sl-018.jpg[align="center"] Thanks to user Aciera for all text and the graphics for the RV-6SL robot! - diff --git a/docs/src/motion/external-offsets.adoc b/docs/src/motion/external-offsets.adoc index 47e10404eca..8abe9a950f9 100644 --- a/docs/src/motion/external-offsets.adoc +++ b/docs/src/motion/external-offsets.adoc @@ -1,6 +1,7 @@ -[[cha:external-offsets]] +:lang: en -= External Axis Offsets +[[cha:external-offsets]] += External Axis Offsets(((externaloffsets))) External axis offsets are supported during teleop (world) jogs and coordinated (G-code) motion. External axis offsets are @@ -23,13 +24,15 @@ For each axis letter (*L* in xyzabcuvw): . Default value: 0 (disables external offset). Consequence: omitted [AXIS_L]OFFSET_AV_RATIO disables external offset for the axis. . If nonzero, the OFFSET_AV_RATIO (*r*), adjusts the conventional (planning) max - velocity and acceleration to preserve [AXIS_L] constraints: + velocity and acceleration to preserve [AXIS_L] constraints: +--- planning max velocity = (1-r) * MAX_VELOCITY external offset velocity = ( r) * MAX_VELOCITY planning max acceleration = (1-r) * MAX_ACCELERATIOIN external offset acceleration = ( r) * MAX_ACCELERATION +--- == Hal Pins @@ -155,7 +158,7 @@ non-zero, the offset is maintained. The offset may be cleared by: . a 'Machine-off/Machine on' toggle . reactivating the enable pin and incrementing/decrementing the 'axis.L.eoffset-counts' -hal pin to return the offset to zero. + hal pin to return the offset to zero. . pulsing the 'axis.L.eoffset-clear' hal pin External-offsets are intended for use with 'small' offsets that diff --git a/docs/src/motion/kinematics.adoc b/docs/src/motion/kinematics.adoc index 929b0755c59..2256c054b01 100644 --- a/docs/src/motion/kinematics.adoc +++ b/docs/src/motion/kinematics.adoc @@ -1,6 +1,8 @@ -[[cha:kinematics]] +:lang: en +:toc: -= Kinematics +[[cha:kinematics]] += Kinematics(((kinematics))) == Introduction @@ -74,6 +76,14 @@ joints[2] = pos->tran.z; 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 init 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.] ---- pos->tran.x = joints[0]; @@ -152,9 +162,11 @@ 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). +//// .Bipod setup +//// -image::images/bipod.png[alt="Bipod setup"] +image::images/bipod.png["Bipod setup"] 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 @@ -172,6 +184,7 @@ and BD, and by the Cartesian coordinates Dx, Dy. The job of the kinematics is to transform from joint lengths (AD, BD) to Cartesian coordinates (Dx, Dy) and vice-versa. +[[sec:Forward-transformation]] === Forward transformation To transform from joint space into Cartesian space we will use some @@ -179,21 +192,24 @@ 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). We can easily see that: + image:images/kinematics-math-01.png[align="center"], + likewise: + image:images/kinematics-math-02.png[align="center"] If we subtract one from the other we will get: -image::images/kinematics-math-03.png[align="center"] +image:images/kinematics-math-03.png[align="center"] and therefore: -image::images/kinematics-math-04.png[align="center"] +image:images/kinematics-math-04.png[align="center"] From there we calculate: -image::images/kinematics-math-05.png[align="center"] +image:images/kinematics-math-05.png[align="center"] //////////////////////////////////////////////////////////////////// we can easily see that latexmath:[$AD^{2}=x^{2}+y^{2}$], likewise @@ -240,6 +256,10 @@ image::images/kinematics-math-06.png[align="center"] image::images/kinematics-math-07.png[align="center"] +//*AD=sqrt(x^2^+y^2^)* + +//*BD=sqrt((Bx-x)^2^+y^2^)* + ///////////////////////////////////////////////// latexmath::[\[AD=\sqrt{x^{2}+y^{2}}\]] @@ -252,7 +272,7 @@ or translated to actual code: double x2 = pos->tran.x * pos->tran.x; double y2 = pos->tran.y * pos->tran.y; joints[0] = sqrt(x2 + y2); -joints[1] = sqrt((Bx - pos->tran.x)*(Bx - pos->tran.x) + y2); +joints[1] = sqrt(Bx - pos->tran.x)*(Bx - pos->tran.x) + y2); return 0; ---- @@ -268,7 +288,7 @@ const KINEMATICS_FORWARD_FLAGS *fflags, KINEMATICS_INVERSE_FLAGS *iflags) ---- -Implements the forward kinematics function. +Implements the <>. ---- int kinematicsInverse(const EmcPose * world, double *joints, @@ -347,3 +367,4 @@ modifications are somewhat more complicated. See 'millturn.comp' as an example of a switchable kinematic module that was created using the 'userkins.comp' template. + diff --git a/docs/src/motion/kinematics_es.adoc b/docs/src/motion/kinematics_es.adoc index 40efd6cc827..0abcddd4abd 100644 --- a/docs/src/motion/kinematics_es.adoc +++ b/docs/src/motion/kinematics_es.adoc @@ -174,23 +174,23 @@ reglas de trigonometría (los triángulos rectángulos determinados por los punt Podemos ver fácilmente que: -image::images/kinematics-math-01.png[align="center"] +image:images/kinematics-math-01.png[align="center"] asi como: -image::images/kinematics-math-02.png[align="center"] +image:images/kinematics-math-02.png[align="center"] Si restamos una de la otra obtendremos: -image::images/kinematics-math-03.png[align="center"] +image:images/kinematics-math-03.png[align="center"] y por lo tanto: -image::images/kinematics-math-04.png[align="center"] +image:images/kinematics-math-04.png[align="center"] A partir de ahí calculamos: -image::images/kinematics-math-05.png[align="center"] +image:images/kinematics-math-05.png[align="center"] //////////////////////////////////////////////////////////////////// podemos ver fácilmente que latexmath:[$AD^{2}=x^{2}+y^{2}$], likewise @@ -303,4 +303,3 @@ Cuando están contenidos en un solo archivo fuente, los módulos cinemáticos pueden ser compilados e instalados por 'halcompile'. Consulte la página de manual de 'halcompile(1)' o el manual de HAL para más información. - diff --git a/docs/src/motion/kinematics_fr.adoc b/docs/src/motion/kinematics_fr.adoc index b5b540a4b62..708afeab07e 100644 --- a/docs/src/motion/kinematics_fr.adoc +++ b/docs/src/motion/kinematics_fr.adoc @@ -89,7 +89,7 @@ définition de ces 3 articulations, alors l'assertion précédente est fausse. Parce-que nous avons actuellement (joint0=x, joint1=Z, joint2=A) ce qui suppose que joint1=Y. Pour faire en sorte que cela fonctionne dans LinuxCNC il suffit de définir tous les axes (XYZA), LinuxCNC utilisera alors une -simple boucle dans HAL pour l'axe Y inutilisé.]footnote:[Une autre +simple boucle dans HAL pour l'axe Y inutilisé.]footnote:[Une autre façon de le faire fonctionner, est de changer le code correspondant et recompiler le logiciel.] @@ -136,7 +136,7 @@ le triangle rectangle (Dx,0), (Bx,0) et (Dx,Dy). Nous pouvons voir aisément que *AD^2^=x^2^+y^2^*, de même que *BD^2^=(Bx-x)^2^+y^2^*. -Si nous soustrayons l'un de l'autre nous aurons: +Si nous soustrayons l'un de l'autre nous aurons: *AD^2^-BD^2^=x^2^+y^2^-x^2^+2*x*Bx-Bx^2^-y^2^* et par conséquent: *x=(AD^2^-BD^2^+Bx^2^)/(2*Bx)* diff --git a/docs/src/motion/pid-theory.adoc b/docs/src/motion/pid-theory.adoc index 2c3108847ca..c4034804234 100644 --- a/docs/src/motion/pid-theory.adoc +++ b/docs/src/motion/pid-theory.adoc @@ -1,3 +1,5 @@ +:lang: en + = PID Tuning == PID Controller @@ -78,7 +80,6 @@ to and adjust the controlled quantity. These additions are actually 'subtractions' of error, because the proportions are usually negative: .Proportional - 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 @@ -87,7 +88,6 @@ that when the error is zero, a proportional controller's output is zero. .Integral - 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 @@ -102,7 +102,6 @@ the set point is always being reduced. Therefore, eventually, a well-tuned PID loop's process output will settle down at the set point. .Derivative - 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. @@ -143,7 +142,6 @@ system to a step change in input, measuring the output as a function of time, and using this response to determine the control parameters. .Simple method - 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 @@ -152,17 +150,16 @@ loop tuning usually overshoots slightly to reach the set point more quickly; however, some systems cannot accept overshoot. [width="90%", options="header", cols="^,4*<"] -|======================================== -|Parameter | Rise Time | Overshoot | Settling Time | Steady State Error -|P | Decrease | Increase | Small Change | Decrease -|I | Decrease | Increase | Increase | Eliminate -|D | Small Change | Decrease | Decrease | Small Change -|======================================== +|========================================================================= +|Parameter | Rise Time | Overshoot | Settling Time | Steady State Error +|P | Decrease | Increase | Small Change | Decrease +|I | Decrease | Increase | Increase | Eliminate +|D | Small Change | Decrease | Decrease | Small Change +|========================================================================= Effects of increasing parameters .Ziegler-Nichols method - Another tuning method is formally known as the 'Ziegler-Nichols method', introduced by John G. Ziegler and Nathaniel B. Nichols. It starts in the same way as the method described before: first set the I @@ -177,14 +174,13 @@ controls as the table shows: [width="90%", options="header", cols="4*^"] |========================================== |Control type | P | I | D -|P | .5K~c~ | | -|PI | .45K~c~ | P~c~/1.2 | +|P | .5K~c~ | | +|PI | .45K~c~ | P~c~/1.2 | |PID | .6K~c~ | P~c~/2 | P~c~/8 |========================================== .Final Steps - 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. +sure it is within your machine requirements. More information on +Halscope is in the HAL User manual. diff --git a/docs/src/motion/switchkins.adoc b/docs/src/motion/switchkins.adoc index 769123cb5f4..21fd4df8004 100644 --- a/docs/src/motion/switchkins.adoc +++ b/docs/src/motion/switchkins.adoc @@ -1,5 +1,6 @@ -[[cha:switchable-kinematics]] +:lang: en +[[cha:switchable-kinematics]] = Switchable Kinematics (switchkins) == Introduction @@ -270,8 +271,8 @@ Mcode scripts can be designed as follows: . read and parse ini file . 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]) + according to the 'identity-referenced' joint number ini file + setting ([JOINT_N]) . hal: setp motion.switchkins-type 1 . mdi: execute a syncing G-code (M66E0L0) @@ -279,7 +280,7 @@ setting ([JOINT_N]) . read and parse ini file . hal: setp the ini-hal limit pins for each axis letter ([AXIS_L]) -according to the appropriate inifile setting ([AXIS_L]) + according to the appropriate inifile setting ([AXIS_L]) . hal: setp motion.switchkins-type 0 . mdi: execute a syncing G-code (M66E0L0) @@ -377,3 +378,4 @@ 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. + diff --git a/docs/src/motion/tweaking-steppers.adoc b/docs/src/motion/tweaking-steppers.adoc index 2ef5b06f8f8..cf10b881b58 100644 --- a/docs/src/motion/tweaking-steppers.adoc +++ b/docs/src/motion/tweaking-steppers.adoc @@ -1,6 +1,8 @@ -= Stepper Tuning +:lang: en +:toc: [[cha:Stepper-Tuning]] += Stepper Tuning == Getting the most out of Software Stepping @@ -11,13 +13,18 @@ software step pulses also have some disadvantages: * limited maximum step rate * jitter in the generated pulses -* loads the CPU +* loads the CPU This chapter has some steps that can help you get the best results from software generated steps. === Run a Latency Test +FIXME from French: Le CPU n'est pas le seul facteur déterminant la latence. Les cartes +mères, cartes graphiques, ports USB et nombre d'autres choses peuvent +la dégrader. La meilleure façon de savoir ce que vous pouvez attendre +d'un PC consiste à exécuter le test de latence RTAI. + Run the latency test as described in the <> chapter. @@ -64,29 +71,29 @@ for) the data sheet that has your drive's specs. From the Gecko G202 manual: .... -Step Frequency: 0 to 200 kHz -Step Pulse “0” Time: 0.5 us min (Step on falling edge) -Step Pulse “1” Time: 4.5 us min +Step Frequency: 0 to 200 kHz +Step Pulse “0” Time: 0.5 us min (Step on falling edge) +Step Pulse “1” Time: 4.5 us min Direction Setup: 1 us min (20 us min hold time after Step edge) .... From the Gecko G203V manual: .... -Step Frequency: 0 to 333 kHz -Step Pulse “0” Time: 2.0 us min (Step on rising edge) -Step Pulse “1” Time: 1.0 us min +Step Frequency: 0 to 333 kHz +Step Pulse “0” Time: 2.0 us min (Step on rising edge) +Step Pulse “1” Time: 1.0 us min -Direction Setup: - 200 ns (0.2 us) before step pulse rising edge +Direction Setup: + 200 ns (0.2 us) before step pulse rising edge 200 ns (0.2 us) hold after step pulse rising edge .... From the Xylotex datasheet: .... -Minimum DIR setup time before rising edge of STEP Pulse 200 ns Minimum -DIR hold time after rising edge of STEP pulse 200 ns -Minimum STEP pulse high time 2.0 us -Minimum STEP pulse low time 1.0 us +Minimum DIR setup time before rising edge of STEP Pulse 200 ns Minimum +DIR hold time after rising edge of STEP pulse 200 ns +Minimum STEP pulse high time 2.0 us +Minimum STEP pulse low time 1.0 us Step happens on rising edge .... @@ -219,9 +226,9 @@ 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. -To make the math easier, I've created an Open Office spreadsheet -http://wiki.linuxcnc.org/uploads/StepTimingCalculator.ods - You enter your latency test result and your stepper drive timing +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 diff --git a/docs/src/motion/tweaking_steppers_fr.adoc b/docs/src/motion/tweaking_steppers_fr.adoc index cf73554f116..6b3cddf3ee7 100644 --- a/docs/src/motion/tweaking_steppers_fr.adoc +++ b/docs/src/motion/tweaking_steppers_fr.adoc @@ -15,7 +15,7 @@ inconvénients: * La fréquence maximum des impulsions est limitée. * Les impulsions générées sont irrégulières à cause du bruit. -* Elles sont sujettes à la charge du CPU +* Elles sont sujettes à la charge du CPU Ce chapitre présente certaines mesures qui vous aideront à obtenir les meilleurs résultats du logiciel. @@ -39,30 +39,30 @@ la fiche des spécifications techniques de votre carte. Par exemple, le manuel du Gecko G202 indique: .... -Step Frequency: 0 to 200 kHz -Step Pulse “0” Time: 0.5 µs min (Step on falling edge) -Step Pulse “1” Time: 4.5 µs min +Step Frequency: 0 to 200 kHz +Step Pulse “0” Time: 0.5 µs min (Step on falling edge) +Step Pulse “1” Time: 4.5 µs min Direction Setup: 1 µs min (20 µs min hold time after Step edge) .... Les spécifications du Gecko G203V indiquent: .... -Step Frequency: 0 to 333 kHz -Step Pulse “0” Time: 2.0 µs min (Step on rising edge) -Step Pulse “1” Time: 1.0 µs min +Step Frequency: 0 to 333 kHz +Step Pulse “0” Time: 2.0 µs min (Step on rising edge) +Step Pulse “1” Time: 1.0 µs min Direction setup: - 200 ns (0.2µs) before step pulse rising edge + 200 ns (0.2µs) before step pulse rising edge 200 ns (0.2µs) hold after step pulse rising edge .... Un carte Xylotex donne dans ses données techniques un superbe graphe du timing nécessaire, il indique: .... -Minimum DIR setup time before rising edge of STEP Pulse 200ns Minimum -DIR hold time after rising edge of STEP pulse 200ns -Minimum STEP pulse high time 2.0µs -Minimum STEP pulse low time 1.0µs +Minimum DIR setup time before rising edge of STEP Pulse 200ns Minimum +DIR hold time after rising edge of STEP pulse 200ns +Minimum STEP pulse high time 2.0µs +Minimum STEP pulse low time 1.0µs Step happens on rising edge .... @@ -214,7 +214,7 @@ ordinateur et faire les calculs qui garantirons les meilleurs signaux dont les moteurs ont besoin. Pour rendre le calcul plus facile, j'ai créé une feuille de calcul -Open Office: +Open Office: http://wiki.linuxcnc.org/uploads/StepTimingCalculator.ods[Step Timing Calculator (en) - Calculatrice Calendrier étape (fr)]. Vous entrez les résultats du test de latence et les timing de votre carte de pilotage et la feuille calcule la meilleure BASE_PERIOD. diff --git a/docs/src/plasma/plasma-cnc-primer.adoc b/docs/src/plasma/plasma-cnc-primer.adoc index 05c305b2cb3..bed813f9171 100644 --- a/docs/src/plasma/plasma-cnc-primer.adoc +++ b/docs/src/plasma/plasma-cnc-primer.adoc @@ -1,6 +1,7 @@ -[[cha:plasma-primer]] +:lang: en -= Plasma Cutting Primer for LinuxCNC Users +[[cha:plasma-primer]] += Plasma Cutting Primer for LinuxCNC Users(((Plasma Cutting Primer))) :toc: == What Is Plasma? @@ -55,7 +56,7 @@ Major plasma machine manufacturers (eg Hypertherm, Thermal Dynamics and ESAB), p == Choosing a Plasma Machine for CNC operations -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. +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. 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: @@ -68,11 +69,11 @@ If you have the budget, a higher end machines will supply: - Manufacturer provided cut charts which will save many hours and material waste calibrating cut parameters - Dry Contacts for ArcOK - Terminals for Arc On switch -- Raw arc voltage or divided arc voltage output +- Raw arc voltage or divided arc voltage output - Optionally a RS485 interface if using a Hypertherm plasma cutter and want to control it from the Linuxcnc console. - Higher duty cycles -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. +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. == Types Of Torch Height Control @@ -82,13 +83,14 @@ With the release of the Mesa THCAD voltage to frequency interface, LinuxCNC was 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. -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 <> configuration was incorporated into LinuxCNC 2.8. 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. +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 <> configuration was incorporated into LinuxCNC 2.8. +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. == Arc OK Signal 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. -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. +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. 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. @@ -103,7 +105,6 @@ The torch is mounted on a sliding stage that can move up when the torch tip cont 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. [[ohmic-sensing]] - === Ohmic Sensing 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: @@ -124,7 +125,7 @@ A more sophisticated method of material sensing that eliminates the relays and d To implement this method, a second encoder input is required. -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. +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. 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. @@ -147,7 +148,7 @@ addf ohmicsense servo-thread setp hm2_7i76e.0.encoder.02.scale -1 setp hm2_7i76e.0.encoder.02.counter-mode 1 -# --- Configure the component --- +# --- Configure the component --- setp ohmicsense.thcad-0-volt-freq 140200 setp ohmicsense.thcad-max-volt-freq 988300 setp ohmicsense.thcad-divide 32 @@ -157,7 +158,7 @@ setp ohmicsense.ohmic-threshold 22.0 setp ohmicsense.ohmic-low 1.0 net ohmic-vel ohmicsense.velocity-in <= hm2_7i76e.0.encoder.02.velocity -# --- Replace QtPlasmaC’s Ohmic sensing signal --- +# --- Replace QtPlasmaC’s Ohmic sensing signal --- unlinkp debounce.0.2.in net ohmic-true ohmicsense.ohmic-on => debounce.0.2.in net plasmac:ohmic-enable => ohmicsense.is-probing @@ -278,7 +279,7 @@ WARNING: It is strongly recommended that the torch cannot be enabled while this 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. -=== Torch Breakaway +=== Torch Breakaway Sensor * As mentioned earlier, a breakaway sensor should be installed that is triggered if the torch crashes and falls off. * Usually, this would be connected to 'halui.program-pause' so the fault can be rectified and the program resumed. @@ -331,7 +332,7 @@ NOTE: Integrators should familiarise themselves with the Linuxcnc documentation 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. -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. +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. Example: On a metric machine with a NEMA23 motor with a direct drive to a 5mm ball screw, 60 mm/second maximum velocity and 700 mm/sec/sec acceleration were determined to be safe values without loss of steps. For this machine, set the Z axis in the ini file as follows: @@ -409,11 +410,11 @@ Power up your controller and open Halshow (Axis: Show Homing Configuration), Dri 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 (eg. 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. -Remembering that plasma arc voltages are potentially lethal, here are some suggested criteria. +Remembering that plasma arc voltages are potentially lethal, here are some suggested criteria. .Pilot Arc Start -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. +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. * 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. @@ -421,7 +422,7 @@ Because there is not likely to be any significant EMI, you should be able to saf .HF Start -Install the THCAD at the inverter as the frequency signal is far more immune to EMI noise. +Install the THCAD at the inverter as the frequency signal is far more immune to EMI noise. * If you do not have a voltage divider and you have room inside the plasma cutter, install a THCAD-300 inside the plasma cutter. @@ -479,7 +480,7 @@ Stepper motors suffer from resonance and a direct drive pinion is likely to mean == QtPlasmaC LinuxCNC Plasma Configuration -The <> 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. +The <> 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. 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. @@ -502,3 +503,4 @@ Many Linuxcnc users are perfectly happy with using Inkscape to convert .SVG vect Another popular post-processor is included with the popular Fusion360 package but the included post-processors will need some customisation. LinuxCNC is a CNC application and discussions of CAM techniques other than this introductory discussion are out of scope of LinuxCNC. + diff --git a/docs/src/plasma/plasma-cnc-primer_es.adoc b/docs/src/plasma/plasma-cnc-primer_es.adoc index 53adf28ede7..f741adf66f3 100644 --- a/docs/src/plasma/plasma-cnc-primer_es.adoc +++ b/docs/src/plasma/plasma-cnc-primer_es.adoc @@ -1,9 +1,9 @@ :lang: es -:toc: [[cha:plasma-primer]] = Basicos del Corte por Plasma para Usuarios de LinuxCNC +:toc: == ¿Qué es el plasma? diff --git a/docs/src/plasma/qtplasmac.adoc b/docs/src/plasma/qtplasmac.adoc index ba1d08269e3..b46a62f7c05 100644 --- a/docs/src/plasma/qtplasmac.adoc +++ b/docs/src/plasma/qtplasmac.adoc @@ -1,5 +1,6 @@ -[[cha:qtplasmac]] +:lang: en +[[cha:qtplasmac]] = QtPlasmaC :toc: :toclevels: 5 @@ -26,7 +27,6 @@ The QtPlasmaC GUI will run on any hardware that is supported by LinuxCNC provide There are three available formats: [[qt_formats]] - * 16:9 with a minimum resolution of 1366 x 768 * 9:16 with a minimum resolution of 768 x 1366 * 4:3 with a minimum resolution of 1024 x 768 @@ -79,7 +79,6 @@ Following these instructions will install the latest master branch (v2.9) of Lin 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. [[qt_mode]] - === Modes QtPlasmaC requires the selection of one of following three operating modes: @@ -166,7 +165,6 @@ If *Ohmic Probe* is used then *Ohmic Probe Enable* is required to be checked on NOTE: 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. [[qt_z-settings]] - === Recommended Settings: Refer to the <> diagram for a visual representation of the terms below. @@ -190,7 +188,6 @@ Imperial example: given a Z axis MAX_ACCELERATION of 24in/s^2^ and MAX_VELOCITY 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. [[configuring]] - === Configuring 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. @@ -275,8 +272,8 @@ IMPORTANT: BEFORE PROCEEDING, THE USER SHOULD BE ABLE TO HOME THE MACHINE, ZERO ONLY WHEN this criteria is met should the user proceed with the QtPlasmaC initial setup. NOTE: It is possible to create a sim configuration using StepConf but it is not possible to have tandem joints in the sim configuration. -[[qt-dependency]] +[[qt-dependency]] === Qt Dependency Errors 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. @@ -294,7 +291,6 @@ For a run in place installation enter the following command in a terminal window ---- [[qt_initial-setup]] - === Initial Setup The following heights diagram will help the user visualize the different heights involved in plasma cutting and how they are measured: @@ -314,7 +310,6 @@ To set the Z axis DRO relative to the Z axis MINIMUM_LIMIT, the user should perf . Home the Z axis again. [[qt_probe-test]] - 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. . 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. @@ -344,7 +339,6 @@ IMPORTANT: IF USING A *Mesa Electronics THCAD* THEN THE *Voltage Scale* VALUE WA CAUTION: PLASMA CUTTING VOLTAGES CAN BE LETHAL, IF THE USER IS NOT EXPERIENCED IN DOING THESE MEASUREMENTS GET SOME QUALIFIED HELP. [[qt_modify-config]] - == Migrating to QtPlasmac From PlasmaC (Axis or Gmoccapy) 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. @@ -442,7 +436,6 @@ Select the .ini file of the old PlasmaC configuration, select the .ini file of t == Other QtPlasmaC Setup Considerations [[qt_lowpass]] - === Lowpass Filter 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. @@ -487,7 +480,6 @@ If debounce is required for other equipment like home or limit switches etc. the More information on contact bounce can be seen on page IX of link:https://www.finder-relais.net/en/Finder-general-technical-information-en.pdf[Finder Relays General Technical Information] [[qt-contact-load]] - === Contact Load 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. @@ -591,7 +583,6 @@ NOTE: The .prefs file is plain text and may be edited with any tex QtPlasmaC has some specific .ini file variables as follows: [[qt_ini-mode]] - *[QTPLASMAC]* Section These variables are optional. @@ -655,7 +646,6 @@ tap = ./qtplasmac/qtplasmac_gcode.py ---- [[qt_rs274]] - *[RS274NGC]* Section These variables are mandatory. @@ -684,7 +674,6 @@ SHUTDOWN = shutdown.hal (shutdown HAL commands) NOTE: The user could place custom HAL commands in the custom.hal file as this file is not overwritten by QtPlasmaC updates. [[qt_ini-display]] - *[DISPLAY]* Section This variable is mandatory. @@ -748,7 +737,6 @@ Exiting or shuting down QtPlasmaC is done by either of: A shutdown warning can be displayed on every shutdown by checking the *Exit [[qt_main-tab]] - === MAIN Tab Screenshot example of the QtPlasmaC <> in *16:9* aspect ratio: @@ -841,16 +829,15 @@ See <> for detailed information on [width="100%",cols="6,2,14"] |=== -|*Name*|*Modes*|*Description* -|Arc Voltage|0, 1|Displays the actual arc voltage. -|OK|0, 1, 2|Indicates the status of the Arc OK signal. -|+|0, 1|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). -|-|0, 1|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). -|OVERRIDE|0, 1|Clicking this label will return any voltage override to 0.00. +|*Name* |*Modes*|*Description* +|Arc Voltage|0, 1 |Displays the actual arc voltage. +|OK |0, 1, 2|Indicates the status of the Arc OK signal. +|+ |0, 1 |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). +|- |0, 1 |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). +|OVERRIDE |0, 1 |Clicking this label will return any voltage override to 0.00. |=== [[qt_control-panel]] - [underline]*CONTROL* [width="100%",cols="6,2,14"] @@ -975,7 +962,6 @@ NOTE: During Paused Motion, this section will be shown on top of the JOGGING pan |=== [[qt_preview-view]] - ==== Preview Views 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. @@ -989,7 +975,6 @@ Whenever there is no G-Code file loaded, the full table will automatically be di 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. [[qt_conversational-tab]] - === CONVERSATIONAL Tab Screenshot example of the QtPlasmaC <> in *16:9* aspect ratio: @@ -1007,7 +992,6 @@ setp qtplasmac.conv_disable 1 ---- [[qt_parameters-tab]] - === PARAMETERS Tab Screenshot example of the QtPlasmaC <> in *16:9* aspect ratio: @@ -1071,7 +1055,6 @@ NOTE: If the amount of time between the torch contacting the material and when t |=== [[qt_scribe-config]] - [underline]*CONFIGURATION - SCRIBING* [width="100%",cols="4,16"] @@ -1125,7 +1108,6 @@ The **SAVE** button will save the currently displayed parameters to the .prefs file. [[qt_material]] - [underline]*MATERIAL* This section shows the parameters which are active for the current cut. @@ -1218,7 +1200,6 @@ In addition the following two QtPlasmaC specific utilities are provided: 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 <>. [[qt_backup]] - 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 ___

` and `#`. The procedure may test whether the `Q` word was present with the <> built in function. @@ -474,8 +471,7 @@ o endsub M2 ---------------------------------------------------------------------------------- -- executing `M400` will fail with the message - `user-defined M400: missing: P` +- executing `M400` will fail with the message `user-defined M400: missing: P` - executing `M400 P123` will display `P word=123.000000` - executing `M400 P123 Q456` will display `P word=123.000000` and `Q word set: 456.000000` @@ -625,23 +621,22 @@ The examples described so far can be found in configurations. [[remap:upgrading-an-existing]] - == Upgrading an existing configuration for remapping The minimal prerequisites for using `REMAP` statements are as follows: - the Python plug in must be activated by specifying a - `[PYTHON]TOPLEVEL=` in the ini file. + `[PYTHON]TOPLEVEL=` in the ini file. - the toplevel script needs to import the `remap` module, which can be - initially empty, but the import needs to be in place. + initially empty, but the import needs to be in place. - 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=` + the path to the directory where your Python modules live needs to be + added with `[PYTHON]PATH_APPEND=` - 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. + 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. Assuming your configuration lives under `/home/user/xxx` and the ini file is `/home/user/xxx/xxx.ini`, execute the following commands. @@ -708,13 +703,13 @@ Depending on the answer, we have four different scenarios: - When using an O-word procedure, we need prolog and epilog functions - if using all Python code and no O-word procedure, a Python function -is enough + is enough - when using the iocontrol pins, our O-word procedure or Python code -will contain mostly moves + will contain mostly moves - 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. + we need to completely define our own interaction, using `motion.digital*` and + `motion.analog*` pins, and essentially ignore the iocontrol pins by + looping them. NOTE: 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=` @@ -739,13 +734,13 @@ Iocontrol provides two HAL interaction sequences we might or might not use: - 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 + executed, this triggers the "raise tool-prepare and wait for + tool-prepared to become high" HAL sequence in iocontrol, besides + setting the XXXX pins - 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 + executed, this triggers the "raise tool-change and wait for + tool-changed to become high" HAL sequence in iocontrol, besides + setting the XXXX pins What you need to decide is whether the existing iocontrol HAL sequences are sufficient to drive your changer. Maybe you need a different @@ -811,7 +806,7 @@ Going through the <>, we find: . send a CHANGE_TOOL Canon command to task - *execute in Python epilog* . set the numberer parameters 5400-5413 according to the new tool - *execute in Python epilog* . signal to task to stop calling the interpreter for readahead until -tool change complete - *execute in Python epilog* + tool change complete - *execute in Python epilog* So we need a prolog, and an epilog. Lets assume our ini file incantation of the M6 remap looks as follows: @@ -1201,10 +1196,10 @@ For a complete example doing just that, see A G-code cycle as used here is meant to behave as follows: * On first invocation, the associated words are collected and the -G-code cycle is executed. + G-code cycle is executed. * 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. + code, but no new G-code, the previous G-code is re-executed with the + parameters changed accordingly. An example: Assume you have `G84.3` defined as remapped G-code cycle with the following ini segment (see <> for @@ -1243,7 +1238,6 @@ feature. It contains two cycles, one with an NGC procedure like above, and a cycle example using just Python. [[remap:embedded-python]] - == Configuring Embedded Python The Python plugin serves both the interpreter, and task if so @@ -1279,7 +1273,6 @@ configured, and hence has its own section `PYTHON` in the ini file. Start the Python task plug in. Experimental. See xxx. [[remap:executing-python-statements]] - === Executing Python statements from the interpreter For ad-hoc execution of commands the Python 'hot comment' has been @@ -1300,7 +1293,6 @@ The `emcStatus` structure is accessible, too: ;py,print emcstat.io.aux.estop [[remap:programming-embedded-python]] - == Programming Embedded Python in the RS274NGC Interpreter === The Python plugin namespace @@ -1391,14 +1383,11 @@ needed to handle cycles in 'ncfiles/remap_lib/python-stdglue/stdglue.py' Python code is called from NGC in the following situations: - during normal program execution: -* when an O-word call like `O call` is executed and the name -`oword.proc` is defined and callable -* when a comment like `;py,` is executed -- during execution of a remapped code: any `prolog=`, `python=` and - `epilog=` handlers. + * when an O-word call like `O call` is executed and the name `oword.proc` is defined and callable + * when a comment like `;py,` is executed +- during execution of a remapped code: any `prolog=`, `python=` and `epilog=` handlers. [[remap:python-o-word-procs]] - .Calling O-word Python subroutines Arguments: @@ -1553,10 +1542,10 @@ not return a value, as with normal Python yield statements. NGC code is executed from Python when: -- the method `self.execute([,])` is executed -- during execution of a remapped code, if a `prolog=` function is - defined, the NGC procedure given in `ngc=` is executed immediately - thereafter. + - the method `self.execute([,])` is executed + - during execution of a remapped code, if a `prolog=` function is + defined, the NGC procedure given in `ngc=` is executed immediately + thereafter. The prolog handler does not call the handler, but it prepares its call environment, for instance by setting up predefined local parameters. @@ -1702,7 +1691,6 @@ The following modules are built in: interfaces - only present in the milltask instance of the interpreter. [[remap:adding-predefined-named-parameters]] - == Adding Predefined Named Parameters The interpreter comes with a set of predefined named parameters for @@ -1718,8 +1706,8 @@ To add or redefine a named parameter: * add a `namedparams` module so it can be found by the interpreter * 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. + receive `self` (the interpreter instance) as parameter and so can + access arbitrary state. Arbitrary Python capabilities can be used to return a value. * import that module from the `TOPLEVEL` script [source,python] @@ -1752,7 +1740,6 @@ arbitrary predicates may be defined this way. For a slightly more advanced example, see `tests/remap/predefined-named-params`. [[remap:standard-glue]] - == Standard Glue routines Since many remapping tasks are very similar, I've started collecting @@ -1805,19 +1792,18 @@ These wrap a NGC procedure for M6 Tool Change. .Actions of +change_prolog+ -* The following three steps are applicable only if the `iocontrol-v2` -component is used: +* The following three steps are applicable only if the `iocontrol-v2` component is used: ** If parameter 5600 (fault indicator) is greater than zero, this indicates a Toolchanger -fault, which is handled as follows: + fault, which is handled as follows: ** if parameter 5601 (error code) is negative, this indicates a hard -fault and the prolog aborts with an error message. + fault and the prolog aborts with an error message. ** if parameter 5601 (error code) is greater equal zero, this indicates a soft -fault. An informational message is displayed and the prolog continues. + fault. An informational message is displayed and the prolog continues. * If there was no preceding T command which caused a pocket to be -selected, the prolog aborts with an error message. + selected, the prolog aborts with an error message. * If cutter radius compensation is on, the prolog aborts with an error -message. + message. Then, the following parameters are exported to the NGC procedure: @@ -1831,11 +1817,11 @@ Then, the following parameters are exported to the NGC procedure: and error message containing the return value is given and the interpreter aborts. * If parameter 5600 (fault indicator) is greater than zero, this indicates a Toolchanger -fault, which is handled as follows (`iocontrol-v2`-only): + fault, which is handled as follows (`iocontrol-v2`-only): ** if parameter 5601 (error code) is negative, this indicates a hard -fault and the epilog aborts with an error message. + fault and the epilog aborts with an error message. ** if parameter 5601 (error code) is greater equal zero, this indicates a soft -fault. An informational message is displayed and the epilog continues. + fault. An informational message is displayed and the epilog continues. * 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 @@ -1850,7 +1836,6 @@ fault. An informational message is displayed and the epilog continues. * The new tool parameters (offsets, diameter etc) are set. [[remap:cycle-stdglue]] - === G-code Cycles: +cycle_prolog+ and +cycle_epilog+ These wrap a NGC procedure so it can act as a cycle, meaning the @@ -1875,27 +1860,25 @@ axis words give in the block, see below. .Actions of +cycle_prolog+ * Determine whether the words passed in from the current block fulfill -the conditions outlined under <>. + the conditions outlined under <>. ** export the axis words as ++, +#+ etc; fail if axis words from -different groups (XYZ) (UVW) are used together, or any of (ABC) is given. + different groups (XYZ) (UVW) are used together, or any of (ABC) is given. ** export 'L-' as +#+; default to 1 if not given. ** export 'P-' as +#

+; fail if p less than 0. ** export 'R-' as +#+; fail if r not given, or less equal 0 if given. ** fail if feed rate is zero, or inverse time feed or cutter -compensation is on. -* Determine whether this is the first invocation of a cycle G-code, if -so: + compensation is on. +* Determine whether this is the first invocation of a cycle G-code, if so: ** Add the words passed in (as per argspec) into a set of sticky -parameters, which is retained across several invocations. + parameters, which is retained across several invocations. * If not (a continuation line with new parameters): -** merge the words passed in into the existing set of sticky -parameters. +** merge the words passed in into the existing set of sticky parameters. * export the set of sticky parameters to the NGC procedure. .Actions of +cycle_epilog+ * Determine if the current code was in fact a cycle, if so: ** retain the current motion mode so a continuation line without a -motion code will execute the same motion code. + motion code will execute the same motion code. === S (Set Speed) : +setspeed_prolog+ and +setspeed_epilog+ @@ -1962,20 +1945,18 @@ feature]. To use this approach: -- install Eclipse via the the 'Ubuntu Software Center' (choose first -selection) -- install the PyDev plug in from the -http://pydev.org/updates[Pydev Update Site] -- setup the LinuxCNC source tree as an Eclipse project -- start the Pydev Debug Server in Eclipse -- 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. -- `import pydevd` in your Python module - see example `util.py` and `remap.py` -- 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. + - install Eclipse via the the 'Ubuntu Software Center' (choose first selection) + - install the PyDev plug in from the http://pydev.org/updates[Pydev Update Site] + - setup the LinuxCNC source tree as an Eclipse project + - start the Pydev Debug Server in Eclipse + - 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. + - `import pydevd` in your Python module - see example `util.py` and `remap.py` + - 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. CAUTION: `pydevd.settrace()` will block execution if Eclipse and the Pydev debug server have not been started. @@ -1992,7 +1973,6 @@ image::images/debug_embedded_python.png[Debugging with Eclipse] See the Python code in `configs/sim/axis/remap/getting-started/python` for details. [[remap:axis-preview-and-remapped-code-execution]] - == Axis Preview and Remapped code execution For complete preview of a remapped code's tool path some precautions @@ -2003,11 +1983,11 @@ are similar): First, note that there are *two* independent interpreter instances involved: -- one instance in the milltask program, which executes a program when -you hit the 'Start' button, and actually makes the machine move -- 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. + - one instance in the milltask program, which executes a program when + you hit the 'Start' button, and actually makes the machine move + - 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. Now assume that your remap procedure contains a G38 probe operation, for example as part of a tool change with automatic tool length @@ -2034,11 +2014,9 @@ testing 'self.task' - this will be 1 in the milltask instance, and 0 in the preview instance(s). [[remap:remappable-codes]] - == Remappable Codes [[remap:existing-codes]] - === Existing codes which can be remapped The current set of *existing* codes open to redefinition is: @@ -2055,7 +2033,6 @@ The current set of *existing* codes open to redefinition is: Note that the use of M61 currently requires the use of iocontrol-v2. [[remap:unallocated-g-codes]] - === Currently unallocated G-codes: Currently unallocated G-codes (for remapping) must be selected from the blank @@ -2225,7 +2202,6 @@ add their new G-codes to these tables.) |============================================================== [[remap:unallocated-m-codes]] - === Currently unallocated M-codes: These M-codes are currently undefined in the current implementation of LinuxCNC @@ -2405,22 +2381,22 @@ 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: -- when such a code is encountered, the interpreter returns a -special return code to task ('INTERP_EXECUTE_FINISH'). + - when such a code is encountered, the interpreter returns a + special return code to task ('INTERP_EXECUTE_FINISH'). -- 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. + - 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. -- 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. + - 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. -- 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. + - 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. === Word order and execution order @@ -2471,7 +2447,6 @@ parsing and execution as long as there is still a procedure executing (call_level > 0). [[remap:how-tool-change-currently-works]] - === How tool change currently works The actions happening in LinuxCNC are a bit involved, but it's necessary @@ -2490,10 +2465,10 @@ Several processes are 'interested' in tool information: task and its interpreter, as well as the user interface. Also, the 'halui' process. 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). +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). The authoritative source and only process actually 'setting' tool information in this structure is the 'iocontrol' process. All others @@ -2521,7 +2496,6 @@ results. === How Tx (Prepare Tool) works [[remap:interpreter-action-on-t]] - .Interpreter action on a Tx command All the interpreter does is evaluate the toolnumber parameter, looks up @@ -2538,7 +2512,7 @@ tool-related actions in LinuxCNC. In the current implementation, task actually waits for iocontrol to complete the changer positioning operation, which is not necessary IMO -- it defeats the idea that changer preparation and code execution can +since it defeats the idea that changer preparation and code execution can proceed in parallel. .Iocontrol action on EMC_TOOL_PREPARE @@ -2570,32 +2544,30 @@ Even if you are not familiar with C, I suggest you look at the 'src/emc/rs274/interp_convert.cc'. [[remap:interpreter-action-on-m6]] - .Interpreter action on a M6 command When the interpreter sees an M6, it: [[remap:send-tool-load-msg]] - . 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. + 'settings->selected_pocket' to be >= 0) and fail with 'Need tool + prepared -Txx- for toolchange' message if not. . check for cutter compensation being active, and fail with 'Cannot -change tools with cutter radius compensation on' if so. + change tools with cutter radius compensation on' if so. . stop the spindle except if the "TOOL_CHANGE_WITH_SPINDLE_ON" ini -option is set. + option is set. . generate a rapid 'Z up' move if if the "TOOL_CHANGE_QUILL_UP" ini -option is set. + option is set. . if TOOL_CHANGE_AT_G30 was set: .. move the A, B and C indexers if applicable .. generate rapid move to the G30 position . execute a CHANGE_TOOL canon command,with the selected pocket as -parameter. CHANGE_TOOL will: + parameter. CHANGE_TOOL will: .. generate a rapid move to TOOL_CHANGE_POSITION if so set in ini .. enqueue an EMC_TOOL_LOAD NML message to task. . set the numberer parameters 5400-5413 according to the new tool . signal to task to stop calling the interpreter for readahead by -returning INTERP_EXECUTE_FINISH since M6 is a queue buster. + returning INTERP_EXECUTE_FINISH since M6 is a queue buster. .What task does when it sees a CHANGE_TOOL command Again, not much more than passing the buck to iocontrol by sending it @@ -2603,7 +2575,6 @@ an EMC_TOOL_LOAD message, and waiting until iocontrol has done its thing. [[remap:iocontrol-action-on-load]] - .Iocontrol action on EMC_TOOL_LOAD . it asserts the "tool-change" pin @@ -2622,9 +2593,9 @@ When that has happened: . iocontrol signals task to go ahead . task tells the interpreter to execute a 'synch()' operation, to see -what has changed + what has changed . the interpreter 'synch()' pulls all information from the world model -needed, among it the changed tool table. + needed, among it the changed tool table. From there on, the interpreter has complete knowledge of the world model and continues with read ahead. @@ -2646,11 +2617,8 @@ An example Python redefinition for M61 can be found in the == Status -. the RELOAD_ON_CHANGE feature is fairly broken. Restart after -changing a Python file. - -. M61 (remapped or not) is broken in iocontrol and requires -iocontrol-v2 to actually work. +. the RELOAD_ON_CHANGE feature is fairly broken. Restart after changing a Python file. +. M61 (remapped or not) is broken in iocontrol and requires iocontrol-v2 to actually work. // A short survey of LinuxCNC execution // Interpreter internals access - Python view @@ -2687,3 +2655,4 @@ DEBUG = 0x10008000 # USER1, PYTHON DEBUG = 0x30008000 # USER1,USER2, PYTHON # USER2 will cause involute to try to connect to pydev DEBUG = 0x7FFFFFFF # All debug messages ---- + diff --git a/docs/src/remap/remap_es.adoc b/docs/src/remap/remap_es.adoc index 8c80868fd05..4a721ab2e60 100644 --- a/docs/src/remap/remap_es.adoc +++ b/docs/src/remap/remap_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:remap]] - = Remap Extendiendo el código G :ini: {basebackend@docbook:'':ini} @@ -10,11 +9,11 @@ == Introducción: Extensión del intérprete RS274NGC mediante remapeado de códigos -=== Definición: Remapeado de Códigos +=== Definición: Remapeado de Códigos Por 'Remapeado de Códigos' nos referimos a uno de los siguientes casos: -. Definir la semántica de un código M o G nuevo, es decir, actualmente sin asignar. +. Definir la semántica de un código M o G nuevo, es decir, actualmente sin asignar. . Redefinir la semántica de un conjunto actualmente limitado de códigos existentes. === ¿Por qué querría extender el intérprete RS274NGC? @@ -40,7 +39,7 @@ Un buen ejemplo de esta deficiencia es el soporte de cambio de herramienta en Li mientras que los cambiadores de herramientas random están bien soportados, es casi imposible definir razonablemente una configuración para una máquina de cambio de herramienta manual con, por ejemplo, un desplazamiento automático a un interruptor de longitud de herramienta que sea -visitado después del cambio, y que los offsets se establezcan en consecuencia. Además, aun +visitado después del cambio, y que los offsets se establezcan en consecuencia. Además, aun existiendo un parche para un cambiador de herramientas rack muy específico, no se ha encontrado la forma de regresar al código base principal. @@ -94,7 +93,7 @@ Para hacer solucionable una situación compleja y que una situación simple sea problema del codigo de union se trata de la siguiente manera: - para situaciones simples, un procedimiento de union incorporado (`argspec`) cubre la mayoría -de los requisitos comunes de paso de parámetros. +de los requisitos comunes de paso de parámetros. - para el remapeado de T, M6, M61, S, F hay un algo de codigo de union Python estándar que debería cubrir la mayoría de las situaciones, ver <> - para situaciones más complejas, puede escribir su propio codigo de union Python para implementar @@ -172,7 +171,7 @@ procedimiento NGC. Una forma fácil es usar la declaración argspec. Un prologo personalizado podría proporcionar mejores mensajes de error. -Para referirse a la información de configuración de su máquina, es más útil usar las variables de archivo ini; +Para referirse a la información de configuración de su máquina, es más útil usar las variables de archivo ini; por ejemplo, una posición fija como la posición del sensor de longitud de la herramienta. La ventaja de este método es que los parámetros son fijos en su configuración, independientemente del archivo NGC en ejecucion. @@ -224,7 +223,7 @@ Esto significa, en pocas palabras: - El código `M400` toma un parámetro requerido `P` y otro opcional `Q`. Otras palabras en el bloque actual son ignoradas con - respecto al código `M400`. Si la palabra `P` no está presente, + respecto al código `M400`. Si la palabra `P` no está presente, la ejecución falla con un error. - cuando se encuentra un código `M400`, se ejecuta `myprocedure.ngc` junto con @@ -309,7 +308,7 @@ Tenga en cuenta que si bien son posibles muchas combinaciones de opciones argspe todas ellas tienen sentido. Las siguientes combinaciones son expresiones útiles: `argspec=`'' `ngc=`'' `modalgroup=`'':: - Forma recomendada de llamar a un procedimiento NGC con conversión estándar de parámetro argspec. + Forma recomendada de llamar a un procedimiento NGC con conversión estándar de parámetro argspec. Se utiliza si argspec es suficientemente bueno para nuestro proposito. Tenga en cuenta que no es suficientemente bueno para volver a asignar los códigos de cambio de herramientas Tx y M6/M61. @@ -710,14 +709,14 @@ Correspondencia de pines iocontrol en los ejemplos. [frame="topbot",grid="none"] [options="header"] |====== -pin iocontrol.0 ,pin motion -tool-prepare,digital-out-00 -tool-prepared,digital-in-00 -tool-change,digital-out-01 -tool-changed,digital-in-01 -tool-prep-number,analog-out-00 -tool-prep-pocket,analog-out-01 -tool-number,analog-out-02 +pin iocontrol.0 ,pin motion +tool-prepare,digital-out-00 +tool-prepared,digital-in-00 +tool-change,digital-out-01 +tool-changed,digital-in-01 +tool-prep-number,analog-out-00 +tool-prep-pocket,analog-out-01 +tool-number,analog-out-02 |====== Supongamos que desea redefinir el comando M6 y reemplazarlo por @@ -750,7 +749,7 @@ Al revisar los <>, encontramos: . enviar una señal a Task para que deje de llamar al intérprete para lectura antes de completar el cambio de herramienta - *ejecutar en epilogo Python* -Así que necesitamos un prologo y un epilogo. Asumamos que, en nuestro archivo ini, el remapeo M6 tiene el +Así que necesitamos un prologo y un epilogo. Asumamos que, en nuestro archivo ini, el remapeo M6 tiene el siguiente aspecto: REMAP=M6 modalgroup=6 prolog=change_prolog ngc=change epilog=change_epilog @@ -856,7 +855,7 @@ cambio, de esta manera: # puenteo de señales de cambio al reasignar M6 net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed --------------------------------------------------------------------- -Si por alguna razón desea remapear `Tx` (preparar), +Si por alguna razón desea remapear `Tx` (preparar), los pines de iocontrol correspondientes también deben estar puenteados. === Escribiendo el cambio y preparando procedimientos O-word @@ -916,7 +915,7 @@ PRECAUCIÓN: al redefinir un código incorporado, *no especifique ningún cero e los códigos G o M*; por ejemplo, diga `REMAP=M1 ..`, no `REMAP=M01 ...`. -Vea el directorio `configs/sim/axis/remap/extend-builtins` para una +Vea el directorio `configs/sim/axis/remap/extend-builtins` para una configuración completa que es el punto de partida recomendado para su trabajo propio. === Especificando el reemplazo de T (preparar) @@ -929,7 +928,7 @@ no bloquear hasta que se establezca el pin "tool-prepared". Lo que podría hacer, por ejemplo, es: - en una T remapeada, simplemente establezca el equivalente del pin "tool-prepare", pero *no* espere "tool-prepared" aquí -- en el M6 remapeado correspondiente, espere a "tool-prepared" +- en el M6 remapeado correspondiente, espere a "tool-prepared" al principio del procedimiento O-word. Nuevamente, los pines de iocontrol tool-prepare/tool-ready no se utilizarían @@ -959,7 +958,7 @@ def prepare_prolog(self,**words): return "T%d: ranura no encontrado" % (tool) else: pocket = -1 # esto es T0 - descarga de herramienta - + # estas variables serán visibles en la sub oword de ngc # como variables locales # y # , y pueden ser # modificadas allí - el epilogo recuperará los valores @@ -1071,7 +1070,7 @@ el epilogo (ver la sección anterior) también causará llamada al procedimiento Si determina en su procedimiento de manejo que ocurrio alguna condición de error, no use `M2` para finalizar su manejador - vea mas arriba. -Si se muestra un mensaje de error al operador y es suficientemente aceptable detener el programa actual, +Si se muestra un mensaje de error al operador y es suficientemente aceptable detener el programa actual, use la característica `(abort, )` para terminar el manejador con un mensaje de error. Tenga en cuenta que puede sustituir parámetros HAL numerados, nombrados e ini en el texto como en este ejemplo (vea también `tests/interp/abort-hot-comment/test.ngc`): @@ -1118,7 +1117,7 @@ cambiaria de marcha adecuadamente si no es así. Un caso de uso para el remapeado de M0/M1 sería personalizar el comportamiento del código existente. Por ejemplo, podría ser deseable desactivar el -husillo, la niebla y la inundación durante una pausa del programa M0 o M1, y +husillo, la niebla y la inundación durante una pausa del programa M0 o M1, y configurar el reencendido cuando se reanude el programa. Para un ejemplo completo haciendo eso, vea @@ -1142,7 +1141,7 @@ una descripción detallada de +cycle_prolog+ y +cycle_epilog+): --------------------------------------------------------------------- [RS274NGC] # Un ciclo con un procedimiento oword: G84.3 -REMAP=G84.3 argspec=xyzabcuvwpr prolog=cycle_prolog ngc=g843 epilog=cycle_epilog modalgroup=1 +REMAP=G84.3 argspec=xyzabcuvwpr prolog=cycle_prolog ngc=g843 epilog=cycle_epilog modalgroup=1 --------------------------------------------------------------------- Ejecutando las siguientes lineas: [source,{ngc}] @@ -1496,7 +1495,7 @@ el procedimiento O-word todavía es accesible cuando se ejecuta el epilog. La matriz `self.params` maneja la lectura y configuración de parámetros numerados y nombrados. Si un parámetro con nombre comienza con `_` (guión bajo), se asume que es un parámetro global; si no, es local al procedimiento llamante. -Además, los parámetros numerados en el rango 1..30 se tratan +Además, los parámetros numerados en el rango 1..30 se tratan como variables locales; sus valores originales son restaurados en los return/endsub de procedimientos O-word. @@ -1558,14 +1557,14 @@ menor que `INTERP_MIN_ERROR`. Si está usando muchas instrucciones execute(), es probablemente sea más fácil atrapar InterpreterException como se muestra a continuación. PRECAUCIÓN: el método de inserción/recuperación de parámetros descrito en la sección anterior no -trabaja en este caso. Es lo suficientemente bueno para comandos ejecutar simples NGC +trabaja en este caso. Es lo suficientemente bueno para comandos ejecutar simples NGC o una llamada de procedimiento e introspección avanzada en el procedimiento, y el paso de los parámetros locales con nombre no es necesario. La caracteristica de llamada recursiva es frágil. .Excepción del intérprete durante execute() -Si `interpreter.throw_exceptions` es distinto de cero (valor predeterminado 1), y self.execute() devuelve un error, +Si `interpreter.throw_exceptions` es distinto de cero (valor predeterminado 1), y self.execute() devuelve un error, se genera la excepción `InterpreterException`. InterpreterException tiene los siguientes atributos: @@ -1674,7 +1673,7 @@ avanzado, vea `tests/remap/predefined-named-params`. [[remap:standard-glue]] -== Rutinas estándar de union +== Rutinas estándar de union Dado que muchas tareas de remapeado son muy similares, se comenzo a recopilar rutinas de prolog y epilog en un solo módulo de Python. Actualmente estas @@ -1733,7 +1732,7 @@ y el prolog aborta con un mensaje de error. ** Si el parámetro 5601 (código de error) es mayor o igual a cero, esto indica un fallo soft. Se muestra un mensaje informativo y prolog continúa. -* Si no había un comando T precedente que causára que no fue seleccionada una ranura, +* Si no había un comando T precedente que causára que no fue seleccionada una ranura, prolog aborta con un mensaje de error. * Si la compensación del radio de corte está activada, prolog se cancela con un mensaje de error. @@ -1786,7 +1785,7 @@ de error. El argspec sugerido es el siguiente: [source,{ini}] --------------------------------------------------------------------- -REMAP=G argspec=xyzabcuvwqplr prolog=cycle_prolog ngc= epilog=cycle_epilog modalgroup=1 +REMAP=G argspec=xyzabcuvwqplr prolog=cycle_prolog ngc= epilog=cycle_epilog modalgroup=1 --------------------------------------------------------------------- Esto permitirá a +cycle_prolog+ determinar la compatibilidad de cualquier palabra de eje dada en el bloque, ver más abajo. @@ -1906,7 +1905,7 @@ Vea el código de Python en `configs/sim/axis/remap/getting-started/python` para [[remap:axis-preview-and-remapped-code-execution]] -== Vista previa de Axis y Ejecución de código remapeado +== Vista previa de Axis y Ejecución de código remapeado Para obtener una vista previa completa del camino de la herramienta de un código remapeado, necesita tomar algunas precauciones. @@ -2148,17 +2147,17 @@ LinuxCNC se recomienda que los elimine de esta tabla.) .Tabla de códigos M no asignados 00-99 [width="90%",align="center",options="header,strong,unbreakable",cols="1*2^em,10*1> section of the INI configuration for more information. [[sub:configuration-selector]] - -=== Configuration Selector +=== Configuration Selector(((Configuration Selection))) 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 @@ -63,5 +63,4 @@ configuration has been saved it can be modified to suit your application. The configuration files are saved in linuxcnc/configs directory. .Configuration Selector - -image::images/configuration-selector.png[align="center", alt="LinuxCNC Configuration Selector"] +image::images/configuration-selector.png["LinuxCNC Configuration Selector",align="center"] diff --git a/docs/src/user/user-concepts.adoc b/docs/src/user/user-concepts.adoc index 87bd4620cc9..bebf9341216 100644 --- a/docs/src/user/user-concepts.adoc +++ b/docs/src/user/user-concepts.adoc @@ -1,13 +1,14 @@ -[[cha:important-user-concepts]] +:lang: en +:toc: -= Important User Concepts +[[cha:important-user-concepts]] += Important User Concepts(((User Concepts))) This chapter covers important user concepts that should be understood before attempting to run a CNC machine with g code. -[[sec:trajectory-control]](((Trajectory Control))) - -== Trajectory Control +[[sec:trajectory-control]] +== Trajectory Control(((Trajectory Control))) === Trajectory Planning @@ -36,17 +37,21 @@ machine constraints such as maximum axis velocity and axis acceleration must be obeyed by the trajectory planner. For more information on the Trajectory Panner ini options see the -<> in the INI chapter. +<> in the INI chapter. === Path Following 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: it can decelerate to a -stop exactly at the coordinates of the corner, and then accelerate in -the new direction. 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. +program a corner in G Code, the trajectory planner can do several +things, all of which are right in some cases: + + * it can decelerate to a stop exactly at the coordinates of the corner, + and then accelerate in the new direction. + + * 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. + 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, @@ -56,66 +61,65 @@ 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. -[[programming-the-planner]] -=== Programming the Planner(((Programming the Planner))) +=== Programming the Planner(((Programming the Planner)))[[programming-the-planner]] The trajectory control commands are as follows: * 'G61' - (Exact Path Mode) 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. + that means it might temporarily come to a complete stop in order to + change direction to the next programmed point. * 'G61.1' - (Exact Stop Mode) tells the planner to come to an exact stop at every - segment's end. + segment's end. * 'G64' - (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. + 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. * 'G64 P- Q-' - (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 <> - of the G-code chapter. + 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 <> + of the G code chapter. * 'Blending without tolerance' - 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. + 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. * 'Naive Cam Detector' - 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. + 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. In the following figure the blue line represents the actual machine velocity. The red lines are the acceleration capability of the machine. @@ -129,7 +133,7 @@ velocity as planned. .Naive Cam Detector -image::images/naive-cam.png[align="center", alt="Naive Cam Detector"] +image::images/naive-cam.png["Naive Cam Detector",align="center"] === Planning Moves @@ -267,9 +271,9 @@ 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. - - Offsets stored in a user coordinate system are retained when LinuxCNC is + - Offsets stored in a user coordinate system are retained when LinuxCNC is shut down. - - Using the 'Touch Off' button in Axis sets an offset for the chosen + - Using the 'Touch Off' button in Axis sets an offset for the chosen User Coordinate System. === When You Are Lost @@ -290,7 +294,6 @@ 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. [[sec:Machine-Configurations]] - == Machine Configurations The following diagram shows a typical mill showing direction of travel @@ -299,13 +302,11 @@ 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. -.Mill Configuration -image::images/mill-diagram_en.svg[align="center", alt="Mill Configuration"] +image::images/mill-diagram_en.svg["Mill Configuration",align="center"] The following diagram shows a typical lathe showing direction of travel of the tool and limit switches. -.Lathe Configuration -image::images/lathe-diagram_en.svg[align="center", alt="Lathe Configuration"] +image::images/lathe-diagram_en.svg["Lathe Configuration",align="center"] // vim: set syntax=asciidoc: diff --git a/docs/src/user/user-concepts_es.adoc b/docs/src/user/user-concepts_es.adoc index ce8cd7dd46e..ae7e0508435 100644 --- a/docs/src/user/user-concepts_es.adoc +++ b/docs/src/user/user-concepts_es.adoc @@ -8,9 +8,7 @@ Este capítulo cubre conceptos importantes de que deben ser entendidos por el usuario antes de intentar manejar una máquina CNC con código g. -[[sec:trajectory-control]](((Trajectory Control))) - -== Control de Trayectoria +== Control de Trayectoria[[sec:trajectory-control]](((Trajectory Control))) === Planificacion de trayectoria diff --git a/docs/src/user/user-concepts_fr.adoc b/docs/src/user/user-concepts_fr.adoc index 9c3e93df37e..d007b281e78 100644 --- a/docs/src/user/user-concepts_fr.adoc +++ b/docs/src/user/user-concepts_fr.adoc @@ -1,10 +1,10 @@ :lang: fr :toc: -= Concepts importants pour l'utilisateur - [[cha:Concepts-pour-utilisateur]] += Concepts importants pour l'utilisateur + == La configuration machine Le dessin suivant montre les directions de déplacement de l'outil et la position diff --git a/docs/src/user/user-foreword.adoc b/docs/src/user/user-foreword.adoc index 0a1de64e87e..857d0ed9799 100644 --- a/docs/src/user/user-foreword.adoc +++ b/docs/src/user/user-foreword.adoc @@ -1,5 +1,6 @@ -[[cha:user-foreword]] +:lang: en +[[cha:user-foreword]] = User Foreword LinuxCNC is modular and flexible. These attributes lead many to see it as @@ -27,8 +28,7 @@ the following in actual Unix practice: * Rule of Composition: Design programs to be connected to other programs. * Rule of Separation: Separate policy from mechanism; separate - interfaces from engines.footnote:[Found at - http://en.wikipedia.org/wiki/Unix_philosophy, 07/06/2008] + interfaces from engines.footnote:[Found at http://en.wikipedia.org/wiki/Unix_philosophy, 07/06/2008] Mr. Raymond offered several more rules but these four describe essential characteristics of the LinuxCNC motion control system. diff --git a/docs/src/user/user-foreword_es.adoc b/docs/src/user/user-foreword_es.adoc index 21c2335d24e..5db574bf9aa 100644 --- a/docs/src/user/user-foreword_es.adoc +++ b/docs/src/user/user-foreword_es.adoc @@ -22,8 +22,7 @@ Eric S. Raymond, en su libro The Art of Unix Programming, resume la filosofía U * Regla de composición: diseñar programas para conectarse a otros programas. * Regla de separación: Separar las políticas de los mecanismos; separar - interfaces de motores.footnote:[Encontrado en - http://en.wikipedia.org/wiki/Unix_philosophy, 07/06/2008] + interfaces de motores.footnote:[Encontrado en http://en.wikipedia.org/wiki/Unix_philosophy, 07/06/2008] El Sr. Raymond ofreció varias reglas más, pero estas cuatro describen las características esenciales del sistema de control de movimiento LinuxCNC. @@ -49,6 +48,6 @@ Al comenzar su viaje hacia el uso de LinuxCNC, le ofrecemos dos consideraciones: - Parafraseando las palabras de Doug Gwyn en UNIX: "LinuxCNC no fue diseñado para evitar que sus usuarios hagan cosas estúpidas, ya que eso también les impediria hacer cosas ingeniosas". - - Tambien las palabras de Steven King: "LinuxCNC es fácil de usar. Simplemente no se descuida con respecto a qué tipo de usuarios es amigable". - + - Tambien las palabras de Steven King: "LinuxCNC es fácil de usar. Simplemente no + se descuida con respecto a qué tipo de usuarios es amigable". diff --git a/docs/src/user/user-foreword_fr.adoc b/docs/src/user/user-foreword_fr.adoc index a204f962535..4fec7cc1c46 100644 --- a/docs/src/user/user-foreword_fr.adoc +++ b/docs/src/user/user-foreword_fr.adoc @@ -25,16 +25,15 @@ qu'on trouve sans surprise de graves entorses à la plupart des règles Unix suivantes: * Règle de modularité: Ecrire des éléments simples reliés par de -bonnes interfaces. + bonnes interfaces. * Règle de clarté: La Clarté vaut mieux que l'ingéniosité. * Règle de composition: Concevoir des programmes qui peuvent être -reliés à d'autres programmes. + reliés à d'autres programmes. * Règle de séparation: Séparer les règles du fonctionnement; Séparer -les interfaces du mécanisme.footnote:[Trouvé -sur http://fr.wikipedia.org/wiki/Philosophie_d%27Unix, 09/09/2008] + les interfaces du mécanisme.footnote:[Trouvé sur http://fr.wikipedia.org/wiki/Philosophie_d%27Unix, 09/09/2008] Monsieur Raymond offre d'autres règles mais ces quatre là décrivent les caractéristiques essentielles du système de contrôle de mouvement LinuxCNC. diff --git a/docs/src/user/user-intro.adoc b/docs/src/user/user-intro.adoc index 61f28a27407..533a21d4cfa 100644 --- a/docs/src/user/user-intro.adoc +++ b/docs/src/user/user-intro.adoc @@ -1,6 +1,8 @@ -[[cha:linuxcnc-user-introduction]] +:lang: en +:toc: -= LinuxCNC User Introduction +[[cha:linuxcnc-user-introduction]] += LinuxCNC User Introduction(((introduction))) == How LinuxCNC Works @@ -12,27 +14,27 @@ At its heart, LinuxCNC consists of several key components that are integrated to complete system: * a Graphical User Interface (GUI), which forms the basic interface between the operator, the software -and the CNC machine itself; + and the CNC machine itself; * the <> (HAL), which provides a method of linking all -the various internal virtual signals generated and received by LinuxCNC with the outside world; and, + the various internal virtual signals generated and received by LinuxCNC with the outside world; and, * 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). + machine, namely the motion controller (EMCMOT), the discrete input/output controller (EMCIO) and the + task executor (EMCTASK). The below illustration is a simple block diagram showing what a typical 3-axis, CNC mill with stepper -motors might look like: +motors might look like: -image::images/whatstep1.png[align="center", alt="Simple LinuxCNC Controlled Machine"] +image::images/whatstep1.png["Simple LinuxCNC Controlled Machine",align="center"] 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. +second signal that defines the speed at which that stepper motor rotates. 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 +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. In most circumstances, users will create a configuration specific to their mill setup using either the @@ -40,77 +42,76 @@ In most circumstances, users will create a configuration specific to their mill parallel port) or the <> (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. +to allow easy launching of LinuxCNC. 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: -* Folder: My_CNC -** My_CNC.ini +* Folder: My_CNC +** My_CNC.ini *** The INI file contains all the basic hardware information regarding the operation of the CNC mill such -as the number of steps each stepper motor must turn to complete one full revolution, the maximum rate at -which each stepper may operate at, the limits of travel of each axis or the configuration and behaviour of -limit switches on each axis. -** My_CNC.hal + as the number of steps each stepper motor must turn to complete one full revolution, the maximum rate at + which each stepper may operate at, the limits of travel of each axis or the configuration and behaviour of + limit switches on each axis. +** My_CNC.hal *** This HAL file contains information that tells LinuxCNC how to link the internal virtual signals to -physical connections beyond the computer. For example, specifying pin 4 on the parallel port to send out -the Z axis step direction signal, or directing LinuxCNC to cease driving the X axis motor when a limit -switch is triggered on parallel port pin 13. + physical connections beyond the computer. For example, specifying pin 4 on the parallel port to send out + the Z axis step direction signal, or directing LinuxCNC to cease driving the X axis motor when a limit + switch is triggered on parallel port pin 13. ** custom.HAL *** Customisations to the mill configuration beyond the scope of the wizard may be performed by including -further links to other virtual points within LinuxCNC in this HAL file. When starting a LinuxCNC session, -this file is read and processed before the GUI is loaded. An example may include initiating Modbus -communications to the spindle motor so that it is confirmed as operational before the GUI is displayed. -** custom_postgui.hal + further links to other virtual points within LinuxCNC in this HAL file. When starting a LinuxCNC session, + this file is read and processed before the GUI is loaded. An example may include initiating Modbus + communications to the spindle motor so that it is confirmed as operational before the GUI is displayed. +** custom_postgui.hal *** The custom_postgui HAL file allows further customisation of LinuxCNC, but differs from custom.HAL in -that it is processed after the GUI is displayed. For example, after establishing Modbus communications to -the spindle motor in custom.hal, LinuxCNC can use the custom_postgui file to link the spindle speed readout -from the motor drive to a bargraph displayed on the GUI. -** postgui_backup.hal + that it is processed after the GUI is displayed. For example, after establishing Modbus communications to + the spindle motor in custom.hal, LinuxCNC can use the custom_postgui file to link the spindle speed readout + from the motor drive to a bargraph displayed on the GUI. +** postgui_backup.hal *** This is provided as a backup copy of the custom_postgui.hal file to allow the user to quickly restore a -previously-working postgui HAL configuration. This is especially useful if the user wants to run the -Configuration Wizard again under the same 'My_CNC' name in order to modify some parameters of the mill. -Saving the mill configuration in the Wizard will overwrite the existing custom_postgui file while leaving -the postgui_backup file untouched. + previously-working postgui HAL configuration. This is especially useful if the user wants to run the + Configuration Wizard again under the same 'My_CNC' name in order to modify some parameters of the mill. + Saving the mill configuration in the Wizard will overwrite the existing custom_postgui file while leaving + the postgui_backup file untouched. ** tool.tbl *** A tool table file contains a parameterised list of any cutting tools used by the mill. These parameters -can include cutter diameter and length, and is used to provide a catalogue of data that tells LinuxCNC how -to compensate its motion for different sized tools within a milling operation. -* Folder: nc_files + can include cutter diameter and length, and is used to provide a catalogue of data that tells LinuxCNC how + to compensate its motion for different sized tools within a milling operation. +* Folder: nc_files *** The nc_files folder is provided as a default location to store the G-code programs used to drive the -mill. It also includes a number of subfolders with G-code examples. + mill. It also includes a number of subfolders with G-code examples. == Graphical User Interfaces 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 <>: +LinuxCNC comes with several types of user interfaces which may be chosen from by editing +certain fields contained in the <>: -<>, the standard keyboard GUI interface. This is also the default GUI launched when a +<>, the standard keyboard GUI interface. This is also the default GUI launched when a Configuration Wizard is used to create a desktop icon launcher: -image::../gui/images/axis.png[align="center", alt="Axis, the standard keyboard GUI interface"] - +image::../gui/images/axis.png["Axis, the standard keyboard GUI interface",align="center"] -<>, a touch screen GUI: +<>, a touch screen GUI: -image::../gui/images/touchy.png[align="center", alt="Touchy, a touch screen GUI"] +image::../gui/images/touchy.png["Touchy, a touch screen GUI",align="center"] -<>, a user-configurable touch screen GUI: +<>, a user-configurable touch screen GUI: -image::../gui/images/gscreen-mill.png[align="center", alt="Gscreen, a configurable base touch screen GUI"] +image::../gui/images/gscreen-mill.png["Gscreen, a configurable base touch screen GUI",align="center"] -<>, a touch screen GUI based on Gscreen. GMOCCAPY is also designed to work equally +<>, 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: -image::../gui/images/gmoccapy_3_axis.png[align="center", alt="gmoccapy, a touch screen GUI based on Gscreen"] +image::../gui/images/gmoccapy_3_axis.png["gmoccapy, a touch screen GUI based on Gscreen",align="center"] -<>, a subroutine GUI that provides wizard-style programming of G-code. NGCGUI may be +<>, 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: -image::../gui/images/ngcgui.png[align="center", alt="NGCGUI, a subroutine GUI that provides wizard-style programming of G-code"] +image::../gui/images/ngcgui.png["NGCGUI, a subroutine GUI that provides wizard-style programming of G code",align="center"] == Virtual Control Panels @@ -123,14 +124,14 @@ utilises virtual signals contained within the Hardware Abstraction Layer, such a 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. -image::../gui/images/axis-pyvcp.png[align="center", alt="PyVCP with Axis"] +image::../gui/images/axis-pyvcp.png["PyVCP with Axis",align="center"] <>, 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: -image::../gui/images/axis-gladevcp.png[align="center", alt="GladeVCP with Axis"] +image::../gui/images/axis-gladevcp.png["GladeVCP with Axis",align="center"] == Languages diff --git a/docs/src/user/user-intro_es.adoc b/docs/src/user/user-intro_es.adoc index 2fde7085a24..8eb8535127c 100644 --- a/docs/src/user/user-intro_es.adoc +++ b/docs/src/user/user-intro_es.adoc @@ -17,7 +17,7 @@ En esencia, LinuxCNC consta de varios componentes clave que se integran para for La siguiente ilustración es un diagrama de bloques simple que muestra una fresadora típica CNC de 3 ejes con motores paso a paso: -image::images/whatstep1.png[align="center", alt="Máquina simple controlada por LinuxCNC"] +image::images/whatstep1.png["Máquina simple controlada por LinuxCNC",align="center"] El ordenador que ejecuta LinuxCNC envía una secuencia de impulsos a través del puerto paralelo a las unidades paso a paso. Cada una de esas unidades tiene un motor paso a paso conectado. Cada unidad recibe dos señales independientes; una señal para ordenar al accionamiento que mueva su motor paso a paso asociado en sentido horario o antihorario (señal de direccion), y una segunda señal (tren de pulsos) que define la velocidad a la que gira el motor paso a paso. @@ -53,24 +53,24 @@ LinuxCNC viene con varios tipos de interfaces de usuario que se pueden elegir al <>, es la interfaz GUI de teclado estándar. Es también la GUI predeterminada que se inicia cuando se usa el Asistente de Configuración para crear un icono lanzador en escritorio: -image::../gui/images/axis_es.png[align="center", alt="Axis, interfaz GUI de teclado estándar"] +image::../gui/images/axis_es.png["Axis, interfaz GUI de teclado estándar",align="center"] <> es una GUI para usar con pantalla táctil: -image::../gui/images/touchy_es.png[align="center", alt="Touchy, una GUI para usar con pantalla táctil"] +image::../gui/images/touchy_es.png["Touchy, una GUI para usar con pantalla táctil",align="center"] <> una GUI de pantalla táctil configurable por el usuario: -image::../gui/images/gscreen-mill.png[align="center", alt="Gscreen, una GUI de pantalla táctil configurable"] +image::../gui/images/gscreen-mill.png["Gscreen, una GUI de pantalla táctil configurable",align="center"] <> una GUI de pantalla táctil basada en Gscreen. GMOCCAPY también está diseñada para funcionar tambien en aplicaciones donde el teclado y el mouse son los métodos preferidos para controlar la GUI: -image::../gui/images/gmoccapy_3_axis.png[align="center", alt="gmoccapy, una GUI de pantalla táctil basada en Gscreen"] +image::../gui/images/gmoccapy_3_axis.png["gmoccapy, una GUI de pantalla táctil basada en Gscreen",align="center"] <> una GUI de subrutinas que proporciona una programación de código G, de tipo asistente. NGCGUI puede ejecutarse como un programa independiente o incrustado en otra GUI como una serie de pestañas. La siguiente captura de pantalla muestra a NGCGUI incrustado en Axis: -image::../gui/images/ngcgui.png[align="center", alt="NGCGUI, una GUI de subrutinas que proporciona una programación de código G tipo asistente"] +image::../gui/images/ngcgui.png["NGCGUI, una GUI de subrutinas que proporciona una programación de código G tipo asistente",align="center"] == Paneles de control virtual @@ -78,11 +78,11 @@ Como se mencionó anteriormente, muchas de las GUI de LinuxCNC pueden ser person <> un panel de control virtual basado en Python que se puede agregar a la GUI Axis. PyVCP utiliza solo señales virtuales contenidas dentro de la capa de abstracción de hardware HAL, como el indicador de velocidad del husillo o la señal de salida de Parada de Emergencia, y tiene una apariencia sencilla, sin lujos. Esto lo hace una excelente opción si el usuario desea agregar un Panel de Control Virtual con un mínimo esfuerzo. -image::../gui/images/axis-pyvcp.png[align="center", alt="PyVCP en Axis"] +image::../gui/images/axis-pyvcp.png["PyVCP en Axis",align="center"] <> un panel de control virtual basado en Glade que se puede agregar a las GUIs Axis o Touchy. GladeVCP tiene la ventaja sobre PyVCP en que no se limita a la visualización o control de señales virtuales HAL, sino que puede incluir otras interfaces externas fuera de LinuxCNC, como ventanas o eventos de redes. GladeVCP también es más flexible en cuanto a cómo se puede configurar para que aparezca en la GUI: -image::../gui/images/axis-gladevcp.png[align="center", alt="GladeVCP con Axis"] +image::../gui/images/axis-gladevcp.png["GladeVCP con Axis",align="center"] == Idiomas diff --git a/docs/src/user/user-intro_fr.adoc b/docs/src/user/user-intro_fr.adoc index 30711f05a6a..3c54bc6f454 100644 --- a/docs/src/user/user-intro_fr.adoc +++ b/docs/src/user/user-intro_fr.adoc @@ -1,10 +1,10 @@ :lang: fr :toc: -= LinuxCNC - [[cha:linuxcnc-user-introduction]] += LinuxCNC + == Introduction Ce document est centré sur l'utilisation de LinuxCNC, @@ -14,8 +14,7 @@ chapitres suivants. La documentation complète sur l'installation et la configuration se trouve dans le manuel de l'intégrateur. -[[sec:Comment-Fonctionne-LinuxCNC]] -== Comment fonctionne LinuxCNC +== Comment fonctionne LinuxCNC[[sec:Comment-Fonctionne-LinuxCNC]] LinuxCNC est un peu plus que juste un autre programme de fraiseuse CNC(((CNC))). Il est capable de contrôler des machines-outils, des @@ -34,7 +33,7 @@ En outre il existe une couche appelée HAL (couche d'abstraction du matériel) qui permet la configuration de LinuxCNC sans avoir besoin de recompiler. .Machine simple contrôlée par LinuxCNC -image::images/whatstep1.png[align="center", alt="Machine simple contrôlée par LinuxCNC"] +image::images/whatstep1.png["Machine simple contrôlée par LinuxCNC",align="center"] La figure ci-dessus montre un diagramme bloc représentant une machine 3 axes typique comme LinuxCNC les aime. Cette @@ -59,35 +58,35 @@ interfaces utilisateurs graphiques: * <>, l'interface utilisateur standard. .L'interface graphique AXIS[[fig:Interface-graphique-AXIS]] -image::images/axis_25_fr.png[align="center", alt="L'interface graphique AXIS"] +image::images/axis_25_fr.png["L'interface graphique AXIS",align="center"] * <>, une interface graphique pour écran tactile. .L'interface graphique Touchy[[fig:touchy-gui]] -image::images/touchy_fr.png[align="center", alt="L'interface graphique Touchy"] +image::images/touchy_fr.png["L'interface graphique Touchy",align="center"] * <>, une interface graphique gérant les sous-programmes. -Elle permet très simplement de créer des programme G-code. Elle supporte -surtout la concaténation de fichiers de sous-programmes, ce qui permet de -construire des programmes G-code complets sans aucune programmation. + Elle permet très simplement de créer des programme G-code. Elle supporte + surtout la concaténation de fichiers de sous-programmes, ce qui permet de + construire des programmes G-code complets sans aucune programmation. .L'interface graphique NGCGUI intégrée dans Axis[[fig:ngcgui-gui]] -image::images/ngcgui_fr.png[align="center", alt="L'interface graphique NGCGUI intégrée dans Axis"] +image::images/ngcgui_fr.png["L'interface graphique NGCGUI intégrée dans Axis",align="center"] * <>, une autre interface basée sur Tcl/Tk. -C'est l'interface la plus populaire après Axis + C'est l'interface la plus populaire après Axis .L'interface graphique tklinuxcnc[[fig:L-interface-graphique-tklinuxcnc]] -image::images/tklinuxcnc_fr.png[align="center", alt="L'interface graphique tklinuxcnc"] +image::images/tklinuxcnc_fr.png["L'interface graphique tklinuxcnc",align="center"] * _Xemc_, un programme X-Windows * _halui_, une interface utilisateur basée sur HAL, qui permet de contrôler -LinuxCNC en utilisant des boutons et des interrupteurs + LinuxCNC en utilisant des boutons et des interrupteurs * _linuxcncrsh_, une interface utilisateur basée sur telnet, qui permet -d'envoyer des commandes à partir d'ordinateurs distants de celui de LinuxCNC + d'envoyer des commandes à partir d'ordinateurs distants de celui de LinuxCNC == Panneaux de contrôle virtuels From c3e66c313028db8df0332b42fa8d7b6bf6589a42 Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Tue, 8 Feb 2022 20:57:13 +0100 Subject: [PATCH 02/53] Reversing in-line anchors that break references --- docs/src/config/ini-config_es.adoc | 3 ++- docs/src/getting-started/running-linuxcnc_es.adoc | 3 +-- docs/src/gui/axis.adoc | 4 ++-- docs/src/gui/axis_es.adoc | 8 ++++---- docs/src/gui/axis_fr.adoc | 4 ++-- docs/src/gui/gladevcp.adoc | 3 ++- docs/src/gui/gladevcp_fr.adoc | 9 +++++---- docs/src/gui/gscreen_es.adoc | 9 +++++---- docs/src/gui/ngcgui_es.adoc | 3 ++- docs/src/user/user-intro.adoc | 2 +- docs/src/user/user-intro_es.adoc | 3 ++- 11 files changed, 28 insertions(+), 23 deletions(-) diff --git a/docs/src/config/ini-config_es.adoc b/docs/src/config/ini-config_es.adoc index b602b24f93e..02e87c6e09a 100644 --- a/docs/src/config/ini-config_es.adoc +++ b/docs/src/config/ini-config_es.adoc @@ -308,7 +308,8 @@ Las descripciones de las interfaces se encuentran en la sección Interfaces del [NOTE] GladeVCP utiliza los siguientes elementos [DISPLAY], consulte la sección -<> del Capítulo GladeVCP. +gladevcp:embeding-tab,incrustando una pestaña // document was removed since "all english" +del Capítulo GladeVCP. * 'EMBED_TAB_NAME=Demo GladeVCP' diff --git a/docs/src/getting-started/running-linuxcnc_es.adoc b/docs/src/getting-started/running-linuxcnc_es.adoc index 750328f86a6..2c871d23b65 100644 --- a/docs/src/getting-started/running-linuxcnc_es.adoc +++ b/docs/src/getting-started/running-linuxcnc_es.adoc @@ -40,8 +40,7 @@ El selector de configuración ofrece una selección de configuraciones organizad ** 'by_machine' - Configuraciones organizadas por tipo de máquina. ** 'apps' - aplicaciones que no requieren iniciar linuxcnc pero pueden ser - útiles para pruebas o aplicaciones como <> + útiles para pruebas o aplicaciones como PyVCP o GladeVCP. ** 'attic' - Configuraciones obsoletas o históricas. diff --git a/docs/src/gui/axis.adoc b/docs/src/gui/axis.adoc index 236eca5be72..1e1268c0e9c 100644 --- a/docs/src/gui/axis.adoc +++ b/docs/src/gui/axis.adoc @@ -1,8 +1,8 @@ :lang: en :toc: - -= [[cha:axis-gui]](((axis-gui)))AXIS GUI +[[cha:axis-gui]] += (((axis-gui)))AXIS GUI == Introduction diff --git a/docs/src/gui/axis_es.adoc b/docs/src/gui/axis_es.adoc index f2625c39c36..008ca7e4312 100644 --- a/docs/src/gui/axis_es.adoc +++ b/docs/src/gui/axis_es.adoc @@ -1,6 +1,7 @@ :lang: es -= [[cha:axis-gui]]GUI AXIS +[[cha:axis-gui]] += GUI AXIS == Introducción @@ -947,11 +948,10 @@ del capítulo de Configuración INI. AXIS puede mostrar un panel de control virtual personalizado en la zona derecha. Puede programar botones, indicadores, pantallas de datos y más cosas. -Para más información, consulte los capitulos <> enlaza LinuxCNC, HAL, PyGTK y Glade, todos juntos. +//cha:glade-vcp +GladeVCP enlaza LinuxCNC, HAL, PyGTK y Glade, todos juntos. LinuxCNC requiere algunos widgets especiales; GladeVCP los suministra. Muchos son solo extensiones HAL a los widgets PyGTK existentes. GladeVCP crea los pines HAL para los widgets especiales descritos en el archivo Glade. GladeVCP también permite agregar @@ -112,7 +113,7 @@ agregan widgets, puede configurar llamadas de señal desde el editor de Glade pa rutinas que haya escrito en el archivo handler. De esta forma podrás tener un comportamiento personalizado. Las rutinas del handler pueden llamar a las rutinas predeterminadas de Gscreen, ya sea antes o después de ejecutar su propio código. De esta manera se puede añadir comportamiento extra, -como añadir un sonido. Por favor vea el <> para entender +como añadir un sonido. Por favor vea el capitulo GladeVCP para entender los fundamentos de los archivos handler GladeVCP. Gscreen utiliza una técnica muy similar. .Temas @@ -183,7 +184,7 @@ probablemente no va a funcionar bien sin cambiar el código de Python, pero move Widget manteniendo el nombre suele ser viable. Gscreen aprovecha los widgets de GladeVCP tanto como sea posible, para evitar agregar código python. -Aprender acerca de los widgets de <> es un requisito previo. +Aprender acerca de los widgets de GladeVCP es un requisito previo. Si los widgets existentes le brindan la función que desea o necesita, entonces no es necesario agregar código Python; solo guarde el archivo Glade en su carpeta de configuración. Si necesita algo más personalizado, entonces debe hacer algo de programación en Python. diff --git a/docs/src/gui/ngcgui_es.adoc b/docs/src/gui/ngcgui_es.adoc index 9e2ffe613e3..7c2e069e729 100644 --- a/docs/src/gui/ngcgui_es.adoc +++ b/docs/src/gui/ngcgui_es.adoc @@ -440,7 +440,8 @@ Nota: Las entradas: EMBED_TAB_NAME, EMBED_TAB_COMMAND, EMBED_TAB_LOCATION Elemento: [DISPLAY]EMBED_TAB_COMMAND = nombre del programa seguido de argumentos Ejemplo: [DISPLAY]EMBED_TAB_COMMAND = gladevcp -x {XID} pyngcgui_axis.ui -Nota: Para aplicaciones gladevcp, vea el <> +Nota: Para aplicaciones gladevcp, vea el Capítulo GladeVCP +//cha:glade-vcp Elemento: [DISPLAY]EMBED_TAB_LOCATION = nombre_de_ubicación Ejemplo: [DISPLAY]EMBED_TAB_LOCATION = notebook_main diff --git a/docs/src/user/user-intro.adoc b/docs/src/user/user-intro.adoc index 533a21d4cfa..1f430362dfc 100644 --- a/docs/src/user/user-intro.adoc +++ b/docs/src/user/user-intro.adoc @@ -126,7 +126,7 @@ excellent choice if the user wants to add a Virtual Control Panel with minimal f image::../gui/images/axis-pyvcp.png["PyVCP with Axis",align="center"] -<>, a Glade-based virtual control panel that can be added to the Axis or Touchy +'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: diff --git a/docs/src/user/user-intro_es.adoc b/docs/src/user/user-intro_es.adoc index 8eb8535127c..bdd4e933177 100644 --- a/docs/src/user/user-intro_es.adoc +++ b/docs/src/user/user-intro_es.adoc @@ -80,7 +80,8 @@ Como se mencionó anteriormente, muchas de las GUI de LinuxCNC pueden ser person image::../gui/images/axis-pyvcp.png["PyVCP en Axis",align="center"] -<> un panel de control virtual basado en Glade que se puede agregar a las GUIs Axis o Touchy. GladeVCP tiene la ventaja sobre PyVCP en que no se limita a la visualización o control de señales virtuales HAL, sino que puede incluir otras interfaces externas fuera de LinuxCNC, como ventanas o eventos de redes. GladeVCP también es más flexible en cuanto a cómo se puede configurar para que aparezca en la GUI: +//cha:glade-vcp +'GladeVCP' un panel de control virtual basado en Glade que se puede agregar a las GUIs Axis o Touchy. GladeVCP tiene la ventaja sobre PyVCP en que no se limita a la visualización o control de señales virtuales HAL, sino que puede incluir otras interfaces externas fuera de LinuxCNC, como ventanas o eventos de redes. GladeVCP también es más flexible en cuanto a cómo se puede configurar para que aparezca en la GUI: image::../gui/images/axis-gladevcp.png["GladeVCP con Axis",align="center"] From 40cef7afad9448b4f9506842cf0b2a453ca242d2 Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Wed, 9 Feb 2022 15:51:03 +0100 Subject: [PATCH 03/53] More reviews, added more // vim: set syntax=asciidoc: --- docs/src/hal/basic-hal.adoc | 2 + docs/src/hal/basic-hal_es.adoc | 3 +- docs/src/hal/basic_hal_fr.adoc | 5 +- docs/src/hal/canonical-devices.adoc | 1 + docs/src/hal/canonical-devices_es.adoc | 3 +- docs/src/hal/comp.adoc | 21 +- docs/src/hal/comp_es.adoc | 199 +++++++++--------- docs/src/hal/comp_fr.adoc | 276 ++++++++++++------------- docs/src/hal/components.adoc | 6 +- docs/src/hal/components_es.adoc | 3 +- docs/src/hal/components_fr.adoc | 4 +- docs/src/hal/general-ref.adoc | 2 + docs/src/hal/general-ref_es.adoc | 19 +- docs/src/hal/general_ref_fr.adoc | 8 +- docs/src/hal/hal-examples.adoc | 2 + docs/src/hal/hal-examples_es.adoc | 5 +- docs/src/hal/hal-examples_fr.adoc | 10 +- docs/src/hal/halmodule.adoc | 16 +- docs/src/hal/halmodule_es.adoc | 21 +- docs/src/hal/halmodule_fr.adoc | 2 +- docs/src/hal/halshow.adoc | 2 + 21 files changed, 305 insertions(+), 305 deletions(-) diff --git a/docs/src/hal/basic-hal.adoc b/docs/src/hal/basic-hal.adoc index f347c608360..0bdc2472db0 100644 --- a/docs/src/hal/basic-hal.adoc +++ b/docs/src/hal/basic-hal.adoc @@ -514,3 +514,5 @@ 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. + +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/basic-hal_es.adoc b/docs/src/hal/basic-hal_es.adoc index c445ddcce3e..1ff3243c972 100644 --- a/docs/src/hal/basic-hal_es.adoc +++ b/docs/src/hal/basic-hal_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:basic-hal-reference]] - = Referencia básica HAL Este documento proporciona una referencia de los conceptos básicos de HAL. @@ -551,3 +550,5 @@ Owner Type Dir Value Name 10 s32 I/O 0 wsum.0.offset 10 s32 Out 5 wsum.0.sum ----------------------------------------------------------- + +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/basic_hal_fr.adoc b/docs/src/hal/basic_hal_fr.adoc index 9b705fc70e4..6c25f5575ea 100644 --- a/docs/src/hal/basic_hal_fr.adoc +++ b/docs/src/hal/basic_hal_fr.adoc @@ -4,7 +4,6 @@ = Commandes et composants de base [[sec:Commandes-de-HAL]] - == Commandes de Hal Des informations plus détaillées peuvent être trouvées dans la man @@ -16,7 +15,6 @@ cliquer dans l'arborescence sur les pins qui doivent être visualisées dans la fenêtre watch. .Fenêtre de configuration de HAL - image::images/HAL_Configuration.png[alt="Fenêtre de configuration de HAL"] === loadrt @@ -121,7 +119,6 @@ Le même 'signal-name' peut être utilisé dans de multiples commandes net pour connecter des pins additionnelles, tant que les règles précédentes sont observées. .Direction du signal[[cap:Signal-Direction]] - image::images/signal-direction.png[align="left", alt="Direction du signal"] Voici un exemple qui montre le signal xStep avec la source qui est stepgen.0.out @@ -510,4 +507,4 @@ Owner Type Dir Value Name 10 s32 Out 5 wsum.0.sum ---- - +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/canonical-devices.adoc b/docs/src/hal/canonical-devices.adoc index ae858ddde42..0305fb6baf6 100644 --- a/docs/src/hal/canonical-devices.adoc +++ b/docs/src/hal/canonical-devices.adoc @@ -118,3 +118,4 @@ 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. +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/canonical-devices_es.adoc b/docs/src/hal/canonical-devices_es.adoc index e29850669ba..d18bc34483c 100644 --- a/docs/src/hal/canonical-devices_es.adoc +++ b/docs/src/hal/canonical-devices_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:canonical-device-interfaces]] - = Interfaces de dispositivos canónicos == Introducción @@ -119,4 +118,4 @@ A/D bipolar de 12 bits puede necesitar escribir 0x1FF (escala intermedia) para o voltios desde el pin de hardware. Si el pin enable es verdadero, lee scale, offset y value y pone a la salida del ADC (*scale* * *value*) + *offset*. - +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/comp.adoc b/docs/src/hal/comp.adoc index 351f0750641..326f0242c8f 100644 --- a/docs/src/hal/comp.adoc +++ b/docs/src/hal/comp.adoc @@ -342,11 +342,11 @@ The result of using any other option is undefined. module's license is GPL v2 or later, license "GPL"; // indicates GPL v2 or later -+ + For additional information on the meaning of MODULE_LICENSE() and additional license identifiers, see ''. or the manual page 'rtapi_module_param(3)' -+ + This declaration is required. * 'AUTHOR' - Specify the author of the module for the documentation. @@ -360,23 +360,23 @@ This declaration is required. * 'variable CTYPE STARREDNAME = DEFAULT;' * 'variable CTYPE STARREDNAME[SIZE] = DEFAULT;' -+ + Declare a per-instance variable 'STARREDNAME' of type 'CTYPE', optionally as an array of 'SIZE' items, and optionally with a default value 'DEFAULT'. Items with no 'DEFAULT' are initialized to all-bits-zero. 'CTYPE' is a simple one-word C type, such as 'float', 'u32', 's32', int, etc. Access to array variables uses square brackets. -+ + If a variable is to be of a pointer type, there may not be any space between the "*" and the variable name. Therefore, the following is acceptable: -+ + ---- variable int *example; ---- -+ + but the following are not: -+ + ---- variable int* badexample; variable int * badexample; @@ -445,7 +445,7 @@ of 'halcompile' to the next. array, it is only legal to refer to items up to its 'condsize'. + When the item is a conditional item, it is only legal to refer to it - when its 'condition' evaluated to a nonzero value. +when its 'condition' evaluated to a nonzero value. * 'variable_name' - For each variable 'variable_name' there is a macro which allows the name to be used on its own to refer @@ -504,7 +504,6 @@ loadrt logic names=and4,or3,nand5, personality=0x104,0x203,0x805 ---- [NOTE] - 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 @@ -533,7 +532,6 @@ module directory: ---- [NOTE] - 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. @@ -788,6 +786,7 @@ A typical load line for this component might be ---- loadrt logic count=3 personality=0x102,0x305,0x503 ---- + which creates the following pins: - A 2-input AND gate: logic.0.and, logic.0.in-00, logic.0.in-01 @@ -853,3 +852,5 @@ A brief summary of halcompile usage is given by: ---- $ halcompile --help ---- + +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/comp_es.adoc b/docs/src/hal/comp_es.adoc index cb56e8bb803..fb2c60b4f75 100644 --- a/docs/src/hal/comp_es.adoc +++ b/docs/src/hal/comp_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:hal-component-generator]] - = El Generador de Componentes HAL == Introducción @@ -127,15 +126,15 @@ alternativas. Las palabras en 'MAYUSCULAS' indican texto variable, de la siguien * 'NAME' - Un identificador C estándar * 'STARREDNAME' - Un identificador C con cero o más * antes de él. Esta sintaxis puede ser utilizada - para declarar variables de instancia que son punteros. Tenga en cuenta que debido a la - gramática, es posible que no haya espacios en blanco entre el * y el nombre de la variable. + para declarar variables de instancia que son punteros. Tenga en cuenta que debido a la + gramática, es posible que no haya espacios en blanco entre el * y el nombre de la variable. * 'HALNAME' - Un identificador extendido. - Cuando se usa para crear un identificador HAL, cualquier guión bajo se reemplaza - con guiones, y cualquier guión o punto al final se elimina, por lo que - "this_name_" se convertirá en "this-name", y si el nombre es "_", - también se elimina un punto al final, de modo que "function _" da - un nombre de función HAL como "component." en lugar de "component.." + Cuando se usa para crear un identificador HAL, cualquier guión bajo se reemplaza + con guiones, y cualquier guión o punto al final se elimina, por lo que + "this_name_" se convertirá en "this-name", y si el nombre es "_", + también se elimina un punto al final, de modo que "function _" da + un nombre de función HAL como "component." en lugar de "component.." + Si está presente, el prefijo 'hal_' se elimina del comienzo del nombre del componente al crear pines, parámetros y funciones. @@ -167,18 +166,18 @@ colisionarian con nombres reservados o palabras clave (por ejemplo, 'min') puede |======================================== -- * 'if CONDITION' - Una expresión que involucra la variable 'personality' , que no es cero - cuando se debe crear el pin o parámetro + cuando se debe crear el pin o parámetro * 'SIZE' - Un número que da el tamaño de una matriz. Los elementos de la matriz están numerados - de 0 a ('SIZE'-1). + de 0 a ('SIZE'-1). * 'MAXSIZE : CONDSIZE' - Un número que da el tamaño máximo de la matriz seguido de una - expresión que implica la variable 'personality' y que siempre se - evalúa a menos de 'MAXSIZE'. Cuando la matriz se crea, su tamaño - será 'CONDSIZE'. + expresión que implica la variable 'personality' y que siempre se + evalúa a menos de 'MAXSIZE'. Cuando la matriz se crea, su tamaño + será 'CONDSIZE'. * 'DOC' - Una cadena que documenta el elemento. La cadena puede ser "double - quoted" de estilo C, como: + quoted" de estilo C, como: + ---- "Selecciona el flanco deseado: VERDADERO significa descendente, FALSO significa ascendente" @@ -215,108 +214,107 @@ r"\fIexample\fB" ---- * 'TYPE' - Uno de los tipos HAL; 'bit', 'signed', 'unsigned' o 'float'. Los viejos - nombres 's32' y 'u32' también se pueden usar, pero se prefiere 'signed' y 'unsigned'. + nombres 's32' y 'u32' también se pueden usar, pero se prefiere 'signed' y 'unsigned'. * 'PINDIRECTION' - Uno de los siguientes; 'in', 'out' o 'io'. Un componente establece un valor - para un pin 'out', lee un valor de un pin 'in', y puede leer o - establecer el valor de un pin 'io'. + para un pin 'out', lee un valor de un pin 'in', y puede leer o + establecer el valor de un pin 'io'. * 'PARAMDIRECTION' - Uno de los siguientes: 'r' o 'rw'. Un componente establece un valor para un - parámetro 'r', y puede leer o establecer el valor de un parámetro 'rw'. + parámetro 'r', y puede leer o establecer el valor de un parámetro 'rw'. * 'STARTVALUE': especifica el valor inicial de un pin o parámetro. Si no se - especifica, el valor predeterminado es '0' o 'FALSE', según el tipo de - objeto. + especifica, el valor predeterminado es '0' o 'FALSE', según el tipo de + objeto. * 'HEADERFILE' - El nombre de un archivo de encabezado, ya sea entre comillas dobles - (`include "myfile.h";`) o en corchetes angulares (`include ;`). - El archivo de encabezado se incluirá (usando - #include) en la parte superior del archivo, antes de las declaraciones de pines y parámetros. + (`include "myfile.h";`) o en corchetes angulares (`include ;`). + El archivo de encabezado se incluirá (usando + #include) en la parte superior del archivo, antes de las declaraciones de pines y parámetros. - === Funciones HAL * 'fp' - Indica que la función realiza cálculos de coma flotante. * 'nofp': indica que solo realiza cálculos enteros. Si no se especifica ninguno, - se asume 'fp'. Ni 'halcompile' ni gcc pueden detectar el uso de - cálculos de punto flotante en funciones etiquetadas como 'nofp', pero el uso de - tales operaciones dan como resultado un comportamiento indefinido. + se asume 'fp'. Ni 'halcompile' ni gcc pueden detectar el uso de + cálculos de punto flotante en funciones etiquetadas como 'nofp', pero el uso de + tales operaciones dan como resultado un comportamiento indefinido. === Opciones Las opciones definidas actualmente son: * 'option singleton yes' - (valor predeterminado: no) - No crear el parámetro de módulo 'count', y siempre crear una sola instancia. - Con 'singleton', los elementos se denominan 'nombre-componente.nombre-elemento' - y sin 'singleton', los elementos, para las instancias numeradas, se nombran - 'nombre-component..nombre-elemento'. + No crear el parámetro de módulo 'count', y siempre crear una sola instancia. + Con 'singleton', los elementos se denominan 'nombre-componente.nombre-elemento' + y sin 'singleton', los elementos, para las instancias numeradas, se nombran + 'nombre-component..nombre-elemento'. * 'option default_count number' - (valor predeterminado: 1) - Normalmente, el parámetro de módulo 'count' se establece de manera predeterminada en 1. Si se especifica, - 'count' cambiará a este valor por defecto. + Normalmente, el parámetro de módulo 'count' se establece de manera predeterminada en 1. Si se especifica, + 'count' cambiará a este valor por defecto. * 'option count_function yes' - (valor predeterminado: no) - Normalmente, el número de instancias a crear se especifica en el - parámetro del módulo 'count'; si se especifica 'count_function', se usa en su lugar - el valor devuelto por la función 'int get_count(void)' , - y el parámetro del módulo 'count' no está definido. + Normalmente, el número de instancias a crear se especifica en el + parámetro del módulo 'count'; si se especifica 'count_function', se usa en su lugar + el valor devuelto por la función 'int get_count(void)' , + y el parámetro del módulo 'count' no está definido. * 'opción rtapi_app no' - (predeterminado: yes) - Normalmente, las funciones 'rtapi_app_main()' y 'rtapi_app_exit()' son - definidas automáticamente. Con 'option rtapi_app no', no lo son, y - debe ser previstas en el código C. Use los siguientes prototipos: - + - `int rtapi_app_main(void);` - + - `void rtapi_app_exit(void);` - + + Normalmente, las funciones 'rtapi_app_main()' y 'rtapi_app_exit()' son + definidas automáticamente. Con 'option rtapi_app no', no lo son, y + debe ser previstas en el código C. Use los siguientes prototipos: + + + `int rtapi_app_main(void);` + + + `void rtapi_app_exit(void);` + + Al implementar su propio 'rtapi_app_main()', llame a la función 'int export(char *prefix, long extra_arg)' para registrar los pines, parámetros y funciones para 'prefix'. * 'option data TYPE' - (predeterminado: ninguno) *obsoleto*. - Si se especifica, cada instancia del componente tendrá asociado un - bloque de datos de tipo 'TYPE' (que puede ser un tipo simple como 'float' o el - nombre de un tipo creado con 'typedef'). - En los componentes nuevos, se debe usar 'variable' en su lugar. + Si se especifica, cada instancia del componente tendrá asociado un + bloque de datos de tipo 'TYPE' (que puede ser un tipo simple como 'float' o el + nombre de un tipo creado con 'typedef'). + En los componentes nuevos, se debe usar 'variable' en su lugar. * 'option extra_setup yes' - (valor predeterminado: no) - Si se especifica, llama a la función definida por 'EXTRA_SETUP' en cada - instancia. Si usa 'rtapi_app_main' definido automáticamente, - 'extra_arg' es el número de esta instancia. + Si se especifica, llama a la función definida por 'EXTRA_SETUP' en cada + instancia. Si usa 'rtapi_app_main' definido automáticamente, + 'extra_arg' es el número de esta instancia. * 'option extra_cleanup yes' - (valor predeterminado: no) - Si se especifica, llama a la función definida por 'EXTRA_CLEANUP' desde - 'rtapi_app_exit' definido automáticamente, o si se detecta un error - en 'rtapi_app_main' definido automáticamente. + Si se especifica, llama a la función definida por 'EXTRA_CLEANUP' desde + 'rtapi_app_exit' definido automáticamente, o si se detecta un error + en 'rtapi_app_main' definido automáticamente. * 'option userspace yes' - (valor predeterminado: no) - Si se especifica, este archivo describe un componente de espacio de usuario (es decir, no en tiempo real), en lugar de - uno regular (es decir, en tiempo real). Un componente de espacio de usuario puede no tener funciones - definidas por la directiva 'function'. En cambio, después de que todas - las instancias se construyan, se llama a la función C 'void user_mainloop(void);'. - Cuando esta función retorna, el componente sale. - Normalmente, 'user_mainloop()' usará 'FOR_ALL_INSTS()' para - realizar la acción de actualización para cada instancia, luego se detiene - un tiempo corto. Otra acción común en 'user_mainloop()' puede - ser llamar al bucle del controlador de eventos de un toolkit de GUI. + Si se especifica, este archivo describe un componente de espacio de usuario (es decir, no en tiempo real), en lugar de + uno regular (es decir, en tiempo real). Un componente de espacio de usuario puede no tener funciones + definidas por la directiva 'function'. En cambio, después de que todas + las instancias se construyan, se llama a la función C 'void user_mainloop(void);'. + Cuando esta función retorna, el componente sale. + Normalmente, 'user_mainloop()' usará 'FOR_ALL_INSTS()' para + realizar la acción de actualización para cada instancia, luego se detiene + un tiempo corto. Otra acción común en 'user_mainloop()' puede + ser llamar al bucle del controlador de eventos de un toolkit de GUI. * 'option userinit yes' - (valor predeterminado: no) - Esta opción se ignora si la opción 'userspace' (ver arriba) está configurada en - 'no'. Si se especifica 'userinit', la función 'userinit(argc, argv)' - se llama antes que 'rtapi_app_main()' (y por lo tanto antes de la llamada a - 'hal_init()'). Esta función puede procesar los argumentos de la línea de comando o - tomar otras acciones. Su tipo de retorno es 'void'; puede llamar a 'exit()' - si desea terminar en lugar de crear un componente HAL (por - ejemplo, porque los argumentos de línea de comando no eran válidos). + Esta opción se ignora si la opción 'userspace' (ver arriba) está configurada en + 'no'. Si se especifica 'userinit', la función 'userinit(argc, argv)' + se llama antes que 'rtapi_app_main()' (y por lo tanto antes de la llamada a + 'hal_init()'). Esta función puede procesar los argumentos de la línea de comando o + tomar otras acciones. Su tipo de retorno es 'void'; puede llamar a 'exit()' + si desea terminar en lugar de crear un componente HAL (por + ejemplo, porque los argumentos de línea de comando no eran válidos). * 'option extra_link_args "..."' - (predeterminado: "") - Esta opción se ignora si la opción 'userspace' (ver arriba) está configurada en - 'no'. Al vincular un componente de espacio de usuario, se insertan los argumentos dados - en la línea de enlace. Tenga en cuenta que debido a que la compilación tiene lugar en un - directorio temporal, "-L" se refiere al directorio temporal y no al directorio donde - el archivo fuente .comp reside. + Esta opción se ignora si la opción 'userspace' (ver arriba) está configurada en + 'no'. Al vincular un componente de espacio de usuario, se insertan los argumentos dados + en la línea de enlace. Tenga en cuenta que debido a que la compilación tiene lugar en un + directorio temporal, "-L" se refiere al directorio temporal y no al directorio donde + el archivo fuente .comp reside. Si el VALOR de una opción no está especificado, entonces es equivalente a @@ -409,45 +407,45 @@ detalles de `struct __comp_state` y estas macros pueden cambiar de una versión de 'halcompile' a la siguiente. * 'FUNCTION(name)' - Use esta macro para comenzar la definición de una función en tiempo real que - fue declarada previamente con 'function NAME'. La función incluye un - parámetro 'period' que es el número entero de nanosegundos - entre llamadas a la función. + fue declarada previamente con 'function NAME'. La función incluye un + parámetro 'period' que es el número entero de nanosegundos + entre llamadas a la función. * 'EXTRA_SETUP()' - Use esta macro para comenzar la definición de la función llamada a - realizar una configuración adicional de esta instancia. Devuelve un 'errno' negativo de Unix - para indicar fallo (por ejemplo, 'return -EBUSY' al no reservar - un puerto de E/S) o 0 para indicar éxito. + realizar una configuración adicional de esta instancia. Devuelve un 'errno' negativo de Unix + para indicar fallo (por ejemplo, 'return -EBUSY' al no reservar + un puerto de E/S) o 0 para indicar éxito. * 'EXTRA_CLEANUP()' - Use esta macro para comenzar la definición de la función destinada a - realizar una configuracion adicional del componente. Tenga en cuenta que esta función debe - limpiar todas las instancias del componente, no solo una. Las macros "pin_name", - "parameter_name" y "data" no se pueden usar aquí. + realizar una configuracion adicional del componente. Tenga en cuenta que esta función debe + limpiar todas las instancias del componente, no solo una. Las macros "pin_name", + "parameter_name" y "data" no se pueden usar aquí. * 'pin_name' o 'parameter_name' - Para cada pin 'pin_name' o parametro 'parameter_name' - hay una macro que permite que el nombre se use solo para referirse - al pin o parámetro. - Cuando 'pin_name' o 'parameter_name' es una matriz, la macro es de la - forma 'pin_name(idx)' o 'param_name(idx)' donde 'idx' es el índice - en la matriz. Cuando la matriz es de tamaño variable, - solo es legal referirse a elementos hasta su 'condsize'. + hay una macro que permite que el nombre se use solo para referirse + al pin o parámetro. + Cuando 'pin_name' o 'parameter_name' es una matriz, la macro es de la + forma 'pin_name(idx)' o 'param_name(idx)' donde 'idx' es el índice + en la matriz. Cuando la matriz es de tamaño variable, + solo es legal referirse a elementos hasta su 'condsize'. + Cuando el elemento es condicional, solo es legal referirse a él - cuando su 'condition' se evaluó a un valor distinto de cero. +cuando su 'condition' se evaluó a un valor distinto de cero. * 'variable_name' - Para cada variable 'variable_name' hay una macro que permite - usar el nombre que se utiliza para referirse - a la variable. Cuando 'variable_name' es una matriz, se usa el subíndice - estilo C normal: 'variable_name[idx]' + usar el nombre que se utiliza para referirse + a la variable. Cuando 'variable_name' es una matriz, se usa el subíndice + estilo C normal: 'variable_name[idx]' * 'data' - Si se especifica "option data", esta macro permite el acceso a los - datos de la instancia. + datos de la instancia. * 'fperiod': el número de segundos en, coma flotante, entre las llamadas a esta funcion de tiempo real. * 'FOR_ALL_INSTS() {...}' - Para componentes de espacio de usuario. Esta macro - itera sobre todas las instancias definidas. Dentro del - cuerpo del lazo, las macros 'pin_name', 'parameter_name' y 'data' funcionan como lo harian - en funciones en tiempo real. + itera sobre todas las instancias definidas. Dentro del + cuerpo del lazo, las macros 'pin_name', 'parameter_name' y 'data' funcionan como lo harian + en funciones en tiempo real. == Componentes con una sola función @@ -486,7 +484,6 @@ loadrt logic names=and4,or3,nand5, personality=0x104,0x203,0x805 ---- [NOTE] - Si una línea loadrt especifica más instancias que personalidades, a las instancias con personalidades no especificadas se les asigna una personalidad de 0. Si el número solicitado de instancias excede el número de personalidades permitidas, las personalidades se asignan mediante indexación módulo @@ -829,4 +826,4 @@ Un breve resumen del uso de halcompile está dado por: $ halcompile --help ---- - +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/comp_fr.adoc b/docs/src/hal/comp_fr.adoc index 72339868a7a..abad03b1268 100644 --- a/docs/src/hal/comp_fr.adoc +++ b/docs/src/hal/comp_fr.adoc @@ -1,9 +1,8 @@ :lang: fr :toc: -= comp: outil pour créer les modules HAL - [[cha:comp-hal-component-generator]] += comp: outil pour créer les modules HAL == Introduction @@ -49,20 +48,20 @@ sudo apt-get install linuxcnc-dev == Définitions * 'component' - Un composant est un simple module temps réel, qui se charge avec - 'halcmd loadrt'. Un fichier '.comp' spécifie un seul composant. + 'halcmd loadrt'. Un fichier '.comp' spécifie un seul composant. * 'instance' - Un composant peut avoir plusieurs instances ou aucune. Chaque - instance d'un composant est créée égale (elles ont toutes les mêmes pins, les - mêmes paramètres, les mêmes fonctions et les mêmes données) mais elle - se comporte de manière différente quand leurs pins, leurs paramètres et - leur données ont des valeurs différentes. + instance d'un composant est créée égale (elles ont toutes les mêmes pins, les + mêmes paramètres, les mêmes fonctions et les mêmes données) mais elle + se comporte de manière différente quand leurs pins, leurs paramètres et + leur données ont des valeurs différentes. * 'singleton' - Il est possible pour un composant d'être un 'singleton' - (composant dont il n'existe qu'une seule instance), dans ce cas, exactement - une seule instance est créée. Il est rarement logique d'écrire un composant - 'singleton' , à moins qu'il n'y ait qu'un seul objet de ce type dans le - système (par exemple, un composant ayant pour but de fournir une pin avec le - temps Unix courant, ou un pilote matériel pour le haut parleur interne du PC) + (composant dont il n'existe qu'une seule instance), dans ce cas, exactement + une seule instance est créée. Il est rarement logique d'écrire un composant + 'singleton' , à moins qu'il n'y ait qu'un seul objet de ce type dans le + système (par exemple, un composant ayant pour but de fournir une pin avec le + temps Unix courant, ou un pilote matériel pour le haut parleur interne du PC) == Création d'instance @@ -109,16 +108,16 @@ texte, comme ci-dessous: * 'NAME' - Un identifiant C standard. * 'STARREDNAME' - Un identifiant C, précédé ou non d'une *. - Cette syntaxe est utilisée pour déclarer les variables qui sont des - pointeurs. Noter qu'à cause de la grammaire, il ne doit pas y avoir d'espace - entre * et le nom de la variable. + Cette syntaxe est utilisée pour déclarer les variables qui sont des + pointeurs. Noter qu'à cause de la grammaire, il ne doit pas y avoir d'espace + entre * et le nom de la variable. * 'HALNAME' - Un identifiant étendu. Lorsqu'ils sont utilisés pour créer un - identifiant de HAL, tous les caractères soulignés sont remplacés par des - tirets, tous les points et les virgules de fin, sont supprimés, ainsi - *ce_nom_* est remplacé par *ce-nom*, si le nom est "_", alors le point - final est enlevé aussi, ainsi "function_" donne un nom de fonction HAL tel - que "component." au lieu de "component.." + identifiant de HAL, tous les caractères soulignés sont remplacés par des + tirets, tous les points et les virgules de fin, sont supprimés, ainsi + *ce_nom_* est remplacé par *ce-nom*, si le nom est "_", alors le point + final est enlevé aussi, ainsi "function_" donne un nom de fonction HAL tel + que "component." au lieu de "component.." S'il est présent, le préfixe 'hal_' est enlevé du début d'un nom de composant lors de la création des pins, des paramètres et des fonctions. @@ -151,18 +150,18 @@ exemple: 'min'), puissent être utilisés. |======================================== * 'if CONDITION' - Une expression impliquant la 'personnalité' d'une variable - non nulle quand la variable ou le paramètre doit être créé. + non nulle quand la variable ou le paramètre doit être créé. * 'SIZE' - Un nombre donnant la taille d'un tableau. Les items des tableaux sont - numérotés de 0 à 'SIZE'-1. + numérotés de 0 à 'SIZE'-1. * 'MAXSIZE : CONDSIZE' - Un nombre donnant la taille maximum d'un tableau, suivi - d'une expression impliquant la 'personnalité' d'une variable et qui aura - toujours une valeur inférieure à 'MAXSIZE'. Quand le tableau est créé - sa taille est égale à 'CONDSIZE'. + d'une expression impliquant la 'personnalité' d'une variable et qui aura + toujours une valeur inférieure à 'MAXSIZE'. Quand le tableau est créé + sa taille est égale à 'CONDSIZE'. * 'DOC' - Une chaine qui documente l'item. La chaine doit être au format C, - entre guillemets, comme: + entre guillemets, comme: + ---- "Sélectionnez le front désiré: TRUE pour descendant, FALSE pour montant" @@ -180,40 +179,40 @@ better.""" ---- + La chaine de documentation est en format "groff -man". Pour plus - d'informations sur ce format de markup, voyez 'groff_man(7)' . Souvenez - vous que comp interprète backslash comme Echap dans les - chaines, ainsi par exemple pour passer le mot 'example' en font - italique, écrivez: +d'informations sur ce format de markup, voyez 'groff_man(7)' . Souvenez +vous que comp interprète backslash comme Echap dans les +chaines, ainsi par exemple pour passer le mot 'example' en font +italique, écrivez: + ---- \\fIexample\\fB ---- * 'TYPE' - Un des types de HAL: 'bit', 'signed' (signé), 'unsigned' (non signé) - ou 'float' (flottant). Les anciens noms 's32' et 'u32' peuvent encore - être utilisés, mais 'signed' et 'unsigned' sont préférables. + ou 'float' (flottant). Les anciens noms 's32' et 'u32' peuvent encore + être utilisés, mais 'signed' et 'unsigned' sont préférables. * 'PINDIRECTION' - Une des ces directions: 'in', 'out', ou 'io' . Le composant - pourra positionner la valeur d'une pin de sortie, il - pourra lire la valeur sur une pin d'entrée et il pourra lire ou - positionner la valeur d'une pin 'io'. + pourra positionner la valeur d'une pin de sortie, il + pourra lire la valeur sur une pin d'entrée et il pourra lire ou + positionner la valeur d'une pin 'io'. * 'PARAMDIRECTION' - Une des valeurs suivantes: 'r' ou 'rw'. Le composant pourra - positionner la valeur d'un paramètre 'r' et il pourra positionner ou - lire la valeur d'un paramètre rw. + positionner la valeur d'un paramètre 'r' et il pourra positionner ou + lire la valeur d'un paramètre rw. * 'STARTVALUE' - Spécifie la valeur initiale d'une pin ou d'un paramètre. Si il - n'est pas spécifié, alors la valeur par défaut est '0' ou 'FALSE', selon le - type de l'item. + n'est pas spécifié, alors la valeur par défaut est '0' ou 'FALSE', selon le + type de l'item. === Fonctions HAL * 'fp' - Indique que la fonction effectuera ses calculs en virgule flottante. * 'nofp' - Indique que la fonction effectuera ses calculs sur des entiers. Si il - n'est pas spécifié, 'fp' est utilisé. Ni comp ni gcc ne peuvent - détecter l'utilisation de - calculs en virgule flottante dans les fonctions marquées 'nofp'. + n'est pas spécifié, 'fp' est utilisé. Ni comp ni gcc ne peuvent + détecter l'utilisation de + calculs en virgule flottante dans les fonctions marquées 'nofp'. === Options @@ -221,86 +220,86 @@ Selon le nom de l'option OPT, les valeurs VALUE varient. Les options actuellement définies sont les suivantes: * 'option singleton yes' - (défaut: no) - Ne crée pas le paramètre 'count' de module et crée toujours une seule - instance. Avec 'singleton', les items sont nommés - 'composant-name.item-name' et sans 'singleton', les items des - différentes instances sont nommés 'composant-name..item-name'. + Ne crée pas le paramètre 'count' de module et crée toujours une seule + instance. Avec 'singleton', les items sont nommés + 'composant-name.item-name' et sans 'singleton', les items des + différentes instances sont nommés 'composant-name..item-name'. * 'option default_count number' - (défaut: 1) - Normalement, le paramètre 'count' par défaut est 0. Si spécifié, - 'count' remplace la valeur par défaut. + Normalement, le paramètre 'count' par défaut est 0. Si spécifié, + 'count' remplace la valeur par défaut. * 'option count_function yes' - (défaut: no) - Normalement, le numéro des instances à créer est specifié dans le - paramètre 'count' du module, si 'count_function' est spécifié, la - valeur retournée par la fonction 'int get_count(void)' est - utilisée à la place de la valeur par défaut et le paramètre 'count' - du module n'est pas défini. + Normalement, le numéro des instances à créer est specifié dans le + paramètre 'count' du module, si 'count_function' est spécifié, la + valeur retournée par la fonction 'int get_count(void)' est + utilisée à la place de la valeur par défaut et le paramètre 'count' + du module n'est pas défini. * 'option rtapi_app no' - (défaut: yes) - Normalement, les fonctions 'rtapi_app_main' et 'rtapi_app_exit' sont - définies automatiquement. Avec 'option rtapi_app no', elles ne le - seront pas et doivent être fournies dans le code C. - Quand vous implémentez votre propre 'rtapi_app_main', appellez la - fonction 'int export(char *prefix, long extra_arg)' pour enregistrer - les pins, paramètres et fonctions pour préfixer. + Normalement, les fonctions 'rtapi_app_main' et 'rtapi_app_exit' sont + définies automatiquement. Avec 'option rtapi_app no', elles ne le + seront pas et doivent être fournies dans le code C. + Quand vous implémentez votre propre 'rtapi_app_main', appellez la + fonction 'int export(char *prefix, long extra_arg)' pour enregistrer + les pins, paramètres et fonctions pour préfixer. * 'option data TYPE' - (défaut: none) *obsolète* - If specified, each instance of the component will have an associated - data block of 'TYPE' (which can be a simple type like 'float' or the - name of a type created with 'typedef'). - Dans les nouveaux 'components', 'variable' doit être utilisé en - remplacement. + If specified, each instance of the component will have an associated + data block of 'TYPE' (which can be a simple type like 'float' or the + name of a type created with 'typedef'). + Dans les nouveaux 'components', 'variable' doit être utilisé en + remplacement. * 'option extra_setup yes' - (défaut: no) - Si spécifié, appelle la fonction définie par 'EXTRA_SETUP' pour chaque - instance. Dans le cas de la 'rtapi_app_main' automatiquement définie, - 'extra_arg' est le numéro de cette instance. + Si spécifié, appelle la fonction définie par 'EXTRA_SETUP' pour chaque + instance. Dans le cas de la 'rtapi_app_main' automatiquement définie, + 'extra_arg' est le numéro de cette instance. * 'option extra_cleanup yes' - (défaut: no) - Si spécifié, appelle la fonction définie par 'EXTRA_CLEANUP' - depuis la fonction définie automatiquement 'rtapi_app_exit', - ou une erreur est détectée dans la fonction automatiquement - définie 'rtapi_app_main'. + Si spécifié, appelle la fonction définie par 'EXTRA_CLEANUP' + depuis la fonction définie automatiquement 'rtapi_app_exit', + ou une erreur est détectée dans la fonction automatiquement + définie 'rtapi_app_main'. * 'option userspace yes' - (défaut: no) - Si spécifié, ce fichier décrit un composant d'espace utilisateur, - plutôt que le réel. Un composant d'espace utilisateur peut ne pas avoir - de fonction définie par la directive de fonction. Au lieu de cela, - après que toutes les instances soient construites, la fonction C - 'user_mainloop()' est appelée. Dès la fin de cette fonction, le - composant se termine. - En règle générale, 'user_mainloop()' va utiliser 'FOR_ALL_INSTS()' - pour effectuer la mise à jour pour chaque action, puis attendre un - court instant. Une autre action commune dans 'user_mainloop()' peut - être d'appeler le gestionnaire de boucles d'événements d'une - interface graphique. + Si spécifié, ce fichier décrit un composant d'espace utilisateur, + plutôt que le réel. Un composant d'espace utilisateur peut ne pas avoir + de fonction définie par la directive de fonction. Au lieu de cela, + après que toutes les instances soient construites, la fonction C + 'user_mainloop()' est appelée. Dès la fin de cette fonction, le + composant se termine. + En règle générale, 'user_mainloop()' va utiliser 'FOR_ALL_INSTS()' + pour effectuer la mise à jour pour chaque action, puis attendre un + court instant. Une autre action commune dans 'user_mainloop()' peut + être d'appeler le gestionnaire de boucles d'événements d'une + interface graphique. * 'option userinit yes' - (défaut: no) - Si spécifiée, la fonction 'userinit(argc,argv)' est appelée avant - 'rtapi_app_main()' (et cela avant l'appel de 'hal_init()' ). Cette - fonction peut traiter les arguments de la ligne de commande - ou exécuter d'autres actions. Son type de retour est 'void'; elle peut - appeler 'exit()' et si elle le veut, se terminer sans créer de - composant HAL (par exemple, parce que les arguments de la ligne de - commande sont invalides). + Si spécifiée, la fonction 'userinit(argc,argv)' est appelée avant + 'rtapi_app_main()' (et cela avant l'appel de 'hal_init()' ). Cette + fonction peut traiter les arguments de la ligne de commande + ou exécuter d'autres actions. Son type de retour est 'void'; elle peut + appeler 'exit()' et si elle le veut, se terminer sans créer de + composant HAL (par exemple, parce que les arguments de la ligne de + commande sont invalides). - Si aucune option VALUE n'est spécifiée, alors c'est équivalent à - spécifier la valeur '… yes' . Le résultat consécutif à l'assignation - d'une valeur inappropriée à - une option est indéterminé. Le résultat consécutif à n'utiliser aucune - autre option est indéfini. + Si aucune option VALUE n'est spécifiée, alors c'est équivalent à + spécifier la valeur '… yes' . Le résultat consécutif à l'assignation + d'une valeur inappropriée à + une option est indéterminé. Le résultat consécutif à n'utiliser aucune + autre option est indéfini. === Licence et auteur * 'LICENSE' - Spécifie la license du module, pour la documentation et pour le - module déclaré dans MODULE_LICENSE(). Par exemple, pour spécifier que la - licence des modules est la GPL v2 ou suivantes, - license "GPL"; // indique GPL v2 ou suivantes + module déclaré dans MODULE_LICENSE(). Par exemple, pour spécifier que la + licence des modules est la GPL v2 ou suivantes, + license "GPL"; // indique GPL v2 ou suivantes + - Pour d'autres informations sur la signification du MODULE_LICENSE() et les - identificateurs de license additionnels, voir ''. ou la page - 'rtapi_module_param(3)' du manuel. + Pour d'autres informations sur la signification du MODULE_LICENSE() et les + identificateurs de license additionnels, voir ''. ou la page + 'rtapi_module_param(3)' du manuel. * 'AUTHOR' - Spécifie l'auteur du module, pour la documentation @@ -313,12 +312,12 @@ actuellement définies sont les suivantes: * 'variable CTYPE STARREDNAME = DEFAULT;' * 'variable CTYPE STARREDNAME[SIZE] = DEFAULT;' - Déclare la variable 'par-instance' 'STARREDNAME' de type 'CTYPE', - optionnellement comme un tableau de 'SIZE' items et optionnellement - avec une valeur 'DEFAULT'. Les items sans 'DEFAULT' sont initialisés - 'all-bits-zero'. 'CTYPE' est un simple mot de type C, comme 'float', - 'u32', 's32', etc. - Les variables d'un tableau sont mises entre crochets. + Déclare la variable 'par-instance' 'STARREDNAME' de type 'CTYPE', + optionnellement comme un tableau de 'SIZE' items et optionnellement + avec une valeur 'DEFAULT'. Les items sans 'DEFAULT' sont initialisés + 'all-bits-zero'. 'CTYPE' est un simple mot de type C, comme 'float', + 'u32', 's32', etc. + Les variables d'un tableau sont mises entre crochets. + Si une variable doit être de type pointeur, il ne doit y avoir aucun espace entre l'étoile "*" et le nom de la variable. @@ -375,52 +374,52 @@ référence en utilisant les macros ci-dessous. Certains détails de une autre. * 'FUNCTION(name)' - Cette macro s'utilise au début de la définition d'une - fonction temps réel qui aura été précédemment déclarée avec 'function NAME'. - function inclus un paramètre 'period' qui est le nombre entier de - nanosecondes entre les appels à la - fonction. + fonction temps réel qui aura été précédemment déclarée avec 'function NAME'. + function inclus un paramètre 'period' qui est le nombre entier de + nanosecondes entre les appels à la + fonction. * 'EXTRA_SETUP()' - Cette macro s'utilise au début de la définition de la - fonction appelée pour exécuter les réglages complémentaires à cette instance. - Une valeur de retour négative Unix 'errno' indique un défaut (par exemple: - elle retourne '-EBUSY' comme défaut à la réservation d'un port - d'entrées/sorties), une valeur égale à 0 indique le succès. + fonction appelée pour exécuter les réglages complémentaires à cette instance. + Une valeur de retour négative Unix 'errno' indique un défaut (par exemple: + elle retourne '-EBUSY' comme défaut à la réservation d'un port + d'entrées/sorties), une valeur égale à 0 indique le succès. * 'EXTRA_CLEANUP()' - Cette macro s'utilise au début de la définition de la - fonction appelée pour exécuter un nettoyage (cleanup) du composant. Noter - que cette fonction doit nettoyer toutes les instances du composant, pas juste - un. Les macros 'pin_name', 'parameter_name' et 'data' ne doivent pas être - utilisées ici. + fonction appelée pour exécuter un nettoyage (cleanup) du composant. Noter + que cette fonction doit nettoyer toutes les instances du composant, pas juste + un. Les macros 'pin_name', 'parameter_name' et 'data' ne doivent pas être + utilisées ici. * 'pin_name' ou 'parameter_name' - Pour chaque pin, 'pin_name' ou pour chaque - paramètre, 'parameter_name' il y a une macro qui permet d'utiliser le nom - seul pour faire référence à la pin ou au paramètre. - Quand 'pin_name' ou 'parameter_name' sont des tableaux, la macro est - de la forme 'pin_name(idx)' ou 'param_name(idx)' dans laquelle 'idx' - est l'index dans le tableau de pins. Quand le tableau est de taille - variable, il est seulement légal de faire référence aux items par - leurs 'condsize'. + paramètre, 'parameter_name' il y a une macro qui permet d'utiliser le nom + seul pour faire référence à la pin ou au paramètre. + Quand 'pin_name' ou 'parameter_name' sont des tableaux, la macro est + de la forme 'pin_name(idx)' ou 'param_name(idx)' dans laquelle 'idx' + est l'index dans le tableau de pins. Quand le tableau est de taille + variable, il est seulement légal de faire référence aux items par + leurs 'condsize'. + - Quand un item est conditionnel, il est seulement légal de faire - référence à cet item quand ses conditions sont évaluées à des - valeurs différentes de zéro. + Quand un item est conditionnel, il est seulement légal de faire + référence à cet item quand ses conditions sont évaluées à des + valeurs différentes de zéro. * 'variable_name' - Pour chaque variable, il y a une macro 'variable_name' - qui permet au nom seul d'être utilisé pour faire référence à la - variable. Quand 'variable_name' est un tableau, le style normal de C - est utilisé: 'variable_name[idx]' + qui permet au nom seul d'être utilisé pour faire référence à la + variable. Quand 'variable_name' est un tableau, le style normal de C + est utilisé: 'variable_name[idx]' * 'data'- Si l'option 'data' est spécifiée, cette macro permet l'accès à - l'instance de la donnée. + l'instance de la donnée. * 'fperiod' - Le nombre de secondes en virgule flottante entre les appels à - cette fonction temps réel. + cette fonction temps réel. * 'FOR_ALL_INSTS() {*…*}' - Pour les composants de l'espace utilisateur. Cette - macro utilise la variable *struct state 'inst' pour itérer au dessus de - toutes les instances définies. Dans le corps de la boucle, les macros - 'pin_name', 'parameter_name' et 'data' travaillent comme elles le font dans - les fonctions temps réel. + macro utilise la variable *struct state 'inst' pour itérer au dessus de + toutes les instances définies. Dans le corps de la boucle, les macros + 'pin_name', 'parameter_name' et 'data' travaillent comme elles le font dans + les fonctions temps réel. == Composants avec une seule fonction @@ -717,6 +716,7 @@ FUNCTION(_) { ---- Une ligne de chargement typique pourrait être: + ---- loadrt logic count=3 personality=0x102,0x305,0x503 ---- @@ -730,4 +730,4 @@ qui créerait les pins suivantes: - des portes AND et XOR à 3 entrées: logic.2.and, logic.2.xor, logic.2.in-00, logic.2.in-01, logic.2.in-02 - +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/components.adoc b/docs/src/hal/components.adoc index 1b433427268..fb3e9c6be55 100644 --- a/docs/src/hal/components.adoc +++ b/docs/src/hal/components.adoc @@ -277,11 +277,11 @@ gearchange:: (((gearchange)))Select from one of two speed ranges. [[sec:ilowpass]] ilowpass:: (((ilowpass)))While it may find other applications, this component was written to create smoother motion while jogging with an MPG. -+ + In a machine with high acceleration, a short jog can behave almost like a step function. By putting the ilowpass component between the MPG encoder counts output and the axis jog-counts input, this can be smoothed. -+ + Choose scale conservatively so that during a single session there will never be more than about 2e9/scale pulses seen on the MPG. Choose gain according to the smoothing level desired. Divide the axis.N.jog-scale values by scale. @@ -430,3 +430,5 @@ rtapi_task_resume.3rtapi rtapi_task_start.3rtapi rtapi_task_wait.3rtapi .... + +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/components_es.adoc b/docs/src/hal/components_es.adoc index ac2e17d0452..2fee083630f 100644 --- a/docs/src/hal/components_es.adoc +++ b/docs/src/hal/components_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:componentes-hal]] - = Componentes HAL == Comandos y componentes de espacio de usuario @@ -34,7 +33,6 @@ pyvcp:: Panel de control virtual para LinuxCNC. shuttle:: controla los pines HAL con los dispositivos ShuttleXpress y ShuttlePRO fabricados por Contour Design. [[sec:realtime-components]] - == Lista de componentes en tiempo real Todos los comandos en la siguiente lista tienen páginas de manual. @@ -407,3 +405,4 @@ rtapi_task_start.3rtapi rtapi_task_wait.3rtapi .... +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/components_fr.adoc b/docs/src/hal/components_fr.adoc index 5da85b05866..1395cfd9067 100644 --- a/docs/src/hal/components_fr.adoc +++ b/docs/src/hal/components_fr.adoc @@ -1,9 +1,8 @@ :lang: fr :toc: -= Les composants de HAL - [[cha:Composants-de-HAL]] += Les composants de HAL == Composants de commandes et composants de l'espace utilisateur @@ -468,3 +467,4 @@ rtapi_task_start.3rtapi rtapi_task_wait.3rtapi .... +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/general-ref.adoc b/docs/src/hal/general-ref.adoc index 96ab03d6126..086e1420709 100644 --- a/docs/src/hal/general-ref.adoc +++ b/docs/src/hal/general-ref.adoc @@ -157,3 +157,5 @@ generic8255.0.din.09-15.read:: ppmc.0.write:: -- writes all outputs (step generators, pwm, DACs, and digital) on the first Pico Systems ppmc board. + +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/general-ref_es.adoc b/docs/src/hal/general-ref_es.adoc index 1c0dd84eda1..06acbbc5b8b 100644 --- a/docs/src/hal/general-ref_es.adoc +++ b/docs/src/hal/general-ref_es.adoc @@ -1,6 +1,6 @@ :lang: es -[[cha:general-reference]] +[[cha:general-reference]] =Referencia general ==Convenciones Generales de Nomenclatura @@ -99,15 +99,13 @@ Los campos individuales son: .Ejemplos motenc.0.encoder.2.position:: - - Salida de posición del tercer canal (2) de encoder en la primera (0) - tarjeta Motenc. + - Salida de posición del tercer canal (2) de encoder en la primera (0) tarjeta Motenc. stg.0.din.03.in:: - Estado de la cuarta entrada digital (03) en la primera (0) tarjeta Servo-to-Go. ppmc.0.pwm.00-03.frequency:: - - Frecuencia de portadora utilizada para los canales PWM 0 a 3 (cuatro canales) en la - primera (0) placa ppmc Pico Systems. + - Frecuencia de portadora utilizada para los canales PWM 0 a 3 (cuatro canales) en la primera (0) placa ppmc Pico Systems. ===Nombres de funciones @@ -124,7 +122,7 @@ hardware utilizando datos de pines HAL. Deben nombrarse de la siguiente manera: El dispositivo específico al que accederá la función. :: - Opcional. Una función puede acceder a todas las E/S de una placa, o puede + Opcional. Una función puede acceder a todas las E/S de una placa, o puede acceder solo a cierto tipo. Por ejemplo, puede haber distintas funciones para leer contadores de encoder y leer E/S digitales. Si tales funciones independientes existen, el campo identifica el tipo de @@ -141,7 +139,7 @@ hardware utilizando datos de pines HAL. Deben nombrarse de la siguiente manera: se accede por diferentes funciones. read|write:: - Indica si la función lee el hardware o escribe en él. + Indica si la función lee el hardware o escribe en él. .Ejemplos @@ -149,10 +147,9 @@ motenc.0.encoder.read:: - lee todos los codificadores en la primera placa motenc. generic8255.0.din.09-15.read:: - - lee el segundo puerto de 8 bits en el primera placa genérica basada en 8255 - de E/S digital. + - lee el segundo puerto de 8 bits en el primera placa genérica basada en 8255 de E/S digital. ppmc.0.write:: - - escribe todas las salidas (generadores de pasos, pwm, DAC y digitales) en - la primera placa Pico Systems ppmc. + - escribe todas las salidas (generadores de pasos, pwm, DAC y digitales) en la primera placa Pico Systems ppmc. +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/general_ref_fr.adoc b/docs/src/hal/general_ref_fr.adoc index d69684543f5..0ec8ebb9949 100644 --- a/docs/src/hal/general_ref_fr.adoc +++ b/docs/src/hal/general_ref_fr.adoc @@ -1,9 +1,8 @@ :lang: fr :toc: -= Conventions générales - [[cha:References-generales]] += Conventions générales == Les noms @@ -214,8 +213,7 @@ ppmc.0.write:: la première carte Pico Systems ppmc. [[sec:Peripheriques-canoniques]] -== Périphériques d'interfaces canoniques -(((Périphériques canoniques))) +== Périphériques d'interfaces canoniques(((Périphériques canoniques))) Les sections qui suivent expliquent les pins, paramètres et fonctions qui sont fournies par les _périphériques canoniques_. Tous les pilotes @@ -350,4 +348,4 @@ convertisseurs numérique/analogique ou les générateurs de PWM. (_scale_ _ _value_) + _offset_ sont envoyés à la sortie du DAC . Si enable est FALSE, la sortie passe à 0. - +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/hal-examples.adoc b/docs/src/hal/hal-examples.adoc index 142aef75f13..cd1eb1e6c2e 100644 --- a/docs/src/hal/hal-examples.adoc +++ b/docs/src/hal/hal-examples.adoc @@ -295,3 +295,5 @@ stop # unload HAL all components before exiting unloadrt all ---- + +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/hal-examples_es.adoc b/docs/src/hal/hal-examples_es.adoc index 96c2a1da102..4a013791277 100644 --- a/docs/src/hal/hal-examples_es.adoc +++ b/docs/src/hal/hal-examples_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:hal-examples]] - = Ejemplos HAL Todos estos ejemplos suponen que se comienza con una configuración basada @@ -314,6 +313,4 @@ stop unloadrt all ---- - - - +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/hal-examples_fr.adoc b/docs/src/hal/hal-examples_fr.adoc index 7ef101928fe..903e52ec563 100644 --- a/docs/src/hal/hal-examples_fr.adoc +++ b/docs/src/hal/hal-examples_fr.adoc @@ -1,9 +1,8 @@ :lang: fr :toc: -= Exemples pour HAL - [[Exemples-pour-HAL]] += Exemples pour HAL Tous ces exemples s'appuient sur une configuration créée par Stepconf, elle a deux threads, _base-thread_ et _servo-thread_. @@ -97,8 +96,7 @@ dans la direction négative. Noter que la valeur absolue peut être prise sur la pin _abs.0.out_ ou le signal X-IPM. [[cap:Velocity-Example]] -.Exemple avec la vitesse -(((Velocity exemple))) +.Exemple avec la vitesse(((Velocity exemple))) image::images/velocity-01.png[] @@ -179,13 +177,13 @@ Pour séparer les signaux et mieux les visualiser, cliquer sur un canal et utiliser le curseur de position verticale pour positionner les traces. .Amortissement d'un signal carré[[cap:Softstart]] - image::images/softstart-scope_fr.png[] Pour voir l'effet d'un changement du point de réglage des valeurs des composants, il est possible de passer des commandes depuis le terminal. Par exemple,pour voir différentes valeurs de gain pour le passe-bas, taper la commande suivante, puis essayer différentes valeurs: + ---- setp lowpass.0.gain .01 ---- @@ -248,3 +246,5 @@ stop # décharge tous les composants de HAL avant de quitter unloadrt all ---- + +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/halmodule.adoc b/docs/src/hal/halmodule.adoc index cc3fe48ffec..e8f3fb4f90f 100644 --- a/docs/src/hal/halmodule.adoc +++ b/docs/src/hal/halmodule.adoc @@ -204,7 +204,8 @@ value = hal.get_value("iocontrol.0.emc-enable-in") + === get_info_pins() -returns a list of dicts of all system pins. + +returns a list of dicts of all system pins. + [source,python] ---- listOfDicts = hal.get_info_pins() @@ -214,7 +215,8 @@ pinDirection1 = listOfDicts[0].get('DIRECTION') ---- === get_info_signals() -returns a list of dicts of all system signals. + +returns a list of dicts of all system signals. + [source,python] ---- listOfDicts = hal.get_info_signals() @@ -222,9 +224,11 @@ signalName1 = listOfDicts[0].get('NAME') signalValue1 = listOfDicts[0].get('VALUE') driverPin1 = listOfDicts[0].get('DRIVER') ---- + === get_info_params() -returns a list of dicts of all system parameters. + +returns a list of dicts of all system parameters. + [source,python] ---- listOfDicts = hal.get_info_params() @@ -234,8 +238,7 @@ paramValue1 = listOfDicts[0].get('VALUE') === new_signal -Create a New signal of the type specified. + -example" + +Create a New signal of the type specified. Example: + hal.new_sig("signalname",hal.HAL_BIT) === pin_has_writer @@ -348,6 +351,7 @@ import hal ---- Then make a pin and connect a 'value-changed' (the watcher) signal to a function call: + [source,python] ---- class HandlerClass: @@ -427,3 +431,5 @@ This shows ways to get the pin value and information. (Ubuntu package name “lcdproc”, in the universe repository) * Create a virtual control panel using any GUI library supported by Python (gtk, qt, wxwindows, etc) + +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/halmodule_es.adoc b/docs/src/hal/halmodule_es.adoc index 930b5f2d621..d522e8abfdd 100644 --- a/docs/src/hal/halmodule_es.adoc +++ b/docs/src/hal/halmodule_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:halmodule]] - = Crear Componentes Python de Espacio de Usuario == Uso Básico @@ -370,20 +369,18 @@ Esto muestra formas de obtener el valor y la información del pin. + print self.testPin.get() ---- - == Ideas de proyectos * Crea un panel de control externo con botones, interruptores y - indicadores. Conecte todo a un microcontrolador, y conecte el - microcontrolador a la PC con una interfaz serie. Python tiene un muy - eficaz módulo de interfaz serie llamado - http://pyserial.sourceforge.net/[pyserial] - (Nombre del paquete de Ubuntu "python-serial", en el repositorio universo) + indicadores. Conecte todo a un microcontrolador, y conecte el + microcontrolador a la PC con una interfaz serie. Python tiene un muy + eficaz módulo de interfaz serie llamado + http://pyserial.sourceforge.net/[pyserial] + (Nombre del paquete de Ubuntu "python-serial", en el repositorio universo) * Adjunte un módulo LCD compatible con http://lcdproc.omnipotent.net/[LCDProc]- - y úselo para mostrar una lectura digital con la información que elija - (Nombre del paquete de Ubuntu "lcdproc", en el repositorio universo) + y úselo para mostrar una lectura digital con la información que elija + (Nombre del paquete de Ubuntu "lcdproc", en el repositorio universo) * Crear un panel de control virtual utilizando cualquier biblioteca GUI compatible con - Python (gtk, qt, wxwindows, etc.) - - + Python (gtk, qt, wxwindows, etc.) +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/halmodule_fr.adoc b/docs/src/hal/halmodule_fr.adoc index 8805eae408e..f623003f846 100644 --- a/docs/src/hal/halmodule_fr.adoc +++ b/docs/src/hal/halmodule_fr.adoc @@ -173,4 +173,4 @@ d'arrêt. librairie d'interface graphique supportée par Python (gtk, qt, wxwindows, etc) - +// vim: set syntax=asciidoc: diff --git a/docs/src/hal/halshow.adoc b/docs/src/hal/halshow.adoc index 6ff96791199..d66c8fb0274 100644 --- a/docs/src/hal/halshow.adoc +++ b/docs/src/hal/halshow.adoc @@ -288,3 +288,5 @@ in halshow can be set up to watch a parport much as IO_Show did. [[cap:watch-tab-context-menu]] .Watch Tab context menu image::images/halshow-5.png["Watch Tab context menu",align="center"] + +// vim: set syntax=asciidoc: From 75c52c70243419b22fea632aa3ab7aaff46d993a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 14:56:38 +0100 Subject: [PATCH 04/53] Update docs/src/Master_Getting_Started_zh_CN.adoc Have thee version as a header, not as regular text. Co-authored-by: silopolis --- docs/src/Master_Getting_Started_zh_CN.adoc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/src/Master_Getting_Started_zh_CN.adoc b/docs/src/Master_Getting_Started_zh_CN.adoc index 6a50a41aee4..296b78117a1 100644 --- a/docs/src/Master_Getting_Started_zh_CN.adoc +++ b/docs/src/Master_Getting_Started_zh_CN.adoc @@ -1,8 +1,7 @@ :lang: zh_CN :lversion: {sys: cat ../VERSION} :date: {sys: LANG=C date --date="@$(dpkg-parsechangelog --file ../debian/changelog -S timestamp)" '+%d %b %Y'} -Getting Started V{lversion}, {date} -=================================== += Getting Started V{lversion}, {date} :masterdir: {indir} :revdate: 2021-10-28 From a20bea0a01a7051b481b2d1c100ccaff924c3b1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 14:57:23 +0100 Subject: [PATCH 05/53] Update docs/src/getting-started/getting-linuxcnc.adoc Added anchor. Co-authored-by: silopolis Update docs/src/getting-started/getting-linuxcnc.adoc Added index Alternate Install Method. Co-authored-by: silopolis Update docs/src/getting-started/getting-linuxcnc.adoc Fixed [NOTE] syntax, Co-authored-by: silopolis --- docs/src/getting-started/getting-linuxcnc.adoc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/src/getting-started/getting-linuxcnc.adoc b/docs/src/getting-started/getting-linuxcnc.adoc index f464c4403c7..7a9c6a34be2 100644 --- a/docs/src/getting-started/getting-linuxcnc.adoc +++ b/docs/src/getting-started/getting-linuxcnc.adoc @@ -237,14 +237,15 @@ It is OK to upgrade everything except the operating system when asked to. Do not upgrade the operating system if prompted to do so. You should accept OS _updates_ however, especially security updates. -== Install Problems +[[linuxcnc:install-problems]] +== Install Problems(((LinuxCNC:Installation Problems)))(((Installation:Problems))) 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. [[sec:_alternate_install_methods]] -== Alternate Install Methods +== Alternate Install Methods(((LinuxCNC:Alternate Install Methods)))(((Installation:Alternate Methods))) 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 @@ -290,7 +291,8 @@ debian archive. The apt source is: * Debian Wheezy: `deb http://linuxcnc.org wheezy base` * Ubuntu Precise: `deb http://linuxcnc.org precise base` -NOTE: Debian Wheezy and Ubuntu Precise are both extremely old, and +[NOTE] +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. From d24072f50486d41ab8c35255315b35d9a4e25176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 15:07:29 +0100 Subject: [PATCH 06/53] Update docs/src/Master_Integrator.adoc The version shall be part of the header, not regular text. Co-authored-by: silopolis --- docs/src/Master_Integrator.adoc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/src/Master_Integrator.adoc b/docs/src/Master_Integrator.adoc index 51c7ab0dc48..a08f752f16d 100644 --- a/docs/src/Master_Integrator.adoc +++ b/docs/src/Master_Integrator.adoc @@ -1,8 +1,7 @@ :lang: en :lversion: {sys: cat ../VERSION} :date: {sys: LANG=C date --date="@$(dpkg-parsechangelog --file ../debian/changelog -S timestamp)" '+%d %b %Y'} -Integrator Information V{lversion}, {date} -========================================== += Integrator Information V{lversion}, {date} :masterdir: {indir} :revdate: 2021-10-28 From d2ca4a69b0cc17f21c5232d21975af62b31af87f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 15:08:13 +0100 Subject: [PATCH 07/53] Update docs/src/common/emc-history.adoc Remove blank. Co-authored-by: silopolis --- docs/src/common/emc-history.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/common/emc-history.adoc b/docs/src/common/emc-history.adoc index 35235d5798b..a9c0ea7ba30 100644 --- a/docs/src/common/emc-history.adoc +++ b/docs/src/common/emc-history.adoc @@ -117,5 +117,5 @@ machining center it controls, as well as an early implementation of EMC. The paper is also available at http://linuxcnc.org/files/RS274NGCv3.pdf . 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 +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 From e0aabb12ed8a8d47fbbbd875840c421c3f9c30c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 15:16:15 +0100 Subject: [PATCH 08/53] Update docs/src/common/linux-faq.adoc Typo Co-authored-by: silopolis Update docs/src/common/linux-faq_es.adoc Co-authored-by: silopolis --- docs/src/common/linux-faq.adoc | 2 +- docs/src/common/linux-faq_es.adoc | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/src/common/linux-faq.adoc b/docs/src/common/linux-faq.adoc index d630f64c125..fdb6c7b3185 100644 --- a/docs/src/common/linux-faq.adoc +++ b/docs/src/common/linux-faq.adoc @@ -69,7 +69,7 @@ buffer with 'dmesg'. Ubuntu and Linux Mint have a keyboard shortcut Ctrl + Alt + 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. -N.T. Debia Stretch no tiene definido ningun atajo de teclado. Se puede crear facilmente +N.T. Debian Stretch no tiene definido ningun atajo de teclado. Se puede crear facilmente con el 'Administrador de Configuracion'. La mayoría de los sistemas operativos tienen el terminal como elemento de menú, diff --git a/docs/src/common/linux-faq_es.adoc b/docs/src/common/linux-faq_es.adoc index 2aa4fc1e142..bbc443f0844 100644 --- a/docs/src/common/linux-faq_es.adoc +++ b/docs/src/common/linux-faq_es.adoc @@ -1,7 +1,6 @@ :lang: es [[cha:linux-faq]] - = Linux FAQ Estos son algunos comandos básicos y técnicas para nuevos usuarios de From 3be43a1fe291696eb08e999a7ddcb45ff551fa72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 15:22:45 +0100 Subject: [PATCH 09/53] Update docs/src/config/python-interface.adoc shorter lines are sufficient and more elegant. Co-authored-by: silopolis Update docs/src/config/python-interface.adoc Co-authored-by: silopolis --- docs/src/config/python-interface.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/config/python-interface.adoc b/docs/src/config/python-interface.adoc index ef74e8ba559..3bfae22ad28 100644 --- a/docs/src/config/python-interface.adoc +++ b/docs/src/config/python-interface.adoc @@ -423,7 +423,7 @@ current velocity. === The `joint` dictionary [source,python] ---------------------------------------------------------------------- +---- #!/usr/bin/env python3 # -*- coding: utf-8 -*- import linuxcnc @@ -842,7 +842,7 @@ if error: else: typus = "info" print typus, text ---------------------------------------------------------------------- +---- [[python:reading-ini-values]] From b07af30675e8832bc40a44e961f6b2ca4c02d54b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 15:38:50 +0100 Subject: [PATCH 10/53] Update docs/src/drivers/pluto-p.adoc Co-authored-by: silopolis Update docs/src/drivers/pluto-p.adoc Co-authored-by: silopolis Update docs/src/drivers/pluto-p.adoc Co-authored-by: silopolis Update docs/src/drivers/pluto-p.adoc Co-authored-by: silopolis Update docs/src/drivers/pluto-p.adoc Co-authored-by: silopolis --- docs/src/drivers/pluto-p.adoc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/src/drivers/pluto-p.adoc b/docs/src/drivers/pluto-p.adoc index a692932d5a3..06eca78dc39 100644 --- a/docs/src/drivers/pluto-p.adoc +++ b/docs/src/drivers/pluto-p.adoc @@ -242,15 +242,10 @@ The board features: === Pinout * 'STEPx' - The 'step' (clock) output of stepgen channel 'x' - * 'DIRx' - The 'direction' output of stepgen channel 'x' - * 'INx' - Dedicated digital input #x - * 'OUTx' - Dedicated digital output #x - * 'GND' - Ground - * 'VCC' - +3.3V regulated DC While the 'extended main connector' has a superset of signals usually From 8e2b0bb8317647191e0f0b58923e0b40ba23848d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 15:58:44 +0100 Subject: [PATCH 11/53] Update docs/src/drivers/gs2.adoc Reverse-translated from french. Co-authored-by: silopolis --- docs/src/drivers/gs2.adoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/src/drivers/gs2.adoc b/docs/src/drivers/gs2.adoc index beb8890b078..d03f33c2680 100644 --- a/docs/src/drivers/gs2.adoc +++ b/docs/src/drivers/gs2.adoc @@ -14,7 +14,8 @@ loadusr -Wn spindle-vfd gs2_vfd -n spindle-vfd The above command says: loadusr, wait for named to load, component gs2_vfd, named spindle-vfd. FIXME from French: La commande de HAL _loadusr_ est détaillée au -chapitre: <>. +chapitre: +The HAL `loadusr` command is detailed in the <> chapter. == Command Line Options From 44008bd69ece09f0f3bf9fd08d12b0baccd4c26d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 15:59:12 +0100 Subject: [PATCH 12/53] Update docs/src/drivers/mitsub_vfd.adoc Co-authored-by: silopolis --- docs/src/drivers/mitsub_vfd.adoc | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/src/drivers/mitsub_vfd.adoc b/docs/src/drivers/mitsub_vfd.adoc index fd086ad0517..0bca5ce054d 100644 --- a/docs/src/drivers/mitsub_vfd.adoc +++ b/docs/src/drivers/mitsub_vfd.adoc @@ -128,7 +128,6 @@ setp coolant.scale-fb 1 setp coolant.motor-cmd 60 # allows us to see status setp coolant.monitor 1 - ---- == Configuring the Mitsubishi VFD for serial usage From a369db4004ee9dae09101310f54d35b44996cdc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 16:36:31 +0100 Subject: [PATCH 13/53] Update docs/src/examples/mpg.adoc Co-authored-by: silopolis Update docs/src/examples/mpg.adoc Co-authored-by: silopolis --- docs/src/examples/mpg.adoc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/src/examples/mpg.adoc b/docs/src/examples/mpg.adoc index 9468708e8bc..1dbac1502d1 100644 --- a/docs/src/examples/mpg.adoc +++ b/docs/src/examples/mpg.adoc @@ -23,8 +23,7 @@ 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. -jog.hal - +.jog.hal ---- # Jog Pendant loadrt encoder num_chan=1 @@ -82,8 +81,7 @@ If the machine is capable of high acceleration to smooth out the moves for each click of the MPG use the <> component to limit the acceleration. -jog.hal with ilowpass - +.jog.hal with ilowpass ---- loadrt encoder num_chan=1 loadrt mux4 count=1 From 24df390798fdc627685b93d0918fca598b5e0079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 16:40:15 +0100 Subject: [PATCH 14/53] Update docs/src/gcode/coordinates.adoc Co-authored-by: silopolis Update docs/src/gcode/coordinates.adoc Co-authored-by: silopolis --- docs/src/gcode/coordinates.adoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/src/gcode/coordinates.adoc b/docs/src/gcode/coordinates.adoc index 1c151a603c6..e9197c9c5b6 100644 --- a/docs/src/gcode/coordinates.adoc +++ b/docs/src/gcode/coordinates.adoc @@ -160,12 +160,13 @@ these parameters. See <> below. [CAUTION] - +---- '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 <> below. +---- Programming 'G52 X1 Y2' offsets the current workpiece coordinate system X axis by 1 and Y axis by 2. Accordingly, on the DRO, the From 4db25c53701627564aa9d4e6ae0e876d5e2872a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 16:45:02 +0100 Subject: [PATCH 15/53] Update docs/src/gcode/gcode_fr.adoc Co-authored-by: silopolis Update docs/src/gcode/gcode_fr.adoc Co-authored-by: silopolis --- docs/src/gcode/gcode_fr.adoc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/src/gcode/gcode_fr.adoc b/docs/src/gcode/gcode_fr.adoc index 50ef61e2e1d..cda44d46b66 100644 --- a/docs/src/gcode/gcode_fr.adoc +++ b/docs/src/gcode/gcode_fr.adoc @@ -2007,13 +2007,15 @@ C'est une erreur si: * La valeur de Q est négative ou égale à zéro. -== G84 Cycle de taraudage à droite[[sec:G84-Taraudage-a-droite]](((G84 Cycle de taraudage))) +[[sec:G84-Taraudage-a-droite]] +== G84 Cycle de taraudage à droite(((G84 Cycle de taraudage))) Ce code n'est pas encore implémenté dans LinuxCNC. Il est accepté mais son comportement n'est pas défini. Voir le <>. -== G85 Cycle d'alésage, sans temporisation, retrait en vitesse travail[[sec:G85-Alesage-retrait-travail]](((G85 Cycle d'alésage))) +[[sec:G85-Alesage-retrait-travail]] +== G85 Cycle d'alésage, sans temporisation, retrait en vitesse travail(((G85 Cycle d'alésage))) ---- G85 (X- Y- Z-) or (U- V- W-) R- L- From 22d2a083a4a217c69eee450b905b2ae846825529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 16:46:30 +0100 Subject: [PATCH 16/53] Update docs/src/gcode/g-code.adoc Co-authored-by: silopolis Update docs/src/gcode/g-code.adoc Co-authored-by: silopolis Update docs/src/gcode/g-code.adoc Co-authored-by: silopolis Update docs/src/gcode/g-code.adoc Co-authored-by: silopolis Update docs/src/gcode/g-code.adoc Co-authored-by: silopolis Update docs/src/gcode/g-code.adoc Co-authored-by: silopolis Update docs/src/gcode/g-code.adoc Co-authored-by: silopolis Update docs/src/gcode/g-code.adoc Co-authored-by: silopolis Update docs/src/gcode/g-code.adoc Co-authored-by: silopolis --- docs/src/gcode/g-code.adoc | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/src/gcode/g-code.adoc b/docs/src/gcode/g-code.adoc index 91cdd9bd404..023062c1d5f 100644 --- a/docs/src/gcode/g-code.adoc +++ b/docs/src/gcode/g-code.adoc @@ -594,7 +594,6 @@ M2 ---- .Sample NURBS Output - image:images/nurbs01.png["Sample NURBS Output",align="center"] More information on NURBS can be found here: @@ -1426,13 +1425,14 @@ See the <> Section for an overview of c systems. [[gcode:g61]] -== G61 Exact Path Mode(((G61 G61.1 G64 Path Mode))) +== G61 Exact Path Mode(((G61 Exact Path Mode))) * '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. -== G61.1 Exact Stop Mode[[gcode:g61.1]] +[[gcode:g61.1]] +== G61.1 Exact Stop Mode(((G61.1 Exact Stop Mode))) * 'G61.1' - Exact stop mode, movement will stop at the end of each programmed segment. @@ -1523,7 +1523,7 @@ It is an error if: * <> has not been used to select the ZX plane. [[gcode:g71-g72]] -== G71 G72 Lathe roughing cycle(((G71 G72 Lathe roughing cycle))) +== G71 G72 Lathe roughing cycles(((G71 G72 Lathe roughing cycles))) ---- G71 Q- @@ -1585,7 +1585,7 @@ It is an error if: * <> is active. [[gcode:g73]] -== G73 Drilling Cycle with Chip Breaking(((G73 Drilling Cycle Chip Break))) +== G73 Drilling Cycle with Chip Breaking(((G73 Drilling Cycle with Chip Break))) ---- G73 X- Y- Z- R- Q- @@ -1613,7 +1613,7 @@ It is an error if: * the R number is not specified [[gcode:g74]] -== G74 Left-hand Tapping Cycle, Dwell(((G74 Left-hand Tapping Cycle Dwell))) +== G74 Left-hand Tapping Cycle with Dwell(((G74 Left-hand Tapping Cycle with Dwell))) ---- G74 (X- Y- Z-) or (U- V- W-) R- L- P- $- F- @@ -1781,7 +1781,7 @@ are the cutting moves. image::images/g76-01.png["G76 Example",align="center"] [[gcode:g80-g89]] -== Canned Cycles(((G80-G89 Canned Cycles))) +== G80-G89 Canned Cycles(((G80-G89 Canned Cycles))) The canned cycles 'G81' through 'G89' and the canned cycle stop 'G80' are described in this section. @@ -1846,7 +1846,8 @@ 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 <> Section. -=== Canned Cycle Errors[[gcode:canned-cycle-errors]] +[[gcode:canned-cycle-errors]] +=== Canned Cycle Errors(((Canned Cycle Errors))) It is an error if: @@ -1868,7 +1869,8 @@ if: If other planes are active, the error conditions are analogous to the XY conditions above. -=== Preliminary and In-Between Motion[[gcode:preliminary-motion]] +[[gcode:preliminary-motion]] +=== Preliminary and In-Between Motion 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, From 8f02de44e1540dd269e6af3a2cb96a9b2628a5f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 16:57:06 +0100 Subject: [PATCH 17/53] Update docs/src/gcode/m-code_fr.adoc lower-case anchors Co-authored-by: silopolis --- docs/src/gcode/m-code_fr.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/gcode/m-code_fr.adoc b/docs/src/gcode/m-code_fr.adoc index cebdb04001e..639f8a248f7 100644 --- a/docs/src/gcode/m-code_fr.adoc +++ b/docs/src/gcode/m-code_fr.adoc @@ -1,7 +1,7 @@ :lang: fr :toc: -[[cha:M-codes]] +[[cha:m-codes]] = Les M-codes :ini: {basebackend@docbook:'':ini} From d0c241652473eabc20fe6e233b1eef8fd8021f39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 17:03:31 +0100 Subject: [PATCH 18/53] Update docs/src/gcode/m-code.adoc Co-authored-by: silopolis Update docs/src/gcode/m-code.adoc Co-authored-by: silopolis --- docs/src/gcode/m-code.adoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/src/gcode/m-code.adoc b/docs/src/gcode/m-code.adoc index 20604c0afc5..b5525a945f0 100644 --- a/docs/src/gcode/m-code.adoc +++ b/docs/src/gcode/m-code.adoc @@ -479,6 +479,7 @@ protect a program against inadvertent modal changes within subroutines. [[mcode:m70-saved-state]] +.M70 Saved state(((M70 Saved state))) The state saved consists of: * current G20/G21 settings (imperial/metric) @@ -673,7 +674,7 @@ O endsub ---- [[mcode:m100-m199]] -== M100 - M199 User Defined Commands(((M100 - M199 User Defined Commands))) +== M100-M199 User Defined Commands(((M100-M199 User Defined Commands))) ---- M1-- From 4b9c3cba122f8d5ca8e428b6340e2db46e9c8b87 Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Mon, 14 Mar 2022 17:19:45 +0100 Subject: [PATCH 19/53] Shortened block separator --- docs/src/gcode/coordinates.adoc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/src/gcode/coordinates.adoc b/docs/src/gcode/coordinates.adoc index e9197c9c5b6..e4e648b24c3 100644 --- a/docs/src/gcode/coordinates.adoc +++ b/docs/src/gcode/coordinates.adoc @@ -329,28 +329,28 @@ 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. ---------------------------------------------------------------------- +---- G10 L2 P1 X0 Y0 Z0 (ensure that G54 is set to machine zero) G0 X-0.1 Y0 Z0 G1 F1 Z-0.25 G3 X-0.1 Y0 I0.1 J0 G0 Z0 M2 ---------------------------------------------------------------------- +---- We can issue a set of commands to create offsets for the four other circles like this. ------------------------------------------------------------ +---- G10 L2 P2 X0.5 (offsets G55 X value by 0.5 inch) G10 L2 P3 X-0.5 (offsets G56 X value by -0.5 inch) G10 L2 P4 Y0.5 (offsets G57 Y value by 0.5 inch) G10 L2 P5 Y-0.5 (offsets G58 Y value by -0.5 inch) ------------------------------------------------------------ +---- We put these together in the following program: ---------------------------------------------------------------------- +---- (a program for milling five small circles in a diamond shape) G10 L2 P1 X0 Y0 Z0 (ensure that G54 is machine zero) @@ -385,7 +385,7 @@ G3 X-0.1 Y0 I0.1 J0 G54 G0 X0 Y0 Z0 M2 ---------------------------------------------------------------------- +---- 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 From 4fc2913bfb35ba89a5d47fcd4e14a50482c5d1c1 Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Mon, 14 Mar 2022 17:35:19 +0100 Subject: [PATCH 20/53] Removed redundant 'cooling' section --- docs/src/gcode/machining-center.adoc | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/docs/src/gcode/machining-center.adoc b/docs/src/gcode/machining-center.adoc index 79e91677b69..b4fa7e672e9 100644 --- a/docs/src/gcode/machining-center.adoc +++ b/docs/src/gcode/machining-center.adoc @@ -65,8 +65,9 @@ directions. === Coolant(((coolant))) -If a CNC machine has components to provide mist coolant and/or flood -coolant they can be controlled by G-codes. +Flood coolant and mist coolant may each be turned on independently. +The RS274/NGC language turns them off together see Section +<>. === Feed and Speed Override(((correcteurs vitesse)))(((correcteur vitesse broche))) @@ -173,12 +174,6 @@ per revolution' modes are being used, in which case see Section . Otherwise, the move is pure rotary motion and the F word is in rotary units in the ABC 'pseudo-cartesian' system. -=== Coolant(((coolant))) - -Flood coolant and mist coolant may each be turned on independently. -The RS274/NGC language turns them off together see Section -<>. - === Dwell(((dwell))) A machining center may be commanded to dwell (i.e., keep all axes From 1c10a8b09cac94e18f1f657e0c61af71f20e1d33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 17:41:37 +0100 Subject: [PATCH 21/53] Update docs/src/gcode/o-code.adoc Co-authored-by: silopolis Update docs/src/gcode/o-code.adoc Co-authored-by: silopolis --- docs/src/gcode/o-code.adoc | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/src/gcode/o-code.adoc b/docs/src/gcode/o-code.adoc index ebb869aab25..e8f6eb9adc1 100644 --- a/docs/src/gcode/o-code.adoc +++ b/docs/src/gcode/o-code.adoc @@ -153,14 +153,12 @@ M99 ; Return from subprogram 100 ---- .'o1 (Title)' - 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. .'M98 P- ' - 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 From 4280d4fe5cc79d47b1826adecab759917fe4bf9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 17:45:45 +0100 Subject: [PATCH 22/53] Update docs/src/gcode/machining-center.adoc Back-translation from French by @silopolis Co-authored-by: silopolis Update docs/src/gcode/machining-center.adoc All lower-case is fine since the anchor is not referenced. Co-authored-by: silopolis Update docs/src/gcode/machining-center.adoc Anchors should be in English Co-authored-by: silopolis --- docs/src/gcode/machining-center.adoc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/src/gcode/machining-center.adoc b/docs/src/gcode/machining-center.adoc index b4fa7e672e9..34f456fd033 100644 --- a/docs/src/gcode/machining-center.adoc +++ b/docs/src/gcode/machining-center.adoc @@ -226,12 +226,12 @@ The two pallets may be exchanged by command. === Boutons des correcteurs de vitesses -Taken from the _fr.adoc: Les boutons des correcteurs de vitesses peuvent être activés (ils -fonctionnent normalement) ou rendus inopérants (Ils n'ont plus aucun -effet). Le langage RS274/NGC dispose d'une commande qui active tous les -boutons et une autre qui les désactive. Voir l'inhibition et l'activation -<>. -Voir également <>. +Feed and speed override controls can either be active or disabled. +RS274/NGC langage has codes to switch between both states. +See the <> sections for more +informations about activation and inhibition of overrides controls. + +See also the <> section for more details. [[sec:path-control-mode]] === Path Control Mode(((Path Control Mode))) @@ -288,8 +288,8 @@ switch should be set before starting the NGC program. If this switch is on and an M1 code is encountered, program execution is paused. -[[sec:Tool-Table]] -== Tool Table(((Tool-Table))) +[[sec:tool-table]] +== Tool Table(((Tool Table))) 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 @@ -319,7 +319,7 @@ TOOL_TABLE = EMC-AXIS-SIM.tbl For more information on the specifics of the tool table format, see the <> Section. -[[sec:parametres]] +[[sec:parameters]] == Parameters(((Parameters))) In the RS274/NGC language view, a machining center maintains an array From a4a8132df82163ca99ea46fb06e78a3d98c65497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 18:07:49 +0100 Subject: [PATCH 23/53] Update docs/src/gcode/overview.adoc Co-authored-by: silopolis M-code as singular-attantum --- docs/src/gcode/machining-center.adoc | 2 +- docs/src/gcode/overview.adoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/gcode/machining-center.adoc b/docs/src/gcode/machining-center.adoc index 34f456fd033..b16ad8935a0 100644 --- a/docs/src/gcode/machining-center.adoc +++ b/docs/src/gcode/machining-center.adoc @@ -228,7 +228,7 @@ The two pallets may be exchanged by command. Feed and speed override controls can either be active or disabled. RS274/NGC langage has codes to switch between both states. -See the <> sections for more +See the <> sections for more informations about activation and inhibition of overrides controls. See also the <> section for more details. diff --git a/docs/src/gcode/overview.adoc b/docs/src/gcode/overview.adoc index bd7b57cb187..c81e9a4e709 100644 --- a/docs/src/gcode/overview.adoc +++ b/docs/src/gcode/overview.adoc @@ -1225,7 +1225,7 @@ 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 <> comments. -[[gcode:order-of-execution]](((G-Code Order of Execution))) +[[gcode:order-of-execution]] == G-Code Order of Execution The order of execution of items on a line is defined not by the From 0f79096aa103e71937f2e151eccda99cfa4a81f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=B6ller?= Date: Mon, 14 Mar 2022 18:12:15 +0100 Subject: [PATCH 24/53] Update docs/src/gcode/tool-compensation.adoc Co-authored-by: silopolis --- docs/src/gcode/tool-compensation.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/gcode/tool-compensation.adoc b/docs/src/gcode/tool-compensation.adoc index e8c7121b941..7b05830b82a 100644 --- a/docs/src/gcode/tool-compensation.adoc +++ b/docs/src/gcode/tool-compensation.adoc @@ -1,7 +1,7 @@ :lang: en [[cha:tool-compensation]] -= Tool Compensation Title(((Tool Compensation))) += Tool Compensation(((Tool Compensation))) == Tool Length Offsets From 68740a043a1cd71e84b98918235ebc835fdf173f Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Mon, 14 Mar 2022 19:47:58 +0100 Subject: [PATCH 25/53] Added missing anchor cnc:interpreter-interaction-with-switches --- docs/src/gcode/machining-center.adoc | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/src/gcode/machining-center.adoc b/docs/src/gcode/machining-center.adoc index b16ad8935a0..fdbf0f0fbb9 100644 --- a/docs/src/gcode/machining-center.adoc +++ b/docs/src/gcode/machining-center.adoc @@ -256,6 +256,7 @@ See Sections <> and <>. [[sec:Interaction-vitesses]](((Interraction vitesse))) [[sec:Interaction-effacement-de-bloc]](((effacement de bloc))) [[sec:Interaction-arrets-optionnels]](((Arrêts optionnels))) +[[cnc:interpreter-interaction-with-switches]] == Interpreter Interaction with Switches The Interpreter interacts with several switches. This section From 3a622279478d62c589130b7fadf57bf21032ad66 Mon Sep 17 00:00:00 2001 From: Hans Unzner Date: Sun, 20 Mar 2022 15:18:22 +0100 Subject: [PATCH 26/53] gmoccapy: stop all jogging on focus-out-event (#1511) --- src/emc/usr_intf/gmoccapy/gmoccapy.glade | 1 + src/emc/usr_intf/gmoccapy/gmoccapy.py | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/emc/usr_intf/gmoccapy/gmoccapy.glade b/src/emc/usr_intf/gmoccapy/gmoccapy.glade index 707027311da..8dfece3e3bd 100644 --- a/src/emc/usr_intf/gmoccapy/gmoccapy.glade +++ b/src/emc/usr_intf/gmoccapy/gmoccapy.glade @@ -471,6 +471,7 @@ images/Logo.png + diff --git a/src/emc/usr_intf/gmoccapy/gmoccapy.py b/src/emc/usr_intf/gmoccapy/gmoccapy.py index 76bbbe76bbe..10038de9073 100644 --- a/src/emc/usr_intf/gmoccapy/gmoccapy.py +++ b/src/emc/usr_intf/gmoccapy/gmoccapy.py @@ -2853,6 +2853,15 @@ def on_window1_destroy(self, widget, data=None): self.command.state(linuxcnc.STATE_ESTOP) Gtk.main_quit() + def on_focus_out(self, widget, data=None): + self.stat.poll() + if self.stat.enabled and self.stat.task_mode == linuxcnc.MODE_MANUAL and self.stat.current_vel > 0: + # cancel any joints jogging + JOGMODE = self._get_jog_mode() + for jnum in range(self.stat.joints): + self.command.jog(linuxcnc.JOG_STOP, JOGMODE, jnum) + print("Stopped jogging on focus-out-event") + # What to do if a macro button has been pushed def _on_btn_macro_pressed( self, widget = None, data = None ): o_codes = data.split() From 73df41b44aec85548ea394f1896a8cf63661b836 Mon Sep 17 00:00:00 2001 From: Hans Unzner Date: Sun, 20 Mar 2022 15:57:58 +0100 Subject: [PATCH 27/53] gscreen: stop all jogging on focus-out-event --- src/emc/usr_intf/gscreen/gscreen.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/emc/usr_intf/gscreen/gscreen.py b/src/emc/usr_intf/gscreen/gscreen.py index f9505a75abd..000798c4216 100755 --- a/src/emc/usr_intf/gscreen/gscreen.py +++ b/src/emc/usr_intf/gscreen/gscreen.py @@ -360,6 +360,7 @@ def __init__(self): self.restart_dialog = None self.key_event_last = None,0 + def __getitem__(self, item): return getattr(self, item) def __setitem__(self, item, value): @@ -921,6 +922,8 @@ def initialize_keybindings(self): """ self.widgets.window1.connect('key_press_event', self.on_key_event,1) self.widgets.window1.connect('key_release_event', self.on_key_event,0) + self.widgets.window1.connect('focus-out-event', self.on_focus_out) + def initialize_preferences(self): """Convenience function, calls separate functions\n @@ -4137,6 +4140,14 @@ def do_key_jog(self,axis,direction,action): distance = self.parse_increment(jogincr) self.emc.incremental_jog(axis,cmd,distance) + def on_focus_out(self, widget, data=None): + self.emcstat.poll() + command = linuxcnc.command() + if self.emcstat.enabled and self.emcstat.task_mode == linuxcnc.MODE_MANUAL and self.emcstat.current_vel > 0: + # cancel any joints jogging + for jnum in range(self.emcstat.joints): + command.jog(linuxcnc.JOG_STOP, 0, jnum) + # spindle control def spindle_adjustment(self,direction,action): if action and not self.widgets.s_display_fwd.get_active() and not self.widgets.s_display_rev.get_active(): From 54c745d48037962fd215da4f2f19e450f6b8d2f5 Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Fri, 18 Mar 2022 22:30:55 +0100 Subject: [PATCH 28/53] Adjusting filenames so po4a can match them Initial cross-language homogenization of anchor names Previously moved and asciidoc file into a different directory, now also moving the included images --- docs/src/Master_User_fr.adoc | 5 +- .../config/images/stepconf-advanced_fr.png | Bin 0 -> 20338 bytes docs/src/config/images/stepconf-axis_fr.png | Bin 0 -> 18738 bytes docs/src/config/images/stepconf-basic_fr.png | Bin 0 -> 25076 bytes docs/src/config/images/stepconf-config_fr.png | Bin 0 -> 10933 bytes docs/src/config/images/stepconf-pinout_fr.png | Bin 0 -> 18053 bytes .../src/config/images/stepconf-spindle_fr.png | Bin 0 -> 10216 bytes docs/src/config/images/stepconf-test_fr.png | Bin 0 -> 6216 bytes docs/src/config/ini-homing.adoc | 1 + docs/src/config/ini_config_fr.adoc | 5 +- docs/src/config/ini_homing_fr.adoc | 4 +- .../stepconf_fr.adoc | 8 +- .../stepper-quickstart_fr.adoc} | 0 docs/src/config/stepper_fr.adoc | 6 +- docs/src/docs.xml | 4 +- docs/src/drivers/{GS2_fr.adoc => gs2_fr.adoc} | 0 docs/src/drivers/hostmot2_fr.adoc | 27 +- .../{mitsub_vfd.adoc => mitsub-vfd.adoc} | 0 .../{pico_ppmc_fr.adoc => pico-ppmc_fr.adoc} | 0 ...ervo_to_go_fr.adoc => servo-to-go_fr.adoc} | 0 docs/src/examples/mpg_fr.adoc | 3 +- docs/src/examples/spindle.adoc | 6 +- docs/src/examples/spindle_es.adoc | 10 +- docs/src/examples/spindle_fr.adoc | 14 +- docs/src/gcode/coordinates_fr.adoc | 16 +- docs/src/gcode/gcode_fr.adoc | 422 ++++++++---------- docs/src/gcode/m-code_fr.adoc | 154 +++---- docs/src/gcode/machining-center.adoc | 2 +- ...enter_fr.adoc => machining-center_fr.adoc} | 84 ++-- docs/src/gcode/o-code_fr.adoc | 31 +- docs/src/gcode/other-code_fr.adoc | 6 +- docs/src/gcode/overview_fr.adoc | 18 +- ...tion_fr.adoc => tool-compensation_fr.adoc} | 28 +- ...ing-Started-with-LinuxCNC.contents_fr.adoc | 16 +- ...inuxCNC_fr.adoc => about-linuxcnc_fr.adoc} | 3 +- ...uxCNC_fr.adoc => getting-linuxcnc_fr.adoc} | 0 .../{Linux_FAQ_fr.adoc => linux-faq_fr.adoc} | 0 ...uxCNC_fr.adoc => running-linuxcnc_fr.adoc} | 0 ...ts_fr.adoc => system-requirements_fr.adoc} | 0 ...xCNC_fr.adoc => updating-linuxcnc_fr.adoc} | 0 docs/src/gui/axis.adoc | 4 +- docs/src/gui/axis_fr.adoc | 9 +- docs/src/lathe/lathe-user_fr.adoc | 22 +- ...{pid_theory_fr.adoc => pid-theory_fr.adoc} | 0 ...pers_fr.adoc => tweaking-steppers_fr.adoc} | 0 docs/src/user/user-concepts_fr.adoc | 2 +- 46 files changed, 396 insertions(+), 514 deletions(-) create mode 100644 docs/src/config/images/stepconf-advanced_fr.png create mode 100644 docs/src/config/images/stepconf-axis_fr.png create mode 100644 docs/src/config/images/stepconf-basic_fr.png create mode 100644 docs/src/config/images/stepconf-config_fr.png create mode 100644 docs/src/config/images/stepconf-pinout_fr.png create mode 100644 docs/src/config/images/stepconf-spindle_fr.png create mode 100644 docs/src/config/images/stepconf-test_fr.png rename docs/src/{getting-started => config}/stepconf_fr.adoc (99%) rename docs/src/{getting-started/stepper_quickstart_fr.adoc => config/stepper-quickstart_fr.adoc} (100%) rename docs/src/drivers/{GS2_fr.adoc => gs2_fr.adoc} (100%) rename docs/src/drivers/{mitsub_vfd.adoc => mitsub-vfd.adoc} (100%) rename docs/src/drivers/{pico_ppmc_fr.adoc => pico-ppmc_fr.adoc} (100%) rename docs/src/drivers/{servo_to_go_fr.adoc => servo-to-go_fr.adoc} (100%) rename docs/src/gcode/{machining_center_fr.adoc => machining-center_fr.adoc} (89%) rename docs/src/gcode/{tool_compensation_fr.adoc => tool-compensation_fr.adoc} (98%) rename docs/src/getting-started/{About-LinuxCNC_fr.adoc => about-linuxcnc_fr.adoc} (98%) rename docs/src/getting-started/{Getting-LinuxCNC_fr.adoc => getting-linuxcnc_fr.adoc} (100%) rename docs/src/getting-started/{Linux_FAQ_fr.adoc => linux-faq_fr.adoc} (100%) rename docs/src/getting-started/{Running-LinuxCNC_fr.adoc => running-linuxcnc_fr.adoc} (100%) rename docs/src/getting-started/{System_Requirements_fr.adoc => system-requirements_fr.adoc} (100%) rename docs/src/getting-started/{Updating_LinuxCNC_fr.adoc => updating-linuxcnc_fr.adoc} (100%) rename docs/src/motion/{pid_theory_fr.adoc => pid-theory_fr.adoc} (100%) rename docs/src/motion/{tweaking_steppers_fr.adoc => tweaking-steppers_fr.adoc} (100%) diff --git a/docs/src/Master_User_fr.adoc b/docs/src/Master_User_fr.adoc index ffcb1378429..96681d8266a 100644 --- a/docs/src/Master_User_fr.adoc +++ b/docs/src/Master_User_fr.adoc @@ -38,9 +38,9 @@ include::gui/tklinuxcnc_fr.adoc[] = L'utilisation de LinuxCNC :leveloffset: 1 include::user/user-concepts_fr.adoc[] -include::gcode/machining_center_fr.adoc[] +include::gcode/machining-center_fr.adoc[] include::gcode/coordinates_fr.adoc[] -include::gcode/tool_compensation_fr.adoc[] +include::gcode/tool-compensation_fr.adoc[] include::gcode/overview_fr.adoc[] include::gcode/gcode_fr.adoc[] include::gcode/m-code_fr.adoc[] @@ -57,4 +57,3 @@ include::common/gpld-copyright.adoc[] // vim: set syntax=asciidoc: - diff --git a/docs/src/config/images/stepconf-advanced_fr.png b/docs/src/config/images/stepconf-advanced_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..9c850f3c9359ffac0339676092d662f2aed3bdeb GIT binary patch literal 20338 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 YbfZ4yVDNRIrPmH4xY?CbgR9a10&)i5A^-pY literal 0 HcmV?d00001 diff --git a/docs/src/config/images/stepconf-axis_fr.png b/docs/src/config/images/stepconf-axis_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3f818bd831dfde3cb48f7babf18354118988c3 GIT binary patch literal 18738 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 N44$rjF6*2UngFn{n*RU* literal 0 HcmV?d00001 diff --git a/docs/src/config/images/stepconf-basic_fr.png b/docs/src/config/images/stepconf-basic_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..937c63acd1007dd75e4f9b69164551d55393bcac GIT binary patch literal 25076 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

P=N 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 ZoUQyXNNmY608{xB$_nc8d2$y1{|7Az^V9$U literal 0 HcmV?d00001 diff --git a/docs/src/config/images/stepconf-config_fr.png b/docs/src/config/images/stepconf-config_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..4a777e744fcafeed119fab0f8f0c56a1e42c15e4 GIT binary patch literal 10933 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 literal 0 HcmV?d00001 diff --git a/docs/src/config/images/stepconf-pinout_fr.png b/docs/src/config/images/stepconf-pinout_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..25e93b5a3b5c1164ea99b325f98a737a25b2be63 GIT binary patch literal 18053 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 literal 0 HcmV?d00001 diff --git a/docs/src/config/images/stepconf-spindle_fr.png b/docs/src/config/images/stepconf-spindle_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..6e5c3f164d6f7e770b33d124b1e62350b248c1ad GIT binary patch literal 10216 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 J-aVuD{|k!Ro7eyV literal 0 HcmV?d00001 diff --git a/docs/src/config/images/stepconf-test_fr.png b/docs/src/config/images/stepconf-test_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..e0ba714df8f6545f43365ccabc90d5a0c4e9eaca GIT binary patch literal 6216 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 F{1;^VP(=U$ literal 0 HcmV?d00001 diff --git a/docs/src/config/ini-homing.adoc b/docs/src/config/ini-homing.adoc index e34579094c3..7d176932a23 100644 --- a/docs/src/config/ini-homing.adoc +++ b/docs/src/config/ini-homing.adoc @@ -1,4 +1,5 @@ :lang: en +:toc: [[cha:homing-configuration]] = Homing Configuration diff --git a/docs/src/config/ini_config_fr.adoc b/docs/src/config/ini_config_fr.adoc index d21c189817b..eb1e2f6361b 100644 --- a/docs/src/config/ini_config_fr.adoc +++ b/docs/src/config/ini_config_fr.adoc @@ -1,9 +1,8 @@ :lang: fr :toc: -= Configuration de LinuxCNC - [[cha:ini-configuration]] += Configuration de LinuxCNC == Script de lancement @@ -951,7 +950,7 @@ puis 'Calibration'. === Section [HOMING] Les paramètres suivants sont relatifs aux prises d'origine, pour plus -d'informations, lire <>. +d'informations, lire <>. * 'HOME = 0.0' - La position à laquelle le mobile ira à la fin de la séquence de prise d'origine. diff --git a/docs/src/config/ini_homing_fr.adoc b/docs/src/config/ini_homing_fr.adoc index 52f06437f07..3a7f64ce794 100644 --- a/docs/src/config/ini_homing_fr.adoc +++ b/docs/src/config/ini_homing_fr.adoc @@ -1,9 +1,9 @@ :lang: fr :toc: -= Prise d'origine - [[sec:Prises-d-origine]] +[[cha:homing-configuration]] += Prise d'origine == La prise d'origine diff --git a/docs/src/getting-started/stepconf_fr.adoc b/docs/src/config/stepconf_fr.adoc similarity index 99% rename from docs/src/getting-started/stepconf_fr.adoc rename to docs/src/config/stepconf_fr.adoc index 88c4f601f60..633160082ce 100644 --- a/docs/src/getting-started/stepconf_fr.adoc +++ b/docs/src/config/stepconf_fr.adoc @@ -1,12 +1,10 @@ :lang: fr -= Assistant graphique de configuration StepConf - [[cha:Assistant-graphique-StepConf]] (((Assistant stepconf))) += Assistant graphique de configuration StepConf -[[sec:Introduction]] -== Introduction -(((Introduction))) +[[sec:gettingstarted-stepconf-introduction]] +== Introduction(((Introduction))) LinuxCNC est capable de contrôler un large éventail de machines utilisant de nombreuses interfaces matérielles différentes. diff --git a/docs/src/getting-started/stepper_quickstart_fr.adoc b/docs/src/config/stepper-quickstart_fr.adoc similarity index 100% rename from docs/src/getting-started/stepper_quickstart_fr.adoc rename to docs/src/config/stepper-quickstart_fr.adoc diff --git a/docs/src/config/stepper_fr.adoc b/docs/src/config/stepper_fr.adoc index 511aee734b8..0ea954426da 100644 --- a/docs/src/config/stepper_fr.adoc +++ b/docs/src/config/stepper_fr.adoc @@ -1,12 +1,10 @@ :lang: fr :toc: -= Configuration d'un système pas/direction (dir/step) - [[cha:config-steppers]] += Configuration d'un système pas/direction (dir/step) - -[[sec:Introduction]] +[[sec:config-stepper-introduction]] == Introduction Ce chapitre décrit quelques uns des réglages les plus fréquents, sur diff --git a/docs/src/docs.xml b/docs/src/docs.xml index ca5d796f2a6..9790823c579 100644 --- a/docs/src/docs.xml +++ b/docs/src/docs.xml @@ -203,7 +203,7 @@ - + @@ -220,7 +220,7 @@ - + diff --git a/docs/src/drivers/GS2_fr.adoc b/docs/src/drivers/gs2_fr.adoc similarity index 100% rename from docs/src/drivers/GS2_fr.adoc rename to docs/src/drivers/gs2_fr.adoc diff --git a/docs/src/drivers/hostmot2_fr.adoc b/docs/src/drivers/hostmot2_fr.adoc index 129a5b6d25f..fe225a1832a 100644 --- a/docs/src/drivers/hostmot2_fr.adoc +++ b/docs/src/drivers/hostmot2_fr.adoc @@ -21,21 +21,21 @@ different Anything I/O boards. (This list is incomplete, check the hostmot2-firmware distribution for up-to-date firmware lists.) * 3x20 (144 I/O pins): using hm2_pci module - - 24-channel servo - - 16-channel servo plus 24 step/dir generators + - 24-channel servo + - 16-channel servo plus 24 step/dir generators * 5i22 (96 I/O pins): using hm2_pci module - - 16-channel servo - - 8-channel servo plus 24 step/dir generators + - 16-channel servo + - 8-channel servo plus 24 step/dir generators * 5i20, 5i23, 4i65, 4i68 (72 I/O pins): using hm2_pci module - - 12-channel servo - - 8-channel servo plus 4 step/dir generators - - 4-channel servo plus 8 step/dir generators + - 12-channel servo + - 8-channel servo plus 4 step/dir generators + - 4-channel servo plus 8 step/dir generators * 7i43 (48 I/O pins): using hm2_7i43 module - - 8-channel servo (8 PWM generators & 8 encoders) - - 4-channel servo plus 4 step/dir generators + - 8-channel servo (8 PWM generators & 8 encoders) + - 4-channel servo plus 4 step/dir generators == Installing Firmware @@ -62,8 +62,9 @@ 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: - loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=3 - num_pwmgens=3 num_stepgens=1" +---- +loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=3 num_pwmgens=3 num_stepgens=1" +---- The config parameters are described in the hostmot2 man page. @@ -235,8 +236,8 @@ 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. -.5i20 HAL Pins[[cap:5i20-HAL-Pins]] - +[[cap:5i20-HAL-Pins]] +.5i20 HAL Pins image::images/5i20-halpins.png["5i20 HAL Pins"] == Configurations diff --git a/docs/src/drivers/mitsub_vfd.adoc b/docs/src/drivers/mitsub-vfd.adoc similarity index 100% rename from docs/src/drivers/mitsub_vfd.adoc rename to docs/src/drivers/mitsub-vfd.adoc diff --git a/docs/src/drivers/pico_ppmc_fr.adoc b/docs/src/drivers/pico-ppmc_fr.adoc similarity index 100% rename from docs/src/drivers/pico_ppmc_fr.adoc rename to docs/src/drivers/pico-ppmc_fr.adoc diff --git a/docs/src/drivers/servo_to_go_fr.adoc b/docs/src/drivers/servo-to-go_fr.adoc similarity index 100% rename from docs/src/drivers/servo_to_go_fr.adoc rename to docs/src/drivers/servo-to-go_fr.adoc diff --git a/docs/src/examples/mpg_fr.adoc b/docs/src/examples/mpg_fr.adoc index bd2f40735c7..bcd9ea2affa 100644 --- a/docs/src/examples/mpg_fr.adoc +++ b/docs/src/examples/mpg_fr.adoc @@ -1,10 +1,9 @@ :lang: fr :toc: +[[cha:mpg-pendant]] = Utilisation d'une manivelle -[[cha:Manivelle-Electronique]] - Cet exemple explique comment relier une manivelle, facile à trouver aujourd'hui sur le marché. Cet exemple utilisera la manivelle MPG3 avec une carte d'interface C22 de chez CNC4PC et un second port parallèle diff --git a/docs/src/examples/spindle.adoc b/docs/src/examples/spindle.adoc index 3ad6c9225b2..52deb81271d 100644 --- a/docs/src/examples/spindle.adoc +++ b/docs/src/examples/spindle.adoc @@ -1,14 +1,14 @@ :lang: en [[cha:spindle-control]] += Spindle Control + 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... -= Spindle Control - == 0-10v Spindle Speed(((0-10v Spindle Speed Example))) If your spindle speed is controlled by an analog signal, @@ -203,7 +203,7 @@ net spindle-phase-b encoder.3.phase-B net spindle-index encoder.3.phase-Z <= parport.0.pin-11-in ---- -[[sec:Vitesse-Broche-Atteinte]] +[[sec:spindle-at-speed]] === Spindle At Speed(((Spindle At Speed Example))) To enable LinuxCNC to wait for the spindle to be at speed before executing diff --git a/docs/src/examples/spindle_es.adoc b/docs/src/examples/spindle_es.adoc index 07a3b4540d8..b7ed54376e4 100644 --- a/docs/src/examples/spindle_es.adoc +++ b/docs/src/examples/spindle_es.adoc @@ -1,6 +1,7 @@ :lang: es [[cha:spindle-control]] += Control de husillo(((0-10v Spindle Speed Example))) LinuxCNC puede controlar hasta 8 husillos. El número se establece en el archivo INI. Todos los ejemplos a continuación se refieren a una configuración de husillo único con @@ -8,10 +9,6 @@ pines de control del husillo con nombres como spindle.0... En el caso de una máquina de husillos múltiples, todo lo que cambia es que existen pines adicionales con nombres como spindle.6... -= Control de husillo - -(((0-10v Spindle Speed Example))) - == Velocidad del husillo 0-10v Si la velocidad de su husillo está controlada por una señal analógica, @@ -220,9 +217,8 @@ net spindle-phase-b encoder.3.phase-B net spindle-index encoder.3.phase-Z <= parport.0.pin-11-in ---- -(((Spindle At Speed Example))) - -=== Husillo a velocidad +[[sec:spindle-at-speed]] +=== Husillo a velocidad(((Spindle At Speed Example))) Para permitir que LinuxCNC espere a que el eje esté a velocidad antes de ejecutar una serie de movimientos, debe establecer spindle.N.at-speed en true cuando diff --git a/docs/src/examples/spindle_fr.adoc b/docs/src/examples/spindle_fr.adoc index 5e0fdf55950..b007b958701 100644 --- a/docs/src/examples/spindle_fr.adoc +++ b/docs/src/examples/spindle_fr.adoc @@ -1,9 +1,14 @@ :lang: fr :toc: +[[cha:spindle-control]] = Contrôle de la broche -[[cha:Controle-broche]] +LinuxCNC puede controlar hasta 8 husillos. El número se establece en el archivo INI. +Todos los ejemplos a continuación se refieren a una configuración de husillo único con +pines de control del husillo con nombres como spindle.0... +En el caso de una máquina de husillos múltiples, todo lo que cambia es que +existen pines adicionales con nombres como spindle.6... == Vitesse broche en 0-10V (((Vitesse broche en 0-10V))) @@ -17,6 +22,8 @@ de la broche sera de 5000 tr/mn pour une tension de commande de 10V. 10 Volts/5000 tr/mn = 0.002 Volts par tr/mn notre facteur d'échelle sera donc de 0.002. +image::images/spindle-math.png[align="center"] + Si la carte DAC ne dispose pas d'une fonction échelle, il est nécessaire d'ajouter un composant _scale_ (echelle) au fichier hal pour calibrer _spindle.N.speed-out_ entre 0 et 10 comme demandé par le variateur @@ -171,9 +178,8 @@ net spindle-phase-a <= parport.0.pin-10-in net spindle-index <= parport.0.pin-11-in ---- -[[sec:Vitesse-Broche-Atteinte]] -== Vitesse broche atteinte -(((Vitesse broche atteilte))) +[[sec:spindle-at-speed]] +== Vitesse broche atteinte(((Vitesse broche atteilte))) Si le moteur de broche possède un retour d'information de vitesse provenant d'un codeur, il est alors possible d'utiliser la variable _spindle.N.at-speed_ diff --git a/docs/src/gcode/coordinates_fr.adoc b/docs/src/gcode/coordinates_fr.adoc index ce2fb0a5eb8..17c2fed2b4b 100644 --- a/docs/src/gcode/coordinates_fr.adoc +++ b/docs/src/gcode/coordinates_fr.adoc @@ -1,10 +1,9 @@ :lang: fr :toc: -= Systèmes de coordonnées et décalages - [[cha:Systemes-de-coordonnees]] - +[[cha:coordinate-system]] += Systèmes de coordonnées et décalages == Introduction @@ -46,7 +45,7 @@ ligne où un mouvement basé sur les coordonnées machine est souhaité. [[fig:decalages-ilots]] == Décalages pièce (G54 à G59.3) -image::images/offsets.png[alt="Exemple de décalages pour 8 ilots"] +image::images/offsets.png["Exemple de décalages pour 8 ilots"] .Exemple de décalages pour 8 ilots @@ -107,7 +106,7 @@ vers sa nouvelle position d'origine. Contrairement à G53, les commandes G54 à G59.3 sont modales. Elles agissent sur toutes les lignes de G-code du programme après qu'une ait été rencontrée. Voyons le programme qui pourrait être écrit à l'aide de la figure -<>, il suffira d'un seul point de +<>, il suffira d'un seul point de référence pour chacune des pièces pour faire tout le travail. Le code suivant est proposé comme exemple pour faire un rectangle, il utilisera les décalages G55 que nous avons expliqué précédemment. @@ -166,13 +165,13 @@ pour une description complète). * 'G10 L2 P(pièce 1-9)' - Ajuste les valeurs d'offset. La position courante reste inchangée. - (voir la section<> pour les détails) + (voir la section<> pour les détails) * 'G10 L20 P(pièce 1-9)' - Ajuste les valeurs d'offset de sorte que la position courante devienne la position donnée en paramètre. - (Voir la section <> pour les détails) + (Voir la section <> pour les détails) -[[sec:G92-Decalages]] +[[gcode:g92]] == Décalages d'axes G92 G92 est la plus incomprise et la plus maligne des commandes @@ -360,4 +359,3 @@ utiliseront également les décalages G92. En outre, cela permettrait d'éviter d'écrire les valeurs de G92 lorsque vous arrêtez LinuxCNC et donc, d'éviter de les recharger quand vous démarrez à nouveau le programme. - diff --git a/docs/src/gcode/gcode_fr.adoc b/docs/src/gcode/gcode_fr.adoc index cda44d46b66..f7ee3d84019 100644 --- a/docs/src/gcode/gcode_fr.adoc +++ b/docs/src/gcode/gcode_fr.adoc @@ -51,69 +51,64 @@ chose. [width="75%", options="header", cols="2^,5<"] |============================================================================== -|Sections | Descriptions -|<> | Interpolation linéaire en vitesse rapide -|<> | Interpolation linéaire en vitesse travail -|<> | Interpolation circulaire sens horaire/anti-horaire -|<> | Temporisation -|<> |Spline cubique -|<> |B-Spline quadratique -|<> |NURBS, ajout point de contrôle -|<> |NURBS, exécute -|<> | Mode diamètre (sur les tours) -|<>| Mode rayon (sur les tours) -|<> | Ajuste les valeurs de l'outil en table d'outils -|<> | Modifie les valeurs de l'outil dans la table d'outils -|<> | Fixe les valeurs de l'outil dans la table d'outils -|<> | Fixe l'origine d'un système de coordonnées -|<> | Fixe l'origine du système de coord. aux valeurs calculées -|<> | Choix du plan de travail -|<> | Unités machine -|<> | Aller à une position prédéfinie -|<> | Aller à une position -prédéfinie -|<> | Mouvement avec broche synchronisée -|<> | Taraudage rigide -|<> | Mesures au palpeur -|<> | Révocation de la compensation de rayon d'outil -|<> | Compensation de rayon d'outil -|<> | Comp. dynamique de rayon d'outil à gauche/à droite -|<> | Compensation de longueur d'outil d'après une table d'outils -|<> | Compensation dynamique de longueur d'outil -|<> | Révocation de la compensation de -longueur d'outil -|<> | Déplacements en coordonnées -machine (Absolues) -|<> | Choix du système de coordonnées (1 à 9) -|<> | Mode trajectoire exacte/mode arrêts exacts -|<>| Mode trajectoire continue avec tolérance -|<> | Cycle de perçage avec brise copeau -|<> | Cycle de filetage multipasses (tour) -|<> | Révocation des codes modaux -|<> | Cycle de perçage -|<> | Autres cycles de perçage -|<> | Perçage avec débourrage -|<> | Taraudage à droite '(pas encore implémenté)' -|<> | Alésage, retrait en vitesse travail -|<> | Alésage, retrait en vitesse rapide -|<> | Cycle d'alésage arrière '(pas encore implémenté)' -|<> | Cycle alésage, Stop, Retrait manuel -'(pas encore implémenté)' -|<> | Cycle d'alésage avec tempo, recul vitesse travail -|<> | Types de déplacement -|<> | Arc I,J,K, centre absolu ou relatif -|<> | Décalages d'origines avec mise à jour des paramètres -|<> | Révocation des décalages d'origine -|<> | Applique contenu des paramètres aux déc. d'origine -|<> | Modes de vitesse -|<> | Vitesse de coupe constante (IPM ou m/mn) -|<> | Vitesse en tours par minute -|<> | Options de retrait des cycles de perçage +|Sections | Descriptions +|<> | Interpolation linéaire en vitesse rapide +|<> | Interpolation linéaire en vitesse travail +|<> | Interpolation circulaire sens horaire/anti-horaire +|<> | Temporisation +|<> | Spline cubique +|<> | B-Spline quadratique +|<> | NURBS, ajout point de contrôle +|<> | NURBS, exécute +|<> | Mode diamètre (sur les tours) +|<> | Mode rayon (sur les tours) +|<> | Ajuste les valeurs de l'outil en table d'outils +|<> | Modifie les valeurs de l'outil dans la table d'outils +|<> | Fixe les valeurs de l'outil dans la table d'outils +|<> | Fixe l'origine d'un système de coordonnées +|<> | Fixe l'origine du système de coord. aux valeurs calculées +|<> | Choix du plan de travail +|<> | Unités machine +|<> | Aller à une position prédéfinie +|<> | Aller à une position prédéfinie +|<> | Mouvement avec broche synchronisée +|<> | Taraudage rigide +|<> | Mesures au palpeur +|<> | Révocation de la compensation de rayon d'outil +|<> | Compensation de rayon d'outil +|<> | Comp. dynamique de rayon d'outil à gauche/à droite +|<> | Compensation de longueur d'outil d'après une table d'outils +|<> | Compensation dynamique de longueur d'outil +|<> | Révocation de la compensation de longueur d'outil +|<> | Déplacements en coordonnées machine (Absolues) +|<> | Choix du système de coordonnées (1 à 9) +|<> | Mode trajectoire exacte/mode arrêts exacts +|<> | Mode trajectoire continue avec tolérance +|<> | Cycle de perçage avec brise copeau +|<> | Cycle de filetage multipasses (tour) +|<> | Révocation des codes modaux +|<> | Cycle de perçage +|<> | Autres cycles de perçage +|<> | Perçage avec débourrage +|<> | Taraudage à droite '(pas encore implémenté)' +|<> | Alésage, retrait en vitesse travail +|<> | Alésage, retrait en vitesse rapide +|<> | Cycle d'alésage arrière '(pas encore implémenté)' +|<> | Cycle alésage, Stop, Retrait manuel '(pas encore implémenté)' +|<> | Cycle d'alésage avec tempo, recul vitesse travail +|<> | Types de déplacement +|<> | Arc I,J,K, centre absolu ou relatif +|<> | Décalages d'origines avec mise à jour des paramètres +|<> | Révocation des décalages d'origine +|<> | Applique contenu des paramètres aux déc. d'origine +|<> | Modes de vitesse +|<> | Vitesse de coupe constante (IPM ou m/mn) +|<> | Vitesse en tours par minute +|<> | Options de retrait des cycles de perçage |============================================================================== -[[sec:G0]] -== G0 Interpolation linéaire en vitesse rapide -(((G0 Interpolation linéaire en vitesse rapide)))(((rapide))) +[[gcode:g0]] +== G0 Interpolation linéaire en vitesse rapide(((G0 Interpolation linéaire en vitesse rapide)))(((rapide))) ---- G0 axes @@ -134,16 +129,14 @@ G0 X1 Y-2.3 (mouvement linéaire en vitesse rapide du point courant à X1 Y-2.3) M2 (fin de programme) ---- -* Voir les sections <> et <> pour plus -d'informations. +* Voir les sections <> et <> pour plus d'informations. Si la compensation d'outil est active, le mouvement sera différent de celui décrit ci-dessus, voir la section <>. Si 'G53' est programmé sur la même ligne, le mouvement sera également -différent, voir la section <>. +différent, voir la section <>. //// Si un mouvement 'G0' déplace seulement des axes rotatifs et que la @@ -157,9 +150,8 @@ C'est une erreur si: * Un mot d'axe est indiqué sans valeur réelle. * Un mot d'axe est indiqué qui n'est pas configuré. -[[sec:G1]] -== G1 Interpolation linéaire en vitesse travail -(((G1 Interpolation linéaire en vitesse travail))) +[[gcode:g1]] +== G1 Interpolation linéaire en vitesse travail(((G1 Interpolation linéaire en vitesse travail))) ---- G1 axes @@ -182,15 +174,14 @@ Z1 F25 (mouvement linéaire de l'axe Z à 25 unités/mn vers Z1) M2 (Fin de programme) ---- -* Voir les sections <> et <> pour plus +* Voir les sections <> et <> pour plus d'informations. Si la compensation d'outil est active, le mouvement sera différent de celui décrit ci-dessus, voir la section -<>. +<>. Si 'G53' est programmé sur la même ligne, le mouvement sera également -différent, voir la section <>. +différent, voir la section <>. C'est une erreur si: @@ -198,10 +189,8 @@ C'est une erreur si: * - un mot d'axe est indiqué sans valeur réelle. * - un mot d'axe est indiqué qui n'est pas configuré. -[[sec:G2-G3]] -== G2, G3 Interpolation circulaire en vitesse travail -(((G2 Interpolation circulaire sens horaire))) -(((G3 Interpolation circulaire anti-horaire))) +[[gcode:g2-g3]] +== G2, G3 Interpolation circulaire en vitesse travail(((G2 Interpolation circulaire sens horaire)))(((G3 Interpolation circulaire anti-horaire))) ---- G2 ou G3 axes décalages (format centre) @@ -244,10 +233,10 @@ les autres axes XYZ. De telles lignes sont rarement programmées. Si la compensation d'outil est active, le mouvement sera différent de celui décrit ci-dessus, voir les sections -<> et <>. +<> et <>. Le centre de l'arc est absolu ou relatif, tel que fixé par - <>, respectivement. + <>, respectivement. C'est une erreur si: @@ -286,7 +275,7 @@ Aucun mot d'axe mais un ou plusieurs décalages doivent être programmés pour u cercle complet. Le mot 'P', par défaut à 1, est facultatif. Pour d'avantage d'information sur les arcs en mode relatif, voir la - <>. + <>. .Arc en mode distance absolue Les décalages par rapport au centre de l'arc sont des distances absolues depuis @@ -299,7 +288,7 @@ Aucun mots d'axe mais tous les décalages doivent être programmés pour un cercle complet. Le mot 'P', par défaut à 1, est facultatif. Pour d'avantage d'information sur les arcs en mode absolu, voir la -<>. +<>. .Plan XY (G17) ---- @@ -485,9 +474,8 @@ Cet exemple signifie, faire un mouvement en arc ou hélicoïdal en sens horaire avec un rayon de 20. Si la valeur de départ de Z est 5, ce sera un arc de cercle parallèle au plan XY sinon, ce sera un arc hélicoïdal. -[[sec:G4-Tempo]] -== G4 Tempo -(((G4 Temporisation))) +[[gcode:g4]] +== G4 Tempo(((G4 Temporisation))) ---- G4 P- @@ -502,9 +490,8 @@ C'est une erreur si: * Le nombre P est négatif ou n'est pas spécifié. -[[sec:G5-Cubic-Spline]] -== G5 Spline cubique -(((G5 Cubic spline))) +[[gcode:g5]] +== G5 Spline cubique(((G5 Cubic spline))) ---- G5 X- Y- P- Q- @@ -548,9 +535,8 @@ C'est une erreur si: * Un axe autre que X ou Y est spécifié * Le plan courant n'est pas G17 -[[sec:G5_1-Quadratic-Spline]] -== G5.1 Spline quadratique -(((G5.1 Quadratic spline))) +[[gcode:g5.1]] +== G5.1 Spline quadratique(((G5.1 Quadratic spline))) ---- G5.1 X- Y- I- J- @@ -577,9 +563,8 @@ C'est une erreur si: * Un autre axe que X ou Y est spécifié * Le plan actif n'est pas G17 -[[sec:G5_2-G5_3-NURBS]] -== G5.2 G5.3 Block NURBS -(((G5.2 G5.3 NURBS Block))) +[[gcode:g5.2-g5.3]] +== G5.2 G5.3 Block NURBS(((G5.2 G5.3 NURBS Block))) ---- G5.2 @@ -629,9 +614,8 @@ D'autres informations sur NURBS sont disponibles ici: http://wiki.linuxcnc.org/cgi-bin/wiki.pl?NURBS[http://wiki.linuxcnc.org/cgi-bin/wiki.pl?NURBS] -[[sec:G7-Mode-diametre]] -== G7 Mode diamètre sur les tours -(((G7 Mode diamètre sur les tours))) +[[gcode:g7]] +== G7 Mode diamètre sur les tours(((G7 Mode diamètre sur les tours))) ---- G7 @@ -642,9 +626,8 @@ mode diamètre, les mouvements de l'axe X font la moitié de la cote programmée. Par exemple, X10 placera l'outil à 5 unités du centre, ce qui produira bien une pièce d'un diamètre de 10 unités. -[[sec:G8-Mode-rayon]] -== G8 Mode rayon sur les tours -(((G8 Mode rayon sur les tours))) +[[gcode:g8]] +== G8 Mode rayon sur les tours(((G8 Mode rayon sur les tours))) ---- G8 @@ -656,9 +639,8 @@ qui signifie que X10 placera l'outil à 10 unités du centre et aura pour résultat une pièce d'un diamètre de 20 unités. G8 est le mode par défaut à la mise sous tension. -[[sec:G10-L1]] -== G10 L1 Ajustements dans la table d'outils -(((G10 L1 Ajustements dans la table d'outils))) +[[gcode:g10-l1]] +== G10 L1 Ajustements dans la table d'outils(((G10 L1 Ajustements dans la table d'outils))) ---- G10 L1 P- axes @@ -689,9 +671,8 @@ C'est une erreur si: D'autres informations sur l'orientation <>. -[[sec:G10-L2]] -== G10 L2 Établissement de l'origine d'un système de coordonnées -(((G10 L2 Établissement de l'origine d'un système de coordonnées))) +[[gcode:g10-l2]] +== G10 L2 Établissement de l'origine d'un système de coordonnées(((G10 L2 Établissement de l'origine d'un système de coordonnées))) ---- G10 L2 P- @@ -771,12 +752,10 @@ G10 L2 P1 X0 Y0 Z0 (révoque les décalages en X, Y et Z du système N°1) L'exemple précédent fixe les origines XYZ du système de coordonnées G54, à l'origine machine. -Les systèmes de coordonnées <>. +Les systèmes de coordonnées <>. -[[sec:G10-L10]] -== G10 L10 modifie les offsets d'outil dans la table d'outils -(((G10 L10 modifie les offsets d'outil dans la table d'outils))) +[[gcode:g10-l10]] +== G10 L10 modifie les offsets d'outil dans la table d'outils(((G10 L10 modifie les offsets d'outil dans la table d'outils))) ---- G10 L10 P- axes @@ -801,7 +780,7 @@ G43 (recharge l'offset de longueur d'outil depuis la table d'outils modifiée) M2 (fin de programme) ---- Pour d'autres détals voir les commandes <>, -<> et <>/<>. +<> et <>/<>. C'est une erreur si: @@ -809,9 +788,8 @@ C'est une erreur si: * Le mot P n'est pas spécifié. * Le mot P ne correspond pas à un numéro d'outil valide de la table d'outils. -[[sec:G10-L11]] -== G10 L11 modifie les offsets d'outil dans la table d'outils -(((G10 L11 modifie les offsets d'outil dans la table d'outils))) +[[gcode:g10-l11]] +== G10 L11 modifie les offsets d'outil dans la table d'outils(((G10 L11 modifie les offsets d'outil dans la table d'outils))) ---- G10 L11 P- axes @@ -838,9 +816,8 @@ C'est une erreur si: * Le mot P n'est pas spécifié. * Le mot P ne correspond pas à un numéro d'outil valide de la table d'outils. -[[sec:G10-L20]] -== G10 L20 Établissement de l'origine d'un système de coordonnées -(((G10 L20 Établissement de l'origine d'un système de coordonnées))) +[[gcode:g10-l20]] +== G10 L20 Établissement de l'origine d'un système de coordonnées(((G10 L20 Établissement de l'origine d'un système de coordonnées))) ---- G10 L20 P- axes @@ -862,11 +839,8 @@ C'est une erreur si: * Le nombre P n'est pas évalué comme une entier compris entre 0 et 9. * Un axe non défini dans la configuration est programmé. -[[sec:G17-G18-G19]] -== G17 à G19.1 Choix du plan de travail -(((G17 Plan XY))) -(((G18 Plan XZ))) -(((G19 Plan YZ))) +[[gcode:g17-g19.1]] +== G17 à G19.1 Choix du plan de travail(((G17 Plan XY)))(((G18 Plan XZ)))(((G19 Plan YZ))) Ces codes sélectionnent le plan de travail courant comme décrit ci-dessous: @@ -880,9 +854,9 @@ Ces codes sélectionnent le plan de travail courant comme décrit ci-dessous: Les plans UV, WU et VW ne supportent pas les arcs. Il est de bonne pratique d'inclure la sélection du plan de travail dans le préambule du programme G-code. Les effets de la sélection d'un plan de travail sont discutés dans la section -<>. +<>. -[[sec:G20-G21-Unites-Machine]] +[[gcode:g20-g21]] == G20, G21 Choix des unités machine (((G20 Pouce))) (((G21 Millimètre))) @@ -894,10 +868,8 @@ C'est toujours une bonne pratique de programmer soit 'G20', soit 'G21', dans le préambule du programme, avant tout mouvement et de ne plus en changer ailleurs dans le programme. -[[sec:G28-G28_1-Aller-a-une-position]] -== G28, G28.1 Aller à une position prédéfinie -(((G28))) -(((G28.1))) +[[gcode:g28-g28.1]] +== G28, G28.1 Aller à une position prédéfinie(((G28)))(((G28.1))) [WARNING] Pour une bonne répétabilité de la position et que la position soit correctement @@ -929,10 +901,8 @@ C'est une erreur si: * La compensation d'outil est active. -[[sec:G30-G30_1-Aller-a-une-position-predefinie]] -== G30, G30.1 Aller à une position prédéfinie -(((G30))) -(((G30.1))) +[[gcode:g30-g30.1]] +== G30, G30.1 Aller à une position prédéfinie(((G30)))(((G30.1))) [WARNING] Pour une bonne répétabilité de la position et que la position soit correctement @@ -966,9 +936,8 @@ C'est une erreur si: * La compensation de d'outil est active. -[[sec:G33-Broche-synchronisee]] -== G33 Mouvement avec broche synchronisée -(((G33 Mouvement avec broche synchronisée))) +[[gcode:g33]] +== G33 Mouvement avec broche synchronisée(((G33 Mouvement avec broche synchronisée))) ---- G33 X- Y- Z- K- @@ -1020,8 +989,8 @@ Z0.1 (mouvement en vitesse rapide à Z0.1) M2 (fin de programme) ---- -* Voir les sections <>, <> -et <> pour plus d'informations. +* Voir les sections <>, <> +et <> pour plus d'informations. C'est une erreur si: @@ -1030,9 +999,8 @@ C'est une erreur si: * Le mouvement linéaire requis excède les limites de vitesse machine en raison de la vitesse de broche. -[[sec:G33_1-Taraudage-rigide]] -== G33.1 Taraudage Rigide -(((G33.1 Taraudage rigide))) +[[gcode:g33.1]] +== G33.1 Taraudage Rigide(((G33.1 Taraudage rigide))) ---- G33.1 X- Y- Z- K- @@ -1083,8 +1051,8 @@ G33.1 Z-0.750 K0.05 (et une profondeur de filet de 0.750) M2 (fin de programme) ---- -* Voir les sections <>, <> -et <> pour plus d'informations. +* Voir les sections <>, <> +et <> pour plus d'informations. C'est une erreur si: @@ -1093,9 +1061,8 @@ C'est une erreur si: * Le mouvement linéaire requis excède les limites de vitesse machine en raison d'une vitesse de broche trop élevée. -[[sec:G38-x-Palpeur]] -== G38.x Mesure au palpeur -(((G38.2 Palpeur)))(((G38.3 Palpeur)))(((G38.4 Palpeur)))(((G38.5 Palpeur))) +[[gcode:g38]] +== G38.x Mesure au palpeur(((G38.2 Palpeur)))(((G38.3 Palpeur)))(((G38.4 Palpeur)))(((G38.5 Palpeur))) ---- G38.x axes @@ -1174,9 +1141,8 @@ C'est une erreur si: * La vitesse travail est à zéro. * Le palpeur est déjà au contact de la cible. -[[sec:G40]] -== G40 Révocation de la compensation de rayon d'outil -(((G40 Révocation de la compensation de rayon))) +[[gcode:g40]] +== G40 Révocation de la compensation de rayon d'outil(((G40 Révocation de la compensation de rayon))) * 'G40' - révoque la compensation de rayon d'outil. Le mouvement suivant, de sortie de compensation, doit être une droite au moins aussi longue que le @@ -1191,7 +1157,7 @@ G0 X1.6 (mouvement linéaire aussi long que le diamètre d'outil) M2 (fin de programme) ---- -* Voir les sections <> et <> +* Voir les sections <> et <> pour plus d'informations. C'est une erreur si: @@ -1200,10 +1166,8 @@ C'est une erreur si: * Le mouvement suivant la révocation de compensation est inférieur au diamètre de l'outil. -[[sec:G41-G42]] -== G41, G42 Compensation de rayon d'outil -(((G41 Compensation d'outil))) -(((G42 Compensation d'outil))) +[[gcode:g41-g42]] +== G41, G42 Compensation de rayon d'outil(((G41 Compensation d'outil)))(((G42 Compensation d'outil))) ---- G41 (compensation à gauche du profil) @@ -1244,10 +1208,8 @@ C'est une erreur si: * Le plan YZ est le plan de travail actif. * La compensation d'outil est activée alors qu'elle est déjà active. -[[sec:G41_1-G42_1]] -== G41.1, G42.1 Compensation dynamique d'outil -(((G41.1 Compensation dynamique))) -(((G42.1 Compensation dynamique))) +[[gcode:g41.1-g42.1]] +== G41.1, G42.1 Compensation dynamique d'outil(((G41.1 Compensation dynamique)))(((G42.1 Compensation dynamique))) ---- G41.1 D- (à gauche du profil) @@ -1275,9 +1237,8 @@ Plus d'informations sur <>, sur <> et <>. -[[sec:G43]] -== G43 Activation de la compensation de longueur d'outil -(((G43 Activation de la compensation de longueur d'outil))) +[[gcode:g43]] +== G43 Activation de la compensation de longueur d'outil(((G43 Activation de la compensation de longueur d'outil))) * 'H' - Numéro d'outil * 'G43' - Utilise l'outil courant chargé par le dernier Tn M6. G43 modifie les @@ -1300,9 +1261,8 @@ C'est une erreur si: * La valeur de H n'est pas un entier, il est négatif, ou il ne correspond, ni à zéro, ni à un numéro d'outil valide. -[[sec:G43_1]] -== G43.1 Compensation dynamique de longueur d'outil -(((G43.1 Compensation dynamique de longueur d'outil))) +[[gcode:g43.1]] +== G43.1 Compensation dynamique de longueur d'outil(((G43.1 Compensation dynamique de longueur d'outil))) ---- G43.1 axes @@ -1323,8 +1283,8 @@ G43.1 Z0.250 (décale l'outil courant de 0.250, la visu affiche maintenant Z1.250) M2 (fin de programme) ---- -* Voir les sections <> & <> et -<> pour plus d'informations. +* Voir les sections <> & <> et +<> pour plus d'informations. //// Pour utiliser la compensation dynamique de longueur d'outil depuis un @@ -1337,9 +1297,8 @@ C'est une erreur si: * Une commande de mouvement est sur la même ligne que 'G43.1' -[[sec:G49-Revocation-Longueur-Outil]] -== G49 Révocation de la compensation de longueur d'outil -(((G49 Révocation de compensation de longueur d'outil))) +[[gcode:g49]] +== G49 Révocation de la compensation de longueur d'outil(((G49 Révocation de compensation de longueur d'outil))) Pour révoquer la compensation de longueur d'outil, programmer 'G49'. @@ -1347,9 +1306,8 @@ Ce n'est pas une erreur de programmer une compensation qui est déjà utilisée. Ce n'est pas non plus une erreur de révoquer une compensation de longueur d'outil alors qu'aucune n'est couramment utilisée. -[[sec:G53-Mouvement-Coordonnees-Absolues]] -== G53 Mouvement en coordonnées absolues -(((G53 Mouvement en coordonnées absolues))) +[[gcode:g53]] +== G53 Mouvement en coordonnées absolues(((G53 Mouvement en coordonnées absolues))) ---- G53 axes @@ -1372,10 +1330,10 @@ C'est une erreur si: * 'G53' est utilisé sans que G0 ou G1 ne soit actif. * 'G53' est utilisé alors que la compensation d'outil est active. -Étudier le <> et de leurs décalages, pour bien maîtriser ces concepts. +Étudier le <> +et de leurs décalages, pour bien maîtriser ces concepts. -[[sec:G54-a-G59_3]] +[[gcode:g54-g59.3]] == G54 à G59.3 Choix du système de coordonnées * 'G54' - Système de coordonnées pièce 1 @@ -1415,23 +1373,19 @@ C'est une erreur si: * Un de ces G-codes est utilisé alors que la compensation d'outil est active. -Voir la section <> +Voir la section <> pour une vue complète. -[[sec:G61-G61_1]] -== G61, G61.1 Contrôle de trajectoire exacte -(((G61 Trajectoire exacte))) -(((G61.1 Arrêt exact))) -(((Trajectoire contrôlée))) +[[gcode:g61-g61.1]] +== G61, G61.1 Contrôle de trajectoire exacte(((G61 Trajectoire exacte)))(((G61.1 Arrêt exact)))(((Trajectoire contrôlée))) * 'G61' - Met la machine en mode de trajectoire exacte. G61 suivra exactement la trajectoire programmée même si cela doit aboutir à un arrêt complet momentané du mobile. * 'G61.1' - Met la machine en mode arrêts exacts. -[[sec:G64]] -== G64 Contrôle de trajectoire continue avec tolérance -(((Contrôle de trajectoire continue avec tolérance))) +[[gcode:g64]] +== G64 Contrôle de trajectoire continue avec tolérance(((Contrôle de trajectoire continue avec tolérance))) ---- G64 > @@ -1467,9 +1421,8 @@ programmée) Il est de bonne pratique de spécifier un type de contrôle de trajectoire dans le préambule de chaque programme G-code. -[[sec:G73-Percage-avec-brise-copeaux]] -== G73 Cycle de perçage avec brise copeaux -(((G73 Cycle de perçage avec brise copeaux))) +[[gcode:g73]] +== G73 Cycle de perçage avec brise copeaux(((G73 Cycle de perçage avec brise copeaux))) ---- G73 axes R- Q- @@ -1499,7 +1452,7 @@ C'est une erreur si: * La valeur de Q est négative ou égale à zéro. * Le nombre R n'est pas spécifié. -[[sec:G76-Filetage]] +[[gcode:g76]] == G76 Cycle de filetage préprogrammé (((G76 Cycle de filetage multi-passe))) @@ -1631,10 +1584,8 @@ spécifié par L2 E0.045. Les lignes blanches sont les mouvements de coupe. image::images/g76-01.png[alt="Parcours d'outil de l'exemple"] -[[sec:G81-a-G89]] -== Les cycles de perçage G81 à G89 -(((Cycles de perçage G81-G89))) -(((G81-G89, Cycles de perçage))) +[[gcode:g81-g89]] +== Les cycles de perçage G81 à G89(((Cycles de perçage G81-G89)))(((G81-G89, Cycles de perçage))) Les cycles de perçage de 'G81' à 'G89' et la révocation de ces cycle 'G80', sont décrits dans cette section. Des exemples sont donnés plus bas avec @@ -1703,7 +1654,7 @@ La hauteur du mouvement de retrait à la fin de chaque répétition déterminée par le mode de retrait: retrait sur la position initiale de Z, si elle est au dessus de la valeur de R et que le mode de retrait est 'G98', OLD_Z, sinon, à la position de R. Voir la section -<>. +<>. === Erreurs des cycles de perçage @@ -1756,7 +1707,7 @@ première est l'économie de code et la seconde la sécurité offerte par le mouvement préliminaire qui permet de ne pas s'occuper du point de départ du cycle. -[[sec:G80-Revocation-modaux]] +[[gcode:g80]] == G80 Révocation des codes modaux (((G80 Révocation des codes modaux))) @@ -1831,7 +1782,7 @@ comme l'exemple 2 le montre, donne une meilleure lisibilité au programme. Sans ce G80, il ne serait pas aussi évident que tous les blocs compris entre N120 et N200 appartiennent au cycle de perçage. -[[sec:G81-Cycle-de-percage]] +[[gcode:g81]] == G81 Cycle de perçage (((G81 Cycle de perçage))) @@ -1847,7 +1798,7 @@ sur cette page>>. position Z programmée. . Retrait de l'axe Z en vitesse rapide jusqu'au plan de retrait R. -.Exemple 1: G81 en position absolue[[sec:G81-exemple1]] +.Exemple 1: G81 en position absolue[[gcode:g81]] Supposons que la position courante soit, X1, Y2, Z3 dans le plan XY, la ligne de code suivante est interprétée: @@ -1950,7 +1901,7 @@ mouvement en vitesse rapide se terminera en X4 Y5. Alors la hauteur Z sera à 0.6 en dessous de la valeur de R. La fonction de répétition fera encore déplacer Z au même emplacement. -[[sec:G82-Cycle-de-percage]] +[[gcode:g82]] == G82 Cycle de perçage avec temporisation (((G82 Cycle de perçage avec tempo))) @@ -1977,7 +1928,7 @@ Sera équivalent à l'exemple 3 ci-dessus mais avec une temporisation de 2 secondes en fond de trou. -[[sec:G83-Percage-avec-debourrage]] +[[gcode:g83]] == G83 Cycle de perçage avec débourrage (((G83 Cycle de perçage avec débourrage))) @@ -2007,14 +1958,13 @@ C'est une erreur si: * La valeur de Q est négative ou égale à zéro. -[[sec:G84-Taraudage-a-droite]] +[[gcode:g84]] == G84 Cycle de taraudage à droite(((G84 Cycle de taraudage))) Ce code n'est pas encore implémenté dans LinuxCNC. Il est accepté mais son -comportement n'est pas défini. Voir le <>. +comportement n'est pas défini. Voir le <>. -[[sec:G85-Alesage-retrait-travail]] +[[gcode:g85]] == G85 Cycle d'alésage, sans temporisation, retrait en vitesse travail(((G85 Cycle d'alésage))) ---- @@ -2029,9 +1979,8 @@ cette page>>. . Un déplacement de l'axe Z seul en vitesse travail, vers la position Z programmée. . Retrait de l'axe Z en vitesse travail vers le plan de retrait. -[[sec:G86-Alesage-retrait-rapide]] -== G86 Cycle d'alésage, arrêt de broche, retrait en vitesse rapide -(((G86 Cycle d'alésage))) +[[gcode:g86]] +== G86 Cycle d'alésage, arrêt de broche, retrait en vitesse rapide(((G86 Cycle d'alésage))) ---- G86 (X- Y- Z-) or (U- V- W-) R- L- P- @@ -2054,23 +2003,20 @@ erreur si: - La broche ne tourne pas avant que ce cycle ne soit exécuté. -[[sec:G87-Back-Boring]] -== G87 Alésage inverse -(((G87 Alésage inverse))) +[[gcode:g87]] +== G87 Alésage inverse(((G87 Alésage inverse))) Ce code n'est pas encore implémenté dans LinuxCNC. Il est accepté mais son comportement n'est pas défini. -[[sec:G88-Alesage-Retrait-Manuel-Out]] -== G88 Alésage, arrêt de broche, retrait en manuel -(((G88 Cycle d'alésage))) +[[gcode:g88]] +== G88 Alésage, arrêt de broche, retrait en manuel(((G88 Cycle d'alésage))) Ce code n'est pas encore implémenté dans LinuxCNC. Il est accepté mais son comportement n'est pas défini. -[[sec:G89-Alesage-Tempo]] -== G89 Cycle d'alésage, temporisation, retrait en vitesse travail -(((G89 Cycle d'alésage avec tempo))) +[[gcode:g89]] +== G89 Cycle d'alésage, temporisation, retrait en vitesse travail(((G89 Cycle d'alésage avec tempo))) ---- G89 (X- Y- Z-) or (U- V- W-) R- L- P- @@ -2139,15 +2085,13 @@ La deuxième raison d'utiliser les cycles de perçages, c'est qu'il produisent un mouvement préliminaire et retournent à une position prévisible et contrôlable, quel que soit le point de départ du cycle. -[[sec:G90-G91]] -== G90, G91: Modes de déplacement -(((G90 Mode de déplacement absolu))) -(((G91 Mode de déplacement relatif))) +[[gcode:g90-g91]] +== G90, G91: Modes de déplacement(((G90 Mode de déplacement absolu)))(((G91 Mode de déplacement relatif))) * 'G90' est le mode de déplacement absolu, les valeurs d'axes 'X, Y, Z, A, B, C, U, V, W' représentent les positions dans le système de coordonnées courant. Les exceptions à cette règle sont décrites dans -la section <>. +la section <>. * 'G91' est le mode de déplacement relatif, en mode relatif, les valeurs d'axes représentent un incrément depuis la position courante. @@ -2165,9 +2109,9 @@ G0 X2.5 (déplacement linéaire en vitesse rapide, à +2.5 en X de la position courante) ---- -* Voir <> pour plus d'information. +* Voir <> pour plus d'information. -[[sec:G90_1-G91_1]] +[[gcode:g90.1-g91.1]] == G90.1, G91.1: Mode de déplacement en arc (I, J et K) * 'G90.1' - Mode de déplacement absolu pour les offsets I, J et K. Quand @@ -2177,15 +2121,14 @@ le plan XY ou J et K pour le plan XZ, sinon c'est une erreur. * 'G91.1' - Mode de déplacement relatif pour les offsets I, J et K. G91.1 replace I, J et K à leur fonctionnement normal. -[[sec:G92]] -== G92 Décalage d'origine des systèmes de coordonnées -(((G92 Décalages d'origine des systèmes de coordonnées))) +[[gcode:g92]] +== G92 Décalage d'origine des systèmes de coordonnées(((G92 Décalages d'origine des systèmes de coordonnées))) ---- G92 axes ---- -Voir ce chapitre <> +Voir ce chapitre <> des systèmes de coordonnées. G92 fixera de nouvelles valeurs de coordonnées au point actuel (sans @@ -2219,22 +2162,20 @@ LinuxCNC conserve les décalages G92 et les réutilise au prochain démarrage du logiciel. Pour éviter cela, programmer un 'G92.1' qui les effacera, ou un G92.2 qui supprimera les valeurs enregistrées. -Voir le chapitre sur les <>. +Voir le chapitre sur les <>. -Voir la section sur les <>. +Voir la section sur les <>. -Voir la section sur les <>. +Voir la section sur les <>. -[[sec:G92_1-G92_2]] +[[gcode:g92.1-g92.2]] == G92.1, G92.2 Remise à zéro des décalages des systèmes de coordonnées -* 'G92.1' - Positionne les décalages d'axes à 0 et passe les paramètres -5211 à 5219 à zéro. +* 'G92.1' - Positionne les décalages d'axes à 0 et passe les paramètres 5211 à 5219 à zéro. * 'G92.2' - Positionne les décalages d'axes à 0, laisse les valeurs des -paramètres inchangées, elles ne seront pas utilisées. + paramètres inchangées, elles ne seront pas utilisées. -[[sec:G92_3]] +[[gcode:g92.3]] == G92.3 Restauration des décalages d'axe * 'G92.3' - Positionne les décalages d'axes aux valeurs enregistrées dans @@ -2250,9 +2191,8 @@ programme et rétablies au chargement du second programme. Utiliser décalages d'axes enregistrés par le premier. -[[sec:G93-G94-G95-Modes]] -== G93, G94, G95: Choix des modes de vitesse -(((G93, G94, G95: Choix des modes de vitesse))) +[[gcode:g93-g95]] +== G93, G94, G95: Choix des modes de vitesse(((G93, G94, G95: Choix des modes de vitesse))) * 'G93' - Passe en mode inverse du temps. Dans le mode vitesse inverse du temps, le mot 'F' signifie que le mouvement doit être terminé en '[1/F]' @@ -2280,9 +2220,8 @@ C'est une erreur si: G2, ou G3 (explicitement ou implicitement) n'a pas de mot F. * Une nouvelle vitesse n'a pas été spécifiée après un passage en G94 ou G95. -[[sec:G96-G97-Broche]] -== G96, G97: Modes de contrôle de la broche -(((G96, G97: Vitesse de coupe constante, Vitesse de coupe en tr/mn))) +[[gcode:g96-g97]] +== G96, G97: Modes de contrôle de la broche(((G96, G97: Vitesse de coupe constante, Vitesse de coupe en tr/mn))) ---- G96 S- (vitesse de coupe constante) @@ -2312,9 +2251,8 @@ C'est une erreur si: * S n'est pas spécifié avec G96. * Une vitesse est spécifiée en mode G96 et la broche ne tourne pas. -[[sec:G98-G99-Set]] -== G98, G99: Options du plan de retrait -(((G98, G99 Retrait à la position initiale, Retrait sur R))) +[[gcode:g98-g99]] +== G98, G99: Options du plan de retrait(((G98, G99 Retrait à la position initiale, Retrait sur R))) Quand la broche se rétracte pendant les cycles de perçage, il existe deux options pour indiquer comment elle doit se rétracter: @@ -2343,5 +2281,3 @@ n'annule pas le plan de retrait initial. Il est permis de basculer entre G98 et G99 durant une série de cycles de perçage. // vim: set syntax=asciidoc: - - diff --git a/docs/src/gcode/m-code_fr.adoc b/docs/src/gcode/m-code_fr.adoc index 639f8a248f7..cc7538ee25a 100644 --- a/docs/src/gcode/m-code_fr.adoc +++ b/docs/src/gcode/m-code_fr.adoc @@ -12,32 +12,32 @@ [width="60%", options="header", cols="2^,5<"] |======================================================== -| Code | Description -|<> | Pause dans le programme -|<> | Fin de programme -|<> | Pause pour déchargement pièce -|<> | Contrôle de la broche -|<> | Appel d'outil n=numéro d'outil -|<> | Contrôle des arrosages -|<> | Orientation de la broche -|<> | Contrôle des correcteurs de vitesse -|<> | Contrôle du correcteur de vitesse travail -|<> | Contrôle du correcteur de vitesse de broche -|<> | Correcteur dynamique de vitesse d'avance -|<> | Contrôle de la coupure de vitesse -|<> | Correction du numéro de l'outil courant -|<> | Contrôle de sortie numérique -|<> | Contrôle d'entrée numérique et analogique -|<> | Contrôle sortie analogique synchronisée -|<> | Contrôle sortie analogique directe -|<> | Enregistre l'état modal -|<> | Invalide l'état modal enregistré -|<> | Restaure l'état modal -|<> | Enregistrement/auto-restauration de l'état modal -|<> | M-codes définis par l'utilisateur +| Code | Description +|<> | Pause dans le programme +|<> | Fin de programme +|<> | Pause pour déchargement pièce +|<> | Contrôle de la broche +|<> | Appel d'outil n=numéro d'outil +|<> | Contrôle des arrosages +|<> | Orientation de la broche +|<>| Contrôle des correcteurs de vitesse +|<> | Contrôle du correcteur de vitesse travail +|<> | Contrôle du correcteur de vitesse de broche +|<> | Correcteur dynamique de vitesse d'avance +|<> | Contrôle de la coupure de vitesse +|<> | Correction du numéro de l'outil courant +|<>| Contrôle de sortie numérique +|<> | Contrôle d'entrée numérique et analogique +|<> | Contrôle sortie analogique synchronisée +|<> | Contrôle sortie analogique directe +|<> | Enregistre l'état modal +|<> | Invalide l'état modal enregistré +|<> | Restaure l'état modal +|<> | Enregistrement/auto-restauration de l'état modal +|<>| M-codes définis par l'utilisateur |======================================================== -[[sec:M0-M1]] +[[mcode:m0-m1]] == M0, M1, pause dans le programme (((M0 Pause dans le programme))) (((M1 Pause optionnelle dans le programme))) @@ -60,7 +60,7 @@ mais l'effet ne sera probablement pas perceptible, puisque le comportement normal en mode MDI est de s'arrêter, de toute façon, à la fin de chaque ligne. -[[sec:M2-M30]] +[[mcode:m2-m30]] == M2, M30, fin de programme (((M2 Fin de programme))) (((M30 Fin de programme avec déchargement pièce))) @@ -87,7 +87,7 @@ Les deux commandes précédentes produisent les effets suivants: [NOTE] Les lignes de code placées après un 'M2' ou un 'M30' ne sont pas exécutées. -[[sec:M60]] +[[mcode:m60]] == M60, pause pour déchargement pièce (((M60 Pause pour déchargement pièce))) @@ -96,11 +96,8 @@ effectue une pause dans le programme en cours (quel que soit le réglage du bouton d'arrêt facultatif). Presser ensuite le bouton de départ cycle pour relancer le programme à la ligne suivante. -[[sec:M3-M4-M5]] -== M3, M4, M5 Contrôle de la broche -(((M3 Broche en sens horaire))) -(((M4 Broche en sens anti-horaire))) -(((M5 Arrêt de broche))) +[[mcode:m3-m5]] +== M3, M4, M5 Contrôle de la broche(((M3 Broche en sens horaire)))(((M4 Broche en sens anti-horaire)))(((M5 Arrêt de broche))) * 'M3 Snnnnn' - Démarre la broche en sens horaire à la vitesse *nnnnn*. * 'M4 Snnnnn' - Démarre la broche en sens anti-horaire à la vitesse *nnnnn*. @@ -116,9 +113,8 @@ la broche va se mettre en rotation. Il est permis d'utiliser 'M3' ou 'M4' quand la broche est déjà en rotation ou d'utiliser 'M5' quand la broche est déjà arrêtée. -[[sec:M6-Appel-Outil]] -== M6 Appel d'outil -(((M6 Appel d'outil))) +[[mcode:m6]] +== M6 Appel d'outil(((M6 Appel d'outil))) === Changement d'outil manuel @@ -163,11 +159,8 @@ dans ce cas, la broche sera vide après le changement d'outil. Si le slot zéro a été le dernier sélectionné, il n'y aura pas d'outil dans la broche après le changement. -[[sec:M7-M8-M9]] -== M7, M8, M9 Contrôle de l'arrosage -(((M7 Arrosage gouttelettes))) -(((M8 Arrosage fluide))) -(((M9 Arrêt des arrosages))) +[[mcode:m7-m9]] +== M7, M8, M9 Contrôle de l'arrosage(((M7 Arrosage gouttelettes)))(((M8 Arrosage fluide)))(((M9 Arrêt des arrosages))) * 'M7' - Active l'arrosage par gouttelettes. * 'M8' - Active l'arrosage fluide. @@ -176,9 +169,8 @@ il n'y aura pas d'outil dans la broche après le changement. Il est toujours permis d'utiliser une de ces commandes, que les arrosages soient arrêtés ou non. -[[sec:M19]] -== M19 Orientation de la broche -(((M19 Orientation de la broche))) +[[mcode:m19]] +== M19 Orientation de la broche(((M19 Orientation de la broche))) * 'M19 R- Q- [P-]' @@ -235,9 +227,8 @@ zéro, provoquera l'abandon du cycle d'orientation. Pin indiquant que le cycle de rotation est terminé. Désactivée par M3,M4 ou M5. -[[sec:M48-M49]] -== M48, M49 Contrôle des correcteurs de vitesse -(((M48, M49 Autoriser/Inhiber les correcteurs de vitesse))) +[[mcode:m48-m49]] +== M48, M49 Contrôle des correcteurs de vitesse(((M48, M49 Autoriser/Inhiber les correcteurs de vitesse))) * 'M48' - Autorise les curseurs de corrections de vitesses de broche et celui de vitesse d'avance travail. @@ -247,9 +238,8 @@ Il est permis d'autoriser ou d'inhiber ces curseurs quand ils sont déjà autorisés ou inhibés. Ils peuvent aussi être activés individuellement en utilisant les commandes 'M50' et 'M51', voir ci-dessous. -[[sec:M50-Controle-Correcteur-Vitesse-Travail]] -== M50 Contrôle du correcteur de vitesse travail -(((M50 Contrôle du correcteur de vitesse travail))) +[[mcode:m50]] +== M50 Contrôle du correcteur de vitesse travail(((M50 Contrôle du correcteur de vitesse travail))) * 'M50 ' - Autorise le curseur de correction de vitesse d'avance travail. Le paramètre 'P1' est optionnel. @@ -260,9 +250,8 @@ vitesse n'a plus aucune influence et les mouvements seront exécutés à la vitesse d'avance travail programmée. (à moins que ne soit actif un correcteur de vitesse adaptative). -[[sec:M51-Controle-Correcteur-Vitesse-Broche]] -== M51 Contrôle du correcteur de vitesse broche -(((M51 Contrôle du correcteur de vitesse broche))) +[[mcode:m51]] +== M51 Contrôle du correcteur de vitesse broche(((M51 Contrôle du correcteur de vitesse broche))) * 'M51 ' - Autorise le curseur de correction de vitesse de la broche. Le paramètre 'P1' est optionnel. @@ -273,9 +262,8 @@ n'a plus aucune influence, et la broche tournera à la vitesse programmée, en utilisant le mot 'S' comme décrit dans la section <>. -[[sec:M52-Controle-Vitesse-Adaptative]] -== M52 Contrôle de vitesse adaptative -(((M52 Contrôle vitesse adaptative))) +[[mcode:m52]] +== M52 Contrôle de vitesse adaptative(((M52 Contrôle vitesse adaptative))) * 'M52 P1' - Utilise une vitesse adaptative. Le paramètre 'P1' est optionnel. * 'M52 P0' - Cesse l'utilisation d'une vitesse adaptative. @@ -292,9 +280,8 @@ L'utilisation de vitess adaptative négative (destinée notamment aux machines à plasma et à électroérosion) est une nouveauté et n'a pas encore été testée de manière approfondie sur des machines réelles. -[[sec:M53-Controle-Coupure-Vitesse]] -== M53 Contrôle de la coupure de vitesse -(((M53 Contrôle coupure vitesse))) +[[mcode:m53]] +== M53 Contrôle de la coupure de vitesse(((M53 Contrôle coupure vitesse))) * 'M53 P1' - Autorise le bouton de coupure de vitesse. Le paramètre 'P1' est optionnel. Autoriser la coupure de vitesse permet d'interrompre les mouvements @@ -304,9 +291,8 @@ de 1 provoque un arrêt des mouvements quand 'M53' est actif. * 'M53 P0' - Inhibe le bouton de coupure de vitesse. L'état de 'motion.feed-hold' est sans effet sur la vitesse quand 'M53' est inhibé. -[[sec:M61-Correction-Numero-Outil-Courant]] -== M61 Correction du numéro de l'outil courant -(((M61 Correction du numéro de l'outil courant))) +[[mcode:m61]] +== M61 Correction du numéro de l'outil courant(((M61 Correction du numéro de l'outil courant))) * 'M61 Q ' - Corrige le numéro de l'outil courant, en mode MDI ou après un changement manuel d'outil dans la fenêtre de données manuelles. Au démarrage @@ -317,9 +303,8 @@ C'est une erreur si: * Q n'est pas égal où supérieur à 0 -[[sec:M62-a-M65-Ctrl-Sortie-Numerique]] -== M62 à M65 Contrôle de bits de sortie numérique -(((M62 Contrôle un bit de sortie numérique))) +[[mcode:m62-m65]] +== M62 à M65 Contrôle de bits de sortie numérique(((M62 Contrôle un bit de sortie numérique))) * 'M62 P' - Active un bit de sortie numérique en synchronisme avec un mouvement. @@ -353,9 +338,8 @@ contrôleur de mouvement. Ils ne sont pas synchronisés avec un mouvement. M62 à M66 ne seront opérationnels que si les pins 'motion.digital-out-nn' appropriées sont connectées aux sorties dans le fichier HAL. -[[sec:M66-Ctrl-Entree-Numerique-Et-Analogique]] -== M66 Contrôle d'entrée numérique et analogique -(((M66 Contrôle d'entrée numerique et analogique))) +[[mcode:m66]] +== M66 Contrôle d'entrée numérique et analogique(((M66 Contrôle d'entrée numerique et analogique))) ---- M66 P- | E- @@ -394,9 +378,8 @@ plus d'informations, section des configurations, paragraphes "LinuxCNC et HAL". M66 ne sera opérationnel que si les pins motion.digital-in-nn ou motion.analog-in-nn appropriées sont connectées aux entrées dans le fichier HAL. -[[sec:M67-Ctrl-Sortie-Analogique-Synchro]] -== M67 Contrôle de sortie analogique -(((M67 Contrôle de sortie analogique synchronisée avec un mouvement))) +[[mcode:m67]] +== M67 Contrôle de sortie analogique(((M67 Contrôle de sortie analogique synchronisée avec un mouvement))) ---- M67 E- Q- @@ -420,9 +403,8 @@ pour plus d'informations sur le contrôleur de mouvement. M67 ne sera opérationnel que si les pins motion.analog-out-nn appropriées sont connectées aux sorties dans le fichier HAL. -[[sec:M68-Ctrl-Sortie-Analogique-Directe]] -== M68 Contrôle de sortie analogique directe -(((M68 Contrôle de Sortie analogique directe))) +[[mcode:m68]] +== M68 Contrôle de sortie analogique directe(((M68 Contrôle de Sortie analogique directe))) ---- M68 E- Q- @@ -444,9 +426,8 @@ d'informations sur le contrôleur de mouvement. M68 ne sera opérationnel que si les pins 'motion.analog-out-nn' appropriées sont connectées aux sorties dans le fichier HAL. -[[sec:M70-Save-Modal-State]] -== M70 Enregistrement de l'état modal -(((M70 Save Modal State))) +[[mcode:m70]] +== M70 Enregistrement de l'état modal(((M70 Save Modal State))) Pour enregistrer explicitement l'état modal au niveau de l'appel courant, programmer 'M70'. Une fois l'état modal enregistré avec 'M70', il peut être @@ -495,12 +476,11 @@ on ne peut s'y référer qu'à l'intérieur du sous-programme en invoquant un 'M Une invocation récursive d'un sous-programme introduit un nouveau niveau d'appel. -[[sec:M71-Invalidate-Stored-Modal-State]] -== M71 Invalidation de l'état modal enregistré -(((M71 Invalidate Stored Modal State))) +[[mcode:m71]] +== M71 Invalidation de l'état modal enregistré(((M71 Invalidate Stored Modal State))) <> ou par -<> au niveau de l'appel courant est +<> au niveau de l'appel courant est invalidé (ne peut plus être restauré nulle part). Un appel ultérieur à 'M72' sur le même niveau d'appel, échouera. @@ -511,9 +491,8 @@ un 'return' ou 'endsub' ultérieur ne restaurera 'PAS' l'état modal. L'utilité de ce dispositif est douteuse. Il ne devrait pas être invoqué quand il peut disparaître. -[[sec:M72-Restore-Modal-State]] -== M72 Restauration de l'état modal -(((M72 Restore Modal State))) +[[mcode:m72]] +== M72 Restauration de l'état modal(((M72 Restore Modal State))) <> peut être restauré en exécutant un 'M72'. @@ -567,9 +546,8 @@ o call m2 ---- -[[sec:M73-Save-Autorestore-Modal-State]] -== M73 Enregistrement et auto-restauration de l'état modal -(((M73 Save and Autorestore Modal State))) +[[mcode:m73]] +== M73 Enregistrement et auto-restauration de l'état modal(((M73 Save and Autorestore Modal State))) Pour enregistrer l'état modal à l'intérieur d'un sous-programme et restaurer cet @@ -654,10 +632,8 @@ O endsub ---- -[[sec:M100-a-M199]] -== M100 à M199 Commandes définies par l'utilisateur -(((M100 à M199 M-codes définis par l'utilisateur))) -(((M-codes définis par l'utilisateur M100-M199))) +[[mcode:m100-m199]] +== M100 à M199 Commandes définies par l'utilisateur(((M100 à M199 M-codes définis par l'utilisateur)))(((M-codes définis par l'utilisateur M100-M199))) ---- M1-- diff --git a/docs/src/gcode/machining-center.adoc b/docs/src/gcode/machining-center.adoc index fdbf0f0fbb9..9a65b5a897f 100644 --- a/docs/src/gcode/machining-center.adoc +++ b/docs/src/gcode/machining-center.adoc @@ -320,7 +320,7 @@ TOOL_TABLE = EMC-AXIS-SIM.tbl For more information on the specifics of the tool table format, see the <> Section. -[[sec:parameters]] +[[sec:machine-center-parameters]] == Parameters(((Parameters))) In the RS274/NGC language view, a machining center maintains an array diff --git a/docs/src/gcode/machining_center_fr.adoc b/docs/src/gcode/machining-center_fr.adoc similarity index 89% rename from docs/src/gcode/machining_center_fr.adoc rename to docs/src/gcode/machining-center_fr.adoc index c47f3289630..1cc8ee40072 100644 --- a/docs/src/gcode/machining_center_fr.adoc +++ b/docs/src/gcode/machining-center_fr.adoc @@ -1,9 +1,8 @@ :lang: fr :toc: -= Aperçu global d'une machine CNC - [[cha:Apercu-machine-CNC]] += Aperçu global d'une machine CNC Cette section donne une description des différents organes constituant une machine à commande numérique (CNC). @@ -17,7 +16,7 @@ composants qui interagissent avec l'interpréteur. Les autres composants mécaniques, comme les boutons de jog, ne seront pas décrits ici, même si ils affectent le contrôle. -=== Axes (((axes))) +=== Axes(((axes))) Toute machine à commande numérique dispose d'un ou de plusieurs axes. Les différents types de machines ont différentes combinaisons d'axes. Par @@ -34,25 +33,25 @@ footnote:[Avec LinuxCNC, le cas de la machine à portique XYYZ avec deux moteurs pour un axe est mieux traité par la cinématique que par un axe linéaire supplémentaire.] -==== Axes linéaires primaires (((axes linéaires primaires))) +==== Axes linéaires primaires(((axes linéaires primaires))) Les axes X, Y et Z produisent des mouvements linéaires dans trois directions, mutuellement orthogonales. -==== Axes linéaires secondaires (((axes linéaires secondaires))) +==== Axes linéaires secondaires(((axes linéaires secondaires))) Les axes U, V et W produisent des mouvements linéaires dans trois directions, mutuellement orthogonales. Habituellement, X et U sont parallèles, Y et V sont parallèles et Z et W sont parallèles. -==== Axes rotatifs (((Axes rotatifs))) +==== Axes rotatifs(((Axes rotatifs))) Les axes A, B et C produisent des mouvements angulaires (rotations). Habituellement, l'axe de rotation de A est parallèle à X, l'axe de rotation de B est parallèle à Y et l'axe de rotation de C est parallèle à Z. -=== Broche (((broche))) +=== Broche(((broche))) Une machine à commande numérique est équipée d'une broche qui maintient un outil coupant, un palpeur ou d'autres outils. La broche peut tourner dans les @@ -62,14 +61,12 @@ rotatif, l'axe de la broche est maintenu parallèle à l'axe Z et il est coïncident avec l'axe Z quand X et Y sont à zéro. La broche peut être stoppée sur une position fixée ou non. -=== Arrosages (((arrosage))) +=== Arrosages(((arrosage))) Une machine à commande numérique peut être équipée d'un système fournissant l'arrosage fluide ou un arrosage par gouttelettes. -=== Correcteurs de vitesse d'avance et de broche -(((correcteurs vitesse))) -(((correcteur vitesse broche))) +=== Correcteurs de vitesse d'avance et de broche(((correcteurs vitesse)))(((correcteur vitesse broche))) Une machine à commande numérique est équipée de boutons de réglage de la vitesse d'avance et de la vitesse de rotation de la broche, ils laissent @@ -77,16 +74,14 @@ l'opérateur corriger les vitesses nécessaires pour la broche et l'avance travail, il peut ainsi augmenter ou réduire les vitesses programmées. -=== Bouton d'effacement de bloc[[sec:Bouton-effacement-de-block]] - -(((Bouton effacement de bloc))) +[[sec:Bouton-effacement-de-block]] +=== Bouton d'effacement de bloc(((Bouton effacement de bloc))) Une machine à commande numérique peut être équipée d'un bouton d'effacement de bloc. Voir la section <>. -=== Bouton d'arrêt optionnel du programme[[sec:arret-optionnel]] - -(((arrêt optionnel))) +[[sec:arret-optionnel]] +=== Bouton d'arrêt optionnel du programme(((arrêt optionnel))) Une machine à commande numérique peut être équipée d'un bouton d'arrêt du programme. Voir la section <>. @@ -112,9 +107,8 @@ footnote:[Si les parallélismes sont particuliers, le constructeur du système devra indiquer à quels sens de rotation correspondent horaire et anti-horaire.] -=== Point contrôlé[[sec:Point-controle]] - -(((point contrôlé))) +[[sec:Point-controle]] +=== Point contrôlé(((point contrôlé))) Le point contrôlé est le point dont la position et la vitesse de déplacement sont contrôlés. Quand la compensation de longueur d'outil @@ -154,13 +148,12 @@ rotation de la broche. Si les limites physiques de l'axe rendent le déplacement impossible, tous les axes seront ralentis pour maintenir le parcours prévu. -=== [[sub:Vitesse-d-avance]]Vitesse d'avance - -(((vitesse d'avance))) +[[sub:feed-rate]] +=== Vitesse d'avance(((vitesse d'avance))) La vitesse à laquelle le point contrôlé se déplace est ajustable par l'opérateur. Sauf cas particulier, vitesse inverse du temps, vitesse -par tour, voir la section <>, dans +par tour, voir la section <>, dans l'interpréteur, l'interprétation des vitesses est la suivante: . Si le déplacement concerne un des axes XYZ, F est en unités machine @@ -172,21 +165,21 @@ l'interpréteur, l'interprétation des vitesses est la suivante: . Autrement, le mouvement est purement rotatif et le mot F est en unités de rotation dans le système pseudo-Cartésien ABC. -=== Arrosage (((arrosage))) +=== Arrosage(((arrosage))) Arrosage fluide ou par gouttelettes peuvent être activés séparément. Le langage RS274/NGC les arrête ensemble, voir la section -<>. +<>. -=== Temporisation (((tempo))) +=== Temporisation(((tempo))) Une temporisation peut être commandée (ex: pour immobiliser tous les axes) pendant une durée spécifique. La broche n'est pas arrêtée pendant -une temporisation! Sans s'occuper <> la machine s'arrêtera exactement à la fin du +une temporisation! Sans s'occuper <> +la machine s'arrêtera exactement à la fin du dernier mouvement avant la temporisation. -=== Unités (((unités))) +=== Unités(((unités))) Les unités utilisées pour les distances le long des axes X, Y et Z peuvent être les pouces ou les millimètres. La vitesse de rotation de @@ -194,7 +187,7 @@ la broche est en tours par minute. Les positions des axes rotatifs sont exprimées en degrés. Les vitesses d'avance sont exprimées en unités machine par minute ou en degrés par minute ou en unités de longueur par tour de broche, comme décrit dans la section -<>. +<>. === Position courante @@ -226,7 +219,7 @@ Une machine à commande numérique peut commander un changeur d'outils. Les deux porte-pièces peuvent être intervertis par commande. -=== Chargeur de pièces (((chargement))) +=== Chargeur de pièces(((chargement))) Une machine à commande numérique peut être équipée d'un système de chargement des pièces. Le système se compose de deux porte-pièces sur lesquels sont @@ -239,8 +232,8 @@ Les boutons des correcteurs de vitesses peuvent être activés (ils fonctionnent normalement) ou rendus inopérants (Ils n'ont plus aucun effet). Le langage RS274/NGC dispose d'une commande qui active tous les boutons et une autre qui les désactive. Voir l'inhibition et l'activation -<>. -Voir également <>. +<>. +Voir également <>. === Modes de contrôle de trajectoire[[sec:Modes-de-controle-trajectoires]] @@ -259,14 +252,13 @@ trajectoire: légèrement arrondis pour que la vitesse soit maintenue (sans dépasser la tolérance, si elle est spécifiée). -Voir également les G-codes <> et <> des +Voir également les G-codes <> et <> des contrôles de trajectoire. -[[sec:Interaction-vitesses]] (((Interraction vitesse))) -[[sec:Interaction-effacement-de-bloc]] (((effacement de bloc))) -[[sec:Interaction-arrets-optionnels]] (((Arrêts optionnels))) - -== Interaction de l'interpréteur avec les boutons +[[sec:Interaction-vitesses]] +[[sec:Interaction-effacement-de-bloc]] +[[sec:Interaction-arrets-optionnels]] +== Interaction de l'interpréteur avec les boutons(((Interraction vitesse)))(((effacement de bloc)))(((Arrêts optionnels))) L'interpréteur interagit avec plusieurs boutons de commande. Cette section décrit ces interactions plus en détail. En aucun cas @@ -295,8 +287,8 @@ d'effacement de bloc doit être positionné avant de lancer le programme G-code. Si ce bouton est actif et qu'un code M1 est rencontré, le programme est mis en pause. -[[sec:Fichier-Outils]] (((Fichier d'outils))) -== Fichier d'outils +[[sec:Fichier-Outils]] +== Fichier d'outils(((Fichier d'outils))) Un fichier d'outils est requis par l'interpréteur. Le fichier indique dans quels emplacements du carrousel sont placés les outils, la @@ -311,20 +303,22 @@ TOOL_TABLE = tooltable.tbl Il est également possible de donner à la table d'outils le même nom que le fichier ini, mais avec une extension tbl, par exemple: + ---- TOOL_TABLE = acme_300.tbl ---- ou encore: + ---- TOOL_TABLE = EMC-AXIS-SIM.tbl ---- D'autres informations sont disponibles sur les spécificités du -<>. +<>. -[[sec:Parametres]] (((paramètres))) -== Paramètres +[[sec:machine-center-parameters]] +== Paramètres(((paramètres))) Dans le langage RS274/NGC, la machine maintient un tableau de 5400 paramètres numériques. La plupart d'entre eux ont un usage diff --git a/docs/src/gcode/o-code_fr.adoc b/docs/src/gcode/o-code_fr.adoc index 509a2a1350e..c21ae967458 100644 --- a/docs/src/gcode/o-code_fr.adoc +++ b/docs/src/gcode/o-code_fr.adoc @@ -57,9 +57,9 @@ M2 Pour plus de détails sur ces instructions voir: -* <>, -* <>, -* <>. +* <>, +* <>, +* <>. .O- return À l'intérieur d'un sous-programme, 'O- return' peut être exécuté, @@ -79,7 +79,7 @@ o100 endsub Voir également les sections: * <>, -* <>. +* <>. .O- call 'O- call' peut prendre jusqu'à 30 arguments optionnels, qui sont @@ -110,8 +110,7 @@ sont visibles depuis le code appelant. Les sous-programmes peuvent aussi changer la valeur des paramètres nommés globaux. [[sec:Boucles]] -== Boucles: *do*, *while*, *endwhile*, *break*, *continue* -(((Boucles)))(((do)))(((while)))(((endwhile)))(((break)))(((continue))) +== Boucles: *do*, *while*, *endwhile*, *break*, *continue*(((Boucles)))(((do)))(((while)))(((endwhile)))(((break)))(((continue))) La boucle 'while' a deux structures possibles: 'while - endwhile' et 'do - while'. Dans chaque cas, la boucle est quittée quand la condition du 'while' devient @@ -156,8 +155,7 @@ la boucle et 'O- continue', saute immédiatement à la prochaine recommence au début. Si elle est fausse, la boucle est quittée. [[sec:Conditionnels]] -== Conditionnel: *if*, *elseif*, *else*, *endif* -(((Conditionnel: if, elseif, else, endif)))(((if)))(((else)))(((elseif)))(((endif))) +== Conditionnel: *if*, *elseif*, *else*, *endif*(((Conditionnel: if, elseif, else, endif)))(((if)))(((else)))(((elseif)))(((endif))) Le 'if' conditionnel exécute un groupe d'instructions avec le même nombre 'O' qui commence avec 'if' et se termine avec 'endif'. Les conditions optionnelles @@ -193,8 +191,7 @@ o102 endif ---- [[sec:Repetitions]] -== Répétition: *Repeat* -(((Repeat))) +== Répétition: *Repeat*(((Repeat))) La répétition 'repeat', exécutera les blocs contenus entre 'repeat' et 'endrepeat' le nombre de fois spécifié entre crochets. L'exemple @@ -212,8 +209,7 @@ O103 endrepeat G90 (Mode absolu) ---- -== Indirection -(((Indirection))) +== Indirection(((Indirection))) L'adresse de O- peut être donnée par un paramètre ou un calcul. @@ -225,13 +221,12 @@ O[#101+2] call .Calcul des valeurs dans les O-codes Voici un condensé des sections utiles aux calculs des O-codes: -* <>, -* <>, -* <>, -* <>. +* <>, +* <>, +* <>, +* <>. -== Appel de fichier -(((Appel de fichier))) +== Appel de fichier(((Appel de fichier))) Pour appeler un sous-programme par son nom, ce sous-programme doit contenir un 'sub' et un 'endsub'. Le fichier appelé doit se trouver dans le répertoire diff --git a/docs/src/gcode/other-code_fr.adoc b/docs/src/gcode/other-code_fr.adoc index 5f7c8981bad..717b5aeb041 100644 --- a/docs/src/gcode/other-code_fr.adoc +++ b/docs/src/gcode/other-code_fr.adoc @@ -11,9 +11,9 @@ Pour régler la vitesse d'avance, programmer 'F-'. L'application de la vitesse est telle que décrite dans l'aperçu global d'une -machine numérique, section <>, à moins +machine numérique, section <>, à moins que le mode vitesse inverse du temps ne soit activé, dans ce cas, la vitesse est -telle que décrite dans la section sur le choix des modes de <>. +telle que décrite dans la section sur le choix des modes de <>. [[sec:S-Broche]] == S: Réglage de la vitesse de rotation de la broche @@ -31,7 +31,7 @@ C'est une erreur si: * La valeur de S est négative. -Comme décrit dans la section <>, si un cycle de perçage 'G84' (taraudage) est actif et que les potentiomètres de vitesse et d'avance sont autorisés, celui qui a le réglage le plus bas sera utilisé. La vitesse de rotation et d'avance resterons diff --git a/docs/src/gcode/overview_fr.adoc b/docs/src/gcode/overview_fr.adoc index aa55cbef6cb..8ec637dadf8 100644 --- a/docs/src/gcode/overview_fr.adoc +++ b/docs/src/gcode/overview_fr.adoc @@ -192,9 +192,8 @@ entière à moins de quatre décimales, il est considéré comme entier, par exemple 0.9999. -[[sec:parametres]] -== Paramètres (Variables) -(((Paramètres))) +[[sec:overview-parameters]] +== Paramètres (Variables)(((Paramètres))) Le langage RS274/NGC supporte les 'paramètres', qui sont appelés 'variables' dans d'autres langages de programmation. Il existe plusieurs types de paramètres @@ -686,7 +685,7 @@ C'est une erreur si un paramètre numéroté ou une expression est utilisé. == Répétitions d'items Une ligne peut contenir autant de mots G que voulu, mais un seul du même -<>. +<>. Une ligne peut avoir de zéro à quatre mots M. Mais pas deux mots M du même groupe modal. @@ -823,8 +822,7 @@ C'est une erreur si: [[sec:Groupes-modaux]] -== Groupes modaux -(((Groupes modaux))) +== Groupes modaux(((Groupes modaux))) Les commandes modales sont arrangées par lots appelés 'groupes modaux', à tout moment, un seul membre d'un groupe modal peut être @@ -837,8 +835,7 @@ visibles dans le tableau <>. [[tbl:G-codes-modaux]] -.Groupes modaux des G-codes -(((G-codes modaux))) +.Groupes modaux des G-codes (((G-codes modaux))) [width="100%", cols="4,6", options="header"] |========================================================== @@ -967,12 +964,11 @@ commentaires actifs. chacune des mesures réussie. * '(PROBECLOSE)'. - fermera le fichier de log palpeur. -Voir la section <> pour d'autres +Voir la section <> pour d'autres informations sur le palpage avec G38. [[sec:Log-general]] -== Log général -(((Log général))) +== Log général(((Log général))) * '(LOGOPEN,filename.txt)' - Ouvre le fichier de log 'filename.txt'. Si le fichier existe déjà, il sera tronqué. diff --git a/docs/src/gcode/tool_compensation_fr.adoc b/docs/src/gcode/tool-compensation_fr.adoc similarity index 98% rename from docs/src/gcode/tool_compensation_fr.adoc rename to docs/src/gcode/tool-compensation_fr.adoc index 956dbe88a63..ce710519fc8 100644 --- a/docs/src/gcode/tool_compensation_fr.adoc +++ b/docs/src/gcode/tool-compensation_fr.adoc @@ -33,8 +33,7 @@ n'apparaitra dans la liste déroulante du 'Toucher', que si l'outil à été cha avec 'Tn M6'. .Toucher et table d'outils[[cap:Touch-Off-Tool]] - -image::images/ToolTable-TouchOff_fr.png[alt="Toucher et table d'outils"] +image::images/ToolTable-TouchOff_fr.png["Toucher et table d'outils"] === Utilisation de G10 L1/L10/L11 @@ -44,13 +43,13 @@ dans la table d'outils: G-code pour des explications plus détaillées) G10 L1 Pn - (n est le N° d'outil) Fixe les offsets de l'outil. La position -courante n'est pas significative. <>. (((G10 L1))) +courante n'est pas significative. <>.(((G10 L1))) G10 L10 Pn - (n est le N° d'outil) Fixe l'offset à la position courante, met -les valeurs dans un système de 1 à 8. <>.(((G10 L10))) +les valeurs dans un système de 1 à 8. <>.(((G10 L10))) G10 L11 Pn - (n est le N° d'outil) Fixe l'offset à la position courante, met -les valeurs dans le système 9. <>. (((G10 L11))) +les valeurs dans le système 9. <>.(((G10 L11))) [[sec:Table-Outils]] == Table d'outils @@ -69,7 +68,6 @@ outils et des poches peut aller jusqu'à 99999. (((Format de la table d'outils))) .Format de la table d'outils - [width="100%", options="header"] |======================================== |T# |P# |X |Y |Z |A |B |C |U |V |W |Dia |FA |BA |Ori |Rem @@ -165,7 +163,7 @@ et l'orientation de l'outil. Ainsi, sans tenir compte des angles ni des faces de l'outil, qui sont de la compétence du tourneur, on trouvera une valeur en I (angle avant) et en J (angle de dos) ainsi qu'une valeur en Q (orientation). -Une description complète des outils de tour <>. +Une description complète des outils de tour <>. La colonne 'Diamètre' contient un nombre réel. Ce nombre est utilisé seulement si la compensation est activée lors de l'usage de cet outil. Si la trajectoire @@ -281,8 +279,7 @@ la pièce. La figure suivante montre comment le mouvement se termine à différents endroits, dépendants du mouvement suivant. .Point final de la compensation[[cap:Compensation-End-Point]] - -image::images/comp-path_fr.png[alt="Point final de la compensation"] +image::images/comp-path_fr.png["Point final de la compensation"] === Vue générale @@ -307,8 +304,7 @@ le mouvement d'entrée laissera un petit plot de matière en raison du décalage de compensation et de l'arrondi de l'outil. .Mouvement d'entrée[[cap:Entry-Move]] - -image::images/comp02.png[alt="Mouvement d'entrée"] +image::images/comp02.png["Mouvement d'entrée"] ==== Mouvement en Z @@ -331,13 +327,11 @@ désactivée. ==== Profil extérieur .Profil extérieur[[cap:Outside-Profile]] - image::images/outside-comp_fr.png[alt="Profil extérieur"] ==== Profil intérieur .Profil intérieur[[cap:Inside-Profile]] - image::images/inside-comp_fr.png[alt="Profil intérieur"] @@ -556,10 +550,10 @@ délivrés par l'interpréteur sont les suivants: - Impossible d'utiliser le plan YZ avec la compensation de rayon d'outil - Coin concave avec la compensation de rayon d'outil - Interférence de l'outil avec une partie finie de la pièce avec la - compensation de rayon d'outil footnote:[Le terme anglais 'gouging' - indique une interférence entre l'outil et une partie finie de la pièce ou - la paroi d'une cavité. Par extension, le terme est parfois repris pour une - interférence entre le porte-outil ou la broche et la pièce.] + compensation de rayon d'outil footnote:[Le terme anglais 'gouging' + indique une interférence entre l'outil et une partie finie de la pièce ou + la paroi d'une cavité. Par extension, le terme est parfois repris pour une + interférence entre le porte-outil ou la broche et la pièce.] - Mot D sur une ligne sans mot de commande G41 ni G42 - Index de rayon d'outil trop grand - Le rayon de l'outil n'est pas inférieur au rayon de l'arc avec la diff --git a/docs/src/getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc b/docs/src/getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc index 0c6a74eaaf9..8b296a0a5ad 100644 --- a/docs/src/getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc +++ b/docs/src/getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc @@ -4,22 +4,18 @@ include::../common/outdated-notice_fr.adoc[] -include::About-LinuxCNC_fr.adoc[] +include::about-linuxcnc_fr.adoc[] -include::System_Requirements_fr.adoc[] +include::system-requirements_fr.adoc[] -include::Getting-LinuxCNC_fr.adoc[] +include::getting-linuxcnc_fr.adoc[] -include::Updating_LinuxCNC_fr.adoc[] +include::updating_linuxcnc_fr.adoc[] -include::Running-LinuxCNC_fr.adoc[] - -include::stepper_quickstart_fr.adoc[] - -include::stepconf_fr.adoc[] +include::running-linuxcnc_fr.adoc[] include::pncconf_fr.adoc[] -include::Linux_FAQ_fr.adoc[] +include::linux-faq_fr.adoc[] // vim: set syntax=asciidoc: diff --git a/docs/src/getting-started/About-LinuxCNC_fr.adoc b/docs/src/getting-started/about-linuxcnc_fr.adoc similarity index 98% rename from docs/src/getting-started/About-LinuxCNC_fr.adoc rename to docs/src/getting-started/about-linuxcnc_fr.adoc index fcc60c22c0c..1b28182012c 100644 --- a/docs/src/getting-started/About-LinuxCNC_fr.adoc +++ b/docs/src/getting-started/about-linuxcnc_fr.adoc @@ -58,7 +58,8 @@ vues Open Source de LinuxCNC: logiciels libres, nous encourageons tout le monde à utiliser des logiciels open source, à les améliorer et à les transmettre. -== Trouver de l'aide[[sec:Trouver-aide]](((Trouver de l'aide))) +[[sec:Trouver-aide]] +== Trouver de l'aide(((Trouver de l'aide))) === Les salons IRC diff --git a/docs/src/getting-started/Getting-LinuxCNC_fr.adoc b/docs/src/getting-started/getting-linuxcnc_fr.adoc similarity index 100% rename from docs/src/getting-started/Getting-LinuxCNC_fr.adoc rename to docs/src/getting-started/getting-linuxcnc_fr.adoc diff --git a/docs/src/getting-started/Linux_FAQ_fr.adoc b/docs/src/getting-started/linux-faq_fr.adoc similarity index 100% rename from docs/src/getting-started/Linux_FAQ_fr.adoc rename to docs/src/getting-started/linux-faq_fr.adoc diff --git a/docs/src/getting-started/Running-LinuxCNC_fr.adoc b/docs/src/getting-started/running-linuxcnc_fr.adoc similarity index 100% rename from docs/src/getting-started/Running-LinuxCNC_fr.adoc rename to docs/src/getting-started/running-linuxcnc_fr.adoc diff --git a/docs/src/getting-started/System_Requirements_fr.adoc b/docs/src/getting-started/system-requirements_fr.adoc similarity index 100% rename from docs/src/getting-started/System_Requirements_fr.adoc rename to docs/src/getting-started/system-requirements_fr.adoc diff --git a/docs/src/getting-started/Updating_LinuxCNC_fr.adoc b/docs/src/getting-started/updating-linuxcnc_fr.adoc similarity index 100% rename from docs/src/getting-started/Updating_LinuxCNC_fr.adoc rename to docs/src/getting-started/updating-linuxcnc_fr.adoc diff --git a/docs/src/gui/axis.adoc b/docs/src/gui/axis.adoc index 1e1268c0e9c..3d1cb93ca8f 100644 --- a/docs/src/gui/axis.adoc +++ b/docs/src/gui/axis.adoc @@ -2,7 +2,7 @@ :toc: [[cha:axis-gui]] -= (((axis-gui)))AXIS GUI += AXIS GUI(((axis-gui))) == Introduction @@ -10,6 +10,8 @@ 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. +[[cap:Fenetre-AXIS]] +.AXIS Window image::images/axis.png["AXIS Window",align="center"] == Getting Started diff --git a/docs/src/gui/axis_fr.adoc b/docs/src/gui/axis_fr.adoc index 6d5f0bf3a8f..44c8a431d58 100644 --- a/docs/src/gui/axis_fr.adoc +++ b/docs/src/gui/axis_fr.adoc @@ -2,6 +2,7 @@ :toc: [[cha:Axis]] +[[cha:axis-gui]] = L'interface graphique AXIS == Introduction @@ -17,8 +18,8 @@ image::../user/images/axis_25_fr.png["Fenêtre d'AXIS"] == Commencer avec AXIS -Pour choisir AXIS comme interface graphique de LinuxCNC, éditez le fichier -.ini et dans la section [DISPLAY] changez la ligne DISPLAY comme ceci: +Pour choisir AXIS comme interface graphique de LinuxCNC, éditez le fichier .ini +et dans la section [DISPLAY] changez la ligne DISPLAY comme ceci: 'DISPLAY = axis' @@ -192,7 +193,7 @@ programme G-code contient des sous-programmes. entrée est relative au système de coordonnées pièce actuel (G5x), tel que modifié par le décalage d'axe (G92). Quand la séquence de 'Toucher' est complète, la coordonnée relative pour l'axe choisi prendra la valeur - entrée. Voir aussi <> dans le chapitre du G-code. + entrée. Voir aussi <> dans le chapitre du G-code. L'outil touchera le porte-pièce...:: Lorsqu'un 'Toucher' est effectué, la valeur entrée est relative au 9ème @@ -201,7 +202,7 @@ L'outil touchera le porte-pièce...:: sur lequel s'effectue le 'Toucher'. Le 9ème système de coordonnées doit être ajusté pour que la pointe d'un outil de longueur nulle (le nez de broche), soit à l'origine du porte-pièce quand les coordonnées - relatives sont à 0. Voir aussi <> dans le chapitre du + relatives sont à 0. Voir aussi <> dans le chapitre du G-code. .Menu Vues diff --git a/docs/src/lathe/lathe-user_fr.adoc b/docs/src/lathe/lathe-user_fr.adoc index 9f3ce703ac9..37443a5e3e3 100644 --- a/docs/src/lathe/lathe-user_fr.adoc +++ b/docs/src/lathe/lathe-user_fr.adoc @@ -1,10 +1,9 @@ :lang: fr :toc: +[[cha:lathe-user-information]] = Particularités des tours -[[cha:Tour-Specifiques]] - Ce chapitre va regrouper les informations spécifiques aux tours, il est encore en cours de rédaction. @@ -54,8 +53,7 @@ Plus d'informations <>. [[sec:Orientations-des-outils-de-tour]] -== Orientations des outils de tournage -(((Orientations des outils de tour))) +== Orientations des outils de tournage(((Orientations des outils de tour))) La figure suivante montre les angles d'orientations des outils de tour ainsi que les informations sur l'angle frontal de l'arête de coupe (FRONTANGLE) et @@ -64,9 +62,7 @@ Les positions vont croissantes dans le sens horaire par rapport à une ligne parallèle à l'axe Z, le zéro étant côté Z+. .Orientations des outils de tournage - -image::images/tool_positions_fr.png[alt="Orientations des outils de tournage"] - +image::images/tool_positions_fr.png["Orientations des outils de tournage"] Les images ci-dessous montrent la représentation qu'Axis donne des orientations de l'outil, en se référant à la figure ci-dessus. @@ -112,7 +108,7 @@ l'offset s'applique immédiatement à l'outil courant. . Prise d'origine machine de chacun des axes, si ce n'est pas déjà fait. . Déclarer l'outil avec _M6 Tn_ dans lequel _n_ est le numéro de l'outil -courant, présent en table d'outils. + courant, présent en table d'outils. . Sélectionner l'axe X dans la fenêtre de l'onglet _Contrôle manuel (F3)_. . Déplacer l'axe X sur une position connue ou prendre une passe de test puis mesurer le diamètre obtenu. @@ -138,14 +134,14 @@ outils. . Prise d'origine machine de tous les axes, si ce n'est pas déjà fait. . S'assurer qu'aucune compensation n'est activée pour le système de coordonnées -courant. + courant. . Déclarer l'outil avec _M6 Tn_ dans lequel _n_ est le numéro de l'outil -courant, présent en table d'outils. + courant, présent en table d'outils. . Sélectionner l'axe Z dans la fenêtre de l'onglet _contrôle manuel (F3)_. . Placer un cylindre dans le mandrin. . Faire tangenter l'outil contre la face du cylindre. . Cliquer le bouton _Toucher_ puis choisir _Table d'outils_ et saisir la -position à 0.0. + position à 0.0. . Répéter l'opération pour chaque outil, en utilisant le même cylindre. Maintenant, tous les outils sont compensés à la même distance d'une position @@ -185,7 +181,7 @@ l'utilisation des codeurs de broche. .Filetage Le cycle de filetage préprogrammé G76 est utilisé, tant en filetage intérieur -qu'en filetage extérieur, voir <>. +qu'en filetage extérieur, voir <>. .Vitesse de coupe à surface constante La vitesse de coupe à surface constante utilise l'origine machine X modifiée @@ -197,7 +193,7 @@ rotation et doit se faire avec l'outil de référence (celui qui a l'offset à z .Avance par tour L'avance par tour déplace l'axe Z de la valeur de F à chaque tour. Ce n'est pas destiné au filetage pour lequel il faut utiliser G76. -D'autres informations sont dans la section sur <>. +D'autres informations sont dans la section sur <>. == Arcs diff --git a/docs/src/motion/pid_theory_fr.adoc b/docs/src/motion/pid-theory_fr.adoc similarity index 100% rename from docs/src/motion/pid_theory_fr.adoc rename to docs/src/motion/pid-theory_fr.adoc diff --git a/docs/src/motion/tweaking_steppers_fr.adoc b/docs/src/motion/tweaking-steppers_fr.adoc similarity index 100% rename from docs/src/motion/tweaking_steppers_fr.adoc rename to docs/src/motion/tweaking-steppers_fr.adoc diff --git a/docs/src/user/user-concepts_fr.adoc b/docs/src/user/user-concepts_fr.adoc index d007b281e78..d343bb5025b 100644 --- a/docs/src/user/user-concepts_fr.adoc +++ b/docs/src/user/user-concepts_fr.adoc @@ -222,7 +222,7 @@ la signification de chacun d'eux. Si vous avez un tour ou un axe rotatif, pour savoir comment la vitesse d'avance s'applique selon que l'axe est linéaire ou rotatif, lire et -comprendre la section <> du manuel de +comprendre la section <> du manuel de l'utilisateur. == Compensation de rayon d'outil From c97703df081c78e479dc70174b59b0f161edf970 Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Sat, 19 Mar 2022 02:09:47 +0100 Subject: [PATCH 29/53] Further changes to filenames for consistency between languages Some files needed to change their location. --- docs/src/Master_Getting_Started_fr.adoc | 2 +- docs/src/Master_HAL_fr.adoc | 5 +- docs/src/Master_Integrator_fr.adoc | 30 ++-- docs/src/Master_User_fr.adoc | 4 +- docs/src/Submakefile | 18 +-- .../{Glossary_fr.adoc => glossary_fr.adoc} | 0 ...pyright_fr.adoc => gpld-copyright_fr.adoc} | 0 ...ts_fr.adoc => integrator-concepts_fr.adoc} | 0 .../linux-faq_fr.adoc | 0 ...{ini_config_fr.adoc => ini-config_fr.adoc} | 0 ...{ini_homing_fr.adoc => ini-homing_fr.adoc} | 0 ...he_config_fr.adoc => lathe-config_fr.adoc} | 0 .../stepper-diagnostics_fr.adoc} | 0 docs/src/docs.xml | 130 +++++++++--------- .../{pluto_p_fr.adoc => pluto-p_fr.adoc} | 0 ...s2_example_fr.adoc => gs2-example_fr.adoc} | 0 ...port_fr.adoc => pci-parallel-port_fr.adoc} | 0 .../gcode/{gcode_fr.adoc => g-code_fr.adoc} | 0 ...ing-Started-with-LinuxCNC.contents_fr.adoc | 4 +- .../images/stepconf-advanced_fr.png | Bin 20338 -> 0 bytes .../images/stepconf-axis_fr.png | Bin 18738 -> 0 bytes .../images/stepconf-basic_fr.png | Bin 25076 -> 0 bytes .../images/stepconf-config_fr.png | Bin 10933 -> 0 bytes .../images/stepconf-pinout_fr.png | Bin 18053 -> 0 bytes .../images/stepconf-spindle_fr.png | Bin 10216 -> 0 bytes .../images/stepconf-test_fr.png | Bin 6216 -> 0 bytes ...ter_programs.adoc => filter-programs.adoc} | 0 ...xamples_fr.adoc => pyvcp-examples_fr.adoc} | 0 ...cp_VCPpanels.adoc => qtvcp-VCPpanels.adoc} | 0 ...snippets.adoc => qtvcp-code-snippets.adoc} | 0 ...ts_es.adoc => qtvcp-code-snippets_es.adoc} | 0 ...widgets.adoc => qtvcp-custom-widgets.adoc} | 0 ...s_es.adoc => qtvcp-custom-widgets_es.adoc} | 0 ...evelopment.adoc => qtvcp-development.adoc} | 0 ...ment_es.adoc => qtvcp-development_es.adoc} | 0 ...cp_libraries.adoc => qtvcp-libraries.adoc} | 0 ...{qtvcp_vismach.adoc => qtvcp-vismach.adoc} | 0 ...{qtvcp_widgets.adoc => qtvcp-widgets.adoc} | 0 ..._widgets_es.adoc => qtvcp-widgets_es.adoc} | 0 .../{basic_hal_fr.adoc => basic-hal_fr.adoc} | 0 ...eneral_ref_fr.adoc => general-ref_fr.adoc} | 0 ...lel_port_fr.adoc => parallel-port_fr.adoc} | 0 docs/src/index.tmpl | 14 +- docs/src/index_es.tmpl | 10 +- docs/src/index_fr.tmpl | 52 +++---- ...ency_Test_fr.adoc => latency-test_fr.adoc} | 0 ..._ladder_fr.adoc => classic-ladder_fr.adoc} | 0 ...amples_fr.adoc => ladder-examples_fr.adoc} | 0 ...der_intro_fr.adoc => ladder-intro_fr.adoc} | 0 49 files changed, 133 insertions(+), 136 deletions(-) rename docs/src/common/{Glossary_fr.adoc => glossary_fr.adoc} (100%) rename docs/src/common/{GPLD_Copyright_fr.adoc => gpld-copyright_fr.adoc} (100%) rename docs/src/common/{Integrator_Concepts_fr.adoc => integrator-concepts_fr.adoc} (100%) rename docs/src/{getting-started => common}/linux-faq_fr.adoc (100%) rename docs/src/config/{ini_config_fr.adoc => ini-config_fr.adoc} (100%) rename docs/src/config/{ini_homing_fr.adoc => ini-homing_fr.adoc} (100%) rename docs/src/config/{lathe_config_fr.adoc => lathe-config_fr.adoc} (100%) rename docs/src/{common/Stepper_Diagnostics_fr.adoc => config/stepper-diagnostics_fr.adoc} (100%) rename docs/src/drivers/{pluto_p_fr.adoc => pluto-p_fr.adoc} (100%) rename docs/src/examples/{gs2_example_fr.adoc => gs2-example_fr.adoc} (100%) rename docs/src/examples/{pci_parallel_port_fr.adoc => pci-parallel-port_fr.adoc} (100%) rename docs/src/gcode/{gcode_fr.adoc => g-code_fr.adoc} (100%) delete mode 100644 docs/src/getting-started/images/stepconf-advanced_fr.png delete mode 100644 docs/src/getting-started/images/stepconf-axis_fr.png delete mode 100644 docs/src/getting-started/images/stepconf-basic_fr.png delete mode 100644 docs/src/getting-started/images/stepconf-config_fr.png delete mode 100644 docs/src/getting-started/images/stepconf-pinout_fr.png delete mode 100644 docs/src/getting-started/images/stepconf-spindle_fr.png delete mode 100644 docs/src/getting-started/images/stepconf-test_fr.png rename docs/src/gui/{filter_programs.adoc => filter-programs.adoc} (100%) rename docs/src/gui/{pyvcp_examples_fr.adoc => pyvcp-examples_fr.adoc} (100%) rename docs/src/gui/{qtvcp_VCPpanels.adoc => qtvcp-VCPpanels.adoc} (100%) rename docs/src/gui/{qtvcp_code_snippets.adoc => qtvcp-code-snippets.adoc} (100%) rename docs/src/gui/{qtvcp_code_snippets_es.adoc => qtvcp-code-snippets_es.adoc} (100%) rename docs/src/gui/{qtvcp_custom_widgets.adoc => qtvcp-custom-widgets.adoc} (100%) rename docs/src/gui/{qtvcp_custom_widgets_es.adoc => qtvcp-custom-widgets_es.adoc} (100%) rename docs/src/gui/{qtvcp_development.adoc => qtvcp-development.adoc} (100%) rename docs/src/gui/{qtvcp_development_es.adoc => qtvcp-development_es.adoc} (100%) rename docs/src/gui/{qtvcp_libraries.adoc => qtvcp-libraries.adoc} (100%) rename docs/src/gui/{qtvcp_vismach.adoc => qtvcp-vismach.adoc} (100%) rename docs/src/gui/{qtvcp_widgets.adoc => qtvcp-widgets.adoc} (100%) rename docs/src/gui/{qtvcp_widgets_es.adoc => qtvcp-widgets_es.adoc} (100%) rename docs/src/hal/{basic_hal_fr.adoc => basic-hal_fr.adoc} (100%) rename docs/src/hal/{general_ref_fr.adoc => general-ref_fr.adoc} (100%) rename docs/src/hal/{parallel_port_fr.adoc => parallel-port_fr.adoc} (100%) rename docs/src/install/{Latency_Test_fr.adoc => latency-test_fr.adoc} (100%) rename docs/src/ladder/{classic_ladder_fr.adoc => classic-ladder_fr.adoc} (100%) rename docs/src/ladder/{ladder_examples_fr.adoc => ladder-examples_fr.adoc} (100%) rename docs/src/ladder/{ladder_intro_fr.adoc => ladder-intro_fr.adoc} (100%) diff --git a/docs/src/Master_Getting_Started_fr.adoc b/docs/src/Master_Getting_Started_fr.adoc index 1f50221a04f..2de86859587 100644 --- a/docs/src/Master_Getting_Started_fr.adoc +++ b/docs/src/Master_Getting_Started_fr.adoc @@ -27,6 +27,6 @@ include::common/overleaf_fr.adoc[] include::getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc[] -include::common/GPLD_Copyright_fr.adoc[] +include::common/gpld-copyright_fr.adoc[] // vim: set syntax=asciidoc: diff --git a/docs/src/Master_HAL_fr.adoc b/docs/src/Master_HAL_fr.adoc index 70a8612cdda..050653da919 100644 --- a/docs/src/Master_HAL_fr.adoc +++ b/docs/src/Master_HAL_fr.adoc @@ -20,8 +20,8 @@ include::common/outdated-notice_fr.adoc[] = HAL :leveloffset: 1 include::hal/intro_fr.adoc[] -include::hal/general_ref_fr.adoc[] -include::hal/basic_hal_fr.adoc[] +include::hal/general-ref_fr.adoc[] +include::hal/basic-hal_fr.adoc[] include::hal/tutorial_fr.adoc[] include::hal/halshow_fr.adoc[] include::hal/components_fr.adoc[] @@ -35,4 +35,3 @@ include::hal/halmodule_fr.adoc[] // vim: set syntax=asciidoc: - diff --git a/docs/src/Master_Integrator_fr.adoc b/docs/src/Master_Integrator_fr.adoc index 7d2d69fa83a..67e40e58540 100644 --- a/docs/src/Master_Integrator_fr.adoc +++ b/docs/src/Master_Integrator_fr.adoc @@ -16,14 +16,14 @@ The LinuxCNC Team include::common/overleaf_fr.adoc[] include::common/outdated-notice_fr.adoc[] -include::common/Integrator_Concepts_fr.adoc[] +include::common/integrator-concepts_fr.adoc[] :leveloffset: 0 = Configuration de LinuxCNC :leveloffset: 1 -include::install/Latency_Test_fr.adoc[] -include::config/ini_config_fr.adoc[] -include::config/ini_homing_fr.adoc[] -include::config/lathe_config_fr.adoc[] +include::install/latency-test_fr.adoc[] +include::config/ini-config_fr.adoc[] +include::config/ini-homing_fr.adoc[] +include::config/lathe-config_fr.adoc[] include::hal/haltcl_fr.adoc[] include::config/linuxcnc2hal_fr.adoc[] include::config/stepper_fr.adoc[] @@ -31,7 +31,7 @@ include::config/stepper_fr.adoc[] = Interfaces graphiques utilisateur :leveloffset: 1 include::gui/pyvcp_fr.adoc[] -include::gui/pyvcp_examples_fr.adoc[] +include::gui/pyvcp-examples_fr.adoc[] include::gui/gladevcp_fr.adoc[] :leveloffset: 0 @@ -39,26 +39,26 @@ include::gui/gladevcp_fr.adoc[] :leveloffset: 1 include::config/python-interface.adoc[] include::motion/kinematics_fr.adoc[] -include::motion/tweaking_steppers_fr.adoc[] -include::motion/pid_theory_fr.adoc[] +include::motion/tweaking-steppers_fr.adoc[] +include::motion/pid-theory_fr.adoc[] :leveloffset: 0 = La logique Ladder :leveloffset: 1 -include::ladder/ladder_intro_fr.adoc[] -include::ladder/classic_ladder_fr.adoc[] -include::ladder/ladder_examples_fr.adoc[] +include::ladder/ladder-intro_fr.adoc[] +include::ladder/classic-ladder_fr.adoc[] +include::ladder/ladder-examples_fr.adoc[] :leveloffset: 0 = Exemples d'utilisation :leveloffset: 1 -include::examples/pci_parallel_port_fr.adoc[] +include::examples/pci-parallel-port_fr.adoc[] include::examples/spindle_fr.adoc[] include::examples/mpg_fr.adoc[] -include::examples/gs2_example_fr.adoc[] +include::examples/gs2-example_fr.adoc[] :leveloffset: 0 = Diagnostics :leveloffset: 1 -include::common/Stepper_Diagnostics_fr.adoc[] -include::common/Glossary_fr.adoc[] +include::config/stepper-diagnostics_fr.adoc[] +include::common/glossary_fr.adoc[] include::common/gpld-copyright.adoc[] // = Index diff --git a/docs/src/Master_User_fr.adoc b/docs/src/Master_User_fr.adoc index 96681d8266a..216773e6c17 100644 --- a/docs/src/Master_User_fr.adoc +++ b/docs/src/Master_User_fr.adoc @@ -42,7 +42,7 @@ include::gcode/machining-center_fr.adoc[] include::gcode/coordinates_fr.adoc[] include::gcode/tool-compensation_fr.adoc[] include::gcode/overview_fr.adoc[] -include::gcode/gcode_fr.adoc[] +include::gcode/g-code_fr.adoc[] include::gcode/m-code_fr.adoc[] include::gcode/o-code_fr.adoc[] include::gcode/other-code_fr.adoc[] @@ -50,7 +50,7 @@ include::examples/gcode_fr.adoc[] include::lathe/lathe-user_fr.adoc[] include::gcode/rs274ngc_fr.adoc[] include::gui/image-to-gcode_fr.adoc[] -include::common/Glossary_fr.adoc[] +include::common/glossary_fr.adoc[] include::common/gpld-copyright.adoc[] // = Index diff --git a/docs/src/Submakefile b/docs/src/Submakefile index 77297a10c9a..93bd6487cae 100644 --- a/docs/src/Submakefile +++ b/docs/src/Submakefile @@ -62,7 +62,7 @@ DOC_SRCS_EN := \ config/stepper-quickstart.adoc \ drivers/ax5214h.adoc \ drivers/vfs11.adoc \ - drivers/mitsub_vfd.adoc \ + drivers/mitsub-vfd.adoc \ drivers/gm.adoc \ drivers/gs2.adoc \ drivers/hostmot2.adoc \ @@ -95,19 +95,19 @@ DOC_SRCS_EN := \ getting-started/system-requirements.adoc \ getting-started/updating-linuxcnc.adoc \ gui/axis.adoc \ - gui/filter_programs.adoc \ + gui/filter-programs.adoc \ gui/gladevcp.adoc \ gui/gmoccapy.adoc \ gui/gscreen.adoc \ gui/qtdragon.adoc \ gui/qtvcp.adoc \ - gui/qtvcp_VCPpanels.adoc \ - gui/qtvcp_widgets.adoc \ - gui/qtvcp_libraries.adoc \ - gui/qtvcp_vismach.adoc \ - gui/qtvcp_custom_widgets.adoc \ - gui/qtvcp_code_snippets.adoc \ - gui/qtvcp_development.adoc \ + gui/qtvcp-VCPpanels.adoc \ + gui/qtvcp-widgets.adoc \ + gui/qtvcp-libraries.adoc \ + gui/qtvcp-vismach.adoc \ + gui/qtvcp-custom-widgets.adoc \ + gui/qtvcp-code-snippets.adoc \ + gui/qtvcp-development.adoc \ gui/panelui.adoc \ gui/halui.adoc \ gui/image-to-gcode.adoc \ diff --git a/docs/src/common/Glossary_fr.adoc b/docs/src/common/glossary_fr.adoc similarity index 100% rename from docs/src/common/Glossary_fr.adoc rename to docs/src/common/glossary_fr.adoc diff --git a/docs/src/common/GPLD_Copyright_fr.adoc b/docs/src/common/gpld-copyright_fr.adoc similarity index 100% rename from docs/src/common/GPLD_Copyright_fr.adoc rename to docs/src/common/gpld-copyright_fr.adoc diff --git a/docs/src/common/Integrator_Concepts_fr.adoc b/docs/src/common/integrator-concepts_fr.adoc similarity index 100% rename from docs/src/common/Integrator_Concepts_fr.adoc rename to docs/src/common/integrator-concepts_fr.adoc diff --git a/docs/src/getting-started/linux-faq_fr.adoc b/docs/src/common/linux-faq_fr.adoc similarity index 100% rename from docs/src/getting-started/linux-faq_fr.adoc rename to docs/src/common/linux-faq_fr.adoc diff --git a/docs/src/config/ini_config_fr.adoc b/docs/src/config/ini-config_fr.adoc similarity index 100% rename from docs/src/config/ini_config_fr.adoc rename to docs/src/config/ini-config_fr.adoc diff --git a/docs/src/config/ini_homing_fr.adoc b/docs/src/config/ini-homing_fr.adoc similarity index 100% rename from docs/src/config/ini_homing_fr.adoc rename to docs/src/config/ini-homing_fr.adoc diff --git a/docs/src/config/lathe_config_fr.adoc b/docs/src/config/lathe-config_fr.adoc similarity index 100% rename from docs/src/config/lathe_config_fr.adoc rename to docs/src/config/lathe-config_fr.adoc diff --git a/docs/src/common/Stepper_Diagnostics_fr.adoc b/docs/src/config/stepper-diagnostics_fr.adoc similarity index 100% rename from docs/src/common/Stepper_Diagnostics_fr.adoc rename to docs/src/config/stepper-diagnostics_fr.adoc diff --git a/docs/src/docs.xml b/docs/src/docs.xml index 9790823c579..6dfdebc1262 100644 --- a/docs/src/docs.xml +++ b/docs/src/docs.xml @@ -104,31 +104,31 @@ - - - - + + + + - - + + - - + + - + - + - + @@ -139,13 +139,13 @@ - + - + - + @@ -156,36 +156,36 @@ - - - + + + - - - - - + + + + + - + - - - - - - + + + + + + - - - - - + + + + + @@ -198,27 +198,27 @@ - + - - + + - + - - - + + + - + - + @@ -226,8 +226,8 @@ - - + + @@ -237,43 +237,43 @@ - - - - - + + + + + - + - + - + - - + + - - - - - - + + + + + + - - - + + + - + diff --git a/docs/src/drivers/pluto_p_fr.adoc b/docs/src/drivers/pluto-p_fr.adoc similarity index 100% rename from docs/src/drivers/pluto_p_fr.adoc rename to docs/src/drivers/pluto-p_fr.adoc diff --git a/docs/src/examples/gs2_example_fr.adoc b/docs/src/examples/gs2-example_fr.adoc similarity index 100% rename from docs/src/examples/gs2_example_fr.adoc rename to docs/src/examples/gs2-example_fr.adoc diff --git a/docs/src/examples/pci_parallel_port_fr.adoc b/docs/src/examples/pci-parallel-port_fr.adoc similarity index 100% rename from docs/src/examples/pci_parallel_port_fr.adoc rename to docs/src/examples/pci-parallel-port_fr.adoc diff --git a/docs/src/gcode/gcode_fr.adoc b/docs/src/gcode/g-code_fr.adoc similarity index 100% rename from docs/src/gcode/gcode_fr.adoc rename to docs/src/gcode/g-code_fr.adoc diff --git a/docs/src/getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc b/docs/src/getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc index 8b296a0a5ad..524236881c3 100644 --- a/docs/src/getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc +++ b/docs/src/getting-started/Getting-Started-with-LinuxCNC.contents_fr.adoc @@ -10,12 +10,10 @@ include::system-requirements_fr.adoc[] include::getting-linuxcnc_fr.adoc[] -include::updating_linuxcnc_fr.adoc[] +include::updating-linuxcnc_fr.adoc[] include::running-linuxcnc_fr.adoc[] include::pncconf_fr.adoc[] -include::linux-faq_fr.adoc[] - // vim: set syntax=asciidoc: diff --git a/docs/src/getting-started/images/stepconf-advanced_fr.png b/docs/src/getting-started/images/stepconf-advanced_fr.png deleted file mode 100644 index 9c850f3c9359ffac0339676092d662f2aed3bdeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20338 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 YbfZ4yVDNRIrPmH4xY?CbgR9a10&)i5A^-pY diff --git a/docs/src/getting-started/images/stepconf-axis_fr.png b/docs/src/getting-started/images/stepconf-axis_fr.png deleted file mode 100644 index 2b3f818bd831dfde3cb48f7babf18354118988c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18738 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 N44$rjF6*2UngFn{n*RU* diff --git a/docs/src/getting-started/images/stepconf-basic_fr.png b/docs/src/getting-started/images/stepconf-basic_fr.png deleted file mode 100644 index 937c63acd1007dd75e4f9b69164551d55393bcac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25076 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

P=N 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 ZoUQyXNNmY608{xB$_nc8d2$y1{|7Az^V9$U diff --git a/docs/src/getting-started/images/stepconf-config_fr.png b/docs/src/getting-started/images/stepconf-config_fr.png deleted file mode 100644 index 4a777e744fcafeed119fab0f8f0c56a1e42c15e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10933 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 diff --git a/docs/src/getting-started/images/stepconf-pinout_fr.png b/docs/src/getting-started/images/stepconf-pinout_fr.png deleted file mode 100644 index 25e93b5a3b5c1164ea99b325f98a737a25b2be63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18053 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 diff --git a/docs/src/getting-started/images/stepconf-spindle_fr.png b/docs/src/getting-started/images/stepconf-spindle_fr.png deleted file mode 100644 index 6e5c3f164d6f7e770b33d124b1e62350b248c1ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10216 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 J-aVuD{|k!Ro7eyV diff --git a/docs/src/getting-started/images/stepconf-test_fr.png b/docs/src/getting-started/images/stepconf-test_fr.png deleted file mode 100644 index e0ba714df8f6545f43365ccabc90d5a0c4e9eaca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6216 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 F{1;^VP(=U$ diff --git a/docs/src/gui/filter_programs.adoc b/docs/src/gui/filter-programs.adoc similarity index 100% rename from docs/src/gui/filter_programs.adoc rename to docs/src/gui/filter-programs.adoc diff --git a/docs/src/gui/pyvcp_examples_fr.adoc b/docs/src/gui/pyvcp-examples_fr.adoc similarity index 100% rename from docs/src/gui/pyvcp_examples_fr.adoc rename to docs/src/gui/pyvcp-examples_fr.adoc diff --git a/docs/src/gui/qtvcp_VCPpanels.adoc b/docs/src/gui/qtvcp-VCPpanels.adoc similarity index 100% rename from docs/src/gui/qtvcp_VCPpanels.adoc rename to docs/src/gui/qtvcp-VCPpanels.adoc diff --git a/docs/src/gui/qtvcp_code_snippets.adoc b/docs/src/gui/qtvcp-code-snippets.adoc similarity index 100% rename from docs/src/gui/qtvcp_code_snippets.adoc rename to docs/src/gui/qtvcp-code-snippets.adoc diff --git a/docs/src/gui/qtvcp_code_snippets_es.adoc b/docs/src/gui/qtvcp-code-snippets_es.adoc similarity index 100% rename from docs/src/gui/qtvcp_code_snippets_es.adoc rename to docs/src/gui/qtvcp-code-snippets_es.adoc diff --git a/docs/src/gui/qtvcp_custom_widgets.adoc b/docs/src/gui/qtvcp-custom-widgets.adoc similarity index 100% rename from docs/src/gui/qtvcp_custom_widgets.adoc rename to docs/src/gui/qtvcp-custom-widgets.adoc diff --git a/docs/src/gui/qtvcp_custom_widgets_es.adoc b/docs/src/gui/qtvcp-custom-widgets_es.adoc similarity index 100% rename from docs/src/gui/qtvcp_custom_widgets_es.adoc rename to docs/src/gui/qtvcp-custom-widgets_es.adoc diff --git a/docs/src/gui/qtvcp_development.adoc b/docs/src/gui/qtvcp-development.adoc similarity index 100% rename from docs/src/gui/qtvcp_development.adoc rename to docs/src/gui/qtvcp-development.adoc diff --git a/docs/src/gui/qtvcp_development_es.adoc b/docs/src/gui/qtvcp-development_es.adoc similarity index 100% rename from docs/src/gui/qtvcp_development_es.adoc rename to docs/src/gui/qtvcp-development_es.adoc diff --git a/docs/src/gui/qtvcp_libraries.adoc b/docs/src/gui/qtvcp-libraries.adoc similarity index 100% rename from docs/src/gui/qtvcp_libraries.adoc rename to docs/src/gui/qtvcp-libraries.adoc diff --git a/docs/src/gui/qtvcp_vismach.adoc b/docs/src/gui/qtvcp-vismach.adoc similarity index 100% rename from docs/src/gui/qtvcp_vismach.adoc rename to docs/src/gui/qtvcp-vismach.adoc diff --git a/docs/src/gui/qtvcp_widgets.adoc b/docs/src/gui/qtvcp-widgets.adoc similarity index 100% rename from docs/src/gui/qtvcp_widgets.adoc rename to docs/src/gui/qtvcp-widgets.adoc diff --git a/docs/src/gui/qtvcp_widgets_es.adoc b/docs/src/gui/qtvcp-widgets_es.adoc similarity index 100% rename from docs/src/gui/qtvcp_widgets_es.adoc rename to docs/src/gui/qtvcp-widgets_es.adoc diff --git a/docs/src/hal/basic_hal_fr.adoc b/docs/src/hal/basic-hal_fr.adoc similarity index 100% rename from docs/src/hal/basic_hal_fr.adoc rename to docs/src/hal/basic-hal_fr.adoc diff --git a/docs/src/hal/general_ref_fr.adoc b/docs/src/hal/general-ref_fr.adoc similarity index 100% rename from docs/src/hal/general_ref_fr.adoc rename to docs/src/hal/general-ref_fr.adoc diff --git a/docs/src/hal/parallel_port_fr.adoc b/docs/src/hal/parallel-port_fr.adoc similarity index 100% rename from docs/src/hal/parallel_port_fr.adoc rename to docs/src/hal/parallel-port_fr.adoc diff --git a/docs/src/index.tmpl b/docs/src/index.tmpl index 4b85bd3cd0b..6f45ad6f523 100644 --- a/docs/src/index.tmpl +++ b/docs/src/index.tmpl @@ -190,13 +190,13 @@ function setup_page(){

  • Glade Virtual Control Panel
  • Gscreen
  • QTvcp
  • -
  • QTvcp -VCP Panels
  • -
  • QTvcp -widgets
  • -
  • QTvcp -libraries
  • -
  • QTvcp -Vismach
  • -
  • QTvcp -Custom Widgets
  • -
  • QTvcp -Code Snippets
  • -
  • QTvcp -Development
  • +
  • QTvcp -VCP Panels
  • +
  • QTvcp -widgets
  • +
  • QTvcp -libraries
  • +
  • QTvcp -Vismach
  • +
  • QTvcp -Custom Widgets
  • +
  • QTvcp -Code Snippets
  • +
  • QTvcp -Development
  • diff --git a/docs/src/index_es.tmpl b/docs/src/index_es.tmpl index 7d77c100167..b420e8acad7 100644 --- a/docs/src/index_es.tmpl +++ b/docs/src/index_es.tmpl @@ -181,11 +181,11 @@ function setup_page(){
  • Paneles Virtuales de Control Glade
  • Gscreen
  • QTvcp
  • -
  • QTvcp -Widgets
  • -
  • QTvcp -Librerias
  • -
  • QTvcp -Widgets Personalizados
  • -
  • QTvcp -Fragmentos de Código
  • -
  • QTvcp -Desarrollo
  • +
  • QTvcp -Widgets
  • +
  • QTvcp -Librerias
  • +
  • QTvcp -Widgets Personalizados
  • +
  • QTvcp -Fragmentos de Código
  • +
  • QTvcp -Desarrollo
  • Interfaces de Programación del Usuario diff --git a/docs/src/index_fr.tmpl b/docs/src/index_fr.tmpl index 475c8bcbb37..efdb5514826 100644 --- a/docs/src/index_fr.tmpl +++ b/docs/src/index_fr.tmpl @@ -19,7 +19,7 @@ Español 中文

    -
  • Aide mémoire des références du G-code +
  • Aide mémoire des références du G-code
  • Le Wiki de la communauté LinuxCNC (en anglais)

  • Guide de démarrage @@ -34,9 +34,9 @@
  • L'utilitaire graphique NGCGUI
  • L'interface graphique TkLinuxCNC
  • L'interface graphique Mini -
  • Aperçu global d'une machine CNC +
  • Aperçu global d'une machine CNC
  • Les systèmes de coordonnées -
  • Les compensations d'outil +
  • Les compensations d'outil
  • Vue générale du G-code
  • Tout le G-code
  • Les M-codes @@ -52,8 +52,8 @@
  • Manuel de HAL
    • Introduction à HAL -
    • Conventions générales -
    • Commandes et composants de base +
    • Conventions générales +
    • Commandes et composants de base
    • Le tutoriel de HAL
    • Les fonctionnalités de Halshow
    • Liste des composants de HAL @@ -66,41 +66,41 @@

    • Manuel de configuration

    • Manuel du développeur @@ -118,6 +118,6 @@ diff --git a/docs/src/install/Latency_Test_fr.adoc b/docs/src/install/latency-test_fr.adoc similarity index 100% rename from docs/src/install/Latency_Test_fr.adoc rename to docs/src/install/latency-test_fr.adoc diff --git a/docs/src/ladder/classic_ladder_fr.adoc b/docs/src/ladder/classic-ladder_fr.adoc similarity index 100% rename from docs/src/ladder/classic_ladder_fr.adoc rename to docs/src/ladder/classic-ladder_fr.adoc diff --git a/docs/src/ladder/ladder_examples_fr.adoc b/docs/src/ladder/ladder-examples_fr.adoc similarity index 100% rename from docs/src/ladder/ladder_examples_fr.adoc rename to docs/src/ladder/ladder-examples_fr.adoc diff --git a/docs/src/ladder/ladder_intro_fr.adoc b/docs/src/ladder/ladder-intro_fr.adoc similarity index 100% rename from docs/src/ladder/ladder_intro_fr.adoc rename to docs/src/ladder/ladder-intro_fr.adoc From e724d17e51c1b4206f983146045994871ed0207d Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Sat, 19 Mar 2022 11:24:53 +0100 Subject: [PATCH 30/53] Moving HomeAxisTravel.png et al. since stepconf_fr.adoc was moved --- .../images/HomeAxisTravel.png | Bin .../images/switch-nc-series_fr.png | Bin .../images/switch-no-parallel_fr.png | Bin 3 files changed, 0 insertions(+), 0 deletions(-) rename docs/src/{getting-started => config}/images/HomeAxisTravel.png (100%) rename docs/src/{getting-started => config}/images/switch-nc-series_fr.png (100%) rename docs/src/{getting-started => config}/images/switch-no-parallel_fr.png (100%) diff --git a/docs/src/getting-started/images/HomeAxisTravel.png b/docs/src/config/images/HomeAxisTravel.png similarity index 100% rename from docs/src/getting-started/images/HomeAxisTravel.png rename to docs/src/config/images/HomeAxisTravel.png diff --git a/docs/src/getting-started/images/switch-nc-series_fr.png b/docs/src/config/images/switch-nc-series_fr.png similarity index 100% rename from docs/src/getting-started/images/switch-nc-series_fr.png rename to docs/src/config/images/switch-nc-series_fr.png diff --git a/docs/src/getting-started/images/switch-no-parallel_fr.png b/docs/src/config/images/switch-no-parallel_fr.png similarity index 100% rename from docs/src/getting-started/images/switch-no-parallel_fr.png rename to docs/src/config/images/switch-no-parallel_fr.png From 55fe251a9935570534acd61c6e7ff9ed9cfcab31 Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Sat, 19 Mar 2022 12:06:09 +0100 Subject: [PATCH 31/53] Series of fixes to Anchors that have been renamed --- docs/src/config/ini-config_fr.adoc | 146 +++++++++++------------ docs/src/gcode/g-code.adoc | 2 +- docs/src/gcode/g-code_fr.adoc | 8 +- docs/src/gcode/machining-center_fr.adoc | 10 +- docs/src/gcode/other-code_fr.adoc | 15 +-- docs/src/gcode/overview_fr.adoc | 8 +- docs/src/gcode/tool-compensation_fr.adoc | 6 +- docs/src/gui/axis_fr.adoc | 1 - docs/src/index.tmpl | 4 +- docs/src/index_es.tmpl | 2 +- docs/src/lathe/lathe-user_fr.adoc | 2 +- docs/src/user/user-intro_fr.adoc | 2 +- 12 files changed, 97 insertions(+), 109 deletions(-) diff --git a/docs/src/config/ini-config_fr.adoc b/docs/src/config/ini-config_fr.adoc index eb1e2f6361b..c87b42485b0 100644 --- a/docs/src/config/ini-config_fr.adoc +++ b/docs/src/config/ini-config_fr.adoc @@ -588,45 +588,45 @@ dans le même répertoire que le fichier ini qui contiendra les paramètres utilisés par l'interpréteur (enregistré entre chaque lancement). * 'ORIENT_OFFSET = 0' - - (((ORIENT OFFSET ))) Une valeur flottante ajoutée au paramètre R d'une - opération <>. Utilisée pour - définir une position zéro quelconque quelle que soit l'orientation de - montage du codeur de broche. + (((ORIENT OFFSET ))) Une valeur flottante ajoutée au paramètre R d'une + opération <>. Utilisée pour + définir une position zéro quelconque quelle que soit l'orientation de + montage du codeur de broche. * 'RS274NGC_STARTUP_CODE = G17 G20 G40 G49 G64 P0.001 G80 G90 G92 G94 G97 G98' - - (((RS274NGC STARTUP CODE))) Une chaine de codes NGC qui sera utilisée -pour initialiser l'interpréteur. Elle ne se substitue pas à la -spécification des G-codes modaux du début de chaque fichier ngc. Les -codes modaux des machines diffèrent, ils pourraient être modifiés par -les G-codes interprétés plutôt dans la session. + (((RS274NGC STARTUP CODE))) Une chaine de codes NGC qui sera utilisée + pour initialiser l'interpréteur. Elle ne se substitue pas à la + spécification des G-codes modaux du début de chaque fichier ngc. Les + codes modaux des machines diffèrent, ils pourraient être modifiés par + les G-codes interprétés plutôt dans la session. * 'SUBROUTINE_PATH = ncsubroutines:/tmp/testsubs:lathesubs:millsubs' - - (((SUBROUTINE PATH))) Spécifie une liste, séparée par (:) d'au maximum 10 -répertoires dans lesquels seront cherchés les fichier de sous-programme -spécifiés dans le g-code. Ces répertoires sont inspectés après que ne le -soit [DISPLAY]PROGRAM_PREFIX (si il est spécifié) et avant que ne le soit -[WIZARD]WIZARD_ROOT (si il est spécifié). les recherches s'effectuent dans -l'ordre dans lequel les chemins sont listés. La première occurrence avec le -sous-programme recherché est utilisée. Les répertoires sont spécifiés -relativement au répertoire courant du fichier ini ou par des chemins -absolus. La liste ne doit contenir aucun espace blanc. + (((SUBROUTINE PATH))) Spécifie une liste, séparée par (:) d'au maximum 10 + répertoires dans lesquels seront cherchés les fichier de sous-programme + spécifiés dans le g-code. Ces répertoires sont inspectés après que ne le + soit [DISPLAY]PROGRAM_PREFIX (si il est spécifié) et avant que ne le soit + [WIZARD]WIZARD_ROOT (si il est spécifié). les recherches s'effectuent dans + l'ordre dans lequel les chemins sont listés. La première occurrence avec le + sous-programme recherché est utilisée. Les répertoires sont spécifiés + relativement au répertoire courant du fichier ini ou par des chemins + absolus. La liste ne doit contenir aucun espace blanc. * 'USER_M_PATH = myfuncs:/tmp/mcodes:experimentalmcodes' - - (((USER M PATH))) Spécifie une liste de répertoires, séparés par (:) (sans -aucun espace blanc) pour les fonctions définies par l'utilisateur. Les -répertoires sont spécifiés par rapport au répertoire courant pour les -fichiers ini ou en chemins absolus. La liste ne doit contenir aucun -espace blanc. + (((USER M PATH))) Spécifie une liste de répertoires, séparés par (:) (sans + aucun espace blanc) pour les fonctions définies par l'utilisateur. Les + répertoires sont spécifiés par rapport au répertoire courant pour les + fichiers ini ou en chemins absolus. La liste ne doit contenir aucun + espace blanc. * 'USER_DEFINED_FUNCTION_MAX_DIRS=5' - Défini le nombre maximum de répertoires -au moment de la compilation. Une recherche est faite pour chaque fonction -utilisateur définie possible, typiquement 'M100' à 'M199'. + -L'ordre de recherche est le suivant: + + au moment de la compilation. Une recherche est faite pour chaque fonction + utilisateur définie possible, typiquement 'M100' à 'M199'. + + L'ordre de recherche est le suivant: + . [DISPLAY]PROGRAM_PREFIX (si il est spécifié) . Si [DISPLAY]PROGRAM_PREFIX n'est pas spécifié, cherche dans le répertoire -par défaut: nc_files + par défaut: nc_files . Recherche ensuite dans chaque répertoire de la liste [RS274NGC]USER_M_PATH -Le premier M1xx trouvé au cours de la recherche est utilisé pour chaque M1xx. + Le premier M1xx trouvé au cours de la recherche est utilisé pour chaque M1xx. [NOTE] [WIZARD]WIZARD_ROOT est un chemin de recherche valide mais l'assistant n'est @@ -634,8 +634,7 @@ pas encore complétement implémenté et les résultats, découlant de son utilisation, sont imprévisibles. [[sub:Section-EMCMOT]] -=== Section [EMCMOT] -(((Section [EMCMOT] du fichier ini))) +=== Section [EMCMOT](((Section [EMCMOT] du fichier ini))) D'autres entrées peuvent être rencontrées dans cette section, elles ne doivent pas être modifiées. @@ -643,7 +642,7 @@ pas être modifiées. * 'EMCMOT = motmod' - Utilise typiquement le nom du contrôleur de mouvement. * 'BASE_PERIOD = 50000' - (((BASE PERIOD))) (HAL) Période de base des tâches, -exprimée en ns. + exprimée en ns. //// C'est la plus rapide des horloges de la machine. @@ -664,7 +663,7 @@ Choisir une BASE_PERIOD trop basse peut amener à des messages //// * 'SERVO_PERIOD = 1000000' - (((SERVO PERIOD))) (hal) Période de la tâche -'Servo', exprimée également en nanosecondes. + 'Servo', exprimée également en nanosecondes. //// Cette valeur sera arrondie à un multiple entier de 'BASE_PERIOD'. @@ -687,69 +686,65 @@ Excepté pour les machines avec une cinématique particulière //// [[sub:Section-TASK]] -=== Section [TASK] -(((Section [TASK] du fichier ini))) +=== Section [TASK](((Section [TASK] du fichier ini))) * 'TASK = milltask' - Indique le nom de la 'tâche' exécutable. La tâche réalise -différentes actions, telles que communiquer avec les interfaces utilisateur au -dessus de NML, communiquer avec le planificateur de mouvements temps réel dans -la mémoire partagée non-HAL, et interpréter le g-code. -Actuellement il n'y a qu'une seule tâche exécutable qui fait sens pour -99,9% des utilisateurs, milltask. + différentes actions, telles que communiquer avec les interfaces utilisateur au + dessus de NML, communiquer avec le planificateur de mouvements temps réel dans + la mémoire partagée non-HAL, et interpréter le g-code. + Actuellement il n'y a qu'une seule tâche exécutable qui fait sens pour + 99,9% des utilisateurs, milltask. * 'CYCLE_TIME = 0.010' - Période exprimée en secondes, à laquelle TASK -va tourner. Ce paramètre affecte l'intervalle de polling lors de l'attente de -la fin d'un mouvement, lors de l'exécution d'une pause d'instruction et quand -une commande provenant d'une interface utilisateur est acceptée. Il -n'est généralement pas nécessaire de modifier cette valeur. + va tourner. Ce paramètre affecte l'intervalle de polling lors de l'attente de + la fin d'un mouvement, lors de l'exécution d'une pause d'instruction et quand + une commande provenant d'une interface utilisateur est acceptée. Il + n'est généralement pas nécessaire de modifier cette valeur. [[sub:Section-HAL]] -=== Section [HAL] -(((Section [HAL] du fichier ini ))) +=== Section [HAL](((Section [HAL] du fichier ini ))) * 'TWOPASS=ON' - Utilise le processus 'twopass' (double passe) pour charger -les composants HAL. Avec le processus TWOPASS, tous les fichiers [HAL]HALFILES -sont premièrement lus et les occurrences multiples des directives à loadrt -pour chaque module sont cumulées. Aucune commande HAL n'est exécutée à -la première passe. + les composants HAL. Avec le processus TWOPASS, tous les fichiers [HAL]HALFILES + sont premièrement lus et les occurrences multiples des directives à loadrt + pour chaque module sont cumulées. Aucune commande HAL n'est exécutée à + la première passe. * 'HALFILE = example.hal' - Exécute le fichier 'example.hal' au démarrage. -Si 'HALFILE' est spécifié plusieurs fois, les fichiers sont exécutés dans -l'ordre de leur apparition dans le fichier ini. Presque toutes les -configurations auront au moins un 'HALFILE' . Les systèmes à moteurs -pas à pas ont généralement deux de ces fichiers, un qui spécifie la -configuration générale des moteurs 'core_stepper.hal' et un qui spécifie le -brochage des sorties 'xxx_pinout.hal'. + Si 'HALFILE' est spécifié plusieurs fois, les fichiers sont exécutés dans + l'ordre de leur apparition dans le fichier ini. Presque toutes les + configurations auront au moins un 'HALFILE' . Les systèmes à moteurs + pas à pas ont généralement deux de ces fichiers, un qui spécifie la + configuration générale des moteurs 'core_stepper.hal' et un qui spécifie le + brochage des sorties 'xxx_pinout.hal'. * 'HAL = command' - Exécute 'command' comme étant une simple commande hal. -Si 'HAL' est spécifié plusieurs fois, les commandes sont exécutées dans -l'ordre où elles apparaissent dans le fichier ini. Les lignes 'HAL' -sont exécutées après toutes les lignes 'HALFILE'. + Si 'HAL' est spécifié plusieurs fois, les commandes sont exécutées dans + l'ordre où elles apparaissent dans le fichier ini. Les lignes 'HAL' + sont exécutées après toutes les lignes 'HALFILE'. * 'SHUTDOWN = shutdown.hal' - Exécute le fichier 'shutdown.hal' quand LinuxCNC -s'arrête. Selon les pilotes de matériel utilisés, il est ainsi possible de -positionner les sorties sur des valeurs définies quand LinuxCNC s'arrête -normalement. Cependant, parce qu'il n'y a aucune garantie que ce fichier sera -exécuté (par exemple, dans le cas d'une panne de l'ordinateur), il ne -remplace pas une véritable chaîne physique d'arrêt d'urgence ou -d'autres dispositifs logiciels de protection des défauts de fonctionnement comme -la pompe de charge ou le watchdog. + s'arrête. Selon les pilotes de matériel utilisés, il est ainsi possible de + positionner les sorties sur des valeurs définies quand LinuxCNC s'arrête + normalement. Cependant, parce qu'il n'y a aucune garantie que ce fichier sera + exécuté (par exemple, dans le cas d'une panne de l'ordinateur), il ne + remplace pas une véritable chaîne physique d'arrêt d'urgence ou + d'autres dispositifs logiciels de protection des défauts de fonctionnement comme + la pompe de charge ou le watchdog. * 'POSTGUI_HALFILE = example2.hal' - (Seulement avec les interfaces TOUCHY et -AXIS) Exécute 'example2.hal' après que l'interface graphique ait créé ses HAL -pins. + AXIS) Exécute 'example2.hal' après que l'interface graphique ait créé ses HAL + pins. [[sub:Section-HALUI]] -=== Section [HALUI] -(((Section [HALUI] du fichier ini ))) +=== Section [HALUI](((Section [HALUI] du fichier ini ))) * 'MDI_COMMAND = G53 G0 X0 Y0 Z0' - Une commande MDI peut être exécuté en -utilisant 'halui.mdi-command-00'. Incrémente le nombre pour chaque commande -énumérée dans la section [HALUI]. + utilisant 'halui.mdi-command-00'. Incrémente le nombre pour chaque commande + énumérée dans la section [HALUI]. [[sub:Section-TRAJ]] -=== Section [TRAJ] -(((Section [TRAJ] du fichier ini ))) +=== Section [TRAJ](((Section [TRAJ] du fichier ini ))) La section [TRAJ] contient les paramètres généraux du module planificateur de trajectoires de EMCMOT. Vous n'aurez pas à modifier @@ -834,8 +829,7 @@ limites logicielles pendant les mouvements ce qui n'est pas souhaitable pour un fonctionnement normal! [[sub:Sections-AXIS]] -=== Sections [AXIS_n] -(((Sections [AXIS_n] du fichier ini))) +=== Sections [AXIS_n](((Sections [AXIS_n] du fichier ini))) Les sections [AXIS_0], [AXIS_1], etc. contiennent les paramètres généraux des composants individuels du module de contrôle. La @@ -950,7 +944,7 @@ puis 'Calibration'. === Section [HOMING] Les paramètres suivants sont relatifs aux prises d'origine, pour plus -d'informations, lire <>. +d'informations, lire <>. * 'HOME = 0.0' - La position à laquelle le mobile ira à la fin de la séquence de prise d'origine. diff --git a/docs/src/gcode/g-code.adoc b/docs/src/gcode/g-code.adoc index 023062c1d5f..60d2140d8bd 100644 --- a/docs/src/gcode/g-code.adoc +++ b/docs/src/gcode/g-code.adoc @@ -1355,7 +1355,7 @@ G52 axes 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 -<> section. +<> section. [[gcode:g53]] == G53 Move in Machine Coordinates(((G53 Machine Coordinates))) diff --git a/docs/src/gcode/g-code_fr.adoc b/docs/src/gcode/g-code_fr.adoc index f7ee3d84019..fb52892b0f2 100644 --- a/docs/src/gcode/g-code_fr.adoc +++ b/docs/src/gcode/g-code_fr.adoc @@ -779,8 +779,8 @@ G10 L10 P1 Z1.5 (fixe la position courante en Z à 1.5 dans la table d'outils) G43 (recharge l'offset de longueur d'outil depuis la table d'outils modifiée) M2 (fin de programme) ---- -Pour d'autres détals voir les commandes <>, -<> et <>/<>. +Pour d'autres détals voir les commandes <>, +<> et <>/<>. C'est une erreur si: @@ -1234,8 +1234,8 @@ C'est une erreur si: * La compensation d'outil est activée alors qu'elle est déjà active. Plus d'informations sur <>, sur <> et -<>. +outils>>, sur <> et +<>. [[gcode:g43]] == G43 Activation de la compensation de longueur d'outil(((G43 Activation de la compensation de longueur d'outil))) diff --git a/docs/src/gcode/machining-center_fr.adoc b/docs/src/gcode/machining-center_fr.adoc index 1cc8ee40072..0944e380062 100644 --- a/docs/src/gcode/machining-center_fr.adoc +++ b/docs/src/gcode/machining-center_fr.adoc @@ -252,13 +252,13 @@ trajectoire: légèrement arrondis pour que la vitesse soit maintenue (sans dépasser la tolérance, si elle est spécifiée). -Voir également les G-codes <> et <> des +Voir également les G-codes <> et <> des contrôles de trajectoire. -[[sec:Interaction-vitesses]] -[[sec:Interaction-effacement-de-bloc]] -[[sec:Interaction-arrets-optionnels]] -== Interaction de l'interpréteur avec les boutons(((Interraction vitesse)))(((effacement de bloc)))(((Arrêts optionnels))) +[[sec:Interaction-vitesses]](((Interraction vitesse))) +[[sec:Interaction-effacement-de-bloc]](((effacement de bloc))) +[[sec:Interaction-arrets-optionnels]](((Arrêts optionnels))) +== Interaction de l'interpréteur avec les boutons L'interpréteur interagit avec plusieurs boutons de commande. Cette section décrit ces interactions plus en détail. En aucun cas diff --git a/docs/src/gcode/other-code_fr.adoc b/docs/src/gcode/other-code_fr.adoc index 717b5aeb041..ee54a7f474d 100644 --- a/docs/src/gcode/other-code_fr.adoc +++ b/docs/src/gcode/other-code_fr.adoc @@ -6,8 +6,7 @@ [[cha:Les-autres-codes]] [[sec:F-Vitesse]] -== F: Réglage de la vitesse d'avance travail -(((F: Réglage de la vitesse d'avance travail))) +== F: Réglage de la vitesse d'avance travail(((F: Réglage de la vitesse d'avance travail))) Pour régler la vitesse d'avance, programmer 'F-'. L'application de la vitesse est telle que décrite dans l'aperçu global d'une @@ -16,8 +15,7 @@ que le mode vitesse inverse du temps ne soit activé, dans ce cas, la vitesse es telle que décrite dans la section sur le choix des modes de <>. [[sec:S-Broche]] -== S: Réglage de la vitesse de rotation de la broche -(((S: Réglage de la vitesse de rotation de la broche))) +== S: Réglage de la vitesse de rotation de la broche(((S: Réglage de la vitesse de rotation de la broche))) Pour régler la vitesse en tours par minute (tr/mn) de la broche, programmer 'S-'. La broche va tourner à cette vitesse quand elle sera programmée pour tourner. @@ -31,16 +29,15 @@ C'est une erreur si: * La valeur de S est négative. -Comme décrit dans la section <>, si un cycle de perçage 'G84' (taraudage) est actif et que +Comme décrit dans la section <>, +si un cycle de perçage 'G84' (taraudage) est actif et que les potentiomètres de vitesse et d'avance sont autorisés, celui qui a le réglage le plus bas sera utilisé. La vitesse de rotation et d'avance resterons synchronisées. Dans ce cas, la vitesse peut différer de celle programmée, même si le potentiomètre de correction de vitesse travail est sur 100%. [[sec:T-Choix-Outil]] -== T: Choix de l'outil -(((T: Choix de l'outil))) +== T: Choix de l'outil(((T: Choix de l'outil))) Pour sélectionner un outil, programmer 'T-', où la valeur de 'T' correspond au numéro de la poche d'outil dans le carrousel. L'outil ne sera @@ -57,7 +54,7 @@ C'est une erreur si: * Un valeur négative de T est utilisée. * Une valeur de T supérieure au nombre de poches d'outils dans le - carrousel est utilisée. + carrousel est utilisée. Sur certaines machines, le carrousel se déplace lorsque le mot T est programmé, avec l'usinage en cours. Sur ces machines, programmer 'Tn', diff --git a/docs/src/gcode/overview_fr.adoc b/docs/src/gcode/overview_fr.adoc index 8ec637dadf8..d0c9047943a 100644 --- a/docs/src/gcode/overview_fr.adoc +++ b/docs/src/gcode/overview_fr.adoc @@ -1020,7 +1020,7 @@ Rappelez vous que == Exigences des fichiers Un programme G-code doit contenir une ou plusieurs lignes de G-code puis se -terminer par une ligne de<>. +terminer par une ligne de<>. Tout G-code, placé après cette ligne de fin de programme, sera ignoré. Si le programme n'utilise pas G-code de fin de programme, une paire de @@ -1048,8 +1048,7 @@ chargement des fichiers conséquents. L'aperçu peut être désactivé en passant un <>. [[sec:Ordre-d-execution]] -== Ordre d'exécution -(((Ordre d'exécution))) +== Ordre d'exécution(((Ordre d'exécution))) L'ordre d'exécution des éléments d'une ligne est défini, non pas par sa position dans la ligne mais par la liste suivante: @@ -1084,8 +1083,7 @@ mot n'est permis sur la même ligne. (éventuellement) par G53. * Arrêt (M0, M1, M2, M30, M60). -== G-Code: Bonnes pratiques -(((G-Code bonnes pratiques))) +== G-Code: Bonnes pratiques(((G-Code bonnes pratiques))) === Utiliser un nombre de décimales approprié diff --git a/docs/src/gcode/tool-compensation_fr.adoc b/docs/src/gcode/tool-compensation_fr.adoc index ce710519fc8..eec9d6851dc 100644 --- a/docs/src/gcode/tool-compensation_fr.adoc +++ b/docs/src/gcode/tool-compensation_fr.adoc @@ -43,13 +43,13 @@ dans la table d'outils: G-code pour des explications plus détaillées) G10 L1 Pn - (n est le N° d'outil) Fixe les offsets de l'outil. La position -courante n'est pas significative. <>.(((G10 L1))) +courante n'est pas significative. <>.(((G10 L1))) G10 L10 Pn - (n est le N° d'outil) Fixe l'offset à la position courante, met -les valeurs dans un système de 1 à 8. <>.(((G10 L10))) +les valeurs dans un système de 1 à 8. <>.(((G10 L10))) G10 L11 Pn - (n est le N° d'outil) Fixe l'offset à la position courante, met -les valeurs dans le système 9. <>.(((G10 L11))) +les valeurs dans le système 9. <>.(((G10 L11))) [[sec:Table-Outils]] == Table d'outils diff --git a/docs/src/gui/axis_fr.adoc b/docs/src/gui/axis_fr.adoc index 44c8a431d58..ea95d74327a 100644 --- a/docs/src/gui/axis_fr.adoc +++ b/docs/src/gui/axis_fr.adoc @@ -1,7 +1,6 @@ :lang: fr :toc: -[[cha:Axis]] [[cha:axis-gui]] = L'interface graphique AXIS diff --git a/docs/src/index.tmpl b/docs/src/index.tmpl index 6f45ad6f523..44114b61eea 100644 --- a/docs/src/index.tmpl +++ b/docs/src/index.tmpl @@ -204,7 +204,7 @@ function setup_page(){ diff --git a/docs/src/index_es.tmpl b/docs/src/index_es.tmpl index b420e8acad7..f0a463cd1ce 100644 --- a/docs/src/index_es.tmpl +++ b/docs/src/index_es.tmpl @@ -216,7 +216,7 @@ function setup_page(){
    • " Servo To Go
    • " ShuttleXpress y ShuttlePRO
    • " VFS11 -
    • " VFD Mitsubishi
    • +
    • " VFD Mitsubishi
  • Classicladder diff --git a/docs/src/lathe/lathe-user_fr.adoc b/docs/src/lathe/lathe-user_fr.adoc index 37443a5e3e3..55c5a4f2de9 100644 --- a/docs/src/lathe/lathe-user_fr.adoc +++ b/docs/src/lathe/lathe-user_fr.adoc @@ -193,7 +193,7 @@ rotation et doit se faire avec l'outil de référence (celui qui a l'offset à z .Avance par tour L'avance par tour déplace l'axe Z de la valeur de F à chaque tour. Ce n'est pas destiné au filetage pour lequel il faut utiliser G76. -D'autres informations sont dans la section sur <>. +D'autres informations sont dans la section sur <>. == Arcs diff --git a/docs/src/user/user-intro_fr.adoc b/docs/src/user/user-intro_fr.adoc index 3c54bc6f454..fa7c1ded2dc 100644 --- a/docs/src/user/user-intro_fr.adoc +++ b/docs/src/user/user-intro_fr.adoc @@ -55,7 +55,7 @@ l'opérateur de la machine. LinuxCNC est fourni avec plusieurs interfaces utilisateurs graphiques: -* <>, l'interface utilisateur standard. +* <>, l'interface utilisateur standard. .L'interface graphique AXIS[[fig:Interface-graphique-AXIS]] image::images/axis_25_fr.png["L'interface graphique AXIS",align="center"] From 4cfd9d8af6b2e3fc5c5f1747ba402e649f7bfb17 Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Sat, 19 Mar 2022 12:29:11 +0100 Subject: [PATCH 32/53] manually updated anchors in gcode_fr.html --- docs/html/gcode_fr.html | 162 ++++++++++++++++++++-------------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/docs/html/gcode_fr.html b/docs/html/gcode_fr.html index 4fa216366db..6bd011586a9 100644 --- a/docs/html/gcode_fr.html +++ b/docs/html/gcode_fr.html @@ -48,79 +48,79 @@ Codes Paramètres Description Mouvements (X Y Z A B C U V W s'appliquent à tous les mouvements) - G0 Interpolation linéaire en vitesse rapide - G1 Interpolation linéaire en vitesse programmée - G2, G3 I J K ou R, P Interpolation circulaire ("ou hélicoïdale") sens horaire, sens anti-horaire - G4 P Temporisation (secondes) - G5 I J P Q Spline cubique - G5.1 I J B-spline quadratique - G5.2 P L NURBS, ajout point de contrôle - G5.3 NURBS, Exécute - G38.2…G38.5 Mesure au palpeur - G80 Révocation des codes modaux - G81 R L P Cycle de perçage - G73,G82…G89 R L P Q Autres cycles préprogrammés - G33 K Filetage avec broche synchronisée - G33.1 K Taraudage rigide - G76 P Z I J R K Q H L E Cycle de filetage préprogrammé (tour) + G0 Interpolation linéaire en vitesse rapide + G1 Interpolation linéaire en vitesse programmée + G2, G3 I J K ou R, P Interpolation circulaire ("ou hélicoïdale") sens horaire, sens anti-horaire + G4 P Temporisation (secondes) + G5 I J P Q Spline cubique + G5.1 I J B-spline quadratique + G5.2 P L NURBS, ajout point de contrôle + G5.3 NURBS, Exécute + G38.2…G38.5 Mesure au palpeur + G80 Révocation des codes modaux + G81 R L P Cycle de perçage + G73,G82…G89 R L P Q Autres cycles préprogrammés + G33 K Filetage avec broche synchronisée + G33.1 K Taraudage rigide + G76 P Z I J R K Q H L E Cycle de filetage préprogrammé (tour) Types de déplacements - G90 Déplacements en coordonnées absolues (par rapport à l'origine) - G91 Déplacements en coordonnées relatives (incrémentales) - G90.1 Arc centers I,J,K are absolute - G91.1 Arc centers I,J,K are relative to the arc's starting point - G7 X en mode diamètre (tour) - G8 X en mode rayon (tour) + G90 Déplacements en coordonnées absolues (par rapport à l'origine) + G91 Déplacements en coordonnées relatives (incrémentales) + G90.1 Arc centers I,J,K are absolute + G91.1 Arc centers I,J,K are relative to the arc's starting point + G7 X en mode diamètre (tour) + G8 X en mode rayon (tour) Modes de vitesses - G93 Vitesse inverse du temps (vitesse/distance) - G94 Vitesse en unités par minute - G95 Vitesse en unités par tour + G93 Vitesse inverse du temps (vitesse/distance) + G94 Vitesse en unités par minute + G95 Vitesse en unités par tour Contrôle de broche - M3, M4 S Marche broche sens horaire, sens anti-horaire - M5 Arrêt de la broche - M19 Orientation de la broche - G96 D S Vitesse de coupe constante (pieds par minute ou mètres par minute) - G97 Vitesse en tours par minute + M3, M4 S Marche broche sens horaire, sens anti-horaire + M5 Arrêt de la broche + M19 Orientation de la broche + G96 D S Vitesse de coupe constante (pieds par minute ou mètres par minute) + G97 Vitesse en tours par minute Arrosages - M7 Marche gouttelettes - M8 Marche arrosage - M9 Arrêt des arrosages + M7 Marche gouttelettes + M8 Marche arrosage + M9 Arrêt des arrosages Correcteurs de longueur d'outil - G43 H Compensation de longueur d'outil depuis une table d'outils - G43.1 I K Compensation dynamique de longueur d'outil - G49 Révocation de la compensation de longueur d'outil + G43 H Compensation de longueur d'outil depuis une table d'outils + G43.1 I K Compensation dynamique de longueur d'outil + G49 Révocation de la compensation de longueur d'outil Arrêts de programme - M0 Pause dans le programme - M1 Pause optionnelle dans le programme - M2, M30 Fin de programme - M60 Pause pour changement de pièce + M0 Pause dans le programme + M1 Pause optionnelle dans le programme + M2, M30 Fin de programme + M60 Pause pour changement de pièce Unités machine - G20 Unité machine: Pouce - G21 Unité machine: Millimètre + G20 Unité machine: Pouce + G21 Unité machine: Millimètre Choix du plan de travail (affecte G2, G3, G81…G89, G40…G42) - G17 Plan de travail XY - G18 Plan de travail XZ - G19 Plan de travail YZ + G17 Plan de travail XY + G18 Plan de travail XZ + G19 Plan de travail YZ Compensation de rayon d'outil - G41, G42 D Compensation de rayon d'outil, à gauche ou à droite du profil - G41.1, G42.1 D L Compensation dynamique de rayon d'outil, à gauche ou à droite du profil - G40 Révocation de la compensation de rayon d'outil + G41, G42 D Compensation de rayon d'outil, à gauche ou à droite du profil + G41.1, G42.1 D L Compensation dynamique de rayon d'outil, à gauche ou à droite du profil + G40 Révocation de la compensation de rayon d'outil Types de contrôle des trajectoires - G61 Mode trajectoire exacte - G61.1 Mode arrêt exact - G64 P Mode trajectoire continue avec tolérance optionnelle + G61 Mode trajectoire exacte + G61.1 Mode arrêt exact + G64 P Mode trajectoire continue avec tolérance optionnelle Options de retrait des cycles de perçage - G98 Retrait au point initial - G99 Retrait sur R + G98 Retrait au point initial + G99 Retrait sur R Autres codes modaux F Réglage vitesse travail S Réglage vitesse broche T Choix de l'outil - M48, M49 Contrôle des correcteurs de vitesse - M50 P0 (sans) ou P1 (avec) Correcteur de vitesse travail - M51 P0 (sans) ou P1 (avec) Correcteur de vitesse broche - M52 P0 (sans) ou P1 (avec) Contrôle de vitesse adaptative - M53 P0 (sans) ou P1 (avec) Contrôle de la coupure de vitesse - G54…G59, G59.1…G59.3 Choix du système de coordonnées (1 à 9) + M48, M49 Contrôle des correcteurs de vitesse + M50 P0 (sans) ou P1 (avec) Correcteur de vitesse travail + M51 P0 (sans) ou P1 (avec) Correcteur de vitesse broche + M52 P0 (sans) ou P1 (avec) Contrôle de vitesse adaptative + M53 P0 (sans) ou P1 (avec) Contrôle de la coupure de vitesse + G54…G59, G59.1…G59.3 Choix du système de coordonnées (1 à 9) Instructions de contrôle O … sub/endsub, while/endwhile, if/else/endif, do/while, call, break/continue/return @@ -129,33 +129,33 @@ O- while Boucles, while/endwhile do/while O- if Conditionnels, if/else/endif O- repeat Répète n fois l'exécution de blocs de code - M70 Enregistre l'état modal - M71 Invalide l'état modal enregistré - M72 Restaure l'état modal enregistré - M73 Enregistre et auto-restaure l'état modal + M70 Enregistre l'état modal + M71 Invalide l'état modal enregistré + M72 Restaure l'état modal enregistré + M73 Enregistre et auto-restaure l'état modal Codes d'entrée/sortie - M62…M65 P Contrôle de sortie numérique - M66 P E L Q Contrôle d'entrée numérique et analogique - M67 T Sortie analogique synchronisée au mouvement - M68 T Sortie analogique directe + M62…M65 P Contrôle de sortie numérique + M66 P E L Q Contrôle d'entrée numérique et analogique + M67 T Sortie analogique synchronisée au mouvement + M68 T Sortie analogique directe Codes non modaux - M6 T Appel d'outil - M61 Q Fixe le numéro de l'outil courant + M6 T Appel d'outil + M61 Q Fixe le numéro de l'outil courant - G10 L1 P Q R X W Z Entrée longueur, rayon, orientation de l'outil dans la table d'outils - G10 L10 P axes Modifie les offsets d'outil dans la table d'outils, selon les coordonnées pièce - G10 L11 P axes Modifie les offsets d'outil dans la table d'outils, selon les coordonnées du porte-pièce - G10 L2 P X Y Z A B C Établissement de l'origine d'un systéme de coordonnées (1 à 9) - G10 L20 P axes Place le système de coordonnées courant à des valeurs calculées - G28, G28.1 Aller à une position prédéfinie, enregistrement du point courant - G30, G30.1 Aller à une position prédéfinie, enregistrement du point courant - G53 Déplacements en coordonnées machine - G92 X Y Z A B C Décalages d'origines avec mise à jour des paramétres - G92.1 Révocation des décalages d'origine avec remise à zéro des paramètres - G92.2 Révocation des décalages d'origine sans remise à zero des paramètres - G92.3 Applique le contenu des paramétres aux décalages d'origine - M101…M199 P Q M-codes définis par l'opérateur + G10 L1 P Q R X W Z Entrée longueur, rayon, orientation de l'outil dans la table d'outils + G10 L10 P axes Modifie les offsets d'outil dans la table d'outils, selon les coordonnées pièce + G10 L11 P axes Modifie les offsets d'outil dans la table d'outils, selon les coordonnées du porte-pièce + G10 L2 P X Y Z A B C Établissement de l'origine d'un systéme de coordonnées (1 à 9) + G10 L20 P axes Place le système de coordonnées courant à des valeurs calculées + G28, G28.1 Aller à une position prédéfinie, enregistrement du point courant + G30, G30.1 Aller à une position prédéfinie, enregistrement du point courant + G53 Déplacements en coordonnées machine + G92 X Y Z A B C Décalages d'origines avec mise à jour des paramétres + G92.1 Révocation des décalages d'origine avec remise à zéro des paramètres + G92.2 Révocation des décalages d'origine sans remise à zero des paramètres + G92.3 Applique le contenu des paramétres aux décalages d'origine + M101…M199 P Q M-codes définis par l'opérateur Commentaires et messages (…) Un commentaire "" pour l'opérateur (MSG,…) Affiche le message "" pour l'opérateur (ex: dans une fenêtre) From 56690fb350f9b7449c388c62749adbe78de5507b Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Sat, 19 Mar 2022 12:36:17 +0100 Subject: [PATCH 33/53] Fixing more anchors to become language-independent --- docs/src/gcode/g-code_fr.adoc | 22 ++++++++++------------ docs/src/gcode/m-code_fr.adoc | 2 +- docs/src/gcode/other-code_fr.adoc | 2 +- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/docs/src/gcode/g-code_fr.adoc b/docs/src/gcode/g-code_fr.adoc index fb52892b0f2..d7eaadedbe4 100644 --- a/docs/src/gcode/g-code_fr.adoc +++ b/docs/src/gcode/g-code_fr.adoc @@ -67,7 +67,7 @@ chose. |<> | Fixe les valeurs de l'outil dans la table d'outils |<> | Fixe l'origine d'un système de coordonnées |<> | Fixe l'origine du système de coord. aux valeurs calculées -|<> | Choix du plan de travail +|<> | Choix du plan de travail |<> | Unités machine |<> | Aller à une position prédéfinie |<> | Aller à une position prédéfinie @@ -99,9 +99,9 @@ chose. |<> | Types de déplacement |<> | Arc I,J,K, centre absolu ou relatif |<> | Décalages d'origines avec mise à jour des paramètres -|<> | Révocation des décalages d'origine +|<> | Révocation des décalages d'origine |<> | Applique contenu des paramètres aux déc. d'origine -|<> | Modes de vitesse +|<> | Modes de vitesse |<> | Vitesse de coupe constante (IPM ou m/mn) |<> | Vitesse en tours par minute |<> | Options de retrait des cycles de perçage @@ -288,7 +288,7 @@ Aucun mots d'axe mais tous les décalages doivent être programmés pour un cercle complet. Le mot 'P', par défaut à 1, est facultatif. Pour d'avantage d'information sur les arcs en mode absolu, voir la -<>. +<>. .Plan XY (G17) ---- @@ -1783,8 +1783,7 @@ ce G80, il ne serait pas aussi évident que tous les blocs compris entre N120 et N200 appartiennent au cycle de perçage. [[gcode:g81]] -== G81 Cycle de perçage -(((G81 Cycle de perçage))) +== G81 Cycle de perçage(((G81 Cycle de perçage))) ---- G81 (X- Y- Z- ) ou (U- V- W- ) R- L- @@ -1792,16 +1791,15 @@ G81 (X- Y- Z- ) ou (U- V- W- ) R- L- Le cycle 'G81' est destiné au perçage. -. Un mouvement préliminaire, comme décrit <>. -. Un déplacement de l'axe Z seul à la vitesse programmée, vers la - position Z programmée. - . Retrait de l'axe Z en vitesse rapide jusqu'au plan de retrait R. +. Un mouvement préliminaire, comme décrit <>. +. Un déplacement de l'axe Z seul à la vitesse programmée, vers la position Z programmée. +. Retrait de l'axe Z en vitesse rapide jusqu'au plan de retrait R. -.Exemple 1: G81 en position absolue[[gcode:g81]] +.Exemple 1: G81 en position absolute Supposons que la position courante soit, X1, Y2, Z3 dans le plan XY, la ligne de code suivante est interprétée: + ---- G90 G81 G98 X4 Y5 Z1.5 R2.8 ---- diff --git a/docs/src/gcode/m-code_fr.adoc b/docs/src/gcode/m-code_fr.adoc index cc7538ee25a..c56deeba42b 100644 --- a/docs/src/gcode/m-code_fr.adoc +++ b/docs/src/gcode/m-code_fr.adoc @@ -480,7 +480,7 @@ Une invocation récursive d'un sous-programme introduit un nouveau niveau d'appe == M71 Invalidation de l'état modal enregistré(((M71 Invalidate Stored Modal State))) <> ou par -<> au niveau de l'appel courant est +<> au niveau de l'appel courant est invalidé (ne peut plus être restauré nulle part). Un appel ultérieur à 'M72' sur le même niveau d'appel, échouera. diff --git a/docs/src/gcode/other-code_fr.adoc b/docs/src/gcode/other-code_fr.adoc index ee54a7f474d..0ddfa5d5ac4 100644 --- a/docs/src/gcode/other-code_fr.adoc +++ b/docs/src/gcode/other-code_fr.adoc @@ -42,7 +42,7 @@ si le potentiomètre de correction de vitesse travail est sur 100%. Pour sélectionner un outil, programmer 'T-', où la valeur de 'T' correspond au numéro de la poche d'outil dans le carrousel. L'outil ne sera appelé et changé que quand un 'M6' sera programmé voir la section -<>. Le mot 'T' peut apparaitre sur la +<>. Le mot 'T' peut apparaitre sur la même ligne que le 'M6' ou sur une ligne précédente. Il est permis, mais normalement inutile, qu'un mot T apparaisse à plus de deux lignes avant, sans changement d'outil. Le carrousel peut bouger, seulement le plus récent mot From 54c3fbef212b807aa77cc66207cd967fe4de200b Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Sat, 19 Mar 2022 13:01:02 +0100 Subject: [PATCH 34/53] More fixes downstream go gcode_fr -> g-code_fr rename Renamed file refercens gcode_fr -> g-code_fr --- docs/html/gcode_fr.html | 120 +++++++++++++++++----------------- docs/src/gcode/g-code.adoc | 8 +-- docs/src/gcode/g-code_fr.adoc | 2 +- docs/src/index_fr.tmpl | 2 +- 4 files changed, 64 insertions(+), 68 deletions(-) diff --git a/docs/html/gcode_fr.html b/docs/html/gcode_fr.html index 6bd011586a9..0750f7fc944 100644 --- a/docs/html/gcode_fr.html +++ b/docs/html/gcode_fr.html @@ -48,79 +48,79 @@ Codes Paramètres Description Mouvements (X Y Z A B C U V W s'appliquent à tous les mouvements) - G0 Interpolation linéaire en vitesse rapide - G1 Interpolation linéaire en vitesse programmée - G2, G3 I J K ou R, P Interpolation circulaire ("ou hélicoïdale") sens horaire, sens anti-horaire - G4 P Temporisation (secondes) - G5 I J P Q Spline cubique - G5.1 I J B-spline quadratique - G5.2 P L NURBS, ajout point de contrôle - G5.3 NURBS, Exécute - G38.2…G38.5 Mesure au palpeur - G80 Révocation des codes modaux - G81 R L P Cycle de perçage - G73,G82…G89 R L P Q Autres cycles préprogrammés - G33 K Filetage avec broche synchronisée - G33.1 K Taraudage rigide - G76 P Z I J R K Q H L E Cycle de filetage préprogrammé (tour) + G0 Interpolation linéaire en vitesse rapide + G1 Interpolation linéaire en vitesse programmée + G2, G3 I J K ou R, P Interpolation circulaire ("ou hélicoïdale") sens horaire, sens anti-horaire + G4 P Temporisation (secondes) + G5 I J P Q Spline cubique + G5.1 I J B-spline quadratique + G5.2 P L NURBS, ajout point de contrôle + G5.3 NURBS, Exécute + G38.2…G38.5 Mesure au palpeur + G80 Révocation des codes modaux + G81 R L P Cycle de perçage + G73,G82…G89 R L P Q Autres cycles préprogrammés + G33 K Filetage avec broche synchronisée + G33.1 K Taraudage rigide + G76 P Z I J R K Q H L E Cycle de filetage préprogrammé (tour) Types de déplacements - G90 Déplacements en coordonnées absolues (par rapport à l'origine) - G91 Déplacements en coordonnées relatives (incrémentales) - G90.1 Arc centers I,J,K are absolute - G91.1 Arc centers I,J,K are relative to the arc's starting point - G7 X en mode diamètre (tour) - G8 X en mode rayon (tour) + G90 Déplacements en coordonnées absolues (par rapport à l'origine) + G91 Déplacements en coordonnées relatives (incrémentales) + G90.1 Arc centers I,J,K are absolute + G91.1 Arc centers I,J,K are relative to the arc's starting point + G7 X en mode diamètre (tour) + G8 X en mode rayon (tour) Modes de vitesses - G93 Vitesse inverse du temps (vitesse/distance) - G94 Vitesse en unités par minute - G95 Vitesse en unités par tour + G93 Vitesse inverse du temps (vitesse/distance) + G94 Vitesse en unités par minute + G95 Vitesse en unités par tour Contrôle de broche M3, M4 S Marche broche sens horaire, sens anti-horaire M5 Arrêt de la broche - M19 Orientation de la broche - G96 D S Vitesse de coupe constante (pieds par minute ou mètres par minute) - G97 Vitesse en tours par minute + M19 Orientation de la broche + G96 D S Vitesse de coupe constante (pieds par minute ou mètres par minute) + G97 Vitesse en tours par minute Arrosages - M7 Marche gouttelettes - M8 Marche arrosage - M9 Arrêt des arrosages + M7 Marche gouttelettes + M8 Marche arrosage + M9 Arrêt des arrosages Correcteurs de longueur d'outil - G43 H Compensation de longueur d'outil depuis une table d'outils - G43.1 I K Compensation dynamique de longueur d'outil - G49 Révocation de la compensation de longueur d'outil + G43 H Compensation de longueur d'outil depuis une table d'outils + G43.1 I K Compensation dynamique de longueur d'outil + G49 Révocation de la compensation de longueur d'outil Arrêts de programme M0 Pause dans le programme M1 Pause optionnelle dans le programme M2, M30 Fin de programme M60 Pause pour changement de pièce Unités machine - G20 Unité machine: Pouce - G21 Unité machine: Millimètre + G20 Unité machine: Pouce + G21 Unité machine: Millimètre Choix du plan de travail (affecte G2, G3, G81…G89, G40…G42) - G17 Plan de travail XY - G18 Plan de travail XZ - G19 Plan de travail YZ + G17 Plan de travail XY + G18 Plan de travail XZ + G19 Plan de travail YZ Compensation de rayon d'outil - G41, G42 D Compensation de rayon d'outil, à gauche ou à droite du profil - G41.1, G42.1 D L Compensation dynamique de rayon d'outil, à gauche ou à droite du profil - G40 Révocation de la compensation de rayon d'outil + G41, G42 D Compensation de rayon d'outil, à gauche ou à droite du profil + G41.1, G42.1 D L Compensation dynamique de rayon d'outil, à gauche ou à droite du profil + G40 Révocation de la compensation de rayon d'outil Types de contrôle des trajectoires - G61 Mode trajectoire exacte - G61.1 Mode arrêt exact - G64 P Mode trajectoire continue avec tolérance optionnelle + G61 Mode trajectoire exacte + G61.1 Mode arrêt exact + G64 P Mode trajectoire continue avec tolérance optionnelle Options de retrait des cycles de perçage - G98 Retrait au point initial - G99 Retrait sur R + G98 Retrait au point initial + G99 Retrait sur R Autres codes modaux F Réglage vitesse travail S Réglage vitesse broche T Choix de l'outil - M48, M49 Contrôle des correcteurs de vitesse + M48, M49 Contrôle des correcteurs de vitesse M50 P0 (sans) ou P1 (avec) Correcteur de vitesse travail M51 P0 (sans) ou P1 (avec) Correcteur de vitesse broche M52 P0 (sans) ou P1 (avec) Contrôle de vitesse adaptative M53 P0 (sans) ou P1 (avec) Contrôle de la coupure de vitesse - G54…G59, G59.1…G59.3 Choix du système de coordonnées (1 à 9) + G54…G59, G59.1…G59.3 Choix du système de coordonnées (1 à 9) Instructions de contrôle O … sub/endsub, while/endwhile, if/else/endif, do/while, call, break/continue/return @@ -143,18 +143,18 @@ M6 T Appel d'outil M61 Q Fixe le numéro de l'outil courant - G10 L1 P Q R X W Z Entrée longueur, rayon, orientation de l'outil dans la table d'outils - G10 L10 P axes Modifie les offsets d'outil dans la table d'outils, selon les coordonnées pièce - G10 L11 P axes Modifie les offsets d'outil dans la table d'outils, selon les coordonnées du porte-pièce - G10 L2 P X Y Z A B C Établissement de l'origine d'un systéme de coordonnées (1 à 9) - G10 L20 P axes Place le système de coordonnées courant à des valeurs calculées - G28, G28.1 Aller à une position prédéfinie, enregistrement du point courant - G30, G30.1 Aller à une position prédéfinie, enregistrement du point courant - G53 Déplacements en coordonnées machine - G92 X Y Z A B C Décalages d'origines avec mise à jour des paramétres - G92.1 Révocation des décalages d'origine avec remise à zéro des paramètres - G92.2 Révocation des décalages d'origine sans remise à zero des paramètres - G92.3 Applique le contenu des paramétres aux décalages d'origine + G10 L1 P Q R X W Z Entrée longueur, rayon, orientation de l'outil dans la table d'outils + G10 L10 P axes Modifie les offsets d'outil dans la table d'outils, selon les coordonnées pièce + G10 L11 P axes Modifie les offsets d'outil dans la table d'outils, selon les coordonnées du porte-pièce + G10 L2 P X Y Z A B C Établissement de l'origine d'un systéme de coordonnées (1 à 9) + G10 L20 P axes Place le système de coordonnées courant à des valeurs calculées + G28, G28.1 Aller à une position prédéfinie, enregistrement du point courant + G30, G30.1 Aller à une position prédéfinie, enregistrement du point courant + G53 Déplacements en coordonnées machine + G92 X Y Z A B C Décalages d'origines avec mise à jour des paramétres + G92.1 Révocation des décalages d'origine avec remise à zéro des paramètres + G92.2 Révocation des décalages d'origine sans remise à zero des paramètres + G92.3 Applique le contenu des paramétres aux décalages d'origine M101…M199 P Q M-codes définis par l'opérateur Commentaires et messages (…) Un commentaire "" pour l'opérateur diff --git a/docs/src/gcode/g-code.adoc b/docs/src/gcode/g-code.adoc index 60d2140d8bd..0d5a602f7ef 100644 --- a/docs/src/gcode/g-code.adoc +++ b/docs/src/gcode/g-code.adoc @@ -2030,8 +2030,8 @@ The 'G81' cycle is intended for drilling. The cycle functions as follows: - . Preliminary motion, as described in the - <> section. +. Preliminary motion, as described in the + <> section. . Move the Z-axis at the current <> to the Z position. @@ -2040,7 +2040,6 @@ The cycle functions as follows: [[gcode:g81-example]] .Example 1 - Absolute Position G81 - Suppose the current position is (X1, Y2, Z3) and the following line of NC code is interpreted. @@ -2063,11 +2062,8 @@ The R value and clear Z are 2.8. OLD_Z is 3. The following moves take place: . a <> parallel to the XY plane to (X4, Y5) - . a rapid move move parallel to the Z-axis to (Z2.8). - . move parallel to the Z-axis at the <> to (Z1.5) - . a rapid move parallel to the Z-axis to (Z3) image::images/g81ex1_en.svg[align="center"] diff --git a/docs/src/gcode/g-code_fr.adoc b/docs/src/gcode/g-code_fr.adoc index d7eaadedbe4..653e8446546 100644 --- a/docs/src/gcode/g-code_fr.adoc +++ b/docs/src/gcode/g-code_fr.adoc @@ -1795,8 +1795,8 @@ Le cycle 'G81' est destiné au perçage. . Un déplacement de l'axe Z seul à la vitesse programmée, vers la position Z programmée. . Retrait de l'axe Z en vitesse rapide jusqu'au plan de retrait R. +[[gcode:g81-example]] .Exemple 1: G81 en position absolute - Supposons que la position courante soit, X1, Y2, Z3 dans le plan XY, la ligne de code suivante est interprétée: diff --git a/docs/src/index_fr.tmpl b/docs/src/index_fr.tmpl index efdb5514826..f74e9240731 100644 --- a/docs/src/index_fr.tmpl +++ b/docs/src/index_fr.tmpl @@ -38,7 +38,7 @@
  • Les systèmes de coordonnées
  • Les compensations d'outil
  • Vue générale du G-code -
  • Tout le G-code +
  • Tout le G-code
  • Les M-codes
  • Les O-codes
  • Les autres codes From bcc051a68537ce2c04c6d25c331857c7e67495c5 Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Sat, 19 Mar 2022 16:52:34 +0100 Subject: [PATCH 35/53] Another iteration to get anchors into shape Yet another iteration on anchors. --- docs/html/gcode_fr.html | 22 ++++---- docs/src/gcode/coordinates.adoc | 1 - docs/src/gcode/coordinates_es.adoc | 17 +++--- docs/src/gcode/coordinates_fr.adoc | 56 ++++++++++++++++++- docs/src/gcode/g-code.adoc | 3 +- docs/src/gcode/g-code_fr.adoc | 86 ++++++++++++++++++++++++++++-- 6 files changed, 158 insertions(+), 27 deletions(-) diff --git a/docs/html/gcode_fr.html b/docs/html/gcode_fr.html index 0750f7fc944..96984d9aafc 100644 --- a/docs/html/gcode_fr.html +++ b/docs/html/gcode_fr.html @@ -54,8 +54,8 @@ G4 P Temporisation (secondes) G5 I J P Q Spline cubique G5.1 I J B-spline quadratique - G5.2 P L NURBS, ajout point de contrôle - G5.3 NURBS, Exécute + G5.2 P L NURBS, ajout point de contrôle + G5.3 NURBS, Exécute G38.2…G38.5 Mesure au palpeur G80 Révocation des codes modaux G81 R L P Cycle de perçage @@ -66,10 +66,10 @@ Types de déplacements G90 Déplacements en coordonnées absolues (par rapport à l'origine) G91 Déplacements en coordonnées relatives (incrémentales) - G90.1 Arc centers I,J,K are absolute - G91.1 Arc centers I,J,K are relative to the arc's starting point - G7 X en mode diamètre (tour) - G8 X en mode rayon (tour) + G90.1 Arc centers I,J,K are absolute + G91.1 Arc centers I,J,K are relative to the arc's starting point + G7 X en mode diamètre (tour) + G8 X en mode rayon (tour) Modes de vitesses G93 Vitesse inverse du temps (vitesse/distance) G94 Vitesse en unités par minute @@ -97,12 +97,12 @@ G20 Unité machine: Pouce G21 Unité machine: Millimètre Choix du plan de travail (affecte G2, G3, G81…G89, G40…G42) - G17 Plan de travail XY - G18 Plan de travail XZ - G19 Plan de travail YZ + G17 Plan de travail XY + G18 Plan de travail XZ + G19 Plan de travail YZ Compensation de rayon d'outil - G41, G42 D Compensation de rayon d'outil, à gauche ou à droite du profil - G41.1, G42.1 D L Compensation dynamique de rayon d'outil, à gauche ou à droite du profil + G41, G42 D Compensation de rayon d'outil, à gauche ou à droite du profil + G41.1, G42.1 D L Compensation dynamique de rayon d'outil, à gauche ou à droite du profil G40 Révocation de la compensation de rayon d'outil Types de contrôle des trajectoires G61 Mode trajectoire exacte diff --git a/docs/src/gcode/coordinates.adoc b/docs/src/gcode/coordinates.adoc index e4e648b24c3..a5d70c75696 100644 --- a/docs/src/gcode/coordinates.adoc +++ b/docs/src/gcode/coordinates.adoc @@ -17,7 +17,6 @@ These include: * Nine Coordinate System Offsets (G54-G59.3) * Global Offsets (G92) and Local Offsets (G52) -[[sec.machine-coordinate-system]] == Machine Coordinate System When LinuxCNC is started the positions of each axis is the machine origin. Once diff --git a/docs/src/gcode/coordinates_es.adoc b/docs/src/gcode/coordinates_es.adoc index 2741ff87269..5f11c7ca113 100644 --- a/docs/src/gcode/coordinates_es.adoc +++ b/docs/src/gcode/coordinates_es.adoc @@ -3,7 +3,6 @@ = Sistemas de coordenadas [[cha:coordinate-system]] - == Introducción Este capítulo describe los offsets tal como los utiliza LinuxCNC. @@ -14,7 +13,6 @@ Este capítulo describe los offsets tal como los utiliza LinuxCNC. * Offsets globales (G92) y locales (G52) [[sec.machine-coordinate-system]] - == Sistema de Coordenadas de la Máquina Cuando se inicia LinuxCNC, las posiciones de cada eje definen el origen de la máquina. Cuando @@ -129,9 +127,11 @@ El comando G10 L2x se puede usar para establecer los offsets del sistema de coor * 'G10 L20 P (1-9)' - Establece los offsets de modo que la posición actual se convierte en un valor.                          (vea <> para más detalles) -== Offsets Locales y Globales [[sec:g52-and-g92-offsets]] +[[sec:g52-and-g92-offsets]] +== Offsets Locales y Globales -=== El comando G52 [[sec:g52]] +[[sec:g52]] +=== El comando G52 'G52' se usa en un programa de pieza como un "Offset temporal del sistema de coordenadas local" dentro del sistema de coordenadas de la pieza de trabajo. Un ejemplo de uso @@ -166,7 +166,8 @@ no puesto a cero explícitamente retendrá el offset anterior. 'G52' comparte los mismos registros que 'G92' y, por lo tanto, 'G52' es visible en el DRO y vista previa etiquetado como 'G92'. -=== Los Comandos G92[[sec:g92-commands]] +[[sec:g92-commands]] +=== Los Comandos G92 'G92' se usa típicamente de dos maneras conceptualmente diferentes; como un "offset del sistema de coordenadas global" o como un "offset del sistema de coordenadas local". @@ -248,7 +249,8 @@ cero. Un 'G92 X2' establecerá un offset de 0.0000 y la posición mostrada no cambiará. Un 'G92 X5.0000' establecerá un offset de 3.0000 para que la posición actual visualizada se convierte en 5.0000. -=== Precauciones de Persistencia G92 [[sec:g92-persistence-cautions]] +[[sec:g92-persistence-cautions]] +=== Precauciones de Persistencia G92 Por defecto, los valores de un desplazamiento 'G92' se guardarán en el archivo VAR y se restaurará después de un inicio o reinicio de la máquina. @@ -295,7 +297,8 @@ espera. Además, la persistencia 'G92' puede deshabilitarse configurando 'DISABLE_G92_PERSISTENCE = 1' en la sección '[RS274NGC]' del archivo '.ini'. -=== Precauciones de Interacción G92 y G52 [[sec:g92-g52-animation-cautions]] +[[sec:g92-g52-animation-cautions]] +=== Precauciones de Interacción G92 y G52 'G52' y 'G92' comparten los mismos registros de desplazamiento. A menos que la persistencia 'G92' está deshabilitada en el archivo '.ini' (vea <>), diff --git a/docs/src/gcode/coordinates_fr.adoc b/docs/src/gcode/coordinates_fr.adoc index 17c2fed2b4b..255c673150b 100644 --- a/docs/src/gcode/coordinates_fr.adoc +++ b/docs/src/gcode/coordinates_fr.adoc @@ -20,8 +20,9 @@ par LinuxCNC: * Les coordonnées machine.(G53) * Les neuf décalages d'origine pièce.(G54 à G59.3) -* Un jeu de décalages globaux.(G92) +* Un jeu de décalages globaux (G92) and local offsets (G52) +[[sec:machine-coordinate-system]] == Commande en coordonnées machine: G53 Indépendamment de tout décalage pouvant être actif, un G53 dans une ligne de @@ -171,7 +172,58 @@ reste inchangée. courante devienne la position donnée en paramètre. (Voir la section <> pour les détails) -[[gcode:g92]] +[[sec:g52-and-g92-offsets]] +== Local and Global Offsets + +[[sec:g52]] +=== The G52 command + +'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. + +'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. + +[CAUTION] + +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 <> below. + +[CAUTION] +---- +'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 <> below. +---- + +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. + +The temporary local offset may be canceled with 'G52 X0 Y0'. Any axes +not explicitly zeroed will retain the previous offset. + +'G52' shares the same offset registers as 'G92', and thus +'G52' is visible on the DRO and preview labeled with 'G92'. + + +[[sec:g92-commands]] == Décalages d'axes G92 G92 est la plus incomprise et la plus maligne des commandes diff --git a/docs/src/gcode/g-code.adoc b/docs/src/gcode/g-code.adoc index 0d5a602f7ef..60463739fc6 100644 --- a/docs/src/gcode/g-code.adoc +++ b/docs/src/gcode/g-code.adoc @@ -2412,7 +2412,8 @@ overview of coordinate systems. See the <> Section for more information. -== G92.1, G92.2 Reset G92 Offsets[[gcode:g92.1-g92.2]] +[[gcode:g92.1-g92.2]] +== G92.1, G92.2 Reset G92 Offsets * 'G92.1' - turn off G92 offsets and reset <> 5211 - 5219 to zero. * 'G92.2' - turn off G92 offsets but keep <> 5211 - 5219 available. diff --git a/docs/src/gcode/g-code_fr.adoc b/docs/src/gcode/g-code_fr.adoc index 653e8446546..530f7ddb303 100644 --- a/docs/src/gcode/g-code_fr.adoc +++ b/docs/src/gcode/g-code_fr.adoc @@ -58,8 +58,7 @@ chose. |<> | Temporisation |<> | Spline cubique |<> | B-Spline quadratique -|<> | NURBS, ajout point de contrôle -|<> | NURBS, exécute +|<> | NURBS, ajout point de contrôle |<> | Mode diamètre (sur les tours) |<> | Mode rayon (sur les tours) |<> | Ajuste les valeurs de l'outil en table d'outils @@ -80,6 +79,7 @@ chose. |<> | Compensation de longueur d'outil d'après une table d'outils |<> | Compensation dynamique de longueur d'outil |<> | Révocation de la compensation de longueur d'outil +|<> | Offset du systéme de coordonnenées |<> | Déplacements en coordonnées machine (Absolues) |<> | Choix du système de coordonnées (1 à 9) |<> | Mode trajectoire exacte/mode arrêts exacts @@ -288,7 +288,7 @@ Aucun mots d'axe mais tous les décalages doivent être programmés pour un cercle complet. Le mot 'P', par défaut à 1, est facultatif. Pour d'avantage d'information sur les arcs en mode absolu, voir la -<>. +<>. .Plan XY (G17) ---- @@ -1306,6 +1306,18 @@ Ce n'est pas une erreur de programmer une compensation qui est déjà utilisée. Ce n'est pas non plus une erreur de révoquer une compensation de longueur d'outil alors qu'aucune n'est couramment utilisée. +[[gcode:g52]] +== G52 Local Coordinate System Offset(((Local Offsets))) + +---- +G52 axes +---- + +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 +<> section. + + [[gcode:g53]] == G53 Mouvement en coordonnées absolues(((G53 Mouvement en coordonnées absolues))) @@ -2166,6 +2178,67 @@ Voir la section sur les <>. Voir la section sur les <>. +[[gcode:g92]] + +== G92 Coordinate System Offset(((G92 Coordinate System Offset))) + +---- +G92 axes +---- + +[WARNING] +Only use 'G92' after your machine has been positioned to the desired point. + +'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. + +When 'G92' is executed, the <> +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. + +'G92' uses the values stored in <> +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. + +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. + +Being in incremental distance mode (G91 instead of G90) has no effect +on the action of 'G92'. + +'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. + +It is an error if: + +* all axis words are omitted. + +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). + +[NOTE] +The 'G52' command can also be used to change this offset; see the +<> Section for more details about +'G92' and 'G52' and how they interact. + +See the <> Section for an +overview of coordinate systems. + +See the <> Section for more information. + [[gcode:g92.1-g92.2]] == G92.1, G92.2 Remise à zéro des décalages des systèmes de coordonnées @@ -2173,11 +2246,14 @@ Voir la section sur les <>. * 'G92.2' - Positionne les décalages d'axes à 0, laisse les valeurs des paramètres inchangées, elles ne seront pas utilisées. +[NOTE] +G92.1 only clears G92 offsets, to change G53-G59.3 coordinate system offsets +in G-code use either <> or <>. + [[gcode:g92.3]] == G92.3 Restauration des décalages d'axe -* 'G92.3' - Positionne les décalages d'axes aux valeurs enregistrées dans -les paramètres 5211 à 5219. +* 'G92.3' - Positionne les décalages d'axes aux valeurs enregistrées dans les paramètres 5211 à 5219. Il est possible de positionner les décalages d'axes dans un programme puis de ré-utiliser les mêmes dans un autre programme. Pour cela, programmer 'G92' dans From e1ab20eac1f02172983e35ac830d258f37f0004b Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Sat, 19 Mar 2022 17:49:53 +0100 Subject: [PATCH 36/53] Simplifying asciidoc - avoiding explicig line breaks --- docs/src/gui/qtvcp-widgets.adoc | 1706 +++++++++++++++---------------- 1 file changed, 847 insertions(+), 859 deletions(-) diff --git a/docs/src/gui/qtvcp-widgets.adoc b/docs/src/gui/qtvcp-widgets.adoc index b5055ba2c29..642283dec07 100644 --- a/docs/src/gui/qtvcp-widgets.adoc +++ b/docs/src/gui/qtvcp-widgets.adoc @@ -3,29 +3,28 @@ [[cha:qtvcp-widgets]] = QTvcp Widgets -Qtscreen uses QTvcp widgets for linuxcnc integration. + -Widget is the general name for the UI objects such as buttons and labels in QTpy. + -You are free to use any available widgets in the QTDesigner editor. + -There are also special widgets made for linuxcnc that make integration easier. + -This are split in two heading on the right side of the editor. + -One is for HAL only widgets. + -The other is for cnc control widgets. + -you are free to mix them in any way on your panel. + +Qtscreen uses QTvcp widgets for linuxcnc integration. +Widget is the general name for the UI objects such as buttons and labels in QTpy. +You are free to use any available widgets in the QTDesigner editor. +There are also special widgets made for linuxcnc that make integration easier. +This are split in two heading on the right side of the editor. +One is for HAL only widgets. +The other is for cnc control widgets. +you are free to mix them in any way on your panel. [NOTE] - -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 source code. + +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 source code. == HAL Only Widgets -These Widgets usually have HAL pins and don't react to the machine Controller +These Widgets usually have HAL pins and don't react to the machine Controller. === XEmbed Widget -Allows one to embed program into the widget. + -only programs that utilize the xembed protocol will work such as: + +Allows one to embed program into the widget. +only programs that utilize the xembed protocol will work such as: * gladevcp virtual control panels * Onboard virtual keyboard @@ -34,14 +33,14 @@ only programs that utilize the xembed protocol will work such as: + === Slider Widget -Allows one to adjust a HAL pins using a sliding pointer. + +Allows one to adjust a HAL pins using a sliding pointer. === LED Widget .LED image::images/qtvcp_ledWidget.png["QTvcp led",scale="25%"] -An indicator that optionally follows a HAL pin's logic. + +An indicator that optionally follows a HAL pin's logic. * halpin_option -selects if the LED follows an input HAL pin or program state. * diameter -diameter of the LED @@ -52,8 +51,8 @@ An indicator that optionally follows a HAL pin's logic. + * flashing -turns flashing option on and off. * flashRate -sets the flash rate. -The LED properties can be defined in a stylesheet with the following code added to the .qss file. + -The name_of_led would be the name defined Designer's editor. + +The LED properties can be defined in a stylesheet with the following code added to the .qss file. +The name_of_led would be the name defined Designer's editor. ---- LED #name_0f_led{ @@ -65,16 +64,16 @@ qproperty-flashRate: 150; === Checkbox Widget -This widget allows the user to check a box to set a HAL pin true or false. + +This widget allows the user to check a box to set a HAL pin true or false. It is based on pyQT's QCheckButton === Radio Button Widget -This widget allows a user to set HAL pins true or false. + -Only one widget of a group can be true at a time. + +This widget allows a user to set HAL pins true or false. +Only one widget of a group can be true at a time. -It is based on pyQT's QRadioButton +It is based on pyQT's QRadioButton. === Round Gauge @@ -88,60 +87,59 @@ There are 2 inputs that are not customizable. They can be set via HAL pins, prog The non customizable parameters are: * 'Value' - -This is the input value that will be displayed with the gauge needle and in the digital readout. -It must be set to a value between 0 and the maximum value. + This is the input value that will be displayed with the gauge needle and in the digital readout. + It must be set to a value between 0 and the maximum value. * 'Setpoint' - -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. - + 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. -The following parameters can be set either programmatically or via the designer property editor. + +The following parameters can be set either programmatically or via the designer property editor. The custom parameters are: * 'halpin_option' - -Setting this True will create 2 HAL pins. One is for setting the value input and the other is for setting the setpoint. -If this option is not set, then value and setpoint must be connected programmatically, ie., in the handler file. + Setting this True will create 2 HAL pins. One is for setting the value input and the other is for setting the setpoint. + If this option is not set, then value and setpoint must be connected programmatically, ie., in the handler file. * 'max_reading' - -This value determines the highest number that will be displayed on the gauge face. + This value determines the highest number that will be displayed on the gauge face. * 'max_value' - -This is the maximum expected value of the value input signal. In other words, it is the full scale input. + This is the maximum expected value of the value input signal. In other words, it is the full scale input. * 'num_ticks' - -This is the number of ticks, or gauge readings that will be displayed on the gauge face. -It should be set to a number that ensures the text readings around the gauge face are readable. -The minimum allowed value is 2. + This is the number of ticks, or gauge readings that will be displayed on the gauge face. + It should be set to a number that ensures the text readings around the gauge face are readable. + The minimum allowed value is 2. * 'zone1_color' - -Zone1 extends from the maximum reading to the threshold point. It can be set to any RGB color. + Zone1 extends from the maximum reading to the threshold point. It can be set to any RGB color. * 'zone2_color' - -Zone2 extends from the threshold point to the minimum reading, which is 0. It can be set to any RGB color. + Zone2 extends from the threshold point to the minimum reading, which is 0. It can be set to any RGB color. * 'bezel_color' - -This is the color of the outer ring of the gauge. + This is the color of the outer ring of the gauge. * 'threshold' - -The threshold is the transition point between the zones. It should be set to a value between 0 and the maximum value. -The maximum allowed value is set to the gauge maximum value and minimum value is 0. + The threshold is the transition point between the zones. It should be set to a value between 0 and the maximum value. + The maximum allowed value is set to the gauge maximum value and minimum value is 0. * 'gauge_label' - -This is the text that appears below the value readout, near the bottom of the gauge. -The function of the gauge is then easily visible. + This is the text that appears below the value readout, near the bottom of the gauge. + The function of the gauge is then easily visible. === HALPad .HALPAD image::images/qtvcp_HALPad.png["QTvcp HAL button Joypad ",scale="25%"] -This widget looks and acts like a 5 button D-pad, with an LED ring + -Each button has an selectable type (Bit, S32 or Float) output HAL pin. + -The LED center ring has selectable colors for off and on and is controlled by a Bit HAL pin. + +This widget looks and acts like a 5 button D-pad, with an LED ring +Each button has an selectable type (Bit, S32 or Float) output HAL pin. +The LED center ring has selectable colors for off and on and is controlled by a Bit HAL pin. ==== ENUMS -There are enumerated constants used to reference indicator positions. + +There are enumerated constants used to reference indicator positions. ---- NONE @@ -162,7 +160,7 @@ There are constants for HAL pin type: FLOAT ---- -You use the widget Designer name plus the reference constant. + +You use the widget Designer name plus the reference constant. [source,python] ---- @@ -170,13 +168,13 @@ self.w.halpadname.set_highlight(self.w.halpadname.LEFTRIGHT) ---- ==== Properties -* 'pin_name': + -Optional name to use for the HAL pins basename. If left blank, the designer widget name will be used. +* 'pin_name': + Optional name to use for the HAL pins basename. If left blank, the designer widget name will be used. -* 'pin_type': + -Select the HAL output pin type. + -This property is only used at startup. + -Selection can be set in Designer: + +* 'pin_type': + Select the HAL output pin type. + This property is only used at startup. + Selection can be set in Designer: ---- NONE @@ -190,29 +188,30 @@ FlOAT * 'center_image_path': * 'top_image_path': * 'bottom_image_path': + -A file path or resource path to an image to display in the described button location. + -If the reset button is pressed in the Designer editor property, the image will not be displayed. (allowing optionally text) + + A file path or resource path to an image to display in the described button location. + If the reset button is pressed in the Designer editor property, the image will not be displayed. (allowing optionally text) * 'left_text': * 'right_text': * 'center_text': * 'top_text': * 'bottom_text': + -A text string to be displayed in the described button location. + -If left blank an image can be designated to be displayed. + + A text string to be displayed in the described button location. + If left blank an image can be designated to be displayed. * 'true_color': * 'false_color': + -Color selection for the center LED ring to be displayed when the 'BASENAME.light.center' HAL pin is True or False. + + Color selection for the center LED ring to be displayed when the 'BASENAME.light.center' HAL pin is True or False. * 'text_color': + -Color selection for the button text. + + Color selection for the button text. * 'text_font': + -Font slelection for the button text. + + Font slelection for the button text. ==== StyleSheets The above properties could be set in styles sheets. + ---- HALPad{ qproperty-on_color: #000; @@ -222,20 +221,20 @@ qproperty-off_color: #444; === Push Button Widget -This widget allows a user to set a HAL pin true or false. + -as an option it can be a toggle button. + -It also has other options: + +This widget allows a user to set a HAL pin true or false. +as an option it can be a toggle button. +It also has other options: ==== LED indicator option .Indicated Action Button image::images/qtvcp_actionButton.png["QTvcp led Action Button",scale="25%"] -Indicator_option puts a 'LED' on the top of the button. + -It can be a triangle, circle, top bar or side bar. + -The size and position can be adjusted + -It will indicated the current state of the button, the state of a HAL pin or linuxcnc status. + -Use properties to customized the indicator (not all are applicable to every LED shape). + +Indicator_option puts a 'LED' on the top of the button. +It can be a triangle, circle, top bar or side bar. +The size and position can be adjusted +It will indicated the current state of the button, the state of a HAL pin or linuxcnc status. +Use properties to customized the indicator (not all are applicable to every LED shape). ---- on_color @@ -250,7 +249,7 @@ width_fraction corner_radius ---- -The LED indicator color can be defined in a stylesheet with the following code added to the .qss file. + +The LED indicator color can be defined in a stylesheet with the following code added to the .qss file. ---- Indicated_PushButton{ @@ -260,6 +259,7 @@ qproperty-off_color: #444; ---- or for a particular button: + ---- Indicated_PushButton #button_estop{ qproperty-on_color: black; @@ -267,15 +267,15 @@ qproperty-off_color: yellow; } ---- -Indicated PushButtons have exclusive options: + +Indicated PushButtons have exclusive options: * indicator_HAL_pin_option * indicator_status_option -Indicator_HAL_pin_option will add a halpin, using the button name + '-led', that controls the + -button indicator state. + +Indicator_HAL_pin_option will add a halpin, using the button name + '-led', that controls the +button indicator state. -indicator_status_option will make the LED indicate the state of these selectable linuxcnc status: + +indicator_status_option will make the LED indicate the state of these selectable linuxcnc status: ---- Is Estopped Is On @@ -296,15 +296,15 @@ Spindle Reverse On Limits ---- -The 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. + -Currently these status options can be used to auto style buttons: + -is_estopped_status indicated buttons change the property 'isEstopped' + -is_on_status indicated buttons change the property 'isStateOn' + +The 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. +Currently these status options can be used to auto style buttons: +is_estopped_status indicated buttons change the property 'isEstopped' +is_on_status indicated buttons change the property 'isStateOn' manual,mdi,auto _status indicated buttons change the properties 'isManual, isMDI, isAuto' -Here is a sample stylesheet entry. + -It sets the background of mode button widgets when linuxcnc is in that mode. + +Here is a sample stylesheet entry. +It sets the background of mode button widgets when linuxcnc is in that mode. ---- ActionButton[isManual=true] { @@ -318,7 +318,7 @@ ActionButton[isAuto=true] { } ---- -Here is how you specify a particular widget - by it's objectName in designer. + +Here is how you specify a particular widget - by it's objectName in designer. ---- ActionButton #estop button [isEstopped=false] { @@ -328,12 +328,12 @@ ActionButton #estop button [isEstopped=false] { ==== Text changes on state -Choosing the checked_state_text_option allows a 'checkable' button to change the text based + -on it's checked state. It uses the properties 'true_state_string' and 'false_state_string' + -to specify the text for each state. + +Choosing the checked_state_text_option allows a 'checkable' button to change the text based +on it's checked state. It uses the properties 'true_state_string' and 'false_state_string' +to specify the text for each state. '\\n' will be converted to a newline. -You can set/change these in style sheets: + +You can set/change these in style sheets: ---- ActionButton #action_aux{ @@ -344,46 +344,47 @@ qproperty-false_state_string: "Air\\nOff"; ==== Call python commands on state -The python_command_option allow small snippets of python code to be run from the push of a button, + -with out having to edit the handler file. (though it can call functions in the handler file) + -When using the command_string properties. + -'true_python_cmd_string' - a python command that will be called when the button is toggled true + -'false_python_cmd_string' - a python command that will be called when the button is toggled false + - + -The capitalized word 'INSTANCE' will give access to the widgets instances and handler functions. + -eg. 'INSTANCE.my_handler_function_call(True)' + -The capitalized word 'ACTION' will give access to qtvcp's ACTION library. + -eg. 'ACTION.TOGGLE_FLOOD()' + -The capitalized word 'PROGRAM_LOADER' will give access to qtvcp's PROGRAM_LOADER library. + -eg. 'PROGRAM_LOADER.load_halshow()' + -The capitalized word 'HAL' will give access to HAL's python module. + -eg. 'HAL.set_p('motion.probe-input','1')' + - -It is based on pyQT's QpushButton +The python_command_option allow small snippets of python code to be run from the push of a button, +with out having to edit the handler file. (though it can call functions in the handler file) +When using the command_string properties. + + * 'true_python_cmd_string' - a python command that will be called when the button is toggled true + * 'false_python_cmd_string' - a python command that will be called when the button is toggled false + +The capitalized word 'INSTANCE' will give access to the widgets instances and handler functions. +eg. 'INSTANCE.my_handler_function_call(True)' +The capitalized word 'ACTION' will give access to qtvcp's ACTION library. +eg. 'ACTION.TOGGLE_FLOOD()' +The capitalized word 'PROGRAM_LOADER' will give access to qtvcp's PROGRAM_LOADER library. +eg. 'PROGRAM_LOADER.load_halshow()' +The capitalized word 'HAL' will give access to HAL's python module. +eg. 'HAL.set_p('motion.probe-input','1')' + +It is based on pyQT's QpushButton. === Focus Overlay Widget .Focus overlay example for confirm close prompt image::images/qtvcp_focusOverlay.png["QTvcp foucus overlay",scale="25%"] -This widget places a coloured overlay over the screen usually while a dialog is showing. + -Used to create a 'focused' feel and to draw attention to critical information. + -It can also show a translucent image. + -It can also display message text and buttons. + -This widget can be controller with STATUS messages. + +This widget places a coloured overlay over the screen usually while a dialog is showing. +Used to create a 'focused' feel and to draw attention to critical information. +It can also show a translucent image. +It can also display message text and buttons. +This widget can be controller with STATUS messages. === Grid Layout Widget -This widget controls if the widgets inside it are enabled or disabled. + -disabled widgets are typically a different colour and do not respond to actions. + +This widget controls if the widgets inside it are enabled or disabled. +disabled widgets are typically a different colour and do not respond to actions. -It is based on pyQT's QGridLayout +It is based on pyQT's QGridLayout. === HAL Label Widget -This widget displays values sent to it from HAL pins, programically or a QtSignal. + -The input pin can be selected as Bit, S32, Float or no pin selected. + -There is a text Template property to set the rich text and/or to format the text. + -Basic formatting might be, for bool: %r, for integer: %d, for float: %0.4f. + +This widget displays values sent to it from HAL pins, programically or a QtSignal. +The input pin can be selected as Bit, S32, Float or no pin selected. +There is a text Template property to set the rich text and/or to format the text. +Basic formatting might be, for bool: %r, for integer: %d, for float: %0.4f. A rich text example might be: [source,python] @@ -394,10 +395,11 @@ font-weight:600; color:#f40c11;">%0.4f

    """) ---- -The 'setDisplay' slot can be connected to a integer, float or bool signal. + -If the property 'pin_name' is not set the widget name will be used. + -There are function calls to display values: + +The 'setDisplay' slot can be connected to a integer, float or bool signal. +If the property 'pin_name' is not set the widget name will be used. + +There are function calls to display values: * [HALLabelName].setDisplay(some_value) can be used to set the display if no HAL pin is selected. * [HALLabelName].setProperty(textTemplate,"%d") - set the template of the display. @@ -406,93 +408,92 @@ It is based on pyQT's QLabel === LCD Number Widget -This widget displays HAL float/s32/bit values in a LCD looking way. + +This widget displays HAL float/s32/bit values in a LCD looking way. It can display numbers in decimal, hexadecimal, binary and octal formats -by setting the property 'mode'. + -When using floats you can set a formatting string. + -You must set the property 'digitCount' to an appropriate setting to display the largest number. + +by setting the property 'mode'. +When using floats you can set a formatting string. +You must set the property 'digitCount' to an appropriate setting to display the largest number. ==== Properties -* 'pin_name': + -Option string to be used as the HAL pin name. If set to an empty string the widget name will be used. + -* 'bit_pin_type': + -Selects the input pin as type BIT. -* 's32_pin_type': + -Selects the input pin as type S32. -* 'float_pin_type': + -Selects the input pin as type FLOAT. -* 'floatTemplate': + -A string that will be used as a python3 format template to tailor the LCD display. + -Only used when a FLOAT pin is selected. + -eg '{:.2f}' will display a float rounded to 2 numbers after the decimal. + -A blank setting will allow the decimal to move as required. + - -It is based on pyQT's QLCDNumber +* 'pin_name': + Option string to be used as the HAL pin name. If set to an empty string the widget name will be used. +* 'bit_pin_type': + Selects the input pin as type BIT. +* 's32_pin_type': + Selects the input pin as type S32. +* 'float_pin_type': + Selects the input pin as type FLOAT. +* 'floatTemplate': + A string that will be used as a python3 format template to tailor the LCD display. + Only used when a FLOAT pin is selected. + eg '{:.2f}' will display a float rounded to 2 numbers after the decimal. + A blank setting will allow the decimal to move as required. + +It is based on pyQT's QLCDNumber. === DoubleScale Widget -This widget is a spin button entry widget. + -used for setting a s32 and float HAL pin. + -It has an internal scale factor, set to a default of 1, that can be set programmically or using a QtSignal. + -The scale defaults to 1 + -he 'setInput' slot can be connected to a integer, or float signal. + +This widget is a spin button entry widget. +used for setting a s32 and float HAL pin. +It has an internal scale factor, set to a default of 1, that can be set programmically or using a QtSignal. +The scale defaults to 1 +he 'setInput' slot can be connected to a integer, or float signal. -There is a function call to change the internal scaling factor: + +There is a function call to change the internal scaling factor: * [HALLabelName].setInput(some_value) -The HAL pins will be set to the value of the internal scale times the widget displayed value. + +The HAL pins will be set to the value of the internal scale times the widget displayed value. === CamView Widget -This widget displays a image from a web camera. + -It overlays an adjustable circular and cross hair target over the image. + -Camview was built with precise visual positioning in mind. + +This widget displays a image from a web camera. +It overlays an adjustable circular and cross hair target over the image. +Camview was built with precise visual positioning in mind. === GeneralHALInput Widget -This widget is used to connect an arbitrary QT widget to HAL using signals/slots. + -It is used for widgets that should respond to HAL pin changes. + +This widget is used to connect an arbitrary QT widget to HAL using signals/slots. +It is used for widgets that should respond to HAL pin changes. === GeneralHALOutput Widget -This widget is used to connect an arbitrary QT widget to HAL using signals/slots. + -It is used for widgets that should control HAL pins. + +This widget is used to connect an arbitrary QT widget to HAL using signals/slots. +It is used for widgets that should control HAL pins. === WidgetSwitcher Widget -This is used to switch the view of a multi-widget layout to show just one widget. + -This might be used to flip between a large view of a widget or a smaller multi widget view. + -I'ts 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 then it originally had. + -The original widget must be in a layout for switcher to put it back. + - + -In Designer you will add the widgetswitcher widget on screen. + -Right click the widgetswitcher and add a page, + -then populate it with widgets/layouts you wish to see in a default form. + -Then add as many pages as there are views to switch to. + -on each page add a layout widget. + -After adding the layout you must right click the widget switcher again + -and set the layout option. + -click on the widgetswitcher widget and then scroll to the bottom of the property editor. + -you are looking for the dynamic property 'widget_list'. + -double click the to the right of the widget_list property. + -A dialog will pop up allowing you to add the names of the widgets to move to the pages you added to the widgetswitcher. + - + -There are function calls to display specific widgets: + +This is used to switch the view of a multi-widget layout to show just one widget. +This might be used to flip between a large view of a widget or a smaller multi widget view. +I'ts 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 then it originally had. +The original widget must be in a layout for switcher to put it back. + +In Designer you will add the widgetswitcher widget on screen. +Right click the widgetswitcher and add a page, +then populate it with widgets/layouts you wish to see in a default form. +Then add as many pages as there are views to switch to. +on each page add a layout widget. +After adding the layout you must right click the widget switcher again +and set the layout option. +click on the widgetswitcher widget and then scroll to the bottom of the property editor. +you are looking for the dynamic property 'widget_list'. +double click the to the right of the widget_list property. +A dialog will pop up allowing you to add the names of the widgets to move to the pages you added to the widgetswitcher. + +There are function calls to display specific widgets: * [WidgetSwitcherName].show_id_widget(number) * [WidgetSwitcherName].show_named_widget(widget_name) * [WidgetSwitcherName].show_default() * [WidgetSwitcherName].show_next() -By calling one of these functions, you control what widget + -is currently displayed. show_default() shows the page 0 + -layout, and puts all other widgets back to where they were as initially built in Designer. + - +By calling one of these functions, you control what widget +is currently displayed. show_default() shows the page 0 +layout, and puts all other widgets back to where they were as initially built in Designer. -It is based on the QStack widget. + +It is based on the QStack widget. == Machine Controller Widgets @@ -500,98 +501,99 @@ These widgets interact to the Machine Controller state. === Action Button Widget -These buttons are used to control action of the machine controller. + -They are built on top of indicator_buttons so can have LEDs overlaid. + +These buttons are used to control action of the machine controller. +They are built on top of indicator_buttons so can have LEDs overlaid. [NOTE] -If you left double click on this widget you can launch a dialog + -to set any of these action. The dialogs will help to set the + -right related data to the selected action. + -You can also change these properties directly in the property editor. + - -You can select one of these actions: + -'Estop' + -'Machine On' + -'Auto' + -'mdi' + -'manual' + -'run' + -'run_from_line status' (gets line number from STATUS message gcode-line-selected) + -'run_from_line slot' (gets line number from designer int/str slot setRunFromLine) + -'abort' + -'pause' + -'load dialog' (requires a dialog widget present) + -'Camview dialog' (requires camview dialog widget present) + -'origin offset dialog' (requires origin offset dialog widget present) + -'macro dialog' (requires macro dialog widget present) + -'Launch Halmeter' + -'Launch Status' + -'Launch Halshow' + -'Home' (set the joint number to -1 for all-home) + -'Unhome' (set the joint number to -1 for all-unhome) + -'Home Selected' Homes the joint/axis selected by STATUS + -'Unhome Selected' Unhomes the joint/axis selected by STATUS + -'zero axis' + -'zero G5X' zeros the current user coordinate system offsets + -'zero G92' zeros the optional G92 offsets + -'zero Z rotational' zeros the rotation offset + -'jog joint positive' (set the joint number) + -'jog joint negative' (set the joint number) + -'jog selected positive' (selected with a different widget or STATUS) + -'jog selected negative' (selected with a different widget or STATUS) + -'jog increment' (set metric/imperial/angular numbers) + -'jog rate' (set the float/alt float number) + -'feed override' (set the float/alt float number) + -'rapid override' (set the float/alt float number) + -'spindle override' (set the float/alt float number) + -'spindle fwd' + -'spindle backward' + -'spindle stop' + -'spindle up' + -'spindle down' + -'view change' (set view_type_string) + -'limits override' + -'flood' + -'mist' + -'block delete' + -'optional stop' + -'mdi command' (set command_string) + -'INI mdi number' (set ini_mdi_number) + -'dro absolute' + -'dro relative' + -'dro dtg' + -'exit screen' Closes down linuxcnc + -'Override limits' Temporarily override hard limits + -'launch dialogs' pops up dialogs if they are included in ui file. + -'set DRO to relative' + -'set DRO to absolute' + -'set DRO to distance-to-go' + - -These set attributes of the selected action. Availability depends on the widget. + - + -'toggle float option' - allows jog rate and overrides to toggle between two rates + -'joint number' - selects the joint/axis that the button controls + -'incr imperial number' - sets the imperial jog increment (set negative to ignore) + -'incr mm number' -sets the metric jog increment (set negative to ignore) + -'incr angular number' -sets the angular jog increment (set negative to ignore) + -'float number' - used for jograte and overrides + -'float alternate number' -for jograte and overrides that can toggle between two float numbers + -'view type string' - can be p, x, y, y2, z, z2, clear, zoom-in, zoom-out, pan-up, pan-down, + - pan-left, pan-right, rotate-up, rotate-down, rotate-cw, rotate-ccw + -'command string' - MDI command string that will be invoked if the MDI command action is selected. + -'ini_mdi_number' - a reference to the INI file [MDI_COMMAND_LIST] section. + -Set an integer of select one line under the INI's MDI_COMMAND line starting at 0. + -Then in the INI file, under the heading '[MDI_COMMAND_LIST]' add a line: + -'MDI_COMMAND=' + - -Action buttons are subclasssed from indicated_PushButton + +If you left double click on this widget you can launch a dialog +to set any of these action. The dialogs will help to set the +right related data to the selected action. +You can also change these properties directly in the property editor. + +You can select one of these actions: + + * 'Estop' + * 'Machine On' + * 'Auto' + * 'mdi' + * 'manual' + * 'run' + * 'run_from_line status' (gets line number from STATUS message gcode-line-selected) + * 'run_from_line slot' (gets line number from designer int/str slot setRunFromLine) + * 'abort' + * 'pause' + * 'load dialog' (requires a dialog widget present) + * 'Camview dialog' (requires camview dialog widget present) + * 'origin offset dialog' (requires origin offset dialog widget present) + * 'macro dialog' (requires macro dialog widget present) + * 'Launch Halmeter' + * 'Launch Status' + * 'Launch Halshow' + * 'Home' (set the joint number to -1 for all-home) + * 'Unhome' (set the joint number to -1 for all-unhome) + * 'Home Selected' Homes the joint/axis selected by STATUS + * 'Unhome Selected' Unhomes the joint/axis selected by STATUS + * 'zero axis' + * 'zero G5X' zeros the current user coordinate system offsets + * 'zero G92' zeros the optional G92 offsets + * 'zero Z rotational' zeros the rotation offset + * 'jog joint positive' (set the joint number) + * 'jog joint negative' (set the joint number) + * 'jog selected positive' (selected with a different widget or STATUS) + * 'jog selected negative' (selected with a different widget or STATUS) + * 'jog increment' (set metric/imperial/angular numbers) + * 'jog rate' (set the float/alt float number) + * 'feed override' (set the float/alt float number) + * 'rapid override' (set the float/alt float number) + * 'spindle override' (set the float/alt float number) + * 'spindle fwd' + * 'spindle backward' + * 'spindle stop' + * 'spindle up' + * 'spindle down' + * 'view change' (set view_type_string) + * 'limits override' + * 'flood' + * 'mist' + * * 'block delete' + * 'optional stop' + * 'mdi command' (set command_string) + * 'INI mdi number' (set ini_mdi_number) + * 'dro absolute' + * 'dro relative' + * 'dro dtg' + * 'exit screen' Closes down linuxcnc + * 'Override limits' Temporarily override hard limits + * 'launch dialogs' pops up dialogs if they are included in ui file. + * 'set DRO to relative' + * 'set DRO to absolute' + * 'set DRO to distance-to-go' + +These set attributes of the selected action. Availability depends on the widget. + + * 'toggle float option' - allows jog rate and overrides to toggle between two rates + * 'joint number' - selects the joint/axis that the button controls + * 'incr imperial number' - sets the imperial jog increment (set negative to ignore) + * 'incr mm number' -sets the metric jog increment (set negative to ignore) + * 'incr angular number' -sets the angular jog increment (set negative to ignore) + * 'float number' - used for jograte and overrides + * 'float alternate number' -for jograte and overrides that can toggle between two float numbers + * 'view type string' - can be p, x, y, y2, z, z2, clear, zoom-in, zoom-out, pan-up, pan-down, + pan-left, pan-right, rotate-up, rotate-down, rotate-cw, rotate-ccw + * 'command string' - MDI command string that will be invoked if the MDI command action is selected. + * 'ini_mdi_number' - a reference to the INI file [MDI_COMMAND_LIST] section. + Set an integer of select one line under the INI's MDI_COMMAND line starting at 0. + Then in the INI file, under the heading '[MDI_COMMAND_LIST]' add a line: + + 'MDI_COMMAND=' + +Action buttons are subclasssed from indicated_PushButton ==== LED indicator option -Indicator_option puts a 'LED' on the top of the button. + -It can be a triangle, circle, top bar or side bar. + -The size and position can be adjusted + -It will indicated the current state of the button, the state of a HAL pin or linuxcnc status. + -Use properties to customized the indicator (not all are applicable to every LED shape). + +Indicator_option puts a 'LED' on the top of the button. +It can be a triangle, circle, top bar or side bar. +The size and position can be adjusted +It will indicated the current state of the button, the state of a HAL pin or linuxcnc status. +Use properties to customized the indicator (not all are applicable to every LED shape). ---- on_color @@ -606,7 +608,7 @@ width_fraction corner_radius ---- -The LED indicator color can be defined in a stylesheet with the following code added to the .qss file. + +The LED indicator color can be defined in a stylesheet with the following code added to the .qss file. ---- Indicated_PushButton{ @@ -623,15 +625,15 @@ qproperty-off_color: yellow; } ---- -Indicated PushButtons have exclusive options: + +Indicated PushButtons have exclusive options: * indicator_HAL_pin_option * indicator_status_option -Indicator_HAL_pin_option will add a halpin, using the button name + '-led', that controls the + -button indicator state. + +Indicator_HAL_pin_option will add a halpin, using the button name + '-led', that controls the +button indicator state. -indicator_status_option will make the LED indicate the state of these selectable linuxcnc status: + +indicator_status_option will make the LED indicate the state of these selectable linuxcnc status: ---- Is Estopped Is On @@ -653,12 +655,12 @@ On Limits ---- ==== Text changes on state -Choosing the checked_state_text_option allows a 'checkable' button to change the text based + -on it's checked state. It uses the properties 'true_state_string' and 'false_state_string' + -to specify the text for each state. + +Choosing the checked_state_text_option allows a 'checkable' button to change the text based +on it's checked state. It uses the properties 'true_state_string' and 'false_state_string' +to specify the text for each state. '\\n' will be converted to a newline. -You can set/change these in style sheets: + +You can set/change these in style sheets: ---- Indicated_PushButton #auxiliary { @@ -669,74 +671,75 @@ qproperty-false_state_string: "Air\\nOff"; ==== Call python commands on state -The python_command_option allow small snippets of python code to be run from the push of a button, + -with out having to edit the handler file. (though it can call functions in the handler file) + -When using the command_string properties. + -'true_python_cmd_string' - a python command that will be called when the button is toggled true + -'false_python_cmd_string' - a python command that will be called when the button is toggled false + - + -The capitalized word 'INSTANCE' will give access to the widgets instances and handler functions. + -eg. 'INSTANCE.my_handler_function_call(True)' + -The capitalized word 'ACTION' will give access to qtvcp's ACTION library. + -eg. 'ACTION.TOGGLE_FLOOD()' + -The capitalized word 'PROGRAM_LOADER' will give access to qtvcp's PROGRAM_LOADER library. + -eg. 'PROGRAM_LOADER.load_halshow()' + -The capitalized word 'HAL' will give access to HAL's python module. + -eg. 'HAL.set_p('motion.probe-input','1')' + +The python_command_option allow small snippets of python code to be run from the push of a button, +with out having to edit the handler file. (though it can call functions in the handler file) +When using the command_string properties. + + * 'true_python_cmd_string' - a python command that will be called when the button is toggled true + * 'false_python_cmd_string' - a python command that will be called when the button is toggled false + +The capitalized word 'INSTANCE' will give access to the widgets instances and handler functions. +eg. 'INSTANCE.my_handler_function_call(True)' +The capitalized word 'ACTION' will give access to qtvcp's ACTION library. +eg. 'ACTION.TOGGLE_FLOOD()' +The capitalized word 'PROGRAM_LOADER' will give access to qtvcp's PROGRAM_LOADER library. +eg. 'PROGRAM_LOADER.load_halshow()' +The capitalized word 'HAL' will give access to HAL's python module. +eg. 'HAL.set_p('motion.probe-input','1')' Indicated PushButtons and Actionbuttons are based on pyQT's QPushButton === ActionToolButton -Action tool buttons are similar in concept to action buttons, but they use QToolButtons to allow + -optional actions to be selected by pushing and holding the button till the option menu pops up. + +Action tool buttons are similar in concept to action buttons, but they use QToolButtons to allow +optional actions to be selected by pushing and holding the button till the option menu pops up. -Currently there is only one option - user view + +Currently there is only one option - user view. -It is based on pyQT's QToolButton +It is based on pyQT's QToolButton. ==== User View -User view tool button allows a user to record and return to a arbitrary graphics view. + -Press and hold the button to have the menu pop up and press 'record view'. + -This records the currently displayed graphics view. + -click the button normally to return to the last recorded position. + - + -The position recorded position will be remembered at shutdown if a preference file option is set up. + +User view tool button allows a user to record and return to a arbitrary graphics view. +Press and hold the button to have the menu pop up and press 'record view'. +This records the currently displayed graphics view. +click the button normally to return to the last recorded position. + +The position recorded position will be remembered at shutdown if a preference file option is set up. [NOTE] -Do to programming limitations, the recorded position may not show exactly the same, + -Particularly if you pan zoomed out and pan again zoomed in while setting the desired view. + -Best practice is to select a main view, modify as desired, record, then immediately + -click the button to 'return' to the recorded position. If it is not as you like, + +Do to programming limitations, the recorded position may not show exactly the same, +Particularly if you pan zoomed out and pan again zoomed in while setting the desired view. +Best practice is to select a main view, modify as desired, record, then immediately +click the button to 'return' to the recorded position. If it is not as you like, modify it's existing position and re-record. === RoundButton -Round buttons work the same as ActionButtons other then the button is cropped round. + -They are intended only to be visually different. + -They have two path properties for displaying images on true and false. + +Round buttons work the same as ActionButtons other then the button is cropped round. +They are intended only to be visually different. +They have two path properties for displaying images on true and false. === Axis Tool Button This allows one to select and set an AXIS. -If the button is set checkable, it will indicate which axis is selected. + -If you press and hold the button a pop up menu will show allowing one to: + +If the button is set checkable, it will indicate which axis is selected. +If you press and hold the button a pop up menu will show allowing one to: * Zero the axis * divide the axis by 2 * set the axis arbitrarily * reset the axis to the last number recorded -You select the axis by setting the joint number + -You can select a halpin option that is set true when the axis is selected + +You select the axis by setting the joint number +You can select a halpin option that is set true when the axis is selected It is based on pyQT's QToolButton === Camview Widget -This is used to align the work piece or zero part features using a webcam. + -It uses opencv vision library. + +This is used to align the work piece or zero part features using a webcam. +It uses opencv vision library. === DRO_Label Widget -This will display the current position of an axis. + +This will display the current position of an axis. * Qjoint_number - joint number of offset to display (10 will specify rotational offset) * Qreference_type - actual, relative or distance to go (0,1,2) @@ -744,13 +747,13 @@ This will display the current position of an axis. + * imperial_template - format of display ie '%9.4f' * angular_template - format of display ie '%Rotational: 10.1f' -The DRO_Label widget holds a property 'isHomed' that can be used with a stylesheet + -to change the color of the DRO_Label based on home state of the joint number in linuxcnc. + +The DRO_Label widget holds a property 'isHomed' that can be used with a stylesheet +to change the color of the DRO_Label based on home state of the joint number in linuxcnc. -Here is a sample stylesheet entry. + -It sets the font of all DRO_Label widgets. + -It sets the text template (to set resolution) of the DRO + -Then sets the text color based on the Qt 'isHomed' Property. + +Here is a sample stylesheet entry. +It sets the font of all DRO_Label widgets. +It sets the text template (to set resolution) of the DRO +Then sets the text color based on the Qt 'isHomed' Property. ---- DROLabel { @@ -769,7 +772,7 @@ DROLabel[isHomed=true] { } ---- -Here is how you specify a particular widget - by it's objectName in designer. + +Here is how you specify a particular widget - by it's objectName in designer. ---- DROLabel #dr0_x_axis [isHomed=false] { @@ -780,22 +783,21 @@ DROLabel #dr0_x_axis [isHomed=false] { It is based on pyQT's QLabel === GcodeDisplay -This displays G-code in text form. It will highlight the currently running line. + -This can also display MDI history when linuxcnc is in MDI mode. + -This can also display log entries when linuxcnc is in MANUAL mode. + -This will also display preference file entries if you enter 'PREFERENCE' in capitals + -into the MDILine widget. + -It has a signal percentDone(int) that that can be connected to a slot (such as a + +This displays G-code in text form. It will highlight the currently running line. +This can also display MDI history when linuxcnc is in MDI mode. +This can also display log entries when linuxcnc is in MANUAL mode. +This will also display preference file entries if you enter 'PREFERENCE' in capitals +into the MDILine widget. +It has a signal percentDone(int) that that can be connected to a slot (such as a progressBar to display percent run) -* auto_show_mdi_status -Set true to have the widget switch to MDI history when in MDI mode +* auto_show_mdi_status + + Set true to have the widget switch to MDI history when in MDI mode +* auto_show_manual_status + + Set true to have the widget switch to machine log when in Manual mode -* auto_show_manual_status -Set true to have the widget switch to machine log when in Manual mode - -The GcodeDisplay properties can be set in a stylesheet with the following code added to the .qss file. + +The GcodeDisplay properties can be set in a stylesheet with the following code added to the .qss file. ---- EditorBase{ @@ -816,7 +818,7 @@ qproperty-styleFontMargin: "Times,14,-1,0,90,0,0,0,0,0"; } ---- -For gcodeDisplay widget's default G-code lexer: + +For gcodeDisplay widget's default G-code lexer: * styleColor0 = Default = digit characters * styleColor1 = Comments = characters inside of 'msg()' @@ -832,16 +834,16 @@ It is based on pyQT's QsciScintilla === GcodeEditor Widget This is an extension of the gcodeDisplay widget that adds editing convenience. -It is based on pyQT's QWidget which incorporates GcodeDisplay widget + +It is based on pyQT's QWidget which incorporates GcodeDisplay widget === GCodeGraphics Widget .Graphics Display image::images/qtvcp_gcodeGraphics.png["QTvcp G-code Graphics",scale="25%"] -This Displays the current G-code in a graphical form. + +This Displays the current G-code in a graphical form. -Properties: + +Properties: * '_view' * '_dro' @@ -850,9 +852,11 @@ Properties: + * 'overlay' * '_offsets' * 'background_color' -* 'MouseButtonMode' + +* 'MouseButtonMode' + Changes the button behavior of the mouse to rotate, move or zoom within the preview. -Can be set 0-5 + +Can be set 0-5 + 0 -left move, middle zoom, right rotate. 1 -left rotate, middle move, right zoom 2 -left zoom, middle move, right rotate @@ -860,17 +864,18 @@ Can be set 0-5 + 4 -left move, middle zoom, right rotate 5 -left rotate, middle zoom, right move -StyleSheets: + +StyleSheets: MouseButtonMode can be set in stylesheets: + ---- #gcodegraphics{ qproperty-MouseButtonMode:1; ---- ==== ACTION functions -The ACTION library can control the G-code graphics widget. + -'ACTION.RELOAD_DISPLAY()' -reload the current program which recalculates the origin/offsets. + +The ACTION library can control the G-code graphics widget. +'ACTION.RELOAD_DISPLAY()' -reload the current program which recalculates the origin/offsets. 'ACTION.SET_GRAPHICS_VIEW(view)' The following commands can be sent: ---- clear @@ -908,339 +913,299 @@ Z2 'ACTION.ADJUST_ROTATE(X,Y)' -directly set the relative rotation of view in x and y direction -It is based on pyQT's opengl widget. + +It is based on pyQT's opengl widget. === StateLabel Widget -This will display a label based on true/false states of the machine controller. + -You can select different text based on true or false. + -These states are selectable via these properties: + +This will display a label based on true/false states of the machine controller. +You can select different text based on true or false. +These states are selectable via these properties: * 'css_mode_status' + -When true machine is in G96 Constant Surface Speed Mode + + When true machine is in G96 Constant Surface Speed Mode * 'diameter_mode_status' + -When true machine is in G7 Lathe Diameter Mode + + When true machine is in G7 Lathe Diameter Mode * 'fpr_mode_status' + -When true machine is in G95 Feed per revolution Mode + -* 'metric_mode_status' + -When true machine is in G21 Metric Mode+ + When true machine is in G95 Feed per revolution Mode +* 'metric_mode_status' + + When true machine is in G21 Metric Mode Other Properties: * 'true_textTemplate' + -This will be the text set when the option is true. + -You can use Qt rich text code for different fonts/colours etc. + -Typical template for metric mode in true state, might be: 'Metric Mode' + + This will be the text set when the option is true. + You can use Qt rich text code for different fonts/colours etc. + Typical template for metric mode in true state, might be: 'Metric Mode' * 'false_textTemplate' + -This will be the text set when the option is true. + -You can use Qt rich text code for different fonts/colours etc. + -Typical template for metric mode in false state, might be: 'Imperial Mode' + + This will be the text set when the option is true. + You can use Qt rich text code for different fonts/colours etc. + Typical template for metric mode in false state, might be: 'Imperial Mode' -It is based on pyQT's QLabel +It is based on pyQT's QLabel. === StatusLabel Widget -This will display a label based on variable states of the machine controller. + -You can change how the state will be display by substituting + -You can use Rich text for different fonts/colors etc. + -These states are selectable: + + +This will display a label based on variable states of the machine controller. +You can change how the state will be display by substituting +You can use Rich text for different fonts/colors etc. +These states are selectable: * 'actual_spindle_speed_status' + -Used to display the actual spindle speed as reported from the HAL pin spindle.0.speed-in + -It's converted to RPM. Typically would use a textTemplate of %d + Used to display the actual spindle speed as reported from the HAL pin spindle.0.speed-i + It's converted to RPM. Typically would use a textTemplate of %d * 'actual surface speed_status' + -Used to display the actual cutting surface speed on a lathe based on X axis and spindle speed + -It's converted to distance per minute. + -Typically would use a textTemplate of %4.1f (feet per minute) + -and altTextTemplate of %d (meters per minute) + Used to display the actual cutting surface speed on a lathe based on X axis and spindle speed + It's converted to distance per minute. + Typically would use a textTemplate of %4.1f (feet per minute) + and altTextTemplate of %d (meters per minute) * 'blendcode_status' + -Shows the current g64 setting + + Shows the current g64 setting * 'current_feedrate_status' + -Shows the current actual feedrate + + Shows the current actual feedrate * 'current_FPU_status' + -Shows the current actual feed per unit + Shows the current actual feed per unit * 'fcode_status' + -Shows the current programmed F Code setting + Shows the current programmed F Code setting * 'feed_override_status' + -Shows the current feed override setting in percent + Shows the current feed override setting in percent * 'filename_status' + -Shows the last loaded file name + Shows the last loaded file name * 'filepath_status' + -Shows the last loade full file path name + Shows the last loade full file path name * 'gcode_status' + -Shows all active G-codes + Shows all active G-codes * 'gcode selected_status' + -Show the current selected G-code line + Show the current selected G-code line * 'halpin status' + -Shows the HAL pin output of a selected HAL pin + Shows the HAL pin output of a selected HAL pin * 'jograte_status' + -Shows the current QTvcp based Jog Rate + Shows the current QTvcp based Jog Rate * 'jograte_angular_status' + -Shows the current QTvcp based Angular Jog Rate + Shows the current QTvcp based Angular Jog Rate * 'jogincr_status' + -Shows the current QTvcp based Jog increment + Shows the current QTvcp based Jog increment * 'jogincr_angular_status' + -Shows the current QTvcp based Angular Jog increment + Shows the current QTvcp based Angular Jog increment * 'machine state_status' + -Shows the current machine interpreter state using the text described from the state_list. + -The interpreter states are: Estopped, Running, Stopped, Paused, Waiting, Reading + Shows the current machine interpreter state using the text described from the state_list. + + The interpreter states are: Estopped, Running, Stopped, Paused, Waiting, Reading * 'max_velocity_override_status' + -Shows the current max axis velocity override setting + Shows the current max axis velocity override setting * 'mcode_status' + -Shows all active M-codes + Shows all active M-codes * 'requested_spindle_speed_status' + -Shows the requested spindle speed - actual may be different. + Shows the requested spindle speed - actual may be different. * 'rapid_override_status' + -Shows the current rapid override setting in (0-100) percent + Shows the current rapid override setting in (0-100) percent * 'spindle_override_status' + -Shows the current spindle override setting in percent + Shows the current spindle override setting in percent * 'timestamp_status' + -Shows the time based on the system settings. + -An example of a useful textTemplate setting: '%I:%M:%S %p' see the python time module for more info + Shows the time based on the system settings. + + An example of a useful textTemplate setting: '%I:%M:%S %p' see the python time module for more info * 'tool comment_status' + -returns the comment text from the current loaded tool + returns the comment text from the current loaded tool * 'tool diameter_status' + -returns the diameter from the current loaded tool + returns the diameter from the current loaded tool * 'tool_number_status' + -returns the tool number of the current loaded tool + returns the tool number of the current loaded tool * 'tool_offset_status' + -returns the offset of the current loaded tool, indexed by 'index_number' to select axis (0=x,1=y,etc) + returns the offset of the current loaded tool, indexed by 'index_number' to select axis (0=x,1=y,etc) * 'user_system_status' + -Shows the active user coordinate system (G5x setting) + Shows the active user coordinate system (G5x setting) Other Properties: * 'index_number' + -Integer that specifies the tool status index to display. + Integer that specifies the tool status index to display. * 'state_label_list' + -List of labels used for different machine states. + List of labels used for different machine states. * 'halpin_names' + -Name of the halpin to monitor (including HAL component basename. + Name of the halpin to monitor (including HAL component basename. * 'textTemplate' + -This uses python formatting rules to set the text output. + -This is usually used for imperial (G20) or angular numerical settings, though + -not every option has imperial/metric conversion. + -One can use %s for no conversion, %d for integer conversion, %f for float conversion. etc + -You can also use Qt rich text code. + -Typical template used for formatting imperial float numbers to text eg. '%9.4f' or '%9.4f inch' + + This uses python formatting rules to set the text output. + This is usually used for imperial (G20) or angular numerical settings, though + not every option has imperial/metric conversion. + One can use %s for no conversion, %d for integer conversion, %f for float conversion. etc + You can also use Qt rich text code. + Typical template used for formatting imperial float numbers to text eg. '%9.4f' or '%9.4f inch' * 'alt_textTemplate' + -This uses python formatting rules to set the text output. + -This is usual used for metric (G21) numerical settings. + -Typical template used for formatting metric float to text eg. '%10.3f' or '%10.3f mm' + This uses python formatting rules to set the text output. + This is usual used for metric (G21) numerical settings. + Typical template used for formatting metric float to text eg. '%10.3f' or '%10.3f mm' It is based on pyQT's QLabel === StatusImageSwicher Widget -Status image switcher will switch between images based on linuxcnc states. + -'watch spindle' would toggle between 3 images ( stop, fwd, revs) + -'watch axis homed' would toggle between 2 images ( axis not homed, axis homed) + -'watch all homed' would toggle between 2 images ( not all homed, all homed) + -'watch hard limits' would toggle between 2 images or one per joint + +Status image switcher will switch between images based on linuxcnc states. + * 'watch spindle' would toggle between 3 images ( stop, fwd, revs) + * 'watch axis homed' would toggle between 2 images ( axis not homed, axis homed) + * 'watch all homed' would toggle between 2 images ( not all homed, all homed) + * 'watch hard limits' would toggle between 2 images or one per joint -Here is an example of using it to display an icon of Z axis homing state: + +Here is an example of using it to display an icon of Z axis homing state: image::images/statusImageSwitcher.png["QTvcp Status Image Switcher",scale="25%"] -In the properties section notice that: + -'watch axis homed' is checked + -'axis letter' is set to Z + +In the properties section notice that: -If you double click the 'image list' a dialog will show and allow you to add image paths to. + -If you have one image as an icon and one clear image then that will look like it shows and hides the icon. + + * 'watch axis homed' is checked + * 'axis letter' is set to Z -Selecting image paths can be done by selecting the 'pixmap' property and selecting an image. + -Note: The pixmap setting is for test display only and will be ignored outside of Designer. + -Right click the image name and you should see 'copy path' + -Click 'copy path' + -Now double click the 'image list' property so the dialog shows. + -Click the 'New' button + -Paste the image path in the entry box + -Do that again for the next image - use a clear image to represent a hidden icon. + +If you double click the 'image list' a dialog will show and allow you to add image paths to. +If you have one image as an icon and one clear image then that will look like it shows and hides the icon. -You can test display the images from the image list by changing the 'image number' + -In this case 0 is unhomed 1 would be homed + -This is for test display only and will be ignored outside of Designer. + +Selecting image paths can be done by selecting the 'pixmap' property and selecting an image. +Note: The pixmap setting is for test display only and will be ignored outside of Designer. +Right click the image name and you should see 'copy path' +Click 'copy path' +Now double click the 'image list' property so the dialog shows. +Click the 'New' button +Paste the image path in the entry box +Do that again for the next image - use a clear image to represent a hidden icon. + +You can test display the images from the image list by changing the 'image number' +In this case 0 is unhomed 1 would be homed +This is for test display only and will be ignored outside of Designer. === StatusStacked -This widget displays one of three panels based on linuxcnc's mode. + -This allows you to automatically display different widgets on Manual, MDI and Auto modes. + +This widget displays one of three panels based on linuxcnc's mode. +This allows you to automatically display different widgets on Manual, MDI and Auto modes. -todo + +.todo It is based on pyQT's QStacked widget. === Jog Increments Widget -This widget allows the user to select jog increment values for jogging. + -The jogging values come from the INI file under: '[DISPLAY]', 'INCREMENTS' + -or '[DISPLAY]', 'ANGULAR_INCREMENTS' + -This will be available to all widgets through STATUS. + -You can select linear or angular increments by the property 'linear_option' + -in Designer property editor. + +This widget allows the user to select jog increment values for jogging. +The jogging values come from the INI file under: '[DISPLAY]', 'INCREMENTS' +or '[DISPLAY]', 'ANGULAR_INCREMENTS' +This will be available to all widgets through STATUS. +You can select linear or angular increments by the property 'linear_option' +in Designer property editor. It is based on pyQT's combobox === ScreenOption widget -This widget doesn't add anything visually to a screen but sets up important + -options. This is the preferred way to use these options + +This widget doesn't add anything visually to a screen but sets up important +options. This is the preferred way to use these options -These properties that can be set in designer, in python handler code or + +These properties that can be set in designer, in python handler code or (if appropriate) in stylesheets. .These include: - * 'halCompBaseName': + -If left empty Qtvcp will use the screen's name as the HAL component's basename. + -If set, Qtvcp will use this string as the HAL component's basename. + -If the -c command line option is used when loading Qtvcp, + -Qtvcp will use the name specified in the command line - it overrides all above options. + -If you programmically set the basename in the handlerfile - it will override all above options. + -This option cannot be set in stylesheets. + - + If left empty Qtvcp will use the screen's name as the HAL component's basename. + If set, Qtvcp will use this string as the HAL component's basename. + If the -c command line option is used when loading Qtvcp, + Qtvcp will use the name specified in the command line - it overrides all above options. + If you programmically set the basename in the handlerfile - it will override all above options. + This option cannot be set in stylesheets. * 'notify_option': + -Hooking into the desktop notification bubbles for error and messages - + Hooking into the desktop notification bubbles for error and messages * 'notify_max_messages': + -Number of messages shown on screen at one time. - + Number of messages shown on screen at one time. * 'catch_close_option': + -Catching the close event to pop up a 'are you sure' prompt - + Catching the close event to pop up a 'are you sure' prompt * 'close_overlay_color': + -Color of transparent layer shown when quitting. - + Color of transparent layer shown when quitting. * 'catch_error_option': + -monitoring the linuxcnc error channel. This also sends the message + -through STATUS to anything that registers - + monitoring the linuxcnc error channel. This also sends the message + + through STATUS to anything that registers * 'play_sounds_option': + -playing sounds using 'beep', 'espeak' and the system sound - + playing sounds using 'beep', 'espeak' and the system sound * 'use_pref_file_option': + -setting up a preference filepath + -Using the magic word 'WORKINGFOLDER' in the preference file path will be replaced with + -the launched configuration path ie. WORKINFOLDER/my_preferences - + setting up a preference filepath. + Using the magic word 'WORKINGFOLDER' in the preference file path will be replaced with + the launched configuration path ie. WORKINFOLDER/my_preferences * 'use_send_zmq_option': + -Used to initiate ZMQ based outgoing messages. + - + Used to initiate ZMQ based outgoing messages. * 'use_receive_zmq_messages': + -Used to initiate ZMQ based in coming messages. + -These messages can be used to call functions in the handler file. + -Allowing external programs to intergrate tightly with qtvcp based screens. + - + Used to initiate ZMQ based in coming messages. + These messages can be used to call functions in the handler file. + Allowing external programs to intergrate tightly with qtvcp based screens. * 'embedded_program_option': + -Embed programs defined in the INI. + - + Embed programs defined in the INI. * 'default_emebed_tab' + -This is the property for a default location to embed external programs. + -It would be set to the designer name of a tab page widget. + - + This is the property for a default location to embed external programs. + It would be set to the designer name of a tab page widget. * 'focusOverlay_option': + -Focus_overlay will put a transparent image or colored panel over the main + -screen to emphasize focus to an external event - typically a dialog. + - + Focus_overlay will put a transparent image or colored panel over the main + screen to emphasize focus to an external event - typically a dialog. * 'messageDialog_option': + -sets up the message dialog - used for general messages - + sets up the message dialog - used for general messages * 'message_overlay_color': + -Color of transparent layer shown when the message dialog is shown. - + Color of transparent layer shown when the message dialog is shown. * 'closeDialog_option': + -sets up the standard close screen prompt dialog - + sets up the standard close screen prompt dialog * 'entryDialog_option': + -sets up the numerical entry dialog - + sets up the numerical entry dialog * 'entryDialogSoftKey_option': + - sets up a floating software keyboard when entry dialog is focused. + - + sets up a floating software keyboard when entry dialog is focused. * 'entry_overlay_color': + -Color of transparent layer shown when the entry dialog is shown. - + Color of transparent layer shown when the entry dialog is shown. * 'toolDialog_option': + -sets up the manual tool change dialog, including HAL pin. - + sets up the manual tool change dialog, including HAL pin. * 'tool_overlay_color': + -Color of transparent layer shown when the tool dialog is shown. - + Color of transparent layer shown when the tool dialog is shown. * 'ToolUseDesktopNotify': + -option to use desktop notify dialogs for manual tool change dialog. + - + option to use desktop notify dialogs for manual tool change dialog. + * 'ToolFramesless': + -Framesless dialogs can not be easily moved by users. + - + Framesless dialogs can not be easily moved by users. + * 'fileDialog_option': + -sets up the file choosing dialog. - + sets up the file choosing dialog. * 'file_overlay_color': + -Color of transparent layer shown when the file dialog is shown. - + Color of transparent layer shown when the file dialog is shown. * 'keyboardDialog_option': + -sets up a keyboard entry widget. + - + sets up a keyboard entry widget. + * 'keyboard_overlay_color': + -Color of transparent layer shown when the keyboard dialog is shown. - + Color of transparent layer shown when the keyboard dialog is shown. * 'vesaProbe_option': + -sets up the versa style probe dialog - + sets up the versa style probe dialog * 'versaProbe_overlay_color': + -Color of transparent layer shown when the versaProbe dialog is shown. - + Color of transparent layer shown when the versaProbe dialog is shown. * 'macroTabeDialog_option': + -sets up the macro selection dialog - + sets up the macro selection dialog * 'macoTab_overlay_color': + -Color of transparent layer shown when the macroTab dialog is shown. - + Color of transparent layer shown when the macroTab dialog is shown. * 'camViewDialog_option': + -sets up the camera alignment dialog - + sets up the camera alignment dialog * 'camView_overlay_color': + -Color of transparent layer shown when the camView dialog is shown. - + Color of transparent layer shown when the camView dialog is shown. * 'toolOffset_option': + -sets up the tool offset display/editor dialog - + sets up the tool offset display/editor dialog * 'toolOffset_overlay_color': + -Color of transparent layer shown when the toolOffset dialog is shown. - + Color of transparent layer shown when the toolOffset dialog is shown. * 'originOffset_option': + -sets up the origin display/editor dialog - + sets up the origin display/editor dialog * 'originOffset_overlay_color': + -Color of transparent layer shown when the originOffset dialog is shown. - + Color of transparent layer shown when the originOffset dialog is shown. * 'calculatorDialog_option': + -sets up the calcylatory entry dialog - + sets up the calcylatory entry dialog * 'calculator_overlay_color': + -Color of transparent layer shown when the calculator dialog is shown. - + Color of transparent layer shown when the calculator dialog is shown. * 'machineLogDialog_option': + -sets up a dialog to display logs from the machine and qtvcp - + sets up a dialog to display logs from the machine and qtvcp * 'machineLog_overlay_color': + -Color of transparent layer shown when the machineLog dialog is shown. - + Color of transparent layer shown when the machineLog dialog is shown. * 'runFromLineDialog_option': + -sets up a dialog to display starting options when starting machine + -execution from a arbitrary line. + - + sets up a dialog to display starting options when starting machine + execution from a arbitrary line. + * 'runFromLine_overlay_color': + -Color of transparent layer shown when the runFromLine dialog is shown. + Color of transparent layer shown when the runFromLine dialog is shown. ==== Setting Properties Programically -The screen designer chooses the default settings of the screenOptions widget. + -Once chosen, most won't ever need to be changed. + -but if needed some can be changed in the handler file or in stylesheets. + -Some settings are only checked on startup so will not cause changes after startup. + -In these cases you would need to make the changes in Qtdesigner only. + +The screen designer chooses the default settings of the screenOptions widget. +Once chosen, most won't ever need to be changed. +but if needed some can be changed in the handler file or in stylesheets. +Some settings are only checked on startup so will not cause changes after startup. +In these cases you would need to make the changes in Qtdesigner only. + +ie. in the handler file +Here we reference the widget by the QtDesigner user defined name: -ie. In the handler file + -Here we reference the widget by the QtDesigner user defined name: + [source,python] ---- # red,green,blue,alpha 0-255 @@ -1249,9 +1214,9 @@ self.w.screen_options.setProperty('close_overlay_color', color) self.w.screen_options.setProperty('play_sounds_option',False) ---- -ie. In style sheets + -Here we can reference the widget by QtDesigner user defined name + -or by widget class name. + +ie. In style sheets +Here we can reference the widget by QtDesigner user defined name +or by widget class name. ---- /* red, green, blue 0-255, alpha 0-100% or 0.0 to 1.0 */ @@ -1271,8 +1236,8 @@ qproperty-close_overlay_color: rgba(0, 255, 0, 0.75) } ==== Preference File Entries -If the preference file option is selected, screenOption widget will make an INI based preference file. + -While other Qtvcp widgets will add to this list, the screenOptions widget will add these entries: + +If the preference file option is selected, screenOption widget will make an INI based preference file. +While other Qtvcp widgets will add to this list, the screenOptions widget will add these entries: Under the heading: 'SCREEN_OPTIONS': @@ -1315,8 +1280,8 @@ Under the heading: 'NOTIFY_OPTIONS' [NOTE] -In Debian/Ubuntu/Mint based systems these sounds should be available as sound-type entries above: + -(These Sound options require python3-gst1.0 installed.) + +In Debian/Ubuntu/Mint based systems these sounds should be available as sound-type entries above: +(These Sound options require python3-gst1.0 installed.) * ERROR * READY @@ -1327,7 +1292,7 @@ In Debian/Ubuntu/Mint based systems these sounds should be available as sound-ty * LOGOUT * BELL -You can also specify a file path to an arbitrary audio file. + +You can also specify a file path to an arbitrary audio file. (You can use ~ in path to substitute for the user home file path) [NOTE] @@ -1344,7 +1309,7 @@ If the Espeak module (python3-espeak) is install you can use the entry 'SPEAK' t === StatusSlider Widget -This widget allow the user to adjust linuxcnc setting via a slide. + +This widget allow the user to adjust linuxcnc setting via a slide. .The widget can adjust: * Jog rate @@ -1354,9 +1319,9 @@ This widget allow the user to adjust linuxcnc setting via a slide. + * Rapid override rate ==== Properties -StatusSlider has properties that can be set in designer, in python handler code or + -(if appropriate) in stylesheets. +StatusSlider has properties that can be set in designer, in python handler code or +(if appropriate) in stylesheets. * halpin_option - sets option to make a HAL float pin that reflects current value. * rapid_rate - selects a rapid override rate slider @@ -1369,7 +1334,8 @@ StatusSlider has properties that can be set in designer, in python handler code * alertUnder - set the float value that signals the stylesheet for 'under' warning. * alertOver - set the float value that signals the stylesheet for 'over' warning. -ie. In handler file: +ie. in handler file: + [source,python] ---- self.w.status_slider.setProperty('spindle_rate',True) @@ -1394,9 +1360,9 @@ It is based on pyQT's QSlider === State LED Widget -This widget gives status on the selected linuxcnc state. + +This widget gives status on the selected linuxcnc state. -The state options are: + +The state options are: * is_paused_status * is_estopped_status @@ -1429,8 +1395,8 @@ There are properties that can be changed: * flashing - Turns flashing option on and off. * flashRate - Sets the flash rate. -The LED properties can be defined in a stylesheet with the following code added to the .qss file. + -The name_of_led would be the name defined Designer's editor. + +The LED properties can be defined in a stylesheet with the following code added to the .qss file. +The name_of_led would be the name defined Designer's editor. ---- State_LED #name_0f_led{ @@ -1444,8 +1410,8 @@ It is based on the LED widget === StatusAdjustmentBar -This widget allows setting values using buttons while displaying a bar. + -It also has an optional hi/low toggle button that can be held down to set the + +This widget allows setting values using buttons while displaying a bar. +It also has an optional hi/low toggle button that can be held down to set the levels. .The widget can adjust: @@ -1458,8 +1424,8 @@ levels. It is based on pyQT's QProgressBar === SystemToolButton -This widget allows you to manually select a user system by pressing and holding. + -If you don't set the button text it will automatically update to the current system. + +This widget allows you to manually select a user system by pressing and holding. +If you don't set the button text it will automatically update to the current system. It is based on pyQT's QToolButton @@ -1469,17 +1435,20 @@ It is based on pyQT's QToolButton image::images/qtvcp_macro.png["QTvcp led",scale="25%"] This Widget allows a user to select and adjust special macro programs for -doing small jobs. + -It uses images for visual representation of the macro and for an icon. + -It searches for special macros using the INI definition: + +doing small jobs. +It uses images for visual representation of the macro and for an icon. +It searches for special macros using the INI definition: + [source,INI] ---- [RS274NGC] SUBROUTINE_PATH = ---- -The macros are Oword subroutine with special comments to work with the launcher. + -The first three lines must have the keywords: (The forth is optional) + -Here is a sample for the first four lines in an Oword file: + + +The macros are Oword subroutine with special comments to work with the launcher. +The first three lines must have the keywords: (The forth is optional) +Here is a sample for the first four lines in an Oword file: + ---- ; MACROCOMMAND=Entry1,Entry2 ; MACRODEFAULTS=0,true @@ -1489,89 +1458,95 @@ Here is a sample for the first four lines in an Oword file: + ==== MACROCOMMAND -This is the first line in the Oword file. + -It is a comma separated list of text to display above an entry. + -There will be one for every variable required in the Oword function. + +This is the first line in the Oword file. +It is a comma separated list of text to display above an entry. +There will be one for every variable required in the Oword function. If the macro does not require variables, only add '; MACROCOMMAND=' ==== MACRODEFAULT -This must be the second line in the Oword file. + -It is a comma separated list of the default values for each variable in the Oword function. + +This must be the second line in the Oword file. +It is a comma separated list of the default values for each variable in the Oword function. If you use the word 'true' or 'false' in the list, a checkbutton will be shown. ==== MACROIMAGE -This must be the third line in the Oword file. + -if using a SVG image file, the must end b .svg + -The image must be added to an svg layer. + -It uses layers to define different images for macro and icon. + -The first entry will be the SVG image file name. + -It is assumed to be in the same folder as the Oword file. + -The second item will be the image layer. + -the optional third entry will be the icon layer. + -If the third entry is missing, the same image will be used for macro and icon. + +This must be the third line in the Oword file. +if using a SVG image file, the must end b .svg +The image must be added to an svg layer. +It uses layers to define different images for macro and icon. +The first entry will be the SVG image file name. +It is assumed to be in the same folder as the Oword file. +The second item will be the image layer. +the optional third entry will be the icon layer. +If the third entry is missing, the same image will be used for macro and icon. -If using a png/jpg image file . + -The first entry is the image filename. + -It is assumed the image file are in the same folder an the macro. + -The optional second entry will be the icon filename. + -If the second entry is missing the same image will be used for macro and image. + +If using a png/jpg image file. +The first entry is the image filename. +It is assumed the image file are in the same folder an the macro. +The optional second entry will be the icon filename. +If the second entry is missing the same image will be used for macro and image. -If the keyword is present but the entries are missing , no images will be used. + +If the keyword is present but the entries are missing , no images will be used. ==== MACRODEFAULT -This optional line must be the forth line in the Oword file. + -It is a comma separated list of keyword and data. + +This optional line must be the forth line in the Oword file. +It is a comma separated list of keyword and data. * 'LOAD:yes' - show a load button * 'SAVE:yes' -show a save button === MDILine Widget -One can enter MDI commands here. A popup keyboard is available + -There are also embedded commands available from this Widget. + -Enter any of these case sensitive commands to load the respective program or access the feature: + +One can enter MDI commands here. A popup keyboard is available +There are also embedded commands available from this Widget. +Enter any of these case sensitive commands to load the respective program or access the feature: -* HALMETER - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/hal/tools.html#_halmeter[Halmeter] + -* HALSHOW - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/hal/halshow.html#cha:halshow[Halshow] + -* HALSCOPE - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/hal/tutorial.html#sec:tutorial-halscope[Halscope] + -* STATUS - Starts LinuxCNC utility link:https://linuxcnc.org/docs//html/man/man1/linuxcnctop.1.html[Status] + -* CALIBRATION - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/getting-started/updating-linuxcnc.html#_calibration_emccalib_tcl[Calibration] + -* CLASSICLADDER - Starts the link:http://linuxcnc.org/docs/devel/html/ladder/classic-ladder.html[ClassicLadder GUI] if the ClassicLadder realtime HAL component was loaded by the machine's config files + -* PREFERENCE - Loads the preference file onto the gcodeEditor + -* CLEAR HISTORY - Clears the MDI History + -* setp - Sets the value of a pin or a parameter. Valid values depend on the object type of the pin or parameter. An error will result if the data types do not match or the pin is connected to a signal. + -Syntax: setp + -Example: setp plasmac.resolution 100 + +* HALMETER - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/hal/tools.html#_halmeter[Halmeter] +* HALSHOW - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/hal/halshow.html#cha:halshow[Halshow] +* HALSCOPE - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/hal/tutorial.html#sec:tutorial-halscope[Halscope] +* STATUS - Starts LinuxCNC utility link:https://linuxcnc.org/docs//html/man/man1/linuxcnctop.1.html[Status] +* CALIBRATION - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/getting-started/updating-linuxcnc.html#_calibration_emccalib_tcl[Calibration] +* CLASSICLADDER - Starts the link:http://linuxcnc.org/docs/devel/html/ladder/classic-ladder.html[ClassicLadder GUI] if the ClassicLadder realtime HAL component was loaded by the machine's config files +* PREFERENCE - Loads the preference file onto the gcodeEditor +* CLEAR HISTORY - Clears the MDI History +* setp - Sets the value of a pin or a parameter. Valid values depend on the object type of the pin or parameter. An error will result if the data types do not match or the pin is connected to a signal. + +---- +Syntax: setp +Example: setp plasmac.resolution 100 +---- -Note that the MDILine function "spindle_inhibit" can be used by a GUI's handler file to inhibit M3, M4, and M5 spindle commands if necessary. + +Note that the MDILine function "spindle_inhibit" can be used by a GUI's handler file to inhibit M3, M4, and M5 spindle commands if necessary. -It is based on pyQT's QLineEdit + +It is based on pyQT's QLineEdit. === MDIHistory -Displays a scrollable list of past MDI command. + -A edit line is embedded for MDI commands. + -There are also embedded commands available from this Widget + -Enter any of these case sensitive commands to load the respective program or access the feature: + +Displays a scrollable list of past MDI command. +A edit line is embedded for MDI commands. +There are also embedded commands available from this Widget. +Enter any of these case sensitive commands to load the respective program or access the feature: + +* HALMETER - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/hal/tutorial.html#sec:tutorial-halmeter[Halmeter] +* HALSHOW - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/hal/halshow.html#cha:halshow[Halshow] +* HALSCOPE - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/hal/tutorial.html#sec:tutorial-halscope[Halscope] +* STATUS - Starts LinuxCNC utility link:https://linuxcnc.org/docs//html/man/man1/linuxcnctop.1.html[Status] +* CALIBRATION - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/getting-started/updating-linuxcnc.html#_calibration_emccalib_tcl[Calibration] +* CLASSICLADDER - Starts the link:http://linuxcnc.org/docs/devel/html/ladder/classic-ladder.html[ClassicLadder GUI] if the ClassicLadder realtime HAL component was loaded by the machine's config files +* PREFERENCE - Loads the preference file onto the gcodeEditor +* CLEAR HISTORY - Clears the MDI History +* setp - Sets the value of a pin or a parameter. Valid values depend on the object type of the pin or parameter. An error will result if the data types do not match or the pin is connected to a signal. -* HALMETER - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/hal/tutorial.html#sec:tutorial-halmeter[Halmeter] + -* HALSHOW - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/hal/halshow.html#cha:halshow[Halshow] + -* HALSCOPE - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/hal/tutorial.html#sec:tutorial-halscope[Halscope] + -* STATUS - Starts LinuxCNC utility link:https://linuxcnc.org/docs//html/man/man1/linuxcnctop.1.html[Status] + -* CALIBRATION - Starts LinuxCNC utility link:http://linuxcnc.org/docs/devel/html/getting-started/updating-linuxcnc.html#_calibration_emccalib_tcl[Calibration] + -* CLASSICLADDER - Starts the link:http://linuxcnc.org/docs/devel/html/ladder/classic-ladder.html[ClassicLadder GUI] if the ClassicLadder realtime HAL component was loaded by the machine's config files + -* PREFERENCE - Loads the preference file onto the gcodeEditor + -* CLEAR HISTORY - Clears the MDI History + -* setp - Sets the value of a pin or a parameter. Valid values depend on the object type of the pin or parameter. An error will result if the data types do not match or the pin is connected to a signal. + -Syntax: setp + -Example: setp plasmac.resolution 100 + +---- +Syntax: setp +Example: setp plasmac.resolution 100 +---- -Note that the MDILine function "spindle_inhibit" can be used by a GUI's handler file to inhibit M3, M4, and M5 spindle commands if necessary. + +Note that the MDILine function "spindle_inhibit" can be used by a GUI's handler file to inhibit M3, M4, and M5 spindle commands if necessary. -The history is recorded on a file defined in the INI. + -under the heading [DISPLAY] (this shows the default) + +The history is recorded on a file defined in the INI. +under the heading [DISPLAY] (this shows the default) [source,ini] ---- @@ -1583,47 +1558,49 @@ MDI_HISTORY_FILE = '~/.axis_mdi_history' .MDI Touchy image::images/qtvcp_mdiTouchy.png["QTvcp MDI Touchy",scale="25%"] -This widget display button and entry lines for use with entering MDI commands. + -It is based on Linuxcnc's Touchy screen's MDI entry process. + -It's large buttons are most useful for touch screens. + - + -To use MDITouchy, first press one of the 'G/XY', 'G/RO', 'M' or 'T' button. + -On the left, will show the current line that can be filled out, then press 'Next' for the next line. + -'Calc' will pop up a calculator dialog. + -'Clear' clears th ecurrent entry. + -'Back' allows you to change previous line entries. + - + -The widget requires an explicied call to MDITouchu's python code to actually run the MDI command + -For handler file code: if the widget was named mditouchy in designer, this command would + -run the displayed MDI command. + +This widget display button and entry lines for use with entering MDI commands. +It is based on Linuxcnc's Touchy screen's MDI entry process. +It's large buttons are most useful for touch screens. + +To use MDITouchy, first press one of the 'G/XY', 'G/RO', 'M' or 'T' button. +On the left, will show the current line that can be filled out, then press 'Next' for the next line. +'Calc' will pop up a calculator dialog. +'Clear' clears th ecurrent entry. +'Back' allows you to change previous line entries. + +The widget requires an explicied call to MDITouchu's python code to actually run the MDI command +For handler file code: if the widget was named mditouchy in designer, this command would +run the displayed MDI command. [source,python] ---- self.w.mditouchy.run_command() ---- -For action button use: if the widget was named mditouchy in designer, + -use the action button's 'Call python commands' option and enter: + +For action button use: if the widget was named mditouchy in designer, +use the action button's 'Call python commands' option and enter: + [source,python] ---- INSTANCE.mditouchy.run_command() ---- -The macro button will cycle though macro's defined in the INI heading [DISPLAY] + -add one or more 'MACRO = ' lines. Each should be of the format: + +The macro button will cycle though macro's defined in the INI heading [DISPLAY] +add one or more 'MACRO = ' lines. Each should be of the format: [source,ini] ---- MACRO = increment xinc yinc ---- + In this example, increment is the name of the macro, and it accepts two parameters, named xinc and yinc. -Now, place the macro in a file named 'increment.ngc', in the + -'PROGRAM_PREFIX' directory or any directory in the 'SUBROUTINE_PATH'. + -(specified in the INI file) + +Now, place the macro in a file named 'increment.ngc', in the +'PROGRAM_PREFIX' directory or any directory in the 'SUBROUTINE_PATH'. +(specified in the INI file) -It should look like: + +It should look like: ---- O sub @@ -1632,51 +1609,52 @@ G90 O endsub ---- -Notice the name of the sub matches the file name and macro name exactly, + -including case. + +Notice the name of the sub matches the file name and macro name exactly, +including case. -When you invoke the macro by pressing the Macro button + -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. + +When you invoke the macro by pressing the Macro button +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. -If there are several different macros, press the Macro button + -repeatedly to cycle through them. + +If there are several different macros, press the Macro button +repeatedly to cycle through them. -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. + +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. -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. + +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. === OriginOffsetView Widget .origin Offset View image::images/qtvcp_originoffsetview.png["QTvcp Origin Offset View"] -This widget allows one to modify User System origin offsets directly + -It will update linuxcnc's Parameter file for changes made or found. + -The settings can only be changed in linuxcnc after homing and + -when the motion controller is idle. + -The display and entry will change between metric and imperial based + -on linuxcnc's current G20/G21 setting. + -The current in-use user system will be highlighted + -Extra actions can be integrated to manipulate settings. + -These actions depend on extra code added either to a combined widget like + -originoffsetview dialog or the screens handler code. + -Typical actions might be 'Clear Current User offsets', 'Zero X' + -Clicking on the columns and rows allows one to adjust the settings. + -A dialog can be made to popup for data or text entry. + -The comments section will be recorded in the preference file. + - -It is based on pyQT's QTableView, QAbstractTableModel, and ItemEditorFactory. + -Properties, functions and styles of the pyQT base objects are always available. + +This widget allows one to modify User System origin offsets directly +It will update linuxcnc's Parameter file for changes made or found. +The settings can only be changed in linuxcnc after homing and +when the motion controller is idle. +The display and entry will change between metric and imperial based +on linuxcnc's current G20/G21 setting. +The current in-use user system will be highlighted +Extra actions can be integrated to manipulate settings. +These actions depend on extra code added either to a combined widget like +originoffsetview dialog or the screens handler code. +Typical actions might be 'Clear Current User offsets', 'Zero X' +Clicking on the columns and rows allows one to adjust the settings. +A dialog can be made to popup for data or text entry. +The comments section will be recorded in the preference file. + +It is based on pyQT's QTableView, QAbstractTableModel, and ItemEditorFactory. +Properties, functions and styles of the pyQT base objects are always available. ==== Properties -OriginOfsetView has properties that can be set in designer, in python handler code or + + +OriginOfsetView has properties that can be set in designer, in python handler code or (if appropriate) in stylesheets. * dialog_code_string - sets which dialog will pop up with numerical entry. @@ -1685,7 +1663,8 @@ OriginOfsetView has properties that can be set in designer, in python handler co * imperial_template - imperial numerical data format. * styleCodeHighlight - current in-use user system highlight color. -ie. In the handler file: +ie. in the handler file: + [source,python] ---- self.w.originoffsetview.setProperty('dialog_code','CALCULATOR') @@ -1693,6 +1672,7 @@ self.w.originoffsetview.setProperty('metric_template','%10.3f') ---- ie. In style sheets: + ---- OriginOffsetView{ qproperty-styleColorHighlist: lightblue; @@ -1701,16 +1681,16 @@ qproperty-styleColorHighlist: lightblue; === State Enable Gridlayout Widgets -This is a container that other widgets can be placed in. + -It will 'grey-out' (disable) the widgets inside it depending on linuxcnc's current state. + -It can selectably react to: + +This is a container that other widgets can be placed in. +It will 'grey-out' (disable) the widgets inside it depending on linuxcnc's current state. +It can selectably react to: * machine on * interpreter idle * estop off * all-homed -It is based on pyQT's QGridLayout + +It is based on pyQT's QGridLayout === MachineLog @@ -1721,8 +1701,8 @@ It is based on pyQT's It is based on pyQT's === StatusImageSwitcher -This widget will display images based on linuxcnc status. + -You can watch: + +This widget will display images based on linuxcnc status. +You can watch: * the state of the spindle. * the state of all homed @@ -1732,16 +1712,17 @@ You can watch: + It is based on pyQT's === FileManager + .FileManager image::images/qtvcp_fileManager.png["QTvcp File Manager Widget",scale="25%"] -This widget is used to select files to load. + -It has a the ability to scroll the names with hardware such as a MPG. + +This widget is used to select files to load. +It has a the ability to scroll the names with hardware such as a MPG. -one can class patch the function 'load(self,fname):' to customize file loading. + +one can class patch the function 'load(self,fname):' to customize file loading. -the function 'getCurrentSelected()' will return a python tuple, containing + -the file path and whether it's a file. + +the function 'getCurrentSelected()' will return a python tuple, containing +the file path and whether it's a file. [source,python] ---- @@ -1762,30 +1743,31 @@ It is based on pyQT's .Tool Offset View image::images/qtvcp_tooloffsetview.png["QTvcp Tool Offset View"] -This widget will display and allows one to modify tool offsets + -It will update linuxcnc's tool table for changes made or found. + -The tool settings can only be changed in linuxcnc after homing and + -when the motion controller is idle. + -The display and entry will change between metric and imperial based + -on linuxcnc's current G20/G21 setting. + -The current in-use tool will be highlighted + -The current selected tool will be highlighted in a different color. + -The checkbox beside each tool can be used to select a tool(s) for an action. + -This action depends on extra code added either to a combined widget like + -tooloffsetview dialog or the screens handler code. + -Typical actions are 'load selected tool', 'delete selected tools' + -Clicking on the columns and rows allows one to adjust the settings. + -A dialog can be made to popup for data or text entry. + -The comments section will typically be displayed in the manual tool change dialog. + -If using a lathe configuration, there can be columns for X and Z wear. + -To use these columns to adjust the tool for wear, requires a remapped tool change + -routine. + - -It is based on pyQT's QTableView, QAbstractTableModel, and ItemEditorFactory. + -Properties, functions and styles of the pyQT base objects are always available. + +This widget will display and allows one to modify tool offsets +It will update linuxcnc's tool table for changes made or found. +The tool settings can only be changed in linuxcnc after homing and +when the motion controller is idle. +The display and entry will change between metric and imperial based +on linuxcnc's current G20/G21 setting. +The current in-use tool will be highlighted +The current selected tool will be highlighted in a different color. +The checkbox beside each tool can be used to select a tool(s) for an action. +This action depends on extra code added either to a combined widget like +tooloffsetview dialog or the screens handler code. +Typical actions are 'load selected tool', 'delete selected tools' +Clicking on the columns and rows allows one to adjust the settings. +A dialog can be made to popup for data or text entry. +The comments section will typically be displayed in the manual tool change dialog. +If using a lathe configuration, there can be columns for X and Z wear. +To use these columns to adjust the tool for wear, requires a remapped tool change +routine. + +It is based on pyQT's QTableView, QAbstractTableModel, and ItemEditorFactory. +Properties, functions and styles of the pyQT base objects are always available. ==== Properties -ToolOfsetView has properties that can be set in designer, in python handler code or + + +ToolOfsetView has properties that can be set in designer, in python handler code or (if appropriate) in stylesheets. * dialog_code_string - sets which dialog will pop up with numerical entry. @@ -1796,6 +1778,7 @@ ToolOfsetView has properties that can be set in designer, in python handler code * styleCodeSelected - selected highlight color ie. In handler file: + [source,python] ---- self.w.tooloffsetview.setProperty('dialog_code','CALCULATOR') @@ -1811,7 +1794,8 @@ qproperty-styleColorSelected: #444; ---- ==== Functions -ToolOffsetView has some function that are useful for screen builders to add actions. + + +ToolOffsetView has some function that are useful for screen builders to add actions. * add_tool() - adds a blank dummy tool (99) that the user can edit to suit. * delete_tools() - deletes the currently checkbox selected tools @@ -1834,29 +1818,29 @@ image::images/qtvcp_basicProbe.png["QTvcp basicProbe widget",scale="25%"] Widget for probing on a mill. Used by the QtDragon screen. - == Dialog Widgets -Dialogs are used to present or request immediately required information in a focused way. + -The typical used dialogs can be loaded using the screenoptions widget. + -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. + -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. + +Dialogs are used to present or request immediately required information in a focused way. +The typical used dialogs can be loaded using the screenoptions widget. +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. +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. To set this up first register to catch the 'general' message from STATUS: + [source,python] ---- STATUS.connect('general',self.return_value) ---- -Add a function to call a dialog: + -This function must build a message DICT to send to the dialog. + -This message will be passed back in the general message with the addition + -of the RETURN variable. It is possible to add extra user information to the message. + -The dialog will ignore these and pass them back. + -'NAME' = launch code name of dialog to show. + -'ID' = a unique id so we process only a dialog that we requested. + +Add a function to call a dialog: +This function must build a message DICT to send to the dialog. +This message will be passed back in the general message with the addition +of the RETURN variable. It is possible to add extra user information to the message. +The dialog will ignore these and pass them back. +'NAME' = launch code name of dialog to show. +'ID' = a unique id so we process only a dialog that we requested. 'TITLE' = the title to use on the dialog [source,python] @@ -1867,12 +1851,13 @@ The dialog will ignore these and pass them back. + ACTION.CALL_DIALOG, mess) ---- -Add a callback function that processes the general message: + -This function should check the the name and id is the same as + -we sent, then it can extract the return value and any user variables. + -Keep in mind this function will get all general messages so the DICT keynames + -are not guaranteed to be there. Using the .get() function and or using try/except + +Add a callback function that processes the general message: +This function should check the the name and id is the same as +we sent, then it can extract the return value and any user variables. +Keep in mind this function will get all general messages so the DICT keynames +are not guaranteed to be there. Using the .get() function and or using try/except is advisable. + [source,python] ---- # process the STATUS return message @@ -1887,11 +1872,11 @@ is advisable. === Lcnc_Dialog -This is a general message dialog widget. + -If there is an Focus Overlay widget present, it can signal it to display. + -If the sound library is set up it can play sounds. + -There are options that can be set when requesting a dialog, these would be added to + -the message dict. + +This is a general message dialog widget. +If there is an Focus Overlay widget present, it can signal it to display. +If the sound library is set up it can play sounds. +There are options that can be set when requesting a dialog, these would be added to +the message dict. * 'TITLE':'Attention' -Title of the dialog window * 'MESSAGE':'your text' -Title message text in bold @@ -1904,40 +1889,41 @@ the message dict. + * 'FOCUSCOLOR':QColor(0, 0, 0, 150) - color to use if focus overlay is used * 'PLAYALERT' :'SPEAK alert!'- sound to play if sound is available -When using STATUS's 'request-dialog' function, the default launch name is 'MESSAGE' + +When using STATUS's 'request-dialog' function, the default launch name is 'MESSAGE'. -It is based on pyQT's QMessagebox +It is based on pyQT's QMessagebox. === Dialog Tool Change Widget .Manual Tool Change image::images/qtvcp_toolChange.png["QTvcp Manual Tool Change Dialog",scale="25%"] -This is used as a manual tool change prompt. + -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. + -the tool change dialog can only be launched by HAL pins. + -If there is a Focus Overlay widget present, it will signal it to display. + +This is used as a manual tool change prompt. +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. +the tool change dialog can only be launched by HAL pins. +If there is a Focus Overlay widget present, it will signal it to display. -It is based on pyQT's QMessagebox +It is based on pyQT's QMessagebox. === Dialog File Chooser Widget .File Dialog image::images/qtvcp_fileDialog.png["QTvcp file dialog",scale="25%"] -This is used to load G-code files + -If there is a Focus Overlay widget present, it will signal it to display. + -When using STATUS's 'request-dialog' function, the default launch names are 'LOAD' or 'SAVE' + +This is used to load G-code files. +If there is a Focus Overlay widget present, it will signal it to display. +When using STATUS's 'request-dialog' function, the default launch names are 'LOAD' or 'SAVE'. -There are options that can be set when requesting a dialog, these would be added to + -the message dict. + +There are options that can be set when requesting a dialog, these would be added to +the message dict. * EXTENSIONS * FILENAME * DIRECTORY -An example python call, for a load dialog: + +An example python call, for a load dialog: + [source,python] ---- mess = {'NAME':'LOAD','ID':'_MY_DIALOG_', @@ -1948,7 +1934,8 @@ mess = {'NAME':'LOAD','ID':'_MY_DIALOG_', ACTION.CALL_DIALOG(mess) ---- -And for saving + +And for saving + [source,python] ---- mess = {'NAME':'SAVE','ID':'_MY_DIALOG_', @@ -1958,52 +1945,52 @@ mess = {'NAME':'SAVE','ID':'_MY_DIALOG_', } ACTION.CALL_DIALOG(mess) ---- -It is based on pyQT's QMessagebox + +It is based on pyQT's QMessagebox. === Dialog Origin Offset Widget .Offsets image::images/qtvcp_offsetpage.png["QTvcp origin Offset Page",scale="25%"] -This widget allows one to modify User System origin offsets directly + -It is in a dialog form + -If there is an Focus Overlay widget present, it will signal it to display. + -When using STATUS's 'request-dialog' function, the default launch name is 'ORIGINOFFSET' + +This widget allows one to modify User System origin offsets directly. +It is in a dialog form. +If there is an Focus Overlay widget present, it will signal it to display. +When using STATUS's 'request-dialog' function, the default launch name is 'ORIGINOFFSET'. -It is based on pyQT's QDialog +It is based on pyQT's QDialog. === Dialog tool Offset Widget .Tool Offsets image::images/qtvcp_toolOffset.png["QTvcp Tool Offset Page",scale="25%"] -This widget allows one to modify Tool offsets directly + -It is in a dialog form + -If there is an Focus Overlay widget present, it will signal it to display. + -When using STATUS's 'request-dialog' function, the default launch name is 'TOOLOFFSET' + +This widget allows one to modify Tool offsets directly. +It is in a dialog form. +If there is an Focus Overlay widget present, it will signal it to display. +When using STATUS's 'request-dialog' function, the default launch name is 'TOOLOFFSET'. -It is based on pyQT's QDialog +It is based on pyQT's QDialog. === Dialog MacroTab -This is a dialog for displaying the macrotab widget. + -Macrotab displays a choice of macro programs to run using icons. + -If there is a Focus Overlay widget present, it will signal it to display. + -When using STATUS's 'request-dialog' function, the default launch name is 'MACROTAB' + +This is a dialog for displaying the macrotab widget. +Macrotab displays a choice of macro programs to run using icons. +If there is a Focus Overlay widget present, it will signal it to display. +When using STATUS's 'request-dialog' function, the default launch name is 'MACROTAB'. === Dialog camview -This is a dialog to display the camview object for Webcam part alignment. + -When using STATUS's 'request-dialog' function, the default launch name is 'CAMVIEW' + -It is based on pyQT's QDialog +This is a dialog to display the camview object for Webcam part alignment. +When using STATUS's 'request-dialog' function, the default launch name is 'CAMVIEW'. +It is based on pyQT's QDialog. === Dialog entry -This is a dialog to display an edit line for information entry, such as origin offset. + -It returns the entry via STATUS messages using a python DICT. + -The DICT contains at minimum, the name of the dialog requested and an id code. + -When using STATUS's 'request-dialog' function, the default launch name is 'ENTRY' + - + +This is a dialog to display an edit line for information entry, such as origin offset. +It returns the entry via STATUS messages using a python DICT. +The DICT contains at minimum, the name of the dialog requested and an id code. +When using STATUS's 'request-dialog' function, the default launch name is 'ENTRY'. It is based on pyQT's QDialog @@ -2012,10 +1999,10 @@ It is based on pyQT's QDialog .Calculator image::images/qtvcp_calculator.png["QTvcp Calculator",scale="25%"] -This is a dialog to display a calculator for numeric entry, such as origin offset. + -It returns the entry via STATUS messages using a python DICT. + -The DICT contains at minimum, the name of the dialog requested and an id code. + -When using STATUS's 'request-dialog' function, the default launch name is 'CALCULATOR' + +This is a dialog to display a calculator for numeric entry, such as origin offset. +It returns the entry via STATUS messages using a python DICT. +The DICT contains at minimum, the name of the dialog requested and an id code. +When using STATUS's 'request-dialog' function, the default launch name is 'CALCULATOR' It is based on pyQT's QDialog === Dialog Run From Line @@ -2030,7 +2017,7 @@ Dialog to preset spindle settings before running a program from a specific line .Versa Probe Dialog image::images/qtvcp_versaProbe.png["QTvcp Versa Probe",scale="25%"] -This is a dialog to display A probing screen based on Versa Probe. + +This is a dialog to display A probing screen based on Versa Probe. It is based on pyQT's QDialog === Dialog MachineLogDialog @@ -2038,10 +2025,11 @@ It is based on pyQT's QDialog .Machine Log Dialog image::images/qtvcp_machineLog.png["QTvcp MachineLog Dialog",scale="25%"] -This is a dialog to display the user machine log and qtvcp's debugging log. + +This is a dialog to display the user machine log and qtvcp's debugging log. It is based on pyQT's QDialog == Other + Other available widgets === Nurbs Editor @@ -2049,32 +2037,34 @@ Other available widgets .Nurbs Editor image::images/qtvcp_nurbsEditor.png["QTvcp nurbs editor",scale="25%"] -The Nurbs editor allows you to manipulate a nurbs based geometry on screen and then + +The Nurbs editor allows you to manipulate a nurbs based geometry on screen and then convert this to G-code. you can edit the G-code on screen and then send it to LinuxCNC. === JoyPad -It is the base class for the HALPad widget. + -This widget looks and acts like a 5 button D-pad, with an LED like indicators in a ring + -You can put text or icons in each of the button positions. + -You can connect to output signals when the buttons are pressed. + -There are also input slots to change the color of the indicator(s). + + +It is the base class for the HALPad widget. +This widget looks and acts like a 5 button D-pad, with an LED like indicators in a ring. +You can put text or icons in each of the button positions. +You can connect to output signals when the buttons are pressed. +There are also input slots to change the color of the indicator(s). ==== ENUMS -There are enumerated constants used to reference indicator positions. + -They are used in the Designer editor's property editor or used if using python code. + + +There are enumerated constants used to reference indicator positions. +They are used in the Designer editor's property editor or used if using python code. + ---- - NONE - LEFT - RIGHT - CENTER - TOP - BOTTOM - LEFTRIGHT - TOPBOTTOM +NONE +LEFT +RIGHT +CENTER +TOP +BOTTOM +LEFTRIGHT +TOPBOTTOM ---- - -For python handler code, you use the widget Designer name plus the reference constant. + +For python handler code, you use the widget Designer name plus the reference constant. [source,python] ---- @@ -2082,61 +2072,60 @@ self.w.joypadname.set_highlight(self.w.joypadname.LEFT) ---- ==== Useful Override-able Functions -As coded they issue signals for the button pressed or released. + -On signal outputs a string code for the button, one signal outputs a bool value. + + +As coded they issue signals for the button pressed or released. +On signal outputs a string code for the button, one signal outputs a bool value. + ---- - def _pressedOutput(self, btncode): - self.joy_btn_pressed.emit(btncode) - self['joy_{}_pressed'.format(btncode.lower())].emit(True) +def _pressedOutput(self, btncode): + self.joy_btn_pressed.emit(btncode) + self['joy_{}_pressed'.format(btncode.lower())].emit(True) - def _releasedOutput(self, btncode): - self.joy_btn_released.emit(btncode) - self['joy_{}_pressed'.format(btncode.lower())].emit(False) +def _releasedOutput(self, btncode): + self.joy_btn_released.emit(btncode) + self['joy_{}_pressed'.format(btncode.lower())].emit(False) ---- ==== Callable Functions * 'reset_highlight()': + -Clears the highlight indicator. + - + Clears the highlight indicator. * 'set_highlight(button, state=True)': + -Set the highlight indicator in position 'button' to state 'state' -You can use strings letters (LRCTBXA) or position ENUMS for the button argument. + - + Set the highlight indicator in position 'button' to state 'state' + You can use strings letters (LRCTBXA) or position ENUMS for the button argument. * 'set_button_icon(button, pixmap)': + -Sets the button's icon pixmap. + - + Sets the button's icon pixmap. * 'set_button_text(button, text)': + -Sets the button's icon text. + - + Sets the button's icon text. * 'set_tooltip(button, text)': + -Sets the buttons popup tooltip descriptive text. + - -* 'setLight(state)': + -Sets the highlight indicator to the true color or false color. + -The set_highlight() function must be used prior to set the indicator to use. + + Sets the buttons popup tooltip descriptive text. +* 'setLight(state)': + Sets the highlight indicator to the true color or false color. + The set_highlight() function must be used prior to set the indicator to use. ==== signals -These signals will be sent when buttons are pressed. + -They can be connected to in the Designer editor or python code. + -The first two output a string the indicates the button pressed. + ----- - joy_btn_pressed = QtCore.pyqtSignal(str) - joy_btn_released = QtCore.pyqtSignal(str) - joy_l_pressed = QtCore.pyqtSignal(bool) - joy_l_released = QtCore.pyqtSignal(bool) - joy_r_pressed = QtCore.pyqtSignal(bool) - joy_r_released = QtCore.pyqtSignal(bool) - joy_c_pressed = QtCore.pyqtSignal(bool) - joy_c_released = QtCore.pyqtSignal(bool) - joy_t_pressed = QtCore.pyqtSignal(bool) - joy_t_released = QtCore.pyqtSignal(bool) - joy_b_pressed = QtCore.pyqtSignal(bool) - joy_b_released = QtCore.pyqtSignal(bool) +These signals will be sent when buttons are pressed. +They can be connected to in the Designer editor or python code. +The first two output a string the indicates the button pressed. + +---- +joy_btn_pressed = QtCore.pyqtSignal(str) +joy_btn_released = QtCore.pyqtSignal(str) +joy_l_pressed = QtCore.pyqtSignal(bool) +joy_l_released = QtCore.pyqtSignal(bool) +joy_r_pressed = QtCore.pyqtSignal(bool) +joy_r_released = QtCore.pyqtSignal(bool) +joy_c_pressed = QtCore.pyqtSignal(bool) +joy_c_released = QtCore.pyqtSignal(bool) +joy_t_pressed = QtCore.pyqtSignal(bool) +joy_t_released = QtCore.pyqtSignal(bool) +joy_b_pressed = QtCore.pyqtSignal(bool) +joy_b_released = QtCore.pyqtSignal(bool) ---- ==== slots -Slots can be connected to in the Designer editor or python code. + +Slots can be connected to in the Designer editor or python code. + ---- set_colorStateTrue() set_colorStateFalse() @@ -2150,44 +2139,41 @@ set_false_color(qcolor) ---- ==== Properties -These can be set in stylesheets or python code to change it's properties. + + +These can be set in stylesheets or python code to change it's properties. * 'highlightPosition': + -Set the indicator position. + + Set the indicator position. * 'setColorState': + -Select the color state of the indicator. + - + Select the color state of the indicator. * 'left_image_path': * 'right_image_path': * 'center_image_path': * 'top_image_path': * 'bottom_image_path': + -A file path or resource path to an image to display in the described button location. + -If the reset button is pressed in the Designer editor property, the image will not be displayed. (allowing optionally text) + - + A file path or resource path to an image to display in the described button location. + If the reset button is pressed in the Designer editor property, the image will not be displayed. (allowing optionally text) * 'left_text': * 'right_text': * 'center_text': * 'top_text': * 'bottom_text': + -A text string to be displayed in the described button location. + -If left blank an image can be designated to be displayed. + - + A text string to be displayed in the described button location. + If left blank an image can be designated to be displayed. * 'true_color': * 'false_color': + -Color selection for the center LED ring to be displayed when the 'BASENAME.light.center' HAL pin is True or False. + - + Color selection for the center LED ring to be displayed when the 'BASENAME.light.center' HAL pin is True or False. * 'text_color': + -Color selection for the button text. + + Color selection for the button text. * 'button_font': + -Font selection for the button text. + + Font selection for the button text. ===== StyleSheets The above properties could be set in styles sheets. -You would usually use the designer widget name with '#' to set individual + -widget properties, other wise you the class name 'JoyPad' to set all + -JoyPad widgets the same. + +You would usually use the designer widget name with '#' to set individual +widget properties, other wise you the class name 'JoyPad' to set all +JoyPad widgets the same. ---- #joypadname{ @@ -2195,7 +2181,9 @@ qproperty-true_color: #000; qproperty-false_color: #444; } ---- + ===== Python Code + [source,python] ---- self.w.joypadename.setProperty('true_color','green') @@ -2203,8 +2191,8 @@ self.w.joypadename.setProperty('false_color','red') ---- == Import only Widgets -These widgets are usually the base class widget for other QTvcp widgets. + -They are not available directly from the Designer editor but could be imported and manually inserted. + -They could also be subclassed to make a similar widget with new features. + +These widgets are usually the base class widget for other QTvcp widgets. +They are not available directly from the Designer editor but could be imported and manually inserted. +They could also be subclassed to make a similar widget with new features. === TODO From 49e870a606c67e02d4be519f199addfececaff10 Mon Sep 17 00:00:00 2001 From: Steffen Moeller Date: Sat, 19 Mar 2022 17:55:20 +0100 Subject: [PATCH 37/53] Again, more mysterious stale references Possible final correction to get the docs to build again? But now it is the last change to get it to build. Another one down? Not giving up. gcode:parameters -> sec:overview-parameters sec -> sub --- docs/src/config/ini-config.adoc | 6 +- docs/src/config/ini-config_es.adoc | 490 +++++++++++------------- docs/src/config/ini-homing.adoc | 91 +++-- docs/src/config/ini-homing_es.adoc | 67 ++-- docs/src/config/ini-homing_fr.adoc | 4 +- docs/src/gcode/coordinates.adoc | 5 +- docs/src/gcode/coordinates_es.adoc | 2 +- docs/src/gcode/coordinates_fr.adoc | 12 +- docs/src/gcode/g-code.adoc | 10 +- docs/src/gcode/g-code_es.adoc | 10 +- docs/src/gcode/g-code_fr.adoc | 65 +--- docs/src/gcode/machining-center.adoc | 2 +- docs/src/gcode/machining-center_es.adoc | 2 +- docs/src/gcode/o-code.adoc | 4 +- docs/src/gcode/o-code_es.adoc | 4 +- docs/src/gcode/overview.adoc | 207 ++++------ docs/src/gcode/overview_es.adoc | 5 +- docs/src/gcode/overview_fr.adoc | 27 +- docs/src/gui/axis.adoc | 2 +- docs/src/gui/axis_es.adoc | 2 +- docs/src/gui/gladevcp.adoc | 2 +- docs/src/lathe/lathe-user.adoc | 2 +- docs/src/lathe/lathe-user_es.adoc | 23 +- docs/src/lathe/lathe-user_fr.adoc | 42 +- docs/src/user/user-concepts.adoc | 8 +- docs/src/user/user-concepts_es.adoc | 5 +- docs/src/user/user-concepts_fr.adoc | 30 +- 27 files changed, 483 insertions(+), 646 deletions(-) diff --git a/docs/src/config/ini-config.adoc b/docs/src/config/ini-config.adoc index 9a88a23c974..6e7f32194b1 100644 --- a/docs/src/config/ini-config.adoc +++ b/docs/src/config/ini-config.adoc @@ -555,12 +555,12 @@ The maximum number of USER_M_PATH directories is defined at compile time (typ: ' * 'INI_VARS = 1' Default 1 Allows G-code programs to read values from the INI file using the format #<_ini[section]name>. - See <>. + See <>. * 'HAL_PIN_VARS = 1' Default 1 Allows G-code programs to read the values of HAL pins using the format #<_hal[Hal item]>. Variable access is read-only. - See <> for more details and an important caveat. + See <> for more details and an important caveat. * 'RETAIN_G43 = 0' Default 0 When set, you can turn on G43 after loading the first tool, and then not worry about it through the program. @@ -1516,7 +1516,7 @@ The value of 'num_spindles' is set by [TRAJ]SPINDLES= * '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 <> and <>. + For more information see <> and <>. * 'RANDOM_TOOLCHANGER = 1' - This is for machines that cannot place the tool back into the pocket it came from. diff --git a/docs/src/config/ini-config_es.adoc b/docs/src/config/ini-config_es.adoc index 02e87c6e09a..2211c95bf16 100644 --- a/docs/src/config/ini-config_es.adoc +++ b/docs/src/config/ini-config_es.adoc @@ -526,81 +526,77 @@ main(sys.argv[1:]) [[gcode:ini-features]] === Sección [RS274NGC] -* 'PARAMETER_FILE = myfile.var' - -    (((ARCHIVO DE PARÁMETROS))) El archivo ubicado en el mismo directorio que el archivo ini -    que contiene los parámetros utilizados por el intérprete (guardado entre ejecuciones). - -* 'ORIENT_OFFSET = 0' - -    (((ORIENT OFFSET))) Un valor float agregado al parámetro R -    de una operación <>. Se usa para definir una posición cero - arbitraria independientemente de la orientación de montaje del codificador. - -* 'RS274NGC_STARTUP_CODE = G17 G20 G40 G49 G64 P0.001 G80 G90 G92 G94 G97 G98' - -    (((CÓDIGO DE INICIO RS274NGC))) Una cadena de códigos NC que inicializa el intérprete. -    Esto no es un sustituto para especificar códigos g modales -    en la parte superior de cada archivo ngc, porque los códigos modales de -    las máquinas difieren, y pueden ser cambiadas por el código g interpretado anteriormente en -    la sesión. - -* 'SUBROUTINE_PATH = ncsubroutines:/tmp/testsubs:lathesubs:millsubs' - -    (((RUTA SUBROUTINA))) Especifica una lista separada por dos puntos (:) de hasta 10 -    directorios a buscar cuando se especifican subrutinas de un solo archivo -    en gcode. Estos directorios se buscan después de buscar -    [DISPLAY] PROGRAM_PREFIX (si está especificado) y antes de buscar -    [WIZARD] WIZARD_ROOT (si se especifica). Las rutas se buscan en el orden -    que están listados El primer archivo de subrutina coincidente -    encontrado en la búsqueda se utiliza. Los directorios se especifican en relación con el -    directorio actual para el archivo ini o como rutas absolutas. La lista debe -    no contienen espacios en blanco intermedios. - -* 'CENTER_ARC_RADIUS_TOLERANCE_INCH = n' Predeterminado 0.00005 - -* 'CENTER_ARC_RADIUS_TOLERANCE_MM = n' Predeterminado 0.00127 - -* 'USER_M_PATH = myfuncs:/tmp/mcodes:experimentalmcodes' - (((USER M PATH))) + * 'PARAMETER_FILE = myfile.var' - +   (((ARCHIVO DE PARÁMETROS))) El archivo ubicado en el mismo directorio que el archivo ini +   que contiene los parámetros utilizados por el intérprete (guardado entre ejecuciones). + + * 'ORIENT_OFFSET = 0' - +   (((ORIENT OFFSET))) Un valor float agregado al parámetro R +   de una operación <>. Se usa para definir una posición cero + arbitraria independientemente de la orientación de montaje del codificador. + + * 'RS274NGC_STARTUP_CODE = G17 G20 G40 G49 G64 P0.001 G80 G90 G92 G94 G97 G98' - +   (((CÓDIGO DE INICIO RS274NGC))) Una cadena de códigos NC que inicializa el intérprete. +   Esto no es un sustituto para especificar códigos g modales +   en la parte superior de cada archivo ngc, porque los códigos modales de +   las máquinas difieren, y pueden ser cambiadas por el código g interpretado anteriormente en +   la sesión. + * 'SUBROUTINE_PATH = ncsubroutines:/tmp/testsubs:lathesubs:millsubs' - +   (((RUTA SUBROUTINA))) Especifica una lista separada por dos puntos (:) de hasta 10 +   directorios a buscar cuando se especifican subrutinas de un solo archivo +   en gcode. Estos directorios se buscan después de buscar +   [DISPLAY] PROGRAM_PREFIX (si está especificado) y antes de buscar +   [WIZARD] WIZARD_ROOT (si se especifica). Las rutas se buscan en el orden +   que están listados El primer archivo de subrutina coincidente +   encontrado en la búsqueda se utiliza. Los directorios se especifican en relación con el +   directorio actual para el archivo ini o como rutas absolutas. La lista debe +   no contienen espacios en blanco intermedios. + * 'CENTER_ARC_RADIUS_TOLERANCE_INCH = n' Predeterminado 0.00005 + * 'CENTER_ARC_RADIUS_TOLERANCE_MM = n' Predeterminado 0.00127 + * 'USER_M_PATH = myfuncs:/tmp/mcodes:experimentalmcodes' - (((USER M PATH)))    Especifica una lista de directorios separados por dos puntos (:) para funciones definidas por el usuario.    Los directorios se especifican relativas al directorio actual    del archivo ini o como rutas absolutas. La lista no debe contener ningun espacio en blanco. -+ + Se realiza una búsqueda para cada posible función definida por el usuario, típicamente (M100-M199). El orden de búsqueda es: -+ + . [DISPLAY]PROGRAM_PREFIX (si se especifica) . Si no se especifica [DISPLAY]PROGRAM_PREFIX, busca en la ubicación predeterminada: nc_files . Luego busca en cada directorio de la lista [RS274NGC]USER_M_PATH -+ + El primer ejecutable M1xx encontrado en la búsqueda se usa para cada M1xx. [NOTE] El número máximo de directorios USER_M_PATH se define en tiempo de compilación (predeterminado: 'USER_DEFINED_FUNCTION_MAX_DIRS == 5'). -* 'INI_VARS = 1' Predeterminado 1 -Permite que los programas de código G lean valores del archivo INI usando el formato -#<_ini[sección]nombre>. Ver <> +* 'INI_VARS = 1' Predeterminado 1 + + Permite que los programas de código G lean valores del archivo INI usando el formato + #<_ini[sección]nombre>. Ver <> -* 'HAL_PIN_VARS = 1' Predeterminado 1 -Permite que los programas de código G lean los valores de los pines HAL usando el formato -#<_hal[Elemento Hal]> El acceso a esta variable es de solo lectura. -Consulte <> para obtener más detalles y una -advertencia importante. +* 'HAL_PIN_VARS = 1' Predeterminado 1 + + Permite que los programas de código G lean los valores de los pines HAL usando el formato + #<_hal[Elemento Hal]> El acceso a esta variable es de solo lectura. + Consulte <> para obtener más detalles y una + advertencia importante. -* 'RETAIN_G43 = 0' Predeterminado 0 -Cuando está configurado, puede activar G43 después de cargar la primera herramienta, -y luego despreocuparse por eso a través del programa. Cuando usted -finalmente descargue la última herramienta, el modo G43 se cancela. +* 'RETAIN_G43 = 0' Predeterminado 0 + + Cuando está configurado, puede activar G43 después de cargar la primera herramienta, + y luego despreocuparse por eso a través del programa. Cuando usted + finalmente descargue la última herramienta, el modo G43 se cancela. -* 'OWORD_NARGS = 0' Predeterminado 0 -Si esta función está habilitada, una subrutina llamada puede determinar el -número de parámetros posicionales reales pasados ​​al inspeccionar el parámetro +#+. +* 'OWORD_NARGS = 0' Predeterminado 0 + + Si esta función está habilitada, una subrutina llamada puede determinar el + número de parámetros posicionales reales pasados ​​al inspeccionar el parámetro +#+. -* 'NO_DOWNCASE_OWORD = 0' Predeterminado 0 -Conservar mayúsculas y minúsculas en los nombres O-word dentro de los comentarios si está configurado, permite leer -elementos HAL de mayúsculas y minúsculas en comentarios estructurados como -'(debug, #<_hal[MixedCaseItem])'.. +* 'NO_DOWNCASE_OWORD = 0' Predeterminado 0 + + Conservar mayúsculas y minúsculas en los nombres O-word dentro de los comentarios si está configurado, permite leer + elementos HAL de mayúsculas y minúsculas en comentarios estructurados como + '(debug, #<_hal[MixedCaseItem])'.. -* 'OWORD_WARNONLY = 0' Predeterminado 0 -Advertir en lugar de error en caso de errores en las subrutinas O-word. +* 'OWORD_WARNONLY = 0' Predeterminado 0 + + Advertir en lugar de error en caso de errores en las subrutinas O-word. [NOTE] Las seis opciones anteriores fueron controladas por la máscara de bits 'FEATURES' en versiones de LinuxCNC anteriores a 2.8. Esta etiqueta INI ya no trabaja. @@ -1025,7 +1021,7 @@ Ejemplo: loadrt motmod ... unlock_joints_mask = 0x38 crea pines de desbloqueo para articulaciones 3,4,5 * 'OFFSET_AV_RATIO = 0.1' - si no es cero, este elemento permite el uso de -pines Hal de entrada para compensaciones de eje externas: + pines Hal de entrada para compensaciones de eje externas: 'axis..eoffset-enable' 'axis..eoffset-count' @@ -1034,9 +1030,9 @@ pines Hal de entrada para compensaciones de eje externas: Consulte el capítulo: <> para información de su uso. -[[sec:joint-section]](((Archivo INI, Sección CONJUNTA))) +[[sec:joint-section]] +=== Sección [JOINT_](((Archivo INI, Sección CONJUNTA))) -=== Sección [JOINT_] especifica el número de articulación 0 ... (num_joints-1) El valor de 'num_joints' lo establece [KINS]JOINTS = @@ -1068,52 +1064,52 @@ con coordenadas = XZ, las relaciones de ejes comunes son: Para obtener más información sobre los módulos cinemáticos, consulte la página de manual: '$ man kins' * 'TYPE = LINEAR' - -El tipo de articulación, ya sea LINEAR o ANGULAR. + El tipo de articulación, ya sea LINEAR o ANGULAR. * 'UNITS = INCH' - -(((UNITS))) Si se especifica, esta configuración, se anula la configuración relacionada [TRAJ]UNITS. -(por ejemplo, [TRAJ] LINEAR_UNITS si el TYPE de esta articulación es LINEAR, -[TRAJ]ANGULAR_UNITS si el TYPE de esta articulación es ANGULAR) + (((UNITS))) Si se especifica, esta configuración, se anula la configuración relacionada [TRAJ]UNITS. + (por ejemplo, [TRAJ] LINEAR_UNITS si el TYPE de esta articulación es LINEAR, + [TRAJ]ANGULAR_UNITS si el TYPE de esta articulación es ANGULAR) * 'MAX_VELOCITY = 1.2' - -Velocidad máxima para esta articulación en <> por segundo. + Velocidad máxima para esta articulación en <> por segundo. * 'MAX_ACCELERATION = 20.0' - -Aceleración máxima para esta articulación en unidades máquina por segundo cuadrado + Aceleración máxima para esta articulación en unidades máquina por segundo cuadrado * 'BACKLASH = 0.0000' - -(((Backlash))) Backlash en unidades de máquina. El valor de Backlash -se puede utilizar para compensar pequeñas deficiencias en el hardware utilizado para -conducir una articulacion. Si se agrega Backlash a una articulación y está utilizando -paso a paso, STEPGEN_MAXACCEL debe aumentarse de 1,5 a 2 veces del valor de -MAX_ACCELERATION para la articulación. La compensación de Backlash excesiva puede causar -sacudidas en el eje a medida que cambia de dirección. Si se especifica un COMP_FILE para un -eje, BACKLASH no se utiliza. + (((Backlash))) Backlash en unidades de máquina. El valor de Backlash + se puede utilizar para compensar pequeñas deficiencias en el hardware utilizado para + conducir una articulacion. Si se agrega Backlash a una articulación y está utilizando + paso a paso, STEPGEN_MAXACCEL debe aumentarse de 1,5 a 2 veces del valor de + MAX_ACCELERATION para la articulación. La compensación de Backlash excesiva puede causar + sacudidas en el eje a medida que cambia de dirección. Si se especifica un COMP_FILE para un + eje, BACKLASH no se utiliza. // agregar un << a unidades de máquina * 'COMP_FILE = file.extension' - - (((Compensation))) El archivo de compensación consiste en un mapa de información de posición - para la articulación. Los valores del archivo de compensación están en unidades máquina. - Cada conjunto de valores está en una línea separada por un espacio. El primer valor - es el valor nominal (la posición ordenada). El segundo y tercer valor - dependerá de la configuración de COMP_FILE_TYPE. Los puntos entre valores nominales - están interpolados entre los dos nominales. Los archivos de compensación deben comenzar - con el mínimo nominal y estar en orden ascendente hasta el mayor valor de los - nominales. Los nombres de archivo distinguen entre mayúsculas y minúsculas y pueden contener letras y/o - números. Actualmente, el límite dentro de LinuxCNC es de 256 tripletas por eje. + (((Compensation))) El archivo de compensación consiste en un mapa de información de posición + para la articulación. Los valores del archivo de compensación están en unidades máquina. + Cada conjunto de valores está en una línea separada por un espacio. El primer valor + es el valor nominal (la posición ordenada). El segundo y tercer valor + dependerá de la configuración de COMP_FILE_TYPE. Los puntos entre valores nominales + están interpolados entre los dos nominales. Los archivos de compensación deben comenzar + con el mínimo nominal y estar en orden ascendente hasta el mayor valor de los + nominales. Los nombres de archivo distinguen entre mayúsculas y minúsculas y pueden contener letras y/o + números. Actualmente, el límite dentro de LinuxCNC es de 256 tripletas por eje. + + - Si se especifica COMP_FILE para un eje, BACKLASH no se utiliza. - Se debe especificar UN 'COMP_FILE_TYPE' para cada 'COMP_FILE'. + Si se especifica COMP_FILE para un eje, BACKLASH no se utiliza. + Se debe especificar UN 'COMP_FILE_TYPE' para cada 'COMP_FILE'. * 'COMP_FILE_TYPE = 0 o 1' - especifica el tipo de archivo de compensación. - El primer valor es la posición nominal (ordenada) para ambos tipos. + El primer valor es la posición nominal (ordenada) para ambos tipos. ** 'Tipo 0:' El segundo valor especifica la posición real a medida que se mueve el eje - en la dirección positiva (valor creciente) y el tercer valor especifica - la posición real a medida que el eje se mueve en la dirección negativa - (valor decreciente). + en la dirección positiva (valor creciente) y el tercer valor especifica + la posición real a medida que el eje se mueve en la dirección negativa + (valor decreciente). + + Ejemplo Tipo 0 @@ -1125,8 +1121,8 @@ Ejemplo Tipo 0 ----- ** 'Tipo 1:' El segundo valor especifica el desplazamiento positivo del nominal mientras - se va en la dirección positiva. El tercer valor especifica el negativo - compensado del nominal mientras se va en una dirección negativa. + se va en la dirección positiva. El tercer valor especifica el negativo + compensado del nominal mientras se va en una dirección negativa. + + Ejemplo de tipo 1 @@ -1138,119 +1134,117 @@ Ejemplo de tipo 1 ---- * 'MIN_LIMIT = -1000' - (((MIN LIMIT))) El límite mínimo para el movimiento del eje, en -unidades máquina. Cuando se alcanza este límite, el controlador aborta el movimiento del eje. -El eje debe tener home antes de que MIN_LIMIT esté en vigor. Para un -eje rotativo con rotación ilimitada que no tiene MIN_LIMIT para ese eje en -[JOINT_n], entonces se usa el valor -1e99. + unidades máquina. Cuando se alcanza este límite, el controlador aborta el movimiento del eje. + El eje debe tener home antes de que MIN_LIMIT esté en vigor. Para un + eje rotativo con rotación ilimitada que no tiene MIN_LIMIT para ese eje en + [JOINT_n], entonces se usa el valor -1e99. * 'MAX_LIMIT = 1000' - (((MAX LIMIT))) El límite máximo para el movimiento del eje, en -unidades máquina. Cuando se alcanza este límite, el controlador aborta el movimiento del eje. -El eje debe tener home antes de que MAX_LIMIT esté en vigor. Para un eje rotativo -con rotación ilimitada que no tiene MAX_LIMIT para ese eje en -[JOINT_n], se usa el valor 1e99. + unidades máquina. Cuando se alcanza este límite, el controlador aborta el movimiento del eje. + El eje debe tener home antes de que MAX_LIMIT esté en vigor. Para un eje rotativo + con rotación ilimitada que no tiene MAX_LIMIT para ese eje en + [JOINT_n], se usa el valor 1e99. * 'MIN_FERROR = 0.010' - (((MIN FERROR))) Este es el valor en unidades máquina -que el eje puede desviarse de la posición ordenada a muy bajas -velocidades. Si MIN_FERROR es más pequeño que FERROR, los dos producen una rampa de -puntos de disparo de error. Podría pensar en esto como un gráfico donde una dimensión es -velocidad y el otro el error de seguimiento permitido. A medida que la velocidad aumenta, -la cantidad de error de seguimiento también aumenta hacia el valor FERROR. + que el eje puede desviarse de la posición ordenada a muy bajas + velocidades. Si MIN_FERROR es más pequeño que FERROR, los dos producen una rampa de + puntos de disparo de error. Podría pensar en esto como un gráfico donde una dimensión es + velocidad y el otro el error de seguimiento permitido. A medida que la velocidad aumenta, + la cantidad de error de seguimiento también aumenta hacia el valor FERROR. * 'FERROR = 1.0' - (((FERROR))) FERROR es el error de seguimiento máximo permitido, -en unidades máquina. Si la diferencia entre la posición ordenada y la detectada -excede esta cantidad, el controlador deshabilita los cálculos servo, establece todas -las salidas a 0.0, y desactiva los amplificadores. Si MIN_FERROR está presente en -el archivo .ini, se utilizan los siguientes errores proporcionales a la velocidad. Aquí el -error de seguimiento máximo permitido es proporcional a la velocidad, con FERROR -aplicando a la tasa rápida establecida por [TRAJ]MAX_VELOCITY, y proporcionalmente -errores de seguimiento más pequeños para velocidades más lentas. El error de seguimiento máximo permitido -siempre será mayor que MIN_FERROR. Esto evita pequeños errores de seguimiento -para ejes estacionarios al abortar inadvertidamente el movimiento. Pequeños -errores de seguimiento siempre estarán presentes debido a la vibración, etc. + en unidades máquina. Si la diferencia entre la posición ordenada y la detectada + excede esta cantidad, el controlador deshabilita los cálculos servo, establece todas + las salidas a 0.0, y desactiva los amplificadores. Si MIN_FERROR está presente en + el archivo .ini, se utilizan los siguientes errores proporcionales a la velocidad. Aquí el + error de seguimiento máximo permitido es proporcional a la velocidad, con FERROR + aplicando a la tasa rápida establecida por [TRAJ]MAX_VELOCITY, y proporcionalmente + errores de seguimiento más pequeños para velocidades más lentas. El error de seguimiento máximo permitido + siempre será mayor que MIN_FERROR. Esto evita pequeños errores de seguimiento + para ejes estacionarios al abortar inadvertidamente el movimiento. Pequeños + errores de seguimiento siempre estarán presentes debido a la vibración, etc. * 'LOCKING_INDEXER = 1' - -Indica que la articulación se utiliza como indexador con bloqueo. + Indica que la articulación se utiliza como indexador con bloqueo. .Homing - Estos parámetros están relacionados con Homing; para una mejor explicación lea el Capítulo <>. * 'HOME = 0.0' - -La posición a la que irá la articulación al finalizar la secuencia homing. + La posición a la que irá la articulación al finalizar la secuencia homing. * 'HOME_OFFSET = 0.0' - -La posición articular del interruptor home o pulso índice, en -<>. Cuando se encuentra el punto home durante -el proceso homing, esta es la posición asignada a ese punto. -Al compartir interruptores home y de límite y usar una secuencia home que -deje el interruptor home/límite en el estado activado, el offset home puede ser -utilizado para definir la posición del interruptor home para que sea diferente de 0 si -se desea que la posición home sea 0. + La posición articular del interruptor home o pulso índice, en + <>. Cuando se encuentra el punto home durante + el proceso homing, esta es la posición asignada a ese punto. + Al compartir interruptores home y de límite y usar una secuencia home que + deje el interruptor home/límite en el estado activado, el offset home puede ser + utilizado para definir la posición del interruptor home para que sea diferente de 0 si + se desea que la posición home sea 0. * 'HOME_SEARCH_VEL = 0.0' - -(((HOME SEARCH VEL))) Velocidad de homing inicial en unidades de máquina por segundo. -El signo indica la dirección de recorrido. Un valor de cero significa asumir que la -ubicación actual es la posición de inicio de la máquina. Si su máquina no tiene -interruptores de inicio querrá dejar este valor en cero. + (((HOME SEARCH VEL))) Velocidad de homing inicial en unidades de máquina por segundo. + El signo indica la dirección de recorrido. Un valor de cero significa asumir que la + ubicación actual es la posición de inicio de la máquina. Si su máquina no tiene + interruptores de inicio querrá dejar este valor en cero. * 'HOME_LATCH_VEL = 0.0' - -Velocidad de homing en unidades máquina por segundo a la posicion de enclavamiento -del interruptor home. El signo indica la dirección del recorrido. + Velocidad de homing en unidades máquina por segundo a la posicion de enclavamiento + del interruptor home. El signo indica la dirección del recorrido. * 'HOME_FINAL_VEL = 0.0' - -Velocidad en unidades de máquina por segundo desde la posición de enclavamiento a la -posición home. Si se deja en 0 o no se incluye en la articulación, se usa la velocidad rápida. -Debe ser un número positivo. + Velocidad en unidades de máquina por segundo desde la posición de enclavamiento a la + posición home. Si se deja en 0 o no se incluye en la articulación, se usa la velocidad rápida. + Debe ser un número positivo. * 'HOME_USE_INDEX = NO' - -Si el codificador utilizado para esta articulación tiene un pulso índice, y -la electronica tiene provisión para esta señal, puede configurarla en YES. Cuando es -YES, se afectará el tipo de patrón de inicio utilizado. Actualmente no puede -indexar con steppers a menos que esté usando stepgen en modo de velocidad y PID. + Si el codificador utilizado para esta articulación tiene un pulso índice, y + la electronica tiene provisión para esta señal, puede configurarla en YES. Cuando es + YES, se afectará el tipo de patrón de inicio utilizado. Actualmente no puede + indexar con steppers a menos que esté usando stepgen en modo de velocidad y PID. * 'HOME_INDEX_NO_ENCODER_RESET = NO' - -Use YES si el codificador utilizado para esta articulación no restablece su contador -cuando se detecta un pulso índice después de la activacion del pin hal index_enable. -Aplicable solo para HOME_USE_INDEX = YES. + Use YES si el codificador utilizado para esta articulación no restablece su contador + cuando se detecta un pulso índice después de la activacion del pin hal index_enable. + Aplicable solo para HOME_USE_INDEX = YES. * 'HOME_IGNORE_LIMITS = NO' - -Cuando usa el interruptor de límite tambien como interruptor home, -esto debe establecerse en YES. Cuando se establece en YES, el interruptor de límite para esta -articulación se ignora durante homing. Debe configurar su homing -para que al final del movimiento a home el interruptor home/límite no esté en el -estado activado; recibiria un error de interruptor de límite después del homing. + Cuando usa el interruptor de límite tambien como interruptor home, + esto debe establecerse en YES. Cuando se establece en YES, el interruptor de límite para esta + articulación se ignora durante homing. Debe configurar su homing + para que al final del movimiento a home el interruptor home/límite no esté en el + estado activado; recibiria un error de interruptor de límite después del homing. * 'HOME_IS_SHARED = ' - -Si la entrada home es compartida por más de una articulacion, haga igual a 1 para -evitar que se inicie homing si uno de los conmutadores compartidos está -ya está cerrado. Establezca en 0 para permitir el homing si un interruptor está cerrado. + Si la entrada home es compartida por más de una articulacion, haga igual a 1 para + evitar que se inicie homing si uno de los conmutadores compartidos está + ya está cerrado. Establezca en 0 para permitir el homing si un interruptor está cerrado. * 'HOME_ABSOLUTE_ENCODER = 0 | 1 | 2 '- -Usado para indicar que la articulación usa un codificador absoluto. A una petición -de homing, el valor de la articulacion actual se establece en el valor 'HOME_OFFSET'. -Si la configuración 'HOME_ABSOLUTE_ENCODER' es 1, la máquina hace el habitual -movimiento final al valor 'HOME'. -Si la configuración 'HOME_ABSOLUTE_ENCODER' es 2, no se realiza ningún movimiento final. + Usado para indicar que la articulación usa un codificador absoluto. A una petición + de homing, el valor de la articulacion actual se establece en el valor 'HOME_OFFSET'. + Si la configuración 'HOME_ABSOLUTE_ENCODER' es 1, la máquina hace el habitual + movimiento final al valor 'HOME'. + Si la configuración 'HOME_ABSOLUTE_ENCODER' es 2, no se realiza ningún movimiento final. * 'HOME_SEQUENCE = ' - -Se utiliza para definir la secuencia "Home Todo". debe comenzar en 0 o -1 o -1. Se pueden especificar secuencias adicionales con números crecientes -de 1 en 1 (en valor absoluto). No se permite omitir los números de secuencia. -Si se omite una HOME_SEQUENCE, la articulación no será homeada por la -función "Home Todo". Se puede homear más de una articulación al mismo tiempo -especificando el mismo número de secuencia para más de una articulación. -Se utiliza un número de secuencia negativa para diferir el movimiento final para -todas las articulaciones que tienen ese número de secuencia (negativo o positivo). -Para obtener información adicional, consulte: <> + Se utiliza para definir la secuencia "Home Todo". debe comenzar en 0 o + 1 o -1. Se pueden especificar secuencias adicionales con números crecientes + de 1 en 1 (en valor absoluto). No se permite omitir los números de secuencia. + Si se omite una HOME_SEQUENCE, la articulación no será homeada por la + función "Home Todo". Se puede homear más de una articulación al mismo tiempo + especificando el mismo número de secuencia para más de una articulación. + Se utiliza un número de secuencia negativa para diferir el movimiento final para + todas las articulaciones que tienen ese número de secuencia (negativo o positivo). + Para obtener información adicional, consulte: <> * 'VOLATILE_HOME = 0' - -Cuando se habilita (se establece en 1), esta articulación no se homeara si -la alimentación de la máquina está apagada o si E-Stop está encendido. Esto es útil si su máquina tiene -interruptores Home y no tiene retroalimentación de posición, como en máquina paso y dirección. + Cuando se habilita (se establece en 1), esta articulación no se homeara si + la alimentación de la máquina está apagada o si E-Stop está encendido. Esto es útil si su máquina tiene + interruptores Home y no tiene retroalimentación de posición, como en máquina paso y dirección. .Servo - Estos parámetros son relevantes para las articulaciones controladas por servos. [WARNING] @@ -1291,61 +1285,48 @@ latexmath: [\ frac {X \, pulgadas} {1 \, encoder \, count} = imagen::images/encoder-count-math.png[align="center"] * 'BIAS = 0.000' - Esto es utilizado por hm2-servo y algunos otros. -BIAS es una cantidad constante que se agrega a la salida. En la mayoría de los casos, debe dejarse en cero. -Sin embargo, a veces puede ser útil para compensar servoamplificadores, o para equilibrar el peso -de un objeto que se mueve verticalmente. BIAS se desactiva cuando el bucle PID está desactivado, al igual que -todos los demás componentes de la salida. - + BIAS es una cantidad constante que se agrega a la salida. En la mayoría de los casos, debe dejarse en cero. + Sin embargo, a veces puede ser útil para compensar servoamplificadores, o para equilibrar el peso + de un objeto que se mueve verticalmente. BIAS se desactiva cuando el bucle PID está desactivado, al igual que + todos los demás componentes de la salida. * 'P = 50' - La ganancia proporcional para el servo. Este valor multiplica el -error entre la posición ordenada y la real en unidades máquina, lo que resulta -en una contribución a la tensión calculada para el amplificador del motor. -Las unidades en la ganancia P son voltios por unidad máquina, por ejemplo, -image:images/p-term.png[height=25] - + error entre la posición ordenada y la real en unidades máquina, lo que resulta + en una contribución a la tensión calculada para el amplificador del motor. + Las unidades en la ganancia P son voltios por unidad máquina, por ejemplo, + image:images/p-term.png[height=25] // latexmath: [$ \ frac {volt} {mu} $]. - * 'I = 0' - La ganancia integral para el servo. El valor -multiplica el error acumulativo entre la posición ordenada y la real en unidades máquina, -lo que resulta en una contribución a la tensión calculada para el -amplificador de motor. Las unidades en la ganancia I son voltios por unidad máquina por -segundo, por ejemplo, image:images/i-term.png[height=25] - + multiplica el error acumulativo entre la posición ordenada y la real en unidades máquina, + lo que resulta en una contribución a la tensión calculada para el + amplificador de motor. Las unidades en la ganancia I son voltios por unidad máquina por + segundo, por ejemplo, image:images/i-term.png[height=25] // latexmath: [$ \ frac {volt} {mu \, s} $]. - * 'D = 0' - La ganancia derivada para el servo. El valor -multiplica la diferencia entre los errores actuales y anteriores, lo que resulta en una -contribución a la tensión calculada para el amplificador del motor. las unidades -en la ganancia D son voltios por unidad de máquina por segundo, por ejemplo, -image:images/i-term.png[height=25] - + multiplica la diferencia entre los errores actuales y anteriores, lo que resulta en una + contribución a la tensión calculada para el amplificador del motor. las unidades + en la ganancia D son voltios por unidad de máquina por segundo, por ejemplo, + image:images/i-term.png[height=25] // latexmath: [$ \ frac {volt} {mu / s} $]. - * 'FF0 = 0' - ganancia de avance de orden 0. Este numero es -multiplicado por el posición ordenada, lo que resulta en una contribución a la tensión calculada -para el amplificador del motor. Las unidades en la ganancia FF0 son voltios por -unidad máquina, por ejemplo, image:images/p-term.png[height=25] - + multiplicado por el posición ordenada, lo que resulta en una contribución a la tensión calculada + para el amplificador del motor. Las unidades en la ganancia FF0 son voltios por + unidad máquina, por ejemplo, image:images/p-term.png[height=25] // latexmath: [$ \ frac {volt} {mu} $]. - * 'FF1 = 0' - ganancia de avance de 1er orden. Este numero es -multiplicado por el cambio en la posición ordenada por segundo, lo que resulta en una contribución -al voltaje calculado para el amplificador del motor. Las unidades en FF1 -son voltios por unidad máquina por segundo, por ejemplo, image:images/i-term.png[height=25] - + multiplicado por el cambio en la posición ordenada por segundo, lo que resulta en una contribución + al voltaje calculado para el amplificador del motor. Las unidades en FF1 + son voltios por unidad máquina por segundo, por ejemplo, image:images/i-term.png[height=25] // latexmath: [$ \ frac {volt} {mu \, s} $]. - * 'FF2 = 0' - ganancia de avance de segundo orden. Este numero es -multiplicado por el cambio en la posición ordenada por segundo por segundo, lo que resulta en un -contribución a la tensión calculada para el amplificador del motor. Las unidades -en la ganancia FF2 son voltios por unidad máquina por segundo por segundo, -por ejemplo, image:images/ff2.png[height=25] - + multiplicado por el cambio en la posición ordenada por segundo por segundo, lo que resulta en un + contribución a la tensión calculada para el amplificador del motor. Las unidades + en la ganancia FF2 son voltios por unidad máquina por segundo por segundo, + por ejemplo, image:images/ff2.png[height=25] // latexmath: [$ \ frac {volt} {mu \, s ^ ​​{2}} $]. - * 'OUTPUT_SCALE = 1.000' - - * 'OUTPUT_OFFSET = 0.000' - estos dos valores son los factores de escala y offset para -la salida a los amplificadores del motor. + la salida a los amplificadores del motor. + El segundo valor (offset) se resta de la salida calculada (en voltios), y se divide por el primer valor (escala), antes de ser escrito en los convertidores D/A. Las unidades de @@ -1353,8 +1334,7 @@ los valores de escala están en voltios verdaderos por voltios de salida DAC. La valor de offset está en voltios. Estos se pueden usar para linealizar un DAC. Específicamente, al escribir salidas, LinuxCNC primero convierte la salida deseada en unidades cuasi-SI a valores de actuador sin procesar, por ejemplo, voltios para un -amplificador DAC. Esta escala -se parece a: image:images/output-offset.png[] +amplificador DAC. Esta escala se parece a: image:images/output-offset.png[] // latexmath: [raw = \ frac {output-offset} {scale}] @@ -1381,16 +1361,15 @@ no linealidad del DAC, unidades DAC, etc. Para hacer esto, siga este procedimiento. . Cree una tabla de calibración para la salida, alimentando el DAC con el -voltaje deseado y midiendo el resultado. - + voltaje deseado y midiendo el resultado. . Haga un ajuste lineal de mínimos cuadrados para obtener los coeficientes a, b tales -como image:images/calibration-1.png[] + como image:images/calibration-1.png[] . Tenga en cuenta que queremos una salida en bruto de modo que nuestro resultado medido sea -idéntico a la salida ordenada. Esto significa + idéntico a la salida ordenada. Esto significa .. image:images/calibration-2.png[] .. image:images/calibration-3.png[] . Como resultado, los coeficientes a y b del ajuste lineal pueden ser -utilizado como la escala y el offset para el controlador directamente. + utilizado como la escala y el offset para el controlador directamente. La siguiente tabla es un ejemplo de mediciones de voltaje. @@ -1412,15 +1391,16 @@ Mediciones de voltaje de salida |=============== * 'MAX_OUTPUT = 10' - El valor máximo para la salida de la compensación PID -que se escribe en el amplificador del motor, en voltios. El valor calculado -de salida está sujeto a este límite. El límite se aplica antes de -escalado a unidades de salida en bruto. El valor se aplica simétricamente -tanto al lado positivo como al negativo. + que se escribe en el amplificador del motor, en voltios. El valor calculado + de salida está sujeto a este límite. El límite se aplica antes de + escalado a unidades de salida en bruto. El valor se aplica simétricamente + tanto al lado positivo como al negativo. * 'INPUT_SCALE = 20000' - en configuraciones de muestra * 'ENCODER_SCALE = 20000' - en configuraciones construidas con PNCconf -Especifica el número de pulsos que -corresponde a un movimiento de una unidad máquina como se establece en la sección [TRAJ]. + Especifica el número de pulsos que + corresponde a un movimiento de una unidad máquina como se establece en la sección [TRAJ]. + Para una articulación lineal, una unidad máquina será igual a la configuración de LINEAR_UNITS. Para una articulación angular, una unidad es igual a la configuración en ANGULAR_UNITS. @@ -1428,7 +1408,6 @@ Un segundo número, si se especifica, se ignora. Por ejemplo, en un codificador de 2000 cuentas por revolucion, y una transmision de 10 revoluciones por pulgada y unidades de pulgada, tenemos: - image::images/encoder-scale.png[align="center"] // latexmath: [INPUT \ _SCALE = @@ -1436,7 +1415,6 @@ image::images/encoder-scale.png[align="center"] // \ frac {20000 \, recuentos} {pulgadas}] .Stepper - Estos parámetros son relevantes para las articulaciones controladas por steppers. [WARNING] @@ -1450,14 +1428,14 @@ Los siguientes elementos pueden ser utilizados por un componente stepgen. * 'SCALE = 4000' - en configuraciones de muestra * 'STEP_SCALE = 4000' - en configuraciones construidas con PNCconf -Especifica el número de pulsos que corresponde a un -movimiento de una unidad máquina como se establece en la sección [TRAJ]. -Para sistemas paso a paso, esto es -el número de pulsos de paso emitidos por unidad máquina. Para una articulación lineal -una unidad de máquina será igual a la configuración de LINEAR_UNITS. Para una -articulacion angular es igual a la configuración en ANGULAR_UNITS. Para -servo sistemas, este es el número de pulsos de retroalimentación por unidad máquina. -Un segundo número, si se especifica, se ignora. + Especifica el número de pulsos que corresponde a un + movimiento de una unidad máquina como se establece en la sección [TRAJ]. + Para sistemas paso a paso, esto es + el número de pulsos de paso emitidos por unidad máquina. Para una articulación lineal + una unidad de máquina será igual a la configuración de LINEAR_UNITS. Para una + articulacion angular es igual a la configuración en ANGULAR_UNITS. Para + servo sistemas, este es el número de pulsos de retroalimentación por unidad máquina. + Un segundo número, si se especifica, se ignora. Por ejemplo, en un motor paso a paso de 1.8 grados con semipasos, y transmision de 10 revoluciones por pulgada, y deseado <> en pulgada, @@ -1500,47 +1478,39 @@ que MAX_VELOCITY de la articulación. Pruebas posteriores han demostrado que el STEPGEN_MAXVEL no mejora el ajuste del bucle de posición de stepgen. -[[sec:emcio-section]](((Archivo INI, Sección EMCIO))) - -=== Sección [EMCIO] +[[sec:emcio-section]] +=== Sección [EMCIO](((Archivo INI, Sección EMCIO))) * 'EMCIO = io' - Nombre del programa controlador IO - * 'CYCLE_TIME = 0.100' - -El período, en segundos, en el que se ejecutará EMCIO. Haciendolo -0.0 o un número negativo le dirá a EMCIO que no duerma en absoluto. Generalmente -no es necesario cambiar este número. - + El período, en segundos, en el que se ejecutará EMCIO. Haciendolo + 0.0 o un número negativo le dirá a EMCIO que no duerma en absoluto. Generalmente + no es necesario cambiar este número. * 'TOOL_TABLE = tool.tbl' - -El archivo que contiene información sobre herramientas, descrito en -el manual de usuario. - + El archivo que contiene información sobre herramientas, descrito en + el manual de usuario. * 'TOOL_CHANGE_POSITION = 0 0 2' - -Especifica la ubicación XYZ a la que moverse al realizar un -cambio de herramienta si se utilizan tres dígitos. -Especifica la ubicación XYZABC cuando se usan 6 dígitos. -Especifica la ubicación XYZABCUVW cuando se utilizan 9 dígitos. -Los cambios de herramienta se pueden combinar. Por ejemplo, si combina la -pinola con la posición de cambio, puede mover primero la Z y luego la X e Y. - + Especifica la ubicación XYZ a la que moverse al realizar un + cambio de herramienta si se utilizan tres dígitos. + Especifica la ubicación XYZABC cuando se usan 6 dígitos. + Especifica la ubicación XYZABCUVW cuando se utilizan 9 dígitos. + Los cambios de herramienta se pueden combinar. Por ejemplo, si combina la + pinola con la posición de cambio, puede mover primero la Z y luego la X e Y. * 'TOOL_CHANGE_WITH_SPINDLE_ON = 1' - -El husillo se dejará encendido durante el cambio de herramienta cuando el valor sea 1. -Útil para tornos o máquinas donde el material está en el husillo, no la herramienta. - + El husillo se dejará encendido durante el cambio de herramienta cuando el valor sea 1. + Útil para tornos o máquinas donde el material está en el husillo, no la herramienta. * 'TOOL_CHANGE_QUILL_UP = 1' - -El eje Z se moverá a cero máquina antes del cambio de herramienta cuando -el valor es 1. Esto es lo mismo que emitir un G0 G53 Z0. - + El eje Z se moverá a cero máquina antes del cambio de herramienta cuando + el valor es 1. Esto es lo mismo que emitir un G0 G53 Z0. * 'TOOL_CHANGE_AT_G30 = 1' - -La máquina se mueve al punto de referencia definido por los parámetros -5181-5186 para G30 si el valor es 1. Para obtener más información, consulte el -<>. - + La máquina se mueve al punto de referencia definido por los parámetros + 5181-5186 para G30 si el valor es 1. Para obtener más información, consulte el + <> y + <>. * 'RANDOM_TOOLCHANGER = 1' - -Esto es para máquinas que no pueden volver a colocar la herramienta en la ranura -de la que vino. Por ejemplo, máquinas que intercambian la herramienta en la -ranura activa con la herramienta en el husillo. + Esto es para máquinas que no pueden volver a colocar la herramienta en la ranura + de la que vino. Por ejemplo, máquinas que intercambian la herramienta en la + ranura activa con la herramienta en el husillo. diff --git a/docs/src/config/ini-homing.adoc b/docs/src/config/ini-homing.adoc index 7d176932a23..67e95d74262 100644 --- a/docs/src/config/ini-homing.adoc +++ b/docs/src/config/ini-homing.adoc @@ -6,14 +6,14 @@ == Overview -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 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. + +and set LinuxCNC's internal variables accordingly. However, different machines have different requirements, and homing is actually quite complicated. @@ -22,40 +22,39 @@ While it is possible to use linuxcnc without homing switches/home procedures or It defeats the extra security of the soft limits. == Prerequisite -Homing relies on some fundamental machine assumptions. + - -* The negative and positive directions are based on <> which can be different + -then the actual machine movement. ie on a mill typically the table moves rather then the tool. -* Everything is referenced from the G53 machine zero origin, the origin can be anywhere (even outside where you can move) + -* The G53 machine zero origin is typically inside the soft limits area but not necessarily. + -* The homing switch offset sets where the origin is, but even it is referenced from the origin. + -* When using encoder index homing, the home switch offset is calculated from the encoder reference position, after the home switch has been tripped. + -* 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) + -* 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) + -* Soft(ware) limits are inside the limit switch area. + -* (Final) Homed Position is inside the soft limit area + -* (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. -* 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. +Homing relies on some fundamental machine assumptions. + +* The negative and positive directions are based on <> which can be different + then the actual machine movement. ie on a mill typically the table moves rather then the tool. +* Everything is referenced from the G53 machine zero origin, the origin can be anywhere (even outside where you can move) +* The G53 machine zero origin is typically inside the soft limits area but not necessarily. +* The homing switch offset sets where the origin is, but even it is referenced from the origin. +* When using encoder index homing, the home switch offset is calculated from the encoder reference position, after the home switch has been tripped. +* 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) +* 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) +* Soft(ware) limits are inside the limit switch area. +* (Final) Homed Position is inside the soft limit area +* (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. +* 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. [NOTE] -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 + +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. == Separate Home Switch Example Layout -This example shows minimum and maximum limit switches with a separate home switch. + +This example shows minimum and maximum limit switches with a separate home switch. .Demonstrative Separate Switch Layout - -image::images/HomeAxisTravel_V2.png[align="center", alt="Example Homing Switch layout"] - +image::images/HomeAxisTravel_V2.png["Example Homing Switch layout",align="center"] * A is the negative soft limit * B is the G53 machine coordinate Origin @@ -71,17 +70,17 @@ image::images/HomeAxisTravel_V2.png[align="center", alt="Example Homing Switch l * Note that there is distance between the limit switches and actual physical hard contact for coasting after the amplifier is disabled. [NOTE] -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, + +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. == Shared Limit/Home Switch Example Layout -This example shows a maximum limit switch and a combined minimum limit/home switch. + +This example shows a maximum limit switch and a combined minimum limit/home switch. .Demonstrative Shared Switch Layout -image::images/HomeAxisTravel_V3.png[align="center", alt="Example shared Home Limit Switch layout"] +image::images/HomeAxisTravel_V3.png["Example shared Home Limit Switch layout",align="center"] * A is the negative soft limit @@ -107,8 +106,7 @@ detailed description of what each configuration parameter does, see the following section. .Homing Sequences - -image::images/emc2-motion-homing-diag.png[align="center", alt="Homing Sequences"] +image::images/emc2-motion-homing-diag.png["Homing Sequences",align="center"] == Configuration @@ -209,11 +207,11 @@ Applicable only for HOME_USE_INDEX = YES. === HOME_OFFSET (((HOME OFFSET))) -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. + +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. + +to HOME_OFFSET, thus defining the origin, which the soft limits references from. The default value is zero. NOTE: The home switch location, as indicated by the HOME_OFFSET variable, @@ -263,12 +261,12 @@ HOME_ABSOLUTE_ENCODER = 2 Absolute encoder, NO final move to [JOINT_n]HOME [NOTE] A HOME_IS_SHARED setting is silently ignored. + [NOTE] A request to rehome the joint is silently ignored. -[[sec:homing-section]](((HOME SEQUENCE))) - -=== HOME_SEQUENCE (((HOME SEQUENCE))) +[[sec:homing-section]] +=== HOME_SEQUENCE(((HOME SEQUENCE))) 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 @@ -429,7 +427,6 @@ net hsequence_select => motion.homing-inhibit ---- [NOTE] - Inihal 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 halfile or a delayed diff --git a/docs/src/config/ini-homing_es.adoc b/docs/src/config/ini-homing_es.adoc index 6ae51f45c97..6a77474f2ff 100644 --- a/docs/src/config/ini-homing_es.adoc +++ b/docs/src/config/ini-homing_es.adoc @@ -3,18 +3,18 @@ [[cha:homing-configuration]] -= Configuracion de Homing += Configuracion de Homing == Descripción general -Homing establece el origen cero de las coordenadas máquina G53. + -Los límites soft se definen en relación con el origen de la máquina. + -Los límites soft automáticamente desaceleran y detienen los ejes antes de que toquen los interruptores de límites. + -Una máquina configurada y funcionando correctamente no se moverá más allá de los límites soft (software) y + -tendrá el origen de la máquina configurado tan repetible como lo permita el mecanismo switch/index de home. + -Linuxcnc se puede hacer home a ojo (marcas de alineación), con interruptores, con interruptores e índice de codificador, o utilizando codificadores absolutos. + +Homing establece el origen cero de las coordenadas máquina G53. +Los límites soft se definen en relación con el origen de la máquina. +Los límites soft automáticamente desaceleran y detienen los ejes antes de que toquen los interruptores de límites. +Una máquina configurada y funcionando correctamente no se moverá más allá de los límites soft (software) y +tendrá el origen de la máquina configurado tan repetible como lo permita el mecanismo switch/index de home. +Linuxcnc se puede hacer home a ojo (marcas de alineación), con interruptores, con interruptores e índice de codificador, o utilizando codificadores absolutos. El recorrido de homing parece bastante simple: simplemente mueve cada articulación a una ubicación conocida, -y establece las variables internas de LinuxCNC en consecuencia. + +y establece las variables internas de LinuxCNC en consecuencia. Sin embargo, diferentes máquinas tienen diferentes requisitos, y el recorrido de homing es realmente bastante complicado. @@ -23,30 +23,31 @@ Si bien es posible usar linuxcnc sin interruptores, procedimientos de homing o i la seguridad adicional de los límites soft no es suficiente. == Prerrequisitos -Homing se basa en algunos supuestos fundamentales de la máquina. + - -* Las direcciones negativa y positiva se basan en <> que puede ser diferentes + -del movimiento real de la máquina. Es decir, en una fresadora, la mesa se mueve en lugar de la herramienta. -* Todo está referenciado desde el origen G53, cero de la máquina. El origen puede estar en cualquier lugar (incluso fuera de donde puede moverse) + -* El origen cero de la máquina G53 está típicamente dentro del área de límites soft, pero no necesariamente. + -* El offset del interruptor home establece dónde está el origen, pero incluso esto se referencia desde el origen. + -* Los límites soft negativos son lo máximo que puede mover en la dirección negativa después de homing. + -(pero pueden no ser negativos en sentido absoluto) + -* Los límites soft positivos son lo máximo que puede mover en la dirección positiva después de homing. + -(pero podrían no ser positivos en sentido absoluto, aunque es habitual establecerlo como un número positivo) + -* Los límites software están dentro del área de interruptores de límite. + -* (Si se utiliza homing basado en conmutadores), los conmutadores de homing utilizan los interruptores de límite (interruptor de home/límite compartido), + +Homing se basa en algunos supuestos fundamentales de la máquina. + +* Las direcciones negativa y positiva se basan en <> que puede ser diferentes + del movimiento real de la máquina. Es decir, en una fresadora, la mesa se mueve en lugar de la herramienta. +* Todo está referenciado desde el origen G53, cero de la máquina. El origen puede estar en cualquier lugar (incluso fuera de donde puede moverse) +* El origen cero de la máquina G53 está típicamente dentro del área de límites soft, pero no necesariamente. +* El offset del interruptor home establece dónde está el origen, pero incluso esto se referencia desde el origen. +* Los límites soft negativos son lo máximo que puede mover en la dirección negativa después de homing. + (pero pueden no ser negativos en sentido absoluto) +* Los límites soft positivos son lo máximo que puede mover en la dirección positiva después de homing. + (pero podrían no ser positivos en sentido absoluto, aunque es habitual establecerlo como un número positivo) +* Los límites software están dentro del área de interruptores de límite. +* (Si se utiliza homing basado en conmutadores), los conmutadores de homing utilizan + los interruptores de límite (interruptor de home/límite compartido), o cuando se usa un interruptor home separado, están dentro del área de interruptores de límite. -* Si usa un interruptor home independiente, es posible comenzar a buscar en el lado equivocado del interruptor, + -lo que combinado con la opción HOME_IGNORE_LIMITS, provocará un bloqueo grave. + -Puede evitar esto haciendo que el interruptor home cambie su estado cuando el disparador está en un lado en particular hasta que vuelva a pasar el punto nuevamente. + -Dicho de otra manera, el estado del interruptor home debe representar la posición del disparador con respecto al interruptor (es decir, antes o después del interruptor), + +* Si usa un interruptor home independiente, es posible comenzar a buscar en el lado equivocado del interruptor, +lo que combinado con la opción HOME_IGNORE_LIMITS, provocará un bloqueo grave. +Puede evitar esto haciendo que el interruptor home cambie su estado cuando el disparador está en un lado en particular hasta que vuelva a pasar el punto nuevamente. +Dicho de otra manera, el estado del interruptor home debe representar la posición del disparador con respecto al interruptor (es decir, antes o después del interruptor), y debe permanecer así incluso si el disparador pasa por el interruptor en la misma dirección. == Ejemplo de Diseño de interruptor home separado -Este ejemplo muestra los interruptores de límite mínimo y máximo con un interruptor home separado. + +Este ejemplo muestra los interruptores de límite mínimo y máximo con un interruptor home separado. .Diseño de demostrativo interruptor separado @@ -67,13 +68,13 @@ image::images/HomeAxisTravel_V2.png[align="center", alt="Ejemplo de diseño de c * Tenga en cuenta que hay una distancia entre los interruptores de límite y el contacto físico real para la inercia después de que el amplificador esté desactivado. [NOTE] -Homing establece el sistema de coordenadas G53, mientras que el origen de la máquina (punto cero) puede estar en cualquier lugar. + -Establecer el punto cero en el límite soft negativo hace que todas las coordenadas G53 sean positivas, + +Homing establece el sistema de coordenadas G53, mientras que el origen de la máquina (punto cero) puede estar en cualquier lugar. +Establecer el punto cero en el límite soft negativo hace que todas las coordenadas G53 sean positivas, lo cual es probablemente más fácil de recordar. Haga esto configurando MIN_LIMIT = 0 y asegúrese de que MAX_LIMIT sea positivo. == Ejemplo de Diseño de Límite/Home compartido -Este ejemplo muestra un interruptor de límite máximo y un interruptor combinado de límite mínimo/home. + +Este ejemplo muestra un interruptor de límite máximo y un interruptor combinado de límite mínimo/home. .Diseño demostrativo de conmutador compartido @@ -205,9 +206,9 @@ Aplicable solo si HOME_USE_INDEX = YES. === HOME_OFFSET (((HOME OFFSET))) -Esto define la ubicación del punto cero de origen del sistema de coordenadas G53 de la máquina. + +Esto define la ubicación del punto cero de origen del sistema de coordenadas G53 de la máquina. Es la distancia (offset), en unidades articulares, desde el origen de la máquina hasta el punto de disparo -del interruptor home o pulso índice. + +del interruptor home o pulso índice. Después de detectar el punto de disparo del interruptor/pulso de índice, LinuxCNC establece la posición de la coordenada a HOME_OFFSET, definiendo así el origen, desde el cual el soft limita las referencias. El valor por defecto es cero. @@ -259,11 +260,11 @@ HOME_ABSOLUTE_ENCODER = 2 Codificador absoluto, NO movimiento final a [JOINT_n]H [NOTE] Una configuración HOME_IS_SHARED se ignora. + [NOTE] Una solicitud para volver a colocar la articulación se ignora. -[[sec:homing-section]](((SECUENCIA HOME))) - +[[sec:homing-section]] === HOME_SEQUENCE (((SECUENCIA HOME))) Se usa para definir una secuencia homing múltiple *HOME ALL* y aplicar un diff --git a/docs/src/config/ini-homing_fr.adoc b/docs/src/config/ini-homing_fr.adoc index 3a7f64ce794..610f789b10d 100644 --- a/docs/src/config/ini-homing_fr.adoc +++ b/docs/src/config/ini-homing_fr.adoc @@ -20,8 +20,7 @@ configuration associés, la figure suivante donne le détail de ces séquences. [[fig:Sequences-de-prise-d-origine]] .Les séquences de POM possibles - -image::images/linuxcnc-motion-homing-diag_fr.png[alt="Les séquences de POM possibles"] +image::images/linuxcnc-motion-homing-diag_fr.png["Les séquences de POM possibles"] . Comme on le voit sur la figure, les deux conditions de base sont les suivantes: @@ -37,7 +36,6 @@ prise d'origines définie dans la section [AXIS] du fichier ini. [[cap:Variables-sequences-de-POM]] .Combinaisons des variables de la POM - [width="80%", options="header", cols="4*^"] |========================================================== |Type de POM |SEARCH_VEL |LATCH_VEL |USE_INDEX diff --git a/docs/src/gcode/coordinates.adoc b/docs/src/gcode/coordinates.adoc index a5d70c75696..8f41291f982 100644 --- a/docs/src/gcode/coordinates.adoc +++ b/docs/src/gcode/coordinates.adoc @@ -17,6 +17,7 @@ These include: * Nine Coordinate System Offsets (G54-G59.3) * Global Offsets (G92) and Local Offsets (G52) +[[sec:machine-coordinate-system]] == Machine Coordinate System When LinuxCNC is started the positions of each axis is the machine origin. Once @@ -188,11 +189,8 @@ not explicitly zeroed will retain the previous offset. offset". The 'G92' set of commands includes: * 'G92' - This command, when used with axis names, sets values to offset variables. - * 'G92.1' - This command sets zero values to the G92 variables. - * 'G92.2' - This command suspends but does not zero out the G92 variables. - * 'G92.3' - This command applies offset values that have been suspended. As a global offset, 'G92' is used to shift all workpiece coordinate @@ -243,7 +241,6 @@ cleared at machine start and after a reset or program end, may disable '[RS274NGC]' section of the '.ini' file. [NOTE] - 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 diff --git a/docs/src/gcode/coordinates_es.adoc b/docs/src/gcode/coordinates_es.adoc index 5f11c7ca113..37509ae2eab 100644 --- a/docs/src/gcode/coordinates_es.adoc +++ b/docs/src/gcode/coordinates_es.adoc @@ -12,7 +12,7 @@ Este capítulo describe los offsets tal como los utiliza LinuxCNC. * Nueve offsets del Sistema de Coordenadas (G54-G59.3) * Offsets globales (G92) y locales (G52) -[[sec.machine-coordinate-system]] +[[sec:machine-coordinate-system]] == Sistema de Coordenadas de la Máquina Cuando se inicia LinuxCNC, las posiciones de cada eje definen el origen de la máquina. Cuando diff --git a/docs/src/gcode/coordinates_fr.adoc b/docs/src/gcode/coordinates_fr.adoc index 255c673150b..14e15e8ee74 100644 --- a/docs/src/gcode/coordinates_fr.adoc +++ b/docs/src/gcode/coordinates_fr.adoc @@ -238,14 +238,11 @@ les autres décalages. Ce jeu de commandes inclus: * G92 - Cette commande, utilisée avec des mots d'axes, fixe les valeurs des -variables de décalage. - + variables de décalage. * G92.1 - Cette commande met à zéro les valeurs des variables de G92. - * G92.2 - Cette commande suspend, sans les mettre à zéro, les variables de G92. - * G92.3 - Cette commande applique les valeurs de décalage qui ont -été suspendues. + été suspendues. L'utilisateur doit bien comprendre le fonctionnement des valeurs de G92. Pour faire en sorte que le point actuel ait les coordonnées X0, Y0 et Z0 @@ -271,10 +268,10 @@ un G92.2 à la fin de leur utilisation. Il y a au moins deux façons d'établir les valeurs de G92. -* Par un clic droit de la souris sur les afficheurs de position de + * Par un clic droit de la souris sur les afficheurs de position de tklinuxcnc, une fenêtre s'ouvre dans laquelle il est possible de saisir une valeur. -* Par la commande G92. + * Par la commande G92. Toutes les deux, fonctionnent depuis l'emplacement courant de l'axe auquel le déplacement doit être appliqué. @@ -294,6 +291,7 @@ fixera un décalage de -2.0000, de sorte que l'emplacement actuel de X devienne X=0.000. Un nouveau 'G92 X5.000' fixera un décalage de 3.000 et l'affichage indiquera une position courante X=5.000. +[[sec:g92-persistence-cautions]] === Précautions avec G92 Parfois, les valeurs de décalage d'un G92 restent bloquées dans le diff --git a/docs/src/gcode/g-code.adoc b/docs/src/gcode/g-code.adoc index 60463739fc6..573ddb974e7 100644 --- a/docs/src/gcode/g-code.adoc +++ b/docs/src/gcode/g-code.adoc @@ -888,7 +888,7 @@ G28 uses the values stored in <> 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 <>. +the <>. * 'G28' - makes a <> from the current position to the 'absolute' position of the values in parameters 5161-5166. @@ -922,7 +922,7 @@ 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 -<>. +<>. [NOTE] G30 parameters will be used to move the tool when a M6 is programmed @@ -1364,7 +1364,7 @@ within the workpiece coordinate system. More information on G52 is in the G53 axes ---- -To move in the <>, +To move in the <>, 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. @@ -2368,7 +2368,7 @@ 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. -When 'G92' is executed, the <> +When 'G92' is executed, the <> 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 @@ -2410,7 +2410,7 @@ The 'G52' command can also be used to change this offset; see the See the <> Section for an overview of coordinate systems. -See the <> Section for more information. +See the <> Section for more information. [[gcode:g92.1-g92.2]] == G92.1, G92.2 Reset G92 Offsets diff --git a/docs/src/gcode/g-code_es.adoc b/docs/src/gcode/g-code_es.adoc index 78601c1f3a9..3c2cdb5115c 100644 --- a/docs/src/gcode/g-code_es.adoc +++ b/docs/src/gcode/g-code_es.adoc @@ -874,7 +874,7 @@ G28 usa los valores almacenados en los <> Los valores de los parametros son coordenadas máquina 'absolutas' en las 'unidades' de máquina nativas especificadas en el archivo ini. Todos los ejes definidos en el archivo ini se moverán cuando se emite un G28. Si no se almacenan posiciones con G28.1, todos los ejes irán al -<>. +<>. * 'G28' - hace un <> desde ls actual   posición a la posición 'absoluta' de los valores en los parámetros 5161-5166. @@ -909,7 +909,7 @@ a donde moverse. Los valores de los parámetros son coordenadas máquina 'absolu en las 'unidades' de máquina nativas especificadas en el archivo ini. Todos los ejes definidos en el archivo ini se moverán cuando se emita un G30. Si no se almacenan las posiciones con G30.1, todos los ejes irán al -<>. +<>. [NOTE] Los parámetros G30 se usarán para mover la herramienta cuando se programe un M6 @@ -1361,7 +1361,7 @@ dentro del sistema de coordenadas de la pieza de trabajo. Más información sobr G53 ejes ---- -Para moverse en el <>, +Para moverse en el <>, programe 'G53' en la misma línea que un movimiento lineal. 'G53' no es modal y debe ser programado en cada línea. 'G0' o 'G1' no tiene que ser programado en la misma línea si están actualmente activos. @@ -2357,7 +2357,7 @@ movimiento), donde las palabras de eje contienen los números de eje que desea. Todas las palabras de eje son opcionales, pero se debe utilizar al menos una. Si no se usa una palabra de eje para un eje dado, el offset para ese eje será cero. -Cuando se ejecuta 'G92', se mueven los <> +Cuando se ejecuta 'G92', se mueven los <> de todos los sistemas de coordenadas. Se mueven de tal manera que el valor del punto controlado actual, en el sistema de coordenadas actualmente activo, se convierte en el valor especificado. Todos los orígenes de sistema de coordenadas. @@ -2398,7 +2398,7 @@ El comando 'G52' también se puede usar para cambiar este offset; ver la secció Consulte la sección <> para obtener un resumen de los sistemas de coordenadas. -Consulte la sección <> para obtener más información. +Consulte la sección <> para obtener más información. [[gcode:g92.1-g92.2]] == G92.1, G92.2 Restablecer compensaciones G92 diff --git a/docs/src/gcode/g-code_fr.adoc b/docs/src/gcode/g-code_fr.adoc index 530f7ddb303..21816e0c6ca 100644 --- a/docs/src/gcode/g-code_fr.adoc +++ b/docs/src/gcode/g-code_fr.adoc @@ -2172,72 +2172,17 @@ LinuxCNC conserve les décalages G92 et les réutilise au prochain démarrage du logiciel. Pour éviter cela, programmer un 'G92.1' qui les effacera, ou un G92.2 qui supprimera les valeurs enregistrées. -Voir le chapitre sur les <>. - -Voir la section sur les <>. - -Voir la section sur les <>. - -[[gcode:g92]] - -== G92 Coordinate System Offset(((G92 Coordinate System Offset))) - ----- -G92 axes ----- - -[WARNING] -Only use 'G92' after your machine has been positioned to the desired point. - -'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. - -When 'G92' is executed, the <> -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. - -'G92' uses the values stored in <> -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. - -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. - -Being in incremental distance mode (G91 instead of G90) has no effect -on the action of 'G92'. - -'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. - -It is an error if: - -* all axis words are omitted. - -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). - [NOTE] The 'G52' command can also be used to change this offset; see the <> Section for more details about 'G92' and 'G52' and how they interact. -See the <> Section for an -overview of coordinate systems. +Voir le chapitre sur les <>. + +Voir la section sur les <>. + +Voir la section sur les <>. -See the <> Section for more information. [[gcode:g92.1-g92.2]] == G92.1, G92.2 Remise à zéro des décalages des systèmes de coordonnées diff --git a/docs/src/gcode/machining-center.adoc b/docs/src/gcode/machining-center.adoc index 9a65b5a897f..f2cfaaa9c56 100644 --- a/docs/src/gcode/machining-center.adoc +++ b/docs/src/gcode/machining-center.adoc @@ -372,4 +372,4 @@ is written. Comments are not preserved when the file is written. |5162 | 0.0 | G28 Home Y |=== -See the <> section for more information. +See the <> section for more information. diff --git a/docs/src/gcode/machining-center_es.adoc b/docs/src/gcode/machining-center_es.adoc index db80b08d559..e713a724bb7 100644 --- a/docs/src/gcode/machining-center_es.adoc +++ b/docs/src/gcode/machining-center_es.adoc @@ -348,6 +348,6 @@ Formato de archivo de parámetros | 5162 | 0.0 | G28 Home Y |===================================== -Vea la sección <> and <> sections for more information. +See the <> and <> sections for more information. .O- Call 'O- Call' takes up to 30 optional arguments, which are passed to the subroutine @@ -371,7 +371,7 @@ o[#101+2] call .Computing values in O-words For more information on computing values see the following sections -* <> +* <> * <> * <> * <> diff --git a/docs/src/gcode/o-code_es.adoc b/docs/src/gcode/o-code_es.adoc index 269490005f6..0238f60f4b3 100644 --- a/docs/src/gcode/o-code_es.adoc +++ b/docs/src/gcode/o-code_es.adoc @@ -81,7 +81,7 @@ o100 sub     (DEBUG, el parámetro 2 es [#1]) o100 endsub ---- -Consulte las secciones <> y <> para obtener más información. +Consulte las secciones <> y <> para obtener más información. .O- Call 'O- Call' toma hasta 30 argumentos opcionales, que se pasan a la subrutina @@ -375,7 +375,7 @@ o[#101+2] call .Calculando valores en O-palabras Para obtener más información sobre los valores, consulte las siguientes secciones -* <> +* <> * <> * <> * <> diff --git a/docs/src/gcode/overview.adoc b/docs/src/gcode/overview.adoc index c81e9a4e709..621092f85a3 100644 --- a/docs/src/gcode/overview.adoc +++ b/docs/src/gcode/overview.adoc @@ -167,7 +167,7 @@ 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. -[[gcode:parameters]] +[[sec:overview-parameters]] == Parameters(((Parameters))) The RS274/NGC language supports 'parameters' - what in other @@ -384,7 +384,6 @@ is written. [[gcode:format-parameter-file]] .Parameter File Format - [width="90%", options="header"] |==== |Parameter Number | Parameter Value @@ -461,11 +460,8 @@ program with if-then-else statements. Note that new can be added easily without changes to the source code. * '#<_vmajor>' - Major package version. If current version was 2.5.2 would return 2.5. - * '#<_vminor>' - Minor package version. If current version was 2.6.2 it would return 0.2. - * '#<_line>' - Sequence number. If running a G-Code file, this returns the current line number. - * '#<_motion_mode>' - Return the interpreter's current motion mode: [width="20%",options="header"] @@ -521,30 +517,23 @@ can be added easily without changes to the source code. |==== * '#<_metric>' - - Return 1 if G21 is on, else 0. - + Return 1 if G21 is on, else 0. * '#<_imperial>' - - Return 1 if G20 is on, else 0. - + Return 1 if G20 is on, else 0. * '#<_absolute>' - - Return 1 if G90 is on, else 0. - + Return 1 if G90 is on, else 0. * '#<_incremental>' - - Return 1 if G91 is on, else 0. - + Return 1 if G91 is on, else 0. * '#<_inverse_time>' - - Return 1 if inverse feed mode (G93) is on, else 0. - + Return 1 if inverse feed mode (G93) is on, else 0. * '#<_units_per_minute>' - - Return 1 if Units/minute feed mode (G94) is on, else 0. - + Return 1 if Units/minute feed mode (G94) is on, else 0. * '#<_units_per_rev>' - - Return 1 if Units/revolution mode (G95) is on, else 0. - + Return 1 if Units/revolution mode (G95) is on, else 0. * '#<_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. + 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. [width="20%",options="header"] |==== @@ -561,150 +550,112 @@ can be added easily without changes to the source code. |==== * '#<_tool_offset>' - - Return 1 if tool offset (G43) is on, else 0. - + Return 1 if tool offset (G43) is on, else 0. * '#<_retract_r_plane>' - - Return 1 if G98 is set, else 0. - + Return 1 if G98 is set, else 0. * '#<_retract_old_z>' - - Return 1 if G99 is on, else 0. + Return 1 if G99 is on, else 0. [[sub:system-parameters]] === System Parameters * '#<_spindle_rpm_mode>' - - Return 1 if spindle rpm mode (G97) is on, else 0. - + Return 1 if spindle rpm mode (G97) is on, else 0. * '#<_spindle_css_mode>' - - Return 1 if constant surface speed mode (G96) is on, else 0. - + Return 1 if constant surface speed mode (G96) is on, else 0. * '#<_ijk_absolute_mode>' - - Return 1 if Absolute Arc distance mode (G90.1) is on, else 0. - + Return 1 if Absolute Arc distance mode (G90.1) is on, else 0. * '#<_lathe_diameter_mode>' - - Return 1 if this is a lathe configuration and diameter (G7) mode is on, else 0. - + Return 1 if this is a lathe configuration and diameter (G7) mode is on, else 0. * '#<_lathe_radius_mode>' - - Return 1 if this is a lathe configuration and radius (G8) mode is on, else 0. - + Return 1 if this is a lathe configuration and radius (G8) mode is on, else 0. * '#<_spindle_on>' - - Return 1 if spindle currently running (M3 or M4) else 0. - + Return 1 if spindle currently running (M3 or M4) else 0. * '#<_spindle_cw>' - - Return 1 if spindle direction is clockwise (M3) else 0. - + Return 1 if spindle direction is clockwise (M3) else 0. * '#<_mist>' - - Return 1 if mist (M7) is on. - + Return 1 if mist (M7) is on. * '#<_flood>' - - Return 1 if flood (M8) is on. - + Return 1 if flood (M8) is on. * '#<_speed_override>' - - Return 1 if feed override (M48 or M50 P1) is on, else 0. - + Return 1 if feed override (M48 or M50 P1) is on, else 0. * '#<_feed_override>' - - Return 1 if feed override (M48 or M51 P1) is on, else 0. - + Return 1 if feed override (M48 or M51 P1) is on, else 0. * '#<_adaptive_feed>' - - Return 1 if adaptive feed (M52 or M52 P1) is on, else 0. - + Return 1 if adaptive feed (M52 or M52 P1) is on, else 0. * '#<_feed_hold>' - - Return 1 if feed hold switch is enabled (M53 P1), else 0. - + Return 1 if feed hold switch is enabled (M53 P1), else 0. * '#<_feed>' - - Return the current value of F, not the actual feed rate. - + Return the current value of F, not the actual feed rate. * '#<_rpm>' - - Return the current value of S, not the actual spindle speed. - + Return the current value of S, not the actual spindle speed. * '#<_x>' - - Return current relative X coordinate including all offsets. In a lathe configuration, it always returns radius. Same as #5420. - + Return current relative X coordinate including all offsets. In a lathe configuration, it always returns radius. Same as #5420. * '#<_y>' - - Return current relative Y coordinate including all offsets. Same as #5421. - + Return current relative Y coordinate including all offsets. Same as #5421. * '#<_z>' - - Return current relative Z coordinate including all offsets. Same as #5422. - + Return current relative Z coordinate including all offsets. Same as #5422. * '#<_a>' - - Return current relative A coordinate including all offsets. Same as #5423. - + Return current relative A coordinate including all offsets. Same as #5423. * '#<_b>' - - Return current relative B coordinate including all offsets. Same as #5424. - + Return current relative B coordinate including all offsets. Same as #5424. * '#<_c>' - - Return current relative C coordinate including all offsets. Same as #5425. - + Return current relative C coordinate including all offsets. Same as #5425. * '#<_u>' - - Return current relative U coordinate including all offsets. Same as #5426. - + Return current relative U coordinate including all offsets. Same as #5426. * '#<_v>' - - Return current relative V coordinate including all offsets. Same as #5427. - + Return current relative V coordinate including all offsets. Same as #5427. * '#<_w>' - - Return current relative W coordinate including all offsets. Same as #5428. - + Return current relative W coordinate including all offsets. Same as #5428. * '#<_abs_x>' - - Return current absolute X coordinate (G53) including no offsets. - + Return current absolute X coordinate (G53) including no offsets. * '#<_abs_y>' - - Return current absolute Y coordinate (G53) including no offsets. - + Return current absolute Y coordinate (G53) including no offsets. * '#<_abs_z>' - - Return current absolute Z coordinate (G53) including no offsets. - + Return current absolute Z coordinate (G53) including no offsets. * '#<_abs_a>' - - Return current absolute A coordinate (G53) including no offsets. - + Return current absolute A coordinate (G53) including no offsets. * '#<_abs_b>' - - Return current absolute B coordinate (G53) including no offsets. - + Return current absolute B coordinate (G53) including no offsets. * '#<_abs_c>' - - Return current absolute C coordinate (G53) including no offsets. - + Return current absolute C coordinate (G53) including no offsets. * '#<_current_tool>' - - Return number of the current tool in spindle. Same as #5400. - + Return number of the current tool in spindle. Same as #5400. * '#<_current_pocket>' - - Return the tooldata index for the current tool. - + Return the tooldata index for the current tool. * '#<_selected_tool>' - - Return number of the selected tool post a T code. Default -1. - + Return number of the selected tool post a T code. Default -1. * '#<_selected_pocket>' - - Return the tooldata index of the selected pocket post a T code. Default -1 - (no pocket selected). - + Return the tooldata index of the selected pocket post a T code. Default -1 + (no pocket selected). * '#<_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. - + 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. * '#<_value_returned>' - - 1.0 if the last O-word 'return' or 'endsub' returned a value, 0 - otherwise. Cleared by the next O-word call. - + 1.0 if the last O-word 'return' or 'endsub' returned a value, 0 + otherwise. Cleared by the next O-word call. * '#<_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). - + 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). * '#<_call_level>' - - current nesting level of O-word procedures. For debugging. - + current nesting level of O-word procedures. For debugging. * '#<_remap_level>' - - current level of the remap stack. Each remap in a block adds one - to the remap level. For debugging. + current level of the remap stack. Each remap in a block adds one + to the remap level. For debugging. [[gcode:ini-hal-params]] == HAL pins and INI values + If enabled in the <> G-code has access to the values of INI file entries and HAL pins. * '#<_ini[section]name>' Returns the value of the corresponding item in -the INI file. + the INI file. + For example, if the ini file looks like so: [source,{ini}] @@ -952,9 +903,8 @@ axis words or canceling motion. 'Non-modal' codes have effect only on the lines on which they occur. For example, G4 (dwell) is non-modal. -(((Polar Coordinates))) -== Polar Coordinates +== Polar Coordinates(((Polar Coordinates))) 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 @@ -990,8 +940,7 @@ might expect. Because we added 0.5 to the distance each time the distance from the XY zero position increased with each line. .Polar Spiral - -image::images/polar01.png[align="center", alt="Polar Spiral"] +image::images/polar01.png["Polar Spiral",align="center"] The following code will produce our square pattern. @@ -1008,8 +957,7 @@ 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. .Polar Square - -image::images/polar02.png[align="center", alt="Polar Square"] +image::images/polar02.png["Polar Square",align="center"] It is an error if: @@ -1050,7 +998,6 @@ being in effect. The modal groups are shown in the following Table. |==== .M-Code Modal Groups - [width="80%", cols="4,6", options="header"] |==== |Modal Group Meaning |Member Words @@ -1130,9 +1077,7 @@ NOTE: Inline comments on O words should not be used see the O Code (MSG, This is a message) ---- -(((Probe Logging))) - -== Probe Logging +== Probe Logging(((Probe Logging))) * '(PROBEOPEN filename.txt)' - will open filename.txt and store the 9-number coordinate consisting of XYZABCUVW of each successful straight probe in it. @@ -1146,12 +1091,9 @@ NOTE: Inline comments on O words should not be used see the O Code * '(LOGOPEN,filename.txt)' - opens the named log file. If the file already exists, it is truncated. - * '(LOGAPPEND,filename)' - opens the named log file. If the file already exists, the data is appended. - * '(LOGCLOSE)' - closes an open log file. - * '(LOG,)' - everything past the ',' is written to the log file if it is open. Supports expansion of parameters as described below. @@ -1260,29 +1202,23 @@ position of each item on the line, but by the following list: (possibly) by G53. * Stop (M0, M1, M2, M30, M60). -(((G-Code Best Practices))) - -== G-Code Best Practices +== G-Code Best Practices(((G-Code Best Practices))) .Use an appropriate decimal precision - Use at least 3 digits after the decimal when milling in millimeters, and at least 4 digits after the decimal when milling in inches. .Use consistent white space - 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. .Use Center-format arcs - 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. .Use a Preamble set modal groups - 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. @@ -1303,18 +1239,15 @@ program at different scales. Other settings, such as the return mode in canned cycles may also be important. .Don't put too many things on one line - Ignore everything in Section <>, and instead write no line of code that is the slightest bit ambiguous. .Don't set & use a parameter on the same line - 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. .Don't use line numbers - 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. diff --git a/docs/src/gcode/overview_es.adoc b/docs/src/gcode/overview_es.adoc index dc5b9f89af3..c996fcbb19b 100644 --- a/docs/src/gcode/overview_es.adoc +++ b/docs/src/gcode/overview_es.adoc @@ -166,9 +166,8 @@ que está destinado a representar un número entero se considera lo suficienteme está dentro de 0.0001 de un valor entero. -[[gcode:parameters]](((Parameters))) - -== Parametros +[[sec:overview-parameters]] +== Parametros(((Parameters))) El lenguaje RS274/NGC admite 'parámetros', lo qué en otros los lenguajes de programación se llamarían 'variables'. Hay varios diff --git a/docs/src/gcode/overview_fr.adoc b/docs/src/gcode/overview_fr.adoc index d0c9047943a..3f10f47f98a 100644 --- a/docs/src/gcode/overview_fr.adoc +++ b/docs/src/gcode/overview_fr.adoc @@ -1,7 +1,7 @@ :lang: fr :toc: -[[cha:Vue-generale-G-code]] +[[cha:g-code-overview]] = Vue générale du langage G-codes de LinuxCNC :ini: {basebackend@docbook:'':ini} @@ -247,23 +247,20 @@ volatiles sont remis à zéro. Utilisation prévue:: . Paramètres utilisateur:: paramètres numérotés dans l'étendue 31 à 5000, -paramètres nommés globaux et locaux excepté les paramètres prédéfinis. Sont -disponibles pour une utilisation générale de stockage de valeurs flottantes, -comme des résultats intermédiaires, des drapeaux, etc. durant l'exécution d'un -programme. Ils sont en lecture/écriture (une valeur peut leur être attribuée). - + paramètres nommés globaux et locaux excepté les paramètres prédéfinis. Sont + disponibles pour une utilisation générale de stockage de valeurs flottantes, + comme des résultats intermédiaires, des drapeaux, etc. durant l'exécution d'un + programme. Ils sont en lecture/écriture (une valeur peut leur être attribuée). . <> - Ils sont -utilisés pour conserver les paramètres actuels passés à un sous-programme. - - . <> - la plupart de ces -paramètres sont utilisés pour accéder aux offsets des systèmes de coordonnées. + utilisés pour conserver les paramètres actuels passés à un sous-programme. + . <> - la plupart de ces + paramètres sont utilisés pour accéder aux offsets des systèmes de coordonnées. . <> - utilisés pour -déterminer l'état de l'interpréteur et de la machine, par exemple '#<_relative>' -retourne 1 si G91 est actif et 0 si G90 est activé. Ils sont en lecture seule. + déterminer l'état de l'interpréteur et de la machine, par exemple '#<_relative>' + retourne 1 si G91 est actif et 0 si G90 est activé. Ils sont en lecture seule. -[[sec:Parametres-Numerotes]] -== Paramètres numérotés -(((Paramètres numérotés))) +[[sub:numbered-parameters]] +== Paramètres numérotés(((Paramètres numérotés))) Un paramètre numéroté commence par le caractère '#' suivi par un entier compris entre 1 et (actuellement) 5602. Le paramètre est diff --git a/docs/src/gui/axis.adoc b/docs/src/gui/axis.adoc index 3d1cb93ca8f..d89d1239845 100644 --- a/docs/src/gui/axis.adoc +++ b/docs/src/gui/axis.adoc @@ -385,7 +385,7 @@ 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 <> +the display will include a cyan <> image:images/axis-machineorigin.png["cyan machine origin"] marker. If the position is 'Commanded', then the exact coordinate given in a G-code diff --git a/docs/src/gui/axis_es.adoc b/docs/src/gui/axis_es.adoc index 008ca7e4312..1a5dc1c8400 100644 --- a/docs/src/gui/axis_es.adoc +++ b/docs/src/gui/axis_es.adoc @@ -354,7 +354,7 @@ en la barra de estado. Si la posición es 'Máquina actual', entonces el número mostrado está en el sistema de coordenadas de la máquina. Si se muestra 'Relative Actual', entonces el número mostrado está en la coordenada del sistema con desplazamiento. Cuando las coordenadas mostradas son relativas y se ha establecido un desplazamiento, -la pantalla incluirá un marcador <> +la pantalla incluirá un marcador <> image:images/axis-machineorigin.png["Origen maquina cian"] cian. Si la posición es 'Comandada', entonces la coordenada exacta dada en un comando de código G diff --git a/docs/src/gui/gladevcp.adoc b/docs/src/gui/gladevcp.adoc index cab4ad9140d..725b1a299d0 100644 --- a/docs/src/gui/gladevcp.adoc +++ b/docs/src/gui/gladevcp.adoc @@ -1369,7 +1369,7 @@ Text template for metric units:: Text template for imperial units:: You can use python formatting to display the position with different precision. Reference Type:: - Absolute <>, Relative + Absolute <>, Relative (to current user coordinate origin - G5x) or Distance-to-go (relative to current user coordinate origin) Joint Number:: diff --git a/docs/src/lathe/lathe-user.adoc b/docs/src/lathe/lathe-user.adoc index 32bf4d45949..d465976f06e 100644 --- a/docs/src/lathe/lathe-user.adoc +++ b/docs/src/lathe/lathe-user.adoc @@ -180,7 +180,7 @@ For more information see the <> Section. .Constant Surface Speed 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 <> should be when +offsets. The X <> should be when the reference tool (the one with zero offset) is at the center of rotation. For more information see the <> Section. diff --git a/docs/src/lathe/lathe-user_es.adoc b/docs/src/lathe/lathe-user_es.adoc index 0a1eb8714e6..f357fc8cd2a 100644 --- a/docs/src/lathe/lathe-user_es.adoc +++ b/docs/src/lathe/lathe-user_es.adoc @@ -185,7 +185,7 @@ Para obtener más información, consulte la sección <>. .Velocidad constante de superficie CSS (Constant Surface Speed) ​​utiliza el origen de la máquina X modificado por el offset X de la herramienta para calcular la velocidad del husillo en RPM. CSS hará un seguimiento de los cambios en los offsets de herramienta. -El <> X debe ser donde +El <> X debe ser donde la herramienta de referencia (la que tiene cero desplazamiento) está en el centro de rotación. Para obtener más información, consulte la sección <>. @@ -246,8 +246,7 @@ la ruta programada a menos que esté activada la 'compensacion del cortador'. En figuras se puede ver cómo el punto de control no sigue el filo de la herramienta, como se podría suponer. .Punto de control - -image::images/control-point_es.svg[align="center", alt="Punto de Control"] +image::images/control-point_es.svg["Punto de Control",align="center"] === Corte de angulos sin Compensacion @@ -257,8 +256,7 @@ ruta programada y la ruta de corte deseada son una y la misma, siempre que nos estemos moviendo en la dirección X o Z solamente. .Rampa de entrada - -image::images/ramp-entry_es.svg[align="center", alt="Entrada a Rampa"] +image::images/ramp-entry_es.svg["Entrada a Rampa",align="center"] Ahora, a medida que el punto de control avanza a lo largo del camino programado, el borde del cortador real no sigue ese camino como se muestra en la @@ -266,8 +264,7 @@ siguiente figura. Hay dos maneras de resolver esto; compensacion del cortador o ajustar la ruta programada para compensar el radio de la punta. .Rampa de ruta - -image::images/ramp-cut_es.svg[align="center", alt="Camino en Rampa"] +image::images/ramp-cut_es.svg["Camino en Rampa",align="center"] El ejemplo anterior se podria ajustar la ruta programada a la ruta real deseada moviendo la ruta programada hacia la izquierda del radio de la punta de la herramienta. @@ -281,8 +278,7 @@ exterior de la pieza. El punto de control de la herramienta sigue el camino prog y la herramienta toca el diametro. .Torneado exterior - -image::images/radius-1_es.svg[align="center", alt="Torneado exterior"] +image::images/radius-1_es.svg["Torneado exterior",align="center"] En la siguiente figura puede ver que a medida que la herramienta se acerca al final de la pieza, el punto de control todavía sigue el camino pero la punta de la herramienta ha dejado @@ -290,15 +286,13 @@ la pieza y está al aire. También puede ver que aunque ha sido programado un ra la pieza terminará con una esquina cuadrada. .Corte del radio - -image::images/radius-2_es.svg[align="center", alt="Corte del radio"] +image::images/radius-2_es.svg["Corte del radio",align="center"] Ahora puede ver como el punto de control sigue el radio programado La punta de la herramienta ha dejado la pieza y ahora está al aire. .Corte del radio - -image::images/radius-3_es.svg[align="center", alt="Corte del radio"] +image::images/radius-3_es.svg["Corte del radio",align="center"] En la figura final podemos ver que la punta de la herramienta terminará de cortar la cara pero deja una esquina cuadrada en lugar de un radio. Notese también @@ -308,8 +302,7 @@ una cara cortada en el centro de una parte, tiene que programar la herramienta p más allá del centro; como minimo, el radio de la punta de la herramienta. .Corte de la cara - -image::images/radius-4_es.svg[align="center", alt="Corte de la cara"] +image::images/radius-4_es.svg["Corte de la cara",align="center"] === Usando Compensacion del Cortador diff --git a/docs/src/lathe/lathe-user_fr.adoc b/docs/src/lathe/lathe-user_fr.adoc index 55c5a4f2de9..c179aa415c0 100644 --- a/docs/src/lathe/lathe-user_fr.adoc +++ b/docs/src/lathe/lathe-user_fr.adoc @@ -49,7 +49,7 @@ Les versions antérieures de LinuxCNC avaient deux différents formats de table d'outils pour les fraiseuses et les tours, mais depuis la version 2.4.x, un format de table d'outil unique est utilisé. Il faut juste ignorer les parties de la table d'outils qui ne concernent pas la machine. -Plus d'informations <>. [[sec:Orientations-des-outils-de-tour]] @@ -163,7 +163,7 @@ d'outils pour ajuster le décalage du système de coordonnées machine. . Prise d'origine machine de tous les axes, si ce n'est pas déjà fait. . Déclarer l'outil avec _M6 Tn_ dans lequel _n_ est le numéro de l'outil -courant, présent en table d'outils. + courant, présent en table d'outils. . Envoyer un G43 pour que l'offset de l'outil soit activé. (voir ci-dessous) . Tangenter l'outil contre la pièce et fixer l'offset machine Z. @@ -214,7 +214,7 @@ Ce qui suit est valable pour ce type d'agencement: - Le côté positif de l'axe Z pointe vers la droite, en s'éloignant de la broche. - Le côté positif de l'axe X pointe vers l'opérateur, quand il est du côté de -l'opérateur par rapport au centre de rotation, ses valeur sont positives. + l'opérateur par rapport au centre de rotation, ses valeur sont positives. Certains tours ont l'outil du côté arrière et un axe Y(+) imaginaire pointant vers le haut. @@ -249,8 +249,7 @@ comme on pourrait le supposer. [[fig:Control-Point]] .Point contrôlé - -image::images/control_point.png[alt="Point contrôlé"] +image::images/control_point.png["Point contrôlé"] === Tourner les angles sans compensation d'outil @@ -260,8 +259,7 @@ le voir, la trajectoire programmée et la trajectoire de coupe souhaitée sont identiques uniquement si les mouvements de tournage suivent les axes X et Z. .Tournage en rampe - -image::images/ramp_entry.png[alt="Tournage en rampe"] +image::images/ramp_entry.png["Tournage en rampe"] Le point contrôlé progresse en suivant la trajectoire programmée mais l'arête de coupe ne suit pas cette trajectoire comme c'est visible sur la figure suivante. @@ -269,8 +267,7 @@ Pour résoudre ce problème, il est nécessaire d'activer la compensation d'outi et d'ajuster la trajectoire programmée pour compenser le rayon de bec de l'outil. .Trajectoire en rampe - -image::images/ramp_cut.png[alt="Trajectoire en rampe"] +image::images/ramp_cut.png["Trajectoire en rampe"] Dans l'exemple ci-dessus, pour suivre la rampe programmée et obtenir la bonne trajectoire, il suffi de décaler la trajectoire de la rampe vers la @@ -285,8 +282,7 @@ suit bien la trajectoire programmée, l'outil touche le diamètre extérieur de pièce. .Tournage du diamètre - -image::images/radius_1.png[alt="Tournage du diamètre"] +image::images/radius_1.png["Tournage du diamètre"] Sur la figure suivante, on voit que quand l'outil approche la fin la pièce, le point contrôlé continue de suivre la trajectoire alors que l'arête de coupe @@ -294,15 +290,13 @@ a déjà quitté la matière et coupe en l'air. On voit aussi que malgré qu'un a été programmé, la pièce conserve son angle d'extrémité. .Tournage du rayon - -image::images/radius_2.png[alt="Tournage du rayon"] +image::images/radius_2.png["Tournage du rayon"] Maintenant, comme on le voit, le point contrôlé suit bien la trajectoire programmée mais l'arête de coupe est en dehors de la matière. .Tournage du rayon - -image::images/radius_3.png[alt="Tournage du rayon"] +image::images/radius_3.png["Tournage du rayon"] Sur la figure finale, on voit que l'arête de coupe a terminé le dressage de la face mais en laissant un coin carré à la place du beau rayon attendu. Noter aussi @@ -311,21 +305,19 @@ lors du dressage de sa face, il convient de dépasser le centre de rotation de l valeur d'un rayon de bec de l'outil. .Dressage de la face - -image::images/radius_4.png[alt="Dressage de la face"] +image::images/radius_4.png["Dressage de la face"] === Utiliser la compensation d'outil - Quand la compensation d'outil est utilisée sur un tour, penser à l'arête de -coupe de l'outil comme étant celle d'un outil rond. + coupe de l'outil comme étant celle d'un outil rond. - Quand la compensation d'outil est utilisée, la trajectoire doit être -suffisamment large pour qu'un outil rond n'interfère pas avec la pièce à la -ligne suivante. + suffisamment large pour qu'un outil rond n'interfère pas avec la pièce à la + ligne suivante. - Pour tourner des lignes droites sur un tour, il est préférable de ne pas -utiliser la compensation d'outil. Par exemple pour aléser un trou avec une -barre d'alésage un peu grosse, la place pourrait manquer pour dégager l'outil -et faire le mouvement de sortie. + utiliser la compensation d'outil. Par exemple pour aléser un trou avec une + barre d'alésage un peu grosse, la place pourrait manquer pour dégager l'outil + et faire le mouvement de sortie. - Le mouvement d'entrée dans un arc avec la compensation d'outil, est important -pour obtenir des résultats corrects. - + pour obtenir des résultats corrects. diff --git a/docs/src/user/user-concepts.adoc b/docs/src/user/user-concepts.adoc index bebf9341216..8a589d2211e 100644 --- a/docs/src/user/user-concepts.adoc +++ b/docs/src/user/user-concepts.adoc @@ -61,7 +61,8 @@ 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. -=== Programming the Planner(((Programming the Planner)))[[programming-the-planner]] +[[programming-the-planner]] +=== Programming the Planner(((Programming the Planner))) The trajectory control commands are as follows: @@ -132,7 +133,6 @@ Detector to combine the moves and do a better job of keeping the velocity as planned. .Naive Cam Detector - image::images/naive-cam.png["Naive Cam Detector",align="center"] === Planning Moves @@ -265,7 +265,7 @@ G54 coordinate system. 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 -<> when your DRO is displaying +<> 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 @@ -293,7 +293,7 @@ them. 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. -[[sec:Machine-Configurations]] +[[sec:machine-configurations]] == Machine Configurations The following diagram shows a typical mill showing direction of travel diff --git a/docs/src/user/user-concepts_es.adoc b/docs/src/user/user-concepts_es.adoc index ae7e0508435..554c78ce458 100644 --- a/docs/src/user/user-concepts_es.adoc +++ b/docs/src/user/user-concepts_es.adoc @@ -261,7 +261,7 @@ sistema de coordenadas G54. Normalmente se usa el sistema de coordenadas G54. Cuando se aplica un offset al actual sistema de coordenadas de usuario, una pequeña bola azul con líneas estará en -el <> cuando su DRO esté +el <> cuando su DRO esté mostrando 'Posición: Relativa Actual' en Axis. Si sus offsets son temporales, use Zero Coordinate System del menú o programe la máquina con 'G10 L2 P1 X0 Y0 Z0' al final de su archivo de código G. Cambie el número 'P' para que se adapte al @@ -289,8 +289,7 @@ eliminarlos. Ahora debe estar en el origen de la máquina X0 Y0 Z0 y el sistema de coordenadas relativo debe ser el mismo que el sistema de coordenadas de máquina. -[[sec:Machine-Configurations]] - +[[sec:machine-configurations]] == Configuraciones de la maquina El siguiente diagrama muestra una fresadora típica que muestra la dirección del diff --git a/docs/src/user/user-concepts_fr.adoc b/docs/src/user/user-concepts_fr.adoc index d343bb5025b..f2db27de2da 100644 --- a/docs/src/user/user-concepts_fr.adoc +++ b/docs/src/user/user-concepts_fr.adoc @@ -24,13 +24,13 @@ et deux cames mobiles pour l'actionner. Dans ce cas les limites seront inversée point de vue du sens de déplacement de l'outil. .Configuration typique d'une fraiseuse -image::images/mill-diagram.png[align="left", alt="Configuration typique d'une fraiseuse"] +image::images/mill-diagram.png["Configuration typique d'une fraiseuse",align="left"] Le dessin suivant montre les directions de déplacement de l'outil et la position des fins de course de limite sur un tour classique. .Configuration typique d'un tour -image::images/lathe-diagram.png[align="left", alt="Configuration typique d'un tour"] +image::images/lathe-diagram.png["Configuration typique d'un tour",align="left"] == Contrôle de trajectoire @@ -43,6 +43,7 @@ restant dans les limites permises par la machine. Un programme en G-code ne peut jamais être exactement suivi. Par exemple imaginez que vous spécifiez dans une ligne du programme les mouvements suivants: + ---- G1 X10 F100 (G1 un mouvement linéaire, X10 la destination, F100 la vitesse) ---- @@ -166,7 +167,6 @@ mouvements et fournir une amélioration conséquente dans le suivi de la vitesse programmée. .Détecteur Naive Cam - image::images/naive-cam.png[alt="Détecteur Naive Cam"] === Planification des mouvements @@ -267,7 +267,7 @@ Quand vous réalisez une prise d'origine de plusieurs axes de LinuxCNC, vous passez G53, les coordonnées système, à 0 pour chacun des axes concernés. - La prises d'origine ne modifient en rien les autres systèmes de coordonnées, -ni les compensations d'outil. + ni les compensations d'outil. La seule façon de se déplacer en mode G53, en coordonnées machine, c'est de programmer un G53 sur la même ligne que celle d'un mouvement. En fonctionnement normal, @@ -284,9 +284,9 @@ le menu Machine ou en programmant _G10 L2 P1 X0 Y0 Z0_ à la fin du programme G- Modifiez la valeur du mot _P_ en fonction du système de coordonnées dont vous voulez effacer le décalage. - - Les décalages stockés dans un système de coordonnées utilisateur sont conservés + - Les décalages stockés dans un système de coordonnées utilisateur sont conservés à l'arrêt de LinuxCNC. - - Dans Axis, utiliser le bouton _Toucher_ décalera le système de coordonnées utilisateur + - Dans Axis, utiliser le bouton _Toucher_ décalera le système de coordonnées utilisateur choisi. === Quand vous êtes perdu @@ -306,3 +306,21 @@ Pour cela: Maintenant vous devriez être, à l'origine machine _X0 Y0 Z0_ et le système de coordonnées relatives devrait être le même que le système de coordonnées machine. + +[[sec:machine-configurations]] +== Machine Configurations + +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. + +image::images/mill-diagram_en.svg["Mill Configuration",align="center"] + +The following diagram shows a typical lathe showing direction of travel +of the tool and limit switches. + +image::images/lathe-diagram_en.svg["Lathe Configuration",align="center"] + +// vim: set syntax=asciidoc: From 7281b5a5a7d1229dd7a8bb3183ca845b47edf7d0 Mon Sep 17 00:00:00 2001 From: Petter Reinholdtsen Date: Tue, 22 Mar 2022 18:55:55 +0000 Subject: [PATCH 38/53] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?= =?UTF-8?q?=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 59.6% (232 of 389 strings) Translation: LinuxCNC/LinuxCNC/Gmocappy Translate-URL: https://hosted.weblate.org/projects/linuxcnc/gmocappy/nb_NO/ --- src/po/gmoccapy/nb.po | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/po/gmoccapy/nb.po b/src/po/gmoccapy/nb.po index 78ef0495aff..6894e83e571 100644 --- a/src/po/gmoccapy/nb.po +++ b/src/po/gmoccapy/nb.po @@ -6,9 +6,9 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: emc-developers@lists.sourceforge.net\n" "POT-Creation-Date: 2022-03-13 11:02+0100\n" -"PO-Revision-Date: 2022-02-04 08:09+0000\n" +"PO-Revision-Date: 2022-03-22 18:57+0000\n" "Last-Translator: Petter Reinholdtsen \n" "Language-Team: Norwegian Bokmål \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.11-dev\n" +"X-Generator: Weblate 4.12-dev\n" #: emc/usr_intf/gmoccapy/gmoccapy.py:254 emc/usr_intf/gmoccapy/gmoccapy.py:259 #, fuzzy @@ -35,16 +35,12 @@ msgid "logo entry found = {0}" msgstr "logo-oppføring funnet = {0}" #: emc/usr_intf/gmoccapy/gmoccapy.py:265 -#, fuzzy -#| msgid "**** GMOCCAPY INI Entry Error **** \n" msgid "**** GMOCCAPY INI Entry Error ****" -msgstr "**** GMOCCAPY feil i INI-oppføring **** \n" +msgstr "**** GMOCCAPY feil i INI-oppføring ****" #: emc/usr_intf/gmoccapy/gmoccapy.py:266 -#, fuzzy -#| msgid "Logofile entry found, but could not be converted to path.\n" msgid "Logofile entry found, but could not be converted to path." -msgstr "Fant logofiloppføring, men kunne ikke omforme den til sti.\n" +msgstr "Fant logofiloppføring, men kunne ikke omforme den til sti." #: emc/usr_intf/gmoccapy/gmoccapy.py:267 msgid "The file path should not contain any spaces" @@ -88,15 +84,11 @@ msgid "**** could not resolv the image path '{0}' given for button '{1}' ****" msgstr "**** klarte ikke forstå bildestien '{0}' oppgitt for knapp '{1}' ****" #: emc/usr_intf/gmoccapy/gmoccapy.py:914 -#, fuzzy -#| msgid "" -#| " edit\n" -#| "offsets" msgid "" "edit\n" "offsets" msgstr "" -" rediger\n" +"rediger\n" "forskyvninger" #: emc/usr_intf/gmoccapy/gmoccapy.py:920 From 8b212668e1b9c32292f32518c252694ba6ae1339 Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Wed, 23 Mar 2022 15:31:33 +1100 Subject: [PATCH 39/53] qtplasmac: enable alignment laser for cut recovery --- docs/src/plasma/qtplasmac.adoc | 16 ++- .../screens/qtplasmac/qtplasmac_handler.py | 123 ++++++++++++------ share/qtvcp/screens/qtplasmac/versions.html | 5 + src/hal/components/plasmac.comp | 118 ++++++++++++----- 4 files changed, 186 insertions(+), 76 deletions(-) diff --git a/docs/src/plasma/qtplasmac.adoc b/docs/src/plasma/qtplasmac.adoc index b46a62f7c05..0d0f1a6116e 100644 --- a/docs/src/plasma/qtplasmac.adoc +++ b/docs/src/plasma/qtplasmac.adoc @@ -1617,6 +1617,8 @@ qtplasmac.laser_on . *LASER* button label will change to *LASER* and the HAL pin named qtplasmac.laser_on will be turned off. . Release the *LASER* button. +If an alignment laser has been set up then it is possible to use the laser during <> for accurate positioning of the new start coordinates. + [[qt_path-tolerance]] === Path Tolerance @@ -2110,7 +2112,19 @@ The moment the torch has been moved off the cut path, the paused motion controls 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. -Pressing *CANCEL MOVE* (or *CYCLE STOP*) will cause the torch to move back to where it was positioned when the motion became paused and the CUT RECOVERY panel overlay will return to the JOGGING panel. +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. + +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. + +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. + +*To use a laser for cut recovery when paused during a cut:* + +. Click the *LASER* button. +. *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. +. Continue the cut recovery as described above. + +If a laser offset is in effect when *CANCEL MOVE* is pressed then this offset will also be cleared. NOTE: 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. diff --git a/share/qtvcp/screens/qtplasmac/qtplasmac_handler.py b/share/qtvcp/screens/qtplasmac/qtplasmac_handler.py index bad3303c6b8..ebb47760364 100644 --- a/share/qtvcp/screens/qtplasmac/qtplasmac_handler.py +++ b/share/qtvcp/screens/qtplasmac/qtplasmac_handler.py @@ -1,4 +1,4 @@ -VERSION = '1.222.180' +VERSION = '1.223.181' ''' qtplasmac_handler.py @@ -711,6 +711,8 @@ def make_hal_pins(self): self.tabsAlwaysEnabled = self.h.newpin('tabs_always_enabled', hal.HAL_BIT, hal.HAL_IN) self.jogInhibited = self.h.newpin('jog_inhibited', hal.HAL_BIT, hal.HAL_IN) self.sensorActive = self.h.newpin('sensor_active', hal.HAL_BIT, hal.HAL_IN) + self.laserRecStatePin = self.h.newpin('laser_recovery_state', hal.HAL_S32, hal.HAL_IN) + self.zOffsetPin = self.h.newpin('z_offset_counts', hal.HAL_S32, hal.HAL_IN) def link_hal_pins(self): #arc parameters @@ -799,14 +801,16 @@ def link_hal_pins(self): CALL(['halcmd', 'net', 'plasmac:motion-type', 'qtplasmac.motion_type']) CALL(['halcmd', 'net', 'plasmac:torch-on', 'qtplasmac.torch_on']) # misc - CALL(['halcmd', 'net', 'plasmac:probe-test-error', 'plasmac.probe-test-error', 'qtplasmac.probe_test_error']) - CALL(['halcmd', 'net', 'plasmac:state', 'plasmac.state-out', 'qtplasmac.plasmac_state']) - CALL(['halcmd', 'net', 'plasmac:z-height', 'plasmac.z-height', 'qtplasmac.z_height']) CALL(['halcmd', 'net', 'plasmac:consumable-changing', 'plasmac.consumable-changing', 'qtplasmac.consumable_changing']) - CALL(['halcmd', 'net', 'plasmac:laser-on', 'qtplasmac.laser_on']) CALL(['halcmd', 'net', 'plasmac:gcode-scale', 'plasmac.gcode-scale', 'qtplasmac.gcode_scale']) CALL(['halcmd', 'net', 'plasmac:jog-inhibit', 'qtplasmac.jog_inhibited']) + CALL(['halcmd', 'net', 'plasmac:laser-on', 'qtplasmac.laser_on']) + CALL(['halcmd', 'net', 'plasmac:laser-recovery-state', 'plasmac.laser-recovery-state', 'qtplasmac.laser_recovery_state']) + CALL(['halcmd', 'net', 'plasmac:probe-test-error', 'plasmac.probe-test-error', 'qtplasmac.probe_test_error']) CALL(['halcmd', 'net', 'plasmac:sensor_active', 'plasmac.sensor-active', 'qtplasmac.sensor_active']) + CALL(['halcmd', 'net', 'plasmac:state', 'plasmac.state-out', 'qtplasmac.plasmac_state']) + CALL(['halcmd', 'net', 'plasmac:z-height', 'plasmac.z-height', 'qtplasmac.z_height']) + CALL(['halcmd', 'net', 'plasmac:z-offset-counts', 'qtplasmac.z_offset_counts']) # *** add system hal pin changes here that may affect existing configs *** # *** these may be removed after auto updating is implemented *** @@ -1364,21 +1368,22 @@ def interp_waiting(self, obj): pass def pause_changed(self, obj, state): + if hal.get_value('plasmac.paused-motion') or hal.get_value('plasmac.cut-recovering'): + if state: + self.w.wcs_button.setEnabled(False) + return if state: # time delay workaround to ensure userspace pins/variables have time to set time.sleep(0.1) - if self.ccButton and not hal.get_value('plasmac.cut-recovering') and hal.get_value('plasmac.stop-type-out'): + if self.ccButton and hal.get_value('plasmac.stop-type-out'): self.w[self.ccButton].setEnabled(True) if self.tpButton and self.w.torch_enable.isChecked(): self.w[self.tpButton].setEnabled(True) if self.otButton and self.w.ohmic_probe_enable.isChecked(): self.w[self.otButton].setEnabled(True) self.w.wcs_button.setEnabled(False) - if hal.get_value('plasmac.stop-type-out') or hal.get_value('plasmac.cut-recovering'): - self.w.set_cut_recovery() self.set_tab_jog_states(True) - elif not self.w.cut_rec_fwd.isDown() and not self.w.cut_rec_rev.isDown() \ - and not self.extCutRecFwdPin.get() and not self.extCutRecRevPin.get(): + else: self.w.jog_stack.setCurrentIndex(0) if self.ccButton: self.w[self.ccButton].setEnabled(False) @@ -1545,6 +1550,12 @@ def sensor_active_changed(self, state): self.w.chk_override_jog.setChecked(False) hal.set_p('plasmac.override-jog', str(state)) + def z_offset_changed(self, height): + if STATUS.is_interp_paused() and not height: + if(hal.get_value('plasmac.stop-type-out') or hal.get_value('plasmac.cut-recovering')): + self.w.set_cut_recovery() + self.w.laser.setEnabled(True) + def override_jog_changed(self, state): if state: hal.set_p('plasmac.override-jog', '1') @@ -1706,9 +1717,17 @@ def abort_pressed(self): if self.torchPulse: self.torch_pulse(True) hal.set_p('plasmac.cut-recovery', '0') + self.laserOnPin.set(0) self.interp_idle(None) self.wcs_rotation('set') + def pause_pressed(self): + if hal.get_value('plasmac.cut-recovering'): + self.w.jog_stack.setCurrentIndex(0) + self.laserOnPin.set(0) + self.cancelWait = False + self.w.laser.setEnabled(False) + def user_button_pressed(self, button): self.user_button_down(button) @@ -2147,6 +2166,8 @@ def set_buttons_state(self, buttonLists, state): if not state and button == self.tpButton and self.torchTimer.isActive(): continue self.w[button].setEnabled(state) + if self.laserRecStatePin.get(): + self.w.laser.setEnabled(False) if self.tpButton and not self.w.torch_enable.isChecked(): self.w[self.tpButton].setEnabled(False) if self.frButton and self.w.gcode_display.lines() == 1: @@ -2276,6 +2297,7 @@ def set_signal_connections(self): self.w.power.released.connect(lambda:self.power_button("released", False)) self.w.power.clicked.connect(lambda:self.power_button("clicked", None)) self.w.run.pressed.connect(self.run_pressed) + self.w.pause.pressed.connect(self.pause_pressed) self.w.abort.pressed.connect(self.abort_pressed) self.w.file_reload.clicked.connect(self.file_reload_clicked) self.w.jog_slow.pressed.connect(self.jog_slow_pressed) @@ -2399,8 +2421,8 @@ def set_signal_connections(self): self.w.cut_rec_sw.pressed.connect(lambda:self.cutrec_move(1, -1, -1)) self.w.cut_rec_w.pressed.connect(lambda:self.cutrec_move(1, -1, 0)) self.w.cut_rec_nw.pressed.connect(lambda:self.cutrec_move(1, -1, 1)) - self.xOffsetPin.value_changed.connect(self.cutrec_offset_changed) - self.yOffsetPin.value_changed.connect(self.cutrec_offset_changed) + self.xOffsetPin.value_changed.connect(lambda v:self.cutrec_offset_changed(v, self.yOffsetPin.get())) + self.yOffsetPin.value_changed.connect(lambda v:self.cutrec_offset_changed(self.xOffsetPin.get(), v)) self.offsetsActivePin.value_changed.connect(lambda v:self.offsets_active_changed(v)) self.consChangePin.value_changed.connect(lambda v:self.consumable_change_changed(v)) self.w.cam_mark.pressed.connect(self.cam_mark_pressed) @@ -2500,6 +2522,8 @@ def set_signal_connections(self): self.w.chk_override_jog.stateChanged.connect(self.override_jog_changed) self.jogInhibited.value_changed.connect(lambda v:self.jog_inhibited_changed(v)) self.sensorActive.value_changed.connect(lambda v:self.sensor_active_changed(v)) + self.zOffsetPin.value_changed.connect(lambda v:self.z_offset_changed(v)) + self.laserRecStatePin.value_changed.connect(lambda v:self.laser_recovery_state_changed(v)) def conv_call(self, operation): if self.developmentPin: @@ -2947,7 +2971,7 @@ def flasher_timeout(self): self.w.pause.setText(_translate('HandlerClass', 'CYCLE RESUME')) else: self.w.pause.setText('') - else: + elif not self.w.jog_stack.currentIndex(): self.w.pause.setText(_translate('HandlerClass', 'CYCLE PAUSE')) text = _translate('HandlerClass', 'FEED') if self.w.feed_slider.value() != 100: @@ -3580,6 +3604,7 @@ def ext_change_consumables(self, state): self.change_consumables(state) def change_consumables(self, state): + self.w.laser.setEnabled(False) if hal.get_value('axis.x.eoffset-counts') or hal.get_value('axis.y.eoffset-counts'): hal.set_p('plasmac.consumable-change', '0') hal.set_p('plasmac.x-offset', '0') @@ -4505,7 +4530,12 @@ def camera_pressed(self): ACTION.SET_MANUAL_MODE() self.vkb_hide() + def laser_recovery_state_changed(self, value): + hal.set_p('plasmac.laser-recovery-start', '0') + def laser_clicked(self): + if STATUS.is_interp_paused(): + return xPos = STATUS.get_position()[0][0] - self.laserOffsetX yPos = STATUS.get_position()[0][1] - self.laserOffsetY if xPos < self.xMin or xPos > self.xMax or yPos < self.yMin or yPos > self.yMax: @@ -4526,8 +4556,21 @@ def laser_clicked(self): self.laserButtonState = self.sheet_align(self.laserButtonState, self.w.laser, self.laserOffsetX, self.laserOffsetY) def laser_pressed(self): + if STATUS.is_interp_paused() and not self.laserRecStatePin.get(): + xPos = STATUS.get_position()[0][0] + self.laserOffsetX + yPos = STATUS.get_position()[0][1] + self.laserOffsetY + if xPos < self.xMin or xPos > self.xMax or yPos < self.yMin or yPos > self.yMax: + head = _translate('HandlerClass', 'LASER ERROR') + msg0 = _translate('HandlerClass', 'Torch cannot move outside the machine boundary') + STATUS.emit('error', linuxcnc.OPERATOR_ERROR, '{}:\n{}\n'.format(head, msg0)) + return + hal.set_p('plasmac.laser-x-offset', '{}'.format(str(int(self.laserOffsetX / self.oScale)))) + hal.set_p('plasmac.laser-y-offset', '{}'.format(str(int(self.laserOffsetY / self.oScale)))) + hal.set_p('plasmac.laser-recovery-start', '1') + hal.set_p('plasmac.cut-recovery', '1') + self.laserOnPin.set(1) + return self.laserTimer.start(750) - return def sheet_align(self, button_state, button, offsetX, offsetY): if button_state == 'markedge': @@ -5134,6 +5177,7 @@ def set_cut_recovery(self): self.w.cut_rec_cancel.setEnabled(False) self.cutrec_speed_changed(self.w.cut_rec_speed.value()) hal.set_p('plasmac.cut-recovery', '0') + self.laserOnPin.set(0) self.xOrig = hal.get_value('axis.x.eoffset-counts') self.yOrig = hal.get_value('axis.y.eoffset-counts') self.zOrig = hal.get_value('axis.z.eoffset-counts') @@ -5155,6 +5199,7 @@ def cutrec_motion(self, direction): if self.w.cut_rec_fwd.isEnabled() and self.w.cut_rec_rev.isEnabled(): speed = float(self.w.cut_rec_speed.value()) * 0.01 * direction hal.set_p('plasmac.paused-motion-speed',str(speed)) + hal.set_p('plasmac.cut-recovery', '1') def cutrec_move(self, state, x, y): if not STATUS.is_interp_paused(): @@ -5163,55 +5208,53 @@ def cutrec_move(self, state, x, y): maxMove = 10 if self.units == 'in': maxMove = 0.4 + laser = self.laserRecStatePin.get() > 0 distX = hal.get_value('qtplasmac.kerf_width-f') * x distY = hal.get_value('qtplasmac.kerf_width-f') * y - if (hal.get_value('plasmac.axis-x-position') + \ - hal.get_value('axis.x.eoffset-counts') * self.oScale + distX > self.xMax) or \ - (hal.get_value('axis.x.eoffset-counts') * self.oScale + distX > maxMove): - return - if (hal.get_value('plasmac.axis-x-position') + \ - hal.get_value('axis.x.eoffset-counts') * self.oScale + distX < self.xMin) or \ - (hal.get_value('axis.x.eoffset-counts') * self.oScale + distX < -maxMove): - return - if (hal.get_value('plasmac.axis-y-position') + \ - hal.get_value('axis.y.eoffset-counts') * self.oScale + distY > self.yMax) or \ - (hal.get_value('axis.y.eoffset-counts') * self.oScale + distY > maxMove): + xNew = hal.get_value('plasmac.axis-x-position') + hal.get_value('axis.x.eoffset') - (self.laserOffsetX * laser) + distX + yNew = hal.get_value('plasmac.axis-y-position') + hal.get_value('axis.y.eoffset') - (self.laserOffsetY * laser) + distY + if xNew > self.xMax or xNew < self.xMin or yNew > self.yMax or yNew < self.yMin: return - if (hal.get_value('plasmac.axis-y-position') + \ - hal.get_value('axis.y.eoffset-counts') * self.oScale + distY < self.yMin) or \ - (hal.get_value('axis.y.eoffset-counts') * self.oScale + distY < -maxMove): + xTotal = hal.get_value('axis.x.eoffset') - (self.laserOffsetX * laser) + distX + yTotal = hal.get_value('axis.y.eoffset') - (self.laserOffsetY * laser) + distY + if xTotal > maxMove or xTotal < -maxMove or yTotal > maxMove or yTotal < -maxMove: return moveX = int(distX / self.oScale) moveY = int(distY / self.oScale) - hal.set_p('plasmac.x-offset', '{}'.format(str(hal.get_value('axis.x.eoffset-counts') + moveX))) - hal.set_p('plasmac.y-offset', '{}'.format(str(hal.get_value('axis.y.eoffset-counts') + moveY))) + hal.set_p('plasmac.x-offset', '{}'.format(str(hal.get_value('plasmac.x-offset') + moveX))) + hal.set_p('plasmac.y-offset', '{}'.format(str(hal.get_value('plasmac.y-offset') + moveY))) hal.set_p('plasmac.cut-recovery', '1') - def cutrec_offset_changed(self): + def cutrec_offset_changed(self, xOffset, yOffset): if hal.get_value('plasmac.consumable-changing'): return - if self.xOffsetPin.get() > 0.001 * self.unitsPerMm or self.xOffsetPin.get() < -0.001 * self.unitsPerMm or \ - self.yOffsetPin.get() > 0.001 * self.unitsPerMm or self.yOffsetPin.get() < -0.001 * self.unitsPerMm: - self.cutrec_motion_enable(False) + if xOffset > 0.001 * self.unitsPerMm or xOffset < -0.001 * self.unitsPerMm or \ + yOffset > 0.001 * self.unitsPerMm or yOffset < -0.001 * self.unitsPerMm: self.w.cut_rec_cancel.setEnabled(True) - if self.cancelWait: - self.cutrec_buttons_enable(False) + if self.laserRecStatePin.get(): + self.w.laser.setEnabled(False) if self.ccButton: self.w[self.ccButton].setEnabled(False) - else: + elif not self.laserRecStatePin.get(): self.cancelWait = False - self.cutrec_motion_enable(True) self.cutrec_buttons_enable(True) + self.cutrec_motion_enable(True) self.w.cut_rec_cancel.setEnabled(False) hal.set_p('plasmac.cut-recovery', '0') - if self.ccButton and STATUS.is_interp_paused(): - self.w[self.ccButton].setEnabled(True) + hal.set_p('plasmac.x-offset', '0') + hal.set_p('plasmac.y-offset', '0') + self.laserOnPin.set(0) + if STATUS.is_interp_paused(): + self.w.laser.setEnabled(True) + if self.ccButton: + self.w[self.ccButton].setEnabled(True) def cutrec_cancel_pressed(self, state): if (state): if hal.get_value('plasmac.cut-recovery'): self.cancelWait = True hal.set_p('plasmac.cut-recovery', '0') + self.laserOnPin.set(0) def cutrec_motion_enable(self, state): for widget in ['fwd', 'rev', 'speed']: diff --git a/share/qtvcp/screens/qtplasmac/versions.html b/share/qtvcp/screens/qtplasmac/versions.html index 499b0181260..6518a73a6cb 100644 --- a/share/qtvcp/screens/qtplasmac/versions.html +++ b/share/qtvcp/screens/qtplasmac/versions.html @@ -30,6 +30,11 @@

    QtPlasmaC Version History


    +
    v1.223.181 2022 Mar 23 +
      +
    • enable alignment laser for cut recovery
    • +
    +
    v1.222.180 2022 Mar 17
    • prevent gui hang from user button
    • diff --git a/src/hal/components/plasmac.comp b/src/hal/components/plasmac.comp index 5923297a2f8..23f02fcba08 100644 --- a/src/hal/components/plasmac.comp +++ b/src/hal/components/plasmac.comp @@ -7,7 +7,7 @@ A plasma cutting table control component for use with the LinuxCNC V2.8 or later .I VERSION: .br -1.222 +1.223 .I SUMMARY: .br @@ -69,6 +69,9 @@ pin in bit override_jog "override jog inhibit"; pin in s32 kerf_errors_max = 2 "allowable kerfcross threshold errors"; pin in bit kerfcross_enable "enable kerf crossing [mode 0 & mode 1]"; pin in float kerfcross_override "kerf crossing threshold override as a percentage"; +pin in s32 laser_recovery_start "start laser offset for cut recovery"; +pin in s32 laser_x_offset "alignment laser x axis offset (scaled units)"; +pin in s32 laser_y_offset "alignment laser y axis offset (scaled units)"; pin in float lowpass_frequency "lowpass cutoff frequency for arc voltage output"; pin in bit machine_is_on "machine is on signal"; pin in s32 max_offset = 5 "maximum height offset"; @@ -132,10 +135,10 @@ pin in bit torch_pulse_start "torch pulse start"; pin in float torch_pulse_time "torch pulse time (seconds)"; pin in float units_per_mm "for scale calcs, connect to halui.machine.units-per-mm"; pin in bit use_auto_volts "use calculated voltage for thc baseline"; -pin in float x_offset "offset to apply to axis x for consumable change"; +pin in s32 x_offset "offset to apply to axis x for consumable change and cut recovery (scaled units)"; pin in float x_offset_current "current x axis offset, connect to axis.x.eoffset"; pin in float xy_feed_rate "feed-rate for consumable change"; -pin in float y_offset "offset to apply to axis y for consumable change"; +pin in s32 y_offset "offset to apply to axis y for consumable change and cut recovery (scaled units)"; pin in float y_offset_current "current z axis offset, connect to axis.y.eoffset"; pin in float z_offset_current "current z axis offset, connect to axis.z.eoffset"; pin in float zero_window = 0.1 "sets window that voltage fluctuations show as zero (-0.1 to 0.1 at default value)"; @@ -155,11 +158,13 @@ pin out bit cutting_stop "stop manual cut, connect to halui.s pin out bit feed_hold "feed hold, connect to motion.feed-hold"; pin out bit jog_inhibit "jog inhibit, connect to motion.jog-inhibit"; pin out bit kerfcross_is_locked "kerf crossing locked indicator [mode 0 & mode 1]"; +pin out s32 laser_recovery_state "laser recovery status"; pin out bit led_down "thc move down indicator"; pin out bit led_up "thc move up indicator"; pin out float offset_scale "offset scale, connect to axis..eoffset-scale"; pin out bit ohmic_enable "on only while probing"; pin out bit ohmic_sense_out "ohmic sense output state"; +pin out bit paused_motion "paused motion flag, true when paused motion is active"; pin out s32 pierce_count "number of pierce attempts"; pin out bit probe_test_error "minimum limit reached while probe testing"; pin out bit program_pause "pause the current program, connect to halui.program.pause"; @@ -214,6 +219,8 @@ variable bool initialized; /* initialization flag */ variable int kerf_errors; /* number of times kerfcross threshold exceeded */ variable float kerf_ratio; /* kerf crossing height to distance ratio */ variable float kerf_threshold; /* kerf crossing threshold voltage */ +variable int laser_x_target; /* target count for laser recovery x offset */ +variable int laser_y_target; /* target count for laser recovery y offset */ variable float last_arc_voltage; /* last sensed arc voltage */ variable bool manual_cut; /* manual cut mode is active */ variable int offset_datum; /* datum for safe height calcs */ @@ -234,7 +241,6 @@ variable int op_y_start; /* y offset when offset probing star variable int op_y_target; /* target offset for y probe offset */ variable int op_y_velocity; /* velocity for y probe offset */ variable float pause_at_end_timer; /* pause at end of cut timer */ -variable bool paused_motion; /* paused motion flag */ variable float paused_motion_timer; /* minimum run timer for paused motion */ variable float pid_error_now; /* current error for pid calcs */ variable float pid_error_old; /* old error for pid calcs */ @@ -352,11 +358,20 @@ typedef enum{EMPTY, SPOTTING, } tool_t; +typedef enum{OFF, + SET, + SETTING, + ON, + RESET, + RESETTING, + } laser_recovery_state_t; + state_t state = IDLE; stop_type_t stop_type = NONE; move_direction_t move_direction = ZERO; probe_type_t probe_type = FLOAT; tool_t tool = EMPTY; +laser_recovery_state_t laser_recovery = OFF; /* setup the arc voltage ring buffer */ #define MAXBUFFSIZE 100 @@ -440,7 +455,7 @@ FUNCTION(_) { } offset_scale = units_per_mm * fperiod / res; velocity_scale = res / units_per_mm / 60; - recovery_velocity = 3 * res; + recovery_velocity = cut_feed_rate * velocity_scale * 0.5; /* set the active tool */ if(cutting_start){ // this allows M3 for cutting as well as M3 $0 @@ -815,7 +830,7 @@ FUNCTION(_) { }else if(!consumable_change && (stop_type == PAUSE || stop_type == WAIT) && consumable_changing){ state = CONSUMABLE_CHANGE_OFF; /* if we get a cut recovery start request and we are paused */ - }else if(cut_recovery && stop_type == PAUSE && !cut_recovering){ + }else if(cut_recovery && stop_type == PAUSE && (!cut_recovering || laser_recovery_start)){ state = CUT_RECOVERY_ON; /* if we get a torch start request and we are stopped or waiting for a restart */ }else if((tool == CUTTING || tool == SPOTTING || probe_test) && (stop_type == NONE || stop_type == WAIT) && homed){ @@ -932,7 +947,29 @@ FUNCTION(_) { break; } } - state = PROBE_HEIGHT; + /* clear any laser recovey offset */ + if(laser_recovery_state > OFF && laser_recovery_state < RESET){ + laser_recovery_state = RESET; + }else if(laser_recovery_state == RESET){ + angle_x_y = atan2(laser_y_offset, laser_x_offset); + x_velocity = fabs(cut_feed_rate * velocity_scale * cos(angle_x_y)); + y_velocity = fabs(cut_feed_rate * velocity_scale * sin(angle_x_y)); + laser_recovery_state = RESETTING; + }else if(laser_recovery_state == RESETTING){ + if(x_offset_counts == x_offset && y_offset_counts == y_offset){ + laser_recovery_state = OFF; + }else{ + if(x_offset_counts != x_offset){ + x_offset_counts = offset_move(x_offset_counts, x_velocity, x_offset); + } + if(y_offset_counts != y_offset){ + y_offset_counts = offset_move(y_offset_counts, y_velocity, y_offset); + } + } + /* laser recovery offset complete if required */ + }else{ + state = PROBE_HEIGHT; + } } } /* if we get a resume request and we are paused */ @@ -1782,6 +1819,7 @@ FUNCTION(_) { y_velocity = fabs(cut_feed_rate * velocity_scale * sin(angle_x_y)); state = CUT_RECOVERY_OFF; cut_recovering = FALSE; + laser_recovery_state = OFF; }else{ state = IDLE; } @@ -1814,31 +1852,18 @@ FUNCTION(_) { } break; case PAUSED_MOTION: - /* a bit kludgy but we need a timer here for a minimum run - * time to give the GUI time to poll the status channel */ if(paused_motion_speed){ - if(!paused_motion){ - paused_motion_timer = 0.2; /* 0.2 seconds */ - paused_motion = TRUE; - adaptive_feed = paused_motion_speed; - feed_hold = FALSE; - program_resume = TRUE; - }else{ - paused_motion_timer -= fperiod; - } - }else{ - paused_motion_timer -= fperiod; - feed_hold = TRUE; + paused_motion = TRUE; + adaptive_feed = paused_motion_speed; + program_resume = TRUE; + feed_hold = FALSE; + }else if(program_is_running){ program_pause = TRUE; - if(program_is_paused && paused_motion_timer <= 0){ - paused_motion = FALSE; - adaptive_feed = 1; - if(cut_recovery){ - state = CUT_RECOVERY_ON; - }else{ - state = IDLE; - } - } + feed_hold = TRUE; + adaptive_feed = 1; + }else if(program_is_paused && feed_hold){ + paused_motion = FALSE; + state = CUT_RECOVERY_ON; } break; case OHMIC_TEST: @@ -2030,14 +2055,36 @@ FUNCTION(_) { if(!cut_recovering){ cut_recovering = TRUE; } - if(cut_recovery){ + /* offset for laser recovery if required */ + if(laser_recovery_start && laser_recovery_state == OFF){ + laser_recovery_state = SET; + }else if(laser_recovery_state == SET){ + angle_x_y = atan2(laser_y_offset, laser_x_offset); + x_velocity = fabs(cut_feed_rate * velocity_scale * cos(angle_x_y)); + y_velocity = fabs(cut_feed_rate * velocity_scale * sin(angle_x_y)); + laser_x_target = x_offset_counts + laser_x_offset; + laser_y_target = y_offset_counts + laser_y_offset; + laser_recovery_state = SETTING; + }else if(laser_recovery_state == SETTING){ + if(x_offset_counts == laser_x_target && y_offset_counts == laser_y_target){ + laser_recovery_state = ON; + }else{ + if(x_offset_counts != laser_x_target){ + x_offset_counts = offset_move(x_offset_counts, x_velocity, laser_x_target); + } + if(y_offset_counts != laser_y_target){ + y_offset_counts = offset_move(y_offset_counts, y_velocity, laser_y_target); + } + } + /* laser recovery offset is clear */ + }else if(cut_recovery){ /* move x axis to recovery position at recovery velocity */ - if(x_offset_counts != x_offset){ - x_offset_counts = offset_move(x_offset_counts, recovery_velocity, x_offset); + if(x_offset_counts != x_offset + laser_x_offset * (laser_recovery_state > 1)){ + x_offset_counts = offset_move(x_offset_counts, recovery_velocity, x_offset + laser_x_offset * (laser_recovery_state > 1)); } /* move y axis to recovery position at recovery velocity */ - if(y_offset_counts != y_offset){ - y_offset_counts = offset_move(y_offset_counts, recovery_velocity, y_offset); + if(y_offset_counts != y_offset + laser_y_offset * (laser_recovery_state > 1)){ + y_offset_counts = offset_move(y_offset_counts, recovery_velocity, y_offset + laser_y_offset * (laser_recovery_state > 1)); } }else{ state = CUT_RECOVERY_OFF; @@ -2059,6 +2106,7 @@ FUNCTION(_) { if(x_offset_counts == 0 && y_offset_counts == 0){ if((int)(x_offset_current * offset_res) == 0 && (int)(y_offset_current * offset_res) == 0){ cut_recovering = FALSE; + laser_recovery_state = OFF; if(cut_recovery){ feed_hold = FALSE; thc_delay_timer = thc_delay; From 21f236cc16d216ff04b5152ee31da9755c58a339 Mon Sep 17 00:00:00 2001 From: Hans U Date: Tue, 22 Mar 2022 20:42:26 +0000 Subject: [PATCH 40/53] Translated using Weblate (German) Currently translated at 99.1% (3743 of 3775 strings) Translation: LinuxCNC/LinuxCNC Translate-URL: https://hosted.weblate.org/projects/linuxcnc/linuxcnc/de/ --- src/po/de.po | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/po/de.po b/src/po/de.po index 52aeaec577f..614907201fc 100644 --- a/src/po/de.po +++ b/src/po/de.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: emc-developers@lists.sourceforge.net\n" "POT-Creation-Date: 2022-03-13 11:02+0100\n" -"PO-Revision-Date: 2022-03-13 11:53+0000\n" +"PO-Revision-Date: 2022-03-23 04:32+0000\n" "Last-Translator: Hans U. \n" "Language-Team: German \n" @@ -5131,7 +5131,7 @@ msgstr "HAL-Befehl:" #: tcl/bin/halconfig.tcl:479 tcl/bin/halconfig.tcl:528 tcl/bin/halshow.tcl:524 msgid "Execute" -msgstr "Anwenden" +msgstr "Ausführen" #: tcl/bin/halconfig.tcl:623 #, tcl-format @@ -11793,6 +11793,7 @@ msgstr "Entgegengesetzt" #: src/emc/usr_intf/pncconf/dialogs.glade:2486 msgid "" "_:" +"" msgstr "_:" #: src/emc/usr_intf/stepconf/axisx.glade:249 From 7a98bcd5f05efd2eb80f1bdba4d829ab5ee08a8b Mon Sep 17 00:00:00 2001 From: Greg Carl <26096779+snowgoer540@users.noreply.github.com> Date: Thu, 24 Mar 2022 07:45:00 -0400 Subject: [PATCH 41/53] docs: remove bad unicode characters there are more in the .po files, as well as some of the language versions. I left those alone as to not mess with translation efforts, but can fix there too if needed. --- debian/copyright | 4 +- docs/man/man1/hal_parport.1 | 8 +- docs/src/code/code-notes.adoc | 6 +- docs/src/code/contributing-to-linuxcnc.adoc | 10 +- docs/src/code/style-guide.adoc | 2 +- docs/src/common/glossary.adoc | 2 +- docs/src/config/core-components.adoc | 4 +- docs/src/config/iov2.adoc | 6 +- docs/src/config/stepper.adoc | 4 +- docs/src/drivers/shuttle.adoc | 12 +- docs/src/gcode/g-code.adoc | 2 +- docs/src/gui/gladevcp.adoc | 2 +- docs/src/gui/image-to-gcode.adoc | 8 +- docs/src/gui/pyvcp.adoc | 2 +- docs/src/gui/tooledit.adoc | 2 +- docs/src/hal/canonical-devices.adoc | 4 +- docs/src/hal/general-ref.adoc | 20 +-- docs/src/hal/halmodule.adoc | 6 +- docs/src/hal/tools.adoc | 2 +- docs/src/integrator/steppers.adoc | 28 ++-- docs/src/integrator/wiring.adoc | 36 ++--- docs/src/motion/kinematics.adoc | 4 +- docs/src/motion/tweaking-steppers.adoc | 8 +- docs/src/plasma/plasma-cnc-primer.adoc | 56 +++---- .../woodpecker/images/QTvcp Widgets.html | 140 +++++++++--------- src/emc/usr_intf/pncconf/help.glade | 4 +- 26 files changed, 191 insertions(+), 191 deletions(-) diff --git a/debian/copyright b/debian/copyright index e91ad1475d9..42a51aacd7a 100644 --- a/debian/copyright +++ b/debian/copyright @@ -484,7 +484,7 @@ License: LGPL-2 with this program. If not, see . On Debian systems, the complete text of the GNU Lesser General Public - License version 2.1 can be found in ‘/usr/share/common-licenses/LGPL-2’. + License version 2.1 can be found in '/usr/share/common-licenses/LGPL-2'. License: LGPL-2.1+ This program is free software; you can redistribute it and/or modify @@ -501,7 +501,7 @@ License: LGPL-2.1+ with this program. If not, see . On Debian systems, the complete text of the GNU Lesser General Public - License version 2.1 can be found in ‘/usr/share/common-licenses/LGPL-2.1’. + License version 2.1 can be found in '/usr/share/common-licenses/LGPL-2.1'. License: MIT Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/docs/man/man1/hal_parport.1 b/docs/man/man1/hal_parport.1 index 1437258fab9..628b8f1c0af 100644 --- a/docs/man/man1/hal_parport.1 +++ b/docs/man/man1/hal_parport.1 @@ -90,17 +90,17 @@ The following lists the input and output pins by the type setting used in the cf Reads physical input pins of all ports and updates HAL \-in and \-in\-not pins. .TP \fBparport.

      .write (funct) -Reads HAL \-out pins of port

      and updates that port’s physical output pins. +Reads HAL \-out pins of port

      and updates that port's physical output pins. .TP \fBparport.write\-all (funct) Reads HAL \-out pins of all ports and updates all physical output pins. .TP \fBparport.

      .reset (funct) -Waits until \fIreset\-time \fRhas elapsed since the associated write, then resets pins to values indicated by \fI\-out\-reset \fRand \fI\-out\-invert \fRsettings. reset must be later in the same thread as write. 'If '\fI\-out\-reset \fRis TRUE, then the reset function will set the pin to the value of \fI\-out\-invert\fR. 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. +Waits until \fIreset\-time \fRhas elapsed since the associated write, then resets pins to values indicated by \fI\-out\-reset \fRand \fI\-out\-invert \fRsettings. reset must be later in the same thread as write. 'If '\fI\-out\-reset \fRis TRUE, then the reset function will set the pin to the value of \fI\-out\-invert\fR. 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. .SH USAGE 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. -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 \fIout\fR, a port provides a total of 12 outputs and 5 inputs. If configured as \fIin\fR, it provides 4 outputs and 13 inputs. +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 \fIout\fR, a port provides a total of 12 outputs and 5 inputs. If configured as \fIin\fR, it provides 4 outputs and 13 inputs. 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 \fIx\fR, it provides 8 outputs, and 9 inputs. @@ -147,7 +147,7 @@ For each parallel port handled by the hal_parport driver, a type can optionally If the type is not specified, the default is out. -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. +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. See the Note above about mode x. .TP diff --git a/docs/src/code/code-notes.adoc b/docs/src/code/code-notes.adoc index d744d319399..363fb1aa93f 100644 --- a/docs/src/code/code-notes.adoc +++ b/docs/src/code/code-notes.adoc @@ -26,7 +26,7 @@ very much a work in progress, and its layout may change in the future. 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 + 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 @@ -968,8 +968,8 @@ 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. -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 +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. diff --git a/docs/src/code/contributing-to-linuxcnc.adoc b/docs/src/code/contributing-to-linuxcnc.adoc index 98c3dbcf281..3886c8975a7 100644 --- a/docs/src/code/contributing-to-linuxcnc.adoc +++ b/docs/src/code/contributing-to-linuxcnc.adoc @@ -194,8 +194,8 @@ third commit, add a new feature which is made easier by the refactoring and which would not have worked without fixing that bug. 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 +"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. === Follow the style of the surrounding code @@ -207,9 +207,9 @@ done, do it as a commit separate from any semantic changes. === Simplify complicated history before sharing with fellow developers -With git, it’s possible to record every edit and false start as a +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 +during development, but often you don't want to share these false starts with others. Git provides two main ways to clean history, both of which can be done @@ -218,7 +218,7 @@ freely before you share the change: `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. +or if you typo'd the commit message. `git rebase --interactive upstream-branch` lets you go back through each commit made since you forked your feature branch from the upstream branch, diff --git a/docs/src/code/style-guide.adoc b/docs/src/code/style-guide.adoc index 6479dea27b1..7137a1a4671 100644 --- a/docs/src/code/style-guide.adoc +++ b/docs/src/code/style-guide.adoc @@ -10,7 +10,7 @@ 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. -Never check in code after running “indent” on it. The whitespace +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. diff --git a/docs/src/common/glossary.adoc b/docs/src/common/glossary.adoc index 59be9a911af..9b2c01e33bb 100644 --- a/docs/src/common/glossary.adoc +++ b/docs/src/common/glossary.adoc @@ -159,7 +159,7 @@ Feedrate Override:: (((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”. + anything else that requires the feed rate to be "tweaked". Floating Point Number:: A number that has a decimal point. (12.300) In HAL it is known as float. diff --git a/docs/src/config/core-components.adoc b/docs/src/config/core-components.adoc index 1890c0ea9a6..f83b51ceabd 100644 --- a/docs/src/config/core-components.adoc +++ b/docs/src/config/core-components.adoc @@ -9,7 +9,7 @@ See also the man pages 'motion(9)'. == Motion These pins and parameters are created by the realtime 'motmod' module. -This module provides a HAL interface for LinuxCNC’s motion planner. +This module provides a HAL interface for LinuxCNC's motion planner. 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. @@ -381,7 +381,7 @@ See the motion man page 'motion(9)' for details on the pins and parameters. == iocontrol -iocontrol − accepts NML I/O commands, interacts with HAL in userspace. +iocontrol - accepts NML I/O commands, interacts with HAL in userspace. 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 diff --git a/docs/src/config/iov2.adoc b/docs/src/config/iov2.adoc index b6767b22553..dcc4b428100 100644 --- a/docs/src/config/iov2.adoc +++ b/docs/src/config/iov2.adoc @@ -150,11 +150,11 @@ Additional pins added by I/O Control V2 == Parameters -* iocontrol.0.tool-prep-index (s32, RO) IO’s internal array index of the prepped +* 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 + 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 + 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. == Communications diff --git a/docs/src/config/stepper.adoc b/docs/src/config/stepper.adoc index b636d6dc3c4..79ff29e2a72 100644 --- a/docs/src/config/stepper.adoc +++ b/docs/src/config/stepper.adoc @@ -198,7 +198,7 @@ same pin. === Changing polarity of a signal -If external hardware expects an “active low” signal, set the +If external hardware expects an "active low" signal, set the corresponding '-invert' parameter. For instance, to invert the spindle control signal: @@ -218,7 +218,7 @@ addf pwmgen.make-pulses base-thread net spindle-speed-cmd spindle.0.speed-out => pwmgen.0.value net spindle-on spindle.0.on => pwmgen.0.enable net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out -setp pwmgen.0.scale 1800 # Change to your spindle’s top speed in RPM +setp pwmgen.0.scale 1800 # Change to your spindle's top speed in RPM ---- This assumes that the spindle controller's response to PWM is simple: diff --git a/docs/src/drivers/shuttle.adoc b/docs/src/drivers/shuttle.adoc index a345a387497..cb6b43db9ec 100644 --- a/docs/src/drivers/shuttle.adoc +++ b/docs/src/drivers/shuttle.adoc @@ -5,8 +5,8 @@ == Description -Shuttle is a non-realtime HAL component that interfaces Contour Design’s -ShuttleXpress, ShuttlePRO, and ShuttlePRO2 devices with LinuxCNC’s HAL. +Shuttle is a non-realtime HAL component that interfaces Contour Design's +ShuttleXpress, ShuttlePRO, and ShuttlePRO2 devices with LinuxCNC's HAL. If the driver is started without command-line arguments, it will probe all /dev/hidraw* device files for Shuttle devices, and use all devices @@ -30,7 +30,7 @@ returns to center when released. 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 +the driver, the driver uses the device's reported jog-wheel position to initialize counts to 0. This means that if the first event is generated by a jog-wheel move, @@ -84,13 +84,13 @@ of the device (the order in which the driver found them), for example '.spring-wheel-s32' (s32 out):: The current deflection of the spring-wheel (the outer wheel). - It’s 0 at rest, and ranges from -7 at the counter-clockwise extreme + It's 0 at rest, and ranges from -7 at the counter-clockwise extreme to +7 at the clockwise extreme. '.spring-wheel-f' (float out):: 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 + 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.) + discrete values in it's range.) diff --git a/docs/src/gcode/g-code.adoc b/docs/src/gcode/g-code.adoc index 573ddb974e7..6282254e02a 100644 --- a/docs/src/gcode/g-code.adoc +++ b/docs/src/gcode/g-code.adoc @@ -610,7 +610,7 @@ G7 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. +0.500" from the center of the lathe thus giving a 1" diameter part. [[gcode:g8]] == G8 Lathe Radius Mode(((G8 Lathe Radius Mode))) diff --git a/docs/src/gui/gladevcp.adoc b/docs/src/gui/gladevcp.adoc index 725b1a299d0..23025f49254 100644 --- a/docs/src/gui/gladevcp.adoc +++ b/docs/src/gui/gladevcp.adoc @@ -2852,7 +2852,7 @@ 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: +a user's ~/.profile startup script. Example: ==== export GLADEVCP_EXTRAS=~/mygladevcp:/opt/othergladevcp diff --git a/docs/src/gui/image-to-gcode.adoc b/docs/src/gui/image-to-gcode.adoc index 27162c5e3e4..510caf3dd9e 100644 --- a/docs/src/gui/image-to-gcode.adoc +++ b/docs/src/gui/image-to-gcode.adoc @@ -52,8 +52,8 @@ G-code and as the units for each option labeled '(units)'. === Invert Image -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 +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. === Normalize Image @@ -144,8 +144,8 @@ The shape of the cutting part of the tool. Possible tool shapes are: - Ball End - Flat End - - 45 degree “vee” - - 60 degree “vee” + - 45 degree "vee" + - 60 degree "vee" === Lace bounding diff --git a/docs/src/gui/pyvcp.adoc b/docs/src/gui/pyvcp.adoc index ef2e7a34493..43a69df5553 100644 --- a/docs/src/gui/pyvcp.adoc +++ b/docs/src/gui/pyvcp.adoc @@ -1039,7 +1039,7 @@ A table is a container that allows layout in a grid of rows and columns. Each row is started by a '' tag. A contained widget may span rows or columns through the use of the '' tag. The sides of the cells to which -the contained widgets “stick” +the contained widgets "stick" may be set through the use of the '' tag. A table expands on its flexible rows and columns. diff --git a/docs/src/gui/tooledit.adoc b/docs/src/gui/tooledit.adoc index 6ac73655e2b..e641ac508e8 100644 --- a/docs/src/gui/tooledit.adoc +++ b/docs/src/gui/tooledit.adoc @@ -69,7 +69,7 @@ TOOL_EDITOR = tooledit Z DIAM ---- .Résultat obtenu -image::images/tooledit-columns_fr.png["Éditeur graphique de table d’outils - Choix des colonnes",align="left"] +image::images/tooledit-columns_fr.png["Éditeur graphique de table d'outils - Choix des colonnes",align="left"] == Stand Alone Use The 'tooledit' program can also be invoked as a standalone diff --git a/docs/src/hal/canonical-devices.adoc b/docs/src/hal/canonical-devices.adoc index 0305fb6baf6..d05ce2c5765 100644 --- a/docs/src/hal/canonical-devices.adoc +++ b/docs/src/hal/canonical-devices.adoc @@ -6,7 +6,7 @@ == Introduction The following sections show the pins, parameters, and functions that -are supplied by “canonical devices”. All HAL device drivers should +are supplied by "canonical devices". All HAL device drivers should supply the same pins and parameters, and implement the same behavior. Note that the only the `` and `` fields are @@ -112,7 +112,7 @@ converters or PWM generators. (funct) *write* -- 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 +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 diff --git a/docs/src/hal/general-ref.adoc b/docs/src/hal/general-ref.adoc index 086e1420709..7ce6cad6f1d 100644 --- a/docs/src/hal/general-ref.adoc +++ b/docs/src/hal/general-ref.adoc @@ -27,11 +27,11 @@ 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: - - Dots (“.”) separate levels of the hierarchy. - This is analogous to the slash (“/”) in a filename. - - Hyphens (“-”) separate words or fields in the same level of the hierarchy. - - HAL components should not use underscores or “MixedCase”. - - Use only lowercase letters and numbers in names. + - Dots (".") separate levels of the hierarchy. + This is analogous to the slash ("/") in a filename. + - Hyphens ("-") separate words or fields in the same level of the hierarchy. + - HAL components should not use underscores or "MixedCase". + - Use only lowercase letters and numbers in names. == Hardware Driver Naming Conventions @@ -71,20 +71,20 @@ The individual fields are: 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 + "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.] + 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” + 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 + limitations). The frequency parameter should use "0-3" as the channel number. :: @@ -93,7 +93,7 @@ The individual fields are: 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 + of pins and parameters, (referred to as the "canonical interface") that the driver should implement. The canonical interfaces are described in the <> chapter. diff --git a/docs/src/hal/halmodule.adoc b/docs/src/hal/halmodule.adoc index e8f3fb4f90f..7eb760dd925 100644 --- a/docs/src/hal/halmodule.adoc +++ b/docs/src/hal/halmodule.adoc @@ -55,7 +55,7 @@ halcmd: show pin == Userspace components and delays -If you typed “show pin” quickly, you may see that 'passthrough.out' +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 @@ -425,10 +425,10 @@ This shows ways to get the pin value and information. microcontroller to the PC using a serial interface. Python has a very capable serial interface module called http://pyserial.sourceforge.net/[pyserial] - (Ubuntu package name “python-serial”, in the universe repository) + (Ubuntu package name "python-serial", in the universe repository) * 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) + (Ubuntu package name "lcdproc", in the universe repository) * Create a virtual control panel using any GUI library supported by Python (gtk, qt, wxwindows, etc) diff --git a/docs/src/hal/tools.adoc b/docs/src/hal/tools.adoc index c56d37d477a..1d56c6e5cde 100644 --- a/docs/src/hal/tools.adoc +++ b/docs/src/hal/tools.adoc @@ -15,7 +15,7 @@ provides usage info: man halcmd ---- -If you have compiled LinuxCNC for “run-in-place”, you must source +If you have compiled LinuxCNC for "run-in-place", you must source the rip-environment script to make the man page available: ---- diff --git a/docs/src/integrator/steppers.adoc b/docs/src/integrator/steppers.adoc index 9d21512deff..13e4dc5c14a 100644 --- a/docs/src/integrator/steppers.adoc +++ b/docs/src/integrator/steppers.adoc @@ -6,8 +6,8 @@ == Stepper Motor Operation 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. +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. 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 @@ -17,7 +17,7 @@ current. More coil inductance results in a slower rate of current change and thu expansion and contraction. 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 +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. @@ -29,7 +29,7 @@ trace), and the 8mH (red trace) coil takes twice as long again: image::images/inductance-step-response.png[align="center"] -If the rate at which step changes are applied to the coils is significantly shorter than the rise time, it’s easy +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: @@ -61,7 +61,7 @@ by monitoring the current being drawn through the motor windings and rapidly swi 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’. +'chopper drive'. == Selecting a Stepper Power Supply @@ -85,13 +85,13 @@ not result in a corresponding improvement in speed/torque by the same degree. If running a stepper motor at 64VDC, this may help in narrowing down the proposed power supply to 32VDC which will also help minimise excessive heat rise in the motor windings. -The other factor to consider is the current rating of the power supply. This is based from the motor’s winding +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 +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 4A wired in parallel, the power supply needs to have a current rating of at least 2.7A, or 1.3A if wired in series. The total current rating of the complete system is then the sum of all -stepper motors’ current requirements. +stepper motors' current requirements. == Resonance @@ -99,7 +99,7 @@ Motor resonance occurs when the rate at which the steps are applied to the windi 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 +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. @@ -128,7 +128,7 @@ whole steps that motor is manufactured to perform at (eg, 200 steps per revoluti As each winding is energised the rotor clocks around fully from one detent to the next. 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 +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. @@ -165,16 +165,16 @@ obtain the necessary resolution and torque gains. 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 +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. -A further enhancement to the basic stepper motor is to run the system in a ‘closed loop’. This is achieved by +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 +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. +to the system constantly compensating for any deviation to the stepper's performance under varying loads. 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 diff --git a/docs/src/integrator/wiring.adoc b/docs/src/integrator/wiring.adoc index fef7bde1a74..a6d545066b6 100644 --- a/docs/src/integrator/wiring.adoc +++ b/docs/src/integrator/wiring.adoc @@ -62,8 +62,8 @@ amount of current it carries have a bearing on the choice of wire to be used. Th 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 +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. === Shielded Wire @@ -74,9 +74,9 @@ are trying to combat. .Foil Shielded Wire -Foil shielded wire has a thin aluminium or copper foil that is usually bonded to a film of plastic that surrounds +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 aluminium or laminated to a plastic backing material. For this reason, it is +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. @@ -86,7 +86,7 @@ Braided shielded wire has a woven copper braid that surrounds the wire. It is mo 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 -aluminium. +aluminum. 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 @@ -107,7 +107,7 @@ also help minimise any potential sources of mains-borne interference. [NOTE] Be aware that in many countries, the installation and alteration of mains circuits can only be carried out by -licenced electricians. +licensed electricians. == Power Supply Units @@ -134,7 +134,7 @@ for your country, and the conduction of other unrelated signals in that same wir 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 +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. @@ -155,13 +155,13 @@ DC commons are tied where is usually taken out of the hands of the end user. == DC Supply Feeds 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 +'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 cancelled as both conductors will receive the same degree of EMI. For additional +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. -Note however that twisted pairs of wires are less effective at combatting the effects of EMI if one of the two +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. @@ -173,7 +173,7 @@ controller inputs, axis limit switches etc) are the most susceptible to noise in 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 -signalled using as little as 3.3V. Evidently a 2V noise spike has the potential to corrupt the validity of a +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. If possible, isolate the common point of the PSU supplying the logic peripherals from the rest of the system. @@ -181,12 +181,12 @@ For example, keeping the common of the low voltage power supply isolated from th supply will reduce the chances of large currents flowing in the stepper motor return line contaminating the common of the low voltage supply. -If the controller uses differential signalling, use twisted pairs to carry the signal. Shielded cable is preferred +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. 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 signalling (eg, 12V or 24V). The same 2V EMI noise spike +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. @@ -207,7 +207,7 @@ shield on the output lines reduces the amount of noise they can radiate. 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. +recommendations in the manufacturer's documentation. 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 @@ -219,7 +219,7 @@ shield terminated to mains earth. 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 moveable gantry. Cables and wires operating in these circumstances should be rated for extra +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. @@ -246,8 +246,8 @@ possible while wiring between two points. 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 +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. Debouncing is achieved by permitting a state change on a mechanical switch to only register with the controller diff --git a/docs/src/motion/kinematics.adoc b/docs/src/motion/kinematics.adoc index 2256c054b01..ff02402b4b5 100644 --- a/docs/src/motion/kinematics.adoc +++ b/docs/src/motion/kinematics.adoc @@ -14,7 +14,7 @@ all) use a common coordinate system called the Cartesian Coordinate System. The Cartesian Coordinate system is composed of three axes (X, Y, Z) each -perpendicular to the other two. footnote:[The word “axes” is also +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.] @@ -279,7 +279,7 @@ return 0; == Implementation details A kinematics module is implemented as a HAL component, and is -permitted to export pins and parameters. It consists of several “C” +permitted to export pins and parameters. It consists of several "C" functions (as opposed to HAL functions): ---- diff --git a/docs/src/motion/tweaking-steppers.adoc b/docs/src/motion/tweaking-steppers.adoc index cf10b881b58..49e8871d4a0 100644 --- a/docs/src/motion/tweaking-steppers.adoc +++ b/docs/src/motion/tweaking-steppers.adoc @@ -72,16 +72,16 @@ for) the data sheet that has your drive's specs. From the Gecko G202 manual: .... Step Frequency: 0 to 200 kHz -Step Pulse “0” Time: 0.5 us min (Step on falling edge) -Step Pulse “1” Time: 4.5 us min +Step Pulse "0" Time: 0.5 us min (Step on falling edge) +Step Pulse "1" Time: 4.5 us min Direction Setup: 1 us min (20 us min hold time after Step edge) .... From the Gecko G203V manual: .... Step Frequency: 0 to 333 kHz -Step Pulse “0” Time: 2.0 us min (Step on rising edge) -Step Pulse “1” Time: 1.0 us min +Step Pulse "0" Time: 2.0 us min (Step on rising edge) +Step Pulse "1" Time: 1.0 us min Direction Setup: 200 ns (0.2 us) before step pulse rising edge diff --git a/docs/src/plasma/plasma-cnc-primer.adoc b/docs/src/plasma/plasma-cnc-primer.adoc index bed813f9171..a3ff20217c6 100644 --- a/docs/src/plasma/plasma-cnc-primer.adoc +++ b/docs/src/plasma/plasma-cnc-primer.adoc @@ -24,10 +24,10 @@ This start type is widely employed, and has been around the longest. Although it === Blowback Start -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 +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 -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. +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. == CNC Plasma @@ -51,8 +51,8 @@ image::images/primer_volts-height.png[width=50%] This graph was prepared from a sample of about 16,000 readings at varying cut height and the regression analysis shows 7.53 volts per mm with 99.4% confidence. In this particular instance this sample was taken from an Everlast 50 amp machine being controlled by Linuxcnc. -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 volts per mm. This can be restated to be 1 volt per 0.1mm (0.04”). -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 volt higher than the manufacturers specification, the controller simply needs to lower the torch by 0.1 mm (0.04”) to move back to the desired cut height. A torch height control unit (THC) is traditionally used to manage this process. +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 volts per mm. This can be restated to be 1 volt per 0.1mm (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 volt higher than the manufacturers specification, the controller simply needs to lower the torch by 0.1 mm (0.004") to move back to the desired cut height. A torch height control unit (THC) is traditionally used to manage this process. == Choosing a Plasma Machine for CNC operations @@ -77,26 +77,26 @@ In recent times, another class of machine which includes some of these features == Types Of Torch Height Control -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. +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. -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. +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. 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. 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 <> configuration was incorporated into LinuxCNC 2.8. -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. +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. == Arc OK Signal 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. -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. +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. -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. +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. == Initial Height Sensing -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: +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: === Float Switches @@ -127,7 +127,7 @@ To implement this method, a second encoder input is required. 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. -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. +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. The following circuit diagram shows how to implement a hypersensing circuit. @@ -158,7 +158,7 @@ setp ohmicsense.ohmic-threshold 22.0 setp ohmicsense.ohmic-low 1.0 net ohmic-vel ohmicsense.velocity-in <= hm2_7i76e.0.encoder.02.velocity -# --- Replace QtPlasmaC’s Ohmic sensing signal --- +# --- Replace QtPlasmaC's Ohmic sensing signal --- unlinkp debounce.0.2.in net ohmic-true ohmicsense.ohmic-on => debounce.0.2.in net plasmac:ohmic-enable => ohmicsense.is-probing @@ -170,20 +170,20 @@ When an arc is established, arc voltage peaks significantly and then settles bac image::images/primer_thc-delay.png[width=100%] -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. +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. -In our testing this varies between machines and material from 0.5 to 1.5 seconds. Therefore a delay of 1.5 seconds 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. +In our testing this varies between machines and material from 0.5 to 1.5 seconds. Therefore a delay of 1.5 seconds 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. NOTE: 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. == Torch Voltage Sampling -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. +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. == Torch Breakaway -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. +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. == Corner Lock / Velocity Anti-Dive @@ -214,7 +214,7 @@ The generally accepted method to get good holes from 37mm dia. and down to mater . Use perpendicular lead in. . No lead out, either a slight over burn or early torch off depending on what works best for you. -You will need to experiment to get exact hole size because the kerf with this method will be wider than your usual straight cut.” +You will need to experiment to get exact hole size because the kerf with this method will be wider than your usual straight cut." 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. @@ -225,7 +225,7 @@ From the preceding discussion it is evident that the plasma controller needs to . Remap the F command and save the commanded feedrate set in G-Code via an M67/M68 command . Storing the cut charts in the plasma controller and allow the current feedrate be queried by the G-Code program (as QtPlasmaC does) -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 +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 == I/O Pins For Plasma Controllers @@ -275,9 +275,9 @@ WARNING: It is strongly recommended that the torch cannot be enabled while this * An isolated power supply triggers a relay when the torch shield contacts the material. * Connect field power to one output terminal and the other to the input. * Take care to observe relay polarity if opto-coupled solid State relays are used. -* Usually connected to 'motion.probe-input' and may be or’d with the float switch. +* Usually connected to 'motion.probe-input' and may be or'd with the float switch. -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. +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. === Torch Breakaway Sensor @@ -330,9 +330,9 @@ NOTE: Integrators should familiarise themselves with the Linuxcnc documentation == External Offsets and Plasma Cutting -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. +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. -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. +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. Example: On a metric machine with a NEMA23 motor with a direct drive to a 5mm ball screw, 60 mm/second maximum velocity and 700 mm/sec/sec acceleration were determined to be safe values without loss of steps. For this machine, set the Z axis in the ini file as follows: @@ -418,7 +418,7 @@ Because there is not likely to be any significant EMI, you should be able to saf * 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. -* 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 amp Thermal Dynamics plasma cutter. +* 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 amp Thermal Dynamics plasma cutter. .HF Start @@ -450,9 +450,9 @@ Plasma cutting is inherently an extremely hostile and noisy electrical environme 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. -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. +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. -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.” +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." 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). @@ -460,7 +460,7 @@ External wiring to motors should be shielded and appropriately sized to handle t 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. -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)”. +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)". == Water Tables @@ -480,11 +480,11 @@ Stepper motors suffer from resonance and a direct drive pinion is likely to mean == QtPlasmaC LinuxCNC Plasma Configuration -The <> 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. +The <> 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. 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. -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. +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. == Hypertherm RS485 Control diff --git a/share/qtvcp/screens/woodpecker/images/QTvcp Widgets.html b/share/qtvcp/screens/woodpecker/images/QTvcp Widgets.html index 2d3bac30582..8dd0445db63 100644 --- a/share/qtvcp/screens/woodpecker/images/QTvcp Widgets.html +++ b/share/qtvcp/screens/woodpecker/images/QTvcp Widgets.html @@ -215,7 +215,7 @@

      QTvcp Widgets

      1. HAL Only Widgets

      -

      These Widgets usually have HAL pins and don’t react to the machine Controller

      +

      These Widgets usually have HAL pins and don't react to the machine Controller

      1.1. XEmbed Widget

      Allows one to embed program into the widget.
      @@ -255,7 +255,7 @@

      1.3. LED Widget

      Figure 1. LED
      -

      An indicator that optionally follows a HAL pin’s logic.

      +

      An indicator that optionally follows a HAL pin's logic.

      • @@ -299,7 +299,7 @@

        1.3. LED Widget

      The LED properties can be defined in a stylesheet with the following code added to the .qss file.
      -The name_of_led would be the name defined Designer’s editor.

      +The name_of_led would be the name defined Designer's editor.

      LED #name_0f_led{
      @@ -312,13 +312,13 @@ 

      1.3. LED Widget

      1.4. Checkbox Widget

      This widget allows the user to check a box to set a HAL pin true or false.

      -

      It is based on pyQT’s QCheckButton

      +

      It is based on pyQT's QCheckButton

      1.5. Radio Button Widget

      This widget allows a user to set HAL pins true or false.
      Only one widget of a group can be true at a time.

      -

      It is based on pyQT’s QRadioButton

      +

      It is based on pyQT's QRadioButton

      1.6. Push Button Widget

      @@ -407,7 +407,7 @@

      1.6.1. LED indicator option

      1.6.2. Text changes on state

      Choosing the checked_state_text_option allows a checkable button to change the text based
      -on it’s checked state. It uses the properties true_state_string and false_state_string
      +on it's checked state. It uses the properties true_state_string and false_state_string
      to specify the text for each state.

      @@ -420,13 +420,13 @@

      1.6.3. Call python commands on state

      The capitalized word INSTANCE will give access to the widgets instances and handler functions.
      eg. INSTANCE.my_handler_function_call(True)
      -The capitalized word ACTION will give access to qtvcp’s ACTION library.
      +The capitalized word ACTION will give access to qtvcp's ACTION library.
      eg. ACTION.TOGGLE_FLOOD()
      -The capitalized word PROGRAM_LOADER will give access to qtvcp’s PROGRAM_LOADER library.
      +The capitalized word PROGRAM_LOADER will give access to qtvcp's PROGRAM_LOADER library.
      eg. PROGRAM_LOADER.load_halshow()
      -The capitalized word HAL will give access to HAL’s python module.
      +The capitalized word HAL will give access to HAL's python module.
      eg. HAL.set_p('motion.probe-input,1)'

      -

      It is based on pyQT’s QpushButton

      +

      It is based on pyQT's QpushButton

      @@ -447,12 +447,12 @@

      1.7. Focus Overlay Widget

      1.8. Grid Layout Widget

      This widget controls if the widgets inside it are enabled or disabled.
      disabled widgets are typically a different colour and do not respond to actions.

      -

      It is based on pyQT’s QGridLayout

      +

      It is based on pyQT's QGridLayout

      1.9. LCD Number Widget

      This widget displays HAL float values in a LCD looking way.

      -

      It is based on pyQT’s QLCDNumber

      +

      It is based on pyQT's QLCDNumber

      1.10. CamView Widget

      @@ -474,8 +474,8 @@

      1.12. GeneralHALOutput Widget

      1.13. WidgetSwitcher Widget

      This is used to switch the view of a multi-widget layout to show just one widget.
      This might be used to flip between a large view of a widget or a smaller multi widget view.
      -I’ts 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 then it originally had.
      +I'ts 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 then it originally had.
      The original widget must be in a layout for switcher to put it back.

      In Designer you will add the widgetswitcher widget on screen.
      @@ -609,7 +609,7 @@

      2.1. Action Button Widget

      pan-left, pan-right, rotate-up, rotate-down, rotate-cw, rotate-ccw
      command string - MDI command string that will be invoked if the MDI command action is selected.
      ini_mdi_number - a reference to the INI file [MDI_COMMAND_LIST] section.
      -Set an integer of select one line under the INI’s MDI_COMMAND line starting at 0.
      +Set an integer of select one line under the INI's MDI_COMMAND line starting at 0.
      Then in the INI file, under the heading [MDI_COMMAND_LIST] add a line:
      MDI_COMMAND=<some command>

      Action buttons are subclasssed from indicated_PushButton

      @@ -689,7 +689,7 @@

      2.1.1. LED indicator option

      2.1.2. Text changes on state

      Choosing the checked_state_text_option allows a checkable button to change the text based
      -on it’s checked state. It uses the properties true_state_string and false_state_string
      +on it's checked state. It uses the properties true_state_string and false_state_string
      to specify the text for each state.

      @@ -702,13 +702,13 @@

      2.1.3. Call python commands on state The capitalized word INSTANCE will give access to the widgets instances and handler functions.
      eg. INSTANCE.my_handler_function_call(True)
      -The capitalized word ACTION will give access to qtvcp’s ACTION library.
      +The capitalized word ACTION will give access to qtvcp's ACTION library.
      eg. ACTION.TOGGLE_FLOOD()
      -The capitalized word PROGRAM_LOADER will give access to qtvcp’s PROGRAM_LOADER library.
      +The capitalized word PROGRAM_LOADER will give access to qtvcp's PROGRAM_LOADER library.
      eg. PROGRAM_LOADER.load_halshow()
      -The capitalized word HAL will give access to HAL’s python module.
      +The capitalized word HAL will give access to HAL's python module.
      eg. HAL.set_p('motion.probe-input,1)'
      -Indicated PushButtons and Actionbuttons are based on pyQT’s QPushButton

      +Indicated PushButtons and Actionbuttons are based on pyQT's QPushButton

      @@ -746,7 +746,7 @@

      2.3. Axis Tool Button

    You select the axis by setting the joint number
    You can select a halpin option that is set true when the axis is selected

    -

    It is based on pyQT’s QToolButton

    +

    It is based on pyQT's QToolButton

    2.4. Camview Widget

    @@ -761,11 +761,11 @@

    2.5. DRO Widget

    metric_template imperial_template angular_template

    -

    It is based on pyQT’s QLabel

    +

    It is based on pyQT's QLabel

    2.6. GcodeDisplay

    -

    It is based on pyQT’s

    +

    It is based on pyQT's

    2.7. GcodeEditor Widget

    @@ -776,7 +776,7 @@

    2.7. GcodeEditor Widget

    into the MDILine widget.
    It has a signal percentDone(int) that that can be connected to a slot (such as a
    progressBar to display percent run)

    -

    It is based on pyQT’s QsciScintilla

    +

    It is based on pyQT's QsciScintilla

    2.8. GCodeGraphics Widget

    @@ -830,7 +830,7 @@

    2.8.1. ACTION functions

    ACTION.ADJUST_PAN(X,Y) -directly set the relative pan of view in x and y direction

    ACTION.ADJUST_ROTATE(X,Y) -directly set the relative rotation of view in x and y direction

    -

    It is based on pyQT’s opengl widget.

    +

    It is based on pyQT's opengl widget.

    @@ -843,7 +843,7 @@

    2.9. StateLabel Widget

    Diameter Mode
    FPR Mode
    Metric Mode

    -

    It is based on pyQT’s QLabel

    +

    It is based on pyQT's QLabel

    2.10. StatusLabel Widget

    @@ -861,7 +861,7 @@

    2.10. StatusLabel Widget

    Current Feedrate
    Requested Spindle Speed
    User System

    -

    It is based on pyQT’s QLabel

    +

    It is based on pyQT's QLabel

    2.11. StatusImageSwicher Widget

    @@ -895,10 +895,10 @@

    2.11. StatusImageSwicher Widget

    2.12. StatusStacked

    -

    This widget displays one of three panels based on linuxcnc’s mode.
    +

    This widget displays one of three panels based on linuxcnc's mode.
    This allows you to automatically display different widgets on Manual, MDI and Auto modes.

    todo
    -It is based on pyQT’s QStacked widget.

    +It is based on pyQT's QStacked widget.

    2.13. Jog Increments Widget

    @@ -908,11 +908,11 @@

    2.13. Jog Increments Widget

    This will be available to all widgets through STATUS.
    You can select linear or angular increments by the property linear_option
    in Designer property editor.

    -

    It is based on pyQT’s combobox

    +

    It is based on pyQT's combobox

    2.14. ScreenOption widget

    -

    This widget doesn’t add anything visually to a screen but sets up important
    +

    This widget doesn't add anything visually to a screen but sets up important
    options. This is the preferred way to use these options

    These include:
    • @@ -1066,7 +1066,7 @@

      2.15. StatusSlider Widget

    -

    It is based on pyQT’s QSlider

    +

    It is based on pyQT's QSlider

    2.16. State LED Widget

    @@ -1213,7 +1213,7 @@

    2.16. State LED Widget

  • The LED properties can be defined in a stylesheet with the following code added to the .qss file.
    -The name_of_led would be the name defined Designer’s editor.

    +The name_of_led would be the name defined Designer's editor.

    State_LED #name_0f_led{
    @@ -1256,13 +1256,13 @@ 

    2.17. StatusAdjustmentBar

    -

    It is based on pyQT’s QProgressBar

    +

    It is based on pyQT's QProgressBar

    2.18. SystemToolButton

    This widget allows you to manually select a user system by pressing and holding.
    -If you don’t set the button text it will automatically update to the current system.

    -

    It is based on pyQT’s QToolButton

    +If you don't set the button text it will automatically update to the current system.

    +

    It is based on pyQT's QToolButton

    2.19. MacroTab Widget

    @@ -1384,7 +1384,7 @@

    2.20. MDILine Widget

    -

    It is based on pyQT’s QLineEdit

    +

    It is based on pyQT's QLineEdit

    2.21. MDIHistory

    @@ -1447,8 +1447,8 @@

    2.22. MDITouchy

    Figure 6. MDI Touchy

    This widget display button and entry lines for use with entering MDI commands.
    -It is based on Linuxcnc’s Touchy screen’s MDI entry process.
    -It’s large buttons are most useful for touch screens.
    +It is based on Linuxcnc's Touchy screen's MDI entry process.
    +It's large buttons are most useful for touch screens.

    To use MDITouchy, first press one of the G/XY, G/RO, M or T button.
    On the left, will show the current line that can be filled out, then press Next for the next line.
    @@ -1456,7 +1456,7 @@

    2.22. MDITouchy

    Clear clears th ecurrent entry.
    Back allows you to change previous line entries.

    -The widget requires an explicied call to MDITouchu’s python code to actually run the MDI command
    +The widget requires an explicied call to MDITouchu's python code to actually run the MDI command
    For handler file code: if the widget was named mditouchy in designer, this command would
    run the displayed MDI command.

    @@ -1466,14 +1466,14 @@

    2.22. MDITouchy

    http://www.gnu.org/software/src-highlite -->
    self.w.mditouchy.run_command()

    For action button use: if the widget was named mditouchy in designer,
    -use the action button’s Call python commands option and enter:

    +use the action button's Call python commands option and enter:

    INSTANCE.mditouchy.run_command()
    -

    The macro button will cycle though macro’s defined in the INI heading [DISPLAY]
    +

    The macro button will cycle though macro's defined in the INI heading [DISPLAY]
    add one or more 'MACRO = ' lines. Each should be of the format: